Repository: scottbez1/splitflap Branch: master Commit: 76252e0ed1de Files: 408 Total size: 6.4 MB Directory structure: gitextract_endh529h/ ├── .github/ │ ├── FUNDING.yml │ └── workflows/ │ ├── 3d.yml │ ├── electronics.yml │ ├── electronics_v2.yml │ ├── js.yml │ └── pio.yml ├── .gitignore ├── .gitmodules ├── 3d/ │ ├── 28byj-48.scad │ ├── assert.scad │ ├── color_util.scad │ ├── combined_front_panel.scad │ ├── flap.scad │ ├── flap_3dp.scad │ ├── flap_characters.scad │ ├── flap_dimensions.scad │ ├── flap_fonts.scad │ ├── font_generator.scad │ ├── fonts/ │ │ ├── Epilogue/ │ │ │ └── OFL.txt │ │ └── roboto/ │ │ └── LICENSE.txt │ ├── global_constants.scad │ ├── label.scad │ ├── m4_dimensions.scad │ ├── pcb.scad │ ├── projection_renderer.scad │ ├── rough7380.scad │ ├── scripts/ │ │ ├── colored_stl_exporter.py │ │ ├── dependencies.sh │ │ ├── generate_2d.py │ │ ├── generate_3d_print_flaps.py │ │ ├── generate_combined_front_panel.py │ │ ├── generate_fonts.py │ │ ├── generate_gif.py │ │ ├── generate_snapshot.py │ │ ├── generate_stl.py │ │ ├── kerf_presets.py │ │ ├── openscad.py │ │ ├── projection_renderer.py │ │ ├── requirements.txt │ │ └── svg_processor.py │ ├── sensor_pcb_dimensions.scad │ ├── shapes.scad │ ├── splitflap.scad │ ├── spool.scad │ └── tools/ │ ├── classic_pcb_mount.scad │ ├── connector_case.scad │ ├── flap_container.scad │ ├── mounting_bracket.scad │ ├── punch_jig.scad │ └── scoring_jig.scad ├── LICENSE.txt ├── README.md ├── __init__.py ├── arduino/ │ └── splitflap/ │ └── MOVED.txt ├── docs/ │ ├── DocumentationIndex.md │ ├── ElectronicsGuide.md │ ├── Flaps.md │ ├── MotorGuide.md │ ├── OpenSauce2024.md │ ├── v0/ │ │ ├── Assembly.md │ │ ├── OrderingComplete.md │ │ └── OrderingEasy.md │ └── v2/ │ ├── Assembly.md │ ├── OrderingComplete.md │ └── OrderingEasy.md ├── electronics/ │ ├── __init__.py │ ├── chainlinkBase/ │ │ ├── .gitignore │ │ ├── chainlinkBase-cache.lib │ │ ├── chainlinkBase.kibot.yml │ │ ├── chainlinkBase.kicad_pcb │ │ ├── chainlinkBase.lib │ │ ├── chainlinkBase.pro │ │ ├── chainlinkBase.sch │ │ ├── fp-lib-table │ │ ├── powerChannel.sch │ │ └── sym-lib-table │ ├── chainlinkBuddyBreadboard/ │ │ ├── chainlinkBuddyBreadboard-cache.lib │ │ ├── chainlinkBuddyBreadboard.kibot.yml │ │ ├── chainlinkBuddyBreadboard.kicad_pcb │ │ ├── chainlinkBuddyBreadboard.pro │ │ ├── chainlinkBuddyBreadboard.sch │ │ ├── fp-lib-table │ │ ├── kikit_panelize.json │ │ └── sym-lib-table │ ├── chainlinkBuddyTDisplay/ │ │ ├── chainlinkBuddyTDisplay-cache.lib │ │ ├── chainlinkBuddyTDisplay.kibot.yml │ │ ├── chainlinkBuddyTDisplay.kicad_pcb │ │ ├── chainlinkBuddyTDisplay.pro │ │ ├── chainlinkBuddyTDisplay.sch │ │ ├── fp-lib-table │ │ ├── kikit_panelize.json │ │ └── sym-lib-table │ ├── chainlinkDriver/ │ │ ├── .gitignore │ │ ├── chainlinkDriver-cache.lib │ │ ├── chainlinkDriver.kibot.yml │ │ ├── chainlinkDriver.kicad_pcb │ │ ├── chainlinkDriver.lib │ │ ├── chainlinkDriver.pro │ │ ├── chainlinkDriver.sch │ │ ├── fp-lib-table │ │ └── sym-lib-table │ ├── chainlinkDriverTester/ │ │ ├── .gitignore │ │ ├── chainlinkDriverTester-cache.lib │ │ ├── chainlinkDriverTester.kibot.yml │ │ ├── chainlinkDriverTester.kicad_pcb │ │ ├── chainlinkDriverTester.lib │ │ ├── chainlinkDriverTester.pro │ │ ├── chainlinkDriverTester.sch │ │ ├── fp-lib-table │ │ └── sym-lib-table │ ├── lib/ │ │ ├── 54-00131.STEP │ │ ├── 74HC125.dcm │ │ ├── 74HC125.lib │ │ ├── 74HC165-DIP.pretty/ │ │ │ └── 74HC165_DIP-16_W7.62mm.kicad_mod │ │ ├── 74HC165.lib │ │ ├── 74HC165_2.dcm │ │ ├── 74HC165_2.lib │ │ ├── ArduinoUnoShield.pretty/ │ │ │ └── arduino_uno_shield.kicad_mod │ │ ├── BK-6013.models/ │ │ │ └── Memory_Protection_Devices_-_BK-6013.step │ │ ├── BK-6013.pretty/ │ │ │ ├── BK-6013.kicad_mod │ │ │ └── Memory_Protection_Devices-BK-6013-0-0-0.kicad_mod │ │ ├── Buck.pretty/ │ │ │ ├── BuckModule.kicad_mod │ │ │ └── BuckModuleBackSilk.kicad_mod │ │ ├── BuckModule.dcm │ │ ├── BuckModule.lib │ │ ├── CustomPower.dcm │ │ ├── CustomPower.lib │ │ ├── CustomSymbols.pretty/ │ │ │ └── PolarityCenterPositive.kicad_mod │ │ ├── DML3006LFDS.dcm │ │ ├── DML3006LFDS.lib │ │ ├── Dummy.pretty/ │ │ │ └── Dummy.kicad_mod │ │ ├── ESP32.pretty/ │ │ │ ├── D1_32.kicad_mod │ │ │ ├── T-DISPLAY.kicad_mod │ │ │ ├── T-DISPLAY_extra_pins.kicad_mod │ │ │ ├── T-DISPLAY_extra_pins_labeled.kicad_mod │ │ │ └── T-DISPLAY_extra_pins_labeled_double.kicad_mod │ │ ├── ESP32Modules.dcm │ │ ├── ESP32Modules.lib │ │ ├── GP2S60.pretty/ │ │ │ ├── GP2S60.kicad_mod │ │ │ └── GP2S60_WITH_MOUNT.kicad_mod │ │ ├── INA219.pretty/ │ │ │ ├── INA219_LARGE.kicad_mod │ │ │ └── INA219_SMALL.kicad_mod │ │ ├── INA219_Breakout.dcm │ │ ├── INA219_Breakout.lib │ │ ├── JLCPCB.pretty/ │ │ │ └── AssemblyToolingHole.kicad_mod │ │ ├── JST_XH_Connectors.pretty/ │ │ │ └── JST_XH_2-5mm_5pin.kicad_mod │ │ ├── LCD.dcm │ │ ├── LCD.lib │ │ ├── LED3mmBetterSilkScreen.pretty/ │ │ │ └── LED_D3.0mm.kicad_mod │ │ ├── LM339.dcm │ │ ├── LM339.lib │ │ ├── LevelShifterModule.dcm │ │ ├── LevelShifterModule.lib │ │ ├── LevelShifterModule.pretty/ │ │ │ └── LevelShifterModule.kicad_mod │ │ ├── MIC5842.dcm │ │ ├── MIC5842.lib │ │ ├── Mega2560Shield.dcm │ │ ├── Mega2560Shield.lib │ │ ├── Mega2560Shield.pretty/ │ │ │ ├── Mega2560Shield.kicad_mod │ │ │ └── Mega2560Shield_Modified.kicad_mod │ │ ├── ModifiedSymbols.pretty/ │ │ │ ├── IDC-Header_2x04_P2.54mm_Vertical.kicad_mod │ │ │ ├── LED_0603_1608Metric_Silkscreen.kicad_mod │ │ │ ├── LED_0805_2012Metric_Silkscreen.kicad_mod │ │ │ ├── LED_WS2812B_PLCC4_5.0x5.0mm_P3.2mm.kicad_mod │ │ │ ├── PinHeader_1x03_P2.54mm_Vertical_SolderJumper.kicad_mod │ │ │ ├── PinHeader_1x05_P2.54mm_Vertical_NoSilk.kicad_mod │ │ │ ├── PinHoles_1x04_P2.54mm_NoSilk.kicad_mod │ │ │ ├── Pin_Header_Right_Angle_1x03.kicad_mod │ │ │ ├── SOIC-14_3.9x8.7mm_P1.27mm_silk.kicad_mod │ │ │ ├── SOIC-16_3.9x9.9mm_P1.27mm_silk.kicad_mod │ │ │ └── TO-220-3_Vertical.kicad_mod │ │ ├── MountingHoles.pretty/ │ │ │ ├── M4_mount.kicad_mod │ │ │ ├── M4_mount_2mm_play.kicad_mod │ │ │ └── M4_mount_4mm_play.kicad_mod │ │ ├── NCP45560.dcm │ │ ├── NCP45560.lib │ │ ├── PJ-202A.pretty/ │ │ │ └── PJ-202A.kicad_mod │ │ ├── PinHeaders.pretty/ │ │ │ ├── Pin_Header_Straight_1x03.kicad_mod │ │ │ ├── Pin_Header_Straight_1x04.kicad_mod │ │ │ └── Pin_Header_Straight_2x07_Pitch2.54mm_IDC_Shrouded.kicad_mod │ │ ├── Pogo.models/ │ │ │ ├── pogo1mmPoint.step │ │ │ └── pogo2mmCup.step │ │ ├── RS485.pretty/ │ │ │ └── RS485Module.kicad_mod │ │ ├── RS485Module.dcm │ │ ├── RS485Module.lib │ │ ├── Resistor0805ThroughHole.pretty/ │ │ │ └── R_0805_ThroughHole.kicad_mod │ │ ├── SSD1306.pretty/ │ │ │ └── SSD1306_128x32.kicad_mod │ │ ├── ST7789.pretty/ │ │ │ ├── ST7789_240x240.kicad_mod │ │ │ └── ST7789_80x160.kicad_mod │ │ ├── ScrewTerminals.pretty/ │ │ │ ├── C72334_WJ500V-5.08-3P.kicad_mod │ │ │ ├── C8465_WJ500V-5.08-2P.kicad_mod │ │ │ ├── EB147A-02-D.kicad_mod │ │ │ ├── Generic-5.08-2P.kicad_mod │ │ │ └── Generic-5.08-3P.kicad_mod │ │ ├── SolderJumpers.pretty/ │ │ │ └── SolderJumper-2_P1.3mm_Bridged_Pad1.0x1.5mm.kicad_mod │ │ ├── SwitchESE13.pretty/ │ │ │ └── ESE13V01D.kicad_mod │ │ ├── TTGO.models/ │ │ │ └── TTGO_TDisplay.step │ │ ├── ULN2003AModule.dcm │ │ ├── ULN2003AModule.lib │ │ ├── ULN2003AModule.pretty/ │ │ │ ├── ULN2003AModule.kicad_mod │ │ │ ├── ULN2003AModule_No_EN.kicad_mod │ │ │ └── ULN2003AModule_No_EN_No_FSilk.kicad_mod │ │ ├── VN7003ALHTR.models/ │ │ │ └── STMicroelectronics_-_VN7003ALHTR.step │ │ ├── VN7007ALHTR.dcm │ │ ├── VN7007ALHTR.lib │ │ ├── VN7007ALHTR.pretty/ │ │ │ └── VN7007ALHTR.kicad_mod │ │ ├── arduino_uno_shield.dcm │ │ ├── arduino_uno_shield.lib │ │ ├── gp2s60.dcm │ │ ├── gp2s60.lib │ │ ├── hall_effect.dcm │ │ ├── hall_effect.lib │ │ ├── hall_effect.pretty/ │ │ │ ├── hall_effect.kicad_mod │ │ │ └── hall_effect_wide.kicad_mod │ │ ├── mount.dcm │ │ ├── mount.lib │ │ ├── no_pin.dcm │ │ ├── no_pin.lib │ │ ├── oled.dcm │ │ ├── oled.lib │ │ ├── pogoPins.pretty/ │ │ │ ├── pogo1mm.kicad_mod │ │ │ └── pogo2mm.kicad_mod │ │ ├── screw_terminal_01x03_power_output.dcm │ │ ├── screw_terminal_01x03_power_output.lib │ │ ├── sensor_smd_lib.pretty/ │ │ │ ├── SolderJumper-2_P1.3mm_Bridged_Pad1.0x1.5mm.kicad_mod │ │ │ ├── header_3.kicad_mod │ │ │ ├── header_3_smd.kicad_mod │ │ │ └── hole_9.4.kicad_mod │ │ ├── ws2812b.dcm │ │ └── ws2812b.lib │ ├── scripts/ │ │ ├── __init__.py │ │ ├── config/ │ │ │ ├── eeschema │ │ │ ├── kikit_panelize_classic.json │ │ │ ├── kikit_panelize_sensor.json │ │ │ ├── pcbnew │ │ │ └── policy.xml │ │ ├── dependencies.sh │ │ ├── dependencies_v2.sh │ │ ├── export_3d.py │ │ ├── export_jlcpcb.py │ │ ├── export_schematic.py │ │ ├── export_util.py │ │ ├── generate_pdf.py │ │ ├── generate_svg.py │ │ ├── pcb_util.py │ │ └── svg_processor.py │ ├── sensor/ │ │ ├── fp-lib-table │ │ ├── sensor-cache.lib │ │ ├── sensor.kicad_pcb │ │ ├── sensor.pro │ │ ├── sensor.sch │ │ └── sym-lib-table │ └── sensor_smd/ │ ├── fp-lib-table │ ├── kikit_panelize.json │ ├── sensor_smd-panelized.kibot.yml │ ├── sensor_smd.kibot.yml │ ├── sensor_smd.kicad_pcb │ ├── sensor_smd.kicad_prl │ ├── sensor_smd.kicad_pro │ └── sensor_smd.kicad_sch ├── firmware/ │ ├── .gitignore │ ├── buildscript_build_info_macros.py │ ├── esp32/ │ │ ├── .gitignore │ │ ├── README.md │ │ ├── base/ │ │ │ ├── base_config.h │ │ │ ├── base_supervisor_task.cpp │ │ │ └── base_supervisor_task.h │ │ ├── core/ │ │ │ ├── common.h │ │ │ ├── configuration.cpp │ │ │ ├── configuration.h │ │ │ ├── logger.h │ │ │ ├── recursive_semaphore_guard.h │ │ │ ├── semaphore_guard.h │ │ │ ├── splitflap_task.cpp │ │ │ ├── splitflap_task.h │ │ │ ├── task.h │ │ │ ├── uart_stream.cpp │ │ │ └── uart_stream.h │ │ ├── proto_gen/ │ │ │ ├── splitflap.pb.c │ │ │ └── splitflap.pb.h │ │ ├── splitflap/ │ │ │ ├── crc32.cpp │ │ │ ├── crc32.h │ │ │ ├── debug_build_info.cpp │ │ │ ├── debug_build_info.h │ │ │ ├── display_layouts.h │ │ │ ├── display_task.cpp │ │ │ ├── display_task.h │ │ │ ├── http_task.cpp │ │ │ ├── http_task.h │ │ │ ├── main.cpp │ │ │ ├── mqtt_task.cpp │ │ │ ├── mqtt_task.h │ │ │ ├── secrets.h.example │ │ │ ├── serial_legacy_json_protocol.cpp │ │ │ ├── serial_legacy_json_protocol.h │ │ │ ├── serial_proto_protocol.cpp │ │ │ ├── serial_proto_protocol.h │ │ │ ├── serial_protocol.h │ │ │ ├── serial_task.cpp │ │ │ └── serial_task.h │ │ └── tester/ │ │ ├── base64url.cpp │ │ ├── base64url.h │ │ ├── firestore.cpp │ │ ├── firestore.h │ │ ├── firestore_test_reporter.cpp │ │ ├── firestore_test_reporter.h │ │ ├── jwt.cpp │ │ ├── jwt.h │ │ ├── main.cpp │ │ ├── result.h │ │ ├── secrets.h.example │ │ ├── tester_task.cpp │ │ └── tester_task.h │ ├── include/ │ │ └── README │ ├── lib/ │ │ ├── README │ │ └── json11/ │ │ ├── CMakeLists.txt │ │ ├── LICENSE.txt │ │ ├── Makefile │ │ ├── README.md │ │ ├── json11.cpp │ │ ├── json11.hpp │ │ ├── json11.pc.in │ │ └── test.cpp │ ├── src/ │ │ ├── Adafruit_INA219.cpp │ │ ├── Adafruit_INA219.h │ │ ├── acceleration.h │ │ ├── basic_io_config.h │ │ ├── config.h │ │ ├── generate_acceleration.py │ │ ├── spi_io_config.h │ │ ├── splitflap_module.h │ │ └── splitflap_module_data.h │ └── test/ │ └── README ├── platformio.ini ├── proto/ │ ├── generate_protobuf.py │ └── splitflap.proto ├── scripts/ │ ├── annotate_image.sh │ └── video_thumb/ │ └── generate_thumbnail.sh ├── software/ │ ├── chainlink/ │ │ ├── README.md │ │ ├── demo.py │ │ ├── js/ │ │ │ ├── .gitignore │ │ │ ├── .npmrc │ │ │ ├── README.md │ │ │ ├── package.json │ │ │ └── packages/ │ │ │ ├── example-node-cli/ │ │ │ │ ├── .eslintrc │ │ │ │ ├── .prettierrc │ │ │ │ ├── package.json │ │ │ │ ├── src/ │ │ │ │ │ └── index.ts │ │ │ │ └── tsconfig.json │ │ │ ├── example-webserial-basic/ │ │ │ │ ├── .eslintrc │ │ │ │ ├── .gitignore │ │ │ │ ├── .prettierrc │ │ │ │ ├── README.md │ │ │ │ ├── package.json │ │ │ │ ├── public/ │ │ │ │ │ ├── 3d_viewer/ │ │ │ │ │ │ ├── css/ │ │ │ │ │ │ │ └── style.css │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ └── js/ │ │ │ │ │ │ ├── OrbitControls.js │ │ │ │ │ │ ├── STLLoader.js │ │ │ │ │ │ ├── WebGL.js │ │ │ │ │ │ ├── three.js │ │ │ │ │ │ ├── url-search-params/ │ │ │ │ │ │ │ ├── LICENSE │ │ │ │ │ │ │ └── index.js │ │ │ │ │ │ └── viewer.js │ │ │ │ │ ├── embed.html │ │ │ │ │ ├── index.html │ │ │ │ │ └── robots.txt │ │ │ │ ├── src/ │ │ │ │ │ ├── App.tsx │ │ │ │ │ ├── index.tsx │ │ │ │ │ ├── react-app-env.d.ts │ │ │ │ │ └── util.ts │ │ │ │ └── tsconfig.json │ │ │ ├── splitflapjs-core/ │ │ │ │ ├── .eslintrc │ │ │ │ ├── .prettierrc │ │ │ │ ├── package.json │ │ │ │ ├── src/ │ │ │ │ │ ├── cobs.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── util.ts │ │ │ │ └── tsconfig.json │ │ │ ├── splitflapjs-node/ │ │ │ │ ├── .eslintrc │ │ │ │ ├── .prettierrc │ │ │ │ ├── package.json │ │ │ │ ├── src/ │ │ │ │ │ └── index.ts │ │ │ │ └── tsconfig.json │ │ │ ├── splitflapjs-proto/ │ │ │ │ └── package.json │ │ │ └── splitflapjs-webserial/ │ │ │ ├── .eslintrc │ │ │ ├── .prettierrc │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ └── index.ts │ │ │ └── tsconfig.json │ │ ├── proto_gen/ │ │ │ ├── nanopb_pb2.py │ │ │ └── splitflap_pb2.py │ │ ├── requirements.txt │ │ └── splitflap_proto.py │ └── classic/ │ ├── demo.py │ ├── flap_test.py │ ├── splitflap.py │ └── terminal.py ├── thirdparty/ │ ├── README │ ├── __init__.py │ ├── panelize.py │ └── xvfbwrapper/ │ ├── LICENSE.txt │ ├── __init__.py │ └── xvfbwrapper.py └── util/ ├── __init__.py ├── app_paths.py ├── file_util.py ├── inkscape.py └── rev_info.py ================================================ FILE CONTENTS ================================================ ================================================ FILE: .github/FUNDING.yml ================================================ # These are supported funding model platforms github: scottbez1 ================================================ FILE: .github/workflows/3d.yml ================================================ name: Render 3D Designs on: push: pull_request: jobs: render-3d: runs-on: ubuntu-20.04 steps: - name: Checkout code uses: actions/checkout@v2 - name: Set up outputs directory run: mkdir -p 3d/build/outputs - name: Install dependencies run: ./3d/scripts/dependencies.sh - name: 'Generate front panel example :: 52 flap :: 6x1 :: Elecrow acrylic kerf' run: | xvfb-run --auto-servernum --server-args "-screen 0 1024x768x24" python3 -u 3d/scripts/generate_combined_front_panel.py --kerf-preset elecrow-3mm-acrylic --rows 1 --cols 6 --spacing-x 0 --spacing-y 0 --frame-margin-x 0 --frame-margin-y 0 --center-mode module --num-flaps 52 --render-raster cp 3d/build/front_panel/combined.svg 3d/build/outputs/3d_front_panel-52-elecrow-3mm-acrylic-6x1.svg cp 3d/build/front_panel/raster.png 3d/build/outputs/3d_front_panel_raster-52-elecrow-3mm-acrylic-6x1.png ./scripts/annotate_image.sh 3d/build/outputs/3d_front_panel_raster-52-elecrow-3mm-acrylic-6x1.png - name: 'Generate front panel example :: 52 flap :: 12x2 :: 1/8 in tool diameter :: frame margin=20mm, 4mm' run: | xvfb-run --auto-servernum --server-args "-screen 0 1024x768x24" python3 -u 3d/scripts/generate_combined_front_panel.py --tool-diameter 3.175 --rows 2 --cols 12 --spacing-x 0 --spacing-y 0 --frame-margin-x 20 --frame-margin-y 4 --center-mode module --num-flaps 52 --render-raster cp 3d/build/front_panel/combined.svg 3d/build/outputs/3d_front_panel-52-3.175-20x4margin-12x2.svg cp 3d/build/front_panel/raster.png 3d/build/outputs/3d_front_panel_raster-52-3.175-20x4margin-12x2.png ./scripts/annotate_image.sh 3d/build/outputs/3d_front_panel_raster-52-3.175-20x4margin-12x2.png - name: 'Generate font example :: 52 flap :: Epilogue :: 1mm bleed' run: | xvfb-run --auto-servernum --server-args "-screen 0 1024x768x24" python3 -u 3d/scripts/generate_fonts.py --mode side-by-side --font Epilogue --columns 4 --bleed 1 --fill --render-raster cp 3d/build/fonts/combined.svg 3d/build/outputs/font_example-Epilogue-1mmBleed.svg cp 3d/build/fonts/raster.png 3d/build/outputs/font_example-Epilogue-1mmBleed.png ./scripts/annotate_image.sh 3d/build/outputs/font_example-Epilogue-1mmBleed.png - name: 'Generate 2d output :: 52 flap :: generic' run: | xvfb-run --auto-servernum --server-args "-screen 0 1024x768x24" python -u 3d/scripts/generate_2d.py --calculate-dimensions --render-raster cp 3d/build/laser_parts/combined.svg 3d/build/outputs/3d_laser_vector-52.svg cp 3d/build/laser_parts/raster.png 3d/build/outputs/3d_laser_raster-52.png ./scripts/annotate_image.sh 3d/build/outputs/3d_laser_raster-52.png cp 3d/build/laser_parts/combined_module_dimensions.svg 3d/build/outputs/3d_laser_vector-52-module_dimensions.svg - name: 'Generate 2d output :: 52 flap :: Ponoko 3mm MDF' run: | xvfb-run --auto-servernum --server-args "-screen 0 1024x768x24" python3 -u 3d/scripts/generate_2d.py --calculate-dimensions --kerf-preset ponoko-3mm-mdf cp 3d/build/laser_parts/combined.svg 3d/build/outputs/3d_laser_vector-52-ponoko-3mm-mdf_1x.svg cp 3d/build/laser_parts/combined_panel_dimensions.svg 3d/build/outputs/3d_laser_vector-52-ponoko-3mm-mdf_1x_dimensions.svg - name: 'Generate 2d output :: 52 flap :: Ponoko 3mm Acrylic' run: | xvfb-run --auto-servernum --server-args "-screen 0 1024x768x24" python3 -u 3d/scripts/generate_2d.py --calculate-dimensions --kerf-preset ponoko-3mm-acrylic cp 3d/build/laser_parts/combined.svg 3d/build/outputs/3d_laser_vector-52-ponoko-3mm-acrylic_1x.svg cp 3d/build/laser_parts/combined_panel_dimensions.svg 3d/build/outputs/3d_laser_vector-52-ponoko-3mm-acrylic_1x_dimensions.svg - name: 'Generate 2d output :: 52 flap :: Elecrow 3mm Wood' run: | xvfb-run --auto-servernum --server-args "-screen 0 1024x768x24" python3 -u 3d/scripts/generate_2d.py --kerf-preset elecrow-3mm-wood --render-elecrow cp 3d/build/laser_parts/combined.svg 3d/build/outputs/3d_laser_vector-52-elecrow-3mm-wood_1x.svg cp 3d/build/laser_parts/combined_panel_dimensions.svg 3d/build/outputs/3d_laser_vector-52-elecrow-3mm-wood_1x_dimensions.svg cp 3d/build/laser_parts/elecrow.zip 3d/build/outputs/3d_laser_vector-52-elecrow-3mm-wood_1x.zip - name: 'Generate 2d output :: 52 flap :: Elecrow 3mm Acrylic' run: | xvfb-run --auto-servernum --server-args "-screen 0 1024x768x24" python3 -u 3d/scripts/generate_2d.py --kerf-preset elecrow-3mm-acrylic --render-elecrow cp 3d/build/laser_parts/combined.svg 3d/build/outputs/3d_laser_vector-52-elecrow-3mm-acrylic_1x.svg cp 3d/build/laser_parts/combined_panel_dimensions.svg 3d/build/outputs/3d_laser_vector-52-elecrow-3mm-acrylic_1x_dimensions.svg cp 3d/build/laser_parts/elecrow.zip 3d/build/outputs/3d_laser_vector-52-elecrow-3mm-acrylic_1x.zip - name: 'Generate 2d output :: 40 flap :: generic' run: | xvfb-run --auto-servernum --server-args "-screen 0 1024x768x24" python -u 3d/scripts/generate_2d.py --calculate-dimensions --render-raster --num-flaps 40 cp 3d/build/laser_parts/combined.svg 3d/build/outputs/3d_laser_vector-40.svg cp 3d/build/laser_parts/raster.png 3d/build/outputs/3d_laser_raster-40.png ./scripts/annotate_image.sh 3d/build/outputs/3d_laser_raster-40.png cp 3d/build/laser_parts/combined_module_dimensions.svg 3d/build/outputs/3d_laser_vector-40-module_dimensions.svg - name: 'Generate 2d output :: 40 flap :: Ponoko 3mm MDF)' run: | xvfb-run --auto-servernum --server-args "-screen 0 1024x768x24" python3 -u 3d/scripts/generate_2d.py --calculate-dimensions --kerf-preset ponoko-3mm-mdf --num-flaps 40 cp 3d/build/laser_parts/combined.svg 3d/build/outputs/3d_laser_vector-40-ponoko-3mm-mdf_1x.svg cp 3d/build/laser_parts/combined_panel_dimensions.svg 3d/build/outputs/3d_laser_vector-40-ponoko-3mm-mdf_1x_dimensions.svg - name: 'Generate 2d output :: 40 flap :: Ponoko 3mm Acrylic' run: | xvfb-run --auto-servernum --server-args "-screen 0 1024x768x24" python3 -u 3d/scripts/generate_2d.py --calculate-dimensions --kerf-preset ponoko-3mm-acrylic --num-flaps 40 cp 3d/build/laser_parts/combined.svg 3d/build/outputs/3d_laser_vector-40-ponoko-3mm-acrylic_1x.svg cp 3d/build/laser_parts/combined_panel_dimensions.svg 3d/build/outputs/3d_laser_vector-40-ponoko-3mm-acrylic_1x_dimensions.svg - name: 'Generate 2d output :: 40 flap :: Elecrow 3mm Wood' run: | xvfb-run --auto-servernum --server-args "-screen 0 1024x768x24" python3 -u 3d/scripts/generate_2d.py --kerf-preset elecrow-3mm-wood --render-elecrow --num-flaps 40 cp 3d/build/laser_parts/combined.svg 3d/build/outputs/3d_laser_vector-40-elecrow-3mm-wood_1x.svg cp 3d/build/laser_parts/combined_panel_dimensions.svg 3d/build/outputs/3d_laser_vector-40-elecrow-3mm-wood_1x_dimensions.svg cp 3d/build/laser_parts/elecrow.zip 3d/build/outputs/3d_laser_vector-40-elecrow-3mm-wood_1x.zip - name: 'Generate 2d output :: 40 flap :: Elecrow 3mm Acrylic' run: | xvfb-run --auto-servernum --server-args "-screen 0 1024x768x24" python3 -u 3d/scripts/generate_2d.py --kerf-preset elecrow-3mm-acrylic --render-elecrow --num-flaps 40 cp 3d/build/laser_parts/combined.svg 3d/build/outputs/3d_laser_vector-40-elecrow-3mm-acrylic_1x.svg cp 3d/build/laser_parts/combined_panel_dimensions.svg 3d/build/outputs/3d_laser_vector-40-elecrow-3mm-acrylic_1x_dimensions.svg cp 3d/build/laser_parts/elecrow.zip 3d/build/outputs/3d_laser_vector-40-elecrow-3mm-acrylic_1x.zip - name: Generate animated gif run: | xvfb-run --auto-servernum --server-args "-screen 0 1024x768x24" python3 -u 3d/scripts/generate_gif.py cp 3d/build/animation/animation.gif 3d/build/outputs/3d_animation.gif cp 3d/build/animation/all_flaps.gif 3d/build/outputs/all_flaps.gif - name: Generate STLs for web viewer run: | python -u 3d/scripts/generate_stl.py cp -r 3d/build/colored_stl 3d/build/outputs/3d_colored_stl gzip 3d/build/outputs/3d_colored_stl/*.stl - name: Archive artifacts uses: actions/upload-artifact@v4 if: always() with: name: 3d path: | 3d/build - name: Configure AWS Credentials if: github.event_name == 'push' && github.repository_owner == 'scottbez1' uses: aws-actions/configure-aws-credentials@v1 with: aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} aws-region: us-east-1 - name: Sync artifacts to S3 if: github.event_name == 'push' && github.repository_owner == 'scottbez1' run: | aws s3 sync 3d/build/outputs s3://splitflap-artifacts/${GITHUB_REF#refs/heads/}/3d --exclude '3d_colored_stl/*.stl.gz' --delete --acl public-read --cache-control max-age=0,no-cache aws s3 sync 3d/build/outputs s3://splitflap-artifacts/${GITHUB_REF#refs/heads/}/3d --exclude '*' --include '3d_colored_stl/*.stl.gz' --delete --content-encoding gzip --acl public-read --cache-control max-age=0,no-cache ================================================ FILE: .github/workflows/electronics.yml ================================================ name: Export Electronics on: push: pull_request: jobs: export-electronics-classic: name: Export Electronics (Sensor) runs-on: ubuntu-20.04 steps: - name: Checkout code uses: actions/checkout@v2 - name: Set up outputs directory run: mkdir -p electronics/build/outputs - name: Install dependencies run: ./electronics/scripts/dependencies.sh # Sensor board: - name: Export sensor schematic run: | ./electronics/scripts/export_schematic.py electronics/sensor/sensor.sch cp electronics/build/sensor.pdf electronics/build/outputs/sensor-schematic.pdf cp electronics/build/sensor.png electronics/build/outputs/sensor-schematic.png env: PYTHONUNBUFFERED: 1 - name: Export sensor PCB fabrication files run: | ./electronics/scripts/export_jlcpcb.py electronics/sensor/sensor.kicad_pcb cp -r electronics/build/sensor-jlc electronics/build/outputs/sensor-jlc - name: Export sensor PCB overview PDF run: | ./electronics/scripts/generate_pdf.py electronics/sensor/sensor.kicad_pcb cp electronics/build/sensor-pcb-packet.pdf electronics/build/outputs/sensor-pcb-packet.pdf env: PYTHONUNBUFFERED: 1 - name: Panelize sensor PCB run: | kikit panelize -p electronics/scripts/config/kikit_panelize_sensor.json electronics/sensor/sensor.kicad_pcb electronics/build/panelized_sensor.kicad_pcb - name: Export panelized sensor PCB SVG run: | ./electronics/scripts/generate_svg.py electronics/build/panelized_sensor.kicad_pcb cp electronics/build/panelized_sensor_merged.png electronics/build/outputs/sensor-panelized-pcb-raster.png ./scripts/annotate_image.sh electronics/build/outputs/sensor-panelized-pcb-raster.png env: PYTHONUNBUFFERED: 1 - name: Export panelized sensor PCB fabrication files run: | ./electronics/scripts/export_jlcpcb.py electronics/build/panelized_sensor.kicad_pcb cp -r electronics/build/panelized_sensor-jlc electronics/build/outputs/sensor-panelized-jlc - name: Export panelized sensor PCB overview PDF run: | ./electronics/scripts/generate_pdf.py electronics/build/panelized_sensor.kicad_pcb cp electronics/build/panelized_sensor-pcb-packet.pdf electronics/build/outputs/sensor-panelized-pcb-packet.pdf env: PYTHONUNBUFFERED: 1 - name: Archive artifacts uses: actions/upload-artifact@v4 if: always() with: name: electronics-classic path: | electronics/build - name: Configure AWS Credentials if: github.event_name == 'push' && github.repository_owner == 'scottbez1' uses: aws-actions/configure-aws-credentials@v1 with: aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} aws-region: us-east-1 - name: Sync artifacts to S3 if: github.event_name == 'push' && github.repository_owner == 'scottbez1' run: | aws s3 sync electronics/build/outputs s3://splitflap-artifacts/${GITHUB_REF#refs/heads/}/electronics-classic --delete --acl public-read --cache-control max-age=0,no-cache export-electronics-chainlink: name: Export Electronics (Chainlink Driver) runs-on: ubuntu-20.04 steps: - name: Checkout code uses: actions/checkout@v2 - name: Set up outputs directory run: mkdir -p electronics/build/outputs - name: Install dependencies run: ./electronics/scripts/dependencies.sh # Chainlink Driver: - name: Export chainlinkDriver schematic run: | ./electronics/scripts/export_schematic.py electronics/chainlinkDriver/chainlinkDriver.sch cp electronics/build/chainlinkDriver.pdf electronics/build/outputs/chainlinkDriver-schematic.pdf cp electronics/build/chainlinkDriver.png electronics/build/outputs/chainlinkDriver-schematic.png env: PYTHONUNBUFFERED: 1 - name: Render chainlinkDriver PCB 3D run: | ./electronics/scripts/export_3d.py electronics/chainlinkDriver/chainlinkDriver.kicad_pcb --width 2000 --height 800 transform z+ z+ z+ z+ z+ z+ z+ z+ mr rx+ rx+ ry- ry- rz- cp electronics/build/chainlinkDriver-3d.png electronics/build/outputs/chainlinkDriver-3d.png ./scripts/annotate_image.sh electronics/build/outputs/chainlinkDriver-3d.png env: PYTHONUNBUFFERED: 1 - name: Export chainlinkDriver JLCPCB fabrication files run: | ./electronics/scripts/export_jlcpcb.py electronics/chainlinkDriver/chainlinkDriver.kicad_pcb --assembly-schematic electronics/chainlinkDriver/chainlinkDriver.sch --alt-fields LCSC_ALT_ULN2003A cp -r electronics/build/chainlinkDriver-jlc electronics/build/outputs - name: Export chainlinkDriver PCB overview PDF run: | ./electronics/scripts/generate_pdf.py electronics/chainlinkDriver/chainlinkDriver.kicad_pcb cp electronics/build/chainlinkDriver-pcb-packet.pdf electronics/build/outputs/chainlinkDriver-pcb-packet.pdf env: PYTHONUNBUFFERED: 1 - name: Export chainlinkDriver PCB SVG run: | ./electronics/scripts/generate_svg.py electronics/chainlinkDriver/chainlinkDriver.kicad_pcb cp electronics/build/chainlinkDriver_merged.png electronics/build/outputs/chainlinkDriver-pcb-raster.png ./scripts/annotate_image.sh electronics/build/outputs/chainlinkDriver-pcb-raster.png env: PYTHONUNBUFFERED: 1 # Note: These kibot scripts are run last because they mess with file permissions which breaks other scripts, not sure why - name: Export BOM [chainlinkDriver] uses: INTI-CMNB/KiBot@c723b51327c2d9b7863672698ae5fd3da58b386e with: config: electronics/chainlinkDriver/chainlinkDriver.kibot.yml dir: electronics/build schema: 'electronics/chainlinkDriver/chainlinkDriver.sch' board: 'electronics/chainlinkDriver/chainlinkDriver.kicad_pcb' - name: Copy BOM outputs run: cp -r electronics/build/bom electronics/build/outputs - name: Archive artifacts uses: actions/upload-artifact@v4 if: always() with: name: electronics-chainlink path: | electronics/build - name: Configure AWS Credentials if: github.event_name == 'push' && github.repository_owner == 'scottbez1' uses: aws-actions/configure-aws-credentials@v1 with: aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} aws-region: us-east-1 - name: Sync artifacts to S3 if: github.event_name == 'push' && github.repository_owner == 'scottbez1' run: | aws s3 sync electronics/build/outputs s3://splitflap-artifacts/${GITHUB_REF#refs/heads/}/electronics-chainlink --delete --acl public-read --cache-control max-age=0,no-cache export-electronics-chainlink-tester: name: Export Electronics (Chainlink Driver Tester) runs-on: ubuntu-20.04 steps: - name: Checkout code uses: actions/checkout@v2 - name: Set up outputs directory run: mkdir -p electronics/build/outputs - name: Install dependencies run: ./electronics/scripts/dependencies.sh # Chainlink Driver Tester: - name: Export schematic [chainlinkDriverTester] run: | ./electronics/scripts/export_schematic.py electronics/chainlinkDriverTester/chainlinkDriverTester.sch cp electronics/build/chainlinkDriverTester.pdf electronics/build/outputs/chainlinkDriverTester-schematic.pdf cp electronics/build/chainlinkDriverTester.png electronics/build/outputs/chainlinkDriverTester-schematic.png env: PYTHONUNBUFFERED: 1 - name: Render PCB 3D [chainlinkDriverTester] run: | ./electronics/scripts/export_3d.py electronics/chainlinkDriverTester/chainlinkDriverTester.kicad_pcb --width 1600 --height 1100 transform z+ z+ z+ z+ z+ mu mr mr rx+ rx+ ry- ry- rz- cp electronics/build/chainlinkDriverTester-3d.png electronics/build/outputs/chainlinkDriverTester-3d.png ./scripts/annotate_image.sh electronics/build/outputs/chainlinkDriverTester-3d.png env: PYTHONUNBUFFERED: 1 - name: Export JLCPCB fabrication files [chainlinkDriverTester] run: | ./electronics/scripts/export_jlcpcb.py electronics/chainlinkDriverTester/chainlinkDriverTester.kicad_pcb cp -r electronics/build/chainlinkDriverTester-jlc electronics/build/outputs - name: Export PCB overview PDF [chainlinkDriverTester] run: | ./electronics/scripts/generate_pdf.py electronics/chainlinkDriverTester/chainlinkDriverTester.kicad_pcb cp electronics/build/chainlinkDriverTester-pcb-packet.pdf electronics/build/outputs/chainlinkDriverTester-pcb-packet.pdf env: PYTHONUNBUFFERED: 1 - name: Export PCB SVG [chainlinkDriverTester] run: | ./electronics/scripts/generate_svg.py electronics/chainlinkDriverTester/chainlinkDriverTester.kicad_pcb cp electronics/build/chainlinkDriverTester_merged.png electronics/build/outputs/chainlinkDriverTester-pcb-raster.png ./scripts/annotate_image.sh electronics/build/outputs/chainlinkDriverTester-pcb-raster.png env: PYTHONUNBUFFERED: 1 # Note: These kibot scripts are run last because they mess with file permissions which breaks other scripts, not sure why - name: Export BOM [chainlinkDriverTester] uses: INTI-CMNB/KiBot@c723b51327c2d9b7863672698ae5fd3da58b386e with: config: electronics/chainlinkDriverTester/chainlinkDriverTester.kibot.yml dir: electronics/build schema: 'electronics/chainlinkDriverTester/chainlinkDriverTester.sch' board: 'electronics/chainlinkDriverTester/chainlinkDriverTester.kicad_pcb' - name: Copy BOM outputs run: cp -r electronics/build/bom electronics/build/outputs - name: Archive artifacts uses: actions/upload-artifact@v4 if: always() with: name: electronics-chainlink-tester path: | electronics/build - name: Configure AWS Credentials if: github.event_name == 'push' && github.repository_owner == 'scottbez1' uses: aws-actions/configure-aws-credentials@v1 with: aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} aws-region: us-east-1 - name: Sync artifacts to S3 if: github.event_name == 'push' && github.repository_owner == 'scottbez1' run: | aws s3 sync electronics/build/outputs s3://splitflap-artifacts/${GITHUB_REF#refs/heads/}/electronics-chainlink-tester --delete --acl public-read --cache-control max-age=0,no-cache export-electronics-chainlink-base: name: Export Electronics (Chainlink Base) runs-on: ubuntu-20.04 steps: - name: Checkout code uses: actions/checkout@v2 - name: Set up outputs directory run: mkdir -p electronics/build/outputs - name: Install dependencies run: ./electronics/scripts/dependencies.sh # Chainlink Base: - name: Export schematic [chainlinkBase] run: | ./electronics/scripts/export_schematic.py electronics/chainlinkBase/chainlinkBase.sch cp electronics/build/chainlinkBase.pdf electronics/build/outputs/chainlinkBase-schematic.pdf cp electronics/build/chainlinkBase-0.png electronics/build/outputs/chainlinkBase-schematic.png env: PYTHONUNBUFFERED: 1 - name: Render PCB 3D [chainlinkBase] run: | ./electronics/scripts/export_3d.py electronics/chainlinkBase/chainlinkBase.kicad_pcb --width 1000 --height 1500 transform z+ z+ mu rx+ rx+ ry- ry- rz- cp electronics/build/chainlinkBase-3d.png electronics/build/outputs/chainlinkBase-3d.png ./scripts/annotate_image.sh electronics/build/outputs/chainlinkBase-3d.png env: PYTHONUNBUFFERED: 1 - name: Export JLCPCB fabrication files [chainlinkBase] run: | ./electronics/scripts/export_jlcpcb.py electronics/chainlinkBase/chainlinkBase.kicad_pcb cp -r electronics/build/chainlinkBase-jlc electronics/build/outputs - name: Export PCB overview PDF [chainlinkBase] run: | ./electronics/scripts/generate_pdf.py electronics/chainlinkBase/chainlinkBase.kicad_pcb cp electronics/build/chainlinkBase-pcb-packet.pdf electronics/build/outputs/chainlinkBase-pcb-packet.pdf env: PYTHONUNBUFFERED: 1 - name: Export PCB SVG [chainlinkBase] run: | ./electronics/scripts/generate_svg.py electronics/chainlinkBase/chainlinkBase.kicad_pcb cp electronics/build/chainlinkBase_merged.png electronics/build/outputs/chainlinkBase-pcb-raster.png ./scripts/annotate_image.sh electronics/build/outputs/chainlinkBase-pcb-raster.png env: PYTHONUNBUFFERED: 1 # Note: These kibot scripts are run last because they mess with file permissions which breaks other scripts, not sure why - name: Export BOM [chainlinkBase] uses: INTI-CMNB/KiBot@c723b51327c2d9b7863672698ae5fd3da58b386e with: config: electronics/chainlinkBase/chainlinkBase.kibot.yml dir: electronics/build schema: 'electronics/chainlinkBase/chainlinkBase.sch' board: 'electronics/chainlinkBase/chainlinkBase.kicad_pcb' - name: Copy BOM outputs run: cp -r electronics/build/bom electronics/build/outputs - name: Archive artifacts uses: actions/upload-artifact@v4 if: always() with: name: electronics-chainlink-base path: | electronics/build - name: Configure AWS Credentials if: github.event_name == 'push' && github.repository_owner == 'scottbez1' uses: aws-actions/configure-aws-credentials@v1 with: aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} aws-region: us-east-1 - name: Sync artifacts to S3 if: github.event_name == 'push' && github.repository_owner == 'scottbez1' run: | aws s3 sync electronics/build/outputs s3://splitflap-artifacts/${GITHUB_REF#refs/heads/}/electronics-chainlink-base --delete --acl public-read --cache-control max-age=0,no-cache export-electronics-chainlink-buddy-t-display: name: Export Electronics (Chainlink Buddy T-Display) runs-on: ubuntu-20.04 steps: - name: Checkout code uses: actions/checkout@v2 - name: Set up outputs directory run: mkdir -p electronics/build/outputs - name: Install dependencies run: ./electronics/scripts/dependencies.sh - name: Export schematic [chainlinkBuddyTDisplay] run: | ./electronics/scripts/export_schematic.py electronics/chainlinkBuddyTDisplay/chainlinkBuddyTDisplay.sch cp electronics/build/chainlinkBuddyTDisplay.pdf electronics/build/outputs/chainlinkBuddyTDisplay-schematic.pdf cp electronics/build/chainlinkBuddyTDisplay.png electronics/build/outputs/chainlinkBuddyTDisplay-schematic.png env: PYTHONUNBUFFERED: 1 - name: Render PCB 3D [chainlinkBuddyTDisplay] run: | ./electronics/scripts/export_3d.py electronics/chainlinkBuddyTDisplay/chainlinkBuddyTDisplay.kicad_pcb --width 1600 --height 1100 transform z+ z+ z+ z+ mr mr mr rx+ rx+ ry- ry- rz- cp electronics/build/chainlinkBuddyTDisplay-3d.png electronics/build/outputs/chainlinkBuddyTDisplay-3d.png ./scripts/annotate_image.sh electronics/build/outputs/chainlinkBuddyTDisplay-3d.png env: PYTHONUNBUFFERED: 1 - name: Export JLCPCB fabrication files [chainlinkBuddyTDisplay] run: | ./electronics/scripts/export_jlcpcb.py electronics/chainlinkBuddyTDisplay/chainlinkBuddyTDisplay.kicad_pcb cp -r electronics/build/chainlinkBuddyTDisplay-jlc electronics/build/outputs - name: Export PCB overview PDF [chainlinkBuddyTDisplay] run: | ./electronics/scripts/generate_pdf.py electronics/chainlinkBuddyTDisplay/chainlinkBuddyTDisplay.kicad_pcb cp electronics/build/chainlinkBuddyTDisplay-pcb-packet.pdf electronics/build/outputs/chainlinkBuddyTDisplay-pcb-packet.pdf env: PYTHONUNBUFFERED: 1 - name: Export PCB SVG [chainlinkBuddyTDisplay] run: | ./electronics/scripts/generate_svg.py electronics/chainlinkBuddyTDisplay/chainlinkBuddyTDisplay.kicad_pcb cp electronics/build/chainlinkBuddyTDisplay_merged.png electronics/build/outputs/chainlinkBuddyTDisplay-pcb-raster.png ./scripts/annotate_image.sh electronics/build/outputs/chainlinkBuddyTDisplay-pcb-raster.png env: PYTHONUNBUFFERED: 1 - name: Panelize run: | kikit panelize -p electronics/chainlinkBuddyTDisplay/kikit_panelize.json electronics/chainlinkBuddyTDisplay/chainlinkBuddyTDisplay.kicad_pcb electronics/build/panelized_chainlinkBuddyTDisplay.kicad_pcb - name: Export panelized PCB SVG run: | ./electronics/scripts/generate_svg.py electronics/build/panelized_chainlinkBuddyTDisplay.kicad_pcb cp electronics/build/panelized_chainlinkBuddyTDisplay_merged.png electronics/build/outputs/chainlinkBuddyTDisplay-panelized-pcb-raster.png ./scripts/annotate_image.sh electronics/build/outputs/chainlinkBuddyTDisplay-panelized-pcb-raster.png env: PYTHONUNBUFFERED: 1 - name: Export panelized PCB fabrication files run: | ./electronics/scripts/export_jlcpcb.py electronics/build/panelized_chainlinkBuddyTDisplay.kicad_pcb cp -r electronics/build/panelized_chainlinkBuddyTDisplay-jlc electronics/build/outputs/chainlinkBuddyTDisplay-panelized-jlc - name: Export panelized PCB overview PDF run: | ./electronics/scripts/generate_pdf.py electronics/build/panelized_chainlinkBuddyTDisplay.kicad_pcb cp electronics/build/panelized_chainlinkBuddyTDisplay-pcb-packet.pdf electronics/build/outputs/chainlinkBuddyTDisplay-panelized-pcb-packet.pdf env: PYTHONUNBUFFERED: 1 # Note: These kibot scripts are run last because they mess with file permissions which breaks other scripts, not sure why - name: Export BOM [chainlinkBuddyTDisplay] uses: INTI-CMNB/KiBot@c723b51327c2d9b7863672698ae5fd3da58b386e with: config: electronics/chainlinkBuddyTDisplay/chainlinkBuddyTDisplay.kibot.yml dir: electronics/build schema: 'electronics/chainlinkBuddyTDisplay/chainlinkBuddyTDisplay.sch' board: 'electronics/chainlinkBuddyTDisplay/chainlinkBuddyTDisplay.kicad_pcb' - name: Copy BOM outputs run: cp -r electronics/build/bom electronics/build/outputs - name: Archive artifacts uses: actions/upload-artifact@v4 if: always() with: name: electronics-chainlink-buddy-t-display path: | electronics/build - name: Configure AWS Credentials if: github.event_name == 'push' && github.repository_owner == 'scottbez1' uses: aws-actions/configure-aws-credentials@v1 with: aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} aws-region: us-east-1 - name: Sync artifacts to S3 if: github.event_name == 'push' && github.repository_owner == 'scottbez1' run: | aws s3 sync electronics/build/outputs s3://splitflap-artifacts/${GITHUB_REF#refs/heads/}/electronics-chainlink-buddy-t-display --delete --acl public-read --cache-control max-age=0,no-cache export-electronics-chainlink-buddy-breadboard: name: Export Electronics (Chainlink Buddy Breadboard) runs-on: ubuntu-20.04 steps: - name: Checkout code uses: actions/checkout@v2 - name: Set up outputs directory run: mkdir -p electronics/build/outputs - name: Install dependencies run: ./electronics/scripts/dependencies.sh - name: Export schematic [chainlinkBuddyBreadboard] run: | ./electronics/scripts/export_schematic.py electronics/chainlinkBuddyBreadboard/chainlinkBuddyBreadboard.sch cp electronics/build/chainlinkBuddyBreadboard.pdf electronics/build/outputs/chainlinkBuddyBreadboard-schematic.pdf cp electronics/build/chainlinkBuddyBreadboard.png electronics/build/outputs/chainlinkBuddyBreadboard-schematic.png env: PYTHONUNBUFFERED: 1 - name: Render PCB 3D [chainlinkBuddyBreadboard] run: | ./electronics/scripts/export_3d.py electronics/chainlinkBuddyBreadboard/chainlinkBuddyBreadboard.kicad_pcb --width 1600 --height 1100 transform z+ z+ z+ z+ mu rx+ rx+ rx+ rx+ ry+ ry+ ry+ rz+ rz+ cp electronics/build/chainlinkBuddyBreadboard-3d.png electronics/build/outputs/chainlinkBuddyBreadboard-3d.png ./scripts/annotate_image.sh electronics/build/outputs/chainlinkBuddyBreadboard-3d.png env: PYTHONUNBUFFERED: 1 - name: Export JLCPCB fabrication files [chainlinkBuddyBreadboard] run: | ./electronics/scripts/export_jlcpcb.py electronics/chainlinkBuddyBreadboard/chainlinkBuddyBreadboard.kicad_pcb cp -r electronics/build/chainlinkBuddyBreadboard-jlc electronics/build/outputs - name: Export PCB overview PDF [chainlinkBuddyBreadboard] run: | ./electronics/scripts/generate_pdf.py electronics/chainlinkBuddyBreadboard/chainlinkBuddyBreadboard.kicad_pcb cp electronics/build/chainlinkBuddyBreadboard-pcb-packet.pdf electronics/build/outputs/chainlinkBuddyBreadboard-pcb-packet.pdf env: PYTHONUNBUFFERED: 1 - name: Export PCB SVG [chainlinkBuddyBreadboard] run: | ./electronics/scripts/generate_svg.py electronics/chainlinkBuddyBreadboard/chainlinkBuddyBreadboard.kicad_pcb cp electronics/build/chainlinkBuddyBreadboard_merged.png electronics/build/outputs/chainlinkBuddyBreadboard-pcb-raster.png ./scripts/annotate_image.sh electronics/build/outputs/chainlinkBuddyBreadboard-pcb-raster.png env: PYTHONUNBUFFERED: 1 - name: Panelize run: | kikit panelize -p electronics/chainlinkBuddyBreadboard/kikit_panelize.json electronics/chainlinkBuddyBreadboard/chainlinkBuddyBreadboard.kicad_pcb electronics/build/panelized_chainlinkBuddyBreadboard.kicad_pcb - name: Export panelized PCB SVG run: | ./electronics/scripts/generate_svg.py electronics/build/panelized_chainlinkBuddyBreadboard.kicad_pcb cp electronics/build/panelized_chainlinkBuddyBreadboard_merged.png electronics/build/outputs/chainlinkBuddyBreadboard-panelized-pcb-raster.png ./scripts/annotate_image.sh electronics/build/outputs/chainlinkBuddyBreadboard-panelized-pcb-raster.png env: PYTHONUNBUFFERED: 1 - name: Export panelized PCB fabrication files run: | ./electronics/scripts/export_jlcpcb.py electronics/build/panelized_chainlinkBuddyBreadboard.kicad_pcb cp -r electronics/build/panelized_chainlinkBuddyBreadboard-jlc electronics/build/outputs/chainlinkBuddyBreadboard-panelized-jlc - name: Export panelized PCB overview PDF run: | ./electronics/scripts/generate_pdf.py electronics/build/panelized_chainlinkBuddyBreadboard.kicad_pcb cp electronics/build/panelized_chainlinkBuddyBreadboard-pcb-packet.pdf electronics/build/outputs/chainlinkBuddyBreadboard-panelized-pcb-packet.pdf env: PYTHONUNBUFFERED: 1 # Note: These kibot scripts are run last because they mess with file permissions which breaks other scripts, not sure why - name: Export BOM [chainlinkBuddyBreadboard] uses: INTI-CMNB/KiBot@c723b51327c2d9b7863672698ae5fd3da58b386e with: config: electronics/chainlinkBuddyBreadboard/chainlinkBuddyBreadboard.kibot.yml dir: electronics/build schema: 'electronics/chainlinkBuddyBreadboard/chainlinkBuddyBreadboard.sch' board: 'electronics/chainlinkBuddyBreadboard/chainlinkBuddyBreadboard.kicad_pcb' - name: Copy BOM outputs run: cp -r electronics/build/bom electronics/build/outputs - name: Archive artifacts uses: actions/upload-artifact@v4 if: always() with: name: electronics-chainlink-buddy-breadboard path: | electronics/build - name: Configure AWS Credentials if: github.event_name == 'push' && github.repository_owner == 'scottbez1' uses: aws-actions/configure-aws-credentials@v1 with: aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} aws-region: us-east-1 - name: Sync artifacts to S3 if: github.event_name == 'push' && github.repository_owner == 'scottbez1' run: | aws s3 sync electronics/build/outputs s3://splitflap-artifacts/${GITHUB_REF#refs/heads/}/electronics-chainlink-buddy-breadboard --delete --acl public-read --cache-control max-age=0,no-cache ================================================ FILE: .github/workflows/electronics_v2.yml ================================================ name: Export Electronics (v2) on: push: pull_request: jobs: export-electronics-sensor-smd: name: Export Electronics (Sensor SMD) runs-on: ubuntu-20.04 steps: - name: Checkout code uses: actions/checkout@v2 - name: Set up outputs directory run: mkdir -p electronics/build/outputs - name: Install dependencies run: ./electronics/scripts/dependencies_v2.sh # Sensor board: - name: Export PCB fabrication files [sensor_smd, single] run: | ./electronics/scripts/export_jlcpcb.py electronics/sensor_smd/sensor_smd.kicad_pcb --assembly-schematic electronics/sensor_smd/sensor_smd.kicad_sch cp -r electronics/build/sensor_smd-jlc electronics/build/outputs/sensor_smd-jlc - name: Panelize sensor PCB run: | kikit panelize -p electronics/sensor_smd/kikit_panelize.json electronics/sensor_smd/sensor_smd.kicad_pcb electronics/build/panelized_sensor_smd.kicad_pcb - name: Export PCB fabrication files [sensor_smd, panelized] run: | ./electronics/scripts/export_jlcpcb.py electronics/build/panelized_sensor_smd.kicad_pcb --assembly-schematic electronics/sensor_smd/sensor_smd.kicad_sch cp -r electronics/build/panelized_sensor_smd-jlc electronics/build/outputs/sensor_smd-panelized-jlc # Note: These kibot scripts are run last because they mess with file permissions which breaks other scripts, not sure why - name: Exports [sensor_smd, single] uses: INTI-CMNB/KiBot@v2_k6_1_6_3 with: config: electronics/sensor_smd/sensor_smd.kibot.yml dir: electronics/build/outputs schema: 'electronics/sensor_smd/sensor_smd.kicad_sch' board: 'electronics/sensor_smd/sensor_smd.kicad_pcb' - name: Exports [sensor_smd, panelized] uses: INTI-CMNB/KiBot@v2_k6_1_6_3 with: config: electronics/sensor_smd/sensor_smd-panelized.kibot.yml dir: electronics/build/outputs schema: 'electronics/sensor_smd/sensor_smd.kicad_sch' board: 'electronics/build/panelized_sensor_smd.kicad_pcb' - name: Fix permissions # Need to chown files back to runner, as ownership gets set to root by the KiBot Actions run: | sudo chown runner:docker electronics/build/outputs/* sudo chown runner:docker electronics/build/* - name: Update 3D artifacts [sensor_smd, single] run: | mv electronics/build/outputs/sensor_smd-3D_top.png electronics/build/outputs/sensor_smd-front-3d.png ./scripts/annotate_image.sh electronics/build/outputs/sensor_smd-front-3d.png mv electronics/build/outputs/sensor_smd-3D_bottom.png electronics/build/outputs/sensor_smd-back-3d.png ./scripts/annotate_image.sh electronics/build/outputs/sensor_smd-back-3d.png env: PYTHONUNBUFFERED: 1 - name: Update 3D artifacts [sensor_smd, panelized] run: | mv electronics/build/outputs/panelized_sensor_smd-3D_top.png electronics/build/outputs/panelized_sensor_smd-front-3d.png ./scripts/annotate_image.sh electronics/build/outputs/panelized_sensor_smd-front-3d.png mv electronics/build/outputs/panelized_sensor_smd-3D_bottom.png electronics/build/outputs/panelized_sensor_smd-back-3d.png ./scripts/annotate_image.sh electronics/build/outputs/panelized_sensor_smd-back-3d.png env: PYTHONUNBUFFERED: 1 - name: Rasterise schematic [sensor_smd] run: | convert -density 96 electronics/build/outputs/sensor_smd-schematic.pdf -background white -alpha remove electronics/build/outputs/sensor_smd-schematic.png ./scripts/annotate_image.sh electronics/build/outputs/sensor_smd-schematic.png - name: Show artifacts if: always() run: | ls -lah electronics/build ls -lah electronics/build/outputs - name: Archive artifacts uses: actions/upload-artifact@v4 if: always() with: name: electronics-v2 path: | electronics/build - name: Configure AWS Credentials if: github.event_name == 'push' && github.repository_owner == 'scottbez1' uses: aws-actions/configure-aws-credentials@v1 with: aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} aws-region: us-east-1 - name: Sync artifacts to S3 if: github.event_name == 'push' && github.repository_owner == 'scottbez1' run: | aws s3 sync electronics/build/outputs s3://splitflap-artifacts/${GITHUB_REF#refs/heads/}/electronics-v2 --delete --acl public-read --cache-control max-age=0,no-cache ================================================ FILE: .github/workflows/js.yml ================================================ name: JS on: push: pull_request: workflow_dispatch: permissions: contents: read pages: write id-token: write # Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued. # However, do NOT cancel in-progress runs as we want to allow these production deployments to complete. concurrency: group: "pages" cancel-in-progress: false jobs: # Build job build: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v3 - name: Set up Node uses: actions/setup-node@v3 with: node-version: 18 - name: Install dependencies working-directory: software/chainlink/js run: npm ci - name: Build working-directory: software/chainlink/js run: PUBLIC_URL="/splitflap" npm run build - name: Setup Pages uses: actions/configure-pages@v3 - name: Upload artifact uses: actions/upload-pages-artifact@v3 with: path: './software/chainlink/js/packages/example-webserial-basic/build' # Deployment job deploy: environment: name: github-pages url: ${{ steps.deployment.outputs.page_url }} if: github.repository == 'scottbez1/splitflap' && github.ref == 'refs/heads/master' runs-on: ubuntu-latest needs: build steps: - name: Deploy to GitHub Pages id: deployment uses: actions/deploy-pages@v4 ================================================ FILE: .github/workflows/pio.yml ================================================ name: PlatformIO CI on: push: pull_request: jobs: pio-build: runs-on: ubuntu-20.04 steps: - name: Checkout code uses: actions/checkout@v2 - name: Cache pip uses: actions/cache@v2 with: path: ~/.cache/pip key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }} restore-keys: | ${{ runner.os }}-pip- - name: Cache PlatformIO uses: actions/cache@v2 with: path: ~/.platformio key: ${{ runner.os }}-${{ hashFiles('**/lockfiles') }} - name: Set up Python uses: actions/setup-python@v2 - name: Install PlatformIO id: pio_install run: | python -m pip install --upgrade pip pip install --upgrade platformio # - name: Build Firmware (uno-shift-register) # # Run regardless of other build step failures, as long as setup steps completed # if: always() && steps.pio_install.outcome == 'success' # run: | # pio run \ # -e uno-shift-register \ # - name: Build Firmware (uno-direct) # # Run regardless of other build step failures, as long as setup steps completed # if: always() && steps.pio_install.outcome == 'success' # run: | # pio run \ # -e uno-direct \ - name: Build Firmware (esp32CustomAdvanced) # Run regardless of other build step failures, as long as setup steps completed if: always() && steps.pio_install.outcome == 'success' run: | pio run \ -e esp32CustomAdvanced - name: Build Firmware (chainlink) # Run regardless of other build step failures, as long as setup steps completed if: always() && steps.pio_install.outcome == 'success' run: | pio run \ -e chainlink - name: Build Firmware (chainlinkBase) # Run regardless of other build step failures, as long as setup steps completed if: always() && steps.pio_install.outcome == 'success' run: | pio run \ -e chainlinkBase # Temporarily disabled due to proto issue # - name: Build Firmware (chainlinkDriverTester) # # Run regardless of other build step failures, as long as setup steps completed # if: always() && steps.pio_install.outcome == 'success' # run: | # cp firmware/esp32/tester/secrets.h.example firmware/esp32/tester/secrets.h && # pio run \ # -e chainlinkDriverTester ================================================ FILE: .gitignore ================================================ *.swp *.pyc build/ # KiCAD files *.000 *.bak *.bck *.kicad_pcb-bak *.sch-bak *.net *.dsn fp-info-cache *-backups \#auto_saved_files\# # KiCAD bom splitflap.xml sensor.xml # Arduino compiled output *.hex .pio .vscode .nvmrc .python_version ================================================ FILE: .gitmodules ================================================ [submodule "thirdparty/nanopb"] path = thirdparty/nanopb url = git@github.com:nanopb/nanopb.git ================================================ FILE: 3d/28byj-48.scad ================================================ /* Copyright 2015-2018 Scott Bezek and the splitflap contributors 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. */ 28byj48_chassis_radius = 28/2; 28byj48_chassis_height = 19; 28byj48_shaft_offset = 8; 28byj48_mount_outer_radius = 3.5; 28byj48_mount_hole_radius = 4.2/2; 28byj48_mount_center_offset = 35/2; 28byj48_mount_bracket_height = 0.8; 28byj48_shaft_collar_radius = 9.4/2; 28byj48_shaft_collar_height = 1.5; 28byj48_shaft_radius = 5/2; 28byj48_shaft_height = 10; 28byj48_shaft_slotted_width = 3; 28byj48_shaft_slotted_height = 6; 28byj48_backpack_width = 14.6; 28byj48_backpack_extent = 18; // seen values from 17-18 28byj48_backpack_height = 16; // Exports for use in other files: function 28byj48_mount_bracket_height() = 28byj48_mount_bracket_height; function 28byj48_shaft_radius() = 28byj48_shaft_radius; function 28byj48_shaft_collar_radius() = 28byj48_shaft_collar_radius; function 28byj48_mount_center_offset() = 28byj48_mount_center_offset; function 28byj48_chassis_radius() = 28byj48_chassis_radius; function 28byj48_shaft_offset() = 28byj48_shaft_offset; function 28byj48_chassis_height() = 28byj48_chassis_height; function 28byj48_backpack_extent() = 28byj48_backpack_extent; // Basic 28BYJ-48 model based on various dimensioned drawings. // Origin is centered on the shaft, on the front face of the motor, with the shaft in the +z direction module Stepper28BYJ48() { $fn = 60; eps = 0.01; gray = [0.7, 0.7, 0.7]; gold = [1, 0.843, 0]; blue = [0, 0, 1]; module mounting_holes() { linear_extrude(height=28byj48_mount_bracket_height) { difference() { hull() { translate([28byj48_mount_center_offset, 0]) { circle(r=28byj48_mount_outer_radius); } translate([-28byj48_mount_center_offset, 0]) { circle(r=28byj48_mount_outer_radius); } } translate([28byj48_mount_center_offset, 0]) { circle(r=28byj48_mount_hole_radius); } translate([-28byj48_mount_center_offset, 0]) { circle(r=28byj48_mount_hole_radius); } } } } module shaft_collar() { cylinder(r=28byj48_shaft_collar_radius, h=28byj48_shaft_collar_height + eps); } module shaft() { color(gold) { difference() { cylinder(r=28byj48_shaft_radius, h=28byj48_shaft_height); translate([-(28byj48_shaft_radius + eps), 28byj48_shaft_slotted_width / 2, 28byj48_shaft_height - 28byj48_shaft_slotted_height]) { cube([(28byj48_shaft_radius+eps)*2, 28byj48_shaft_radius, 28byj48_shaft_slotted_height+eps]); } translate([-(28byj48_shaft_radius + eps), - 28byj48_shaft_radius - (28byj48_shaft_slotted_width / 2), 28byj48_shaft_height - 28byj48_shaft_slotted_height]) { cube([(28byj48_shaft_radius+eps)*2, 28byj48_shaft_radius, 28byj48_shaft_slotted_height+eps]); } } } } module chassis() { color(gray) { translate([0, 0, -28byj48_chassis_height]) { cylinder(r=28byj48_chassis_radius, h=28byj48_chassis_height); } translate([0, 0, -28byj48_mount_bracket_height - eps]) { mounting_holes(); } translate([0, 28byj48_shaft_offset, -eps]) { shaft_collar(); } } } module backpack() { color(blue) { translate([-28byj48_backpack_width/2, 0, -28byj48_backpack_height - eps]) { cube([28byj48_backpack_width, 28byj48_backpack_extent, 28byj48_backpack_height]); } } } translate([0, -28byj48_shaft_offset, 0]) { chassis(); translate([0, 28byj48_shaft_offset, 0]) { shaft(); } translate([0, -28byj48_backpack_extent, 0]) { backpack(); } } } // Example usage: Stepper28BYJ48(); ================================================ FILE: 3d/assert.scad ================================================ /* Copyright 2015-2020 Scott Bezek and the splitflap contributors 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. */ module legacyAssert(truth, msg="(no messsage provided)") { if (!truth) { // Intentionally don't close the
tag to make the entire console red echo(str( "
", "

", "####################", "

", "ASSERTION ERROR!", "

", msg, "

", "####################", "

")); color("red") { cube([1000, 1000, 1000], center=true); } } } required_widgets = 24; widgets = 12 + 3; legacyAssert(widgets >= required_widgets, str("Not enough widgets! Required ", required_widgets, " but found ", widgets)); ================================================ FILE: 3d/color_util.scad ================================================ /* Copyright 2015-2021 Scott Bezek and the splitflap contributors 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. */ // multiply two equal matricies by each element, limiting to a max of 1.0 function color_multiply(x, y) = [ for(j=[0:len(x) - 1]) min(x[j] * y[j], 1.0) ]; // inverts a color matrix by subtracting the input channel values from 1.0 function color_invert(x) = [ for(j=[0:len(x) - 1]) (1.0 - x[j]) ]; ================================================ FILE: 3d/combined_front_panel.scad ================================================ /* Copyright 2021 Scott Bezek and the splitflap contributors 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. */ include; use; use; use; use; // ----------------------- // Configurable parameters // ----------------------- rows = 4; cols = 13; // Set either frame_width/height, or frame_margin_x/y to set the overall frame dimensions. margin_x/y will calculate the necessary frame width // based on the number of modules and spacing and add the margin onto both sides. frame_width = 48*25.4; frame_height = 30*25.4; frame_margin_x = undef; frame_margin_y = undef; // Set either the center_center_* or gap_* values to distribute modules based on center-to-center distance or a gap between modules. // You can set gap_x and gap_y to 0 to get the closest possible spacing of modules. center_center_x = undef; center_center_y = undef; gap_x = 0; gap_y = 0; // Vertical centering mode // 0 = center based on letter/flap center // 1 = center based on window cutout center // 2 = center based on module overall center center_mode = 0; // Use tool_diameter for rotary/milling cutters, or kerf_width for laser. // kerf_width applies a naive offset that is only valid for very small kerf from a laser cutter (e.g. 0.2mm) // tool_diameter will modify a few parts of the design for milling bits, but will not handle all sizes well; use caution and review the design carefully. tool_diameter = 0; // e.g. set to "1/8*25.4 * 1.1" for a 1/8 inch bit, plus 10% kerf_width = 0; // Preview-only paramters: display_text = [ " ABCDEFGHIJKL", "MNOPQRSTUVWXY", "Zg0123456789r", ".?-$'#yp,!@&w", ]; // Number of full modules to render in 3d preview render_full_modules_count = 4; // --------------------------- // End configurable parameters // --------------------------- render_index = -1; render_etch = false; assert(is_undef(center_center_x) || center_center_x >= get_enclosure_width(), "Horizontal center-to-center value must be at least the enclosure width"); assert(is_undef(center_center_y) || center_center_y >= get_enclosure_height(), "Vertical center-to-center value must be at least the enclosure height"); assert(is_undef(gap_x) || gap_x >= 0); assert(is_undef(gap_y) || gap_y >= 0); layout_center_center_x = is_undef(gap_x) ? center_center_x : get_enclosure_width() + gap_x; layout_center_center_y = is_undef(gap_y) ? center_center_y : get_enclosure_height() + gap_y; echo(debug_gap_x = layout_center_center_x - get_enclosure_width()); echo(debug_gap_y = layout_center_center_y - get_enclosure_height()); layout_frame_width = is_undef(frame_margin_x) ? frame_width : layout_center_center_x * (cols - 1) + get_enclosure_width() + frame_margin_x*2; layout_frame_height = is_undef(frame_margin_y) ? frame_height : layout_center_center_y * (rows - 1) + get_enclosure_height() + frame_margin_y*2; y_offset = center_mode == 0 ? 0 : center_mode == 1 ? get_front_window_lower() - (get_front_window_upper() + get_front_window_lower())/2 : center_mode == 2 ? get_enclosure_height_lower() - get_enclosure_height()/2: 0; echo(debug_frame_margin_top = (layout_frame_height - layout_center_center_y * (rows - 1))/2 - get_enclosure_height_upper() - y_offset); echo(debug_frame_margin_bottom = (layout_frame_height - layout_center_center_y * (rows - 1))/2 - get_enclosure_height_lower() + y_offset); module centered_front() { translate([-get_front_window_right_inset() - get_front_window_width()/2, -get_enclosure_height_lower() + y_offset]) { children(); } } flap_color = get_flap_color(); letter_color = get_letter_color(); assembly_colors = get_assembly_colors(); frame_color = assembly_colors[0]; projection_renderer(render_index = render_index, render_etch = render_etch, kerf_width = kerf_width, panel_height = 0, panel_horizontal = 0, panel_vertical = 0) { color(frame_color) { linear_extrude(height=get_thickness()) { difference() { translate([(cols-1)/2 * layout_center_center_x, -(rows-1)/2 * layout_center_center_y]) { square([layout_frame_width, layout_frame_height], center=true); } for (i=[0:cols-1]) { for (j=[0:rows-1]) { translate([i * layout_center_center_x, -j * layout_center_center_y]) { centered_front() { enclosure_front_cutouts_2d(tool_diameter=tool_diameter); } } } } } } } } if (render_index == -1 && !is_projection_rendering()) { for (i=[0:cols-1]) { for (j=[0:rows-1]) { index = i + j*cols; translate([i * layout_center_center_x, -j * layout_center_center_y]) { if (index < render_full_modules_count) { translate([get_front_window_right_inset() + get_front_window_width()/2, y_offset, -get_front_forward_offset()]) { rotate([90, 0, 180]) { split_flap_3d(get_flap_index_for_letter(display_text[j][i]), false, false); } } } else { // Render just a flap translate([-flap_width/2, 0]) { flap_with_letters(flap_color, letter_color, get_flap_index_for_letter(display_text[j][i]), get_flap_gap()); } translate([-flap_width/2, -(get_flap_gap() + get_flap_pin_width())]) { rotate([-180, 0, 0]) { flap_with_letters(flap_color, letter_color, get_flap_index_for_letter(display_text[j][i])-1, get_flap_gap()); } } } } } } } ================================================ FILE: 3d/flap.scad ================================================ /* Copyright 2015-2021 Scott Bezek and the splitflap contributors 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. */ include; include; use; use; // TODO: extract core flap spool dimensions used for vertical_keepout_size instead of using the full splitflap file use; character_list = get_character_list(); color_list = [ ["p", [122, 40, 203] / 255], // #7a28cb ["r", [230, 57, 70] / 255], // "#e63946 ["y", [255, 214, 57] / 255], // "#ffd639 ["g", [102, 215, 209] / 255], // "#66d7d1 ["w", [255, 255, 255] / 255], // "#ffffff ]; // Facet number variable refers to a special variable "$fn" that is used to control the number of facets to generate an arc. // Higher than 100 is not recommended according to the docs as it demands a lot resources letter_facet_number = 100; // Vertical keepout refers to the portion of bottom flaps that are visible stacked behind the frontmost flap. vertical_keepout_mode = 1; // 0=ignore; 1=highlight; 2=cut vertical_keepout_size_factor = 1.1; // Expand calculated keepout region by this factor. 1=no expansion, 1.5=50% expansion, etc vertical_keepout_size = get_flap_arc_separation() * vertical_keepout_size_factor; font_extrusion_3d = 0.3; font_extrusion = 0.1; function get_flap_index_for_letter(letter) = search(letter, character_list)[0]; function get_letter_for_front(flap_index) = flap_index >= len(character_list) ? get_letter_for_front(flap_index - len(character_list)) : flap_index < 0 ? get_letter_for_front(flap_index + len(character_list)) : character_list[flap_index]; // The letter (bottom half) on the back of a flap is the same as the letter (top half) on the front of the next flap function get_letter_for_back(flap_index) = get_letter_for_front(flap_index + 1); module flap_2d(cut_tabs = true) { translate([0, -flap_pin_width/2, 0]) difference() { union() { square([flap_width, flap_height - flap_corner_radius]); // rounded corners hull() { translate([flap_corner_radius, flap_height - flap_corner_radius]) circle(r=flap_corner_radius, $fn=40); translate([flap_width - flap_corner_radius, flap_height - flap_corner_radius]) circle(r=flap_corner_radius, $fn=40); } } // spool tabs if(cut_tabs) { translate([-eps, flap_pin_width]) square([eps + flap_notch_depth, flap_notch_height]); translate([flap_width - flap_notch_depth, flap_pin_width]) square([eps + flap_notch_depth, flap_notch_height]); } } } module _flap(flap_color) { color(flap_color) { translate([0, 0, -flap_thickness/2]) { linear_extrude(height=flap_thickness) { flap_2d(); } } } } module _apply_special_color(letter, standard_letter_color) { color_index = search([letter], color_list); if (len(color_index) > 0 && is_num(color_index[0])) { color(color_list[color_index[0]][1]) { children(); } } else { color(standard_letter_color) { children(); } } } module _draw_letter(letter, flap_gap) { overrides = get_letter_overrides(letter); height = is_undef(overrides[3]) ? get_font_setting("height") : overrides[3]; width = is_undef(overrides[4]) ? get_font_setting("width") : overrides[4]; offset_x = is_undef(overrides[1]) ? get_font_setting("offset_x") : get_font_setting("offset_x") + overrides[1]; offset_y = is_undef(overrides[2]) ? get_font_setting("offset_y") : get_font_setting("offset_y") + overrides[2]; thickness_offset = is_undef(overrides[5]) ? (is_undef(get_font_setting("thickness_offset")) ? 0 : get_font_setting("thickness_offset")) : overrides[5]; color_index = search([letter], color_list); if (len(color_index) > 0 && is_num(color_index[0])) { color_height = get_font_setting("color_height"); color_height_with_default = is_undef(color_height) ? height : color_height; color_offset_y = get_font_setting("color_offset_y"); color_offset_y_with_default = is_undef(color_offset_y) ? offset_y : color_offset_y; translate([0, color_offset_y_with_default]) { square([flap_width - flap_notch_depth * 2 - 4, (flap_height * 2 + flap_gap) * color_height_with_default], center=true); } } else { translate([0, -flap_height * height, 0]) { // valign compensation scale([width, 1, 1]) { translate([offset_x, offset_y]) { offset(delta=thickness_offset) { text(text=letter, size=flap_height * height * 2, font=get_font_setting("font"), halign="center", $fn=letter_facet_number); } } } } } } module _flap_letter(letter, letter_color, flap_gap, front = true, bleed = 0, print_3d = false) { _apply_special_color(letter, letter_color) { translate([0, 0, front ? (flap_thickness/2 + eps - (print_3d ? font_extrusion_3d : 0)) : (-flap_thickness/2 - eps)]) { linear_extrude(height=print_3d ? font_extrusion_3d : font_extrusion, center=print_3d ? false : true) { intersection() { difference() { offset(r=bleed) { flap_2d(); } // Note that the verticle keepout (if applicable) is subtracted *after* the bleed is applied; otherwise // text would bleed into the keepout zone. if (vertical_keepout_mode > 0) { vertical_keepout_width = flap_width + bleed*2; // keepout must expand by "bleed" on the left and right translate([-bleed, flap_height - flap_pin_width/2 - vertical_keepout_size, 0]) { square([vertical_keepout_width, vertical_keepout_size]); } } // TODO: consider adding horizontal keepout; it may be undesirable for text to meet the sides of the flaps // (or possibly extend beyond the sides if bleed > 0). } translate([flap_width/2, -flap_pin_width/2, 0]) { rotation = front ? 0 : -180; // flip upside-down for back gap_comp = (use_letter_gap_compensation() == true) ? -flap_gap/2 : 0; translate([0, gap_comp, 0]) { rotate([rotation, 0, 0]) { _draw_letter(letter, flap_gap); } } } } } } } // Highlight any portion of the letter within the keepout region in red, if desired. if (vertical_keepout_mode == 1) { color([1,0,0]) { translate([0, 0, front ? flap_thickness/2 + eps : -flap_thickness/2 - eps]) { linear_extrude(height=1, center=true) { intersection() { offset(r=bleed) { flap_2d(); } translate([0, flap_height - flap_pin_width/2 - vertical_keepout_size, 0]) { square([flap_width, vertical_keepout_size]); } translate([flap_width/2, -flap_pin_width/2, 0]) { rotation = front ? 0 : -180; // flip upside-down for back gap_comp = (use_letter_gap_compensation() == true) ? -flap_gap/2 : 0; translate([0, gap_comp, 0]) { rotate([rotation, 0, 0]) { _draw_letter(letter, flap_gap); } } } } } } } } } module flap_with_letters(flap_color, letter_color, flap_index, flap_gap, flap=true, front_letter=true, back_letter=true, bleed=0, print_3d=false) { if (len(character_list) != get_num_flaps()) { echo("Warning: character_list and num_flaps mismatch!"); } if (flap) { _flap(flap_color); } if (front_letter) { _flap_letter(get_letter_for_front(flap_index), letter_color, flap_gap, front=true, bleed=bleed, print_3d=print_3d); } if (back_letter) { _flap_letter(get_letter_for_back(flap_index), letter_color, flap_gap, front=false, bleed=bleed, print_3d=print_3d); } } // Example: i = 1; gap = 5; flap_with_letters([1,0,0], [1,1,0], flap_index=i, flap_gap=gap, bleed=2); translate([0, -flap_pin_width-gap, 0]) rotate([180, 0, 0]) { flap_with_letters([1,0,0], [1,1,0], flap_index=i - 1, flap_gap=gap, bleed=2); } ================================================ FILE: 3d/flap_3dp.scad ================================================ /* Copyright 2025 Scott Bezek and the splitflap contributors 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. */ use; // TODO: extract core flap spool dimensions used for flap gap instead of using the full splitflap file use; generateFullFlap = false; // If true, generates the full flap STL generateText = false; // If generateFullFlap is false, this controls what part of the STL to generate generateFrontText = true; // If generateText is true, this controls generation of the front text generateBackText = true; // If generateText is true, this controls generation of the back text flap_number = 0; flap_gap = get_flap_gap(); if (generateFullFlap) { // Generate the full flap using the standard function flap_with_letters([0,0,0], [1,1,1], flap_index=flap_number, flap_gap=flap_gap, bleed=0, print_3d=true); } else { if (generateText == false) { // Generate just the flap STL with the letters removed difference() { flap_with_letters([0,0,0], [1,1,1], front_letter=false, back_letter=false, flap_index=flap_number, flap_gap=flap_gap, bleed=0, print_3d=true); flap_with_letters([0,0,0], [1,1,1], flap=false, flap_index=flap_number, flap_gap=flap_gap, bleed=0, print_3d=true); } } else { // Generate just the letters STL flap_with_letters([0,0,0], [1,1,1], front_letter=generateFrontText, back_letter=generateBackText, flap=false, flap_index=flap_number, flap_gap=flap_gap, bleed=0, print_3d=true); } } ================================================ FILE: 3d/flap_characters.scad ================================================ character_list = " ABCDEFGHIJKLMNOPQRSTUVWXYZg0123456789r.?-$'#yp,!@&w"; function get_character_list() = character_list; ================================================ FILE: 3d/flap_dimensions.scad ================================================ /* Copyright 2018 Scott Bezek and the splitflap contributors 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. */ flap_width = 54; flap_height = 43; flap_thickness = 30 / 1000 * 25.4; // 30 mil flap_corner_radius = 3.1; // 2.88-3.48mm (used just for display) flap_notch_height_auto = false; flap_notch_height_default = 15; flap_notch_height = (flap_notch_height_auto == true) ? sqrt(spool_outer_radius*spool_outer_radius - flap_pitch_radius*flap_pitch_radius) : flap_notch_height_default; flap_notch_depth = 3.2; flap_pin_width = 1.4; ================================================ FILE: 3d/flap_fonts.scad ================================================ /* Copyright 2020-2021 Scott Bezek and the splitflap contributors 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. */ include; use; use; // To try other experimental fonts, download fonts from Google Fonts to these locations and add `use` statements // fonts/PoiretOne/PoiretOne-Regular.ttf // fonts/Voltaire/Voltaire-Regular.otf // fonts/PTSansNarrow/PTSansNarrow-Regular.ttf // ----------------------- // Configurable parameters // ----------------------- font_preset = "Epilogue"; // See available presets below letter_gap_comp = true; // Shifts letter positions to compensate for gap between flaps // --------------------------- // End configurable parameters // --------------------------- // Configure font presets below. Each font has the following settings: // 'font' // Font name - see https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Text#Using_Fonts_&_Styles // 'height' // Font size (height) relative to flaps. i.e. a value of 1 sets the font size equal to the height of the top and bottom flaps. // 'width' // Width scale factor. 1 = use default font width. // 'offset_x' // Horizontal offset, in mm, of letters within flaps. A value of 0 uses default font centering. // 'offset_y' // Vertical offset, in mm, of letters within flaps. A value of 0 uses default font centering. // 'overrides' // Array of position/size overrides for specific letters. Each entry is a set of overrides for a single letter, // specified as an array with the following entries: // - Letter to override (e.g. "M"). Case must match for the override to apply. // - Additional X position offset, in mm (e.g. -5). Can be undef or 0 to omit. // - Additional Y position offset, in mm (e.g. 2.5). Can be undef or 0 to omit. // - Height override, as a value relative to flap height (e.g. 0.7). Replaces letter_height for this letter. Can be undef to omit. // - Width override, as a value relative to default font width (e.g. 0.7). Replaces letter_width for this letter. Can be undef to omit. // - Thickness offset override. _font_settings = [ "Roboto", [ "font", "RobotoCondensed", "height", 0.6, "width", 1, "offset_x", -0.78, "offset_y", 0.7, "overrides", [ ["@", 0, 1], ], ], // https://fonts.google.com/specimen/Bangers "Bangers", [ "font", "Bangers", "height", 0.85, "width", 0.7, "offset_x", -5.5, "offset_y", -1, "overrides", [ ["M", 2.5, 0], ["Q", 0, 1, 0.82], ["W", -2, 0], [",", 0, -4, 0.6, .8], ["'", 0, 6, 0.65, .8], ], ], "OCR-A", [ "font", "OCRAStd", "height", 0.7, "width", 1, "offset_x", -0.78, "offset_y", 0, "overrides", [], ], "Epilogue", [ "font", "Epilogue:style=Medium", "height", 0.7, "width", 1, "offset_x", -0.65, "offset_y", -0.8, "color_offset_y", 0.4, "thickness_offset", 0, "overrides", [ // x, y, height, width, thickness ["@", 1.2, 0, .65, 0.7, 0.4], ["&", 1.2, 0, undef, 0.9, 0], ["C", 0, 0, undef, 0.95, 0], ["G", 0.9, 0, undef, 0.98, 0], ["W", -0.15, undef, undef, 0.72, 1], ["M", -0.16, undef, undef, 0.795, 0.6], ["O", 0, 0, undef, 0.92, 0], ["Q", 0, 3, 0.62, undef, 0.4], [",", 0, -1.6, 0.6, undef, 0], ], ], "Poiret", [ "font", "PoiretOne", "height", 0.65, "width", 0.75, "offset_x", -0.6, "offset_y", 0.65, "overrides", [ ["W", 0, 0, 0.65, 0.7] ], "thickness_offset", 2, "color_height", 0.455, "color_offset_y", 1.4, ], "Voltaire", [ "font", "Voltaire:style=Regular", "height", 0.75, "width", 1, "offset_x", -0.6, "offset_y", -0.65, "overrides", [], // "color_height", 0.455, // "color_offset_y", 1.4, ], "PTSansNarrow", [ "font", "PTSansNarrow", "height", 0.7, "width", 1, "offset_x", -0.6, "offset_y", 2, "overrides", [ ["@", 0, 4, 0.65, 0.8], ["Q", 0, 4, 0.6], ], // "color_height", 0.455, // "color_offset_y", 1.4, ], "Righteous", [ "font", "Righteous", "height", 0.6, "width", 1, "offset_x", 0, "offset_y", 0, "overrides", [ // ["@", 0, 4, 0.65, 0.8], // ["Q", 0, 4, 0.6], ], // "color_height", 0.455, // "color_offset_y", 1.4, ], ]; // Private functions function _get_entry_in_dict_array(arr, key) = search([key], arr) != [[]] ? arr[search([key], arr)[0] + 1] : undef; function _get_font_settings() = _get_entry_in_dict_array(_font_settings, font_preset); // Public functions function use_letter_gap_compensation() = letter_gap_comp; function get_font_setting(key) = _get_entry_in_dict_array(_get_font_settings(), key); function get_letter_overrides(letter) = get_font_setting("overrides")[search([letter], get_font_setting("overrides"))[0]]; ================================================ FILE: 3d/font_generator.scad ================================================ /* Copyright 2020 Scott Bezek and the splitflap contributors 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. */ include; use; use; use; use; // ----------------------- // Configurable parameters // ----------------------- num_columns = 5; // Number of columns for layout; 0 for infinite start_row = 0; // First row to render row_count = 1000; // Number of rows to render only_side = 0; // 0=both, 1=top only, 2=bottom only // "Standard" layout, of all flaps front side or back side, which can be rendered to 2 separate files // for double-sided (duplex) printing on a single substrate. Note that the flap order goes // right-to-left on the back side, corresponding to the flipped order when printing on the back side // of the substrate. See MODE_FRONT_BACK for a better alternative when applying lettering to flaps // one-by-one. MODE_DOUBLE_SIDED = 0; // Similar to MODE_DOUBLE_SIDED, this generates separate front and back layouts, but both the front // and back sides are ordered left-to-right. This cannot be used for duplex printing on a single sheet // substrate, but is ideal for things like adhesive vinyl where each letter will be applied individually. MODE_FRONT_BACK = 1; // If you want to view the full font with each letter as it appears when at the front of the display, // it requires rendering twice as many flaps and a special layout with the bottom flaps flipped over. // You also probably want to set only_side to 1 when using this layout. MODE_FULL_FONT = 2; // Each flap's front side is laid out side-by-side with its back side. // You probably want to set only_side to 1 when using this layout. MODE_SIDE_BY_SIDE = 3; layout_mode = MODE_DOUBLE_SIDED; flip_individual_flaps = false; flip_entire_layout = false; // Flip the entire layout of flaps over (e.g. when exporting the bottom sides) // Gap between flaps spacing_x = 5; spacing_y = 5; bleed = 0; // Amount of bleed (in mm) for text to expand beyond the flap boundary flap_color = [1,1,1]; letter_color = [0,0,0]; print_3d = false; render_alignment_marks = false; // Whether to render markings to help with alignment/registration (e.g. for screen printing) // --------------------------- // End configurable parameters // --------------------------- character_list = get_character_list(); cols = (num_columns == 0) ? len(character_list) : num_columns; total_rows = floor((len(character_list)-1+cols) / cols); visible_rows = min(row_count, total_rows - start_row); kerf_width = 0; render_fill = false; flap_gap = get_flap_gap(); assert(!(layout_mode != MODE_DOUBLE_SIDED && render_alignment_marks), "Alignment marks are only supported with duplex double-sided layout mode"); if (!is_projection_rendering()) { echo("Info: this model is intended for use via generate_fonts.py in order to export flap font files."); } module flap_transform(row, col) { x_pos = layout_mode == MODE_SIDE_BY_SIDE ? (flap_width*2 + spacing_x*3) * col : (flap_width + spacing_x) * col; y_pos = layout_mode == MODE_FULL_FONT ? (flap_height*2 + flap_gap + spacing_y) * row: (flap_height + spacing_y) * row; translate([x_pos, -y_pos, 0]) { children(); } } module flap_pos(i) { col = i % cols; row = floor(i / cols); offsetted_row = row - start_row; if (offsetted_row >= 0 && offsetted_row < row_count) { flap_transform(offsetted_row, col) { children(); } } } module configured_flap(index, flap, front_letter, back_letter) { flap_with_letters(flap_color, letter_color, index, flap_gap, flap=flap, front_letter=front_letter, back_letter=back_letter, bleed=bleed, print_3d=print_3d); if (layout_mode == MODE_FULL_FONT) { translate([0, -flap_pin_width -flap_gap, 0]) { rotate([180,0,0]) { flap_with_letters(flap_color, letter_color, index - 1, flap_gap, flap=flap, front_letter=back_letter, back_letter=front_letter, bleed=bleed, print_3d=print_3d); } } } if (layout_mode == MODE_SIDE_BY_SIDE) { translate([2*flap_width + spacing_x, 0]) { rotate([0, 180,0]) { flap_with_letters(flap_color, letter_color, index, flap_gap, flap=flap, front_letter=back_letter, back_letter=front_letter, bleed=bleed, print_3d=print_3d); } } } } module fill_text() { // If 'render_fill' is 'true', only continue if 'render_etch' is also set by the script if (!render_fill || render_fill && render_etch) { children(); } } module alignment_marks() { alignment_offset = 5; secondary_alignment_offset = 15; alignment_diameter = 5; // Holes in each corner, intended for alignment pins when building a flap tray, which register the flap tray to the printing platen for repeatability color([1,0,0]) { linear_extrude(height=5) { translate([0, flap_height + alignment_offset - flap_pin_width/2]) { circle(d=alignment_diameter, $fn=30); } translate([0, -(flap_height + spacing_y)*(visible_rows - 1) - alignment_offset - flap_pin_width/2]) { circle(d=alignment_diameter, $fn=30); } translate([cols * flap_width + (cols - 1) * spacing_x, flap_height + alignment_offset - flap_pin_width/2]) { circle(d=alignment_diameter, $fn=30); } translate([cols * flap_width + (cols - 1) * spacing_x, -(flap_height + spacing_y)*(visible_rows - 1) - alignment_offset - flap_pin_width/2]) { circle(d=alignment_diameter, $fn=30); } } } // Additional alignment holes in each corner, intended as registration marks for aligning the screen/image to the flap tray during initial setup color([0,0,1]) { linear_extrude(height=5) { translate([secondary_alignment_offset, flap_height + alignment_offset - flap_pin_width/2]) { circle(d=alignment_diameter, $fn=30); } translate([secondary_alignment_offset, -(flap_height + spacing_y)*(visible_rows - 1) - alignment_offset - flap_pin_width/2]) { circle(d=alignment_diameter, $fn=30); } translate([cols * flap_width + (cols - 1) * spacing_x - secondary_alignment_offset, flap_height + alignment_offset - flap_pin_width/2]) { circle(d=alignment_diameter, $fn=30); } translate([cols * flap_width + (cols - 1) * spacing_x - secondary_alignment_offset, -(flap_height + spacing_y)*(visible_rows - 1) - alignment_offset - flap_pin_width/2]) { circle(d=alignment_diameter, $fn=30); } } } } module _flip() { translate([flip_entire_layout ? cols*flap_width + (cols-1)*spacing_x : 0, 0, 0]) { rotate([0, flip_entire_layout ? 180 : 0, 0]) { children(); } } } module _flip_flap() { translate([flip_individual_flaps ? flap_width : 0, 0, 0]) { rotate([0, flip_individual_flaps ? 180 : 0, 0]) { children(); } } } render_index = -1; render_etch = false; projection_renderer(render_index = render_index, render_etch = render_etch, kerf_width = kerf_width, panel_height = 0, panel_horizontal = 0, panel_vertical = 0) { _flip() { for(i = [0 : len(character_list) - 1]) { flap_pos(i) { _flip_flap() { configured_flap(i, flap=true, front_letter=false, back_letter=false); } } } } fill_text() { _flip() { for(i = [0 : len(character_list) - 1]) { show_front = only_side == 0 || only_side == 1; show_back = only_side == 0 || only_side == 2; flap_pos(i) { _flip_flap() { configured_flap(i, flap=false, front_letter=show_front, back_letter=show_back); } } } } } if (render_alignment_marks) { fill_text() { _flip() { alignment_marks(); } } } } ================================================ FILE: 3d/fonts/Epilogue/OFL.txt ================================================ Copyright 2020 The Epilogue Project Authors (https://github.com/Etcetera-Type-Co/Epilogue) This Font Software is licensed under the SIL Open Font License, Version 1.1. This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL ----------------------------------------------------------- SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 ----------------------------------------------------------- PREAMBLE The goals of the Open Font License (OFL) are to stimulate worldwide development of collaborative font projects, to support the font creation efforts of academic and linguistic communities, and to provide a free and open framework in which fonts may be shared and improved in partnership with others. The OFL allows the licensed fonts to be used, studied, modified and redistributed freely as long as they are not sold by themselves. The fonts, including any derivative works, can be bundled, embedded, redistributed and/or sold with any software provided that any reserved names are not used by derivative works. The fonts and derivatives, however, cannot be released under any other type of license. The requirement for fonts to remain under this license does not apply to any document created using the fonts or their derivatives. DEFINITIONS "Font Software" refers to the set of files released by the Copyright Holder(s) under this license and clearly marked as such. This may include source files, build scripts and documentation. "Reserved Font Name" refers to any names specified as such after the copyright statement(s). "Original Version" refers to the collection of Font Software components as distributed by the Copyright Holder(s). "Modified Version" refers to any derivative made by adding to, deleting, or substituting -- in part or in whole -- any of the components of the Original Version, by changing formats or by porting the Font Software to a new environment. "Author" refers to any designer, engineer, programmer, technical writer or other person who contributed to the Font Software. PERMISSION & CONDITIONS Permission is hereby granted, free of charge, to any person obtaining a copy of the Font Software, to use, study, copy, merge, embed, modify, redistribute, and sell modified and unmodified copies of the Font Software, subject to the following conditions: 1) Neither the Font Software nor any of its individual components, in Original or Modified Versions, may be sold by itself. 2) Original or Modified Versions of the Font Software may be bundled, redistributed and/or sold with any software, provided that each copy contains the above copyright notice and this license. These can be included either as stand-alone text files, human-readable headers or in the appropriate machine-readable metadata fields within text or binary files as long as those fields can be easily viewed by the user. 3) No Modified Version of the Font Software may use the Reserved Font Name(s) unless explicit written permission is granted by the corresponding Copyright Holder. This restriction only applies to the primary font name as presented to the users. 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font Software shall not be used to promote, endorse or advertise any Modified Version, except to acknowledge the contribution(s) of the Copyright Holder(s) and the Author(s) or with their explicit written permission. 5) The Font Software, modified or unmodified, in part or in whole, must be distributed entirely under this license, and must not be distributed under any other license. The requirement for fonts to remain under this license does not apply to any document created using the Font Software. TERMINATION This license becomes null and void if any of the above conditions are not met. DISCLAIMER THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE. ================================================ FILE: 3d/fonts/roboto/LICENSE.txt ================================================ Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] 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. ================================================ FILE: 3d/global_constants.scad ================================================ /* Copyright 2015-2021 Scott Bezek and the splitflap contributors 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. */ // Almost nothing should be a global constant. Think hard before adding to this file. // "Epsilon" - a small error tolerance value, used when designing 3d parts to avoid exact complanar faces that cause OpenSCAD rendering artifacts // See https://3dprinting.stackexchange.com/a/9795 eps=0.01; ================================================ FILE: 3d/label.scad ================================================ /* Copyright 2015-2016 Scott Bezek and the splitflap contributors 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. */ use; module roboto(text, size) { text(text=text, size=size, font="Roboto:style=Bold"); } module text_label(lines) { text_height=2; module text_lines(lines, text_height, spacing=1.5) { for (i = [0 : len(lines)-1]) { translate([0, text_height * spacing * (len(lines)-1-i), 0]) { roboto(lines[i], text_height); } } } text_lines(lines, text_height); } ================================================ FILE: 3d/m4_dimensions.scad ================================================ /* Copyright 2015-2018 Scott Bezek and the splitflap contributors 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. */ // M4 bolts m4_hole_diameter = 4.5; m4_bolt_length = 10; m4_button_head_diameter = 7.6 + .2; m4_button_head_length = 2.2 + .2; m4_nut_width_flats = 7 + .2; m4_nut_width_corners = 7/cos(180/6); m4_nut_width_corners_padded = m4_nut_width_corners + .2; m4_nut_length = 3.2; m4_nut_length_padded = m4_nut_length + .2; ================================================ FILE: 3d/pcb.scad ================================================ /* Copyright 2015-2018 Scott Bezek and the splitflap contributors 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. */ include ; include ; module pcb_outline_2d() { difference() { translate([-pcb_edge_to_hole_x, -pcb_height + pcb_edge_to_hole_y]) { square([pcb_length, pcb_height]); } circle(r=pcb_hole_radius, $fn=30); translate([pcb_hole_to_bolt_hole_x, -pcb_hole_to_bolt_hole_y]) { circle(r=pcb_bolt_hole_radius, $fn=30); } } } // 3D PCB module, origin at the center of the mounting hole on the bottom surface of the PCB module pcb(pcb_to_spool) { color([0, 0.5, 0]) { linear_extrude(height=pcb_thickness) { pcb_outline_2d(); } } mirror([0, 0, 1]) { // Connector color([0, 0, 0]) { translate([pcb_hole_to_connector_pin_2_x - pcb_connector_width/2, -pcb_hole_to_connector_pin_2_y - pcb_connector_length, 0]) { cube([pcb_connector_width, pcb_connector_length, pcb_connector_height]); } } // Connector pins color([0.5, 0.5, 0.5]) { translate([pcb_hole_to_connector_pin_2_x - pcb_connector_pin_width/2, -pcb_hole_to_connector_pin_2_y - pcb_connector_pin_width/2, -pcb_connector_pin_tail_length + 2.5/2]) { cube([pcb_connector_pin_width, pcb_connector_pin_width, pcb_connector_pin_tail_length]); translate([-connector_pin_pitch, 0, 0]) { cube([pcb_connector_pin_width, pcb_connector_pin_width, pcb_connector_pin_tail_length]); } translate([connector_pin_pitch, 0, 0]) { cube([pcb_connector_pin_width, pcb_connector_pin_width, pcb_connector_pin_tail_length]); } } } } // Sensor body color([0, 0, 0]) { translate([pcb_hole_to_sensor_x - hall_effect_width/2, pcb_hole_to_sensor_y - hall_effect_height/2, pcb_thickness]) { cube([hall_effect_width, hall_effect_height, hall_effect_thickness]); } } } function pcb_hole_to_sensor_x() = pcb_hole_to_sensor_x; function pcb_hole_to_sensor_y() = pcb_hole_to_sensor_y; function pcb_thickness() = pcb_thickness; // Example usage: pcb(10); ================================================ FILE: 3d/projection_renderer.scad ================================================ /* Copyright 2015-2021 Scott Bezek and the splitflap contributors 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. */ _is_projection_rendering = false; // DO NOT MODIFY - this is set by the projection_renderer.py script module projection_renderer(render_index = -1, render_etch = false, kerf_width = 0, panel_height, panel_horizontal, panel_vertical) { if (is_projection_rendering()) { echo(num_components=$children); } if (render_index == -1) { children(); } else { translate([(panel_horizontal == 1 ? -kerf_width : 0), (panel_horizontal == 1 ? panel_height - kerf_width : 0) - panel_vertical * panel_height]) { rotate([0, 0, panel_horizontal == 1 ? 180 : 0]) { offset_size = (render_etch ? -kerf_width : kerf_width)/2; offset(delta=offset_size) { projection() { children(render_index); } } } } } } function is_projection_rendering() = _is_projection_rendering; ================================================ FILE: 3d/rough7380.scad ================================================ /* Copyright 2018 Scott Bezek and the splitflap contributors 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. */ module roughM4_7380(length) { eps = 0.1; thread_diameter = 4; head_diameter = 7.6; head_length = 2.2; driving_depth = 1.3; driving_apothem = 2.5/2; driving_radius = driving_apothem / cos(180/6); sphere_offset = 1.2; // Just a guess sphere_radius = sqrt(sphere_offset*sphere_offset + (head_diameter/2)*(head_diameter/2)); difference() { union() { translate([0, 0, -eps]) { cylinder(h=length+eps, d=thread_diameter, $fn=30); } difference() { translate([0, 0, sphere_offset]) { sphere(sphere_radius, $fn=30); } translate([0, 0, sphere_radius]) { cube([sphere_radius*2 + eps, sphere_radius*2 + eps, sphere_radius*2 + eps], center=true); } translate([0, 0, -sphere_radius - head_length]) { cube([sphere_radius*2 + eps, sphere_radius*2 + eps, sphere_radius*2 + eps], center=true); } } } translate([0, 0, -head_length-eps]) { cylinder(h=driving_depth+eps, r=driving_radius, $fn=6); } } } roughM4_7380(12); ================================================ FILE: 3d/scripts/colored_stl_exporter.py ================================================ # Copyright 2015-2016 Scott Bezek and the splitflap contributors # # 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. """Exports each color of a given OpenSCAD model as a separate .stl file. First, determines the set of unique colors used in the model by replacing usage of the 'color()' statement with a custom module that echos the color value when compiled (must be done at compilation time rather than simply parsing the .scad file since colors may be expressed as variables or other complex expressions). Note: only colors in the rgb array format ('[0.2, 0.1, 0.8]') are supported. Then, for each color, generates a model that replaces usage of 'color()' with a custom module that conditionally renders its children if the color argument matches the current color we're exporting. This model is run through OpenSCAD to generate an .stl file. Once all single-color .stl files have been exported, a manifest json file is generated that maps each .stl filename to its rgb color info.""" from __future__ import division from __future__ import print_function import errno import hashlib import json import logging import os import re try: import webcolors except ImportError: webcolors = None from multiprocessing.dummy import Pool import openscad USE_INCLUDE_REGEX = re.compile(r'\b(?Puse|include)\s*<\s*(?P.*?)\s*>\s*;') COLOR_REGEX = re.compile(r'\bcolor\s*\(') EXTRACTED_COLOR_REGEX = re.compile(r'ECHO: extracted_color = (?P.*)') # RGB_COLOR_REGEX = re.compile(r'\[(?P.*?),(?P.*?),(?P.*?)\]') RGBA_COLOR_REGEX = re.compile(r'\[(?P[0-9.]*), *?(?P[0-9.]*), *?(?P[0-9.]*)(?:, *)?(?P[0-9.]*)?\]') class ColoredStlExporter(object): def __init__(self, input_file, build_folder, openscad_variables = None): self.logger = logging.getLogger(__name__) self.input_file = input_file self.intermediate_folder = os.path.join(build_folder, 'intermediate') self.output_folder = os.path.join(build_folder, 'colored_stl') if openscad_variables is None: openscad_variables = {} self.openscad_variables = openscad_variables def run(self): mkdir_p(self.intermediate_folder) mkdir_p(self.output_folder) color_values = self._extract_colors() self.logger.debug('Found {} unique colors: {}'.format(len(color_values), color_values)) manifest = {} def render_color(color): file_name = self._export_stl(color) if file_name is not None: manifest[file_name + '.gz'] = ColoredStlExporter.parse_openscad_color(color) pool = Pool() for _ in pool.imap_unordered(render_color, color_values): # Consume results as they occur so any exception is rethrown pass pool.close() pool.join() with open(os.path.join(self.output_folder, 'manifest.json'), 'w') as f: f.write(json.dumps(manifest, indent=4)) def _extract_colors(self): """Returns a list of color expressions used within the input_file or any dependencies thereof""" self.logger.info("Extracting color information...") # Create a mutator that defines a color_extractor() module that prints the passed color argument and replaces # all color(xyz) declarations with color_extractor(xyz) modules instances. def replace_with_color_collector(contents): contents = COLOR_REGEX.sub(' color_extractor(', contents) return contents + ''' module color_extractor(c) { echo(extracted_color=c); children(); }''' intermediate_subfolder = os.path.join(self.intermediate_folder, 'color_extraction') self.walk_and_mutate_scad_files(replace_with_color_collector, intermediate_subfolder) # Compile the mutated scad model and collect the echo output for processing echo_file = os.path.join(self.intermediate_folder, 'color_extractor.echo') openscad.run( os.path.join(intermediate_subfolder, ColoredStlExporter.get_transformed_file_path(self.input_file)), echo_file, variables=self.openscad_variables, capture_output=True ) # Parse the color values from the output color_values = set() with open(echo_file, 'r') as f: for line in f: match = EXTRACTED_COLOR_REGEX.search(line) if match: color_values.add(match.group('color')) return color_values def _export_stl(self, color): """Exports an .stl file containing only objects of the specified color from the input model""" # Create a mutator that defines a color_selector() module that conditionally includes its children only if the # passed color argument is the color we're currently trying to export. def replace_with_color_selector(contents): contents = COLOR_REGEX.sub(' color_selector(', contents) return contents + ''' module color_selector(c) {{ precision = 0.0001; // arbitrary function compare_floats(x, y, i=0) = (len(x) != len(y)) ? false // if arrays differ in length, they can't be equal : (i >= len(x)) ? true // if we've hit the end of the arrays without issue, we're equal : (x[i] - precision <= y[i]) && x[i] + precision >= y[i] ? compare_floats(x, y, i+1) : false; // not equal, short circuit if (c == {0} || compare_floats(c, {0})) children(); }} '''.format(color) color_hash = hashlib.sha256(color.encode('utf-8')).hexdigest() intermediate_subfolder = os.path.join(self.intermediate_folder, 'color_' + color_hash) self.walk_and_mutate_scad_files(replace_with_color_selector, intermediate_subfolder) # Name the stl model after its color (but use a hash function to make sure it's a valid filename) file_name = color_hash + '.stl' self.logger.info('Exporting STL for color {} as {}...'.format(color, file_name)) try: openscad.run( os.path.join(intermediate_subfolder, ColoredStlExporter.get_transformed_file_path(self.input_file)), os.path.join(self.output_folder, file_name), variables=self.openscad_variables, capture_output=True ) except openscad.OpenSCADException as e: if b'Current top level object is empty.' in e.stderr: # No geometry in this color self.logger.debug(f'Ignoring color due to empty top level object. {color} {color_hash}') return None else: raise return file_name def walk_and_mutate_scad_files(self, mutate_function, intermediate_subfolder): mkdir_p(intermediate_subfolder) visited = set() to_process = [self.input_file] while len(to_process): current_file = to_process.pop(0) self.logger.debug('Processing {}'.format(current_file)) with open(current_file, 'rb') as f: contents = f.read() # Only process .scad files; copy any other file types (e.g. fonts) over as-is if current_file.lower().endswith('.scad'): contents = contents.decode('utf-8') current_folder = os.path.dirname(current_file) for include in USE_INCLUDE_REGEX.finditer(contents): next_filename = os.path.realpath( os.path.join(current_folder, include.group('filename'))) if next_filename not in visited: to_process.append(next_filename) visited.add(next_filename) def replace(match): return '{} <{}>;'.format(match.group('statement'), ColoredStlExporter.get_transformed_file_path( os.path.join(current_folder, match.group('filename')))) contents = mutate_function(USE_INCLUDE_REGEX.sub(replace, contents)).encode('utf-8') with open(os.path.join(intermediate_subfolder, ColoredStlExporter.get_transformed_file_path(current_file)), 'wb') as out_file: out_file.write(contents) @staticmethod def get_transformed_file_path(original_path): extension = os.path.splitext(original_path)[1] return hashlib.sha256(os.path.realpath(original_path).encode('utf-8')).hexdigest() + extension @staticmethod def parse_openscad_color(color): match = RGBA_COLOR_REGEX.search(color) if match: color_out = [ float(match.group('r')), float(match.group('g')), float(match.group('b')), ] if(match.group('a')): color_out.append(float(match.group('a'))) return color_out if '"' in color and webcolors: try: c = webcolors.name_to_rgb(color[1:-1]) # skip the "" return c.red/255., c.green/255., c.blue/255. except ValueError: pass raise ValueError('Failed to parse color. Must be named webcolor or in [, , ] format. {}'.format(color)) def mkdir_p(path): try: os.makedirs(path) except OSError as e: if e.errno == errno.EEXIST and os.path.isdir(path): pass else: raise if __name__ == '__main__': import argparse parser = argparse.ArgumentParser() parser.add_argument('input_file', type=str, help='OpenSCAD file to parse into STLs') parser.add_argument('output_folder', type=str, help='directory to place the colored STL files') args = parser.parse_args() ColoredStlExporter(args.input_file, args.output_folder).run() ================================================ FILE: 3d/scripts/dependencies.sh ================================================ #!/bin/bash set -e DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" set -v sudo apt-get update -qq sudo DEBIAN_FRONTEND=noninteractive apt-get install -y openscad inkscape imagemagick xvfb texlive-extra-utils sudo pip install -r "$DIR/requirements.txt" ================================================ FILE: 3d/scripts/generate_2d.py ================================================ #!/usr/bin/env python3 # Copyright 2015-2021 Scott Bezek and the splitflap contributors # # 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. import argparse import json import logging import os import subprocess import sys import zipfile from kerf_presets import KERF_PRESETS from svg_processor import SvgProcessor from projection_renderer import Renderer script_dir = os.path.dirname(os.path.abspath(__file__)) source_parts_dir = os.path.dirname(script_dir) repo_root = os.path.dirname(source_parts_dir) sys.path.append(repo_root) from util import ( app_paths, inkscape, rev_info, ) if __name__ == '__main__': logging.basicConfig(level=logging.DEBUG) parser = argparse.ArgumentParser() parser.add_argument('--panelize', type=int, default=1, help='Quantity to panelize - must be 1 or an even number') parser.add_argument('--skip-optimize', action='store_true', help='Don\'t remove redundant/overlapping cut lines') kerf_group = parser.add_mutually_exclusive_group() kerf_group.add_argument('--kerf', type=float, help='Override kerf_width value') kerf_group.add_argument('--kerf-preset', choices=KERF_PRESETS, help='Override kerf_width using a defined preset') parser.add_argument('--render-raster', action='store_true', help='Render raster PNG from the output SVG (requires ' 'Inkscape)') parser.add_argument('--calculate-dimensions', action='store_true', help='Calculate overall cut file dimensions (' 'requires Inkscape)') parser.add_argument('--num-flaps', type=int, help='Override NUM_FLAPS') parser.add_argument('--thickness', type=float, help='Override panel thickness value') parser.add_argument('--no-etch', action='store_true', help='Do not render laser-etched features') parser.add_argument('--mirror', action='store_true', help='Mirror the assembly so the outside faces are facing up. ' 'Note that this will remove all etched features.') parser.add_argument('--render-elecrow', action='store_true', help='Render an additional zipped pdf with labeled ' 'dimensions and only cut lines, for Elecrow. ' 'Requires Inkscape and pdfjam. Implies ' '--no-etch, --calculate-dimensions, ' '--skip-optimize, and --mirror') parser.add_argument('--no-alignment-bar', action='store_true', help='Do not include features for the alignment bar') parser.add_argument('--no-front-panel', action='store_true', help='Do not include the front face of the enclosure, ' 'e.g. if you will use ' 'generate_combined_front_panel.py instead.') parser.add_argument('--no-mounting-holes', action='store_true', help='Do not include mounting hole on top/bottom ' 'enclosure pieces.') parser.add_argument('--no-connectors', action='store_true', help='Do not include inter-module connector pieces.') parser.add_argument('--no-source-info', action='store_true', help='Do not include the source info: revision, date, url.') parser.add_argument('--cut-home-indicator', action='store_true', help='Cut, instead of etch, the home position ' 'indicator on the spool.') args = parser.parse_args() if args.panelize > 1: raise RuntimeError('The --panelize option is no longer supported for v2 hardware') if args.render_elecrow: args.no_etch = True args.calculate_dimensions = True args.skip_optimize = True args.mirror = True laser_parts_directory = os.path.join(source_parts_dir, 'build', 'laser_parts') extra_variables = { 'render_revision': rev_info.git_short_rev(), 'render_date': rev_info.current_date(), 'render_etch': not args.no_etch, 'render_2d_mirror': args.mirror, 'enable_alignment_bar': not args.no_alignment_bar, 'render_front_panel': not args.no_front_panel, 'enable_mounting_holes': not args.no_mounting_holes, 'enable_connectors': not args.no_connectors, 'enable_source_info': not args.no_source_info, 'render_home_indicator_as_cut': args.cut_home_indicator, } if args.kerf is not None: extra_variables['kerf_width'] = args.kerf elif args.kerf_preset is not None: extra_variables['kerf_width'] = KERF_PRESETS[args.kerf_preset] if args.thickness is not None: extra_variables['thickness'] = args.thickness if args.num_flaps is not None: extra_variables['num_flaps'] = args.num_flaps print('Variables:\n' + json.dumps(extra_variables, indent=4)) renderer = Renderer(os.path.join(source_parts_dir, 'splitflap.scad'), laser_parts_directory, extra_variables) renderer.clean() svg_output, output_data = renderer.render_svgs(panelize_quantity=args.panelize) logging.debug(f'Output data: {output_data}') processor = SvgProcessor(svg_output) redundant_lines, merged_lines = None, None if not args.skip_optimize: logging.info('Removing redundant lines') redundant_lines, merged_lines = processor.remove_redundant_lines() processor.write(svg_output) logging.info(f'\n\n\nDone rendering to SVG: {svg_output}') if args.calculate_dimensions: def getDimensionSvgContents(text, width): return f'{text}' module_dimensions_file = os.path.join(laser_parts_directory, os.path.splitext(os.path.basename(svg_output))[0] + '_module_dimensions.svg') with open(module_dimensions_file, 'w') as f: f.write(getDimensionSvgContents(f'{output_data["enclosure_width"]}mm width, {output_data["enclosure_height"]}mm height, {output_data["enclosure_length"]}mm depth', 1100)) svg_for_dimensions = os.path.join(laser_parts_directory, os.path.splitext(os.path.basename(svg_output))[0] + '_dimensions.svg') processor.apply_dimension_calculation_style() processor.write(svg_for_dimensions) logging.info('Read dimensions') width_px = float(subprocess.check_output([ app_paths.get('inkscape'), ] + inkscape.without_gui() + [ '--query-width', svg_for_dimensions, ])) width_mm = width_px * 25.4 / 96 # Assuming 96dpi... height_px = float(subprocess.check_output([ app_paths.get('inkscape'), ] + inkscape.without_gui() + [ '--query-height', svg_for_dimensions, ])) height_mm = height_px * 25.4 / 96 # Assuming 96dpi... panel_dimensions_file = os.path.join(laser_parts_directory, os.path.splitext(os.path.basename(svg_output))[0] + '_panel_dimensions.svg') with open(panel_dimensions_file, 'w') as f: f.write(getDimensionSvgContents(f'{width_mm:.2f}mm x {height_mm:.2f}mm', 500)) if args.render_elecrow: elecrow_svg = os.path.join(laser_parts_directory, 'elecrow.svg') elecrow_intermediate_pdf = os.path.join(laser_parts_directory, 'elecrow_intermediate.pdf') elecrow_pdf = os.path.join(laser_parts_directory, 'elecrow.pdf') elecrow_zip = os.path.join(laser_parts_directory, 'elecrow.zip') processor.apply_elecrow_style() processor.add_dimensions(width_mm, height_mm, args.mirror) processor.write(elecrow_svg) logging.info('Resize SVG canvas') # since version 1.2, inkscape has replaced 'verbs' with 'actions' # see: https://wiki.inkscape.org/wiki/Using_the_Command_Line if inkscape._version() < 1.2: subprocess.check_call([ app_paths.get('inkscape'), '--verb=FitCanvasToDrawing', '--verb=FileSave', '--verb=FileClose', '--verb=FileQuit', elecrow_svg, ]) else: subprocess.check_call([ app_paths.get('inkscape'), "--actions=select-all;fit-canvas-to-selection;export-type:svg;export-plain-svg;export-do", elecrow_svg, "-o", elecrow_svg, ]) logging.info('Output PDF') subprocess.check_call([ app_paths.get('inkscape'), elecrow_svg, ] + inkscape.export_pdf(elecrow_intermediate_pdf)) logging.info('Resize PDF') subprocess.check_call([ app_paths.get('pdfjam'), '--papersize', f'{{{width_mm + 80}mm,{height_mm + 80}mm}}', '--noautoscale', 'true', '--outfile', elecrow_pdf, elecrow_intermediate_pdf, ]) logging.info('Zip') with zipfile.ZipFile(elecrow_zip, 'w', zipfile.ZIP_DEFLATED) as zip: zip.write(elecrow_pdf, 'elecrow.pdf') if args.render_raster: # Export to png logging.info('Generating raster preview') raster_svg = os.path.join(laser_parts_directory, 'raster.svg') raster_png = os.path.join(laser_parts_directory, 'raster.png') processor.apply_raster_render_style() if not args.skip_optimize: # Show which redundant lines were removed and lines merged processor.add_highlight_lines(redundant_lines, '#ff0000') processor.add_highlight_lines(merged_lines, '#0000ff') processor.write(raster_svg) logging.info('Resize SVG canvas') subprocess.check_call([ app_paths.get('inkscape'), '--verb=FitCanvasToDrawing', '--verb=FileSave', '--verb=FileClose', '--verb=FileQuit', raster_svg, ]) logging.info('Export PNG') subprocess.check_call([ app_paths.get('inkscape'), '--export-width=320', '--export-background=white', ] + inkscape.export_png(raster_png) + [ raster_svg, ]) ================================================ FILE: 3d/scripts/generate_3d_print_flaps.py ================================================ #!/usr/bin/env python3 # Copyright 2025 Scott Bezek and the splitflap contributors # # 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. from __future__ import division from __future__ import print_function import argparse import logging import os import sys import time import openscad from multiprocessing.dummy import Pool from shutil import rmtree script_dir = os.path.dirname(os.path.abspath(__file__)) source_parts_dir = os.path.dirname(script_dir) repo_root = os.path.dirname(source_parts_dir) sys.path.append(repo_root) from util import file_util if __name__ == "__main__": logging.basicConfig(level=logging.DEBUG) parser = argparse.ArgumentParser() parser.add_argument( "-f", "--font", type=str, help="Name of font preset to use - see flap_fonts.scad", ) parser.add_argument("-t", "--text", type=str, help="String of text to generate") parser.add_argument( "--vertical-keepout-clip", action="store_true", help="Clip letters that violate vertical keepout zones", ) parser.add_argument( "--single-stl", action="store_true", default=False, help="Generate a single STL file for each flap", ) parser.add_argument( "--single-letter-stl", action="store_true", default=False, help="Generate a single STL file for the front and back letters (only used if --single-stl is not set)", ) parser.add_argument( "--parallelism", type=int, help="How many OpenSCAD exports to run in parallel. Defaults to CPU count if unspecified.", default=None, ) args = parser.parse_args() extra_variables = {} if args.font is not None: extra_variables["font_preset"] = args.font if args.text is not None: extra_variables["character_list"] = args.text if args.vertical_keepout_clip: extra_variables["vertical_keepout_mode"] = 2 output_directory = os.path.join(source_parts_dir, "build", "flap_3dp") rmtree(output_directory, ignore_errors=True) def render_flap(flap_number): flap_path = os.path.join(output_directory, f"flap_{flap_number:02}") file_util.mkdir_p(flap_path) openscad_variables = { "flap_number": flap_number, "generateFullFlap": args.single_stl, "generateText": False, } openscad_variables.update(extra_variables) openscad.run( os.path.join(source_parts_dir, "flap_3dp.scad"), os.path.join(flap_path, f"{flap_number:02}_flap.stl"), variables=openscad_variables, capture_output=True, ) if not args.single_stl: if args.single_letter_stl: openscad_variables["generateText"] = True openscad.run( os.path.join(source_parts_dir, "flap_3dp.scad"), os.path.join(flap_path, f"{flap_number:02}_letters.stl"), variables=openscad_variables, capture_output=True, ignore_empty_top_level_object=True, ) else: openscad_variables["generateText"] = True openscad_variables["generateFrontText"] = True openscad_variables["generateBackText"] = False openscad.run( os.path.join(source_parts_dir, "flap_3dp.scad"), os.path.join(flap_path, f"{flap_number:02}_letter_front.stl"), variables=openscad_variables, capture_output=True, ignore_empty_top_level_object=True, ) openscad_variables["generateText"] = True openscad_variables["generateFrontText"] = False openscad_variables["generateBackText"] = True openscad.run( os.path.join(source_parts_dir, "flap_3dp.scad"), os.path.join(flap_path, f"{flap_number:02}_letter_back.stl"), variables=openscad_variables, capture_output=True, ignore_empty_top_level_object=True, ) pool = Pool(args.parallelism) num_flaps = len(args.text) if args.text is not None else 52 for _ in pool.imap_unordered(render_flap, range(num_flaps)): # Consume results as they occur so any exception is rethrown pass pool.close() pool.join() ================================================ FILE: 3d/scripts/generate_combined_front_panel.py ================================================ #!/usr/bin/env python3 # Copyright 2021 Scott Bezek and the splitflap contributors # # 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. from __future__ import division from __future__ import print_function import argparse import logging import os import subprocess import sys from kerf_presets import KERF_PRESETS from svg_processor import SvgProcessor from projection_renderer import Renderer script_dir = os.path.dirname(os.path.abspath(__file__)) source_parts_dir = os.path.dirname(script_dir) repo_root = os.path.dirname(source_parts_dir) sys.path.append(repo_root) from util import ( app_paths, inkscape, ) CENTER_MODES = { 'letter': 0, 'window': 1, 'module': 2, } def render(extra_variables, output_directory): renderer = Renderer(os.path.join(source_parts_dir, 'combined_front_panel.scad'), output_directory, extra_variables) renderer.clean() svg_output, _ = renderer.render_svgs(panelize_quantity = 1) logging.info('\n\n\nDone rendering to SVG: ' + svg_output) return svg_output if __name__ == '__main__': logging.basicConfig(level=logging.DEBUG) parser = argparse.ArgumentParser("") kerf_group = parser.add_mutually_exclusive_group(required=True) kerf_group.add_argument('--kerf', type=float, help='Set kerf_width value') kerf_group.add_argument('--kerf-preset', choices=KERF_PRESETS, help='Set kerf_width using a defined preset') kerf_group.add_argument('--tool-diameter', type=float, help='Diameter of cutting tool') parser.add_argument('--render-raster', action='store_true', help='Render raster PNG from the output SVG (requires ' 'Inkscape)') parser.add_argument('--rows', type=int, required=True, help='Number of rows') parser.add_argument('--cols', type=int, required=True, help='Number of columns') parser.add_argument('--num-flaps', type=int, help='Override NUM_FLAPS') x_group = parser.add_mutually_exclusive_group(required=True) x_group.add_argument('--spacing-x', type=float, help='Horizontal gap between modules') x_group.add_argument('--center-center-x', type=float, help='Horizontal center-to-center distance between modules') y_group = parser.add_mutually_exclusive_group(required=True) y_group.add_argument('--spacing-y', type=float, help='Vertical gap between modules') y_group.add_argument('--center-center-y', type=float, help='Vertical center-to-center distance between modules') width_group = parser.add_mutually_exclusive_group(required=True) width_group.add_argument('--width', type=float, help='Width of the panel') width_group.add_argument('--frame-margin-x', type=float, help='Margin to add to the left and right sides') height_group = parser.add_mutually_exclusive_group(required=True) height_group.add_argument('--height', type=float, help='Height of the panel') height_group.add_argument('--frame-margin-y', type=float, help='Margin to add to the top and bottom') parser.add_argument('--center-mode', choices=CENTER_MODES, required=True, help='Specify how modules should be centered') args = parser.parse_args() extra_variables = { 'render_etch': False, } if args.kerf is not None: extra_variables['kerf_width'] = args.kerf elif args.kerf_preset is not None: extra_variables['kerf_width'] = KERF_PRESETS[args.kerf_preset] elif args.tool_diameter is not None: extra_variables['tool_diameter'] = args.tool_diameter extra_variables['rows'] = args.rows extra_variables['cols'] = args.cols if args.num_flaps is not None: extra_variables['num_flaps'] = args.num_flaps if args.spacing_x is not None: extra_variables['gap_x'] = args.spacing_x if args.spacing_y is not None: extra_variables['gap_y'] = args.spacing_y if args.center_center_x is not None: extra_variables['center_center_x'] = args.center_center_x if args.center_center_y is not None: extra_variables['center_center_y'] = args.center_center_y if args.width is not None: extra_variables['frame_width'] = args.width if args.height is not None: extra_variables['frame_height'] = args.height if args.frame_margin_x is not None: extra_variables['frame_margin_x'] = args.frame_margin_x if args.frame_margin_y is not None: extra_variables['frame_margin_y'] = args.frame_margin_y extra_variables['center_mode'] = CENTER_MODES[args.center_mode] output_dir = os.path.join(source_parts_dir, 'build', 'front_panel') svg_output = render(extra_variables, output_dir) if args.render_raster: # Export to png logging.info('Generating raster preview') processor = SvgProcessor(svg_output) raster_svg = os.path.join(output_dir, 'raster.svg') raster_png = os.path.join(output_dir, 'raster.png') processor.apply_raster_render_style() processor.write(raster_svg) # logging.info('Resize SVG canvas') # subprocess.check_call([ # app_paths.get('inkscape'), # '--verb=FitCanvasToDrawing', # '--verb=FileSave', # '--verb=FileClose', # '--verb=FileQuit', # raster_svg, # ]) logging.info('Export PNG') subprocess.check_call([ app_paths.get('inkscape'), '--export-width=1080', '--export-background=white', ] + inkscape.export_png(raster_png) + [ raster_svg, ]) ================================================ FILE: 3d/scripts/generate_fonts.py ================================================ #!/usr/bin/env python3 # Copyright 2020 Scott Bezek and the splitflap contributors # # 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. from __future__ import division from __future__ import print_function import argparse import logging import os import subprocess import sys from svg_processor import SvgProcessor from projection_renderer import Renderer script_dir = os.path.dirname(os.path.abspath(__file__)) source_parts_dir = os.path.dirname(script_dir) repo_root = os.path.dirname(source_parts_dir) sys.path.append(repo_root) from util import ( app_paths, inkscape, rev_info, ) _MODES = { 'double-sided': 0, 'front-back': 1, 'full-font': 2, 'side-by-side': 3, } def render(extra_variables, skip_optimize, output_directory, render_raster): renderer = Renderer(os.path.join(source_parts_dir, 'font_generator.scad'), output_directory, extra_variables) renderer.clean() svg_output, _ = renderer.render_svgs(panelize_quantity = 1) processor = SvgProcessor(svg_output) if not skip_optimize: logging.info('Removing redundant lines') processor.remove_redundant_lines() processor.write(svg_output) logging.info('\n\n\nDone rendering to SVG: ' + svg_output) if render_raster: # Export to png logging.info('Generating raster preview') raster_png = os.path.join(output_directory, 'raster.png') logging.info('Export PNG') subprocess.check_call([ app_paths.get('inkscape'), '--export-width=1080', '--export-background=white', ] + inkscape.export_png(raster_png) + [ svg_output, ]) if __name__ == '__main__': logging.basicConfig(level=logging.DEBUG) parser = argparse.ArgumentParser() parser.add_argument('--mode', choices=_MODES.keys(), required=True) parser.add_argument('--render-raster', action='store_true', help='Render raster PNG from the output SVG (requires ' 'Inkscape)') parser.add_argument('-f', '--font', type=str, help='Name of font preset to use - see flap_fonts.scad') parser.add_argument('-t', '--text', type=str, help='String of text to generate') parser.add_argument('--columns', type=int, help='Number of columns') parser.add_argument('--start-row', type=int, help='The starting row to render, 0-indexed') parser.add_argument('--row-count', type=int, help='Number of rows to render') parser.add_argument('--spacing-x', type=float, help='Horizontal gap between flaps') parser.add_argument('--spacing-y', type=float, help='Vertical gap between flaps') parser.add_argument('--no-comp', action='store_true', default=False, help='Don\'t compensate for the gap between top and bottom flaps') parser.add_argument('--alignment', action='store_true', help='Render alignment markers for registration when printing onto flaps') parser.add_argument('--bleed', type=float, help='Bleed amount for letters, in mm') parser.add_argument('--kerf', type=float, help='Override kerf_width value') parser.add_argument('--fill', action='store_true', help='Fill the text solid (disables optimization)') parser.add_argument('--skip-optimize', action='store_true', help='Don\'t remove redundant/overlapping cut lines') parser.add_argument('--vertical-keepout-clip', action='store_true', help='Clip letters that violate vertical keepout zones') args = parser.parse_args() extra_variables = { 'render_revision': rev_info.git_short_rev(), 'render_date': rev_info.current_date(), 'letter_gap_comp' : not args.no_comp, } if args.font is not None: extra_variables['font_preset'] = args.font if args.text is not None: extra_variables['character_list'] = args.text if args.start_row is not None: extra_variables['start_row'] = args.start_row if args.row_count is not None: extra_variables['row_count'] = args.row_count if args.columns is not None: extra_variables['num_columns'] = args.columns if args.spacing_x is not None: extra_variables['spacing_x'] = args.spacing_x if args.spacing_y is not None: extra_variables['spacing_y'] = args.spacing_y if args.kerf is not None: extra_variables['kerf_width'] = args.kerf if args.fill: extra_variables['render_fill'] = True args.skip_optimize = True if args.bleed is not None: extra_variables['bleed'] = args.bleed if args.vertical_keepout_clip: extra_variables['vertical_keepout_mode'] = 2 fonts_directory = os.path.join(source_parts_dir, 'build', 'fonts') extra_variables['layout_mode'] = _MODES[args.mode] if args.mode in ['double-sided', 'front-back']: extra_variables['render_alignment_marks'] = args.alignment extra_variables['only_side'] = 1 extra_variables['flip_entire_layout'] = False extra_variables['flip_individual_flaps'] = False render(extra_variables, args.skip_optimize, os.path.join(fonts_directory, 'front'), args.render_raster) extra_variables['only_side'] = 2 if args.mode == 'double-sided': extra_variables['flip_entire_layout'] = True extra_variables['flip_individual_flaps'] = False elif args.mode == 'front-back': extra_variables['flip_entire_layout'] = False extra_variables['flip_individual_flaps'] = True render(extra_variables, args.skip_optimize, os.path.join(fonts_directory, 'back'), args.render_raster) else: if args.alignment: raise RuntimeError('Alignment markers are only compatible with double-sided rendering') extra_variables['only_side'] = 1 extra_variables['flip_entire_layout'] = False render(extra_variables, args.skip_optimize, fonts_directory, args.render_raster) ================================================ FILE: 3d/scripts/generate_gif.py ================================================ #!/usr/bin/env python3 # Copyright 2015-2021 Scott Bezek and the splitflap contributors # # 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. import errno import functools import logging import os import shutil import subprocess from multiprocessing.dummy import Pool import openscad logging.basicConfig(level=logging.DEBUG) NUM_FLAPS = 52 # TODO: read from source? def generate_gif(output_folder, delay, filename): command = [ 'convert', os.path.join(output_folder, 'frames', 'frame*.png'), '-set', 'delay', str(delay), os.path.join(output_folder, filename), ] logging.debug(command) subprocess.check_call(command) def render_rotation(input_file, output_folder, num_frames, start_frame, variables): def render_frame(i): angle = 135 + i * 360 / num_frames openscad.run( input_file, os.path.join(output_folder, 'frames', 'frame_%05d.png' % (start_frame + i)), output_size = [320, 320], camera_translation = [0, 0, -15], camera_rotation = [60, 0, angle], camera_distance = 600, variables = variables, colorscheme = 'DeepOcean', ) pool = Pool() for _ in pool.imap_unordered(render_frame, range(num_frames)): # Consume results as they occur so any exception is rethrown pass pool.close() pool.join() def render_flaps(input_file, output_folder, variables): def render_flap(i): merged_variables = {} merged_variables.update(variables) merged_variables.update({'render_flap_index': i}) openscad.run( input_file, os.path.join(output_folder, 'frames', 'frame_%05d.png' % (i)), output_size = [600,800], camera_translation = [-5, 0, -9], camera_rotation = [90, 0, 180], camera_distance = 500, variables = merged_variables, colorscheme = 'Starnight', ) pool = Pool() for _ in pool.imap_unordered(render_flap, range(NUM_FLAPS)): # Consume results as they occur so any exception is rethrown pass pool.close() pool.join() script_dir = os.path.dirname(os.path.abspath(__file__)) source_parts_dir = os.path.dirname(script_dir) input_file = os.path.join(source_parts_dir, 'splitflap.scad') output_folder = os.path.join(source_parts_dir, 'build', 'animation') shutil.rmtree(output_folder, ignore_errors=True) frames_folder = os.path.join(output_folder, 'frames') os.makedirs(frames_folder) num_frames = 50 render_rotation(input_file, output_folder, num_frames, 0, { 'render_enclosure': 2, 'render_flaps': 2, }) render_rotation(input_file, output_folder, num_frames, num_frames, { 'render_enclosure': 1, 'render_flaps': 2, }) generate_gif(output_folder, '1x15', 'animation.gif') shutil.rmtree(frames_folder, ignore_errors=True) os.makedirs(frames_folder) render_flaps(input_file, output_folder, { 'render_enclosure': 2, 'render_flaps': 2, }) generate_gif(output_folder, '20', 'all_flaps.gif') ================================================ FILE: 3d/scripts/generate_snapshot.py ================================================ #!/usr/bin/env python # Copyright 2015-2016 Scott Bezek and the splitflap contributors # # 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. from __future__ import division from __future__ import print_function import errno import logging import os import openscad logging.basicConfig(level=logging.DEBUG) output_folder = os.path.join('build') try: os.makedirs(output_folder) except OSError as e: if e.errno == errno.EEXIST and os.path.isdir(output_folder): pass else: raise openscad.run( 'splitflap.scad', os.path.join(output_folder, 'snapshot.png'), output_size = [1280, 1024], camera_translation = [0, 0, 0], camera_rotation = [60, 0, 135], camera_distance = 600, colorscheme = 'Nature', ) ================================================ FILE: 3d/scripts/generate_stl.py ================================================ #!/usr/bin/env python3 # Copyright 2015-2021 Scott Bezek and the splitflap contributors # # 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. import logging import os import sys from colored_stl_exporter import ColoredStlExporter script_dir = os.path.dirname(os.path.abspath(__file__)) source_parts_dir = os.path.dirname(script_dir) repo_root = os.path.dirname(source_parts_dir) sys.path.append(repo_root) from util import rev_info if __name__ == '__main__': logging.basicConfig(level=logging.DEBUG) openscad_variables = { 'render_3d': True, 'render_enclosure': 2, 'render_flaps': 2, 'render_message': 'Ag', 'render_pcb': True, 'render_revision': rev_info.git_short_rev(), 'render_date': rev_info.current_date(), } exporter = ColoredStlExporter( os.path.join(source_parts_dir, 'splitflap.scad'), os.path.join(source_parts_dir, 'build'), openscad_variables) exporter.run() ================================================ FILE: 3d/scripts/kerf_presets.py ================================================ KERF_PRESETS = { 'ponoko-3mm-mdf': 0.18, 'ponoko-3mm-acrylic': 0.1, 'elecrow-3mm-wood': 0.185, 'elecrow-3mm-acrylic': 0.1, } ================================================ FILE: 3d/scripts/openscad.py ================================================ # Copyright 2015-2020 Scott Bezek and the splitflap contributors # # 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. from __future__ import division from __future__ import print_function import logging import numbers import os import re import subprocess import sys repo_root = os.path.dirname(os.path.dirname(os.path.dirname(__file__))) sys.path.append(repo_root) from util import app_paths logger = logging.getLogger(__name__) class OpenSCADException(Exception): def __init__(self, message, returncode, stdout=None, stderr=None): truncated_stdout = '\n'.join(stdout.decode('utf-8').splitlines()[-20:]) if stdout is not None else None truncated_stderr = '\n'.join(stderr.decode('utf-8').splitlines()[-20:]) if stderr is not None else None super(OpenSCADException, self).__init__('%s\n\nRETURN CODE:%d\n\nSTDOUT:\n%s\n\nSTDERR:\n%s' % ( message, returncode, truncated_stdout, truncated_stderr)) self.returncode = returncode self.stdout = stdout self.stderr = stderr def run( input_file, output_file, output_size=None, camera_translation=None, camera_rotation=None, camera_distance=None, variables=None, capture_output=False, colorscheme=None, ignore_empty_top_level_object=False, ): command = [ app_paths.get('openscad'), '-o', output_file, ] if output_size is not None: command += ['--imgsize=%d,%d' % tuple(output_size)] if camera_translation is not None or camera_rotation is not None or camera_distance is not None: if camera_translation is None: camera_translation = [0, 0, 0] if camera_rotation is None: camera_rotation = [60, 0, 135] if camera_distance is None: camera_distance = 600 command += ['--camera=%f,%f,%f,%f,%f,%f,%f' % tuple(camera_translation + camera_rotation + [camera_distance])] if colorscheme is not None: command += ['--colorscheme=%s' % colorscheme] if variables is not None: for k, v in variables.items(): if isinstance(v, str) or isinstance(v, bytes): try: v = v.decode('utf-8') except (UnicodeDecodeError, AttributeError): pass value = '"%s"' % v.replace('"', '\\"') elif v is True: value = 'true' elif v is False: value = 'false' elif isinstance(v, numbers.Integral): value = '%d' % v elif isinstance(v, numbers.Real): value = '%f' % v else: raise ValueError("Unknown value type", type(v), v) command += ['-D', '%s=%s' % (k, value)] command += [input_file] logger.info(command) if ignore_empty_top_level_object: # In order to ignore empty top level object errors, we need to be able to look at stderr capture_output = True stdout_type = subprocess.PIPE if capture_output else None stderr_type = subprocess.PIPE if capture_output else None try: proc = subprocess.Popen(command, stdout=stdout_type, stderr=stderr_type) stdout, stderr = proc.communicate() returncode = proc.returncode except OSError as e: if 'No such file or directory' in e.strerror: raise RuntimeError('Could not find openscad! Make sure you\'ve installed OpenSCAD and it\'s on your PATH ' 'environment variable') else: raise logger.debug('returncode:%d', returncode) if returncode != 0: if ignore_empty_top_level_object and b'Current top level object is empty.' in stderr: logger.info('Ignoring empty top level object!') else: raise OpenSCADException('openscad returned non-zero!', returncode, stdout=stdout, stderr=stderr) return stdout, stderr def extract_values(stderr): """ Extracts values from ECHO statements as a dictionary. Values are strings. """ result = {} pattern = re.compile(r'^ECHO: (.+) = (.+)$') for line in stderr.splitlines(): m = pattern.search(line.decode('utf-8')) if m: result[m.group(1)] = m.group(2) return result ================================================ FILE: 3d/scripts/projection_renderer.py ================================================ # Copyright 2015-2021 Scott Bezek and the splitflap contributors # # 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. from __future__ import division from __future__ import print_function import logging import os import shutil import openscad from svg_processor import SvgProcessor class Renderer(object): def __init__(self, input_file, output_folder, extra_variables=None): self.input_file = input_file self.output_folder = output_folder if extra_variables is None: extra_variables = {} self.extra_variables = extra_variables try: self.etch_enabled = self.extra_variables['render_etch'] except KeyError: self.etch_enabled = True def clean(self): shutil.rmtree(self.output_folder, ignore_errors=True) os.makedirs(self.output_folder) def _get_variables(self, variables): v = self.extra_variables.copy() v.update(variables) return v def _get_extracted_outputs(self): stdout, stderr = openscad.run( self.input_file, os.path.join(self.output_folder, 'dummy.png'), output_size=[1,1], variables = self._get_variables({ '_is_projection_rendering': True, 'render_3d': False, 'render_index': 0, }), capture_output=True, ) outputs = openscad.extract_values(stderr) for key, value in outputs.items(): if key.startswith('debug_'): logging.debug('DEBUG VALUE %r = %r', key, value) return outputs def _get_component_file(self, i): return os.path.join(self.output_folder, 'component_%05d.svg' % i) def _render_component(self, i, panel_horizontal, panel_vertical): output_file = self._get_component_file(i) style_options = ['cut'] if self.etch_enabled: style_options.append('etch') for style in (style_options): logging.debug('Rendering component %d, %s', i, style) try: _ = openscad.run( self.input_file, output_file, variables=self._get_variables({ '_is_projection_rendering': True, 'render_3d': False, 'render_index': i, 'render_etch': style == 'etch', 'panel_horizontal': panel_horizontal, 'panel_vertical': panel_vertical, }), capture_output=True, ) except openscad.OpenSCADException as e: if b'Current top level object is not a 2D object.' in e.stderr: # This is expected if we try rendering an etch layer as a # cut, since there will be nothing to export continue else: raise processor = SvgProcessor(output_file) if style == 'cut': processor.apply_laser_cut_style() elif style == 'etch': processor.apply_laser_etch_style() return processor logging.debug('Component %d has no geometry', i) return None def render_svgs(self, panelize_quantity): assert panelize_quantity == 1 or panelize_quantity % 2 == 0, 'Panelize quantity must be 1 or an even number' outputs = self._get_extracted_outputs() num_components = int(outputs['num_components']) logging.info('Found %d components to render', num_components) svg_output = None horizontal_range = 1 if panelize_quantity == 1 else 2 vertical_range = (panelize_quantity + 1) // 2 for panel_horizontal in range(0, horizontal_range): for panel_vertical in range(0, vertical_range): for i in range(num_components): svg_processor = self._render_component(i, panel_horizontal, panel_vertical) if svg_output is None: svg_output = svg_processor elif svg_processor is not None: svg_output.import_paths(svg_processor) output_file_path = os.path.join(self.output_folder, 'combined.svg') svg_output.write(output_file_path) return output_file_path, outputs ================================================ FILE: 3d/scripts/requirements.txt ================================================ svg.path==6.3 ================================================ FILE: 3d/scripts/svg_processor.py ================================================ # Copyright 2015-2016 Scott Bezek and the splitflap contributors # # 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. from __future__ import print_function from collections import defaultdict import os svg_path_install = f'python3 -m pip install -r {os.path.join(os.path.dirname(__file__), "requirements.txt")}' try: from svg.path import ( Path, Line, Move, Close, parse_path, ) except: raise RuntimeError(f'Error loading svg.path library. Run "{svg_path_install}" to install it') from importlib.metadata import version assert int(version('svg.path').split('.')[0]) == 6, f'svg.path library is not new enough (found {version("svg.path")}). Run "{svg_path_install}" to install it' from xml.dom import minidom eps = 0.001 def _get_slope_intersect(p1, p2): if abs(p1.real - p2.real) < eps: # Vertical; no slope and return x-intercept return None, p1.real m = (p2.imag - p1.imag) / (p2.real - p1.real) b1 = p1.imag - m * p1.real b2 = p2.imag - m * p2.real assert abs(b1 - b2) < eps return m, b1 def _lines_are_collinear(line1, line2): eq1 = _get_slope_intersect(line1.start, line1.end) eq2 = _get_slope_intersect(line2.start, line2.end) same_slope = ((eq1[0] is None and eq2[0] is None) or (eq1[0] is not None and eq2[0] is not None and abs(eq1[0] - eq2[0]) < eps)) same_intercept = abs(eq1[1] - eq2[1]) < eps return same_slope and same_intercept class SvgProcessor(object): """ Processes SVG files generated by OpenSCAD to prepare for laser cutting """ def __init__(self, input_file): self.dom = minidom.parse(input_file) self.svg_node = self.dom.documentElement def set_dimensions(self, width, height): self.svg_node.attributes['width'].value = width self.svg_node.attributes['height'].value = height def set_viewbox(self, min_x, min_y, width, height): view_str = "{:.0f} {:.0f} {:.0f} {:.0f}".format(min_x, min_y, width, height) self.svg_node.attributes['viewBox'].value = view_str def get_viewbox(self): vb = self.svg_node.attributes['viewBox'].value.replace(',', '').split(' ') vb = [float(x) for x in vb] return tuple(vb) def apply_laser_cut_style(self): # Set fill and stroke for laser cutting for path in self.svg_node.getElementsByTagName('path'): SvgProcessor._apply_attributes(path, { 'fill': 'none', 'stroke': '#0000ff', 'stroke-width': '0.1', }) def apply_laser_etch_style(self): # Set fill and stroke for laser etching for path in self.svg_node.getElementsByTagName('path'): SvgProcessor._apply_attributes(path, { 'fill': '#000000', 'stroke': 'none', }) def apply_raster_render_style(self): # Set fill and stroke for rasterized rendering for path in self.svg_node.getElementsByTagName('path'): SvgProcessor._apply_attributes(path, { 'fill': 'none', 'stroke': '#000000', 'stroke-width': '0.2', }) def apply_dimension_calculation_style(self): # Remove stroke for calculating overall dimensions in Inkscape (which includes stroke) for path in self.svg_node.getElementsByTagName('path'): SvgProcessor._apply_attributes(path, { 'fill': 'none', 'stroke': 'none', }) def apply_elecrow_style(self): # Set fill and stroke for Elecrow ordering for path in self.svg_node.getElementsByTagName('path'): SvgProcessor._apply_attributes(path, { 'fill': 'none', 'stroke': '#000000', 'stroke-width': '0.1', }) def import_paths(self, from_svg_processor): for path in from_svg_processor.svg_node.getElementsByTagName('path'): output_node = self.dom.importNode(path, True) self.svg_node.appendChild(output_node) vb = self.merge_viewbox(from_svg_processor.get_viewbox()) self.set_viewbox(*vb) dimm = "{:.0f}mm" self.set_dimensions(dimm.format(vb[2]), dimm.format(vb[3])) def merge_viewbox(self, vb1): """ Takes a new SVG viewbox and combines it with the existing viewbox to create a new viewbox enclosing both of them. Returns a tuple with the min-x, min-y, width, and height """ def get_max(vb, ax): return vb[ax] + vb[ax+2] # min + size vb2 = self.get_viewbox() mins, maxes = [], [] for xy in range(2): ax_max = [get_max(vb1, xy), get_max(vb2, xy)] mins.append(vb1[xy] if vb1[xy] < vb2[xy] else vb2[xy]) maxes.append(ax_max[0] if ax_max[0] > ax_max[1] else ax_max[1]) X, Y = 0, 1 return (mins[X], mins[Y], maxes[X] - mins[X], maxes[Y] - mins[Y]) def remove_redundant_lines(self): lines_bucketed_by_slope_intersect = defaultdict(list) paths = self.svg_node.getElementsByTagName('path') overall_index = 0 for path_index, path in enumerate(paths): path_text = path.attributes['d'].value path_obj = parse_path(path_text) for line_index, line in enumerate(path_obj): if isinstance(line, Close): # Treat Close as a Line line = Line(line.start, line.end) if isinstance(line, Line): slope, intersect = _get_slope_intersect(line.start, line.end) # TODO: float inaccuracy and rounding may cause collinear lines to end up in separate buckets in rare # cases, so this is not quite correct. Would be better to put lines into *2* nearest buckets in each # dimension to avoid edge cases. if slope is not None: slope = round(slope, ndigits=3) intersect = round(intersect, ndigits=3) lines_bucketed_by_slope_intersect[(slope, intersect)].append({ 'overall_index': overall_index, 'path_index': path_index, 'line_index': line_index, 'line': line, }) overall_index += 1 to_remove = {} to_update = {} for slope_intersect, lines in lines_bucketed_by_slope_intersect.items(): for i in range(20): if SvgProcessor._pairwise_overlap_check(lines, to_update, to_remove): print('Re-running pairwise overlap check because of updated/merged line') continue break else: raise Exception( 'Exceeded the max number of pairwise overlap check passes. Something is probably wrong.' ) # Reconstruct the paths, but excluding/updating the lines we just identified i = 0 removed = 0 removed_length = 0 kept = 0 kept_length = 0 for path_index, path in enumerate(paths): path_text = path.attributes['d'].value path_obj = parse_path(path_text) filtered_path = Path() for line_index, line in enumerate(path_obj): if isinstance(line, Close): # Treat Close as a Line line = Line(line.start, line.end) if i in to_remove: assert isinstance(line, Line) assert path_index == to_remove[i][0] assert line_index == to_remove[i][1] removed += 1 removed_length += line.length() elif i in to_update: assert isinstance(line, Line) assert path_index == to_update[i][0] assert line_index == to_update[i][1] replacement_line = to_update[i][2] filtered_path.append(replacement_line) kept += 1 kept_length += replacement_line.length() elif isinstance(line, Line): filtered_path.append(line) kept += 1 kept_length += line.length() else: print(f'Omitting non-line in reconstructed path at index {line_index}: {line!r}') i += 1 # Update the path data with the filtered path data last_line = None new_path = Path() for line in filtered_path: # Newer versions of svg.path keep Moves but don't ensure consistency with line start/ends. We've stripped non-Lines above, so # we need to add back Moves where Line segments are not connected if last_line is None or abs(last_line.end.real - line.start.real) > 0.001 or abs(last_line.end.imag - line.start.imag) > 0.001: new_path.append(Move(line.start)) new_path.append(line) last_line = line path.attributes['d'] = new_path.d() print(f'Optimized line path from\n {path_text!r}\n to\n {path.attributes["d"].value!r}') print('Removed {} lines ({} length) and kept {} lines ({} length)'.format( removed, removed_length, kept, kept_length, )) return [to_remove[k][2] for k in to_remove], [to_update[k][2] for k in to_update] @staticmethod def _pairwise_overlap_check(lines, to_update, to_remove): """Naive N^2 search for overlapping lines within a slope-intersect bucket. Adds lines to the to_remove dictionary when they are fully redundant, and adds updated line info to the to_update dictionary if a line needs to be lengthened to simplify partially overlapping lines. Returns True if a line update was produced (which means another pass of overlap-checking is required with the updated line info. """ for i in range(len(lines)): if lines[i]['overall_index'] in to_remove: continue line1 = lines[i]['line'] for j in range(i + 1, len(lines)): if lines[j]['overall_index'] in to_remove: continue line2 = lines[j]['line'] if _lines_are_collinear(line1, line2): # Check for overlap using the min/max x and y values of the lines l1x1 = min(line1.start.real, line1.end.real) l1x2 = max(line1.start.real, line1.end.real) l1y1 = min(line1.start.imag, line1.end.imag) l1y2 = max(line1.start.imag, line1.end.imag) l2x1 = min(line2.start.real, line2.end.real) l2x2 = max(line2.start.real, line2.end.real) l2y1 = min(line2.start.imag, line2.end.imag) l2y2 = max(line2.start.imag, line2.end.imag) if l1x1 <= l2x1 + eps and l1x2 + eps >= l2x2 and l1y1 <= l2y1 + eps and l1y2 + eps >= l2y2: # Line 1 is bigger, fully contains line 2 assert line1.length() + eps >= line2.length() to_remove[lines[j]['overall_index']] = (lines[j]['path_index'], lines[j]['line_index'], line2) elif l1x1 + eps >= l2x1 and l1x2 <= l2x2 + eps and l1y1 + eps >= l2y1 and l1y2 <= l2y2 + eps: # Line 2 is bigger, fully contains line 1 assert line2.length() + eps >= line1.length() to_remove[lines[i]['overall_index']] = (lines[i]['path_index'], lines[i]['line_index'], line1) # Check for partial overlap, i.e. one point of line 2 is between points of line 1 or vice versa # To avoid cases with 2 line segments end-to-end, we check for point containment with either # X inclusive OR Y inclusive, but not both (which would mean they share an endpoint and therefore # must be end-to-end rather than overlapping since we already covered the fully-contained cases # above) elif ( (l1x1 <= l2x1 + eps and l2x1 <= l1x2 + eps and l1y1 + eps < l2y1 and l2y1 + eps < l1y2) or (l1x1 + eps < l2x1 and l2x1 + eps < l1x2 and l1y1 <= l2y1 + eps and l2y1 <= l1y2 + eps) or (l1x1 <= l2x2 + eps and l2x2 <= l1x2 + eps and l1y1 + eps < l2y2 and l2y2 + eps < l1y2) or (l1x1 + eps < l2x2 and l2x2 + eps < l1x2 and l1y1 <= l2y2 + eps and l2y2 <= l1y2 + eps) ): print('Partial overlap of these lines:\n {!r}\n {!r}'.format(line1, line2)) # Arbitrarily pick line1 to remove, and update line2 to cover the full length to_remove[lines[i]['overall_index']] = ( lines[i]['path_index'], lines[i]['line_index'], line1, ) if lines[i]['overall_index'] in to_update: # In case we're now deleting a line that was previously updated, remove it from # to_update to be safe del to_update[lines[i]['overall_index']] # To form a line that covers the full length, try all pairs of points and select the pair # that produces the longest length. # # Simply sorting the points as x,y tuples and choosing the first/last wouldn't work because # of possible floating point error: if the 2 lines have the exact same x coordinate then the # sort will fall back to sorting on y and work as expected, but if the 2 lines have the # "same" x coordinate but one is actually a miniscule amount smaller, that x difference will # take precedence in the sort, potentially resulting in the wrong endpoints being selected. points = [ line1.start, line1.end, line2.start, line2.end, ] longest_line = line1 for x in range(len(points)): for y in range(x + 1, len(points)): new_line = Line(points[x], points[y]) if new_line.length() > longest_line.length(): longest_line = new_line # Update the original line's values (needed for subsequent comparisons of collinear lines) # and log an entry in to_update for the final SVG path generation. line2.start = longest_line.start line2.end = longest_line.end to_update[lines[j]['overall_index']] = ( lines[j]['path_index'], lines[j]['line_index'], line2, ) print(' -- merged into a single line: {!r}'.format(line2)) return True return False def add_highlight_lines(self, lines, color): for line in lines: new_path_node = self.dom.createElement("path") new_path_node.setAttribute('d', Path(line).d()) new_path_node.setAttribute('fill', 'none') new_path_node.setAttribute('stroke', color) new_path_node.setAttribute('stroke-width', '1') new_path_node.setAttribute('stroke-opacity', '.45') self.svg_node.appendChild(new_path_node) def add_dimensions(self, width_mm, height_mm, mirror=False): width_node = self.dom.createElement("path") mirror_dir = -1 if mirror else 1 width_node.setAttribute('d', f'M 0 10 l 0 5 l {mirror_dir * width_mm} 0 l 0 -5') width_node.setAttribute('fill', 'none') width_node.setAttribute('stroke', '#ff00ff') width_node.setAttribute('stroke-width', '1') self.svg_node.appendChild(width_node) width_label_node = self.dom.createElement('text') width_label_node.setAttribute('x', f'{mirror_dir * width_mm / 2}') width_label_node.setAttribute('y', '25') width_label_node.setAttribute('style', 'font: 5px sans-serif; fill: #ff00ff; text-anchor: middle;') width_label_node.appendChild(self.dom.createTextNode(f'{width_mm:.2f} mm')) self.svg_node.appendChild(width_label_node) height_node = self.dom.createElement("path") height_node.setAttribute('d', f'M {-width_mm - 10 if mirror else -10} 0 l -5 0 l 0 -{height_mm} l 5 0') height_node.setAttribute('fill', 'none') height_node.setAttribute('stroke', '#ff00ff') height_node.setAttribute('stroke-width', '1') self.svg_node.appendChild(height_node) height_label_node = self.dom.createElement('text') height_label_node.setAttribute('x', f'{-width_mm - 20 if mirror else -20}') height_label_node.setAttribute('y', f'{-height_mm / 2}') height_label_node.setAttribute('style', 'font: 5px sans-serif; fill: #ff00ff; text-anchor: end;') height_label_node.appendChild(self.dom.createTextNode(f'{height_mm:.2f} mm')) self.svg_node.appendChild(height_label_node) def write(self, filename): with open(filename, 'w') as output_file: self.svg_node.writexml(output_file) @staticmethod def _apply_attributes(node, values): for (k, v) in values.items(): node.attributes[k] = v ================================================ FILE: 3d/sensor_pcb_dimensions.scad ================================================ /* Copyright 2018 Scott Bezek and the splitflap contributors 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. */ include ; pcb_thickness = 0.8; // From datasheet: hall_effect_height = 1.7; hall_effect_width = 3; hall_effect_thickness = 1.22; // From sensor.kicad_pcb: pcb_height = 20; pcb_length = 40; pcb_hole_to_sensor_x = 17.5; pcb_hole_to_sensor_y = 0; pcb_hole_to_connector_pin_2_x = 28; pcb_hole_to_connector_pin_2_y = 10; pcb_hole_to_bolt_hole_x = 17.5; // 28byj48_mount_center_offset pcb_hole_to_bolt_hole_y = 8; // 28byj48_shaft_offset connector_pin_pitch = 2.54; pcb_edge_to_hole_x = 7; pcb_edge_to_hole_y = 7; pcb_hole_radius = 9.4/2; // 28byj48_shaft_collar_radius pcb_bolt_hole_radius = 4.3/2; // M4 // Rough numbers for 3d rendering only (non-critical dimensions) pcb_connector_height = 3.2; pcb_connector_width = 8.2; pcb_connector_length = 18; pcb_connector_pin_width = 0.64; pcb_connector_pin_slop = 0.4; pcb_connector_pin_tail_length = 3.05 + 2.5/2; ================================================ FILE: 3d/shapes.scad ================================================ /* Copyright 2020 Scott Bezek and the splitflap contributors 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. */ module rounded_square(size, center=false, r=0.0, corners=[0,1,2,3], $fn=$fn) { translation_matrix = [ [-1, -1], [-1, 1], [ 1, 1], [ 1, -1], ]; module add_corner(index, center, r) { // this is tiny because the geometry is 'hull'ed and we need to get out // of the way of the rounds at larger radii square_size = 0.001; function circle_offset(axis) = center[axis] * translation_matrix[index][axis]; function square_offset(axis) = center[axis] * translation_matrix[index][axis] + r * translation_matrix[index][axis] + (translation_matrix[index][axis] >= 1 ? -square_size : 0); if(len(search(index, corners)) > 0) translate([circle_offset(0), circle_offset(1)]) circle(r=r, $fn=$fn); else { translate([square_offset(0), square_offset(1)]) square(square_size); } } width = size[0] == undef ? size : size[0]; // unpack vector if present height = size[1] == undef ? size : size[1]; if(r <= 0.0) { square([width, height], center=center); } else { radius = min(min(r, width/2), height/2); // radius cannot be larger than rectangle center_x = center ? 0 : width/2; center_y = center ? 0 : height/2; translate([center_x, center_y]) { hull() { x = width/2 - radius; y = height/2 - radius; for(i = [0:3]) add_corner(i, [x, y], radius); } } } } module triangle(size, center=false) { width = size[0] == undef ? size : size[0]; // unpack vector if present height = size[1] == undef ? size : size[1]; pts = [ [ 0, 0], [width/2, height], [ width, 0], ]; x_offset = center ? -width/2 : 0; y_offset = center ? -height/2 : 0; translate([x_offset, y_offset]) polygon(points=pts, convexity=1); } module arrow(size, aspect=[0.5, 0.3], center=false) { function unpack(val, pos) = val[pos] == undef ? val : val[pos]; // use vector if possible, value otherwise function recenter(vect, pos) = center ? -vect[pos]/2 : 0; // if 'center', return negative vector position/2 size = [ unpack(size, 0), unpack(size, 1) ]; // overall bounding box ratio = [ unpack(aspect, 0), unpack(aspect, 1) ]; // ratio between head and body, 1.0 max head = [ size[0], size[1] * ratio[1] ]; // head bounding box base = [ size[0] * (1 - ratio[0]), size[1] - head[1] ]; // base bounding box translate([recenter(size, 0), recenter(size, 1)]) { translate([(size[0] - base[0]) / 2, 0]) square(base); translate([0, base[1]]) triangle(head); } } // positioned where origin is at the point to be rounded (first quadrant) module fillet_tool(r, overlap=0.01, $fn=$fn) { tool_size = r + overlap; translate([r, r, 0]) mirror([1, 1, 0]) difference() { square([tool_size, tool_size]); circle(r=r, $fn=$fn); } } module fillet_tool_3d(r, r_corner=undef, overlap=0.01, additive=false, $fn=$fn) { corner_radius = (r_corner == undef) ? r : r_corner; // use fillet radius if corner radius not provided translate([corner_radius, corner_radius, 0]) rotate([0, 180, 90]) rotate_extrude(angle=90, convexity=10, $fn=$fn) translate([corner_radius, 0, 0]) rotate([0, 0, additive ? -90 : 90]) fillet_tool(r, overlap=overlap, $fn=$fn); } module square_fillet_3d(size, r, r_corner=0.0, overlap=0.01, center=false, additive=false, corners=[0,1,2,3], edges=[0,1,2,3], $fn=$fn) { function in_list(x, list) = len(search(x, list)) > 0 ? true : false; width = size[0] == undef ? size : size[0]; // unpack vector if present length = size[1] == undef ? size : size[1]; max_radius = min(width, length)/2; // largest radius possible along XY // Both radius and corner radius can be any value between 0 and the shortest // edge of the rectangle / 2 (maximum radius for full round). // If radius is zero, no geometry is generated (no radius = no fillet) // If corner radius is zero, corner rounding geometry is not generated radius = (r >= max_radius) ? max_radius : r; // if present, corner radius cannot be less than fillet radius (invalid geometry) corner_radius_inter = (r_corner != 0 && r_corner < radius) ? radius : r_corner; // corner radius cannot be greater than the max radius corner_radius = min(corner_radius_inter, max_radius); function corner_offset_single(x) = in_list(x % 4, corners) ? corner_radius : -overlap; // calculate the corner offset for a given corner index function corner_offset(x) = corner_offset_single(x) + corner_offset_single(x + 1); // calculate the corner offset for a given edge if(radius > 0) { center_x = center ? -width/2 : 0; center_y = center ? -length/2 : 0; translate([center_x, center_y]) { union() { // Y Straight, Origin if(in_list(0, edges)) { translate([0, length - corner_offset_single(1), 0]) rotate([0, additive ? 180 : 0, 0]) rotate([0, 90, 270]) linear_extrude(height=length - corner_offset(0)) fillet_tool(radius, overlap=overlap, $fn=$fn); } // X Straight, At Length if(in_list(1, edges)) { translate([width - corner_offset_single(2), length, 0]) rotate([additive ? 180 : 0, 0, 0]) rotate([0, 90, 180]) linear_extrude(height=width - corner_offset(1)) fillet_tool(radius, overlap=overlap, $fn=$fn); } // Y Straight, At Width if(in_list(2, edges)) { translate([width, corner_offset_single(3), 0]) rotate([0, additive ? 180 : 0, 0]) rotate([0, 90, 90]) linear_extrude(height=length - corner_offset(2)) fillet_tool(radius, overlap=overlap, $fn=$fn); } // X Straight, Origin if(in_list(3, edges)) { translate([corner_offset_single(0), 0, 0]) rotate([additive ? 180 : 0, 0, 0]) rotate([0, 90, 0]) linear_extrude(height=width - corner_offset(3)) fillet_tool(radius, overlap=overlap, $fn=$fn); } if(corner_radius > 0) { // Corner: Bottom Left if(in_list(0, corners)) { fillet_tool_3d(radius, corner_radius, overlap=overlap, additive=additive, $fn=$fn); } // Corner: Top Left if(in_list(1, corners)) { translate([0, length, 0]) rotate([0, 0, 270]) fillet_tool_3d(radius, corner_radius, overlap=overlap, additive=additive, $fn=$fn); } // Corner: Top Right if(in_list(2, corners)) { translate([width, length, 0]) rotate([0, 0, 180]) fillet_tool_3d(radius, corner_radius, overlap=overlap, additive=additive, $fn=$fn); } // Corner: Bottom Right if(in_list(3, corners)) { translate([width, 0, 0]) rotate([0, 0, 90]) fillet_tool_3d(radius, corner_radius, overlap=overlap, additive=additive, $fn=$fn); } } } } } } module cone(angle, base, height=undef, center=false, $fn=$fn) { // where: // * angle is the angle at the top of the cone, looking towards the base // * base is the diameter at the bottom of the cone // * height is the total height from base to top, if given base_radius = base/2; // convert base diameter to radius full_height = base_radius / tan(angle/2); // height to a point at the given angle // if no height is provided or height is out of scale, extrude up to a point if(height == undef || abs(height) >= full_height) { cylinder(h=full_height, r1=base_radius, r2=0, center=center); } // if height is provided, calculate top radius for given angle else { top_radius = tan(angle/2) * (full_height - height); cylinder(h=height, r1=base_radius, r2=top_radius, center=center); } } ================================================ FILE: 3d/splitflap.scad ================================================ /* Copyright 2015-2021 Scott Bezek and the splitflap contributors 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. */ use<28byj-48.scad>; use; use; use; use; use; use; use; use; use; use; include; include; include; // ##### RENDERING OPTIONS ##### render_3d = true; // 3d parameters: render_enclosure = 1; // 0=invisible; 1=translucent; 2=opaque color; render_flaps = 2; // 0=invisible; 1=front flap only; 2=all flaps render_flap_area = 0; // 0=invisible; 1=collapsed flap exclusion; 2=collapsed+extended flap exclusion render_letters = 2; // 0=invisible; 1=front flap only; 2=all flaps render_message = "Ag"; render_unit_separation = 0; render_spool = true; render_pcb = true; render_bolts = true; render_motor = true; // 2d parameters: render_index = -1; render_etch = false; render_2d_mirror = false; render_home_indicator_as_cut = false; render_front_panel = true; enable_connectors = true; enable_alignment_bar = true; enable_mounting_holes = true; enable_source_info = true; // Panelization: panel_vertical = 0; panel_horizontal = 0; // Version label: render_revision = "deadbeef"; render_date = "YYYY-MM-DD"; spool_explosion = 0; // 0-1 spool_strut_explosion = lookup(spool_explosion, [ [0, 0], [0.2, 0], [1, 30], ]); spool_horizontal_explosion = lookup(spool_explosion, [ [0, 0], [1, 8], ]); num_flaps = 52; echo(num_flaps=num_flaps); // Ponoko kerf values are 0.2 mm for MDF and acrylic (all thicknesses) // Remember: it's better to underestimate (looser fit) than overestimate (no fit) kerf_width = 0.185; // MDF, .120in nominal // https://www.ponoko.com/materials/mdf-fiberboard thickness = 3.0; etch_depth = 0.1; // for render captive_nut_inset=6; assembly_inner_radius = m4_hole_diameter/2; // Rendering Colors assembly_color = [0.15, 0.15, 0.15]; etch_color = [0.3, 0.3, 0.3]; hardware_color = [0.75, 0.75, 0.8]; // steel, "bfbfcc" flap_color = [0.05, 0.05, 0.05]; letter_color = color_invert(flap_color); // inverse of the flap color, for contrast assembly_colors = [ color_multiply(assembly_color, [1.161, 1.157, 1.157, 1.0]), color_multiply(assembly_color, [0.897, 0.895, 0.895, 1.0]), color_multiply(assembly_color, [0.547, 0.542, 0.540, 1.0]), color_multiply(assembly_color, [0.268, 0.268, 0.271, 1.0]), ]; bolt_color = hardware_color; nut_color = color_multiply(hardware_color, [0.933, 0.933, 0.9, 1.0]); // "b2b2b7" with steel flap_width_slop = 0.5; // amount of slop of the flap side to side between the 2 spools spool_width_slop = 1.4; // amount of slop for the spool assembly side-to-side inside the enclosure spool_tab_clearance = 0; // for the tabs connecting the struts to the spool ends (interference fit) spool_retaining_clearance = 0.10; // for the notches in the spool retaining wall spool_joint_clearance = 0.10; // for the notched joints on the spool struts character_list = get_character_list(); echo(character_list=len(character_list)); assert(len(character_list) == num_flaps || _is_projection_rendering, "WARNING: num_flaps and character_list mismatch!"); render_flap_index = undef; render_string = is_undef(render_flap_index) ? render_message : character_list[render_flap_index]; render_units = len(render_string); flap_hole_radius = (flap_pin_width + 0.8) / 2; flap_hole_separation = 1.2; // additional spacing between hole edges flap_gap = (flap_hole_radius * 2 - flap_pin_width) + flap_hole_separation; flap_spool_outset = 0.8; flap_pitch_radius = flap_spool_pitch_radius(num_flaps, flap_hole_radius, flap_hole_separation); //num_flaps * (flap_hole_radius*2 + flap_hole_separation) / (2*PI); spool_outer_radius = flap_spool_outer_radius(num_flaps, flap_hole_radius, flap_hole_separation, flap_spool_outset); //flap_pitch_radius + 2*flap_hole_radius; // Radius where flaps are expected to flap in their *most collapsed* (90 degree) state exclusion_radius = sqrt(flap_height*flap_height + flap_pitch_radius*flap_pitch_radius); // Radius where flaps are expected to flap in their *most extended* state outer_exclusion_radius = flap_pitch_radius + flap_height + 2; front_forward_offset = flap_pitch_radius + flap_thickness/2; spool_width = flap_width - flap_notch_depth*2 + flap_width_slop + thickness*2; // spool width, outside face (spool to spool) spool_width_clearance = max(spool_width, flap_width + flap_width_slop); // width clearance for the spool, either for the spool itself or the flaps //legacyAssert(spool_width >= flap_width, "Flap is wider than spool!"); spool_strut_num_joints = 3; spool_strut_tab_width=8; spool_strut_tab_width_narrow=6; spool_strut_tab_outset=8; spool_strut_width = (spool_strut_tab_outset + thickness/2) * 2; spool_strut_length = spool_width; spool_strut_inner_length = spool_width - 3 * thickness; spool_strut_exclusion_radius = sqrt((spool_strut_tab_outset+thickness/2)*(spool_strut_tab_outset+thickness/2) + (spool_strut_tab_width/2)*(spool_strut_tab_width/2)); m4_axle_hole_diameter = 4.3; // Slightly closer fit than the standard m4_hole_diameter, since a loose fit here will cause the spool to sit at a slight angle magnet_diameter = 4; magnet_hole_clearance = -0.05; // interference fit magnet_hole_radius = (magnet_diameter + magnet_hole_clearance)/2; magnet_hole_offset = pcb_hole_to_sensor_x(); // Clearance between the motor chassis and the outside right wall of the previous module 28byj48_chassis_height_clearance = 1.4; motor_shaft_under_radius = 0.08; // interference fit motor_slop_radius = 3; // Width measured from the outside of the walls enclosure_wall_to_wall_width = thickness + spool_width_slop/2 + spool_width_clearance + spool_width_slop/2 + max(28byj48_mount_bracket_height() + m4_button_head_length, 4 + 28byj48_mount_bracket_height() - spool_width_slop/2) + thickness; // Width of the front panel enclosure_width = enclosure_wall_to_wall_width + 28byj48_chassis_height() + 28byj48_chassis_height_clearance - thickness - 28byj48_mount_bracket_height(); front_window_upper_base = (flap_height - flap_pin_width/2); front_window_overhang = 1; front_window_upper = front_window_upper_base - front_window_overhang; front_window_lower = sqrt(outer_exclusion_radius*outer_exclusion_radius - front_forward_offset*front_forward_offset); front_window_height = front_window_lower+front_window_upper; front_window_width = spool_width_slop + spool_width_clearance; front_window_right_inset = thickness; enclosure_horizontal_inset = (enclosure_width - front_window_width)/2 - front_window_right_inset; // center the window in the front face (the inset is measured with respect to the *outside* of the wall, hence the "front_window_right_inset" correction) enclosure_vertical_clearance_top = 5; // gap between top of flaps and top of enclosure enclosure_vertical_clearance_bottom = 1; // gap between bottom of flaps and bottom of enclosure enclosure_vertical_inset = max(thickness*1.5, m4_nut_width_corners_padded/2); // distance from top of sides to top of the top piece enclosure_height_upper = exclusion_radius + enclosure_vertical_clearance_top + thickness + enclosure_vertical_inset; enclosure_height_lower = flap_pitch_radius + flap_height + enclosure_vertical_clearance_bottom + thickness + enclosure_vertical_inset; enclosure_height = enclosure_height_upper + enclosure_height_lower; enclosure_horizontal_rear_margin = 2; // minumum distance between the farthest feature and the rear enclosure_length = front_forward_offset + 28byj48_mount_center_offset() + m4_hole_diameter/2 + enclosure_horizontal_rear_margin; // distance from the outside spool face to the inside of the left enclosure pcb_to_spool = enclosure_wall_to_wall_width - front_window_width - thickness + spool_width_slop/2; // Enclosure tabs: front/back enclosure_tab_clearance = 0.10; num_front_tabs = 2; front_tab_width = (front_window_width) / (num_front_tabs*2 - 1); enclosure_length_right = front_forward_offset + m4_hole_diameter/2 + enclosure_horizontal_rear_margin; side_tab_width = 2.5; side_tab_bolt_head_clearance = m4_button_head_diameter / 2 + 0.5; side_tab_length = thickness * 0.8; side_tab_left_inset = 1; backstop_bolt_vertical_offset = - (exclusion_radius + outer_exclusion_radius)/2; backstop_bolt_forward_range = 14; motor_mount_hole_radius = m4_hole_diameter/2; motor_backpack_extent = 28byj48_backpack_extent() + 2; // Add 2mm to make sure there's room for the wires motor_hole_slop = 1; motor_window_radius = 5; connector_bracket_length_outer = enclosure_length_right / 2 - max(m4_button_head_diameter/2, m4_nut_width_flats/2) - 1; connector_bracket_length_inner = connector_bracket_length_outer; connector_bracket_thickness = 5; connector_bracket_width = enclosure_width - enclosure_wall_to_wall_width + thickness*2 + connector_bracket_thickness*2; connector_bracket_overlap = connector_bracket_length_inner/2; connector_bracket_clearance = 0.1; connector_bracket_depth_clearance = 0.1; mounting_hole_inset = m4_button_head_diameter/2 + 2; enclosure_indicator_inset = 3.0; // inset on both X and Y enclosure_indicator_size = 1.75; // symbol size enclosure_indicator_arrow_width = 2.25; enclosure_indicator_arrow_height = enclosure_indicator_arrow_width * 2; enclosure_indicator_position_y = (enclosure_height - enclosure_vertical_inset - thickness * 2) - enclosure_indicator_inset; zip_tie_height = 3.0; // height of the zip-tie hole zip_tie_width = 2.0; // width of the zip-tie holes zip_tie_spacing = 6.5; // spacing between each zip-tie hole, inside edges zip_tie_fillet = 0.5; // radius of the rounded zip-tie hole corners captive_nut_bolt_length = m4_bolt_length + 3; // 1mm tolerance + 2mm flexibility in bolt length alignment_bar_diameter = 6.35; // 1/4" alignment_bar_clearance = 0.25; alignment_bar_fillet_radius = 1.25; alignment_bar_cutout_width = alignment_bar_diameter + (2 * alignment_bar_clearance); alignment_bar_center = (enclosure_length - enclosure_length_right) - alignment_bar_cutout_width/2; // Exported values // (Functions allow other files to reference these values when this file is 'used' and not 'included') function get_assembly_colors() = assembly_colors; function get_captive_nut_inset() = captive_nut_inset; function get_connector_bracket_length() = connector_bracket_length_outer; function get_connector_bracket_width() = connector_bracket_width; function get_enclosure_height() = enclosure_height; function get_enclosure_height_lower() = enclosure_height_lower; function get_enclosure_height_upper() = enclosure_height_upper; function get_enclosure_length_right() = enclosure_length_right; function get_enclosure_vertical_inset() = enclosure_vertical_inset; function get_enclosure_wall_to_wall_width() = enclosure_wall_to_wall_width; function get_enclosure_width() = enclosure_width; function get_flap_arc_separation() = (flap_hole_radius*2 + flap_hole_separation); function get_flap_color() = flap_color; function get_flap_gap() = flap_gap; function get_flap_pin_width() = flap_pin_width; function get_front_forward_offset() = front_forward_offset; function get_front_window_lower() = front_window_lower; function get_front_window_right_inset() = front_window_right_inset; function get_front_window_upper() = front_window_upper; function get_front_window_width() = front_window_width; function get_letter_color() = letter_color; function get_magnet_diameter() = magnet_diameter; function get_magnet_hole_offset() = magnet_hole_offset; function get_mounting_hole_inset() = mounting_hole_inset; function get_num_flaps() = num_flaps; function get_pcb_to_spool() = pcb_to_spool; function get_thickness() = thickness; function get_captive_nut_bolt_length() = captive_nut_bolt_length; echo(kerf_width=kerf_width); echo(enclosure_height=enclosure_height); echo(enclosure_height_upper=enclosure_height_upper); echo(enclosure_height_lower=enclosure_height_lower); echo(enclosure_width=enclosure_width); echo(enclosure_wall_to_wall_width=enclosure_wall_to_wall_width); echo(enclosure_length=enclosure_length); echo(enclosure_length_right=enclosure_length_right); echo(enclosure_length_real=enclosure_length+thickness); echo(spool_strut_inner_length=spool_strut_inner_length); echo(front_window_width=front_window_width); echo(front_window_upper=front_window_upper); echo(front_window_lower=front_window_lower); echo(front_window_height=front_window_height); echo(front_forward_offset=front_forward_offset); echo(flap_exclusion_radius=exclusion_radius); echo(flap_hole_radius=flap_hole_radius); echo(flap_notch_height=flap_notch_height); module standard_m4_bolt(nut_distance=-1, bolt_length=10) { if (render_bolts) { color(bolt_color) roughM4_7380(bolt_length); if (nut_distance >= 0) { translate([0, 0, nut_distance]) standard_m4_nut(); } } } module standard_m4_nut(hole=true) { color(nut_color) { linear_extrude(m4_nut_length) { difference() { circle(r=m4_nut_width_corners/2, $fn=6); if(hole == true) circle(r=m4_hole_diameter/2, $fn=20); } } } } // ##### CAPTIVE NUT NEGATIVE ##### // Centered in the x dimension module captive_nut(bolt_diameter, bolt_length, nut_width, nut_length, nut_inset) { union() { translate([-bolt_diameter/2, 0, 0]) square([bolt_diameter, bolt_length]); translate([-nut_width/2, nut_inset, 0]) square([nut_width, nut_length]); } } module m4_captive_nut() { captive_nut(m4_hole_diameter, captive_nut_bolt_length, m4_nut_width_flats, m4_nut_length_padded, captive_nut_inset); } module zip_tie_holes() { spacing = (zip_tie_spacing + zip_tie_width)/2; translate([-spacing, 0, 0]) rounded_square([zip_tie_width, zip_tie_height], center=true, r=zip_tie_fillet, $fn=30); translate([spacing, 0, 0]) rounded_square([zip_tie_width, zip_tie_height], center=true, r=zip_tie_fillet, $fn=30); } // ##### Struts for bracing spool ##### module spool_strut_tab_hole(narrow, clearance) { square([thickness + clearance, narrow ? spool_strut_tab_width_narrow + clearance : spool_strut_tab_width + clearance], center=true); } module spool_strut_tab_holes(narrow=false, clearance=spool_tab_clearance) { for (i=[0:3]) { angle = 90*i; translate([cos(angle)*spool_strut_tab_outset, sin(angle)*spool_strut_tab_outset]) rotate([0,0,angle]) spool_strut_tab_hole(narrow, clearance); } } module spool_strut() { joint_tab_width = spool_strut_inner_length / spool_strut_num_joints; linear_extrude(thickness, center=true) { union() { translate([0, -spool_strut_tab_width_narrow / 2]) { square([thickness + eps, spool_strut_tab_width_narrow]); } translate([thickness, -spool_strut_tab_width / 2]) { square([spool_strut_length - thickness, spool_strut_tab_width]); } translate([thickness*2, -spool_strut_width / 2]) { difference() { square([spool_strut_inner_length, spool_strut_width]); // subtract out joints union() { for (i = [0:2:spool_strut_num_joints-1]) { translate([i*joint_tab_width - spool_joint_clearance/2, -eps]) square([joint_tab_width + spool_joint_clearance, thickness + spool_joint_clearance/2 + eps]); } for (i = [1:2:spool_strut_num_joints-1]) { translate([i*joint_tab_width, spool_strut_width - thickness - spool_joint_clearance/2]) square([joint_tab_width, thickness + spool_joint_clearance + eps]); } } } } } } } module spool_struts() { for (i=[0:3]) { angle = 90*i; //color([i < 2 ? 0 : 1, i == 0 || i == 2 ? 0 : 1, 0]) color(i % 2 == 0 ? assembly_colors[1] : assembly_colors[2]) translate([0, sin(angle)*(spool_strut_tab_outset + spool_strut_explosion), cos(angle)*(spool_strut_tab_outset + spool_strut_explosion)]) rotate([-angle, 0, 0]) spool_strut(); } } module flap_spool_complete(captive_nut=false, motor_shaft=false, magnet_hole=false) { linear_extrude(thickness, convexity=10) { // 'convexity' to fix rendering errors with etch 'difference()' result difference() { flap_spool(num_flaps, flap_hole_radius, flap_hole_separation, flap_spool_outset, height=0); spool_strut_tab_holes(narrow=captive_nut); if (captive_nut) { circle(r=m4_nut_width_corners_padded/2, $fn=6); } if (motor_shaft) { rotate([0, 0, 90]) { motor_shaft(); } } if (magnet_hole) { // Hole for press fit magnet, 90 degrees from home flap position translate([0, magnet_hole_offset]) { circle(r=magnet_hole_radius, $fn=15); } } if (render_home_indicator_as_cut) { flap_spool_home_indicator(num_flaps, flap_hole_radius, flap_hole_separation, flap_spool_outset, height=0); } } } } module flap_spool_etch() { enclosure_etch_style() flap_spool_home_indicator(num_flaps, flap_hole_radius, flap_hole_separation, flap_spool_outset); } module spool_retaining_wall(m4_bolt_hole=false) { linear_extrude(thickness) { difference() { square([spool_strut_width, spool_strut_width], center=true); spool_strut_tab_holes(clearance=spool_retaining_clearance); if (m4_bolt_hole) { circle(r=m4_hole_diameter/2, $fn=30); } } } } // double-flatted motor shaft of 28byj-48 motor (2D) module motor_shaft() { union() { intersection() { circle(r=28byj48_shaft_radius()-motor_shaft_under_radius, $fn=50); square([28byj48_shaft_radius()*2, 3], center=true); } square([28byj48_shaft_radius()/3, 28byj48_shaft_radius()*4], center=true); } } module front_tabs_negative(upper, tool_diameter=0) { // tool_diameter is an optional parameter to adjust these cutouts to compensate for a rotary cutting tool, which // requires "dog-bones" for corners and adjustment of the cutout if the tool is larger than thickness. This will // generally not look good if cut all the way through the material, but with a CNC router these can be cut as // pockets which are not visible from the front. assert(tool_diameter <= m4_hole_diameter, "Tool diameter is too large to cut M4 holes"); cutout_height = max(thickness, tool_diameter); // Offset is inverted on upper vs lower so that larger cutouts from tool diameter don't allow vertical movement freedom cutout_offset = (upper ? 1 : -1) * (cutout_height - thickness)/2; for (i = [0 : num_front_tabs-1]) { translate([thickness + (i*2+0.5) * front_tab_width, cutout_offset, 0]) { square([front_tab_width + enclosure_tab_clearance, cutout_height + enclosure_tab_clearance], center=true); // Dog-bones if (tool_diameter > 0) { // Dog-bones are rendered as squares to simplify the number of line segments in the final SVG output translate([(front_tab_width + enclosure_tab_clearance)/2 - tool_diameter/2, (cutout_height + enclosure_tab_clearance)/2]) { square([tool_diameter, tool_diameter], center=true); } translate([(front_tab_width + enclosure_tab_clearance)/2 - tool_diameter/2, -(cutout_height + enclosure_tab_clearance)/2]) { square([tool_diameter, tool_diameter], center=true); } translate([-(front_tab_width + enclosure_tab_clearance)/2 + tool_diameter/2, (cutout_height + enclosure_tab_clearance)/2]) { square([tool_diameter, tool_diameter], center=true); } translate([-(front_tab_width + enclosure_tab_clearance)/2 + tool_diameter/2, -(cutout_height + enclosure_tab_clearance)/2]) { square([tool_diameter, tool_diameter], center=true); } } } } for (i = [0 : num_front_tabs-2]) { translate([thickness + (i*2+1.5) * front_tab_width, 0, 0]) { if (tool_diameter == 0) { circle(r=m4_hole_diameter/2, $fn=30); } else { square([m4_hole_diameter, m4_hole_diameter], center=true); } } } } module connector_bracket_2d() { fillet_r = 3; difference() { hull() { translate([0, fillet_r]) { square([connector_bracket_width, connector_bracket_length_outer - fillet_r]); } translate([fillet_r, fillet_r]) { circle(r=fillet_r, $fn=30); } translate([connector_bracket_width - fillet_r, fillet_r]) { circle(r=fillet_r, $fn=30); } } translate([connector_bracket_thickness, -eps]) { square([connector_bracket_width - connector_bracket_thickness*2, connector_bracket_length_outer - connector_bracket_length_inner + eps]); } translate([connector_bracket_thickness - connector_bracket_clearance/2, -eps]) { square([thickness + connector_bracket_clearance, connector_bracket_length_outer - connector_bracket_overlap + connector_bracket_depth_clearance + eps]); } // translate([connector_bracket_thickness + thickness/2, connector_bracket_length_outer - connector_bracket_overlap + connector_bracket_depth_clearance]) { // circle(d=thickness+connector_bracket_clearance, $fn=30); // } translate([connector_bracket_width - connector_bracket_thickness - thickness - connector_bracket_clearance/2, -eps]) { square([thickness + connector_bracket_clearance, connector_bracket_length_outer - connector_bracket_overlap + connector_bracket_depth_clearance + eps]); } // translate([connector_bracket_width - connector_bracket_thickness - thickness/2, connector_bracket_length_outer - connector_bracket_overlap + connector_bracket_depth_clearance]) { // circle(d=thickness+connector_bracket_clearance, $fn=30); // } } } module connector_bracket() { linear_extrude(height=thickness) { connector_bracket_2d(); } } module enclosure_etch_style() { color(etch_color) translate([0, 0, thickness]) linear_extrude(height=etch_depth) children(); } module enclosure_front_base_2d() { translate([-enclosure_horizontal_inset, 0, 0]) { square([enclosure_width, enclosure_height]); } } module enclosure_front_cutouts_2d(tool_diameter=0) { // Viewing window cutout translate([front_window_right_inset, enclosure_height_lower - front_window_lower]) square([front_window_width, front_window_lower + front_window_upper]); // Front lower tabs translate([0, thickness * 0.5 + enclosure_vertical_inset, 0]) front_tabs_negative(upper=false, tool_diameter=tool_diameter); // Front upper tabs translate([0, enclosure_height - thickness * 0.5 - enclosure_vertical_inset, 0]) front_tabs_negative(upper=true, tool_diameter=tool_diameter); } module enclosure_front() { linear_extrude(height=thickness) { difference() { enclosure_front_base_2d(); enclosure_front_cutouts_2d(); } } } module enclosure_front_etch() { // alignment indicator, left side (triangle) enclosure_etch_style() translate([enclosure_wall_to_wall_width - thickness - enclosure_indicator_inset, enclosure_indicator_position_y]) triangle(enclosure_indicator_size, center=true); // alignment indicator, right side (circle) enclosure_etch_style() translate([thickness + enclosure_indicator_inset, enclosure_indicator_position_y]) circle(r=enclosure_indicator_size/2, $fn=60); // position indicator, 'up' arrow enclosure_etch_style() translate([enclosure_wall_to_wall_width + ((enclosure_width - enclosure_horizontal_inset) - enclosure_wall_to_wall_width)/2, enclosure_height - enclosure_indicator_arrow_height/2 - enclosure_indicator_inset]) arrow([enclosure_indicator_arrow_width, enclosure_indicator_arrow_height], center=true); } // holes for 28byj-48 motor, centered around motor shaft module motor_mount() { translate([-28byj48_mount_center_offset(), 28byj48_shaft_offset()]) { circle(r=motor_mount_hole_radius, $fn=30); } translate([28byj48_mount_center_offset(), 28byj48_shaft_offset()]) { circle(r=motor_mount_hole_radius, $fn=30); } hull() { x = -28byj48_chassis_radius() - motor_hole_slop/2 + motor_window_radius; y = [28byj48_shaft_offset() + motor_backpack_extent + motor_hole_slop/2 - motor_window_radius, 28byj48_shaft_offset() - 28byj48_chassis_radius() - motor_hole_slop/2 + motor_window_radius]; translate([ x, y[0], 0]) circle(r=motor_window_radius, $fn=40); translate([-x, y[1], 0]) circle(r=motor_window_radius, $fn=40); translate([-x, y[0], 0]) circle(r=motor_window_radius, $fn=40); translate([ x, y[1], 0]) circle(r=motor_window_radius, $fn=40); } } module side_tabs_negative(left_side) { translate([0, enclosure_length_right/2, 0]) { circle(r=m4_hole_diameter/2, $fn=30); } translate([0, enclosure_length_right / 2 - side_tab_bolt_head_clearance - side_tab_width/2, 0]) { square([thickness + enclosure_tab_clearance, side_tab_width + enclosure_tab_clearance], center=true); } position = left_side ? enclosure_length_right - side_tab_width - side_tab_left_inset: enclosure_length_right / 2 + side_tab_bolt_head_clearance + side_tab_width; translate([0, position, 0]) { square([thickness + enclosure_tab_clearance, side_tab_width*2 + enclosure_tab_clearance], center=true); } } module backstop_bolt_slot(radius) { hull() { circle(r=radius, $fn=15); translate([0, backstop_bolt_forward_range]) { circle(r=radius, $fn=15); } } } module connector_bracket_side_holes() { // overlap slot translate([enclosure_vertical_inset + thickness + connector_bracket_clearance/2, -connector_bracket_overlap]) { square([thickness + connector_bracket_clearance, connector_bracket_overlap + eps]); } // translate([enclosure_vertical_inset + thickness + connector_bracket_clearance/2 + (thickness+connector_bracket_clearance)/2, -connector_bracket_overlap]) { // circle(d=thickness + connector_bracket_clearance, $fn=30); // } } module alignment_bar() { color(assembly_colors[0]) translate([enclosure_width - enclosure_horizontal_inset, -enclosure_length_right + front_forward_offset - alignment_bar_diameter/2, -enclosure_height_lower + alignment_bar_diameter/2]) rotate([0, -90, 0]) linear_extrude(height=enclosure_width * render_units) circle(r=alignment_bar_diameter/2, $fn=60); } module enclosure_left() { linear_extrude(height=thickness) { difference() { square([enclosure_height, enclosure_length]); translate([enclosure_height_lower, enclosure_length - front_forward_offset, 0]) circle(r=m4_hole_diameter/2, $fn=30); translate([enclosure_height_lower, enclosure_length - front_forward_offset]) { rotate([0, 0, 90]) { motor_mount(); } } // bottom side tabs translate([thickness * 0.5 + enclosure_vertical_inset, enclosure_length, 0]) mirror([0, 1, 0]) side_tabs_negative(true); // top side tabs translate([enclosure_height - thickness * 0.5 - enclosure_vertical_inset, enclosure_length, 0]) mirror([0, 1, 0]) side_tabs_negative(true); if (enable_connectors) { // Connector bracket cuts translate([enclosure_height, enclosure_length]) { mirror([1, 0, 0]) { connector_bracket_side_holes(); } } translate([0, enclosure_length]) { connector_bracket_side_holes(); } } // Zip tie holes, bottom translate([20, zip_tie_spacing/2 + 5, 0]) rotate([0, 0, 90]) // cable channel facing 'up/down' zip_tie_holes(); if (enable_alignment_bar) { // Alignment bar cutout translate([0, alignment_bar_center]) { union() { // Cutout translate([alignment_bar_cutout_width/2, 0]) circle(r=alignment_bar_cutout_width/2, $fn=40); square([alignment_bar_cutout_width, alignment_bar_cutout_width], center=true); // Front-side fillet // translate([0, alignment_bar_cutout_width/2, 0]) // fillet_tool(r=alignment_bar_fillet_radius, overlap=1, $fn=40); // Back-side fillet translate([0, -alignment_bar_cutout_width/2, 0]) mirror([0, 1, 0]) fillet_tool(r=alignment_bar_fillet_radius, $fn=40); } } } } } } module enclosure_left_etch() { // alignment indicator (triangle) enclosure_etch_style() translate([enclosure_indicator_position_y, enclosure_length - enclosure_indicator_inset]) rotate([0, 0, -90]) triangle(enclosure_indicator_size, center=true); } module shaft_centered_motor_hole() { margin = 5; width = 28byj48_mount_center_offset()*2 + 3.5*2 + margin*2; length = 18 + 14 + margin*2; translate([-width/2, -(margin + 18 + 8)]) square([width, length]); } module enclosure_right() { linear_extrude(height=thickness) { difference() { square([enclosure_height, enclosure_length_right]); translate([enclosure_height_upper, enclosure_length_right - front_forward_offset, 0]) circle(r=m4_axle_hole_diameter/2, $fn=30); // backstop bolt slot translate([enclosure_height_upper - backstop_bolt_vertical_offset, enclosure_length_right - front_forward_offset, 0]) { backstop_bolt_slot(radius = m4_hole_diameter/2); } // top side tabs translate([0.5*thickness + enclosure_vertical_inset, enclosure_length_right, 0]) mirror([0, 1, 0]) side_tabs_negative(); // bottom side tabs translate([enclosure_height - 0.5*thickness - enclosure_vertical_inset, enclosure_length_right, 0]) mirror([0, 1, 0]) side_tabs_negative(); if (enable_connectors) { // Connector bracket cuts translate([enclosure_height, enclosure_length_right]) { mirror([1, 0, 0]) { connector_bracket_side_holes(); } } translate([0, enclosure_length_right]) { connector_bracket_side_holes(); } } } } } module enclosure_right_etch() { // alignment indicator (circle) enclosure_etch_style() translate([enclosure_height - enclosure_indicator_position_y, enclosure_length_right - enclosure_indicator_inset]) circle(r=enclosure_indicator_size/2, $fn=60); } module front_back_tabs() { for (i = [0 : 2 : num_front_tabs*2-2]) { translate([i * front_tab_width, -eps, 0]) square([front_tab_width, thickness + eps]); } } module side_tabs(left_side) { translate([-eps, enclosure_length_right / 2 - side_tab_bolt_head_clearance - side_tab_width, 0]) { square([side_tab_length + eps, side_tab_width]); } position = left_side ? enclosure_length_right - side_tab_width*2 - side_tab_left_inset : enclosure_length_right / 2 + side_tab_bolt_head_clearance; translate([-eps, position, 0]) { square([side_tab_length + eps, side_tab_width*2]); } } module front_back_captive_nuts() { for (i = [0 : 2 : num_front_tabs-1]) { translate([(i*2 + 1.5) * front_tab_width, -thickness, 0]) m4_captive_nut(); } } module side_captive_nuts(hole_types=[]) { translate([-thickness, enclosure_length_right/2, 0]) { rotate([0, 0, -90]) { m4_captive_nut(); } } } module enclosure_top() { // note, this is flipped upside down (around the x axis) when assembled so the clean side faces out linear_extrude(height = thickness) { translate([thickness, 0, 0]) { difference() { union() { square([enclosure_wall_to_wall_width - 2 * thickness, enclosure_length_right]); // front tabs mirror([0, 1, 0]) front_back_tabs(); // left tabs translate([enclosure_wall_to_wall_width - 2 * thickness, 0, 0]) side_tabs(true); // right tabs mirror([1, 0, 0]) translate([0, 0, 0]) side_tabs(false); } // front captive nuts front_back_captive_nuts(); // right captive nuts side_captive_nuts(hole_types = [1]); // left captive nuts translate([enclosure_wall_to_wall_width - 2 * thickness, 0, 0]) mirror([1, 0, 0]) side_captive_nuts(hole_types = [1]); if (enable_mounting_holes) { // mounting hole translate([(enclosure_wall_to_wall_width - 2 * thickness)/2, enclosure_length_right - mounting_hole_inset]) { circle(r=m4_hole_diameter/2, $fn=30); } } } } } } module enclosure_bottom() { linear_extrude(height = thickness) { translate([thickness, 0, 0]) { difference() { union() { square([enclosure_wall_to_wall_width - 2 * thickness, enclosure_length_right]); // front tabs translate([0, enclosure_length_right, 0]) front_back_tabs(); // left tabs translate([enclosure_wall_to_wall_width - 2 * thickness, enclosure_length_right, 0]) mirror([0, 1, 0]) side_tabs(true); // right tabs translate([0, enclosure_length_right, 0]) mirror([0, 1, 0]) mirror([1, 0, 0]) side_tabs(false); } // front captive nuts translate([0, enclosure_length_right, 0]) mirror([0,1,0]) front_back_captive_nuts(); // right captive nuts translate([0, enclosure_length_right, 0]) mirror([0, 1, 0]) side_captive_nuts(hole_types = [1]); // left captive nuts translate([enclosure_wall_to_wall_width - 2 * thickness, enclosure_length_right, 0]) mirror([0, 1, 0]) mirror([1, 0, 0]) side_captive_nuts(hole_types = [1]); if (enable_mounting_holes) { // mounting hole translate([(enclosure_wall_to_wall_width - 2 * thickness)/2, mounting_hole_inset]) { circle(r=m4_hole_diameter/2, $fn=30); } } } } } } module enclosure_bottom_etch() { if (enable_source_info) { enclosure_etch_style() translate([captive_nut_inset + m4_nut_length + 1, 1, thickness]) { text_label([str("rev. ", render_revision), render_date, "github.com/scottbez1/splitflap"]); } } } module split_flap_3d(front_flap_index, include_connector, include_front_panel=true) { module position_front() { if (include_front_panel) { translate([0, front_forward_offset + thickness, -enclosure_height_lower]) rotate([90, 0, 0]) children(); } } module positioned_front() { position_front() enclosure_front(); } module positioned_front_etch() { position_front() enclosure_front_etch(); } module position_left() { translate([enclosure_wall_to_wall_width, -enclosure_length + front_forward_offset, -enclosure_height_lower]) rotate([0, -90, 0]) children(); } module positioned_left() { position_left() enclosure_left(); } module positioned_left_etch() { position_left() enclosure_left_etch(); } module position_right() { translate([0, -enclosure_length_right + front_forward_offset, enclosure_height_upper]) rotate([0, 90, 0]) children(); } module positioned_right() { position_right() enclosure_right(); } module positioned_right_etch() { position_right() enclosure_right_etch(); } module positioned_top() { translate([0, front_forward_offset, enclosure_height_upper - enclosure_vertical_inset]) rotate([180, 0, 0]) enclosure_top(); } module position_bottom() { translate([0, front_forward_offset - enclosure_length_right, -enclosure_height_lower + enclosure_vertical_inset]) children(); } module positioned_bottom() { position_bottom() enclosure_bottom(); } module positioned_bottom_etch() { position_bottom() enclosure_bottom_etch(); } module positioned_top_connector() { translate([enclosure_wall_to_wall_width - thickness - connector_bracket_thickness, front_forward_offset - connector_bracket_length_outer, enclosure_height_upper - enclosure_vertical_inset - thickness * 2 - connector_bracket_clearance]) { connector_bracket(); } } module positioned_bottom_connector() { translate([enclosure_wall_to_wall_width - thickness - connector_bracket_thickness, front_forward_offset - connector_bracket_length_outer, - enclosure_height_lower + enclosure_vertical_inset + thickness + connector_bracket_clearance]) { connector_bracket(); } } module positioned_left_bolts() { // Top translate([enclosure_wall_to_wall_width, front_forward_offset - enclosure_length_right/2, enclosure_height_upper - enclosure_vertical_inset - thickness/2]) { rotate([0, -90, 0]) { standard_m4_bolt(nut_distance=captive_nut_inset); } } // Bottom translate([enclosure_wall_to_wall_width, front_forward_offset - enclosure_length_right/2, -enclosure_height_lower + enclosure_vertical_inset + thickness/2]) { rotate([0, -90, 0]) { standard_m4_bolt(nut_distance=captive_nut_inset); } } } module positioned_right_bolts() { // Top translate([0, front_forward_offset - enclosure_length_right/2, enclosure_height_upper - enclosure_vertical_inset - thickness/2]) { rotate([0, 90, 0]) { standard_m4_bolt(nut_distance=captive_nut_inset); } } // Bottom translate([0, front_forward_offset - enclosure_length_right/2, -enclosure_height_lower + enclosure_vertical_inset + thickness/2]) { rotate([0, 90, 0]) { standard_m4_bolt(nut_distance=captive_nut_inset); } } } module positioned_front_bolts() { // Top translate([front_window_right_inset + 1.5*front_tab_width, front_forward_offset + thickness, enclosure_height_upper - enclosure_vertical_inset - thickness/2]) { rotate([0, 90, -90]) { standard_m4_bolt(nut_distance=captive_nut_inset); } } // Bottom translate([front_window_right_inset + 1.5*front_tab_width, front_forward_offset + thickness, -enclosure_height_lower + enclosure_vertical_inset + thickness/2]) { rotate([0, 90, -90]) { standard_m4_bolt(nut_distance=captive_nut_inset); } } } module positioned_enclosure() { if (render_enclosure == 2) { color(assembly_colors[0]) positioned_front(); color(assembly_colors[1]) positioned_left(); color(assembly_colors[1]) positioned_right(); color(assembly_colors[2]) positioned_top(); color(assembly_colors[2]) positioned_bottom(); positioned_front_etch(); positioned_left_etch(); positioned_right_etch(); positioned_bottom_etch(); if (include_connector) { color(assembly_colors[3]) positioned_top_connector(); color(assembly_colors[3]) positioned_bottom_connector(); } if (render_bolts) { positioned_left_bolts(); positioned_right_bolts(); positioned_front_bolts(); } } else if (render_enclosure == 1) { %positioned_front(); %positioned_left(); %positioned_right(); %positioned_top(); %positioned_bottom(); %positioned_front_etch(); %positioned_left_etch(); %positioned_right_etch(); %positioned_bottom_etch(); if (include_connector) { %positioned_top_connector(); %positioned_bottom_connector(); } if (render_bolts) { positioned_left_bolts(); positioned_right_bolts(); positioned_front_bolts(); } } } positioned_enclosure(); if (render_pcb) { translate([enclosure_wall_to_wall_width - thickness - 28byj48_mount_bracket_height() - eps, 0, 0]) { rotate([0, -90, 0]) { rotate([0, 0, -90]) { pcb(pcb_to_spool); } } } } translate([spool_width_slop/2 + thickness, 0, 0]) { // Flap area if (render_flaps > 0) { rotate([0, 90, 0]) { if (render_flap_area >= 1) { translate([0, 0, thickness]) { cylinder(r=exclusion_radius, h=flap_width - 2*thickness); } } if (render_flap_area >= 2) { translate([0, 0, thickness + (flap_width - 2*thickness)/4]) { cylinder(r=outer_exclusion_radius, h=(flap_width - 2*thickness)/2); } } } flap_offset = thickness > flap_notch_depth ? -flap_notch_depth + thickness + flap_width_slop/2 : flap_width_slop/2; translate([flap_offset, 0, 0]) { // Collapsed flaps on the top for (i=[0:num_flaps/2 - 1]) { if (i == 0 || render_flaps == 2) { show_letters = render_letters == 2 || (render_letters == 1 && i == 0); rotate([360/num_flaps * i, 0, 0]) { translate([flap_width, flap_pitch_radius, 0]) { rotate([90, 0, 180]) { flap_with_letters(flap_color, letter_color, front_flap_index + i, flap_gap, front_letter=show_letters, back_letter=show_letters); } } } } } // Hanging flaps on the bottom for (i=[1:num_flaps/2]) { flap_index = num_flaps - i; angle = -360/num_flaps*i; translate([flap_width, flap_pitch_radius*cos(angle), flap_pitch_radius * sin(angle)]) { if (i == 1 || render_flaps == 2) { show_letters = render_letters == 2 || (render_letters == 1 && i == 1); rotate([-90, 0, 180]) { flap_with_letters(flap_color, letter_color, front_flap_index + flap_index, flap_gap, front_letter=show_letters, back_letter=show_letters); } } } } } } } if(render_spool) { translate([(spool_width_clearance - spool_width + spool_width_slop) / 2 + thickness, 0, 0]) { spool_struts(); // motor spool translate([spool_width - thickness + 5*spool_horizontal_explosion, 0, 0]) { rotate([0, 90, 0]) { color(assembly_colors[0]) flap_spool_complete(motor_shaft=true, magnet_hole=true); translate([0, 0, -eps - thickness]) flap_spool_etch(); } } color(assembly_colors[0]) { translate([thickness - 3*spool_horizontal_explosion, 0, 0]) { rotate([0, 90, 0]) { spool_retaining_wall(m4_bolt_hole=true); } } } translate([-5*spool_horizontal_explosion, 0, 0]) { rotate([0, 90, 0]) { color(assembly_colors[0]) flap_spool_complete(captive_nut=true); flap_spool_etch(); } } translate([thickness * 2, 0, 0]) { rotate([0, -90, 0]) { standard_m4_bolt(nut_distance=thickness + 7*spool_horizontal_explosion); } } } } if (render_motor) { translate([enclosure_wall_to_wall_width - thickness - 28byj48_mount_bracket_height(), 0, 0]) { rotate([90, 0, 0]) { rotate([0, -90, 0]) { Stepper28BYJ48(); } translate([0, -28byj48_shaft_offset(), 0]) { translate([0, 0, -28byj48_mount_center_offset()]) { rotate([0, 90, 0]) { rotate([0, 0, 90]) { standard_m4_bolt(nut_distance=thickness+28byj48_mount_bracket_height()); } } } translate([0, 0, 28byj48_mount_center_offset()]) { rotate([0, 90, 0]) { rotate([0, 0, 90]) { translate([0, 0, -pcb_thickness()]) { // One motor bolt is also used to clamp the sensor PCB standard_m4_bolt(nut_distance=thickness+28byj48_mount_bracket_height() + pcb_thickness()); } } } } } } } } } module laser_etch() { if (!render_2d_mirror && (render_etch || render_index == -1)) { children(); } } module laser_mirror() { if (render_2d_mirror) { mirror([1, 0, 0]) children(); } else { children(); } } if (render_3d) { for (i = [0 : render_units - 1]) { translate([-enclosure_width/2 + (-(render_units-1) / 2 + i)*(enclosure_width + render_unit_separation), 0, 0]) split_flap_3d(get_flap_index_for_letter(render_string[render_units - 1 - i]), include_connector=(i != render_units - 1)); } } else { laser_mirror() { panel_height = enclosure_length + kerf_width + enclosure_length_right + kerf_width + enclosure_width + kerf_width + spool_strut_width + kerf_width; projection_renderer(render_index=render_index, render_etch=render_etch, kerf_width=kerf_width, panel_height=panel_height, panel_horizontal=panel_horizontal, panel_vertical=panel_vertical) { // Main enclosure (left, right, front) translate([0, 0]) enclosure_left(); translate([0, 0]) laser_etch() enclosure_left_etch(); translate([enclosure_height + enclosure_length_right + kerf_width, 0]) rotate([0, 0, 90]) enclosure_right(); translate([enclosure_height + enclosure_length_right + kerf_width, 0]) rotate([0, 0, 90]) laser_etch() enclosure_right_etch(); front_panel_offset = enclosure_length + kerf_width + enclosure_width - enclosure_horizontal_inset; if (render_front_panel) translate([0, front_panel_offset]) rotate([0, 0, -90]) enclosure_front(); if (render_front_panel) translate([0, front_panel_offset]) rotate([0, 0, -90]) laser_etch() enclosure_front_etch(); front_panel_origin = [enclosure_height_lower - front_window_lower + kerf_width, front_panel_offset - front_window_right_inset - front_window_width + kerf_width]; // Pack the top enclosure and three of the spool struts inside the front panel window translate(front_panel_origin) translate([-thickness + side_tab_length, spool_strut_width + thickness + kerf_width]) enclosure_top(); translate(front_panel_origin) translate([0, 0, thickness/2]) translate([0, spool_strut_width/2]) spool_strut(); translate(front_panel_origin) translate([0, 0, thickness/2]) translate([front_window_lower + front_window_upper - spool_strut_width/2 - kerf_width*2, 0]) rotate([0,0,90]) spool_strut(); translate(front_panel_origin) translate([0, 0, thickness/2]) translate([front_window_lower + front_window_upper - 3*spool_strut_width/2 - kerf_width*3, spool_strut_length]) rotate([0,0,-90]) spool_strut(); // Top and bottom translate([spool_outer_radius * 4 + 6, enclosure_height + 3]) { enclosure_bottom(); } translate([spool_outer_radius * 4 + 6, enclosure_height + 3]) { laser_etch() translate([-thickness + side_tab_length, 0]) enclosure_bottom_etch(); } // Last spool strut at the side translate([enclosure_height + enclosure_length_right + kerf_width*2, 0, thickness/2]) rotate([0, 0, 90]) translate([0, -spool_strut_width/2]) spool_strut(); // Connector brackets on the side if (enable_connectors) translate([enclosure_height + enclosure_length_right + kerf_width*2, 0, thickness/2]) rotate([0, 0, 90]) translate([spool_strut_length + kerf_width, -connector_bracket_length_outer]) connector_bracket(); if (enable_connectors) translate([enclosure_height + enclosure_length_right + kerf_width*2, 0, thickness/2]) rotate([0, 0, 90]) translate([spool_strut_length + kerf_width, -connector_bracket_length_outer]) translate([connector_bracket_width + kerf_width, 0]) connector_bracket(); flap_spool_y_off = spool_outer_radius + enclosure_length + enclosure_width + kerf_width*2 + 3; flap_spool_x_off = spool_outer_radius + 3; translate([flap_spool_x_off, flap_spool_y_off,1]) flap_spool_complete(motor_shaft=true, magnet_hole=true); translate([flap_spool_x_off + spool_outer_radius*2 + kerf_width, flap_spool_y_off]) mirror([0, 1, 0]) flap_spool_complete(captive_nut=true); // Flap spool etching if (!render_home_indicator_as_cut) { laser_etch() { translate([flap_spool_x_off, flap_spool_y_off]) flap_spool_etch(); translate([flap_spool_x_off + spool_outer_radius*2 + kerf_width, flap_spool_y_off]) mirror([0, 1, 0]) flap_spool_etch(); } } // Spool retaining wall in motor window translate([enclosure_height_lower - 28byj48_shaft_offset() + 28byj48_chassis_radius() - (28byj48_chassis_radius() + motor_backpack_extent)/2, enclosure_length - front_forward_offset - 28byj48_chassis_radius() - motor_hole_slop/2 + spool_strut_width/2 + kerf_width]) spool_retaining_wall(m4_bolt_hole=true); } } } ================================================ FILE: 3d/spool.scad ================================================ /* Copyright 2015-2016 Scott Bezek and the splitflap contributors 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. */ module flap_spool(flaps, flap_hole_radius, flap_hole_separation, outset, height) { pitch_radius = flap_spool_pitch_radius(flaps, flap_hole_radius, flap_hole_separation); outer_radius = flap_spool_outer_radius(flaps, flap_hole_radius, flap_hole_separation, outset); module flap_spool_2d() { difference() { circle(r=outer_radius, $fn=60); for (i = [0 : flaps - 1]) { translate([cos(360/flaps*i)*pitch_radius, sin(360/flaps*i)*pitch_radius]) circle(r=flap_hole_radius, $fn=15); } } } if (height > 0) { linear_extrude(height) { flap_spool_2d(); } } else { flap_spool_2d(); } } module flap_spool_home_indicator(flaps, flap_hole_radius, flap_hole_separation, outset, height=0) { pitch_radius = flap_spool_pitch_radius(flaps, flap_hole_radius, flap_hole_separation); outer_radius = flap_spool_outer_radius(flaps, flap_hole_radius, flap_hole_separation, outset); module flap_spool_home_indicator_2d() { translate([pitch_radius -flap_hole_radius * 3, 0]) { hull() { circle(r=flap_hole_radius/2, $fn=30); translate([-flap_hole_radius * 1.25, 0]) { circle(r=flap_hole_radius/2, $fn=30); } } } } if (height > 0) { // convexity parameter fixes 'difference()' face polarity in preview mode... somehow linear_extrude(height, convexity=2) flap_spool_home_indicator_2d(); } else { flap_spool_home_indicator_2d(); } } function flap_spool_pitch_radius(flaps, flap_hole_radius, separation) = flaps * (flap_hole_radius*2 + separation) / (2*PI); function flap_spool_outer_radius(flaps, flap_hole_radius, separation, outset) = flap_spool_pitch_radius(flaps, flap_hole_radius, separation) + flap_hole_radius + outset; flap_spool(40, 1.5, 5, 3, 3.2); ================================================ FILE: 3d/tools/classic_pcb_mount.scad ================================================ /* Copyright 2021 Scott Bezek and the splitflap contributors 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. */ use <../shapes.scad> // Customization Options wall_thickness = 4; // thickness of the perimeter wall, along XY bottom_thickness = 2.5; // thickness of the bottom face, along Z pcb_xy_clearance = 0.5; // gap between PCB edges and the perimeter wall, XY pcb_z_clearance = 0.4; // gap between the top of the PCB PCB and the top of the enclosure solder_point_clearance = 4.5; // distance between the bottom of the PCB and the floor of the enclosure, Z wall_corner_radius = 5; // radius of the perimeter wall corners wall_top_radius = 1.5; // radius for the 3D fillet on the top edge of mount mounting_hole_diameter = 6; // diameter of the holes in the mount, large enough for heat-set inserts mounting_hole_clearance = 5; // body clearance around the holes in the mount, XY mounting_hole_boss_radius = 5; // radius for the 2D inside corners of the mounting hole bosses mounting_boss_top_fillet = 2; // radius of the 3D fillet on top of the boss mounting_boss_bottom_fillet = 2; // radius of the 3D fillet on the bottom of the boss (additive) support_boss_width = 15; // total width of the support boss, along X support_boss_length = 6; // total length of the support boss, along Y support_boss_y_offset = 10; // offset of the boss from the PCB edge, along Y support_boss_fillet_radius = 2; // radius of the support boss corners support_boss_top_fillet = 1; // radius of the 3D fillet on top of the boss support_boss_bottom_fillet = 1.5; // radius of the 3D fillet on the bottom of the boss (additive) screw_hole_diameter = 4; // diameter of the holes on either side for screwing into a surface screw_hole_head_diameter = 8.5; // diameter of the bolt head used in the screw hole (for counter-bore) screw_hole_clearance = 4; // body clearance around the screw holes, XY screw_hole_body_thickness = 4; // thickness of the area under the screw hole screw_hole_body_fillet = 100; // radius for the body fillet on the screw hole body (large = max possible) // PCB dimensions taken from KiCAD ("Classic" Driver) pcb_width = 96; pcb_length = 48; pcb_thickness = 1.6; pcb_hole_left_offset = 8.128; // offset from left wall to left holes center pcb_hole_distance_x = 83.312; // hole distances center-to-center pcb_hole_distance_y = 39.878; pcb_hole_coordinates = [ [pcb_hole_left_offset, pcb_length/2 - pcb_hole_distance_y/2], // bottom left [pcb_hole_left_offset, pcb_length/2 + pcb_hole_distance_y/2], // top left [pcb_hole_left_offset + pcb_hole_distance_x, pcb_length/2 - pcb_hole_distance_y/2], // bottom right ]; // Pre-Calculated Values wall_xy_offset = pcb_xy_clearance + wall_thickness; // offset from outside wall to PCB edge (XY) height_to_pcb = bottom_thickness + solder_point_clearance; // distance from Z origin to the bottom face of the PCB total_width = pcb_width + 2*wall_xy_offset; total_length = pcb_length + 2*wall_xy_offset; total_height = height_to_pcb + pcb_thickness + pcb_z_clearance; mounting_hole_boss_offset = mounting_hole_diameter/2 + mounting_hole_clearance; // distance from hole center to boss edge screw_hole_outside_radius = screw_hole_diameter/2 + screw_hole_clearance; // distance from hole center to outside edge screw_hole_3D_fillet = total_height - screw_hole_body_thickness - wall_top_radius; // radius for the 3D fillet on the screw hole body eps = 0.01; module dummy_pcb() { color([0, 0.5, 0]) translate([wall_xy_offset, wall_xy_offset, bottom_thickness + solder_point_clearance]) { linear_extrude(height=pcb_thickness) difference() { square([pcb_width, pcb_length]); mounting_holes(); } } } module pcb_mount_base_2d() { rounded_square([total_width, total_length], r=wall_corner_radius, $fn=60); } module pcb_mount_cutout() { translate([0, 0, bottom_thickness]) linear_extrude(height=total_height + eps, convexity=10) translate([wall_thickness, wall_thickness]) square([pcb_width + 2*pcb_xy_clearance, pcb_length + 2*pcb_xy_clearance]); } module mounting_holes() { for(i = [0 : 2]) { translate(pcb_hole_coordinates[i]) circle(r=mounting_hole_diameter/2, $fn=30); } } module pcb_support_boss() { translate([total_width - wall_thickness - support_boss_width, total_length - wall_xy_offset - support_boss_length - support_boss_y_offset]) { difference() { linear_extrude(height=height_to_pcb) rounded_square([support_boss_width + eps, support_boss_length], r=support_boss_fillet_radius, corners=[0, 1], $fn=60); translate([0, 0, height_to_pcb]) square_fillet_3d([support_boss_width, support_boss_length], r=support_boss_top_fillet, r_corner=support_boss_fillet_radius, overlap=0.1, corners=[0,1], edges=[0,1,3], $fn=30); } translate([0, 0, bottom_thickness]) square_fillet_3d([support_boss_width, support_boss_length], r=support_boss_bottom_fillet, r_corner=support_boss_fillet_radius, overlap=0.1, additive=true, corners=[0,1], edges=[0,1,3], $fn=60); } } module screw_mount_2d(fillet_radius) { translate([-screw_hole_outside_radius, 0]) { difference() { // Main Body union() { circle(r=screw_hole_outside_radius, $fn=60); translate([0, -screw_hole_outside_radius]) square([screw_hole_outside_radius, 2*screw_hole_outside_radius]); } // Through-Hole circle(r=screw_hole_diameter/2, $fn=60); } if(fillet_radius > 0) { // X/Y Fillet, Top translate([screw_hole_outside_radius, screw_hole_outside_radius]) mirror([1, 0, 0]) fillet_tool(r=fillet_radius, $fn=60); // X/Y Fillet, Bottom translate([screw_hole_outside_radius, -screw_hole_outside_radius]) mirror([1, 1, 0]) fillet_tool(r=fillet_radius, $fn=60); } } } module screw_mount() { fillet_radius = min(screw_hole_body_fillet, screw_hole_outside_radius); // fillet can't pass 90° thickness = min(screw_hole_body_thickness, total_height); // don't make extension taller than main body render(convexity=10) // fixes render issues in preview mode (due to number of 3D intersections) translate([0, total_length/2]) difference() { union() { // Main Body linear_extrude(height=thickness) screw_mount_2d(fillet_radius); // 3D Fillet translate([0, 0, thickness]) { length = 2*(screw_hole_outside_radius + fillet_radius + eps); intersection() { translate([0, length/2]) rotate([90, -90, 0]) linear_extrude(height=length) fillet_tool(r=screw_hole_3D_fillet, $fn=120); linear_extrude(height=total_height - thickness) screw_mount_2d(fillet_radius); } } } // Bolt Counter-Bore translate([-screw_hole_outside_radius, 0, thickness - eps]) linear_extrude(height=total_height - thickness + 2*eps) circle(r=screw_hole_head_diameter/2, $fn=30); } } module pcb_mount() { difference() { union() { // Base "Bathtub" difference() { linear_extrude(height=total_height, convexity=10) pcb_mount_base_2d(); pcb_mount_cutout(); } // Mounting Holes Bosses translate([wall_thickness, wall_thickness]) { // Bottom Left translate([-eps, -eps]) { x = pcb_hole_coordinates[0][0] + pcb_xy_clearance + mounting_hole_boss_offset + eps; y = pcb_hole_coordinates[0][1] + pcb_xy_clearance + mounting_hole_boss_offset + eps; difference() { linear_extrude(height=height_to_pcb) rounded_square([x, y], r=mounting_hole_boss_radius, corners=[2], $fn=60); translate([0, 0, height_to_pcb]) square_fillet_3d([x, y], r=mounting_boss_top_fillet, r_corner=mounting_hole_boss_radius, overlap=0.1, corners=[2], edges=[1,2], $fn=60); } translate([0, 0, bottom_thickness]) square_fillet_3d([x, y], r=mounting_boss_bottom_fillet, r_corner=mounting_hole_boss_radius, overlap=0.1, additive=true, corners=[2], edges=[1,2], $fn=60); } // Top Left translate([-eps, pcb_hole_coordinates[1][1] + pcb_xy_clearance - mounting_hole_boss_offset]) { x = pcb_hole_coordinates[1][0] + pcb_xy_clearance + mounting_hole_boss_offset + eps; y = 2*pcb_xy_clearance + pcb_length - pcb_hole_coordinates[1][1] + mounting_hole_boss_offset + eps; difference() { linear_extrude(height=height_to_pcb) rounded_square([x, y], r=mounting_hole_boss_radius, corners=[3], $fn=60); translate([0, 0, height_to_pcb]) square_fillet_3d([x, y], r=mounting_boss_top_fillet, r_corner=mounting_hole_boss_radius, overlap=0.1, corners=[3], edges=[2,3], $fn=60); } translate([0, 0, bottom_thickness]) square_fillet_3d([x, y], r=mounting_boss_bottom_fillet, r_corner=mounting_hole_boss_radius, overlap=0.1, additive=true, corners=[3], edges=[2,3], $fn=60); } // Bottom Right translate([pcb_hole_coordinates[2][0] + pcb_xy_clearance - mounting_hole_boss_offset, -eps]) { x = pcb_width - pcb_hole_coordinates[2][0] + pcb_xy_clearance + mounting_hole_boss_offset + eps; y = pcb_hole_coordinates[2][1] + pcb_xy_clearance + mounting_hole_boss_offset + eps; difference() { linear_extrude(height=height_to_pcb) rounded_square([x, y], r=mounting_hole_boss_radius, corners=[1], $fn=60); translate([0, 0, height_to_pcb]) square_fillet_3d([x, y], r=mounting_boss_top_fillet, r_corner=mounting_hole_boss_radius, overlap=0.1, corners=[1], edges=[0,1], $fn=60); } translate([0, 0, bottom_thickness]) square_fillet_3d([x, y], r=mounting_boss_bottom_fillet, r_corner=mounting_hole_boss_radius, overlap=0.1, additive=true, corners=[1], edges=[0,1], $fn=60); } } // Board Support Boss pcb_support_boss(); // Left screw mount screw_mount(); // Right screw mount translate([total_width, 0]) mirror([1, 0, 0]) screw_mount(); } // Mounting Hole... Holes translate([wall_xy_offset, wall_xy_offset, -eps]) linear_extrude(height=total_height + 2*eps) mounting_holes(); // Top Edge 3D Fillet translate([0, 0, total_height]) square_fillet_3d(size=[total_width, total_length], r=wall_top_radius, r_corner=wall_corner_radius, $fn=60); } } pcb_mount(); ================================================ FILE: 3d/tools/connector_case.scad ================================================ /* Copyright 2021 Scott Bezek and the splitflap contributors 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. */ include <../shapes.scad> use <../splitflap.scad> num_connectors = 4; // number of connectors (vertically) per section thickness = 3.0; // thickness of each connector (should be close to splitflap.scad panel thickness) cases_per_row = 2; // number of cases per each row dual_rows = true; // whether to put mirrored cases on the opposite side connector_clearance = 0.5; // distance between the connector edges and the case walls wall_thickness = 3.5; // thickness of the case walls around the connectors bottom_thickness = 5.0; // thickness of the bottom of the case, below the connectors top_clearance = 0.4; // clearance above the top of the connectors // auto-calculated constants combined_offset = connector_clearance + wall_thickness; // total offset from base to outer edge side_wall_height = (thickness * num_connectors) + top_clearance; // total height of the walls above the base case_width = connector_bracket_width() + (combined_offset * 2); // width of the case (along X) case_width_per = case_width - wall_thickness; // width of each case when in a group (combined wall thickness) case_length = connector_bracket_length() + (combined_offset * 2); // length of the case (along Y) case_length_dual_offset = case_length + connector_bracket_length() - wall_thickness; // Y offset for the 'dual' case row case_length_dual = case_length + case_length_dual_offset; // total case length alokng Y with 'dual' option enabled module base_outline() { offset(r=combined_offset, $fn=60) { connector_bracket_2d(); } } module connector_case_cutout(num) { width = 14 + connector_clearance; // arbitrary radius = 2.0; // nicely rounded corners height = (side_wall_height) + radius; // total height of the tool (Z) depth = connector_bracket_length(); // total depth of the tool (Y) translate([0, depth, 0]) rotate([90, 0, 0]) linear_extrude(depth, convexity=2) translate([connector_bracket_width()/2 - width/2, bottom_thickness, 0]) rounded_square([width, height], r=radius, $fn=30); } module connector_case_single(num) { difference() { // case body union() { // pocket translate([0, 0, bottom_thickness]) { linear_extrude(side_wall_height, convexity=10) { difference() { base_outline(); offset(delta=connector_clearance) { connector_bracket_2d(); } } } } // bottom linear_extrude(bottom_thickness, convexity=2) { base_outline(); } } connector_case_cutout(num); } } module connector_case_row(num_conn, num_cases) { union() { for ( i = [0 : num_cases - 1] ) { translate([case_width_per * i, 0, 0]) connector_case_single(num_conn); } } } module connector_case(num_conn, num_cases, dual=false) { union() { connector_case_row(num_conn, num_cases); if(dual) { translate([0, case_length_dual_offset, 0]) mirror([0, 1, 0]) connector_case_row(num_conn, num_cases); } } } connector_case(num_connectors, cases_per_row, dual_rows); ================================================ FILE: 3d/tools/flap_container.scad ================================================ /* Copyright 2020 Scott Bezek and the splitflap contributors 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. */ include <../flap_dimensions.scad> use <../splitflap.scad> use <../flap.scad> num_flaps = 40; containers_x = 1; containers_y = 1; flap_thickness_allowance = 1.1 - flap_thickness; // fudged, so all flaps are considered 1.1 mm thick cavity_top_allowance = 2; // extra case height above the flaps flap_clearance = 0.5; // distance between the flap edges and the case walls wall_thickness = 3.5; // thickness of the case walls around the flaps bottom_thickness = 5.0; // thickness of the bottom of the case, below the flaps thumb_hole_diameter = 20.0; // diameter for the thumb hole at the bottom of the case pinch_cutout_width = 25.0; // width of the 'pinch' opening for grabbing flaps pinch_cutout_offset = 12.5; // offset from the bottom of the pinch hole to the bottom of the cavity band_slot_diameter = 10.0; // diameter of the slot for the retaining band band_slot_depth = 2.5; // depth of the retaining band slot, measured from the base to the peak fillet_case_corners = 3.0; // bottom outside corner fillet fillet_flap_notch = 1.0; // inside of flap notches, in cavity fillet_pinch_top = 5.0; // at the top of the case, where the pinch cutout starts fillet_thumb_hole = 1.0; // 3D fillet on the top inside of the thumb hole // Calculated Values eps = 0.01; // extra distance for through geometry cavity_height = num_flaps * (flap_thickness + flap_thickness_allowance) + cavity_top_allowance; case_height = bottom_thickness + cavity_height; case_width = flap_width + flap_clearance * 2 + wall_thickness * 2; case_length = flap_height + flap_clearance * 2 + wall_thickness * 2; pinch_cutout_height = cavity_height - pinch_cutout_offset; // total height of the cutout pinch_cutout_top_offset = case_height - cavity_height + pinch_cutout_offset + pinch_cutout_width/2; // top of the case to the center of the pinch cutout circle module fillet_tool(radius) { difference() { translate([-eps, -eps]) square(radius + eps); translate([radius, radius, 0]) circle(r=radius, $fn=100); } } module flap_position() { translate([-flap_width/2, -(flap_height - flap_pin_width)/2, 0]) children(); } module case_body() { linear_extrude(height = case_height) flap_position() { difference() { diff = wall_thickness + flap_clearance; offset(delta = diff) flap_2d(cut_tabs = false); translate([0, -flap_pin_width/2]) { // re-centering on bottom edge // bottom left corner fillet translate([-diff, -diff]) fillet_tool(fillet_case_corners); // bottom right corner fillet translate([-diff + case_width, -diff]) mirror([1, 0, 0]) fillet_tool(fillet_case_corners); } } } } module flap_cavity() { module notch_fillet() { mirror([1,0,0]) translate([flap_clearance - flap_notch_depth, flap_clearance + flap_pin_width/2]) intersection() { square([flap_notch_depth, flap_notch_height_default]); // limit to size of notch fillet_tool(fillet_flap_notch); } } module notch_top() { mirror([0, 1, 0]) translate([0, -flap_pin_width - flap_notch_height_default]) children(); } module notch_right() { translate([flap_width, 0, 0]) mirror([1, 0, 0]) children(); } translate([0, 0, case_height - cavity_height]) linear_extrude(height = cavity_height + eps) flap_position() { offset(delta = flap_clearance) flap_2d(); // left, notch bottom notch_fillet(); // left, notch top notch_top() notch_fillet(); // right, notch bottom notch_right() notch_fillet(); notch_right() notch_top() notch_fillet(); } } module thumb_hole() { translate([0, 0, -eps]) linear_extrude(bottom_thickness + eps*2) circle(r=thumb_hole_diameter/2, $fn=100); } module thumb_hole_fillet() { translate([0, 0, bottom_thickness]) { rotate_extrude($fn = 100) translate([thumb_hole_diameter/2, 0, 0]) rotate([180, 0, 0]) fillet_tool(fillet_thumb_hole); } } module pinch_hole() { rotate([90, 0, 0]) translate([0, pinch_cutout_top_offset , -case_length/2 - eps]) linear_extrude(height=case_length + eps*2) union() { translate([-pinch_cutout_width/2, 0, 0]) square([pinch_cutout_width, pinch_cutout_height - pinch_cutout_width/2 + eps]); circle(r=pinch_cutout_width/2, $fn=100); // left top fillet translate([-pinch_cutout_width/2, pinch_cutout_height - pinch_cutout_width/2,0]) mirror([1, 1, 0]) fillet_tool(fillet_pinch_top); // right top fillet translate([pinch_cutout_width/2, pinch_cutout_height - pinch_cutout_width/2,0]) mirror([0, 1, 0]) fillet_tool(fillet_pinch_top); } } module band_slot() { rotate([90, 0, 0]) translate([0, band_slot_depth - band_slot_diameter/2, -case_length/2 - eps]) linear_extrude(height=case_length + eps*2) circle(r=band_slot_diameter/2, $fn=60); } module flap_container() { difference() { case_body(); flap_cavity(); thumb_hole(); thumb_hole_fillet(); pinch_hole(); band_slot(); } } union() { for(x = [0 : containers_x - 1]) { translate([x * (case_width - wall_thickness), 0]) for(y = [0 : containers_y - 1]) { translate([0, y * (case_length - wall_thickness), 0]) flap_container(); } } } ================================================ FILE: 3d/tools/mounting_bracket.scad ================================================ /* Copyright 2021 Scott Bezek and the splitflap contributors 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. */ use<../splitflap.scad>; use<../shapes.scad>; include<../m4_dimensions.scad>; // Constants from splitflap.scad, using functions to extract thickness = get_thickness(); front_forward_offset = get_front_forward_offset(); enclosure_length_right = get_enclosure_length_right(); enclosure_height_lower = get_enclosure_height_lower(); enclosure_wall_to_wall_width = get_enclosure_wall_to_wall_width(); enclosure_vertical_inset = get_enclosure_vertical_inset(); captive_nut_inset = get_captive_nut_inset(); mounting_hole_inset = get_mounting_hole_inset(); eps = 0.01; module position_mounting_bracket() { translate([thickness, -enclosure_length_right + front_forward_offset, -enclosure_height_lower]) { children(); } } function mounting_bracket_width(side_clearance) = enclosure_wall_to_wall_width - 2 * thickness - 2 * side_clearance; function mounting_bracket_length(front_clearance) = enclosure_length_right - front_clearance; function mounting_bracket_height(height_clearance) = enclosure_vertical_inset - height_clearance; module mounting_bracket_2d(hole_diameter, clearance) { function unpack(val, pos) = (val[pos] == undef) ? 0 : val[pos]; // use vector if possible, 0 otherwise side_clearance = unpack(clearance, 0); // X clearance between the mount and the sides of the enclosure (each side) front_clearance = unpack(clearance, 1); // Y clearance between the mount and the front of the enclosure difference() { // base geometry translate([side_clearance, 0, 0]) square([mounting_bracket_width(side_clearance), mounting_bracket_length(front_clearance)]); // mounting hole translate([(enclosure_wall_to_wall_width - 2 * thickness)/2, mounting_hole_inset]) { circle(r=hole_diameter/2, $fn=30); } } } module mounting_bracket_base(hole_diameter=m4_hole_diameter, clearance=[0.1, 0.1, 0.2]) { module bolt_negative() { cutout_negative_scale = [1.2, 1.2, 1]; // scale factors for the increased sizes bolt_negative_length = get_captive_nut_bolt_length(); // length of the bolt cutout nut_negative_excess_thickness = 1; // extra thickness around the nut negative union() { scale(cutout_negative_scale) { // bolt negative standard_m4_bolt(bolt_length=bolt_negative_length); // nut negative translate([0, 0, captive_nut_inset - nut_negative_excess_thickness/2]) // note that we're using projection and linear extrusion here so // that we can center the extra thickness on both sides of the nut, // rather than putting it all just on one side as with 'scale()' linear_extrude(height=m4_nut_length + nut_negative_excess_thickness) projection() standard_m4_nut(hole=false); } } } function unpack(val, pos) = (val[pos] == undef) ? 0 : val[pos]; // use vector if possible, 0 otherwise height_clearance = unpack(clearance, 2); // Z clearance between the mount and the 'bottom' piece of the enclosure difference() { // base geometry, 3D linear_extrude(height=enclosure_vertical_inset - height_clearance, convexity=10) mounting_bracket_2d(hole_diameter, clearance); bolt_y_offset = enclosure_length_right/2; bolt_z_offset = enclosure_vertical_inset + thickness/2; // left side bolt translate([-thickness + enclosure_wall_to_wall_width, bolt_y_offset, bolt_z_offset]) rotate([180, 90, 0]) bolt_negative(); // right side bolt translate([-thickness, bolt_y_offset, bolt_z_offset]) rotate([0, 90, 0]) bolt_negative(); // front bolt translate([enclosure_wall_to_wall_width/2 - thickness, enclosure_length_right + thickness, bolt_z_offset]) { rotate([0, 90, -90]) bolt_negative(); } } } module mounting_bracket_t_slot(hole_diameter=m4_hole_diameter, slot_width=6, slot_depth=5, nut_length=12.5, clearance=[0.1, 0.1, 0.2]) { function unpack(val, pos) = (val[pos] == undef) ? 0 : val[pos]; // use vector if possible, 0 otherwise side_clearance = unpack(clearance, 0); // X clearance between the mount and the sides of the enclosure (each side) boss_width = mounting_bracket_width(side_clearance) - 2; // arbitrary, giving it some breathing room fillet_radius = slot_width - 1; union() { // 3D base geometry mounting_bracket_base(hole_diameter, clearance); difference() { // t-slot boss mirror([0, 0, 1]) difference() { linear_extrude(height=slot_depth) difference() { // base geometry translate([(enclosure_wall_to_wall_width - 2 * thickness)/2, mounting_hole_inset]) rounded_square([boss_width, slot_width], center=true, r=fillet_radius, $fn=60); // t-nut subtraction translate([(enclosure_wall_to_wall_width - 2 * thickness)/2, mounting_hole_inset]) square([nut_length, slot_width + eps], center=true); } } // rounded fillet translate([(enclosure_wall_to_wall_width - 2 * thickness)/2, mounting_hole_inset]) translate([0, 0, -slot_depth]) mirror([0, 0, 1]) square_fillet_3d([boss_width, slot_width], r=fillet_radius/2, r_corner=fillet_radius, center=true, $fn=60); } } } module mounting_bracket_screw_holes(hole_diameter=m4_hole_diameter, screw_diameter=m4_hole_diameter, num_screws=2, screw_clearance=4, screw_inset=8, csk=9, csk_angle=82, r=2.5, clearance=[0.1, 0.1, 0.2]) { function unpack(val, pos) = (val[pos] == undef) ? 0 : val[pos]; // use vector if possible, 0 otherwise side_clearance = unpack(clearance, 0); // X clearance between the mount and the sides of the enclosure (each side) height_clearance = unpack(clearance, 2); // Z clearance between the mount and the 'bottom' piece of the enclosure width = mounting_bracket_width(side_clearance); // width of the mount height = mounting_bracket_height(height_clearance) + thickness + height_clearance; // height of the screw area on the mount screw_area_radius = r; // radius for the fillet on the screw area extension screw_area_depth = screw_diameter + 2*screw_clearance + screw_area_radius; // Y distance of the screw area extension screw_left_inset = max(screw_inset, screw_clearance) + screw_diameter/2; // inset from edge of the mount to the edge of the hole screw_area_width = (width - 2*screw_left_inset); // area for screws to be placed in (accounting for diameter and inset) screw_spacing = (num_screws > 1) ? screw_area_width / (num_screws - 1) : screw_area_width/2; // spacing between screws, on center module screw_hole() { union() { // holes linear_extrude(height=height + 2*eps) circle(r=screw_diameter/2, $fn=60); // countersinks if(csk > 0) { translate([0, 0, height + 2*eps]) rotate([0, 180, 0]) cone(angle=csk_angle, base=csk, $fn=60); } } } union() { // 3D base geometry mounting_bracket_base(hole_diameter, clearance); // screw area boss translate([0, -screw_area_depth, 0]) { difference() { // boss geometry linear_extrude(height=height) square([width, screw_area_depth]); // rounded edge if(screw_area_radius > 0) { translate([-eps, 0, height]) rotate([0, 90, 0]) linear_extrude(height=width + 2*eps) fillet_tool(r=screw_area_radius, $fn=60); } // screw holes translate([screw_left_inset, screw_area_depth/2 + screw_area_radius/2, -eps]) { if(num_screws == 1) { translate([screw_spacing, 0, 0]) screw_hole(); } else if(num_screws > 1) { for ( i = [0 : num_screws - 1] ) { translate([screw_spacing * i, 0, 0]) screw_hole(); } } } } } } } // Examples: mounting_bracket_t_slot(); translate([80, 0]) { mounting_bracket_screw_holes(); } ================================================ FILE: 3d/tools/punch_jig.scad ================================================ /* Copyright 2018 Scott Bezek and the splitflap contributors 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. */ include<../flap_dimensions.scad>; print_tolerance = 0.1; jig_thickness = 2; clamp_inset = 0.4; punch_width = 26; punch_lower_height = 7.7; punch_gap_height = 2.5; slot_inset_depth = 9.3; slot_depth = 3; slot_width = 15; eps = 0.1; jig_length = flap_width + slot_inset_depth; flap_void_width = flap_width + slot_depth + print_tolerance*2 + eps; flap_void_height = jig_thickness + print_tolerance + flap_height - (punch_width - slot_width)/2 + flap_pin_width + print_tolerance + eps; flap_corner_relief = 0.05; // as multiplier of flap void union() { linear_extrude(height=punch_gap_height - print_tolerance*2) { difference() { square([jig_length, jig_thickness*2 + print_tolerance*2 + flap_height]); translate([slot_inset_depth - print_tolerance*2, jig_thickness + print_tolerance + (punch_width - slot_width)/2 - flap_pin_width - print_tolerance]) { union() { square([flap_void_width, flap_void_height]); // create relief for flap corner translate([-1,-1]) { square([flap_void_width*flap_corner_relief, flap_void_width*flap_corner_relief]); } } } } } // create support for right side of punch translate([0, 0, punch_gap_height - print_tolerance*2]) { linear_extrude(height=punch_lower_height, scale=[1, (jig_thickness + clamp_inset)/jig_thickness]) { square([jig_length, jig_thickness]); } } // create support for left side of punch translate([0, jig_thickness*2 + print_tolerance*2 + punch_width, punch_gap_height - print_tolerance*2]) { linear_extrude(height=punch_lower_height, scale=[1, (jig_thickness + clamp_inset)/jig_thickness]) { translate([0, -jig_thickness]) { square([slot_inset_depth - print_tolerance*2, jig_thickness]); } } } } %translate([slot_inset_depth, jig_thickness + print_tolerance + (punch_width - slot_width)/2, -8]) { cube([slot_depth, slot_width, 16]); } ================================================ FILE: 3d/tools/scoring_jig.scad ================================================ /* Copyright 2020 Scott Bezek and the splitflap contributors 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. */ include<../flap_dimensions.scad> print_tolerance = 0.1; eps = 0.1; jig_thickness = 2.0; // Vertical thickness of the jig base. jig_border = 8.0; // horizontal extent of the jig outside the flap size. flap_slot_depth = 2 * flap_thickness; // depth of the recess the flap sits in. cutting_slot_width = 2.0; // Relief in the border for the blade to start and stop in. jig_width = jig_border*2 + print_tolerance * 2 + flap_width; ruler_width = 24.6; ruler_depth = 1.6; ruler_backstop_height = ruler_depth * 2; difference() { union() { // Main body of the jig linear_extrude(height=jig_thickness + flap_slot_depth) { square([jig_width,jig_border*2 + print_tolerance + ruler_width + flap_height]); } // Backstop for ruler/cutting guide linear_extrude(height=jig_thickness + flap_slot_depth + ruler_backstop_height) { square(size=[jig_border*2 + print_tolerance * 2 + flap_width, jig_border]); } } union() { translate([jig_border - print_tolerance,-eps,jig_thickness]) { // Main area for card to sit into linear_extrude(height=flap_slot_depth + ruler_backstop_height + eps) { square([flap_width + 2 * print_tolerance, flap_height + print_tolerance + ruler_width + jig_border + eps]); } } translate([-eps ,jig_border + ruler_width, jig_thickness]) { // remove material from the left side so only the top and right sides are braced linear_extrude(height=flap_slot_depth + eps) { square([jig_border + print_tolerance + eps, flap_height + print_tolerance + jig_border + eps]); } } translate([-eps, jig_border + ruler_width - cutting_slot_width / 2, jig_thickness]) { // Relieve a slot for the blade to start and finish in linear_extrude(height=flap_slot_depth + eps) { square([jig_width + 2*eps,cutting_slot_width]); } } } } ================================================ FILE: LICENSE.txt ================================================ splitflap - Copyright 2015-2021 Scott Bezek and the splitflap contributors 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. ---- Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "{}" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright {yyyy} {name of copyright owner} 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. ================================================ FILE: README.md ================================================ # Split-Flap Display This is a DIY ESP32-based [split-flap display](https://en.wikipedia.org/wiki/Split-flap_display), optimized for easy assembly at home in small quantities but able to be scaled up to large affordable displays. ![animated rendering](https://s3.amazonaws.com/splitflap-artifacts/master/3d/3d_animation.gif) [![Build Status](https://github.com/scottbez1/splitflap/actions/workflows/3d.yml/badge.svg?branch=master)](https://github.com/scottbez1/splitflap/actions/workflows/3d.yml?query=branch%3Amaster) [![Build Status](https://github.com/scottbez1/splitflap/actions/workflows/electronics.yml/badge.svg?branch=master)](https://github.com/scottbez1/splitflap/actions/workflows/electronics.yml?query=branch%3Amaster) [![Build Status](https://github.com/scottbez1/splitflap/actions/workflows/pio.yml/badge.svg?branch=master)](https://github.com/scottbez1/splitflap/actions/workflows/pio.yml?query=branch%3Amaster) The [splitflap community Discord server](https://discord.com/invite/wgehm3PcrC) is the best place to keep up with the latest changes or ask questions about the project! Want to help support development or just say "thanks"? Consider a one-time or monthly sponsorship: | [:heart: Sponsor scottbez1 on GitHub](https://github.com/sponsors/scottbez1) | |---| **Using this project in a commercial setting or for paid client work?** Go right ahead - it's open source (just make sure to follow the terms of the Apache License)! I would, however, ask that you consider [sponsoring the project](https://github.com/sponsors/scottbez1). I've been developing and maintaining this project in my free time for over 10 years, and I'd love to continue working on it. Sponsorships allow me to pay for prototypes and development tools that make this project possible. Unlike pure software projects, every iteration has real hardware costs; sponsorships allow me to keep iterating and improving the project faster. Thank you! # Current Status [You can download the **latest stable releases** of the hardware designs from the official 'releases' page.](https://github.com/scottbez1/splitflap/releases) Releases have been tested and used to produce working units, but as this is a continuously evolving open-source project, there may always be minor issues and/or incomplete documentation from time to time. Here's a video of a large 108-module display powered by 18 Chainlink Driver boards and a Chainlink Base: [![Video: animations on 108-module display](https://raw.githubusercontent.com/wiki/scottbez1/splitflap/images/animationsThumb.gif)](https://youtu.be/g9EPabcxBsM) ## Stable v2 Mechanical Release As of 2025-01-19, the v2 refresh of the mechanical and sensor design is considered stable and recommended for new builds. **Here's what's new in v2:** - **52 flaps per module** for more character/symbol options - **New printed flap design ("Epilogue")** with 52 flaps per set (see animation above), including several color-block flaps - **Updated enclosure** and mechanical parts (laser-cut) to accomodate 52 flaps - Motor wires now exit downward for less awkward wiring! - **New sensor PCB** that's easier to assemble and includes an LED for checking the magnet status - **Software-configurable calibration** rather than mechanical sensor adjustment **But many things are staying the same for easy upgrades/compatibility:** - No change to flap dimensions! - No changes to Chainlink Driver, Chainlink Buddy boards, or system architecture! - 40-flap modules are still an officially supported option! - Open source, as always! - v0 parts (sensor kits) will continue to be stocked at Bezek Labs through mid-2025; don't worry if you haven't finished your build yet, the old sensor kits aren't going away for a little while! I'd love to hear your thoughts and questions about this project, and happy to incorporate any feedback you might have into these designs! Please feel free (and encouraged) to [open GitHub issues](https://github.com/scottbez1/splitflap/issues/new), email me directly, reach out [on Bluesky](https://bsky.app/profile/scottbez1.bsky.social), and [get involved](https://github.com/scottbez1/splitflap/pulls) in the open source development and let's keep chatting and building together! # Build Your Own If you have any questions, please don't hesitate to ask in the [community Discord server](https://discord.gg/Hxnftc8PyW)! * [**Documentation Index**](/docs/DocumentationIndex.md) * [**Ordering guide (the "easy" route) v2**](/docs/v2/OrderingEasy.md) * [**Comprehensive ordering guide**](/docs/v2/OrderingComplete.md) * [**Chainlink Driver Electronics User Guide**](/docs/ElectronicsGuide.md) * [**Assembly instructions v2**](/docs/v2/Assembly.md) * [**Latest stable releases**](https://github.com/scottbez1/splitflap/releases) # Table of Contents - [Design Overview](#design-overview) - [Mechanical](#mechanical) - [Combined front panel (script)](#combined-front-panel-script) - [Flap font/sticker generator (script)](#flap-fontsticker-generator-script) - [Electronics](#electronics) - [Sensor PCBs](#sensor-pcbs-1-per-module) - [Chainlink Driver](#chainlink-driver-1-per-6-modules) - [Chainlink Buddy \[T-Display\]](#chainlink-buddy-t-display-1-for-entire-display) - [Advanced items](#advanced-items) - [Chainlink Buddy \[Breadboard\]](#chainlink-buddy-breadboard-1-for-entire-display-alternative-to-t-display) - [Chainlink Base](#chainlink-base-1-for-entire-display-large-displays) - [Older designs](#older-designs) - [Classic controller](#classic-controller-electronics-deprecated) + [Miscellaneous Tools](#miscellaneous-tools) - [3D Printed Tools](#3d-printed-tools) - [Chainlink Driver Tester](#chainlink-driver-tester) * [Code](#code) + [Firmware](#firmware) + [Computer Control Software](#computer-control-software) - [Contributing/Modifying](#contributingmodifying) * [3D Design](#3d-design) * [Electronics Design](#electronics-design) # Design Overview ## Mechanical The mechanical/structural components are made from laser-cut 3mm MDF or acrylic, and held together with M4 bolts and nuts. The design is parametric and built using OpenSCAD. See below for more info on rendering/modifying the design. You can view an interactive 3d model of the design [here](https://scottbez1.github.io/splitflap/embed.html?branch=master). The v2 mechanical design officially supports variants with 52 flaps (perfect for use with the new ["Epilogue" printed flaps](https://bezeklabs.etsy.com/listing/1685633114/)) and 40 flaps. But you can always modify the design to customize it further. ### v2 (52-flap module option - recommended) ![2d laser cut rendering](https://s3.amazonaws.com/splitflap-artifacts/master/3d/3d_laser_raster-52.png) Instructions: [v2 assembly guide](/docs/v2/Assembly.md) Module dimensions: Latest auto-generated (untested!) artifacts:warning:: * For Ponoko 3mm MDF ([svg](https://s3.amazonaws.com/splitflap-artifacts/master/3d/3d_laser_vector-52-ponoko-3mm-mdf_1x.svg)) * For Ponoko 3mm acrylic ([svg](https://s3.amazonaws.com/splitflap-artifacts/master/3d/3d_laser_vector-52-ponoko-3mm-acrylic_1x.svg)) * For generic material (0.18mm kerf correction) ([svg](https://s3.amazonaws.com/splitflap-artifacts/master/3d/3d_laser_vector-52.svg)) * For Elecrow 3mm Wood ([zipped pdf](https://s3.amazonaws.com/splitflap-artifacts/master/3d/3d_laser_vector-52-elecrow-3mm-wood_1x.zip)) * For Elecrow 3mm Acrylic ([zipped pdf](https://s3.amazonaws.com/splitflap-artifacts/master/3d/3d_laser_vector-52-elecrow-3mm-acrylic_1x.zip)) :warning:For tested/stable/recommended artifacts, always use the [latest release](https://github.com/scottbez1/splitflap/releases) instead, as the links on this page will change over time. ### v2 (40-flap module option) ![2d laser cut rendering](https://s3.amazonaws.com/splitflap-artifacts/master/3d/3d_laser_raster-40.png) Instructions: [v2 assembly guide](/docs/v2/Assembly.md) Module dimensions: Latest auto-generated (untested!) artifacts:warning:: * For Ponoko 3mm MDF ([svg](https://s3.amazonaws.com/splitflap-artifacts/master/3d/3d_laser_vector-40-ponoko-3mm-mdf_1x.svg)) * For Ponoko 3mm acrylic ([svg](https://s3.amazonaws.com/splitflap-artifacts/master/3d/3d_laser_vector-40-ponoko-3mm-acrylic_1x.svg)) * For generic material (0.18mm kerf correction) ([svg](https://s3.amazonaws.com/splitflap-artifacts/master/3d/3d_laser_vector-52.svg)) * For Elecrow 3mm Wood ([zipped pdf](https://s3.amazonaws.com/splitflap-artifacts/master/3d/3d_laser_vector-40-elecrow-3mm-wood_1x.zip)) * For Elecrow 3mm Acrylic ([zipped pdf](https://s3.amazonaws.com/splitflap-artifacts/master/3d/3d_laser_vector-40-elecrow-3mm-acrylic_1x.zip)) :warning:For tested/stable/recommended artifacts, always use the [latest release](https://github.com/scottbez1/splitflap/releases) instead, as the links on this page will change over time. ### Combined front panel (script) By default, the design will have a separate laser-cut faceplate for each individual module. For larger displays you may want to combine front panels into a single piece, and the repo has a script to help with this. You can modify: * Number of rows and columns * Horizontal and vertical spacing/separation of modules * Overall outer width and height of the panel There are a lot of options; see the `--help` for explanations. #### Example 1 - Laser cut 6x1 ``` python3 3d/scripts/generate_combined_front_panel.py \ --kerf-preset elecrow-3mm-acrylic \ --num-flaps 52 \ --cols 6 \ --rows 1 \ --spacing-x 0 \ --spacing-y 0 \ --frame-margin-x 0 \ --frame-margin-y 0 \ --center-mode module ``` #### Example 2 - CNC router 12x2, with frame margin For CNC cutting, the script supports rendering a vector file optimized for thicker material (e.g. 6mm MDF) where only the bolt-holes will be through-cut. In this mode, the slots for the top/bottom enclosure pieces can be cut as ~4mm pockets so they aren't visible from the front face. The script automatically generates dog-bone shapes for these pocket cuts. This example also demonstrates use of the --frame-margin-x and --frame-margin-y options to add an additional margin of 20mm horizontally and 4mm vertically to the front panel dimensions. ``` python3 3d/scripts/generate_combined_front_panel.py \ --tool-diameter 3.175 \ --num-flaps 52 \ --cols 12 \ --rows 2 \ --spacing-x 0 \ --spacing-y 0 \ --frame-margin-x 20 \ --frame-margin-y 4 \ --center-mode module ``` ### Flap font/sticker generator (script) If you'd like to print your own flaps, or cut custom vinyl letter stickers, the project includes a script (`generate_fonts.py`) to generate vector design files, which is extremely configurable: * Font for text * This is further customizable in `flap_fonts.scad` -- this is where font parameters are defined like the overall font scale, position offsets, and even per-character scale and position overrides in case you need to tweak particularly problematic letters (e.g. a really wide "W" or an "@" with too thin of a stroke). * Character-set - which letters/numbers/symbols/colors are included and in what order * Bleed - extends rendering past the borders of the flaps to compensate for slight misalignment of printing and cutting operations * Keepout areas - option to highlight keepout violations for manual review, automatically clip them, or ignore them * Rendering options: * Single-sided - useful for previewing how all letters will look on flaps * Front/back - for batch duplex printing, generate separate front-side and back-side files (e.g. sign shop printing on a flat sheet of PVC) * Side-by-side - for individual flap printing, each flap's front design is laid out side-by-side with its back design There are a lot of options; see the `--help` for explanations. #### Example 1 - Epilogue font, rendered in front+back pairs, default character set, 1mm bleed (for printing) ``` python3 3d/scripts/generate_fonts.py \ --mode side-by-side \ --font Epilogue \ --columns 4 \ --bleed 1 \ --fill ``` ## Electronics > [!NOTE] > For small displays (up to 3 modules), you can skip the custom controller boards and use off-the-shelf ULN2003A driver modules plugged into an Arduino Uno. This is [partially documented in the wiki](https://github.com/scottbez1/splitflap/wiki/Electronics#basic-prototyping-alternative-electronics-approach) > but may require some additional tinkering to get it to work. _Help wanted: if you'd like to help improve these instructions, > please reach out in the Discord server, thanks!_ The "Chainlink" electronics system is designed to support long chains of driver boards to control medium/large displays (up to 100+ split-flap modules). It's also designed to be easy and cheap to order pre-assembled or build yourself, especially in higher quantities, due to its simple BOM and surface-mount components. To build a display, you'll need 3 different electronics: * One **Sensor PCB** for every split-flap module * One **Chainlink Driver** board for every 6 split-flap modules. This is what interfaces with the motors and sensors of each module. Chainlink Driver boards can be chained together to construct a large display. * An ESP32 microcontroller board. There are a few options: * For small/medium displays, one of the **Chainlink Buddy** boards are recommended * **Chainlink Buddy [T-Display]** holds a Lilygo T-Display ESP32 module which includes a built-in LCD and 2 buttons * **Chainlink Buddy [Breadboard]** makes it easy to connect a Chainlink Driver to a breadboard for prototyping, though you can also easily connect a Chainlink Driver to a breadboard with a few dupont wires. * For large displays, the **Chainlink Base** provides a number of advanced features: central power management/distribution and fault monitoring, UART and RS-485 connections, configuration switches, and status LEDs. ### Sensor PCBs (1 per module) Each module needs a hall-effect sensor for start-up calibration and fault monitoring. #### Sensors v2 New sensors for the v2 laser-cut hardware - these use surface mount components and are optimized for PCB assembly at JLCPCB. These new sensors are not compatible with v0.7 and older laser-cut hardware. Packs of 6 sensors are [available mostly-assembled in the Bezek Labs store](https://bezeklabs.etsy.com/listing/1696745674), and come with the right-angle pin headers and magnets you'll need. Purchases support continued development of this project. Latest auto-generated (untested!) artifacts:warning:: * Schematic [pdf](https://s3.amazonaws.com/splitflap-artifacts/master/electronics-v2/sensor_smd-schematic.pdf) * Interactive BOM (for manual assembly) [interactive](https://s3.amazonaws.com/splitflap-artifacts/master/electronics-v2/sensor_smd-ibom.html) * Fabrication files (single) * NOTE: PCBs must be 0.8mm! (rather than the more typical 1.6mm thickness) * PCB gerbers [zip](https://s3.amazonaws.com/splitflap-artifacts/master/electronics-v2/sensor_smd-jlc/gerbers.zip) * PCB BOM (for JLCPCB assembly) [csv](https://s3.amazonaws.com/splitflap-artifacts/master/electronics-v2/sensor_smd-jlc/bom.csv) * PCB CPL (for JLCPCB assembly) [csv](https://s3.amazonaws.com/splitflap-artifacts/master/electronics-v2/sensor_smd-jlc/pos.csv) * Fabrication files (panelized) * NOTE: PCBs must be 0.8mm! (rather than the more typical 1.6mm thickness) * PCB gerbers [zip](https://s3.amazonaws.com/splitflap-artifacts/master/electronics-v2/sensor_smd-panelized-jlc/gerbers.zip) * PCB BOM (for JLCPCB assembly) [csv](https://s3.amazonaws.com/splitflap-artifacts/master/electronics-v2/sensor_smd-panelized-jlc/bom.csv) * PCB CPL (for JLCPCB assembly) [csv](https://s3.amazonaws.com/splitflap-artifacts/master/electronics-v2/sensor_smd-panelized-jlc/pos.csv) * Purchase sensor kits in the US: [Bezek Labs](https://bezeklabs.etsy.com/listing/1696745674) :warning:For tested/stable/recommended artifacts, always use the [latest release](https://github.com/scottbez1/splitflap/releases) instead, as the links on this page will change over time. ### Chainlink Driver (1 per 6 modules) Key features: * Controls 6 split-flap modules per board * Primarily SMD and all components (except the pin headers and motor connectors) are available in JLCPCB's parts library for easy SMD/THT assembly * Clock and latch lines are buffered on each board with a 74HC125 to support longer chains * 2 bits of loopback error checking per board (connecting 2 spare output bits on output shift registers to 2 spare inputs) allows the controller to validate data integrity up and down the whole chain * Module order goes from right-to-left since this is intended to be installed and accessed from *behind* the modules Chainlink Driver boards are [available mostly-assembled in the Bezek Labs store](https://bezeklabs.etsy.com/listing/1123280069/splitflap-chainlink-driver-v11), and come with the additional connectors and ribbon cables you'll need. Purchases support continued development of this project. More information on building and using Chainlink Drivers is available in the [Chainlink Driver User Guide](/docs/ElectronicsGuide.md). Or if you'd like to order these directly from a fab, this design is optimized for assembly at JLCPCB, and files are automatically generated for ordering *assembled* PCBs there. Or if you wish to assemble this board yourself instead of paying for assembly, you can view the [interactive BOM/placement tool](https://s3.amazonaws.com/splitflap-artifacts/master/electronics-chainlink/bom/chainlinkDriver-ibom.html) Depending on available stock at JLCPCB, you may need to manually modify the BOM file to use alternative components, or regenerate the files yourself using `export_jlcpcb.py` and specifying one or more `LCSC_ALT_*` field names to use a pre-selected alternative part number. See the schematic for available pre-selected alternatives (check the symbol's properties/fields). Latest auto-generated (untested!) artifacts:warning:: * Schematic [pdf](https://s3.amazonaws.com/splitflap-artifacts/master/electronics-chainlink/chainlinkDriver-schematic.pdf) * PCB overview [pdf](https://s3.amazonaws.com/splitflap-artifacts/master/electronics-chainlink/chainlinkDriver-pcb-packet.pdf) * PCB gerbers [zip](https://s3.amazonaws.com/splitflap-artifacts/master/electronics-chainlink/chainlinkDriver-jlc/gerbers.zip) * PCB bom (for JLCPCB assembly) [csv](https://s3.amazonaws.com/splitflap-artifacts/master/electronics-chainlink/chainlinkDriver-jlc/bom.csv) * PCB CPL (for JLCPCB assembly) [csv](https://s3.amazonaws.com/splitflap-artifacts/master/electronics-chainlink/chainlinkDriver-jlc/pos.csv) * PCB bom (for manual assembly) [interactive](https://s3.amazonaws.com/splitflap-artifacts/master/electronics-chainlink/bom/chainlinkDriver-ibom.html) :warning:For tested/stable/recommended artifacts, always use the [latest release](https://github.com/scottbez1/splitflap/releases) instead, as the links on this page will change over time. ### Chainlink Buddy \[T-Display\] (1 for entire display) The Chainlink Buddy \[T-Display\] is a convenient way to connect a T-Display ESP32 board (recommended microcontroller) to a chain of Chainlink Drivers. Key features: * TTGO T-Display ESP32 module as the controller, which includes USB-C, color IPS LCD display and buttons * Extra terminals for every pin of the T-Display allow you to connect any other peripherals to the ESP32 (the connection to the Chainlink Driver requires _only 4_ of the GPIOs) * Optional barrel jack makes it easy to use a "wall wart" AC adapter/power-supply (since the Chainlink Driver only has screw terminals for power) -- plug in a 12V supply and then run a wire from the onboard screw terminals to the Chainlink Driver's motor power screw terminals. * Optional 5V regulator allows for powering the ESP32 without a USB connection, using the 12V motor power supply Chainlink Buddy \[T-Display\] boards are [available in the Bezek Labs store](https://bezeklabs.etsy.com/listing/1109357786/splitflap-chainlink-buddy-t-display), and come with the additional connectors you'll need. Purchases support continued development of this project. Latest auto-generated (untested!) artifacts:warning:: * Schematic [pdf](https://s3.amazonaws.com/splitflap-artifacts/master/electronics-chainlink-buddy-t-display/chainlinkBuddyTDisplay-schematic.pdf) * PCB ([gerbers](https://s3.amazonaws.com/splitflap-artifacts/master/electronics-chainlink-buddy-t-display/chainlinkBuddyTDisplay-jlc/gerbers.zip) / [pdf](https://s3.amazonaws.com/splitflap-artifacts/master/electronics-chainlink-buddy-t-display/chainlinkBuddyTDisplay-pcb-packet.pdf)) * Panelized PCB ([gerbers](https://s3.amazonaws.com/splitflap-artifacts/master/electronics-chainlink-buddy-t-display/chainlinkBuddyTDisplay-panelized-jlc/gerbers.zip) / [pdf](https://s3.amazonaws.com/splitflap-artifacts/master/electronics-chainlink-buddy-t-display/chainlinkBuddyTDisplay-panelized-pcb-packet.pdf)) * PCB bom (for manual assembly) [interactive](https://s3.amazonaws.com/splitflap-artifacts/master/electronics-chainlink-buddy-t-display/bom/chainlinkBuddyTDisplay-ibom.html) :warning:For tested/stable/recommended artifacts, always use the [latest release](https://github.com/scottbez1/splitflap/releases) instead, as the links on this page will change over time. ### Advanced items #### Chainlink Buddy \[Breadboard\] (1 for entire display; alternative to T-Display) The Chainlink Buddy \[Breadboard\] makes it easy to connect a Chainlink Driver to a breadboard for prototyping. You could use 5 dupont wires and have a messy rats nest, or you could use a single ribbon cable and this slick breakout board. Chainlink Buddy \[Breadboard\] boards are [available in the Bezek Labs store](https://bezeklabs.etsy.com/listing/1123863267/splitflap-chainlink-buddy-breadboard), and come with the additional connectors you'll need. Purchases support continued development of this project. Latest auto-generated (untested!) artifacts:warning:: * Schematic [pdf](https://s3.amazonaws.com/splitflap-artifacts/master/electronics-chainlink-buddy-breadboard/chainlinkBuddyBreadboard-schematic.pdf) * PCB ([gerbers](https://s3.amazonaws.com/splitflap-artifacts/master/electronics-chainlink-buddy-breadboard/chainlinkBuddyBreadboard-jlc/gerbers.zip) / [pdf](https://s3.amazonaws.com/splitflap-artifacts/master/electronics-chainlink-buddy-breadboard/chainlinkBuddyBreadboard-pcb-packet.pdf)) * Panelized PCB ([gerbers](https://s3.amazonaws.com/splitflap-artifacts/master/electronics-chainlink-buddy-breadboard/chainlinkBuddyBreadboard-panelized-jlc/gerbers.zip) / [pdf](https://s3.amazonaws.com/splitflap-artifacts/master/electronics-chainlink-buddy-breadboard/chainlinkBuddyBreadboard-panelized-pcb-packet.pdf)) * PCB bom (for manual assembly) [interactive](https://s3.amazonaws.com/splitflap-artifacts/master/electronics-chainlink-buddy-breadboard/bom/chainlinkBuddyBreadboard-ibom.html) :warning:For tested/stable/recommended artifacts, always use the [latest release](https://github.com/scottbez1/splitflap/releases) instead, as the links on this page will change over time. #### Chainlink Base (1 for entire display; large displays) For larger displays, you should take additional care to make the hardware more robust to potential faults. The Chainlink Base is an experimental (but unsupported) controller design that adds some additional functionality. This has been tested and appears to work, but is not recommended for general use. The Chainlink Base PCB is an optional alternative to a Chainlink Buddy, designed for particularly large displays. It hosts the ESP32 and adds additional connectivity options (terminals for UART and RS485 serial) and power distribution (independently-monitored power channels for multiple "zones" of Driver boards). Key features: * TTGO T-Display ESP32 module as the controller, which includes USB-C, color IPS LCD display and buttons * Optional master relay output for 12V PSU control (5V relay, up to ~500mA coil current) * Future firmware will power on the 12V PSU after a startup self-test, and power off PSU in case of any faults * 5 channels of independently monitored 12V switches for powering groups of Chainlink Driver boards (6-10A max per channel) * Depending on the motors you use, each channel may be able to power about 6 Chainlink Driver boards which is 36 splitflap modules * Each channel includes an automotive fuse holder for additional over-current protection * INA219 and shunt resistor provide high fidelity voltage and current monitoring * Firmware will power on each channel after a startup self-test, and power off the channel in case of any faults * 3.3V output for powering many Chainlink Driver boards * Flexible controller input power * USB power from the T-Display works by default, though external power is recommended for larger displays * Regulated 5V can be connected directly to the screw terminals, or * if you are using an always-on 12V PSU without a master relay, you can install a buck module and power the board from 12V using the 7-28V screw terminals Latest auto-generated (untested!) artifacts:warning:: * Schematic [pdf](https://s3.amazonaws.com/splitflap-artifacts/master/electronics-chainlink-base/chainlinkBase-schematic.pdf) * PCB overview [pdf](https://s3.amazonaws.com/splitflap-artifacts/master/electronics-chainlink-base/chainlinkBase-pcb-packet.pdf) * PCB gerbers [zip](https://s3.amazonaws.com/splitflap-artifacts/master/electronics-chainlink-base/chainlinkBase-jlc/gerbers.zip) * PCB bom (for manual assembly) [interactive](https://s3.amazonaws.com/splitflap-artifacts/master/electronics-chainlink-base/bom/chainlinkBase-ibom.html) :warning:There are currently no stable releases of this board, and none are planned. Some past variants of this board have been used, to some success, but it is not considered an officially supported design ## Older designs ### Classic Controller Electronics (deprecated) The Classic driver board is deprecated and unsupported. The Classic controller board was designed to plug into an Arduino like a shield, and could control 4 stepper motors. Up to 3 driver boards could be chained together, for up to 12 modules controlled by a single Arduino. The driver uses 2 MIC5842 low-side shift-register drivers, with built-in transient-suppression diodes, to control the motors, and a 74HC165 shift register to read from 4 hall-effect magnetic home position sensors. There are optional WS2812B RGB LEDs which can be used to indicate the status of each of the 4 channels. ### Miscellaneous Tools #### 3D Printed Tools The project also includes a number of optional 3D printed designs to make assembly easier. These include: * [a flap scoring jig](3d/tools/scoring_jig.scad) for precisely marking the cut point when splitting CR80 cards * [a flap punch jig](3d/tools/punch_jig.scad) for aligning the punch when making the pin cutouts on either side of a flap * [a flap container](3d/tools/flap_container.scad) for storing and organizing stacks of completed flaps All of these designs are parametric and customizable within OpenSCAD. To print them, open up the relevant file in OpenSCAD and use `File -> Export -> Export as STL` to render the design as an STL file for your slicer. #### Chainlink Driver Tester This is not likely to be useful unless you're planning to manufacture dozens to hundreds of Chainlink Driver boards, but the Chainlink Driver Tester is a complete testbed for Chainlink Driver boards as they come assembled by the PCBA fabricator. This is currently under very active development. Key features: * TTGO T-Display (ESP32) controller, screen, and buttons for controlling tests and reporting results * Pogo-pins for all connectors on the Chainlink Driver board-under-test (screw terminals, sensor pin headers, and motor connectors) * 12V switch to supply motor power to the board-under-test, with automotive fuse and INA219 voltage/current monitoring (based on the Chainlink Base channel switch design) * Separate 3.3V supply for the board-under-test, protected with a polyfuse, should avoid browning out the Tester's MCU in case of 3.3V short-circuits * Motor and sensor connections are broken out from the pogo-pins for a full closed-loop hardware test * Screw terminals to chain another Chainlink Driver (not under test) to validate that chained outputs work on the board-under-test * MCP23017 GPIO expander with 8 GPIO pins exposed via headers for future expansion inputs * Large cutout allows a barcode scanner or camera to be aimed at the bottom of the board-under-test for tracking serial numbers. * Buzzer option for audible pass/fail feedback Latest auto-generated (untested!) artifacts:warning:: * Schematic [pdf](https://s3.amazonaws.com/splitflap-artifacts/master/electronics-chainlink-tester/chainlinkDriverTester-schematic.pdf) * PCB overview [pdf](https://s3.amazonaws.com/splitflap-artifacts/master/electronics-chainlink-tester/chainlinkDriverTester-pcb-packet.pdf) * PCB gerbers [zip](https://s3.amazonaws.com/splitflap-artifacts/master/electronics-chainlink-tester/chainlinkDriverTester-jlc/gerbers.zip) * PCB bom (for manual assembly) [interactive](https://s3.amazonaws.com/splitflap-artifacts/master/electronics-chainlink-tester/bom/chainlinkDriverTester-ibom.html) :warning:There are currently no stable releases of this board, and there may never be as it is a niche production tool, not an end product. If you need this tool, you are likely actively involved in development and should understand the revision history and current status of development enough to make an informed decision about which revision(s) to use. ## Code ### Firmware The driver firmware is written using PlatformIO with the Arduino framework and is available at [`firmware/`](firmware/). The firmware implements a closed-loop controller that accepts letters as input over USB serial and drives the stepper motors using a precomputed acceleration ramp for smooth control. The firmware automatically calibrates the spool position at startup, using the hall-effect magnetic sensor, and will automatically recalibrate itself if it ever detects that the spool position has gotten out of sync. If a commanded rotation is expected to bring the spool past the "home" position, it will confirm that the sensor is triggered neither too early nor too late; otherwise it will search for the "home" position to get in sync before continuing to the desired letter. ### Serial protocol In order for a computer to communicate with the splitflap, it appears as a USB serial device. However, usage of Arduino’s `Serial` is strictly forbidden, and instead a `logger` abstraction is provided for sending basic text debug logs. Other data is transferred in a structured way, described below. This allows flexibility in the format of data transferred over serial, and in fact the splitflap provides 2 different serial modes that serve different purposes. #### Plaintext mode By default, it starts in “plaintext” mode, which is developer-friendly and you’re probably familiar with if you’ve opened a serial monitor with the splitflap connected: ``` {"type":"init", "num_modules":6} ``` However, this isn’t great for programmatically configuring or receiving updates from the splitflap, so instead the firmware offers a programmatic interface using a binary protocol based on Google’s Protobuf standard. #### Protobuf (binary/programmatic) mode The protobuf-based binary serial mode is a compact and flexible way to transfer structured data from the host computer to the splitflap and vice-versa. ##### Benefits of protobuf protobuf provides several benefits over other encoding mechanisms like JSON: 1. Well-defined schema. If you’re curious about the format of data to expect or send, you just need to check the protobuf file 2. Code generation. Instead of hand-writing JSON parsers every time the data changes, protobuf provides code generation of the encoding and decoding logic, and data-structures. Splitflap uses nanopb to generate C structs based off the schema, and all the code for encoding/decoding that data from the binary format. 3. Relatively compact/efficient wire encoding. It’s not a primary goal in this project, but the binary wire encoding is generally fairly compact, due to omitting default/unspecified fields, using variable length encodings, etc. It’s certainly much more compact than JSON which uses strings to describe every field in every message. 4. Backwards/forwards compatibility. Not super relevant to this project, but many common schema changes are backwards and forwards compatible, meaning an older client or a newer client will be able to handle them gracefully. ##### Disadvantages of protobuf 1. Not human-readable. This makes it much harder to debug, as you need something that can interpret messages. Since they’re binary, viewing anything in a terminal directly will be fruitless. 2. Not self-describing. If you come across a JSON document, you can generally tell what it means because fields have string names/labels describing their contents. Protobuf has no such thing (it uses integer field numbers, which does make renaming fields easier) so you need to have a copy of the schema (.proto file - and you’d better hope it matches the data!) in order to understand an encoded message. This is why the splitflap defaults to plaintext mode to make basic validation/debugging easier. ##### How it works Protobuf messages are encoded to their binary wire format and a CRC32 checksum appended. Then that entire binary string is COBS encoded into a packet, and delimited/framed by 0 (NULL) bytes when sent over serial. This provides a basic packet-based interface with integrity checks (rather than the raw, stream-based interface of a serial connection). The splitflap automatically switches to binary protobuf mode when it receives a 0 byte. ### Computer Control Software The display can be controlled by a computer connected to the ESP32 over USB serial. If you've built a display and want to test it out, check out the web-based demo [here](https://scottbez1.github.io/splitflap) which will connect to your display using USB - no applications/installation necessary! The firmware supports a plaintext serial mode (enabled by default) for ease of testing, and a protobuf-based binary mode used by the software libraries for enhanced programmatic control and feedback. You can find example Typescript and Python libraries in the [`software/chainlink`](software/chainlink) folder. # Contributing/Modifying Looking to make some modifications or play around with the design on your local machine? Jump right in! Note that all of the scripts and automation are developed for Ubuntu. Mac OS support is planned, but not currently implemented (but feel free to open a PR if you want to help!). ## 3D Design The main design file is [`3d/splitflap.scad`](3d/splitflap.scad) You'll need a recent version of OpenSCAD (e.g. 2015-03), which may need to be installed through the PPA: `sudo add-apt-repository ppa:openscad/releases` In general, solid objects such as the enclosure sides or spool components are built from 2d primitives and then extruded to the appropriate thickness for 3d rendering, rather than using 3d primitives. This simplifies the design without losing expressiveness; the perpendicular laser cut beam doesn't allow for cuts that vary in the Z dimension anyway. Note that while the design is parameterized and many values may be tweaked, there is currently no error checking for invalid parameters or combinations of parameters. Please take care to validate the design if you change any parameters. For instance, while most of the design will adjust to a changed `num_modules` value, certain values may cause some elements to intersect with other elements or protrude beyond their expected dimensions. ### Rendering #### Laser-cut vector files The design can be rendered to 2d for laser cutting by running [`3d/scripts/generate_2d.py [--panelize ]`](3d/scripts/generate_2d.py), which outputs to `3d/build/laser_parts/combined.svg`. The optional `--panelize` argument allows for rendering a panel of modules in a single SVG, for bulk laser-cutting. Internally, the design uses a `projection_renderer` module ([`3d/projection_renderer.scad`](3d/projection_renderer.scad)), which takes a list of child elements to render, and depending on the `render_index` renders a single child at a time. It also _adds_ material to each shape to account for the kerf that will be cut away by the laser. The [`generate_2d.py`](3d/scripts/generate_2d.py) script interacts with the `projection_renderer` module by first using it to determine the number of subcomponents to render, then runs OpenSCAD to export each component to an SVG file. It does some post-processing on the SVG output (notably adds "mm" to the document dimensions), and then combines all components into the single `combined.svg` output. Once the `combined.svg` file is generated, you'll want to double-check there aren't any redundant cut lines that are shared by multiple adjacent pieces, to save time/cost when cutting. They should be detected automatically (and highlighted in red in the rendering above), but it doesn't hurt to double-check. In Inkscape, select the "Edit paths by nodes" tool and select an edge to delete - the endpoints should turn blue. Then click "Delete segment between two non-endpoint nodes", and repeat this for all other redundant cut lines. #### Animated gif The design can be rendered to a rotating 3d animated gif (seen above) by running [`3d/scripts/generate_gif.py`](3d/scripts/generate_gif.py), which outputs to `3d/build/animation/animation.gif` The `generate_gif.py` script runs multiple OpenSCAD instances in parallel to render the design from 360 degrees to individual png frames, which are then combined into the final gif animation. As part of building the animation, `generate_gif.py` renders the design with multiple configurations (opaque enclosure, see-through enclosure, no-enclosure and no flaps) by setting the `render_enclosure` and `render_flaps` variables. #### STL models/web viewer The design can be rendered to a series of STL files (one per color used in the model) in order to be displayed in an [interactive web-based 3d viewer](https://scottbez1.github.io/splitflap/). Similar to the `projection_renderer` used to render individual components for laser-cutting, the [ColoredStlExporter](3d/scripts/colored_stl_exporter.py) detects all the colors used in the model and renders them one-by-one to separate STL files, along with a manifest that maps each STL file to its RGB color. The STL files and manifest are loaded using three.js to display an interactive model on a web site using WebGL. See this blog post for more details on how the export and three.js renderer work: [OpenSCAD Rendering Tricks, Part 3: Web viewer](http://scottbezek.blogspot.com/2016/08/openscad-rendering-tricks-part-3-web.html). ## Electronics Design All of the electronics are developed using KiCad 5. Panelization is provided by [KiKit](https://github.com/yaqwsx/KiKit) and gerber/BOM generation is provided by [KiBot](https://github.com/INTI-CMNB/KiBot). ### Rendering The mechanical and electrical design renderings and links above are automatically updated on every commit with the latest rendering. See this blog post for more details on how that works: [Automated KiCad, OpenSCAD rendering using Travis CI](http://scottbezek.blogspot.com/2016/04/automated-kicad-openscad-rendering.html). The PCB layout can be rendered to an svg or png (seen above) by running [`electronics/scripts/generate_svg.py file.kicad_pcb`](electronics/scripts/generate_svg.py). This uses KiCad's [Python scripting API](https://docs.kicad-pcb.org/doxygen/md_Documentation_development_pcbnew-plugins.html) to render several layers to individual svg files, manipulates them to apply color and opacity settings, and then merges them to a single svg. For additional details, see this blog post: [Scripting KiCad Pcbnew exports](http://scottbezek.blogspot.com/2016/04/scripting-kicad-pcbnew-exports.html). For reviewing the design, a pdf packet with copper, silkscreen, and drill info can be produced by running [`electronics/scripts/generate_pdf.py file.kicad_pcb`](electronics/scripts/generate_pdf.py). Gerber files for fabrication can be exported by running [`electronics/scripts/generate_gerber.py file.kicad_pcb`](electronics/scripts/generate_gerber.py). This generates gerber files and an Excellon drill file with Seeed Studio's [naming conventions](http://support.seeedstudio.com/knowledgebase/articles/1176532-how-to-generate-the-gerber-manufacturing-files) and produces a `.zip` which can be sent for fabrication. EESchema isn't easily scriptable, so to export the schematic [`electronics/scripts/export_schematic.py`](electronics/scripts/export_schematic.py) starts an X Virtual Frame Buffer (Xvfb) and open the `eeschema` GUI within that virtual display, and then send a series of hardcoded key presses via `xdotool` to interact with the GUI and click through the dialogs. This is very fragile but seems to work ok for now. For additional details, see this blog post: [Using UI automation to export KiCad schematics](http://scottbezek.blogspot.com/2016/04/automated-kicad-schematic-export.html). # License I'd love to hear your thoughts and questions about this project, and happy to incorporate any feedback you might have into these designs! Please feel free (and encouraged) to [open GitHub issues](https://github.com/scottbez1/splitflap/issues/new), email me directly, reach out [on Twitter](https://twitter.com/scottbez1), and [get involved](https://github.com/scottbez1/splitflap/pulls) in the open source development and let's keep chatting and building together! This project is licensed under Apache v2 (see [LICENSE.txt](LICENSE.txt)). Copyright 2015-2025 Scott Bezek and the splitflap contributors 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. ================================================ FILE: __init__.py ================================================ ================================================ FILE: arduino/splitflap/MOVED.txt ================================================ As of 2024-10-06, the firmware code that used to live in this directory has been moved to the "firmware" directory at the root of the repo. In VS Code, you'll want to re-open this project by using "Open Folder" and selecting the entire "splitflap" repository folder. If you run into any issues, please reach out in the discord community (https://discord.com/invite/wgehm3PcrC) for help. ================================================ FILE: docs/DocumentationIndex.md ================================================ # Splitflap Documentation Index This is the documentation for the open-source splitflap display project: https://github.com/scottbez1/splitflap Questions or comments? Join the [community Discord server](https://discord.gg/wgehm3PcrC) to chat with other split-flap enthusiasts. # General * [Flaps Guide](Flaps.md) - overview of the flaps - the most repetitive (and sometimes tedious) part of this project: How to cut them yourself or purchase them pre-cut and pre-printed * [28BYJ-48 Motor Buying Guide](MotorGuide.md) — motor buying guide (finding good motors is a little tricky, so it has its own guide) * [Electronics User Guide](ElectronicsGuide.md) — Chainlink electronics setup guide # v2 ## Ordering * [v2 Easy Ordering Guide (US only)](v2/OrderingEasy.md) — simplified ordering overview if you’re in the US * [v2 Comprehensive/Advanced Ordering Guide](v2/OrderingComplete.md) — the FULL exhaustive ordering document, with lots of alternatives and options for every part ## Assembly * [v2 Assembly](v2/Assembly.md) — assembly overview for the newer v2 mechanical release # v0 ## Ordering * [v0 Easy Ordering Guide (US only)](v0/OrderingEasy.md) — simplified ordering overview if you’re in the US * [v0 Comprehensive/Advanced Ordering Guide](v0/OrderingComplete.md) — the FULL exhaustive ordering document, with lots of alternatives and options for every part ## Assembly * [v0 Assembly](v0/Assembly.md) — mechanical assembly overview for the stable 0.5/0.6/0.7 versions ================================================ FILE: docs/ElectronicsGuide.md ================================================ # Chainlink Driver Electronics User Guide [<< Back to Documentation Index](DocumentationIndex.md) # Intro If you’re just getting started and want to learn more about the Chainlink Driver, jump to the [bottom of this document](#what-is-the-chainlink-driver) which includes some more background and general info. Please let me know if you have any questions or suggestions on how to improve these instructions - feel free to open a pull request or joing the [community Discord server](https://discord.gg/wgehm3PcrC) Building a split-flap display? I would love to hear from you and see photos/videos of your project in progress or completed! This project has been a hobby of mine for a few years and the coolest part by far is hearing from other people making their own and seeing them in action. Feel free to shoot me an email at scott@bezeklabs.com 🙂 or, [join the Discord server](https://discord.gg/wgehm3PcrC), to share and discuss with the wider split-flap community! # 1. Gather the parts - Chainlink Driver PCB assembly (see [appendix](#appendix) for ordering info) - Connectors (all included with the Chainlink Driver boards I sell on Etsy) - 6x JST XH 5-pin - 6x 3-pin male headers - 2x 8-pin 2-row shrouded IDC connectors - Wires - 8-pin 1.27mm ribbon cable, and IDC connectors for each end (included with the Chainlink Driver boards I sell on Etsy) - 3.3v power wire - e.g. 22AWG solid hookup wire - 12v power/ground wires - 20AWG up to 14AWG depending on number of modules - 12V Power supply (see [appendix](#appendix) for more info) - ESP32 ![Chainlink Buddy [T-Display]](https://paper-attachments.dropbox.com/s_BBABC117AF455DD9F0525297940CD25AF9A358008ED7FF73463824486BCF5E62_1637360060741_DSC_5014_s.jpg) - The [TTGO T-Display](https://amzn.to/3kHwhMm) [affiliate links help support this project at no cost to you, or use a [non-affiliate link](https://www.amazon.com/LILYGO-T-Display-Arduino-Development-CH9102F/dp/B099MPFJ9M) if you’d prefer] is the recommended ESP32 board, which includes a 240x135 LCD that the splitflap firmware supports out of the box. (Also available on [aliexpress](https://www.aliexpress.com/item/33048962331.html), which may be cheaper) - An optional [Chainlink Buddy [T-Display]](https://bezeklabs.etsy.com/listing/1109357786/splitflap-chainlink-buddy-t-display) is also highly recommended for most users, which makes it easy and clean to connect a T-Display to the Chainlink Driver. - If you want to use an ESP32 module other than a T-Display, a [Chainlink Buddy [Breadboard]](https://bezeklabs.etsy.com/listing/1123863267/splitflap-chainlink-buddy-breadboard) may be helpful in lieu of the T-Display Buddy. See the [appendix](#appendix) for more info on using other ESP32 modules. # 2. Finish assembling the PCB - Insert and solder the connectors as shown. Note that both of the IDC connectors on the ends face the same way - notches facing left. ![](https://paper-attachments.dropbox.com/s_BBABC117AF455DD9F0525297940CD25AF9A358008ED7FF73463824486BCF5E62_1637363719721_chainlinkDrawing.png) - Insert the ribbon cable into a connector as shown, and *gently* clamp shut with a vise or pliers. Repeat with the other connector on the opposite end, making sure that both connectors face the **same** way - notches facing left. ![](https://paper-attachments.dropbox.com/s_BBABC117AF455DD9F0525297940CD25AF9A358008ED7FF73463824486BCF5E62_1637363943974_ChainlinkCableIDCAssembly.png) - Not recommended, but you can optionally install the strain relief on the connectors (included with Bezek Labs Chainlink Driver boards): fold the ribbon cable back over the connector and install the plastic piece to clamp it down until it clicks. You’ll sacrifice some cable length and end up with a bulkier/taller connector, so I don’t think it’s worthwhile, especially since your cables shouldn’t be moving around much anyway. # 3. Assemble the Chainlink Buddy - Solder the connectors into place (make sure the IDC connector notch faces the left, as indicated on the PCB) ## T-Display Buddy ![](https://paper-attachments.dropbox.com/s_BBABC117AF455DD9F0525297940CD25AF9A358008ED7FF73463824486BCF5E62_1637364807000_DSC_5003_s.jpg) ![](https://paper-attachments.dropbox.com/s_BBABC117AF455DD9F0525297940CD25AF9A358008ED7FF73463824486BCF5E62_1637364821133_DSC_5014_s.jpg) On the T-Display itself, you will solder the 2 rows of male headers (included in the box) to the T-Display, and then the whole module will plug into the matching female headers you soldered on the Buddy board. You may notice a few empty spaces in the lower left of the T-Display Buddy PCB labeled C1 and C2 along with 3 through-holes; don’t worry, those are optional components and not needed for a basic setup. See [Standalone T-Display operation](#8-optional-standalone-t-display-operation) for more info. ![](https://paper-attachments.dropbox.com/s_BBABC117AF455DD9F0525297940CD25AF9A358008ED7FF73463824486BCF5E62_1647556549613_PXL_20220317_223022886.jpg) Note: the T-Display often comes with a small Red/Black wiring harness with connector as well; it is unused with the Chainlink Buddy and can be discarded. ## Breadboard Buddy (alternative to T-Display Buddy) If you’d prefer to use a different ESP32 module, you can use the Breadboard Buddy PCB to easily adapt the IDC cable to a breadboard. ![](https://paper-attachments.dropbox.com/s_BBABC117AF455DD9F0525297940CD25AF9A358008ED7FF73463824486BCF5E62_1637364835081_DSC_5006.jpg) ![](https://paper-attachments.dropbox.com/s_BBABC117AF455DD9F0525297940CD25AF9A358008ED7FF73463824486BCF5E62_1637364842028_DSC_5009_s.jpg) # 4. Connect Chainlink Driver to Chainlink Buddy We’ll start by connecting and testing just the Chainlink Driver, without connecting a power supply or any modules’ motors or sensors. We’ll add those later, after confirming that the basic electronics work. ## T-Display - Connect the ribbon cable from the Chainlink Buddy’s **Output** to the Chainlink Driver’s **Input** - Connect a wire from the Chainlink Driver’s “Logic 3.3-5V” screw terminal to the “3.3V” screw terminal on the Chainlink Buddy - Connect a wire from the Chainlink Driver’s “GND” screw terminal to the “GND” screw terminal on the Chainlink Buddy - Connect a wire from the Chainlink Driver’s “Motor 5-12v” screw terminal to the “12V” screw terminal on the Chainlink Buddy - ⚠️ Never connect a battery to the T-Display’s battery connector (small white connector on the bottom of the TTGO T-Display module) when using the Chainlink Buddy! ![](https://paper-attachments.dropbox.com/s_BBABC117AF455DD9F0525297940CD25AF9A358008ED7FF73463824486BCF5E62_1637365064613_PXL_20211118_023418663.jpg) ## Breadboard (if you’re not using the T-Display Buddy) - Connect the ribbon cable from the Chainlink Buddy’s **Output** to the Chainlink Driver’s **Input** - Connect a wire from the Chainlink Driver’s “Logic 3.3-5V” screw terminal to a 3.3v supply on your breadboard - Connect a wire from the Chainlink Driver’s “GND” screw terminal to your breadboard’s ground rail - Connect the 5 pins to your ESP32. See the [appendix](#appendix) for more info. Default pin assignments are: - Clock: 33 - Motor Data: 32 - Sensor Data: 39 - Latch: 25 - GND: ground ![](https://paper-attachments.dropbox.com/s_BBABC117AF455DD9F0525297940CD25AF9A358008ED7FF73463824486BCF5E62_1637364110536_DSC_5010.jpg) # 5. Install firmware **Download and install** [**Microsoft Visual Studio Code**](https://code.visualstudio.com/) **Install the Platform IO extension** **Clone the repository** Choose “Clone Git Respository” from the VS Code welcome page and then paste the git repo URL: `https://github.com/scottbez1/splitflap.git` ![](https://paper-attachments.dropboxusercontent.com/s_BBABC117AF455DD9F0525297940CD25AF9A358008ED7FF73463824486BCF5E62_1728232383342_Screenshot+from+2024-10-06+09-29-20.png) ![](https://paper-attachments.dropboxusercontent.com/s_BBABC117AF455DD9F0525297940CD25AF9A358008ED7FF73463824486BCF5E62_1728232480075_image.png) When prompted, choose to open the cloned repository. You may need to choose to “Trust” the folder to allow the Platform IO extension to run. ![](https://paper-attachments.dropboxusercontent.com/s_BBABC117AF455DD9F0525297940CD25AF9A358008ED7FF73463824486BCF5E62_1728245389499_image.png) You’ll need to configure NUM_MODULES in platformio.ini to match the number of modules supported by the Chainlink Drivers you have connected. So for a single Chainlink Driver, set it to 6. [env:chainlink] extends=esp32base build_flags = ${esp32base.build_flags} -DCHAINLINK -DNUM_MODULES=6 - (If you’re *no*t **using a T-Display, see the [appendix](#appendix) for a few more changes you’ll need to make at this point) - Mac Users: you will likely need to install updated drivers for the CH9102 USB-serial adapter used on newer versions of the ESP32 T-Display: https://learn.adafruit.com/how-to-install-drivers-for-wch-usb-to-serial-chips-ch9102f-ch9102/mac-driver-installation To upload code to the ESP32 T-Display from VS Code, you’ll need to (see screenshot below): > 1) Open the Platform IO sidebar (click the alien icon on the left) > 2) Click the “env” button at the bottom of the window and then in the dropdown at the top of the screen… > 3) …select “env:chainlink” as the environment - this will set up code completion and syntax highlighting for the ESP32 > 4) in the Platform IO sidebar, expand the “General” section, and click `Upload and Monitor` ![](https://paper-attachments.dropboxusercontent.com/s_BBABC117AF455DD9F0525297940CD25AF9A358008ED7FF73463824486BCF5E62_1693886806926_image.png) - If you reset the ESP32, you should see the LEDs on the Chainlink Drivers blink quickly and a message in the serial monitor that loopbacks are ok. If you see a loopback error message, troubleshoot that before continuing. *NOTE*: Make sure to exit the terminal window before starting calibration. Otherwise, you might get an error as both should not be running at the same time. # 6. Connect modules and power ## Motors - Plug into the white connectors. Note that module connections are laid out from *right-to-left* since the Chainlink Driver PCB is intended to sit *behind* the modules, so the first module plugs into position “A” on the **right** side of the PCB ## Sensors ![](https://paper-attachments.dropbox.com/s_0012998176B94D187A680336F96A7737F168EF4FF12A85A15DE924A7E7D3E44B_1627605534995_Screenshot+from+2021-07-29+17-38-43.png) - Plug sensor cable into corresponding 3-pin header - Ground (black) should be on the left (toward the “Output” side), labeled “-” - Signal (usually white) should be on the right (toward the “Input” side), labeled “S” ## ## Power The ESP32 and 3.3v electronics on the Chainlink Drivers are typically powered by the USB connection to a computer. 12V power for the motors is supplied via a separate power supply. > Note: avoid leaving 12V power on when the ESP32 is not running! Doing so could damage your motors or worse, as the motor coils could be "stuck on" if the ESP32 is not running. **T-Display** - You can plug a DC 12v barrel jack into the T-Display Buddy when using 1 or 2 Chainlink Drivers - ⚠️ For more than 2 Chainlink Drivers, the barrel jack cannot handle enough current, so you should instead connect your power supply directly to the Motor Power terminals of the first Chainlink Driver. Make sure you are using the [appropriate wire gauge](#power-supply-tips), and [never chain power to more than 6 Chainlink Drivers](#large-displays) [Wiring diagram](img/chainlinkWiringv1.1.pdf) **Breadboard** - Connect your power supply directly to the Motor Power terminals of the first Chainlink Driver. Make sure you are using the [appropriate wire gauge](#power-supply-tips), and [never chain power to more than 6 Chainlink Drivers](#large-displays) [Wiring diagram](img/chainlinkWiringv1.1.pdf) # 7. (Optional) Adding more Drivers You can easily chain several Chainlink Drivers by connecting ribbon cables, and adding additional power wires using the second set of power screw terminals (there are 2 terminals each for the 3.3v, ground, and 12v power), but make sure to follow this rule: ⚠️ Never chain power to more than 6 Chainlink Drivers in a row ⚠️ The screw terminals have a limited current rating (10A on the ones sold by Bezek Labs), so **using more than 6 Chainlink Drivers will require power to be wired differently**. See [+Chainlink Driver v1.1 Electronics User Guide: Large-displays](#large-displays) below for more info on wiring large displays. # 8. (Optional) Standalone T-Display operation Under the normal configuration, you would power the motors with a 12V supply and separately the T-Display is powered via its 5V USB connection to a computer. However, it’s possible to omit the USB connection for a completely standalone setup, powered by the 12V motor supply. This works well when you’re using the Wifi capabilities of the T-Display, for example to poll an HTTP(s) API or listen to an MQTT topic. To do this, you’ll need to add 3 components to the Chainlink Buddy [T-Display] (must be purchased separately): - 5V switching regulator - [Mornsun K7805-500R3](https://www.digikey.com/en/products/detail/mornsun-america-llc/K7805-500R3/13168189) is one recommended option, but any **switching** regulator module in a 7805 form-factor rated for 500mA+ should work - just double-check the capacitor requirements from the datasheet for the input (C1) and output (C2). A classic 7805 linear regulator is NOT recommended. - 22uF 1206 ceramic capacitor - 16V - install to C2 - e.g. [CL31A226MOCLNNC](http://) - 10uF 1206 ceramic capacitor - 50V - install to C1 - e.g. [CL31A106MBHNNNE](https://www.digikey.com/en/products/detail/samsung-electro-mechanics/CL31A106MBHNNNE/5961220) - or just get 2 22uF capacitors and use for both C1 and C2, but make sure to choose one rated for 25V+, e.g. [CL31A226KAHNNNE](https://www.digikey.com/en/products/detail/samsung-electro-mechanics/CL31A226KAHNNNE/3888705) ![](https://paper-attachments.dropbox.com/s_BBABC117AF455DD9F0525297940CD25AF9A358008ED7FF73463824486BCF5E62_1639184673383_2021-12-10+16.26.37.jpg) ![](https://paper-attachments.dropbox.com/s_BBABC117AF455DD9F0525297940CD25AF9A358008ED7FF73463824486BCF5E62_1639184679625_2021-12-10+16.28.06.jpg) ---------- # Appendix ## What is the Chainlink Driver? ![](https://paper-attachments.dropbox.com/s_BBABC117AF455DD9F0525297940CD25AF9A358008ED7FF73463824486BCF5E62_1637357775368_DSC_4991_s.jpg) The Chainlink Driver is an updated control board for splitflap displays, building on lessons learned from the Classic Controller. There were 2 main goals in designing it: - support for controlling a *LOT* of splitflaps - low cost and ease of purchasing pre-assembled boards - it’s mostly SMD instead of through-hole Each Chainlink Driver PCBA contains all the power and signal electronics to drive the stepper motors and read the home position sensors for **up to six** modules, and can be trivially chained together to control 100+ splitflap modules using just 4 pins of an ESP32. https://www.youtube.com/watch?v=g9EPabcxBsM& ## Where to buy a Chainlink Driver? ![](https://paper-attachments.dropbox.com/s_BBABC117AF455DD9F0525297940CD25AF9A358008ED7FF73463824486BCF5E62_1637358766420_DSC_4994_s.jpg) The design is open source, so you can order them directly from a PCB manufacturer using the design files provided, but I also [sell them in my Bezek Labs Etsy store](https://bezeklabs.etsy.com/listing/1123280069/splitflap-chainlink-driver-v11) within the US. Buying them from my store has the advantage of being [100% functionality tested after assembly using a custom testbed](https://twitter.com/scottbez1/status/1414986069586575360), and it helps support further development and prototyping of this project. I also include all the connectors and a ribbon cable for your convenience. If you’d like to order them directly from a PCB manufacturer, the designs are optimized for JLCPCB’s Assembly service (not sponsored or affiliated, but they do have extremely cheap assembly as long as you stick to a limited set of components available in their part library). Note that the BOM does *not* include many of the connectors because there is a $3-per-unique-part fee, and since you’ll need to order the ribbon cable separately anyway this can keep your costs lower for small orders. ## Power supply tips You’ll need a 12V supply with a current rating that depends on the number of modules you’ll be controlling (and even the particular motors you’re using, as not all 28byj-48 motors have the same coil resistance). A good starting assumption is that each motor will draw 0.25A each (typical estimate for motors with 100 ohm half-winding resistance), but you should always test your motors, and include a safety margin. So for every Chainlink Driver you use, plan for at least 1.5A capacity, but many cheap power supplies have questionable/overstated ratings, so you probably want 2A minimum. For a large display, I’ve used a [Mean Well LRS-350-12](https://amzn.to/3cdjuwD) [affiliate links help support this project at no cost to you, or use a [non-affiliate link](https://www.amazon.com/MEAN-WELL-LRS-350-12-Computer-Project/dp/B07VTLJS18) if you’d prefer] which I found to easily supply 22+ amps with little voltage ripple. Make sure to select appropriate gauge copper wire for power (this includes the GND wires!). The current along a chain of Chainlink Driver boards adds up quickly! I also recommend adding fuses near the power supply as an added layer of protection, especially on larger displays. The LRS-350-12 mentioned above is capable of supplying 29A *continuously* which is a lot of current and potentially destructive in case of a fault. Since each power branch (see advanced wiring diagram) will use less than this, you should protect each branch with its own appropriately-sized fuse. Make sure to buy power wiring from a reputable seller with a trustworthy supply chain (e.g. an electronics supplier or a big box hardware store, not AliExpress or Amazon). Unfortunately, as the cost of copper has gone up it’s [more common to find wire using other metals](https://www.youtube.com/watch?v=15sMogK3vTI) which may not meet its advertised specs. ## Using a different ESP32 module In theory, any ESP32 module *with 2 cores* (i.e. *not* based on an ESP32-**S2**) should work. Most common WROOM or WROVER-based modules can work. However, not all cheap modules are well designed (some are not breadboard friendly, some have poor power design causing brownouts during wifi/ble, etc), so I’ve found the T-Display to be a great default. You do lose a few IO pins to the LCD, but the Chainlink firmware supports the LCD out of the box and I think you’ll find it handy for debugging. That said, if you do use another module here’s what you need to know: 1. You probably want to disable the display code to free up those pins and avoid wasting CPU cycles. Do this by changing `-DENABLE_DISPLAY=1` to `-DENABLE_DISPLAY=0` in platformio.ini 2. Since the ESP32 has a GPIO matrix, you can change the pin assignments easily (see spi_io_config.h), but you do need to [avoid certain reserved functions](https://www.youtube.com/watch?v=LY-1DHTxRAk) so I recommend using the defaults unless you have a good reason not to. ## Large displays The Chainlink system can support large displays, but please be aware that more care needs to be taken as the size of the display (and therefore, the power supply and electronics involved) increases. If you are wiring more than 6 Chainlink Driver boards, **only data connections should form a continuous chain**! This is shown in blue on the diagram below. The power should branch into **separate chains of up to 6 Drivers** (or fewer if your motors require more current). Chaining power continuously like the data would overload the screw terminals and wires at the beginning of the chain, potentially causing damage/fire. Note how the yellow and black wires in the diagram below branch *at the power supply* and do not continue past each sub-chain of 6 Drivers. [Advanced wiring diagram](img/chainlinkWiringAdvanced.pdf) I would also strongly recommend adding additional safety measures with a display of this size, considering the total power involved. For instance: - Fuses for each branch of power - Real-time voltage & current monitoring, and individual load switches for each “branch” to detect and respond to faults - Relay controlling mains input to 12V power supply (intentionally redundant with 12V branch load switches) The Chainlink Base (taking the place of the Chainlink Buddy in the system) is one possible approach to some of these measures, but it is not officially supported/recommended. Make sure you consult a qualified electrician/engineer to review all designs (including splitflap project schematics and PCBs), and be sure to follow applicable regulatory codes. ---------- Link disclosure: As an Amazon Associate I earn from qualifying purchases. (I’ve also chosen to include non-affiliate links next to every affiliate link should you prefer to avoid using affiliate links) ================================================ FILE: docs/Flaps.md ================================================ [<< Back to Documentation Index](../DocumentationIndex.md) # About flaps ![Flap dimensions](img/flapAnnotated.svg) The flaps in this design are based around standard credit-card sized PVC cards (aka CR80). Each flap is 1/2 of a card, and has notches cut of the sides to create a "pin" that fits into the flap spool and allows it to flip freely. There are either 52 flaps (v2) or 40 flaps (v0) for every module, so for a small 6-character display that will be a total of 312 flaps (v2) or 240 flaps (v0) that need to be cut and have letters applied to them if you take the full DIY approach. Because there are so many flaps required for larger displays, I've also had custom flaps (both blank and pre-printed) manufactured that I sell in the [Bezek Labs Etsy store](https://bezeklabs.etsy.com/), which can save a lot of time and helps support continued development of this project. # Option 1: Pre-printed flaps Bezek Labs professionally cut blank white flaps If you'd like to save the most time, I sell [packs of profesionally cut and printed flaps](https://www.etsy.com/listing/1685633114), ready to install into your split-flap display. THese are designed for v2 displays. This is definitely the priciest option since they're completely custom for this project (a single pack requires 52 different printed designs!), but they look great and will hold up well to long-term use. Available in 1-packs, 6-packs, and 24-packs in the Bezek Labs Etsy store. [^ Up to top](#about-flaps) [<< Back to Documentation Index](../DocumentationIndex.md) # Option 2: Pre-cut blank flaps Bezek Labs professionally cut blank white flaps Bezek Labs professionally cut blank black flaps An intermediate option is to buy pre-cut blank flaps, and then apply letter stickers of your choice to them. This saves the hassle of cutting/punching every flap, but still involves some tedious work to apply stickers to every flap. I sell packs of blank flaps in the Bezek Labs Etsy store, available in glossy white or matte black. You'll need to [apply letter stickers](#33-apply-letter-stickers) to the blank flaps. [^ Up to top](#about-flaps) [<< Back to Documentation Index](../DocumentationIndex.md) # Option 3: DIY flaps flap with notches cut by hand If you want the full DIY experience, the flaps can be created by first cutting a CR80 card in half, then punching notches out of each side of the half cards, and finally applying letter stickers to them. If this sounds tedious, I'll admit that it is, but it's how I built the first few splitflap modules. ## 3.1 Build a flap cutting jig The notch cut-outs need to be done consistently for all 40 flaps, so we'll first create a jig for the [badge slot punch](http://www.amazon.com/gp/product/B009YDRRB4) to hold a flap in a precise position while cutting it. The jig can either be created by hand using a PVC card, or, if you have a 3d printer, can simply be printed ([see below](#3d-printing-a-jig)) ### 3d printing a jig If you have a 3d printer, you can print a jig model rather than creating the jig by hand. It will look like this: 3d-printed jig To print this jig, open [3d/punch_jig.scad](https://github.com/scottbez1/splitflap/blob/master/3d/tools/punch_jig.scad), render it and export to an STL file. You can use your slicer of choice to prepare the model for 3d printing. 3d-rinted jig Model of the 3d printed jig (Thanks to [@SilentM4X](https://twitter.com/SilentM4X) for the [idea to print the jig](https://twitter.com/SilentM4X/status/974688413373870085)!) ### Creating a jig by hand The jig created from a PVC card will eventually look like this: badge punch with alignment jig To build this, start by taking half a PVC card (or any spare ID or credit card you may have laying around), insert it all the way to the back of the punch, and punch a slot in the center. While the punch is still engaged (holding the card in place), take your X-Acto knife and lightly score the top of the card along the outer edges of the punch (just enough to mark it). punched card with marked edges Take the card and a ruler and score it along the 2 lines you marked (cut about 1/3 of the way through the card thickness, but err on the side of cutting less). Then align the ruler with the flat edge of the punched slot nearest the card edge and use the knife to fully cut the card from the right side of the punched slot to the right edge of the card. Then turn the ruler 90 degrees and place it ~1-2mm outside the left side of the punched slot (this determines the thickness of the flap "pin") and cut from the bottom edge of the slot to the top of the card. punched card with scores and cuts Connect those 2 cuts so that the upper right section of the card can be removed entirely: punched card with section moved Fold the card 90 degrees away from you along the 2 scored edges: folded jig Insert the jig into the punch (the same orientation you originally punched it), and tape it into place: folded jig in punch folded jig in punch 2 folded jig in punch 3 folded jig in punch 4 Your flap-cutting jig is complete! [^ Up to top](#about-flaps) [<< Back to Documentation Index](../DocumentationIndex.md) ## 3.2 Cut flaps To cut the flaps from CR80 PVC cards, they first need to be cut in half. You could probably do this with a paper guillotine, but I don't own one so I made a jig to score them with a utility knife and then snap them in half. Start by putting 3 nails into a scrap piece of wood to hold the card in place: nails to align card Then, on either side of the working area, place a card or two (I used a PVC card plus a business card) to elevate a ruler which will be clamped in place as a straight edge for scoring. ruler placement Make sure the ruler is clamped exactly 1/2 card length away from the two top nails: ruler alignment Then slide a blank card under the ruler and hold it tightly against the nails while scoring along the ruler edge. card to be cut You should get a nice clean line, which doesn't have to be too deep. card with score line Bend the card away from the cut until it's folded back on itself, making sure that the ends of the card match up with each other (otherwise adjust the ruler alignment to correct for this). Then straighten the card and bend the opposite direction until it snaps in half. folded card folded card 2 Do this with 20 cards to get 40 half-cards. Then take each half-card and use the [[flap cutting jig|Build flap cutting jig]] to punch a notch out of each side. punched card stack of punched cards The punched holes may not be completely clean (e.g. some material left outside the hole) but that's ok. Take some diagonal cutters to clip off the excess material and clean up the top/bottom of the punched notch. clipping card with diagonal cutters final cut flaps If you're interested in more precise dimensions for the flaps and cutouts and the reasoning behind those values, see the discussion here: https://github.com/scottbez1/splitflap/issues/8 If you'd like to save yourself some time, an alternative to cutting your own flaps is to purchase pre-cut flaps that I've had professionally made, [available on Etsy](https://bezeklabs.etsy.com/listing/979720975). Purchasing pre-cut flaps from me will also help fund the continued development of this open-source project. [^ Up to top](#about-flaps) [<< Back to Documentation Index](../DocumentationIndex.md) ## 3.3 Apply letter stickers For applying letter stickers to the flaps, I generally recommend purchasing store-bought vinyl letter sticker packs (see the [v2 complete ordering guide](/docs/v2/OrderingComplete.md) or [v0 complete ordering guide](/docs/v0/OrderingComplete.md) for details). If you have a vinyl cutter like a Cricut or Silhouette, you can use the [generate_fonts.py](https://github.com/scottbez1/splitflap/blob/master/3d/scripts/generate_fonts.py) script to generate a custom flap letter stickers in the font/design of your choice. I recommend following [Dave Madison's excellent blog post](https://www.partsnotincluded.com/building-diy-split-flap-displays/#:~:text=Letter%20Generation) for tips on how to do this! (And kudos to Dave Madison for contributing that font generation script to the project!) Applying the letter stickers to each of the 40 flaps is a painstaking, slow process. After a bit of practice, it still took me about 1.5 hours and a lot of patience to apply all the stickers to a new set of flaps: [![video time-lapse](img/flaps/timeLapseThumbnail.jpg)](https://www.youtube.com/watch?v=N_ifOY9FLs8) **Note:** I've since discovered a better way of applying letter stickers - see [New Instructions](#new-instructions). The [Old Instructions](#old-instructions) are still included below, but no longer recommended. ### New Instructions Watch the [youtube video](https://www.youtube.com/watch?v=3lFECISLwyI): This method is a lot less stressful and offers much better alignment than the older method. 1. Tape down old credit cards or hotel keycards so they form a U-shaped jig that cradles 2 flaps. Place 2 blank flaps into that jig. (Optionally tape another card or piece of paper that covers the bottom 3/16 inch (4.76mm) of the bottom flap -- this serves as a baseline for aligning the stickers) 1. Using food storage cling wrap applied tightly over a clear container, place the letter sticker **upside down** (sticky side UP) on the cling wrap. It should be attracted to the cling wrap because of static electricity, which will allow us to flip the whole thing over without the sticker falling off. 1. Flip the container+cling wrap+sticker over, and looking through the clear container and cling wrap, align the letter onto the 2 flaps (using the optional baseline alignment guide mentioned above, if you have it). Press the container down so the sticker adheres to the flaps and remove the container. 1. Using your finger, press down all over the letter sticker to ensure it's adhered and there are no air bubbles. 1. Cut the letter sticker in half along the gap between the 2 flaps. 1. Remove the bottom flap from the jig and set aside. Take the top flap and flip down so it's in the place of the bottom flap, and place a new blank flap in the top position. 1. Repeat steps 2-6 with the next letter sticker. ### Old Instructions I've found it's easiest to keep the order correct by starting with all but two of the (empty) flaps already on the spool. You can add/remove flaps on the spool by gently squeezing the flap so the middle of the flap bows away from the spool's center: hold your index finger in a cup shape underneath the flap so only the flap's edges touch your finger, and then press your thumb into the center so the flap bends to follow the contour of your index finger. This will cause the pins to move inward enough to slide the flap into or out of place: Gently bend the flap to add/remove it from the spool Start with just 2 empty flaps off the spool, flat on your workspace arranged as they would be on the spool (vertically mirroring each other, with the pins in the middle). For each letter: 1. Use a hobby knife to cut the letter sticker in half. I used a spare PVC card cut to 1.5 inches tall as a guide since it's smaller and easier to move around than a ruler. 1. Peel up half the letter (you can use the knife's blade to help separate the sticker from the backing), and carefully apply it to one of the flaps, with the cut edge along the flap's cut edge. 1. Repeat with the other half of the letter, making sure to align it with the half you already placed. 1. Take the bottom flap and place it back on the spool, in the lower of the two available slots. 1. Take the top flap (still sitting on your workspace) and flip it vertically so it's face-down in the bottom-flap orientation. 1. From the spool, remove the empty flap above the empty slot (above ), and place it on your workspace in the top-flap orientation. 1. Repeat the steps for each letter. You will always be placing the bottom half of the next letter on the back of the flap that has the top half of the previous letter (e.g. the bottom half of "C" is on the back of the flap with the top half of "B", and the bottom half of "9" is on the same physical flap as the top half of "8"). [^ Up to top](#about-flaps) [<< Back to Documentation Index](../DocumentationIndex.md) ================================================ FILE: docs/MotorGuide.md ================================================ # 28BYJ-48 Motor Buying Guide [<< Back to Documentation Index](DocumentationIndex.md) There are a *lot* of different motors that go by the same “28BYJ-48” name. If you want to be certain you're getting good motors (and you're in the US), you can opt to add motors to your purchase of a [Chainlink Driver](https://bezeklabs.etsy.com/listing/1123280069/splitflap-chainlink-driver) from the [Bezek Labs](https://bezeklabs.etsy.com) store. I qualify each batch of motors I receive so you can be sure they'll work great (or I'll replace/refund them). ### Latest AliExpress recommendation (as of 2024-06-25) As of 2024-06-25, I recommend SeasBoat Store as a fairly reliable AliExpress seller over the last few years, having ordered many hundreds of motors from them myself (but as always, they may send you different motors, so it’s no guarantee). They have 2 listings available: - a [“Choice” listing](https://s.click.aliexpress.com/e/_mKVNenq) that is more expensive individually, but qualifies for free shipping over $10 (or use this [non-affiliate link](https://www.aliexpress.us/item/2255800976774653.html)). This may be chepaer for a smaller quantity of motors. - a [non-Choice listing](https://s.click.aliexpress.com/e/_m0W7bZq) with a lower per-unit cost but with a shipping charge (or use this [non-affiliate link](https://www.aliexpress.us/item/3256807022196320.html)). This is likely cheaper for larger orders. Make sure you select the “12V” option when adding to your cart! Depending how many motors you’re ordering and where you are shipping to, you may want to use one listing or the other. ## What's different about different "28BYJ-48" motors? The two areas of variation are: - gear ratio - common values are 16.032:1, 64:1, and 63.68395:1 - coil resistance - I’ve seen variants ranging from 26 ohms to 185 ohms (For more background reading, see [Graham Wideman’s detailed post](http://web.archive.org/web/20180528105141/http://grahamwideman.wikispaces.com/Motors-+28BYJ-48+Stepper+motor+notes), though it does not even cover all the variants I have seen) Both of those factors - gear ratio and coil resistance - have a pretty big impact on output torque, max speed, and control sequence (steps per revolution), but unfortunately most sellers don’t provide that info, or worse, they’ll often provide **incorrect info**. Making things worse, it’s not uncommon for sellers on AliExpress to change the item they sell without changing the store listing, so even if you’ve purchased from a listing in the past, there’s no guarantee they will continue to offer the same items. This has happened to me with a seller I used previously and no longer recommend. 🔑 The motors that I’ve found work best for splitflap displays have a 64:1 gear ratio and a half-coil-resistance (measured from the red wire to the blue wire) of ~100 ohms. ---------- In my experience, I’ve found these tips improve your chances of getting good motors: - 🔑 **Only buy motors labeled 12V** - It seems like there are more variants marketed as “5V” so you’re less likely to get a consistent item when buying 5V motors - 🔑 **Only buy motors that have laser-engraved labels; avoid motors with sticker labels** - Laser-engraving is more expensive than stickers, so it generally suggests a higher quality product. I’ve received sticker motors with *identical* “serial” numbers printed on the sticker, whereas the numbers on laser-engraved motors have always been unique in my experience - 🔑 **Message the seller beforehand to confirm the motors are as you expect** - Ask whether the motors have a sticker or laser-engraved numbers on the side - You can try asking what the resistance is, e.g. between the red wire and blue wire, but I’ve had little luck with this in the past (maybe just lost in translation) - Asking about steps/rev or gear ratio is generally not useful; they will give you an answer but it may not be correct because they can’t easily test it ================================================ FILE: docs/OpenSauce2024.md ================================================ ![Split flap display at Open Sauce](https://github.com/scottbez1/splitflap/assets/414890/4832a680-11b1-499a-898c-add77581a0cf) # What's a split-flap display? A [split-flap](https://en.wikipedia.org/wiki/Split-flap_display) is an electro-mechanical display technology, previously common in airports and train stations, and named for the letter flaps that are split in half. Split-flap displays have a few advantages compared to modern LED/LCD displays, like: - 🔋 no power required when contents are static - 💡 no glow like a light-based display - 🔊 makes sound when new information is available (like when your flight is canceled!) - 😎 sounds and looks sweet But they have one BIG disadvantage: **maintenance/complexity** 🙀 # How does it work? Check out this video for a basic overview: # How do I build one? Check out the [github repo](https://github.com/scottbez1/splitflap) to find source designs as well as links to instructions and ordering info. I also sell some of the custom parts in my [Etsy store](https://bezeklabs.etsy.com) for your convenience (and to help fund continued development), but it's all open source so you're always welcome to build everything yourself! The [splitflap community Discord server](https://discord.com/invite/wgehm3PcrC) is the best place to keep up with the latest changes or ask questions about the project! # Why???? I love old mechanical technology, and I'm always a little sad when beautiful mechanical solutions are replaced by (far more practical) big, bright, colorful LEDs, so I sought to recreate split-flaps with more modern hobbyist-friendly tools. It's become a passion project of mine over the last 9 years, and I LOVE seeing the displays and art installations others have built based on this open-source design! # Contact/chat info - Splitflap project Discord server: https://discord.gg/Hxnftc8PyW - best place to ask general questions or see what's happening on the project - Email: scott@bezeklabs.com - YouTube: [@scottbez1](https://youtube.com/scottbez1) - Twitter: [@scottbez1](https://twitter.com/scottbez1) - Mastodon: [@scottbez1@fosstodon.org](https://fosstodon.org/@scottbez1) # Acknowledgements - A huge thank you to: - Ben Flatau for being the mastermind behind the giant display and for all his time and help with Open Sauce 2023 and 2024 - the City of Palo Alto whose art grant for [Code:ART 2021](https://www.cityofpaloalto.org/Departments/Community-Services/Arts-Sciences/Public-Art-Program/CodeART/CodeART-2021) originally made it possible to build something this big - and the whole team of volunteers that helped assemble/paint/install the 4320 flaps, electronics, and structure - Much of the original design inspiration came from some blog posts by The Beach Lab, which sadly don't seem to be online anymore and I haven't been able to find archives, but IIRC this is where the CR80 card idea and laser-cut drum structure came from - [Dave Madison built and documented](https://www.partsnotincluded.com/building-diy-split-flap-displays/) some great improvements on this design, and has contributed a ton of those changes back to the project, including the font generation script for custom vinyl cut or printed flaps! - And thank you to [everyone else who has contributed to the project over the years!](https://github.com/scottbez1/splitflap/graphs/contributors) # Other notable split-flap displays - [Oat Foundry](https://www.oatfoundry.com/split-flap/) makes custom commercial displays - [Vestaboard](https://www.vestaboard.com/) makes a compact version for home/office use - [Engineezy](https://www.youtube.com/watch?v=K_UEkRFP7fs) designed a 3d-printed version as a scoreboard - And lots of other DIY / Open Source designs! ================================================ FILE: docs/v0/Assembly.md ================================================ # Splitflap v0 Assembly Guide [<< Back to Documentation Index](../DocumentationIndex.md) ## Intro Building a split-flap display? I would love to hear from you and see photos/videos of your project in progress or completed! This project has been a hobby of mine for a few years and the coolest part by far is hearing from other people making their own and seeing them in action. Feel free to shoot me an email at scott@bezeklabs.com 🙂 or, [join the Discord server](https://discord.gg/wgehm3PcrC) to share and discuss with the wider split-flap community! # 1. Gather the parts See the [complete ordering guide (v0)](OrderingComplete.md) or the [easy guide (v0)](OrderingEasy.md) for info on ordering parts - 1 Controller PCB - 4 Sensor PCBs - 4 Magnets - components for controller and sensor boards   - 4 laser-cut panels - 2 letter sticker packs - 4 motors - 4 sensor cables - ~165 flaps (160 are necessary) - ~46 M4 bolts (44 are necessary) - ~46 M4 nuts (44 are necessary)   - 12V 2A Power Supply - Tools: - Metric hex key - Soldering supplies - Calipers or metric ruler - Hobby knife - Plastic wrap and glass storage container (For applying letter stickers) - [if hand-cutting flaps] Badge slot punch # 2. Sensor PCB Assembly https://www.youtube.com/watch?v=vQMnWK6PwJ0& > 💡 **New (not shown in video!):** The laser cut files include a jig for spacing the hall effect sensor accurately without having to measure the 5.8mm gap. See photos of it below. > > The latest PCB design also has holes that are spaced further apart for the sensor to make soldering them easier. You’ll need to bend the sensor’s pins outward to fit into the holes. The rough steps are: - solder 90-degree pin headers *from the top side* ([0:21](https://www.youtube.com/watch?v=vQMnWK6PwJ0&t=21s)) - bend leads on hall effect sensor 90 degrees ([2:00](https://www.youtube.com/watch?v=vQMnWK6PwJ0&t=120s)) - insert hall effect sensor from the back side of the PCB (opposite the pin headers) ([2:45](https://www.youtube.com/watch?v=vQMnWK6PwJ0&t=165s)) - adjust hall effect sensor so there's a ~5.8mm gap between the back of the sensor and the PCB ([3:00](https://www.youtube.com/watch?v=vQMnWK6PwJ0&t=180s)) - solder the hall effect sensor in place ([3:30](https://www.youtube.com/watch?v=vQMnWK6PwJ0&t=210s)) - clip off excess pin length ([4:24](https://www.youtube.com/watch?v=vQMnWK6PwJ0&t=264s)) > Sensor spacing jig cut from white acrylic > If your laser cut parts came in a full sheet as-cut (e.g. Ponoko does this, but not Elecrow), you’ll find the jig inside the motor cutout, highlighted in red above # 3. Mechanical Assembly Note: if using acrylic rather than MDF/wood, *do not force parts together* if they don’t quite fit. Acrylic is extremely brittle and *will* crack. Use a small file if necessary to remove any excess material. While the design attempts to achieve a tight fit, different laser-cutters may remove more or less material, so undersized holes/slots can occur. https://www.youtube.com/watch?v=zHM8W6Rm2i4& The rough steps are: - separate laser-cut parts ([0:12](https://www.youtube.com/watch?v=zHM8W6Rm2i4&t=12s)) - remove protective film ([0:34](https://www.youtube.com/watch?v=zHM8W6Rm2i4&t=34s)) - Spool: - put together spool struts ([1:31](https://www.youtube.com/watch?v=zHM8W6Rm2i4&t=91s)) - attach bolt+nut to spool retaining piece ([2:16](https://www.youtube.com/watch?v=zHM8W6Rm2i4&t=136s)) - insert spool struts into spool disk ([2:50](https://www.youtube.com/watch?v=zHM8W6Rm2i4&t=170s)) - press other spool disk onto spool struts ([3:25](https://www.youtube.com/watch?v=zHM8W6Rm2i4&t=205s)) - check magnet polarity and insert magnet into spool ([3:40](https://www.youtube.com/watch?v=zHM8W6Rm2i4&t=220s)) - pass motor through side hole and secure with 2 bolts ([5:05](https://www.youtube.com/watch?v=zHM8W6Rm2i4&t=305s)) - mount hall effect sensor module and secure with a bolt ([6:02](https://www.youtube.com/watch?v=zHM8W6Rm2i4&t=362s)) - press spool onto motor shaft ([7:15](https://www.youtube.com/watch?v=zHM8W6Rm2i4&t=435s)) - press fit bottom piece into left piece, with laser-engraved lettering facing up and circular hole toward the back ([7:50](https://www.youtube.com/watch?v=zHM8W6Rm2i4&t=470s)) - press fit top piece into left piece, with circular hole toward the back ([8:14](https://www.youtube.com/watch?v=zHM8W6Rm2i4&t=494s)) - press right piece into top/bottom pieces and aligned with spool axle ([8:34](https://www.youtube.com/watch?v=zHM8W6Rm2i4&t=514s)) - press front piece into top/bottom pieces, with thicker side on the left ([9:05](https://www.youtube.com/watch?v=zHM8W6Rm2i4&t=545s)) - secure enclosure pieces using captive nuts+bolts ([9:27](https://www.youtube.com/watch?v=zHM8W6Rm2i4&t=567s)) - attach flap backstop bolt/nut ([10:26](https://www.youtube.com/watch?v=zHM8W6Rm2i4&t=626s)) - to connect to another module, remove front face, insert inter-module connectors, and replace front face ([10:55](https://www.youtube.com/watch?v=zHM8W6Rm2i4&t=655s)) # 4. Applying Letter Stickers https://www.youtube.com/watch?v=3lFECISLwyI& ## Additional notes (not in the video above): By default, the splitflap code assumes the flaps appear in a particular order, so it’s easiest to apply the stickers as follows: (space), A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, (period), (comma), (apostrophe) Note: for a display that will commonly count *down,* it may make sense to reverse the order of the numbers so that counting down doesn't require a full revolution each time. You will need to make a few simple changes to the control software to tell it what order the letters appear if you use something other than the default. Do not insert the flaps into the spool until step 6 (just keep them in order). # 5. Electronics Assembly See the [Electronics Guide](../ElectronicsGuide.md) for complete instructions on assembling and using the electronics. # 6. Final Assembly and Calibration Rough steps: - Setup - Download and install [Microsoft Visual Studio Code](https://code.visualstudio.com/) - Follow these steps to set up Platform IO and the splitflap code ([watch](https://youtu.be/uyG5mEKzKcg) [screencast](https://www.youtube.com/watch?v=C8mcExG-VVo)): - Install the Platform IO extension - Choose “Clone Respository” in the Explorer sidebar and enter the git repo URL: `https://github.com/scottbez1/splitflap.git` - Note: downloading the source as a zip from github is **NOT recommended**, as it will make it harder to get help if any issues arise (git will keep track of which precise version of the code you checked out, along with any changes you make, which helps a lot when debugging) - Open the repository. You may need to choose to “Trust” the folder to allow the Platform IO extension to run. - Install the splitflap firmware on the device and open a serial monitor - Open the Platform IO sidebar and run the `chainlink` → `Upload and Monitor` task - Confirm that you see the startup message that looks like this: {"type":"init", "num_modules":12, "character_list":" abcdefghijklmnopqrstuvwxyz0123456789.,'"} - Plug in all motors and sensors - Plug in 12V motor power - Restart the microcontroller - Spools should rotate slowly until the home position is reached, then complete one revolution at full speed - Make sure spools are rotating the right direction - Confirm that all 4 RGB LEDs are green before moving on - Open Serial Monitor - we’ll do some testing to make sure the motors are configured correctly - Send `= \n` (equal space space space space newline) - Check that all motors complete a full revolution and stop - Repeat this process 10 more times and make sure that none of the modules have to recalibrate (rotate slowly as in the startup procedure) during this test - Confirm that the reported `"count_missed_home":0, "count_unexpected_home":0` values are both zero for all 4 modules - Send `@` in Serial Monitor to force all modules to recalibrate, and `= \n` to tell all the modules to go to the home position - Install flaps ![Gently bend the flap with your thumb to add or remove it](../img/flaps/addRemoveSpool.jpg) - Start by taking the top and bottom halves of the empty (space) character. Insert the top half into the holes marked with a “-” on the spool. Insert the bottom half into the spool holes below it. - Rotate the spool forward a few characters (e.g. by sending `=e\n` or by gently rotating the spool by hand) and insert the next few flaps. Repeat this until all 40 flaps are installed. - Calibration - Use the Serial Monitor to send characters to the modules - If the module consistently doesn’t turn quite far enough or turns a little too far for some letters, then the home position sensor may need to be adjusted: - Loosen the hall-effect sensor bolt - If the module wasn’t turning far enough, slide the sensor toward the **rear** of the module - If the module was turning a little too far, slide the sensor toward the **front** of the module - Re-tighten the hall-effect sensor bolt - Send a `@` to recalibrate - Check if the calibration is better now # Legacy Classic Controller Assembly https://www.youtube.com/watch?v=VmKuWdmhPtM&&feature=youtu.be Components with polarity have been labeled with a ⚠️ symbol below - make sure you get the orientation correct! Recommended assembly order: - 4 WS2812b RGB LEDs - U5, U6, U7, U8 - center near A B C D labels - ⚠️ Make sure to get polarity correct - LED notch aligns with right-angle silkscreen line - top left corner (on some PCBs, this marker may be missing or hard to see; just make sure the notch is pointing toward the top left corner) - Arduino pin headers (BOTTOM SIDE): - 3 pin straight male header - “Arduino D4 D5 D6” label on bottom - 2x3 Female header - ISP label on bottom - 2 pin straight male header - VIN label on bottom - 470 resistor (Yellow Purple Brown) - R9 (center top side, between the two MIC5842 spots) - Top left corner: - 2 pin straight male header - JP1 - **Yellow** LED - D1 (Mot+) - ⚠️ make sure to get polarity correct - match flat side to silkscreen - **Green** LED - D2 (5V)- ⚠️ make sure to get polarity correct - match flat side to silkscreen - 2.2k resistor (Red Red Red) - R1 - 220 resistor (Red Red Brown) - R7 - Capacitors: - 100uF electrolytic capacitor - C1 - ⚠️ make sure to get polarity correct - 100uF electrolytic capacitor - C3 - ⚠️ make sure to get polarity correct - 0.1uF capacitor - C2 (to the left of “A” LED) - Barrel Jack Connector - top right “5-12V” label - Sensor connectors (place all of these at once with a sensor cable plugged in across all 3 to ensure proper alignment when soldering) - 4 pin straight male header - “GND” label - 4 pin straight male header - “5V” label - 4 pin straight male header - “A” and “D” labels - 47k resistors (Yellow Purple Orange) - R3 R4 R5 R6 R10 - Motor connectors - P1 P2 P3 P4 - ⚠️ make sure to get polarity correct (match silkscreen) - ICs - make absolutely sure to get the polarity correct!!!! - MIC5842 - U2 - ⚠️ make sure to get polarity correct (match silkscreen - notch facing **left**) - MIC5842 - U4 - ⚠️ make sure to get polarity correct (match silkscreen - notch facing **left**) - 74HC165 - U3 - ⚠️ make sure to get polarity correct (notch facing **bottom** - see right-angle silkscreen line near pin 1) ![Assembled Driver PCB with optional EXP OUT connector (EXP OUT is only needed when chaining controllers to support more than 4 modules, see below for more details)](https://paper-attachments.dropbox.com/s_DBFFE29691B90C2EDDE2A687CA2E739A14BF58F2DE09EF37D4E0562373661460_1572753846051_file.jpeg) You should have the following parts left over: - Jumper connector - this is an optional component that is generally not needed; you should leave it off unless you're certain you need it. **Never connect the Arduino's USB cable to anything if jumper JP1 is in place!** The JP1 to power the Arduino from the driver board’s motor power supply, allowing the Arduino to run without a computer connection. - while the Arduino theoretically protects against 12V back-flowing to the USB connector via the VIN pin, you risk damaging your computer if that protection fails (or is not implemented for some reason on a cheap knock-off Arduino clone). ================================================ FILE: docs/v0/OrderingComplete.md ================================================ # Splitflap v0 Comprehensive Ordering Guide [<< Back to Documentation Index](../DocumentationIndex.md) The instructions below will walk you through ordering all the parts (excluding common tools) needed to build a splitflap v0.7 display with **6 modules** using the latest Chainlink electronics. Ready to assemble? Jump ahead to the [Assembly Guide](Assembly.md) If you have any questions, please feel free to reach out to me (scott@bezeklabs.com). Or, join the [Discord server](https://discord.gg/wgehm3PcrC), to discuss or ask questions from the wider split-flap community! 😩 Feeling overwhelmed by this document? I don’t blame you, there’s a LOT here… So I put together a much shorter document that favors simplicity over comprehensiveness/lowest-cost, for people in the US: [+Splitflap Ordering (the “easy” route)](OrderingEasy.md) 💡 These instructions have been updated for the “Chainlink” electronics system, which is recommended over the legacy (circa 2016) “Classic Controller” for all new builds due to easier assembly and more flexibility. If you’re looking for the older Classic Controller instructions, they’ve been moved to the [Appendix](#appendix-c-legacy-classic-controller). 1. [Order laser-cut parts](#order-laser-cut-parts) 3. [Order electronics](#order-electronics-chainlink) 2. [Order hardware](#order-misc-hardware) 4. [Appendix A: Older laser-cut file versions](#appendix-a-older-laser-cut-file-versions) 5. [Appendix B: Hall effect sensor options](#appendix-b-hall-effect-sensor-options) 6. [Appendix C: Legacy Classic Controller](#appendix-c-legacy-classic-controller) 1. [Classic-specific hardware](#classic-specific-hardware) 2. Classic Controller 1. [Order controller PCB](#order-controller-pcb-classic) 2. [Order sensor PCBs](#order-sensor-pcbs) 3. [Order electronic components](#order-electronic-components-classic) ---------- # Order laser-cut parts There are many places you can get laser-cut parts, but I’ve personally used Ponoko and Elecrow for ordering shipped to the US with an easy online-only process. I’ve been using Ponoko for several years and they offer a lot of different material options and good quality, but recently I’ve found Elecrow’s laser-cutting service, which can be **significantly** cheaper with good quality (though very limited material options). The front face of each module is approximately **82.6mm wide** and **147.8mm tall**. For advanced makers: if you want to cut a single front panel that will be shared by an entire row (or grid) of modules, there is a script to do so with lots of configurable options like spacing, rows/cols, and even has a mode for generating geometry for CNC routing with necessary “dog-bones” applied to inside corners — see `generate_combined_front_panel.py` 💡 Note: v0.7 laser-cut parts are not dimensionally compatible with older v0.6 or v0.5 modules! If you’re extending an older display, make sure to use the older v0.6 files [archived at the bottom of this document](#older-v06-laser-cut-files) rather than the newer v0.7 files linked here. ## Ponoko - 1 module - 3mm MDF: https://github.com/scottbez1/splitflap/releases/download/v0.7/3d_laser_vector-ponoko-3mm-mdf_1x.svg [177.42mm x 173.37mm] - 3mm Acrylic: https://github.com/scottbez1/splitflap/releases/download/v0.7/3d_laser_vector-ponoko-3mm-acrylic_1x.svg [177.26mm x 173.05mm] - 4 modules - 3mm MDF: https://github.com/scottbez1/splitflap/releases/download/v0.7/3d_laser_vector-ponoko-3mm-mdf_4x.svg [354.84mm x 346.74mm] - 3mm Acrylic: https://github.com/scottbez1/splitflap/releases/download/v0.7/3d_laser_vector-ponoko-3mm-acrylic_4x.svg [354.52mm x 346.10mm] - Go to [Ponoko](https://www.ponoko.com/) and sign up for an account. - [Upload](https://www.ponoko.com/designs) the SVG file from above. Confirm the dimensions match the values above, and check that blue lines are set for “Cutting” and black fill is set for “Area Engraving” (or turn this off to skip engraved features) ![](https://paper-attachments.dropbox.com/s_175A71EF755D30C645040845CEAC36F09A2519808F9780643CBAC746263B696C_1590128918128_Screenshot+from+2020-05-21+23-28-11.png) - Select a material - [MDF](https://www.ponoko.com/materials/mdf-fiberboard) or [Acrylic](https://www.ponoko.com/materials/black-matte-acrylic) are recommended — choose 3.0mm (0.12 inches) thickness. Make sure to check the material’s maximum size against the dimensions provided next to the file links above; some materials may be too small to order the 4x versions. 💡 **Important note if ordering** **Matte 1-Side** ****acrylic at Ponoko: you ***must*** immediately send special instructions to Ponoko after placing your order, requesting to have the design engraved on the *glossy* side. This will result in the design being correctly cut so the matte surface will be on the exterior of the display when assembled. From Ponoko support (as of 2021-05-13): > The matte is [by default] cut with the matte side up (so engraving happens on this side as well). > > If you would like to place an order and have us engrave on the glossy side, just **reply to the order confirmation page** with your request and we'll be sure to make note in the order details. ## Elecrow Elecrow will cut 5 copies of the design per order from “wood” (unspecified type), for $14.55 + shipping. I think you’d be hard-pressed to find a cheaper deal (but let me know if you do!). From experience it appears to be a 3-ply construction, with thin veneers on the front and back and some kind of very lightweight wood core. The thickness came out slightly undersized, at ~2.8mm rather than 3mm as specified. The finish and material is not as nice as Ponoko’s MDF (my order had visible scorch marks near cuts), so keep that in mind when deciding. - Download the appropriate file: - 3mm wood: https://github.com/scottbez1/splitflap/releases/download/v0.7/3d_laser_vector-elecrow-3mm-wood_1x.zip - 3mm acrylic: [not yet tested. If you try this, I’d recommend starting with the Ponoko 3mm acrylic file from above; let me know which file you used and how it turns out - under/oversized, etc and I will use that feedback to generate a recommended file in the future] - Go to https://www.elecrow.com/5pcs-wood-laser-cutting-service.html - Select “20cm Max * 20cm Max(Thickness: 3.0mm)” for the dimension - Upload the .zip file you downloaded above - Add to cart and check out ![](https://paper-attachments.dropbox.com/s_175A71EF755D30C645040845CEAC36F09A2519808F9780643CBAC746263B696C_1592618387746_Screenshot+from+2020-06-19+18-59-27.png) - For shipping, I would suggest avoiding “Registered Airmail” - it took well over a month and tracking was terrible; my second order with ShenZhenDHL just took a couple days. - Here are example shipping fees to California, as of 2020-06-1 ![](https://paper-attachments.dropbox.com/s_175A71EF755D30C645040845CEAC36F09A2519808F9780643CBAC746263B696C_1592618688522_Screenshot+from+2020-06-19+19-03-30.png) ---------- # Order electronics (Chainlink) The Chainlink system is a newer electronics system based around the more powerful ESP32 microcontroller (which adds things like wifi support) and incorporates learnings from the earlier Classic Controller. New development is focused on the Chainlink system. The basic pieces that you’ll need for a Chainlink system: - **Chainlink Driver board** (1 for every 6 split-flap modules you want to control) - **Chainlink Buddy** + **ESP32** (1 for the whole display, regardless of size) - **Sensors** (1 for every split-flap module) The easiest and best-supported approach is to purchase each of those items from the Bezek Labs Etsy store (US only) - I’ve set up the store so that items comes with the necessary accessories, meaning there are fewer things you need to track down and purchase separately from different suppliers. Proceeds also help fund continued development of the project! 💡 See the [Chainlink User Guide](../ElectronicsGuide.md) for more info about different configurations. ## Order Chainlink Driver ![](https://paper-attachments.dropbox.com/s_175A71EF755D30C645040845CEAC36F09A2519808F9780643CBAC746263B696C_1639441358230_DSC_4991_s.jpg) The Chainlink Driver is what drives up to 6 split-flap modules. Multiple Chainlink Drivers can be chained (hence the name!) to create much larger displays (I have created a 108-module display using 18 Chainlink Driver boards). The Chainlink Driver uses mostly surface-mount components so it’s optimized for factory production moreso than hand-soldering (though you can of course do that if you’d like) [**Recommended] Option 1: Purchase fully-tested PCBA on Etsy (US shipping only)** I sell mostly-pre-assembled Chainlink Driver boards in the Bezek Labs Etsy store: https://bezeklabs.etsy.com/listing/1123280069/splitflap-chainlink-driver-v11 (includes accessories: connectors, ribbon cable) These have all the tricky surface-mount components already soldered for you. You’ll just need to solder the through-hole connectors, which are pretty easy. Every single board that I sell goes through a rigorous 100% functionality test which validates every single motor output, sensor input, LED, and data line works as expected, using a custom test jig I developed. This option also includes all the connectors and ribbon cable you’ll need, so you don’t need to order anything separately! And, if you want to make sure you get the right 28byj-48 motors instead of just ordering on AliExpress and hoping for the best, I’ve added an option on Etsy to include 6x motors with your Chainlink Driver order! Yes, they’re more expensive than ordering on AliExpress directly, but they’ll ship quickly and you’ll know you’re getting good motors. **Option 2: Purchase assembled Chainlink Driver from JLCPCB, and purchase connectors and ribbon cable separately** The Chainlink Driver design is optimized for JLCPCB assembly, so it’s mostly a drag-and-drop process, but you’ll need to carefully understand the options you select. Most importantly, if JLCPCB is out of stock of a component, *they will continue to build your order and simply omit that component!* So be careful to check all warnings or notices that appear when ordering. Note that JLCPCB assembly involves a number of fixed costs (such as $3 per unique part) which make larger quantities a better value. Download the following 3 items from the latest Chainlink Driver release (v1.1): - gerber files (for the PCB) - BOM (specifies which components are needed for assembly) - CPL (specifies placement locations for components) To order: ![](https://paper-attachments.dropbox.com/s_175A71EF755D30C645040845CEAC36F09A2519808F9780643CBAC746263B696C_1639444226661_image.png) - Go to JLCPCB https://cart.jlcpcb.com/quote - Upload gerber zip - Select your quantity, PCB color - Confirm other parameters: - Dimensions: 30.48 x 198.12 - PCB Thickness: 1.6 - Outer Copper Weight: 1oz ![](https://paper-attachments.dropbox.com/s_175A71EF755D30C645040845CEAC36F09A2519808F9780643CBAC746263B696C_1639444258704_image.png) - Select SMT Assembly - Assemble top side - Select your quantity to assemble - Tooling holes: select **Added by Customer** (these are included in the design already, so you do not need JLC to add them) - Confirm ![](https://paper-attachments.dropbox.com/s_175A71EF755D30C645040845CEAC36F09A2519808F9780643CBAC746263B696C_1639444326379_image.png) - Upload BOM File - Upload CPL (csv) file ![](https://paper-attachments.dropbox.com/s_175A71EF755D30C645040845CEAC36F09A2519808F9780643CBAC746263B696C_1639444544494_image.png) - Review parts - ⚠️ Make sure you check this step carefully, as any parts that are out of stock will simply be omitted! ⚠️ - “No part selected” is *normal* for several connectors that will not be assembled by JLCPCB (see below) - these will be “J”-prefixed designators such as “Motor A”, “Sensor C”, or “Input” or “Output” - Review parts placement - Save to Cart - Checkout (note that JLC does NOT reserve parts until you’ve checked out and paid your order, so if stock is low there is a chance parts will be missing if you wait to pay!) To keep assembly costs lower, and to avoid fluctuating stock issues for parts that are readily available elsewhere and easy to hand-solder, the design files for assembly *do not include the following parts*, which you should order separately (or you can use the LCSC part numbers below to select them during the Review Parts step and pay the additional costs for assembly): - 2x IDC shrouded connectors, 2x4, 2.54mm spacing, e.g. JLC/LCSC [C601937](https://lcsc.com/product-detail/IDC-Connectors_JILN-321008SG0ABK00A01_C601937.html), or on [Digi-Key](https://www.digikey.com/en/products/detail/adam-tech/BHR-08-VUA/9832409) - 6x JST XH 5 pin connectors, e.g JLC/LCSC [C161872](https://lcsc.com/product-detail/Wire-To-Board-Wire-To-Wire-Connector_JST-Sales-America-B5B-XH-AM-LF-SN_C161872.html). or [C378947](https://lcsc.com/product-detail/Wire-To-Board-Wire-To-Wire-Connector_JST-Sales-America-B5B-XH-A-BK-LF-SN_C378947.html), or LCSC [C157991](https://lcsc.com/product-detail/Wire-To-Board-Wire-To-Wire-Connector_JST-Sales-America-B5B-XH-A-LF-SN_C157991.html), or on [Digi-Key](https://www.digikey.com/en/products/detail/jst-sales-america-inc/B5B-XH-AM-LF-SN/1651037) - 6x 3-pin male headers, 2.54mm spacing, e.g. JLC/LCSC [C49257](http://), or on Digi-Key [3-pin](https://www.digikey.com/en/products/detail/sullins-connector-solutions/PREC003SAAN-RC/2774851) or purchase [40-pin](https://www.digikey.com/en/products/detail/sullins-connector-solutions/PREC040SAAN-RC/2774814) and break apart, (or readily available in bulk on Amazon, etc) In order to connect your Chainlink Driver to your microcontroller (or to another Chainlink Driver in a chain), you’ll also need an IDC ribbon cable + connectors: - 1x 8 conductor 1.27mm spacing ribbon cable (45cm recommended minimum length for chaining), [e.g. on Digi-Key](https://www.digikey.com/en/products/detail/w%C3%BCrth-elektronik/63910815521CAB/8324550) - 2x IDC connectors, e.g. LCSC [C601910](https://lcsc.com/product-detail/IDC-Connectors_JILN-531408YBS0BW01_C601910.html), or on [Digi-Key](https://www.digikey.com/en/products/detail/adam-tech/FCS-08-SG/9832361) You may get an email from JLCPCB after placing your order, asking to double-check the orientation of the screw terminals. See images below for the correct orientation: the wires would go *over* the Power labels on the PCB to be inserted into the front of the screw terminals. ![✅ 3d model of the design with CORRECT screw terminal orientation](https://paper-attachments.dropbox.com/s_175A71EF755D30C645040845CEAC36F09A2519808F9780643CBAC746263B696C_1639550660519_image.png) ![✅ Confirmation email from JLCPCB, showing CORRECT screw terminal orientation. If the image they send you looks like this, go ahead and confirm it!](https://paper-attachments.dropbox.com/s_175A71EF755D30C645040845CEAC36F09A2519808F9780643CBAC746263B696C_1639550557063_image.png) ![🚫 INCORRECT: If it looks like this, it’s facing the WRONG way!](https://paper-attachments.dropbox.com/s_175A71EF755D30C645040845CEAC36F09A2519808F9780643CBAC746263B696C_1639551191137_chainlinkBadScrewTerminalOrientation.png) **Option 3: Purchase bare PCB, components, and hand-assemble** This is an advanced option which will require hand-soldering surface mount components. While the components aren’t tiny (ICs are SOIC packages and passives are 0603), it will require some skill and patience. You might also consider ordering a stencil and reflow soldering the components yourself. However, be aware that the PCB is long and thin so it is prone to warping when heated, so you may have difficulty if you plan to use a hot plate rather than an oven. Follow the instructions from Option 2 above for ordering the PCBs, and instead of selecting assembly, you can use the BOM file to order all the components yourself. The BOM file uses LCSC part numbers. ## Order Chainlink Buddy and ESP32 You’ll connect your ESP32 microcontroller to the first Chainlink Driver in the chain. The best way to do this is with one of the available Chainlink “Buddy” boards, which allow you to plug in the IDC/ribbon cable directly. Many different ESP32 modules exist, and most of them should be compatible (as long as they are dual-core), but I strongly recommend the TTGO T-Display (on [Amazon](https://amzn.to/3kHwhMm) for quick shipping [affiliate links help support this project at no cost to you, or use a [non-affiliate link](https://www.amazon.com/LILYGO-T-Display-Arduino-Development-CH9102F/dp/B099MPFJ9M) if you’d prefer], or [AliExpress](http://) if you don’t mind waiting). It includes a 240x135 LCD that the splitflap firmware supports out of the box, which can be very useful for debugging. **Chainlink Buddy [T-Display]** ![](https://paper-attachments.dropbox.com/s_175A71EF755D30C645040845CEAC36F09A2519808F9780643CBAC746263B696C_1639445752808_DSC_5014_s.jpg) The Chainlink Buddy [T-Display] is the recommended approach for most people, and makes it really easy to connect a TTGO T-Display microcontroller to your Chainlink system, with a ribbon cable connector, screw terminals for power, and a barrel jack for convenient 12v power input. [Recommended] Available in the Bezek Labs Etsy store (US only): https://bezeklabs.etsy.com/listing/1109357786/splitflap-chainlink-buddy-t-display (includes accessories: IDC connector, screw terminals, barrel jack, and female headers) There’s also an option to include the T-Display ESP32 module as well if you want to make sure you get the right thing. or you can order the PCB yourself using the gerbers, and you will also need to order the following items to go with it: - 1x IDC shrouded connectors, 2x4, 2.54mm spacing, e.g. LCSC [C601937](https://lcsc.com/product-detail/IDC-Connectors_JILN-321008SG0ABK00A01_C601937.html) - 1x 3-pin 5.08mm spacing screw terminal, e.g. LCSC [C72334](https://lcsc.com/product-detail/Screw-terminal_Ningbo-Kangnex-Elec-WJ500V-5-08-3P_C72334.html) - 1x 2.1mm barrel jack, e.g. LCSC [C381116](https://lcsc.com/product-detail/AC-DC-Power-Connectors_XKB-Connectivity-DC-005-5A-2-0_C381116.html) - 2x 12-pin 2.54mm spacing female headers, e.g. LCSC [C350303](https://lcsc.com/product-detail/Female-Headers_HOAUC-2685Y-112CNG1SNA01_C350303.html) **Chainlink Buddy [Breadboard]** ![](https://paper-attachments.dropbox.com/s_175A71EF755D30C645040845CEAC36F09A2519808F9780643CBAC746263B696C_1639446207182_DSC_5009_s.jpg) If you’d like to use a different ESP32 module, the Breadboard Buddy is a simple way to cleanly connect the Chainlink ribbon cable to a breadboard for prototyping. This is not generally recommended, but is available for advanced users. Available in the Bezek Labs Etsy Store (US only): https://bezeklabs.etsy.com/listing/1123863267/splitflap-chainlink-buddy-breadboard (includes accessories: IDC connector, male pin headers) or you can order the PCB yourself using the gerbers and you will also need to order the following items to go with it: - 1x IDC shrouded connectors, 2x4, 2.54mm spacing, e.g. LCSC [C601937](https://lcsc.com/product-detail/IDC-Connectors_JILN-321008SG0ABK00A01_C601937.html) - 1x 5-pin 2.54mm spacing male pin headers ## Order Sensors Each split-flap module will need a hall effect sensor to detect the home position. The best way to mount this is with a small sensor PCB. [**Recommended] Option 1: Sensor kit on Etsy (US only)** To keep things simple, this kit includes 6 sets of all the parts you’ll need to assemble sensors: - 6x Sensor PCB - 6x hall effect sensor (AH3391Q or similar based on availability - this will always be a brand name high quality sensor) - 6x 3-pin right angle headers - 6x 4mm magnet (this will mount onto your spool) - (optional) 6x sensor cables https://bezeklabs.etsy.com/listing/1139795321/splitflap-sensor-kit-6x-with-sensors **Option 2: Bare sensor PCBs on Etsy (US only) and order parts separately** I originally started selling these sets of bare PCBs for people building the Classic Controller, but they also work fine with the Chainlink system. This is potentially a cheaper option than the full sensor kits (above), though keep in mind that you’ll need to order these accessories separately so it may not come out cheaper in the end: - hall effect sensor (e.g. AH3391Q from [Digi-Key](https://www.digikey.com/en/products/detail/diodes-incorporated/AH3391Q-P-B/6575197), or see [Appendix](#appendix-b-hall-effect-sensor-options) for alternatives) - 4mm round magnet (e.g. [Digi-Key](https://www.digikey.com/en/products/detail/radial-magnets-inc/9027/5218822)) - 3-pin right-angle pin headers (e.g. [Digi-Key](https://www.digikey.com/en/products/detail/sullins-connector-solutions/PREC003SBAN-M71RC/2774931)) - 300mm 3-pin “servo” male-to-male cable (e.g. [Amazon](https://amzn.to/3FdxP8K) (10 pack) [or, [non-affiliate link](https://www.amazon.com/VIMVIP-10pcs-300mm-Extension-Futaba/dp/B00N8OX7VO)], or [AliExpress](https://www.aliexpress.com/item/32800106648.html) (10 pack)) https://bezeklabs.etsy.com/listing/966380990/splitflap-sensor-pcb-set-bare **Option 3: Order PCBs directly, and order parts separately** Follow [these instructions](http://) for ordering the PCBs, and you’ll also need to order the parts (sensors, headers, magnets) mentioned in Option 2 above. # Order misc hardware **Note:** AliExpress listings have a tendency to change or disappear, or you may end up getting a different or inferior product even if you use the same product listing that has worked before (ask me how I know 🙁). These are *suggestions only* - they worked at one point but there is **no guarantee** you will get the same quality product when ordering again! Also, if you've never ordered from AliExpress before, keep in mind that most items will take 2-4 weeks to arrive; you can often find similar parts for a higher price on Amazon or ebay if you'd prefer faster shipping. **Shipping note:** I’ve had a series of bad experiences (completely lost orders) with Cainiao Super Economy. You also can’t file a dispute for a refund until ~90 days have passed and the item still hasn’t shown up. I recommend choosing AliExpress Standard Shipping instead (usually 2 weeks to the US and very reliable in my experience). Links with a ✅ have been used successfully in the past, links with a❓ have not been tried. Please comment inline below if you’ve used one of these links successfully or unsuccessfully and I’ll try to keep this updated. Amazon links are affiliate links, which help support the project at no cost to you, but if you’d prefer to avoid using affiliate links, I’ve included non-affiliate direct links as well. All items are selected completely independently of the affiliate program, and I do not accept sponsorships or payments to recommend certain products. | Item | Qty needed to build 6 modules | Link | Available from BezekLabs (US only) | Notes | | --------------------------------------------------------------------------- | ----------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | 12V 28BYJ-48 Stepper Motor | 6 | See [+28BYJ-48 Motor Buying Guide](../MotorGuide.md) | Yes (optional addition to Chainlink Driver orders) | There are unfortunately a lot of different motors sold under the same name, and it can be hard to find the right ones. See the [Motor Buying Guide](../MotorGuide.md) for more details. | | M4 x 10mm **ISO 7380** bolt | 66 | Stainless steel:
[AliExpress - JINGRUI Hardware](https://www.aliexpress.com/item/4000077840372.html) (20x per order, so order at least 3)❓

[AliExpress - JINGRUI Hardware](https://www.aliexpress.com/item/200pcs-ISO7380-Hexagon-Socket-Button-Head-Screws-M4-5-6-8-10-12-16-18-20/32823699185.html) (200x per order - way too many) ✅

[McMaster-Carr](https://www.mcmaster.com/92095A190/) (100x per order)

Black oxide:
[AliExpress - JINGRUI Hardware](https://www.aliexpress.com/item/32778146080.html) (50x per order)

[Fastenal](https://www.fastenal.com/products/details/1139900) (50x per order) ❓

SUGGESTIONS WELCOME - leave a comment here | No | ![](https://paper-attachments.dropboxusercontent.com/s_175A71EF755D30C645040845CEAC36F09A2519808F9780643CBAC746263B696C_1627681268542_image.png)


Make sure to get **ISO 7380** (button head) bolts - other bolt head shapes may be too large for the design (see low clearance in photo to the right).

Must be **10mm length**.


----------

I’ve had good experience ordering large quantities from JINGRUI Hardware on AliExpress - good shipping and communication, and definitely stainless steel (non-magnetic).

Fastenal has brick-and-mortar locations in the US if you’d rather pick up locally.

If using black oxide for aesthetic reasons, note that they tend to be oily/dirtier to work with and will not have the same corrosion resistance as stainless. | | M4 nut (hexagonal) | 66 | Stainless steel:
[AliExpress - JINGRUI Hardware](https://www.aliexpress.com/item/1005001493570161.html) (50x per order)❓

[AliExpress](https://www.aliexpress.com/item/Free-Shipping-1000pcs-Lot-Metric-Thread-DIN934-M4-304-Stainless-Steel-Hex-Nut-Hexagonal-Nut-Screw/32574679688.html) (1000x per order - way too many) ✅

[McMaster-Carr](https://www.mcmaster.com/91828A231/) (100x per order)

Black oxide:
[AliExpress - JINGRUI Hardware](https://www.aliexpress.com/item/1005001494639410.html) (50x per order) ✅

[Fastenal](https://www.fastenal.com/products/details/40146)❓

SUGGESTIONS WELCOME - leave a comment here | No | 11 nuts needed per module, so ordering a pack of 50 works well for 4 modules.


----------

I’ve had good experience ordering large quantities from JINGRUI Hardware on AliExpress - good shipping and communication, and definitely stainless steel (non-magnetic).

Fastenal has brick-and-mortar locations in the US if you’d rather pick up locally.

If using black oxide for aesthetic reasons, note that they tend to be oily/dirtier to work with and will not have the same corrosion resistance as stainless. | | Flap | 240 | Blank flaps: [Etsy](https://bezeklabs.etsy.com/listing/979720975/blank-splitflap-display-flaps) (240+ per order) ✅

~~Pre-printed flaps:~~ [~~Etsy~~](https://bezeklabs.etsy.com/listing/1119149706/splitflap-display-flaps-printed-last) ~~(40 per order) ✅~~

or purchase [PVC ID cards](https://www.amazon.com/CR80-Mil-Graphic-Quality-Cards/dp/B0045TD22A) and a [Badge Slot Punch](https://www.amazon.com/Badge-Punch-Puncher-Luggage-Credentials/dp/B0006M648E) then [build a cutting jig](../Flaps.md#31-build-a-flap-cutting-jig), and [create flaps yourself](../Flaps.md#32-cut-flaps) ✅ | 👈 Yes | I may be a bit biased, but I *highly* recommend purchasing the die-cut flaps on Etsy if you’re in the US - it’s much easier and they’re much higher quality than cutting them yourself, though they do cost more than doing it yourself.

If you’re in the US, message me on Etsy and I’ll send you a couple free samples.


- **Note (2023-12-12): I am sold out of my initial batch of PRINTED flaps**. I am working on an updated design, expected to launch in early 2024. If you are waiting for these new printed flaps, I would also recommend holding off on ordering the laser-cut parts for now too; the updated design will come alongside a refreshed mechanical design to support 52 flaps per module rather than 40 flaps per module. | | Letter Sticker Pack
(If using **blank flaps** or cutting flaps yourself) | 3 | [Amazon](https://amzn.to/3cvqfKB) ✅ [or, [non-affiliate](https://www.amazon.com/Duro-Decal-Permanent-Adhesive-Letters/dp/B0027601CM?) [link](https://www.amazon.com/Duro-Decal-Permanent-Adhesive-Letters/dp/B0027601CM)] | | Each pack contains 2 of every letter (and a bunch of spares of more common letters, which isn’t helpful for us here) | | 12V Power Supply | 1 | Many options on Amazon | | Each module requires about 0.25A, so **for a 6 module kit you should get a supply rated for at least 1.5A**. This will depend on the specific 28byj-48 motors you get; not all of them have the same resistance, and therefore may have different current requirements.

“CCTV” is a good search term for 12V supplies with the 2.1mm barrel jack connector | ---------- # Assemble v0.5/v0.6/v0.7 Splitflap Ready to assemble your display? See the [complete assembly instructions document](Assembly.md). ---------- # Appendix A: Older laser-cut file versions ## Older v0.6 Laser cut files Since v0.7 has breaking dimensional changes compared to v0.5/v0.6, the older v0.6 files are available for reference here in case you are expanding an existing v0.5/v0.6 display. For new builds, v0.7 or newer is recommended. **Ponoko** - 1 module - 3mm MDF: https://github.com/scottbez1/splitflap/releases/download/v0.6/v0.6_laser_vector_ponoko_mdf_1x.svg [178.6 x 173.33 mm] - 3mm Acrylic: https://github.com/scottbez1/splitflap/releases/download/v0.6/v0.6_laser_vector_ponoko_acrylic_0.08kerf_1x.svg [178.42 x 172.97] - 4 modules - 3mm MDF: https://github.com/scottbez1/splitflap/releases/download/v0.6/v0.6_laser_vector_ponoko_mdf_4x.svg [357.2 x 346.66 mm] - 3mm Acrylic: https://github.com/scottbez1/splitflap/releases/download/v0.6/v0.6_laser_vector_ponoko_acrylic_0.08kerf_4x.svg [356.84 x 345.94 mm] (Developer note: for legacy reasons, both MDF and Acrylic files are generated with design `thickness = 3.2`) **Elecrow** - 3mm wood: https://github.com/scottbez1/splitflap/releases/download/v0.6/v0.6_laser_vector_elecrow_wood_0.185kerf_1x.zip - 3mm acrylic: [not yet tested. If you try this, I’d recommend starting with the Ponoko 3mm acrylic file from above; let me know which file you used and how it turns out - under/oversized, etc and I will use that feedback to generate a recommended file in the future] ---------- # Appendix B: Hall effect sensor options It seems like the AH3391Q hall effect sensor is sometimes low on stock at digikey, so here are some alternatives I’ve tested that seemed to work ok. Make sure that you pick a **through-hole** package - you want a 3-SIP and **not** an SOT23 or other surface mount (SMT) model. **Cheap AliExpress Option** I’ve ordered a “3144” hall-effect sensor from one of the numerous stores on AliExpress that sells them, and it seems to work alright, despite there being no technical specifications nor datasheet available. It might be a knockoff of Allegro’s discontinued A3144? But who knows exactly what you’ll receive. It’s certainly cheap though! Note: there is an additional risk with an ESP32 or other 3.3v microcontroller; if these are indeed clones of the A3144, the datasheet indicates an acceptable voltage range of 4.5V-24V, so 3.3V operation may produce undefined results. Of course, since the real A3144 is discontinued and most sellers do not provide any datasheet at all, one could argue that *all* results are undefined regardless… 🤔 **Legitimate alternatives from DigiKey** I’ve personally tested each of these options and can confirm all will work. | **P/N** | **type** | **trip** | **release** | **notes** | | ----------- | -------------- | -------- | ----------- | ----------------------- | | AH3391Q-P-B | unipolar South | 275G | 250G | Works well, recommended | | AH3369Q-P-B | unipolar South | 175G | 150G | Works well | | AH3366Q-P-B | unipolar South | 100G | 85G | Works well | | AH3365Q-P-B | unipolar South | 100G | 80G | Works well | | A1122LUA-T | unipolar South | 150G | 125G | Works well | **Alternatives from LCSC** I’ve personally tested each of these options and can confirm all will work. | **P/N** | **type** | **trip** | **release** | **notes** | | ----------------------------------------------------------------------------------------- | -------------- | -------- | ----------- | ----------------------------------------------------------------------------------------------- | | [HX6286UA](https://lcsc.com/product-detail/Magnetic-Sensors_HUAXIN-HX6286UA_C495735.html) | unipolar South | 80G | 60G | Works well | | [HX3144UA](https://lcsc.com/product-detail/Magnetic-Sensors_HUAXIN-HX3144UA_C558879.html) | unipolar South | 80G | 60G | Works well. Interestingly the datasheet is identical (except part number) to HX6286UA… | | [SS443R](https://lcsc.com/product-detail/Magnetic-Sensors_Honeywell-SS443R_C396068.html) | unipolar South | 135G | 85G | Works well | | [CC6112TO](http://) | unipolar South | 40G | 30G | Works well. Trip point is a little lower than others (more sensitive to errant magnetic fields) | Beware that many other common/cheap hall-effect sensors may not work correctly in this application. Particularly, hall-effect sensors advertised as “low power” generally won’t work as they achieve the low power by sampling the sensor at a low duty cycle that can’t achieve the precision needed for a split-flap display. Similarly, beware of omnipolar hall-effect sensors and “latch” sensors. Omnipolar sensors *may* work, but because the magnet approaches the sensor laterally, there is a risk of a false activation before and after the magnet passes if the magnet is strong enough, due to the magnetic field’s curvature which may exceed the threshold in the *opposite* direction (see images below). Unipolar sensors do not have this problem because they can only be activated by one magnetic pole and not the other. ![When the magnet is directly in front of the sensor, the sensor detects a field in one direction (to the right in this example).](https://paper-attachments.dropbox.com/s_175A71EF755D30C645040845CEAC36F09A2519808F9780643CBAC746263B696C_1625192375466_magnet_field_lines_A.png) ![When the magnet is offset from the sensor, it may detect the (weaker) field in the opposite direction (to the left in this example). With an omnipolar sensor, this field may trigger the sensor a second time! Unipolar sensors are preferred because they will ignore magnetic fields in the wrong direction like this.](https://paper-attachments.dropbox.com/s_175A71EF755D30C645040845CEAC36F09A2519808F9780643CBAC746263B696C_1625192379404_magnet_field_lines_B.png) “Latch” type sensors almost certainly won’t work, as they remain activated until an equally strong magnetic field is applied in the opposite direction. ---------- ## Finding alternative parts on Digi-Key In case a suggested part is out of stock or discontinued, Digi-Key makes it relatively easy to sort through possible alternatives. Here’s an example searching for alternatives for [this part](https://www.digikey.com/en/products/detail/PPPC032LFBN-RC/S7106-ND/810243) which was out of stock previously: The "View Similar" section at the bottom of the part page is pretty useful. You can select the attributes that are critical (though this may be a bit tricky to decide when it's not your own design) and find other parts that match. So in this case I selected **Active** (meaning it's still actively being manufactured, which probably isn't actually critical for you, but I always select this when recommending parts just so it's less likely to end up permanently out of stock), **Female Socket**, **6 pins**, the same **0.1" spacing** and **through-hole** mounting, the same overall height (since this is plugging in as a shield), and **2 rows**. ![](https://paper-attachments.dropbox.com/s_175A71EF755D30C645040845CEAC36F09A2519808F9780643CBAC746263B696C_1639590473850_Screenshot+2021-07-23+112433.png) Then on the results page I enter quantity "1" so results are ordered by price at single quantities, along with In Stock and Exclude marketplace (which is 3rd party sellers and may result in separate shipping fees). ![](https://paper-attachments.dropbox.com/s_175A71EF755D30C645040845CEAC36F09A2519808F9780643CBAC746263B696C_1639590471321_Screenshot+2021-07-23+112504.png) After that it's always good to double-check the photo/datasheet to make sure it’s what you expect. # Appendix C: Legacy Classic Controller The Classic Controller is no longer recommended for new builds. The Chainlink System is preferred. ## Classic-specific hardware | | Qty needed to build 4 modules | Link | Notes | | ----------------------------------------------------------------------- | ----------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Arduino Uno | 1 | Many options on Amazon or AliExpress | (Only needed for Classic Controller) | | 12V 28BYJ-48 Stepper Motor | 4 | See [+28BYJ-48 Motor Buying Guide](../MotorGuide.md) | There are unfortunately a lot of different motors sold under the same name, and it can be hard to find the right ones. See the [Motor Buying Guide](../MotorGuide.md) for more details. | | M4 x 10mm **ISO 7380** bolt | 44 | Stainless steel:
[AliExpress - JINGRUI Hardware](https://www.aliexpress.com/item/4000077840372.html) (20x per order, so order at least 3)❓

[AliExpress - JINGRUI Hardware](https://www.aliexpress.com/item/200pcs-ISO7380-Hexagon-Socket-Button-Head-Screws-M4-5-6-8-10-12-16-18-20/32823699185.html) (200x per order - way too many) ✅

[McMaster-Carr](https://www.mcmaster.com/92095A190/) (100x per order)

Black oxide:
[AliExpress - JINGRUI Hardware](https://www.aliexpress.com/item/32778146080.html) (50x per order)

[Fastenal](https://www.fastenal.com/products/details/1139900) (50x per order) ❓

SUGGESTIONS WELCOME - leave a comment here | ![](https://paper-attachments.dropboxusercontent.com/s_175A71EF755D30C645040845CEAC36F09A2519808F9780643CBAC746263B696C_1627681268542_image.png)


Make sure to get **ISO 7380** (button head) bolts - other bolt head shapes may be too large for the design (see low clearance in photo to the right).

Must be **10mm length**.


----------

I’ve had good experience ordering large quantities from JINGRUI Hardware on AliExpress - good shipping and communication, and definitely stainless steel (non-magnetic).

Fastenal has brick-and-mortar locations in the US if you’d rather pick up locally.

If using black oxide for aesthetic reasons, note that they tend to be oily/dirtier to work with and will not have the same corrosion resistance as stainless. | | M4 nut (hexagonal) | 44 | Stainless steel:
[AliExpress - JINGRUI Hardware](https://www.aliexpress.com/item/1005001493570161.html) (50x per order)❓

[AliExpress](https://www.aliexpress.com/item/Free-Shipping-1000pcs-Lot-Metric-Thread-DIN934-M4-304-Stainless-Steel-Hex-Nut-Hexagonal-Nut-Screw/32574679688.html) (1000x per order - way too many) ✅

[McMaster-Carr](https://www.mcmaster.com/91828A231/) (100x per order)

Black oxide:
[AliExpress - JINGRUI Hardware](https://www.aliexpress.com/item/1005001494639410.html) (50x per order) ✅

[Fastenal](https://www.fastenal.com/products/details/40146)❓

SUGGESTIONS WELCOME - leave a comment here | 11 nuts needed per module, so ordering a pack of 50 works well for 4 modules.


----------

I’ve had good experience ordering large quantities from JINGRUI Hardware on AliExpress - good shipping and communication, and definitely stainless steel (non-magnetic).

Fastenal has brick-and-mortar locations in the US if you’d rather pick up locally.

If using black oxide for aesthetic reasons, note that they tend to be oily/dirtier to work with and will not have the same corrosion resistance as stainless. | | Flap | 160 | Blank flaps: [Etsy](https://www.etsy.com/listing/979720975/blank-splitflap-display-flaps) (160+ per order) ✅

Pre-printed flaps: [Etsy](https://www.etsy.com/listing/1119149706/splitflap-display-flaps-printed) (40+ per order) ✅

or purchase [PVC ID cards](https://www.amazon.com/CR80-Mil-Graphic-Quality-Cards/dp/B0045TD22A) and a [Badge Slot Punch](https://www.amazon.com/Badge-Punch-Puncher-Luggage-Credentials/dp/B0006M648E) then [build a cutting jig](../Flaps.md#31-build-a-flap-cutting-jig), and [create flaps yourself](../Flaps.md#32-cut-flaps) ✅ | I may be a bit biased, but I *highly* recommend purchasing the die-cut flaps on Etsy if you’re in the US - it’s much easier and they’re much higher quality than cutting them yourself, though they do cost more than doing it yourself.

If you’re in the US, message me on Etsy and I’ll send you a couple free samples. | | Letter Sticker Pack
(If using blank flaps or cutting flaps yourself) | 3 | [Amazon](https://amzn.to/3cvqfKB) ✅ [or, [non-affiliate](https://www.amazon.com/Duro-Decal-Permanent-Adhesive-Letters/dp/B0027601CM?) [link](https://www.amazon.com/Duro-Decal-Permanent-Adhesive-Letters/dp/B0027601CM)] | Each pack contains 2 of every letter (and a bunch of spares of more common letters, which isn’t helpful for us here) | | 12V Power Supply | 1 | Many options on Amazon | Each module requires about 0.25A, so **for a 4 module kit you should get a supply rated for at least 1A**. This will depend on the specific 28byj-48 motors you get; not all of them have the same resistance, and therefore may have different current requirements.

“CCTV” is a good search term for 12V supplies with the 2.1mm barrel jack connector | ## Order controller PCB (Classic) **Option 1: Purchase on Etsy (US shipping only)** Since you only need 1 control PCB for 4 modules, but most cheap PCB manufacturers sell a minimum of 10 boards (or at least have a high minimum shipping cost that makes small quantity orders somewhat expensive), I've made the controller PCBs available in single quantities in my Etsy store: https://www.etsy.com/listing/980030861/splitflap-classic-controller-pcb-bare If you're going to be making a bunch of splitflap modules and need many control boards, it may be cheaper for you to get the PCBs manufacred yourself; see below for details. **Option 2: Custom-order PCB from SeeedStudio, JLCPCB, etc** Generally it will cost ~$10-20 for shipping plus ~$5 for the PCBs (10 PCBs), with the order taking about 3-4 weeks to arrive. - Download the [zip file of gerbers](https://github.com/scottbez1/splitflap/releases/download/v0.5/pcb_gerber.zip) - (or choose the [zip of panelized gerbers](https://github.com/scottbez1/splitflap/releases/download/v0.5/pcb_panelized_gerber.zip) which includes 2 controllers per PCB, so you get 20 controllers from an order of “10” PCBs for the same $5 price, but shipping will likely be more expensive from the increased weight/size. Make sure to enter 96 x 96 as the dimensions instead of 48 x 96 when ordering!) - Go to [SeeedStudio](https://www.seeedstudio.com/fusion_pcb.html) - Click “Add Gerber Files” and select the zip file you just downloaded - You can click “Gerber Viewer” in the green box to preview the design and make sure SeeedStudio interpreted it correctly - Enter the settings below: ![](https://paper-attachments.dropboxusercontent.com/s_175A71EF755D30C645040845CEAC36F09A2519808F9780643CBAC746263B696C_1543801701066_Screenshot+from+2018-12-02+17-48-08.png) ## Order sensor PCBs ![](https://cdn.tindiemedia.com/images/resize/D5Ui32_szs97XWtsuGfp3h51Wno=/p/full-fit-in/2400x1600/i/334021/products/2018-09-08T16%3A10%3A57.088Z-DSC_2450.jpg) Sensor PCBs (breakout boards) make it easy to mount and adjust the hall-effect sensor on each module. They’re not *strictly* necessary, as you can attach the hall-effect sensors another way, but the PCBs are much nicer. | | Qty needed to build 4 modules | Link | Notes | | ----------------------------- | ----------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | 30cm Male-to-Male Servo Cable | 4 | [AliExpress](https://www.aliexpress.com/item/32800106648.html) (10x per order) ✅
[Amazon](https://amzn.to/3FdxP8K) (10x per order) ✅ [or, [non-affiliate link](https://www.amazon.com/VIMVIP-10pcs-300mm-Extension-Futaba/dp/B00N8OX7VO)] | Only need **ONE** order - each is 10 pieces | | Magnet 4mm diameter | 4 | [Digi-Key](https://www.digikey.com/en/products/detail/radial-magnets-inc/9027/5218822) ✅ | Most cheap 4mm diameter (1mm to 2.5mm thickness) neodymium magnets, e.g. from Amazon or AliExpress, will generally work fine.

These are included in the simplified BOM with the classic controller above, so you won’t need to order them separately if you use that. | **[Recommended] Option 1: Purchase on Etsy (US shipping only)** While you can order the sensor PCBs from your favorite PCB manufacturer (see below), you’ll likely end up with way more sensor PCBs than you need. As an alternative to paying for hundreds of PCBs when you only need a handful, I’m selling them in packs of 4 on Etsy: https://www.etsy.com/listing/966380990/splitflap-sensor-pcb-set-4x-bare **Option 2: Don’t use a sensor breakout PCB** If you'd like to mount the hall-effect sensor without a sensor PCB, you can do so by **swapping the 5V and GND pins of the servo cable** and then simply plugging the sensor into the cable's connector. ![Swap the red and black wires like this if you are not using a breakout PCB!!!!!!](https://pbs.twimg.com/media/DmTVjZUUYAAo6kJ.jpg:large) ![Tape it in place?](https://pbs.twimg.com/media/DmTVjoXVAAASQ_Z.jpg:large) **Option 3: Custom-order PCBs from SeeedStudio (large orders only)** If you’re familiar with ordering custom PCBs and plan to make a *lot* of split-flap modules, you can follow these directions to end up with 200(!!) sensor PCBs. The sensor PCB design is optimized for manufacture at SeeedStudio using their panelization rules (individual boards are separated by V-cut grooves), so these design files may not work out-of-the-box for other manufacturers. Generally it will cost ~$10-20 for shipping plus ~$5 for the PCBs (10 PCB panels, each with 20 sensor breakout boards for 200 total), with the order taking about 3-4 weeks to arrive. Since board manufacturing is a fixed price below 100x100mm and shipping doesn’t change much based on weight, it doesn’t really make sense to order non-panelized sensor PCBs from SeeedStudio since you’ll barely save money. ![](https://paper-attachments.dropboxusercontent.com/s_175A71EF755D30C645040845CEAC36F09A2519808F9780643CBAC746263B696C_1543799736438_Screenshot+from+2018-12-02+17-14-12.png) - Download the [zip file of gerbers](https://github.com/scottbez1/splitflap/releases/download/v0.5/sensor_pcb_gerber.zip) - Go to [SeeedStudio](https://www.seeedstudio.com/fusion_pcb.html) - Click “Add Gerber Files” and select the zip file you just downloaded - You can click “Gerber Viewer” in the green box to preview the design and make sure SeeedStudio interpreted it correctly - Enter the settings seen to the right → (click photo to expand) ## Order electronic components (Classic) **Note:** These instructions are designed to be easy to follow, but not necessarily the cheapest option. For more experienced hobbyists, I’d recommend closely comparing the BOM below to the raw BOM that’s auto-generated from the schematic (found [here](https://github.com/scottbez1/splitflap/releases/tag/v0.5)). The raw BOM includes notes on alternative sources for some items and some line items can be combined for a slightly cheaper order. You also may already have some components (like common resistors) and can omit those if desired. - Download this file: https://github.com/scottbez1/splitflap/releases/download/v0.5/bom_simplified_digikey.csv - Go to https://www.digikey.com/ordering/shoppingcart - Use the “Upload a File” option to upload the bom_simplified_digikey.csv file you downloaded above - For “First Part Record Begins On Row:” enter **2** - For each of the table headers, click to select “Quantity”, “Digi-Key Part Number”, and “Customer Reference” in that order - Click “Add to current cart” - You may see a message like “An improved value option is available. View Options” — this generally means it would actually be cheaper to buy a *higher quantity* of an item. Click **View Options** to see the proposed change, and then click Add if it looks good: ![](https://paper-attachments.dropboxusercontent.com/s_175A71EF755D30C645040845CEAC36F09A2519808F9780643CBAC746263B696C_1543777637600_Screenshot+from+2018-12-02+11-06-42.png) **Hall effect sensor options** If the recommended hall effect sensor is out of stock at Digi-Key, see the appendix for more info on selecting/ordering alternatives. ## Ordering expansion control boards (Classic) The control board design is chainable, and up to 3 control boards can be connected to a single Arduino (1 main board plus 2 expansion boards). Note: the original specified barrel jack is only rated for 2.5A but 3 boards would draw somewhere between 3-5A, exceeding the rating of a single connector. Consider using part number [839-1514-ND](https://www.digikey.com/product-detail/en/tensility-international-corp/54-00131/839-1514-ND/9685440) instead (rated for 6A and has the same footprint), or power each board individually (note that the ribbon cable connects 12V between boards via two wires which can be cut/disconnected, but GND is shared between 12V and 5V supplies and must remain connected between boards). The 2 expansion control boards use the same PCB as the primary control board, but have a few small changes to the bill-of-materials and assembly: | Change for controller boards 2 & 3 | Reference | Part number(s) | Explanation | | ---------------------------------- | --------- | ------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **ADD** | J1, J2 | S9170-ND (x2) | Expansion connectors - solder one to the “EXP. OUT” location on the **previous** board and one to the “EXP. IN” location on **this** expansion board. | | **ADD** | None | H3CCS-1418G-ND | Expansion ribbon cable | | **OMIT** | CON1 | CP-202A-ND | Barrel jack connector isn’t needed on expansion boards - power is transferred to expansion boards through ribbon cable, so they don’t need their own power connectors | | **OMIT** | JP1 | S1012EC-02-ND and S9337-ND | These are components used when plugging the PCB into an Arduino as a shield; the expansion boards don’t plug into an Arduino and instead get their data/power through the ribbon cable instead (see above) | | **OMIT** | U1 | S1012EC-03-ND, S1012EC-02-ND, and S7106-ND | These are components used when plugging the PCB into an Arduino as a shield; the expansion boards don’t plug into an Arduino and instead get their data/power through the ribbon cable instead (see above) | | **OMIT** | R9 | CF14JT470RCT-ND | 470 ohm resistor, related to Arduino connection (expansion boards don’t plug into an Arduino directly) | [End of Classic Controller ordering instructions] Jump to [Assembly](Assembly.md) ================================================ FILE: docs/v0/OrderingEasy.md ================================================ # Splitflap v0 Ordering (the “easy” route) [<< Back to Documentation Index](../DocumentationIndex.md) This is the “easy” way to order the parts for your splitflap display (United States only). It optimizes for *simplicity in ordering*, not the *lowest possible cost*. If you’d like to review other options, which could be somewhat cheaper, check out the [full ordering doc](OrderingComplete.md), but if that’s a little overwhelming, you’re in the right place here! If you have questions, ask in the [community Discord server](https://discord.gg/Hxnftc8PyW)! ## Laser-cut mechanical parts **Supplier:** [Ponoko](https://www.ponoko.com/) is recommended, though pricey. **Material:** MDF is more forgiving than Acrylic during assembly (Acrylic can be brittle and crack when fitting pieces together), though admittedly doesn't look as nice. For less potential frustration, I generally recommend MDF. For reference, the front face of each module is approximately **82.6mm wide** and **147.8mm tall**. - [ ] Use this file for each module, made of 3mm MDF: https://github.com/scottbez1/splitflap/releases/download/v0.7/3d_laser_vector-ponoko-3mm-mdf_1x.svg [177.42mm x 173.37mm] Full ordering instructions, and alternative files for acrylic are [here](OrderingComplete.md). ## Electronics **Supplier:** [Bezek Labs](https://bezeklabs.etsy.com) (yes, I’m biased in recommending my own store, but it really is the easiest purchasing option since these are custom boards and I also include all necessary accessories) - [ ] [Chainlink Driver v1.1](https://bezeklabs.etsy.com/listing/1123280069/splitflap-chainlink-driver-v11) (1 for every 6 modules) - Ribbon cable length: **45cm** - Add motors? **Yes, add 6x 28BYJ-48** - [ ] [Sensor kit (6x, with sensors, magnets, and headers)](https://bezeklabs.etsy.com/listing/1139795321/splitflap-sensor-kit-6x-with-sensors) (1 for every 6 modules) - Include cables? **YES** - [ ] [Chainlink Buddy [T-Display]](https://bezeklabs.etsy.com/listing/1109357786/splitflap-chainlink-buddy-t-display) (1 for your *entire* display, up to 36 total modules) - Include ESP32 T-Display Module: **YES** ## Flaps **Supplier:** [Bezek Labs](https://bezeklabs.etsy.com) (again, I’m biased, but there aren’t any commercial alternatives and making them yourself requires a lot of [time and patience](../Flaps.md#option-3-diy-flaps)) **Two good options** (this tradeoff is totally up to you): - [ ] [~~Pre-printed flaps~~](https://bezeklabs.etsy.com/listing/1119149706/splitflap-display-flaps-printed-last) ~~save a TON of time and look great, but are more expensive. 6-packs and 24-packs are available at a small discount. Only available with white text on a black card.~~ - **Note (2023-12-12): I am sold out of my initial batch of printed flaps**. I am working on an updated design, expected to launch in early 2024. If you are waiting for these new printed flaps, I would also recommend holding off on ordering the laser-cut parts for now too; the updated design will come alongside a refreshed mechanical design to support 52 flaps per module rather than 40 flaps per module. OR - [ ] You can buy blank flaps and [apply letter stickers to them yourself](https://www.youtube.com/watch?v=3lFECISLwyI) - [ ] [blank flaps](https://bezeklabs.etsy.com/listing/979720975/blank-splitflap-display-flaps) (sold in packs of 160 flaps for **4 modules**, or 240 flaps for **6 modules**) - [ ] [vinyl letter stickers](https://amzn.to/37Frsjb) (from Amazon). Blank flaps are available in white or black, and vinyl letter stickers are [available](https://amzn.to/3ieAZj9) in [many](https://amzn.to/37t1y1R) different [colors](https://amzn.to/3tk4Ddh). (1 sticker pack for every **2** modules) ## Hardware **Supplier:** McMaster-Carr (reliable, but somewhat pricey especially with shipping) or find these common items elsewhere - [ ] M4 x 10mm **button-head**. 11 bolts needed per module (so you’ll need at least 66x for 6 modules). Must be button-head style (e.g. taller socket-cap bolts will likely cause clearance issues) - [McMaster-Carr](https://www.mcmaster.com/92095A190/) pack of 100 - [ ] M4 hex nuts. 11 nuts needed per module (so you’ll need at least 66x for 6 modules) - [McMaster-Carr](https://www.mcmaster.com/91828A231/) pack of 100 ## Power supply and wiring **Supplier:** many options For 1-12 modules: - [ ] 22AWG wire for 3.3v power (gauge is not critical as this is low-current; solid wire is preferable to stranded for use with screw terminals) - [ ] 12V power supply capable of *at least* **1.5A for every 6 modules**, plus some margin. Searching for “12V CCTV” power supplies is a good way to find supplies that will have the correct barrel jack connector to plug into the Chainlink Buddy [T-Display]. - [ ] 20AWG (or larger diameter, depending on length & number of modules) wire for 12v power and ground OR, for 13-36 modules: - [ ] 22AWG wire for 3.3v power (gauge is not critical as this is low-current; solid wire is preferable to stranded for use with screw terminals) - [ ] 12V power supply capable of *at least* **1.5A for every 6 modules**, plus some margin. *You must connect the power supply to the screw terminals of the first Chainlink Driver* ***directly***. Do not use the Chainlink Buddy’s barrel jack connector with more than 12 modules, as it cannot handle the current requirements! - [ ] 16AWG (or larger diameter, depending on length & number of modules) wire for 12v power and ground OR, more than 36 modules: > [!WARNING] > Special considerations apply for displays with more than 36 modules! You must have a strong understanding of the limitations and risks involved with high-current DC power supplies, and should take all reasonable precautions to protect against damage/injury. Make sure to read the Chainlink Driver user guide for more info if you will be building a [large display](../ElectronicsGuide.md#Large-displays) with 36+ modules. ## That’s all! For instructions on assembly and setup of the Chainlink electronics, see the [Chainlink Driver Electronics User Guide](../ElectronicsGuide.md) ---------- Link disclosure: As an Amazon Associate I earn from qualifying purchases at no cost to you. ================================================ FILE: docs/v2/Assembly.md ================================================ # Splitflap v2 Assembly Guide [<< Back to Documentation Index](../DocumentationIndex.md) # Electronics Part 1: Sensor PCBs Start by removing the rails on the outside of the panel following the printed instructions, then snap apart the individual sensor boards. ![Snap off the rails](https://github.com/user-attachments/assets/7dc43abd-eb2d-48e1-9d75-38d7ca5307b9) ![Break apart the sensors](https://github.com/user-attachments/assets/94798594-3956-457c-9944-7eb908802c60) You’ll probably want to use some pliers to clean up the spacer segments that were between the sensor boards. ![](https://github.com/user-attachments/assets/aee4f950-1657-4ca8-9149-f547db5d1adc) ![](https://github.com/user-attachments/assets/6e6aa732-e3dc-48e1-977a-7d642bb4bb4c) Then insert the right-angle headers from the side with the pins labeled (and where “MOTOR” is visible). The pin headers should extend down past the bottom of the PCB. ![](https://github.com/user-attachments/assets/efd6e9ce-992e-4b58-9436-f1ccdfb29c41) Flip the PCB and solder the headers in place. ![](https://github.com/user-attachments/assets/42bd9cd7-ff77-44f4-9791-78984516ac6c) ![](https://github.com/user-attachments/assets/6c4da269-905a-43d9-9512-75a7c5b1bb0c) # Electronics Part 2: Chainlink Driver & Chainlink Buddy [T-Display] ## Assemble the Chainlink Driver PCB Insert and solder the connectors as shown. Note that both of the IDC connectors on the ends face the same way - notches facing left. ![](https://github.com/user-attachments/assets/3d87f0e8-7d29-4cd8-bdf9-094483b01335) Insert the ribbon cable into a connector as shown, and *gently* clamp shut with a vise or pliers. Repeat with the other connector on the opposite end, making sure that both connectors face the **same** way - notches facing left. ![](https://github.com/user-attachments/assets/0fb7ec7c-3cba-4c0e-96bf-d244130d39ed) (Not recommended, but you can optionally install the strain relief on the connectors: fold the ribbon cable back over the connector and install the plastic piece to clamp it down until it clicks. You’ll sacrifice some cable length and end up with a bulkier/taller connector, so I don’t think it’s worthwhile, especially since your cables shouldn’t be moving around much anyway.) ## Assemble the Chainlink Buddy Solder the connectors into place (make sure the IDC connector notch faces the left, as indicated on the PCB) **T-Display Buddy** ![](https://github.com/user-attachments/assets/c7f3a752-202c-4917-b93b-4c45519dcde2) ![](https://github.com/user-attachments/assets/919f9e2e-90d3-4ede-a640-c2ddf2db9ece) On the T-Display itself, you will solder the 2 rows of male headers (included in the box) to the T-Display, and then the whole module will plug into the matching female headers you soldered on the Buddy board. You may notice a few empty spaces in the lower left of the T-Display Buddy PCB labeled C1 and C2 along with 3 through-holes; don’t worry, those are optional components for an advanced build and are not needed for a basic setup. See [Standalone T-Display operation](../ElectronicsGuide.md#8-optional-standalone-t-display-operation) for more info. ![](https://paper-attachments.dropboxusercontent.com/s_BBABC117AF455DD9F0525297940CD25AF9A358008ED7FF73463824486BCF5E62_1647556549613_PXL_20220317_223022886.jpg) Note: the T-Display often comes with a small Red/Black wiring harness with connector as well; it cannot be used alongside the Chainlink Buddy and should be discarded. ![](https://github.com/user-attachments/assets/ca90d776-3e4b-4e59-9943-03f6655c3e4f) **Breadboard Buddy (alternative to T-Display Buddy)** If you’d prefer to use a different ESP32 module, you can use the Breadboard Buddy PCB to easily adapt the IDC cable to a breadboard. ![](https://github.com/user-attachments/assets/1bfc087c-02e9-4deb-a77f-ef73282977bc) ![](https://github.com/user-attachments/assets/03e3e7c4-720b-4a18-bee5-24193d3f922a) ## Connect Chainlink Driver to Chainlink Buddy We’ll start by connecting and testing just the Chainlink Driver, without connecting a power supply or any modules’ motors or sensors. We’ll add those later, after confirming that the basic electronics work. **T-Display** - Connect the ribbon cable from the Chainlink Buddy’s **Output** to the Chainlink Driver’s **Input** - Connect a wire from the Chainlink Driver’s “Logic 3.3-5V” screw terminal to the “3.3V” screw terminal on the Chainlink Buddy - Connect a wire from the Chainlink Driver’s “GND” screw terminal to the “GND” screw terminal on the Chainlink Buddy - Connect a wire from the Chainlink Driver’s “Motor 5-12v” screw terminal to the “12V” screw terminal on the Chainlink Buddy - ⚠️ Never connect a battery to the T-Display’s battery connector (small white connector on the bottom of the TTGO T-Display module) when using the Chainlink Buddy! ![](https://github.com/user-attachments/assets/a0b0708f-717e-4ff0-b01c-bba70b16b272) **Breadboard (if you’re not using the T-Display Buddy)** If you are using a different ESP32 module with the Breadboard Buddy rather than the T-Display Buddy, see the instructions in the full [Chainlink User Guide](../ElectronicsGuide.md). # Mechanical: Laser-cut Assembly ![](https://github.com/user-attachments/assets/9bc5850b-8e9e-46d7-a3f6-c01906b74ee5) ⚠️⚠️⚠️ If you used acrylic parts, DO NOT FORCE THEM together if they don’t fit immediately. The acrylic WILL shatter! Use a small jeweler’s file to shave down the parts as necessary. ⚠️⚠️⚠️ ## Flap drum Take an M4x10 bolt and nut and loosely assemble them on the spacer piece. Make sure the bolt can still spin somewhat freely. Set this aside. ![](https://github.com/user-attachments/assets/fd77c5ab-8d4d-42d8-95d3-cea81b99e7e2) Hold the 4 struts to form a box, with the stepped tab ends facing up… ![](https://github.com/user-attachments/assets/4847b5a0-da71-4129-9aea-e9091c4f5679) … and then place the spacer on top with bolt facing up/out. ![](https://github.com/user-attachments/assets/a62f36a4-c5bd-436a-8a0a-4e4f67cc2d94) Spin the bolt/nut combo to so the nut’s edges are parallel to 2 of the strut tabs, and then place the wheel with hexagonal center hole onto the end. ![](https://github.com/user-attachments/assets/b9b9e008-6d79-4ece-8595-e944ed243a9b) Then attach the other wheel to the other end’s tabs. You may need to hold the whole assembly together at this point if the laser-cut parts are a bit loose. ![](https://github.com/user-attachments/assets/86f69f9c-dc47-4a1a-9633-3a80c26a7526) I recommend using CA glue (with accelerator!) to permanently assemble the flap drum. My personal go-to glue is Bob Smith Industries thick CA glue ([paid affiliate link](https://amzn.to/3REVhEM), or use this [non-affiliate link](https://a.co/d/05jtD1j4)). Note: make sure you’ve installed the M4 nut+bolt earlier, as you won’t be able to install it after gluing! Apply a small dot of CA glue to each joint between the center struts and the wheel ends (8 dots in total). You will have 30 seconds to a minute of working time at this step. ![](https://github.com/user-attachments/assets/4bd48f69-88fd-4d32-8bef-19328aea3053) ![](https://github.com/user-attachments/assets/1fe7fdb8-ff59-4e99-88b7-1dcfb29301b8) If the assembly is somewhat loose, **make sure the wheel ends are not twisted**, as this will cause flaps to hang at an angle! See photo below for why this is problematic: ![❌ AVOID TWISTING THE DRUM WHEN GLUING IT! ❌ Although you’re not installing flaps quite yet, a twisted drum will eventually look like this — flaps hang at an angle and may bind up against the sides of the front window!!!](https://github.com/user-attachments/assets/d6641b01-5fa4-41ab-8741-06416aae5fdb) When the drum is fully assembled and you’ve ensured it’s not twisted, spray CA accelerator to quickly lock the glue in place. If the parts are particularly loose, you may want to hold the assembly together with gloved hands while you spray CA accelerator. ![](https://github.com/user-attachments/assets/de5e5030-7959-44a6-9b84-423ec60a67c3) 💡 **Important CA glue tip:** If you don’t use accelerator, you’ll likely end up with a white haze or residue all over the acrylic parts — this is caused by small amounts of CA glue vaporizing and curing with the moisture in the air, which then gets deposited onto your parts (and surrounding table, computer, etc!) to make a permanent white-ish haze. I’ve never had issues with CA haze/fogging when using Bob Smith Industries glue with the included accelerator spray, which is why I recommend it! ([paid affiliate link](https://amzn.to/3REVhEM), or use this [non-affiliate link](https://a.co/d/05jtD1j4)) After waiting a few minutes for the accelerated CA glue to cure, use an allen key to tighten the internal M4 bolt and lock it in place. ![](https://github.com/user-attachments/assets/f8bb0357-8065-4b66-9b64-a7e8ee6cf0b6) ## Motor + Sensor + Left enclosure Take the wider of the side enclosure pieces (with a rounded rectangular hole cut out of the middle) and insert the motor’s cable through the hole in the orientation shown below. ![](https://github.com/user-attachments/assets/144d1159-13ce-48f2-86d8-3efec033a412) ![](https://github.com/user-attachments/assets/e3d7fa5d-a40b-49e1-a414-b9a280abca51) Then place the sensor PCB over the motor, and insert 2 M4x10 bolts into the motor mount holes. ![](https://github.com/user-attachments/assets/587dc552-79e4-4975-9429-f4506a779b25) ![](https://github.com/user-attachments/assets/dde753a1-1041-410c-a4b9-fa8bd5addea8) Flip the assembly over and start threading a nut onto each bolt, then use an allen key to finish tightening the nuts. ![](https://github.com/user-attachments/assets/1fbec3b4-64bb-4268-ae60-594752cdfd14) ![](https://github.com/user-attachments/assets/5a0c872e-00eb-49ec-969f-a85f7dcb1061) ![](https://github.com/user-attachments/assets/a70ff55a-27eb-4ce8-9be8-03ba09edd3a4) ## Magnet Next we’ll install the magnet into the flap drum. The orientation of the magnet is critical, as the sensor only works with one pole of the magnet and not the other! Luckily we can use the LED on the sensor PCB to help determine the right way to install the magnet. Plug the sensor into your Chainlink Driver, and connect the Chainlink Driver to your ESP32/Chainlink Buddy, ensuring you’ve connected the 3.3v logic power screw terminals. ![](https://github.com/user-attachments/assets/2802c27b-cd9c-459d-93fd-7bd0f1095242) When you hold up the magnet, the LED should light for one side of the magnet and not the other. ![The LED on the sensor PCB will light when the magnet is in the correct orientation](https://github.com/user-attachments/assets/a9dca1d9-0d0e-4b3e-807e-55e92aefe5ef) > The LED on the sensor PCB will light when the magnet is in the correct orientation ![This is the wrong orientation - the LED is not lit](https://github.com/user-attachments/assets/9c89b987-2ebd-4904-8152-f4ea99b88fc0) > This is the wrong orientation - the LED is not lit Install the magnet into the flap drum in the orientation that caused the LED to light. I’ve found that attaching the magnet to one jaw of a set of pliers and then **gently** pressing it into the flap drum works well — DO NOT FORCE IT if it requires more than a tiny bit of pressure, as you will crack the acylic; use a file to widen the hole and then try again. ![Magnet stuck to pliers in correct orientation](https://github.com/user-attachments/assets/940501ef-9e59-4789-87be-1ad323f771f9) ![Gently pressing until flush](https://github.com/user-attachments/assets/fed6cdb1-7a86-4679-85a3-1ba4b206bc51) ![Installed magnet](https://github.com/user-attachments/assets/a1896f2b-16a1-49f2-847b-af04b27345c7) Double-check you got the magnet orientation correct when installing the flap drum onto the motor. Again, it should gently press-fit onto the motor shaft; use a file to widen the hole first if it requires too much force to press into place. ![](https://github.com/user-attachments/assets/5743c10b-63c1-45f6-89cc-bb294c631519) If the magnet is a little loose, you can add a drop of CA glue on the back side (from the inside of the drum) to lock it in place. ## Top/Bottom/Right Enclosure Pieces The top and bottom pieces are interchangeable with each other. Find the matching tabs and slots of the top piece and the left side (with the motor)… ![](https://github.com/user-attachments/assets/d62908ee-4559-40ad-9908-14d165833c11) … insert a nut into the notch in the top piece (I like to support it from behind with a finger as shown below) and screw in an M4x10 bolt to connect the pieces. ![](https://github.com/user-attachments/assets/0bdd09cc-ffc7-4987-9717-bf83afc7f62c) Repeat that process with the bottom piece, and then attach the right side piece as well. Before installing the front face, insert the M4x10 flap backstop bolt in the middle of the slot on the right side piece and secure in place with a nut. You can fine-tune the position later if desired, but the middle is usually a good starting point. ![Place the backstop bolt in the center of its slot to start](https://github.com/user-attachments/assets/ff1fa112-db3c-42f6-8aad-2a73d22f0481) Place the backstop bolt in the center of its slot to start ![Flap backstop bolt sticks in towards the middle of the module](https://github.com/user-attachments/assets/05b6a470-f6fd-4594-9c1b-445c6fbd735d) Flap backstop bolt sticks in towards the middle of the module Now attach the front face using M4 bolts/nuts to secure it to the top and bottom pieces. ![](https://github.com/user-attachments/assets/ffa5ab54-01f5-47f9-bc1a-7660309deaa5) ## Installing flaps Now you can install the flaps. The first flap you install should be blank and the bottom half of the letter “A”. ![](https://github.com/user-attachments/assets/64c6464c-8fd1-401d-98f0-33bb0e2f26b1) Install the first flap into the position shown below — 90 degrees “ahead” of the magnet on the flap drum. (this position technically isn’t critical since the home position is software-calibrated later, but it’s a nice convention to keep the modules consistent with each other) ![](https://github.com/user-attachments/assets/f07657e3-4ea5-4ef0-93bb-16fd3e7befe7) To install a flap, let it rest between your index and middle fingers, and press on the middle with your thumb to bend the flap. Insert one of the flap’s pins into the flap drum, then carefully align the other pin and gently release pressure from your thumb to insert the second pin as the flap unbends. ![Gently bend the flap to insert it](https://github.com/user-attachments/assets/1f73f79f-cba4-466a-91da-10aa7d61e9e3) > Gently bend the flap to insert it Repeat with the next 51 flaps, making sure to confirm the ordering as you do so. ![](https://github.com/user-attachments/assets/93e0a8a1-47ae-461b-961b-c38ece7434bc) # Firmware - Download and install [Microsoft Visual Studio Code](https://code.visualstudio.com/) - Follow these steps to set up Platform IO and the splitflap code: - Install the Platform IO extension - Choose “Clone Respository” in the Explorer sidebar and enter the git repo URL: `https://github.com/scottbez1/splitflap.git` - Once it's done cloning, select the option to open it - You may need to choose to “Trust” the folder to allow the Platform IO extension to run. You’ll need to configure NUM_MODULES in `platformio.ini` to match the number of modules supported by the Chainlink Drivers you have connected. So for a single Chainlink Driver, set it to 6. [env:chainlink] extends=esp32base build_flags = ${esp32base.build_flags} -DCHAINLINK -DNUM_MODULES=6 - Mac Users: you will likely need to install updated drivers for the CH9102 USB-serial adapter used on newer versions of the ESP32 T-Display: https://learn.adafruit.com/how-to-install-drivers-for-wch-usb-to-serial-chips-ch9102f-ch9102/mac-driver-installation - To upload code to the ESP32 T-Display from VS Code, you’ll need to (see screenshot below): > 1) Open the Platform IO sidebar (click the alien icon on the left) > 2) Click the “env” button at the bottom of the window and then in the dropdown at the top of the screen… > 3) …select “env:chainlink” as the environment - this will set up code completion and syntax highlighting for the ESP32 > 4) in the Platform IO sidebar, expand the “General” section, and click `Upload and Monitor` ![](https://github.com/user-attachments/assets/a05ff348-9ac6-4e99-9ea6-8f27750397d9) - If you reset the ESP32, you should see the LEDs on the Chainlink Drivers blink quickly and a message in the serial monitor that loopbacks are ok. If you see a loopback error message, troubleshoot that before continuing. ## Connect modules and power **Motors** - Plug into the white connectors. Note that module connections are laid out from *right-to-left* since the Chainlink Driver PCB is intended to sit *behind* the modules, so the first module plugs into position “A” on the **right** side of the PCB **Sensors** ![](https://github.com/user-attachments/assets/fe742b01-ac38-499c-9a66-9c0df9da36a6) - Plug sensor cable into corresponding 3-pin header - Ground (black) should be on the left, labeled “-” - Signal (usually white or yellow) should be on the right (toward the “Input” side), labeled “S” ## **Power** The ESP32 and 3.3v electronics on the Chainlink Drivers are typically powered by the USB connection to a computer. 12V power for the motors is supplied via a separate power supply. > Note: avoid turning on 12V power when the ESP32 is not running! Doing so could damage your motors or worse, as the motor coils could be "stuck on" if the ESP32 is not running. **T-Display** - You can plug a DC 12v barrel jack into the T-Display Buddy when using 1 or 2 Chainlink Drivers for up to 12 modules. - ⚠️ For more than 2 Chainlink Drivers, the barrel jack **cannot handle enough current**, so you should instead connect your power supply directly to the Motor Power terminals of the first Chainlink Driver. Make sure you are using the [appropriate wire gauge](../ElectronicsGuide.md#power-supply-tips), and [never chain power to more than 6 Chainlink Drivers](../ElectronicsGuide.md#large-displays) https://www.dropbox.com/s/4xpvtycwrw21g0e/chainlinkBuddyWiringv1.1.pdf?dl=0 **Breadboard** - Connect your power supply directly to the Motor Power terminals of the first Chainlink Driver. Make sure you are using the [appropriate wire gauge](../ElectronicsGuide.md#power-supply-tips), and [never chain power to more than 6 Chainlink Drivers](../ElectronicsGuide.md#large-displays) For further wiring info, see the full [Chainlink User Guide](../ElectronicsGuide.md). # Initial Setup & Calibration - Turn on your 12V supply and plug the ESP32 into your computer. - You should see the modules start to find their home positions. - If none of modules move, try restarting the ESP32. If they still don’t move, turn off your 12V supply and see the [troubleshooting section](#troubleshooting) - In Chrome or Edge (unfortunately Firefox will not work, as of 2024-10-05), go to https://scottbez1.github.io/splitflap/ and connect to your display via Web Serial - If a module is showing as an orange square, you should first try re-homing the module by left-clicking it. You should see the module spin and find its home position. If this does not resolve the sensor error, see the [troubleshooting section](#troubleshooting) - Right-click a module to open the calibration flow, and follow the instructions to complete calibration. Save the calibration before continuing to calibrate the other modules. - If saving the calibration fails, see the [troubleshooting section](#troubleshooting) https://www.dropbox.com/scl/fi/aqilx2zk5q8ic1kwi2ki7/PXL_20240330_182017129.TS.mp4?rlkey=im0qr2vuhdlxhmnnzx7f57r09&dl=0 # Troubleshooting - Modules don’t move at all when the ESP32 and 12V supply are turned on - Troubleshooting steps: - Run the “Monitor” PlatformIO action in VSCode and then press the reset button on the ESP32. You want to see a message like `{"type":"init", "num_modules":6}` and not any messages about loopback errors (see section below if you do see a `Loopback ERROR`) - Make sure your screw terminals are securely clamped onto the appropriate wires - Use a voltmeter to confirm that there is 11-13V measured between the Motor and GND screw terminals on each Chainlink Driver board - Saving module calibration fails - Symptoms: `Failed to open config file` or `Failed to mount FFat` messages when saving calibration - Troubleshooting steps: - In VSCode, use the PlatformIO action to erase the flash on your ESP32, then re-upload the firmware and try calibration again - Bad chainlink data signal - `Loopback ERROR` - Symptoms: `Loopback ERROR` log message. This means the control signals to the motors or from the sensors are not working along the chain of Chainlink Driver boards. - Troubleshooting steps: - Check all of your solder joints, especially those on the IDC connectors, to make sure they are solid and not bridged - Make sure the IDC ribbon cable connectors are fully clamped onto the ribbon cables - Check all of the screw terminals are securely clamped onto the appropriate wires - Make sure the NUM_MODULES variable in platformio.ini (under the `env:chainlink` section) is set to 6 times the number of Chainlink Drivers you have connected - Press the reset button on the ESP32 and confirm that the red LEDs on the Chainlink Drivers each flash sequentially once if you have questions not covered here, please reach out in the [splitflap Discord server](#troubleshootings). ---------- Link disclosure: As an Amazon Associate I earn from qualifying purchases at no cost to you. (I’ve also chosen to include non-affiliate links next to every affiliate link should you prefer to avoid using affiliate links) ================================================ FILE: docs/v2/OrderingComplete.md ================================================ # Splitflap v2 Comprehensive Ordering Guide [<< Back to Documentation Index](../DocumentationIndex.md) The instructions below will walk you through ordering all the parts (excluding common tools) needed to build a splitflap v2 display with **6 modules** using the latest Chainlink electronics. Ready to assemble? Jump ahead to the [Assembly Guide](Assembly.md) If you have any questions, please feel free to reach out to me (scott@bezeklabs.com). Or, join the [Discord server](https://discord.gg/wgehm3PcrC), to discuss or ask questions from the wider split-flap community! 😩 Feeling overwhelmed by this document? I don’t blame you, there’s a LOT here… So I put together a much shorter document that favors simplicity over comprehensiveness/lowest-cost, for people in the US: [+Splitflap Ordering (the “easy” route)](OrderingEasy.md) 1. [Order laser-cut parts](#order-laser-cut-parts) 3. [Order electronics](#order-electronics) 2. [Order hardware](#order-misc-hardware) ---------- # Order laser-cut parts There are many places you can get laser-cut parts, but I’ve personally used Ponoko and Elecrow for ordering shipped to the US with an easy online-only process. I’ve previously recommended ordering from Ponoko - and while I still believe they have great quality and customer service so you'll get a great product, they’ve gotten too expensive to be my default recommendation any longer 😞 For advanced makers: if you want to cut a single front panel that will be shared by an entire row (or grid) of modules, there is a script to do so with lots of configurable options like spacing, rows/cols, and even has a mode for generating geometry for CNC routing with necessary “dog-bones” applied to inside corners — see `generate_combined_front_panel.py` 💡 Note: v2 laser-cut parts are not dimensionally compatible with older v0 modules! If you’re extending an older display, make sure to use the older files (see the v0 [ordering instruction](../v0/OrderingComplete.md)) ## Elecrow (recommended) - Download the appropriate file: - 52-flap design - 3mm acrylic - Download [zip](https://s3.amazonaws.com/splitflap-artifacts/refs/tags/releases/mechanics/v2/3d/3d_laser_vector-52-elecrow-3mm-acrylic_1x.zip) - Go to [Elecrow acrylic laser cutting](https://www.elecrow.com/acrylic-cutting.html) and upload the zip file - Enter dimensions: - Select thickness: 3mm - Engrave: No - Acrylic color: Matte Black (P502) is recommended - 3mm wood - Download [zip](https://s3.amazonaws.com/splitflap-artifacts/refs/tags/releases/mechanics/v2/3d/3d_laser_vector-52-elecrow-3mm-wood_1x.zip) - Go to [Elecrow wood laser cutting](https://www.elecrow.com/5pcs-wood-laser-cutting-service.html) - Dimension: 20cm Max * 20cm Max(Thickness: 3mm) - 40-flap design - 3mm acrylic - Download [zip](https://s3.amazonaws.com/splitflap-artifacts/refs/tags/releases/mechanics/v2/3d/3d_laser_vector-40-elecrow-3mm-acrylic_1x.zip) - Go to [Elecrow acrylic laser cutting](https://www.elecrow.com/acrylic-cutting.html) and upload the zip file - Enter dimensions: - Select thickness: 3mm - Engrave: No - Acrylic color: Matte Black (P502) is recommended - 3mm wood - Download [zip](https://s3.amazonaws.com/splitflap-artifacts/refs/tags/releases/mechanics/v2/3d/3d_laser_vector-40-elecrow-3mm-wood_1x.zip) - Go to [Elecrow wood laser cutting](https://www.elecrow.com/5pcs-wood-laser-cutting-service.html) - Dimension: 20cm Max * 20cm Max(Thickness: 3mm) ![](img/elecrow_acrylic.png) ![](https://paper-attachments.dropbox.com/s_175A71EF755D30C645040845CEAC36F09A2519808F9780643CBAC746263B696C_1592618387746_Screenshot+from+2020-06-19+18-59-27.png) ## Ponoko (also recommended, but pricey) - Download the appropriate file - 52-flap design - 3mm Acrylic: [svg](https://s3.amazonaws.com/splitflap-artifacts/refs/tags/releases/mechanics/v2/3d/3d_laser_vector-52-ponoko-3mm-acrylic_1x.svg) - 3mm MDF: [svg](https://s3.amazonaws.com/splitflap-artifacts/refs/tags/releases/mechanics/v2/3d/3d_laser_vector-52-ponoko-3mm-mdf_1x.svg) - 40-flap design - 3mm Acrylic: [svg](https://s3.amazonaws.com/splitflap-artifacts/refs/tags/releases/mechanics/v2/3d/3d_laser_vector-40-ponoko-3mm-acrylic_1x.svg) - 3mm MDF: [svg](https://s3.amazonaws.com/splitflap-artifacts/refs/tags/releases/mechanics/v2/3d/3d_laser_vector-40-ponoko-3mm-mdf_1x.svg) - Go to [Ponoko](https://www.ponoko.com/) and sign up for an account. - [Upload](https://www.ponoko.com/designs) the SVG file from above. Confirm the dimensions match the values above, and check that blue lines are set for “Cutting” and black fill is set for “Area Engraving” (or turn this off to skip engraved features) ![](https://paper-attachments.dropbox.com/s_175A71EF755D30C645040845CEAC36F09A2519808F9780643CBAC746263B696C_1590128918128_Screenshot+from+2020-05-21+23-28-11.png) - Select a material - [MDF](https://www.ponoko.com/materials/mdf-fiberboard) or [Acrylic](https://www.ponoko.com/materials/black-matte-acrylic) are recommended — choose 3.0mm (0.12 inches) thickness. Make sure to check the material’s maximum size against the dimensions provided next to the file links above; some materials may be too small to order the 4x versions. 💡 **Important note if ordering Matte 1-Side acrylic at Ponoko:** you ***must*** immediately send special instructions to Ponoko after placing your order, requesting to have the design engraved on the *glossy* side. This will result in the design being correctly cut so the matte surface will be on the exterior of the display when assembled. From Ponoko support (as of 2021-05-13): > The matte is [by default] cut with the matte side up (so engraving happens on this side as well). > > If you would like to place an order and have us engrave on the glossy side, just **reply to the order confirmation page** with your request and we'll be sure to make note in the order details. ---------- # Order electronics The Chainlink system is a newer electronics system based around the more powerful ESP32 microcontroller (which adds things like wifi support) and incorporates learnings from the earlier Classic Controller. New development is focused on the Chainlink system. The basic pieces that you’ll need for a Chainlink system: - **Chainlink Driver board** (1 for every 6 split-flap modules you want to control) - **Chainlink Buddy** + **ESP32** (1 for the whole display, regardless of size) - **Sensors** (1 for every split-flap module) The easiest and best-supported approach is to purchase each of those items from the Bezek Labs Etsy store (US only) - I’ve set up the store so that items comes with the necessary accessories, meaning there are fewer things you need to track down and purchase separately from different suppliers. Proceeds also help fund continued development of the project! 💡 See the [Chainlink User Guide](../ElectronicsGuide.md) for more info about different configurations. ## Order Chainlink Driver ![](https://paper-attachments.dropbox.com/s_175A71EF755D30C645040845CEAC36F09A2519808F9780643CBAC746263B696C_1639441358230_DSC_4991_s.jpg) The Chainlink Driver is what drives up to 6 split-flap modules. Multiple Chainlink Drivers can be chained (hence the name!) to create much larger displays (I have created a 108-module display using 18 Chainlink Driver boards). The Chainlink Driver uses mostly surface-mount components so it’s optimized for factory production moreso than hand-soldering (though you can of course do that if you’d like) [**Recommended] Option 1: Purchase fully-tested PCBA on Etsy (US shipping only)** I sell mostly-pre-assembled [Chainlink Driver boards in the Bezek Labs Etsy store](https://bezeklabs.etsy.com/listing/1123280069/splitflap-chainlink-driver-v11) (includes accessories: connectors, ribbon cable) These have all the tricky surface-mount components already soldered for you. You’ll just need to solder the through-hole connectors, which are pretty easy. Every single board that I sell goes through a rigorous 100% functionality test which validates every single motor output, sensor input, LED, and data line works as expected, using a custom test jig I developed. This option also includes all the connectors and ribbon cable you’ll need, so you don’t need to order anything separately! And, if you want to make sure you get the right 28byj-48 motors instead of just ordering on AliExpress and hoping for the best, I’ve added an option on Etsy to include 6x motors with your Chainlink Driver order! Yes, they’re more expensive than ordering on AliExpress directly, but they’ll ship quickly and you’ll know you’re getting good motors. **Option 2: Purchase assembled Chainlink Driver from JLCPCB, and purchase connectors and ribbon cable separately** The Chainlink Driver design is optimized for JLCPCB assembly, so it’s mostly a drag-and-drop process, but you’ll need to carefully understand the options you select. Most importantly, if JLCPCB is out of stock of a component, *they will continue to build your order and simply omit that component!* So be careful to check all warnings or notices that appear when ordering. Note that JLCPCB assembly involves a number of fixed costs (such as $3 per unique part, and shipping fees) which make larger quantities a better value. Download the following 3 items from the latest Chainlink Driver release (v1.1): - gerber files (for the PCB) - BOM (specifies which components are needed for assembly) - CPL (specifies placement locations for components) To order: ![](https://paper-attachments.dropbox.com/s_175A71EF755D30C645040845CEAC36F09A2519808F9780643CBAC746263B696C_1639444226661_image.png) - Go to JLCPCB https://cart.jlcpcb.com/quote - Upload gerber zip - Select your quantity, PCB color - Confirm other parameters: - Dimensions: (accept auto-generated dimensions, which will likely be 30.48 x 198.12) - PCB Thickness: 1.6 - Outer Copper Weight: 1oz ![](https://paper-attachments.dropbox.com/s_175A71EF755D30C645040845CEAC36F09A2519808F9780643CBAC746263B696C_1639444258704_image.png) - Select SMT Assembly - Assemble top side - Select your quantity to assemble - Tooling holes: select **Added by Customer** (these are included in the design already, so you do not need JLC to add them) - Confirm ![](https://paper-attachments.dropbox.com/s_175A71EF755D30C645040845CEAC36F09A2519808F9780643CBAC746263B696C_1639444326379_image.png) - Upload BOM File - Upload CPL (csv) file ![](https://paper-attachments.dropbox.com/s_175A71EF755D30C645040845CEAC36F09A2519808F9780643CBAC746263B696C_1639444544494_image.png) - Review parts - ⚠️ Make sure you check this step carefully, as any parts that are out of stock will simply be omitted! ⚠️ - “No part selected” is *normal* for several connectors that will not be assembled by JLCPCB (see below) - these will be “J”-prefixed designators such as “Motor A”, “Sensor C”, or “Input” or “Output” - Review parts placement - Save to Cart - Checkout (note that JLC does NOT reserve parts until you’ve checked out and paid your order, so if stock is low there is a chance parts will be missing if you wait to pay!) If you wish to hand-assemble some of the through-hole connectors rather than having JLCPCB assemble them for you, you can unselect these components when placing your order, then order and assemble them yourself: - 2x IDC shrouded connectors, 2x4, 2.54mm spacing, e.g. JLC/LCSC [C601937](https://lcsc.com/product-detail/IDC-Connectors_JILN-321008SG0ABK00A01_C601937.html), or on [Digi-Key](https://www.digikey.com/en/products/detail/adam-tech/BHR-08-VUA/9832409) - 6x JST XH 5 pin connectors, e.g JLC/LCSC [C161872](https://lcsc.com/product-detail/Wire-To-Board-Wire-To-Wire-Connector_JST-Sales-America-B5B-XH-AM-LF-SN_C161872.html). or [C378947](https://lcsc.com/product-detail/Wire-To-Board-Wire-To-Wire-Connector_JST-Sales-America-B5B-XH-A-BK-LF-SN_C378947.html), or LCSC [C157991](https://lcsc.com/product-detail/Wire-To-Board-Wire-To-Wire-Connector_JST-Sales-America-B5B-XH-A-LF-SN_C157991.html), or on [Digi-Key](https://www.digikey.com/en/products/detail/jst-sales-america-inc/B5B-XH-AM-LF-SN/1651037) - 6x 3-pin male headers, 2.54mm spacing, e.g. JLC/LCSC [C49257](http://), or on Digi-Key [3-pin](https://www.digikey.com/en/products/detail/sullins-connector-solutions/PREC003SAAN-RC/2774851) or purchase [40-pin](https://www.digikey.com/en/products/detail/sullins-connector-solutions/PREC040SAAN-RC/2774814) and break apart, (or readily available in bulk on Amazon, etc) In order to connect your Chainlink Driver to your microcontroller (or to another Chainlink Driver in a chain), you’ll also need an IDC ribbon cable + connectors: - 1x 8 conductor 1.27mm spacing ribbon cable (45cm recommended minimum length for chaining), [e.g. on Digi-Key](https://www.digikey.com/en/products/detail/w%C3%BCrth-elektronik/63910815521CAB/8324550) - 2x IDC cable connectors, e.g. LCSC [C601910](https://lcsc.com/product-detail/IDC-Connectors_JILN-531408YBS0BW01_C601910.html), or on [Digi-Key](https://www.digikey.com/en/products/detail/adam-tech/FCS-08-SG/9832361) - You could alternatively look for an assembled 8P IDC cable on e.g. Amazon, though make sure it's a straight-through cable (i.e. notches on the connectors both face the same way) You may get an email from JLCPCB after placing your order, asking to double-check the orientation of the screw terminals. See images below for the correct orientation: the wires would go *over* the Power labels on the PCB to be inserted into the front of the screw terminals. ![✅ 3d model of the design with CORRECT screw terminal orientation](https://paper-attachments.dropbox.com/s_175A71EF755D30C645040845CEAC36F09A2519808F9780643CBAC746263B696C_1639550660519_image.png) ![✅ Confirmation email from JLCPCB, showing CORRECT screw terminal orientation. If the image they send you looks like this, go ahead and confirm it!](https://paper-attachments.dropbox.com/s_175A71EF755D30C645040845CEAC36F09A2519808F9780643CBAC746263B696C_1639550557063_image.png) ![🚫 INCORRECT: If it looks like this, it’s facing the WRONG way!](https://paper-attachments.dropbox.com/s_175A71EF755D30C645040845CEAC36F09A2519808F9780643CBAC746263B696C_1639551191137_chainlinkBadScrewTerminalOrientation.png) **Option 3: Purchase bare PCB, components, and hand-assemble** This is an advanced option which will require hand-soldering surface mount components. While the components aren’t tiny (ICs are SOIC packages and passives are 0603), it will require some skill and patience. You might also consider ordering a stencil and reflow soldering the components yourself. However, be aware that the PCB is long and thin so it is prone to warping when heated, so you may have difficulty if you plan to use a hot plate rather than an oven. Follow the instructions from Option 2 above for ordering the PCBs, and instead of selecting assembly, you can use the BOM file to order all the components yourself. The BOM file uses LCSC part numbers. ## Order Chainlink Buddy and ESP32 You’ll connect your ESP32 microcontroller to the first Chainlink Driver in the chain. The best way to do this is with one of the available Chainlink “Buddy” boards, which allow you to plug in the IDC/ribbon cable directly. Many different ESP32 modules exist, and most of them should be compatible (as long as they are dual-core), but I strongly recommend the TTGO T-Display (on [Amazon](https://amzn.to/3kHwhMm) for quick shipping [affiliate links help support this project at no cost to you, or use a [non-affiliate link](https://www.amazon.com/LILYGO-T-Display-Arduino-Development-CH9102F/dp/B099MPFJ9M) if you’d prefer], or [AliExpress](http://) if you don’t mind waiting). It includes a 240x135 LCD that the splitflap firmware supports out of the box, which can be very useful for debugging. **Chainlink Buddy [T-Display]** ![](https://paper-attachments.dropbox.com/s_175A71EF755D30C645040845CEAC36F09A2519808F9780643CBAC746263B696C_1639445752808_DSC_5014_s.jpg) The Chainlink Buddy [T-Display] is the recommended approach for most people, and makes it really easy to connect a TTGO T-Display microcontroller to your Chainlink system, with a ribbon cable connector, screw terminals for power, and a barrel jack for convenient 12v power input. [Recommended] Available [in the Bezek Labs Etsy store (US only)](https://bezeklabs.etsy.com/listing/1109357786/splitflap-chainlink-buddy-t-display) (includes accessories: IDC connector, screw terminals, barrel jack, and female headers). There’s also an option to include the T-Display ESP32 module as well if you want to make sure you get the right thing. or, you can order the PCB yourself using the gerbers, and you will also need to order the following items to go with it: - 1x IDC shrouded connectors, 2x4, 2.54mm spacing, e.g. LCSC [C601937](https://lcsc.com/product-detail/IDC-Connectors_JILN-321008SG0ABK00A01_C601937.html) - 1x 3-pin 5.08mm spacing screw terminal, e.g. LCSC [C72334](https://lcsc.com/product-detail/Screw-terminal_Ningbo-Kangnex-Elec-WJ500V-5-08-3P_C72334.html) - 1x 2.1mm barrel jack, e.g. LCSC [C381116](https://lcsc.com/product-detail/AC-DC-Power-Connectors_XKB-Connectivity-DC-005-5A-2-0_C381116.html) - 2x 12-pin 2.54mm spacing female headers, e.g. LCSC [C350303](https://lcsc.com/product-detail/Female-Headers_HOAUC-2685Y-112CNG1SNA01_C350303.html) **Chainlink Buddy [Breadboard] (alternative to the T-Display Buddy)** ![](https://paper-attachments.dropbox.com/s_175A71EF755D30C645040845CEAC36F09A2519808F9780643CBAC746263B696C_1639446207182_DSC_5009_s.jpg) If you’d like to use a different ESP32 module than the T-Display, the Breadboard Buddy is an alternative to the simple way to cleanly connect the Chainlink ribbon cable to a breadboard for prototyping. This is not generally recommended, but is available for advanced users. Available [in the Bezek Labs Etsy Store (US only)](https://bezeklabs.etsy.com/listing/1123863267/splitflap-chainlink-buddy-breadboard) (includes accessories: IDC connector, male pin headers) or, you can order the PCB yourself using the gerbers and you will also need to order the following items to go with it: - 1x IDC shrouded connectors, 2x4, 2.54mm spacing, e.g. LCSC [C601937](https://lcsc.com/product-detail/IDC-Connectors_JILN-321008SG0ABK00A01_C601937.html) - 1x 5-pin 2.54mm spacing male pin headers ## Order Sensors Each split-flap module will need a hall effect sensor to detect the home position. The best way to mount this is with a small sensor PCB. [**Recommended] Option 1: Sensor kit v2 on Etsy (US only)** To keep things simple, this kit includes 6 sets of all the parts you’ll need to assemble sensors: - 6x Sensor PCB - 6x 3-pin right angle headers - 6x 4mm magnet (this will mount onto your spool) - (optional) 6x sensor cables https://bezeklabs.etsy.com/listing/1696745674 **Option 2: Order partially-assembled PCBs directly, and order other parts separately** The v2 sensor design is optimized for JLCPCB assembly, so it’s mostly a drag-and-drop process, but you’ll need to carefully understand the options you select. Most importantly, if JLCPCB is out of stock of a component, *they will continue to build your order and simply omit that component!* So be careful to check all warnings or notices that appear when ordering. Note that JLCPCB assembly involves a number of fixed costs (such as $3 per unique part, and shipping fees) which make larger quantities a better value. The sensor PCBs are simple enough that you can easily hand-solder them, so I'd actually recommend Option 3 below (ordering bare PCBs and parts and assembling them yourself) unless you are building a larger display. To order assembled sensor v2 PCBs, download the following 3 items from the latest v2 sensor release: - [Panelized gerber files](https://s3.amazonaws.com/splitflap-artifacts/refs/tags/releases/sensor-smd/v2/electronics-v2/sensor_smd-panelized-jlc/gerbers.zip) (for the PCB) - [Panelized BOM](https://s3.amazonaws.com/splitflap-artifacts/refs/tags/releases/sensor-smd/v2/electronics-v2/sensor_smd-panelized-jlc/bom.csv) (specifies which components are needed for assembly) - [Panelized CPL](https://s3.amazonaws.com/splitflap-artifacts/refs/tags/releases/sensor-smd/v2/electronics-v2/sensor_smd-panelized-jlc/pos.csv) (specifies placement locations for components) To order: - Go to JLCPCB https://cart.jlcpcb.com/quote - Upload gerber zip - Set parameters: - Layers: 2 - Dimensions: (accept auto-generated dimensions) - PCB Qty: 5 (remember, the "panel" that you're ordering includes 6x sensors per panel, so the total sensors will be 6x the PCB Quantity you enter here! i.e. you will end up with 30 sensor PCBs with an order of 5 PCBs. You can have fewer than this quantity assembled) - Product Type: Industrial/Consumer electronics - PCB specifications - Different design: 1 - Delivery format: Panel by Customer - Panel Format: - Column: 2 - Row: 3 - PCB Thickness: 0.8mm ⚠️ This is not the default PCB thickness - make sure to select 0.8mm! - PCB Color: green is cheapest considering the less-common 0.8mm thickness - LeadFree HASL - Other options - leave all of these as defaults
- Select PCB Assembly - Note: JLCPCB gives you the choice to only assemble a portion of PCBs you've ordered. In this example, I've shown ordering 5 PCBs (the minimum quantity) and only having 2 of the 5 assembled (the minimum assembly quantity). - Assemble top side - PCBA Type: Economic - PCBA Qty: 2 (This is 2 of the 6x _panels_, for 12x total sensor PCBs. If this option doesn't appear, change PCBA type to Standard then back to Economic!) - Tooling holes: Added by JLCPCB - Confirm Parts Placement: No (select Yes if you'd like extra assurance and know how to review the production gerber files they provide) - Parts Selection: By Customer - Advanced Options: leave these all as defaults
- Upload BOM File - Upload CPL (csv) file - Make sure to select File provided as: "Complete File, just proceed with my own files" ![Screenshot from 2025-03-04 22-32-38](https://github.com/user-attachments/assets/998ad9c8-3e1f-44dc-a046-e0e210b1d497) - Review parts - ⚠️ Make sure you check this step carefully, as any parts that are out of stock will simply be omitted! ⚠️ ![Screenshot from 2025-03-04 22-33-01](https://github.com/user-attachments/assets/62233f7d-e47d-4606-b3fb-e72767408937) - Review parts placement ![Screenshot from 2025-01-19 23-50-15](https://github.com/user-attachments/assets/6bd5e016-f792-46d8-ace7-8fe11aba9cfb) - Save to Cart - Checkout (note that JLC does NOT reserve parts until you’ve checked out and paid your order, so if stock is low there is a chance parts will be missing if you wait to pay!) You'll also need to purchase these items separately: - 6x 4mm round magnet (e.g. [Digi-Key](https://www.digikey.com/en/products/detail/radial-magnets-inc/9027/5218822)) - 6x 3-pin right-angle pin headers (e.g. [Digi-Key](https://www.digikey.com/en/products/detail/sullins-connector-solutions/PREC003SBAN-M71RC/2774931)) - 6x 300mm 3-pin “servo” male-to-male cable (e.g. [Amazon](https://amzn.to/3FdxP8K) (10 pack) [or, [non-affiliate link](https://www.amazon.com/VIMVIP-10pcs-300mm-Extension-Futaba/dp/B00N8OX7VO)], or [AliExpress](https://www.aliexpress.com/item/32800106648.html) (10 pack)) https://bezeklabs.etsy.com/listing/966380990/splitflap-sensor-pcb-set-bare **Option 3: Order bare PCBs directly, and order all parts separately** Follow the instructions above to order the PCBs but skip the assembly portion. In addition to the parts mentioned above (magnets, connectors, cables) you’ll also need to order the parts for the PCB itself: - 6x hall effect sensors (e.g. HX6286, LCSC [C495736](https://www.lcsc.com/product-detail/Hall-Switches_HUAXIN-HX6286ESO_C495736.html?s_z=n_C495736)) - (optional) 6x 0603 red LED (e.g. LCSC [C2286](https://www.lcsc.com/product-detail/LED-Indication-Discrete_Hubei-KENTO-Elec-KT-0603R_C2286.html?s_z=n_C2286)) - (optional for LEDs) 6x 0603 1k resistor (e.g. LCSC [C21190](https://www.lcsc.com/product-detail/Chip-Resistor-Surface-Mount_UNI-ROYAL-Uniroyal-Elec-0603WAF1001T5E_C21190.html?s_z=n_C21190)) # Order misc hardware **Note:** AliExpress listings have a tendency to change or disappear, or you may end up getting a different or inferior product even if you use the same product listing that has worked before (ask me how I know 🙁). These are *suggestions only* - they worked at one point but there is **no guarantee** you will get the same quality product when ordering again! Also, if you've never ordered from AliExpress before, keep in mind that most items will take 2-4 weeks to arrive; you can often find similar parts for a higher price on Amazon or ebay if you'd prefer faster shipping. Amazon links are affiliate links, which help support the project at no cost to you, but if you’d prefer to avoid using affiliate links, I’ve included non-affiliate direct links as well. All items are selected completely independently of the affiliate program, and I do not accept sponsorships or payments to recommend certain products. | Item | Qty needed to build 6 modules | Link | Available from BezekLabs (US only) | Notes | | --------------------------------------------------------------------------- | ----------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | 12V 28BYJ-48 Stepper Motor | 6 | See [+28BYJ-48 Motor Buying Guide](../MotorGuide.md) | Yes (optional addition to Chainlink Driver orders) | There are unfortunately a lot of different motors sold under the same name, and it can be hard to find the right ones. See the [Motor Buying Guide](../MotorGuide.md) for more details. | | M4 x 10mm **ISO 7380** bolt | 60 | TODO | No | ![](https://paper-attachments.dropboxusercontent.com/s_175A71EF755D30C645040845CEAC36F09A2519808F9780643CBAC746263B696C_1627681268542_image.png)


Make sure to get **ISO 7380** (button head) bolts - other bolt head shapes may be too large for the design (see low clearance in photo to the right).

Must be **10mm length**.


----------

Fastenal has brick-and-mortar locations in the US if you’d rather pick up locally.

If using black oxide for aesthetic reasons, note that they tend to be oily/dirtier to work with and will not have the same corrosion resistance as stainless. | | M4 nut (hexagonal) | 60 | TODO | No | 10 nuts needed per module

----------

Fastenal has brick-and-mortar locations in the US if you’d rather pick up locally.

If using black oxide for aesthetic reasons, note that they tend to be oily/dirtier to work with and will not have the same corrosion resistance as stainless. | | Flap | 312 (for 6x 52-flap modules)

or 240 (for 6x 40-flap modules) | Blank flaps: [Etsy](https://bezeklabs.etsy.com/listing/979720975/blank-splitflap-display-flaps) (6 pack for 6 modules = 312 flaps)

Pre-printed flaps: [Etsy](https://bezeklabs.etsy.com/listing/1685633114) (6 pack for 6 modules)

or purchase [PVC ID cards](https://www.amazon.com/CR80-Mil-Graphic-Quality-Cards/dp/B0045TD22A) and a [Badge Slot Punch](https://www.amazon.com/Badge-Punch-Puncher-Luggage-Credentials/dp/B0006M648E) then [build a cutting jig](../Flaps.md#31-build-a-flap-cutting-jig), and [create flaps yourself](../Flaps.md#32-cut-flaps) | 👈 Yes | I may be a bit biased, but I *highly* recommend purchasing the die-cut flaps on Etsy if you’re in the US - it’s much easier and they’re much higher quality than cutting them yourself, though they do cost more than doing it yourself.

If you’re in the US, message me on Etsy and I’ll send you a couple free samples.


| | Letter Sticker Pack
(If using **blank flaps** or cutting flaps yourself) | 3 | [Amazon](https://amzn.to/3cvqfKB) [or, [non-affiliate](https://www.amazon.com/Duro-Decal-Permanent-Adhesive-Letters/dp/B0027601CM?) [link](https://www.amazon.com/Duro-Decal-Permanent-Adhesive-Letters/dp/B0027601CM)] | | Each pack contains 2 of every letter (and a bunch of spares of more common letters, which isn’t helpful for us here) | | 12V Power Supply | 1 | Many options on Amazon | | Each module requires about 0.25A, so **for a 6 module kit you should get a supply rated for at least 1.5A**. This will depend on the specific 28byj-48 motors you get; not all of them have the same resistance, and therefore may have different current requirements.

“CCTV” or "12V LED" are good search terms for 12V supplies with the 2.1mm barrel jack connector | ---------- # Assemble Ready to assemble your display? See the [complete assembly instructions document](Assembly.md). ================================================ FILE: docs/v2/OrderingEasy.md ================================================ # Splitflap v2 Ordering guide [<< Back to Documentation Index](../DocumentationIndex.md) This is the “easy” way to order the parts for your splitflap display (United States only). It optimizes for *simplicity in ordering*, not the *lowest possible cost*. If you’d like to review other options, which could be somewhat cheaper, check out the [full ordering doc](OrderingComplete.md), but if that’s a little overwhelming, you’re in the right place here! If you have questions, please ask in the [community Discord server](https://discord.gg/Hxnftc8PyW)! ## Laser-cut mechanical parts **Supplier:** [Elecrow](https://www.elecrow.com/acrylic-cutting.html) has reasonable quality at a decent price **Material:** Acrylic The v2 design officially supports either 52 flaps per module or 40 flaps per module. The 52-flap design is the default recommendation here and is perfect if you will be buying the pre-printed "Epilogue" flap sets, but you can check out the advanced ordering instructions for details on the 40 flap variant. For reference, the front face of each module is approximately **82.6mm wide** and **143.53mm tall**. - [ ] Use this file to order a 52-flap design, made of 3mm acrylic (Matte Black (P502) is recommended): [zip](https://s3.amazonaws.com/splitflap-artifacts/refs/tags/releases/mechanics/v2/3d/3d_laser_vector-52-elecrow-3mm-acrylic_1x.zip) - Go to [Elecrow acrylic laser cutting](https://www.elecrow.com/acrylic-cutting.html) and upload the zip file - Enter dimensions: - Select thickness: 3mm - Engrave: No - Acrylic color: Matte Black (P502) is recommended Full ordering instructions, and alternative files for acrylic/mdf or for 40- rather than 52-flap modules can be found [here](OrderingComplete.md). I’ve previously recommended ordering from Ponoko - and while I still believe they have great quality and customer service, they’ve gotten too expensive to be my default recommendation any longer 😞 ## Electronics **Supplier:** [Bezek Labs](https://bezeklabs.etsy.com) (yes, I’m biased in recommending my own store, but it really is the easiest purchasing option since these are custom boards and I also include all necessary accessories). - [ ] [Chainlink Driver](https://bezeklabs.etsy.com/listing/1123280069/splitflap-chainlink-driver-v11) (1 for every 6 character modules) - Ribbon cable length: **45cm** - Add motors? **Yes, add 6x 28BYJ-48** - [ ] [Sensor kit v2 (6x with magnets and headers)](https://bezeklabs.etsy.com/listing/1696745674/splitflap-sensor-kit-v2-beta-6x-with) (1 for every 6 character modules) - Include cables? **YES** - [ ] [Chainlink Buddy [T-Display]](https://bezeklabs.etsy.com/listing/1109357786/splitflap-chainlink-buddy-t-display) (1 for your *entire* display, up to 36 total character modules) - Include ESP32 T-Display Module: **YES** ## Flaps **Supplier:** [Bezek Labs](https://bezeklabs.etsy.com) (again, I’m biased, but there aren’t any commercial alternatives and making them yourself requires a lot of [time and patience](../Flaps.md#option-3-diy-flaps)) **Two good options** (this tradeoff is totally up to you): - [ ] [”Epilogue” pre-printed v2 flaps](https://bezeklabs.etsy.com/listing/1685633114/splitflap-epilogue-printed-flaps-beta-52) save a TON of time and look great, but are definitely more expensive. 6-packs and 24-packs are available at a small discount. Only available with white text on a black card. OR - [ ] You can buy blank flaps and [apply letter stickers to them yourself](https://www.youtube.com/watch?v=3lFECISLwyI) - [ ] [blank flaps](https://bezeklabs.etsy.com/listing/979720975/blank-splitflap-display-flaps) (purchase the 1x52 or 6x52 packs for a 52-flap design. The 6x packs are available at a small discount) - [ ] [vinyl letter stickers](https://amzn.to/37Frsjb) (from Amazon). Blank flaps are available in white or black, and vinyl letter stickers are [available](https://amzn.to/3ieAZj9) in [many](https://amzn.to/37t1y1R) different [colors](https://amzn.to/3tk4Ddh). (1 sticker pack for every **2** modules) ## Hardware **Supplier:** McMaster-Carr (reliable, but somewhat pricey especially with shipping) or find these common items elsewhere - [ ] M4 x 10mm **button-head**. 10 bolts needed per module (so you’ll need at least 60x for 6 modules). Must be button-head style (e.g. taller socket-cap bolts will likely cause clearance issues) - [McMaster-Carr](https://www.mcmaster.com/92095A190/) pack of 100 - [ ] M4 hex nuts. 10 nuts needed per module (so you’ll need at least 60x for 6 modules) - [McMaster-Carr](https://www.mcmaster.com/91828A231/) pack of 100 ## Power supply and wiring **Supplier:** many options, no specific recommendations For 1-12 modules: - [ ] 22AWG wire for 3.3v power (gauge is not critical as this is low-current; solid wire is preferable to stranded for use with screw terminals) - [ ] 12V power supply capable of *at least* **1.5A for every 6 modules**, plus some margin. Searching for “12V CCTV” or LED power supplies is a good way to find supplies that will have the correct barrel jack connector to plug into the Chainlink Buddy [T-Display]. - Assume that the current ratings on supplies sold by Amazon, AliExpress, etc are overstated, so make sure to account for this and select a supply with a higher current rating than needed. - [ ] 20AWG (or larger diameter, depending on length & number of modules) wire for 12v power and ground OR, for 13-36 modules: - [ ] 22AWG wire for 3.3v power (gauge is not critical as this is low-current; solid wire is preferable to stranded for use with screw terminals) - [ ] 12V power supply capable of *at least* **1.5A for every 6 modules**, plus some margin. *You must connect the power supply to the screw terminals of the first Chainlink Driver* ***directly***. Do not use the Chainlink Buddy’s barrel jack connector with more than 12 modules, as it cannot handle the current requirements! - Assume that the current ratings on supplies sold by Amazon, AliExpress, etc are overstated, so make sure to account for this and select a supply with a higher current rating than needed. - [ ] 16AWG (or larger diameter, depending on length & number of modules) wire for 12v power and ground OR, more than 36 modules: > [!WARNING] > Special considerations apply for displays with more than 36 modules! You must have a strong understanding of the limitations and risks involved with high-current DC power supplies, and should take all reasonable precautions to protect against damage/injury. Make sure to read the Chainlink Driver user guide for more info if you will be building a [large display](../ElectronicsGuide.md#Large-displays) with 36+ modules. ## That’s all! For instructions on assembly, see the [Splitflap v2 Assembly Guide](Assembly.md) and [Chainlink Driver Electronics User Guide](../ElectronicsGuide.md) ---------- Link disclosure: As an Amazon Associate I earn from qualifying purchases at no cost to you. ================================================ FILE: electronics/__init__.py ================================================ ================================================ FILE: electronics/chainlinkBase/.gitignore ================================================ *.xml ================================================ FILE: electronics/chainlinkBase/chainlinkBase-cache.lib ================================================ EESchema-LIBRARY Version 2.4 #encoding utf-8 # # Analog_ADC_INA219BxD # DEF Analog_ADC_INA219BxD U 0 20 Y Y 1 F N F0 "U" -250 350 50 H V C CNN F1 "Analog_ADC_INA219BxD" 200 350 50 H V C CNN F2 "Package_SO:SOIC-8_3.9x4.9mm_P1.27mm" 800 -350 50 H I C CNN F3 "" 350 -100 50 H I C CNN ALIAS INA219BxD $FPLIST SOIC*3.9x4.9mm*P1.27mm* $ENDFPLIST DRAW S -300 300 300 -300 0 1 10 f X A1 1 400 -100 100 L 50 50 1 1 I X A0 2 400 -200 100 L 50 50 1 1 I X SDA 3 400 200 100 L 50 50 1 1 B X SCL 4 400 100 100 L 50 50 1 1 I X VS 5 0 400 100 D 50 50 1 1 W X GND 6 0 -400 100 U 50 50 1 1 W X IN- 7 -400 -100 100 R 50 50 1 1 I X IN+ 8 -400 100 100 R 50 50 1 1 I ENDDRAW ENDDEF # # BuckModule_Buck # DEF BuckModule_Buck U 0 40 Y Y 1 F N F0 "U" 0 0 50 H V C CNN F1 "BuckModule_Buck" 0 0 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW S -350 150 400 -150 0 1 0 f X IN IN -450 100 100 R 50 50 1 1 P X IN_GND IN_GND -450 -100 100 R 50 50 1 1 P X OUT OUT 500 100 100 L 50 50 1 1 P X OUT_GND OUT_GND 500 -100 100 L 50 50 1 1 P ENDDRAW ENDDEF # # Connector_Conn_01x06_Male # DEF Connector_Conn_01x06_Male J 0 40 Y N 1 F N F0 "J" 0 300 50 H V C CNN F1 "Connector_Conn_01x06_Male" 0 -400 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST Connector*:*_1x??_* $ENDFPLIST DRAW S 34 -295 0 -305 1 1 6 F S 34 -195 0 -205 1 1 6 F S 34 -95 0 -105 1 1 6 F S 34 5 0 -5 1 1 6 F S 34 105 0 95 1 1 6 F S 34 205 0 195 1 1 6 F P 2 1 1 6 50 -300 34 -300 N P 2 1 1 6 50 -200 34 -200 N P 2 1 1 6 50 -100 34 -100 N P 2 1 1 6 50 0 34 0 N P 2 1 1 6 50 100 34 100 N P 2 1 1 6 50 200 34 200 N X Pin_1 1 200 200 150 L 50 50 1 1 P X Pin_2 2 200 100 150 L 50 50 1 1 P X Pin_3 3 200 0 150 L 50 50 1 1 P X Pin_4 4 200 -100 150 L 50 50 1 1 P X Pin_5 5 200 -200 150 L 50 50 1 1 P X Pin_6 6 200 -300 150 L 50 50 1 1 P ENDDRAW ENDDEF # # Connector_Generic_Conn_02x04_Odd_Even # DEF Connector_Generic_Conn_02x04_Odd_Even J 0 40 Y N 1 F N F0 "J" 50 200 50 H V C CNN F1 "Connector_Generic_Conn_02x04_Odd_Even" 50 -300 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST Connector*:*_2x??_* $ENDFPLIST DRAW S -50 -195 0 -205 1 1 6 N S -50 -95 0 -105 1 1 6 N S -50 5 0 -5 1 1 6 N S -50 105 0 95 1 1 6 N S -50 150 150 -250 1 1 10 f S 150 -195 100 -205 1 1 6 N S 150 -95 100 -105 1 1 6 N S 150 5 100 -5 1 1 6 N S 150 105 100 95 1 1 6 N X Pin_1 1 -200 100 150 R 50 50 1 1 P X Pin_2 2 300 100 150 L 50 50 1 1 P X Pin_3 3 -200 0 150 R 50 50 1 1 P X Pin_4 4 300 0 150 L 50 50 1 1 P X Pin_5 5 -200 -100 150 R 50 50 1 1 P X Pin_6 6 300 -100 150 L 50 50 1 1 P X Pin_7 7 -200 -200 150 R 50 50 1 1 P X Pin_8 8 300 -200 150 L 50 50 1 1 P ENDDRAW ENDDEF # # Connector_Screw_Terminal_01x02 # DEF Connector_Screw_Terminal_01x02 J 0 40 Y N 1 F N F0 "J" 0 100 50 H V C CNN F1 "Connector_Screw_Terminal_01x02" 0 -200 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST TerminalBlock*:* $ENDFPLIST DRAW C 0 -100 25 1 1 6 N C 0 0 25 1 1 6 N S -50 50 50 -150 1 1 10 f P 2 1 1 6 -21 -87 13 -120 N P 2 1 1 6 -21 13 13 -20 N P 2 1 1 6 -14 -80 20 -113 N P 2 1 1 6 -14 20 20 -13 N X Pin_1 1 -200 0 150 R 50 50 1 1 P X Pin_2 2 -200 -100 150 R 50 50 1 1 P ENDDRAW ENDDEF # # Connector_Screw_Terminal_01x03 # DEF Connector_Screw_Terminal_01x03 J 0 40 Y N 1 F N F0 "J" 0 200 50 H V C CNN F1 "Connector_Screw_Terminal_01x03" 0 -200 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST TerminalBlock*:* $ENDFPLIST DRAW C 0 -100 25 1 1 6 N C 0 0 25 1 1 6 N C 0 100 25 1 1 6 N S -50 150 50 -150 1 1 10 f P 2 1 1 6 -21 -87 13 -120 N P 2 1 1 6 -21 13 13 -20 N P 2 1 1 6 -21 113 13 80 N P 2 1 1 6 -14 -80 20 -113 N P 2 1 1 6 -14 20 20 -13 N P 2 1 1 6 -14 120 20 87 N X Pin_1 1 -200 100 150 R 50 50 1 1 P X Pin_2 2 -200 0 150 R 50 50 1 1 P X Pin_3 3 -200 -100 150 R 50 50 1 1 P ENDDRAW ENDDEF # # Device_CP_Small # DEF Device_CP_Small C 0 10 N N 1 F N F0 "C" 10 70 50 H V L CNN F1 "Device_CP_Small" 10 -80 50 H V L CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST CP_* $ENDFPLIST DRAW S -60 -12 60 -27 0 1 0 F S -60 27 60 12 0 1 0 N P 2 0 1 0 -50 60 -30 60 N P 2 0 1 0 -40 50 -40 70 N X ~ 1 0 100 73 D 50 50 1 1 P X ~ 2 0 -100 73 U 50 50 1 1 P ENDDRAW ENDDEF # # Device_C_Small # DEF Device_C_Small C 0 10 N N 1 F N F0 "C" 10 70 50 H V L CNN F1 "Device_C_Small" 10 -80 50 H V L CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST C_* $ENDFPLIST DRAW P 2 0 1 13 -60 -20 60 -20 N P 2 0 1 12 -60 20 60 20 N X ~ 1 0 100 80 D 50 50 1 1 P X ~ 2 0 -100 80 U 50 50 1 1 P ENDDRAW ENDDEF # # Device_D_Schottky_Small # DEF Device_D_Schottky_Small D 0 10 N N 1 F N F0 "D" -50 80 50 H V L CNN F1 "Device_D_Schottky_Small" -280 -80 50 H V L CNN F2 "" 0 0 50 V I C CNN F3 "" 0 0 50 V I C CNN $FPLIST TO-???* *_Diode_* *SingleDiode* D_* $ENDFPLIST DRAW P 2 0 1 0 -30 0 30 0 N P 4 0 1 10 30 -40 -30 0 30 40 30 -40 N P 6 0 1 10 -50 30 -50 40 -30 40 -30 -40 -10 -40 -10 -30 N X K 1 -100 0 70 R 50 50 1 1 P X A 2 100 0 70 L 50 50 1 1 P ENDDRAW ENDDEF # # Device_Fuse # DEF Device_Fuse F 0 0 N Y 1 F N F0 "F" 80 0 50 V V C CNN F1 "Device_Fuse" -75 0 50 V V C CNN F2 "" -70 0 50 V I C CNN F3 "" 0 0 50 H I C CNN $FPLIST *Fuse* $ENDFPLIST DRAW S -30 -100 30 100 0 1 10 N P 2 0 1 0 0 100 0 -100 N X ~ 1 0 150 50 D 50 50 1 1 P X ~ 2 0 -150 50 U 50 50 1 1 P ENDDRAW ENDDEF # # Device_LED_Small # DEF Device_LED_Small D 0 10 N N 1 F N F0 "D" -50 125 50 H V L CNN F1 "Device_LED_Small" -175 -100 50 H V L CNN F2 "" 0 0 50 V I C CNN F3 "" 0 0 50 V I C CNN $FPLIST LED* LED_SMD:* LED_THT:* $ENDFPLIST DRAW P 2 0 1 10 -30 -40 -30 40 N P 2 0 1 0 40 0 -30 0 N P 4 0 1 10 30 -40 -30 0 30 40 30 -40 N P 5 0 1 0 0 30 -20 50 -10 50 -20 50 -20 40 N P 5 0 1 0 20 50 0 70 10 70 0 70 0 60 N X K 1 -100 0 70 R 50 50 1 1 P X A 2 100 0 70 L 50 50 1 1 P ENDDRAW ENDDEF # # Device_R_Small # DEF Device_R_Small R 0 10 N N 1 F N F0 "R" 30 20 50 H V L CNN F1 "Device_R_Small" 30 -40 50 H V L CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST R_* $ENDFPLIST DRAW S -30 70 30 -70 0 1 8 N X ~ 1 0 100 30 D 50 50 1 1 P X ~ 2 0 -100 30 U 50 50 1 1 P ENDDRAW ENDDEF # # ESP32Modules_TTGO_TDisplay # DEF ESP32Modules_TTGO_TDisplay U 0 40 Y Y 1 F N F0 "U" -200 750 50 H V C CNN F1 "ESP32Modules_TTGO_TDisplay" 0 650 50 H V C CNN F2 "" -200 50 50 H I C CNN F3 "" -200 50 50 H I C CNN DRAW C -110 -10 0 0 1 0 N C -60 -310 0 0 1 0 N C -60 -110 0 0 1 0 N S -400 700 400 -700 0 1 0 f P 2 0 1 0 -110 10 -110 0 N P 2 0 1 0 -60 -290 -60 -300 N P 2 0 1 0 -60 -90 -60 -100 N P 4 0 1 0 -110 30 -140 -20 -80 -20 -110 30 N P 4 0 1 0 -60 -270 -90 -320 -30 -320 -60 -270 N P 4 0 1 0 -60 -70 -90 -120 -30 -120 -60 -70 N P 4 0 1 0 370 100 400 130 400 70 370 100 F P 4 0 1 0 370 200 400 230 400 170 370 200 F P 4 0 1 0 370 300 400 330 400 270 370 300 F P 4 0 1 0 370 400 400 430 400 370 370 400 F X GND 1 -500 500 100 R 50 50 1 1 P X GND 10 -500 -400 100 R 50 50 1 1 P X GND 11 -500 -500 100 R 50 50 1 1 P X 3V3 12 -500 -600 100 R 50 50 1 1 P X 5V 13 500 -600 100 L 50 50 1 1 P X GND 14 500 -500 100 L 50 50 1 1 P X GPIO27 15 500 -400 100 L 50 50 1 1 P X GPIO26 16 500 -300 100 L 50 50 1 1 P X GPIO25 17 500 -200 100 L 50 50 1 1 P X GPIO33 18 500 -100 100 L 50 50 1 1 P X GPIO32 19 500 0 100 L 50 50 1 1 P X GND 2 -500 400 100 R 50 50 1 1 P X GPIO39 20 500 100 100 L 50 50 1 1 P X GPIO38 21 500 200 100 L 50 50 1 1 P X GPIO37 22 500 300 100 L 50 50 1 1 P X GPIO36 23 500 400 100 L 50 50 1 1 P X 3V3 24 500 500 100 L 50 50 1 1 P X GPIO21 3 -500 300 100 R 50 50 1 1 P X GPIO22 4 -500 200 100 R 50 50 1 1 P X GPIO17 5 -500 100 100 R 50 50 1 1 P X GPIO2 6 -500 0 100 R 50 50 1 1 P X GPIO15 7 -500 -100 100 R 50 50 1 1 P X GPIO13 8 -500 -200 100 R 50 50 1 1 P X GPIO12 9 -500 -300 100 R 50 50 1 1 P ENDDRAW ENDDEF # # Interface_Expansion_MCP23017_SS # DEF Interface_Expansion_MCP23017_SS U 0 40 Y Y 1 F N F0 "U" -450 950 50 H V C CNN F1 "Interface_Expansion_MCP23017_SS" 0 0 50 H V C CNN F2 "Package_SO:SSOP-28_5.3x10.2mm_P0.65mm" 200 -1000 50 H I L CNN F3 "" 200 -1100 50 H I L CNN $FPLIST SSOP*5.3x10.2mm*P0.65mm* $ENDFPLIST DRAW S -500 900 500 -900 0 1 10 f X GPB0 1 700 800 200 L 50 50 1 1 B X VSS 10 0 -1100 200 U 50 50 1 1 W X NC 11 -500 600 200 R 50 50 1 1 N N X SCK 12 -700 700 200 R 50 50 1 1 I X SDA 13 -700 800 200 R 50 50 1 1 B X NC 14 -500 500 200 R 50 50 1 1 N N X A0 15 -700 -800 200 R 50 50 1 1 I X A1 16 -700 -700 200 R 50 50 1 1 I X A2 17 -700 -600 200 R 50 50 1 1 I X ~RESET~ 18 -700 -100 200 R 50 50 1 1 I X INTB 19 -700 200 200 R 50 50 1 1 T X GPB1 2 700 700 200 L 50 50 1 1 B X INTA 20 -700 100 200 R 50 50 1 1 T X GPA0 21 700 -100 200 L 50 50 1 1 B X GPA1 22 700 -200 200 L 50 50 1 1 B X GPA2 23 700 -300 200 L 50 50 1 1 B X GPA3 24 700 -400 200 L 50 50 1 1 B X GPA4 25 700 -500 200 L 50 50 1 1 B X GPA5 26 700 -600 200 L 50 50 1 1 B X GPA6 27 700 -700 200 L 50 50 1 1 B X GPA7 28 700 -800 200 L 50 50 1 1 B X GPB2 3 700 600 200 L 50 50 1 1 B X GPB3 4 700 500 200 L 50 50 1 1 B X GPB4 5 700 400 200 L 50 50 1 1 B X GPB5 6 700 300 200 L 50 50 1 1 B X GPB6 7 700 200 200 L 50 50 1 1 B X GPB7 8 700 100 200 L 50 50 1 1 B X VDD 9 0 1100 200 D 50 50 1 1 W ENDDRAW ENDDEF # # Interface_UART_MAX485E # DEF Interface_UART_MAX485E U 0 20 Y Y 1 F N F0 "U" -240 450 50 H V C CNN F1 "Interface_UART_MAX485E" 30 450 50 H V L CNN F2 "" 0 -700 50 H I C CNN F3 "" 0 50 50 H I C CNN ALIAS MAX483E MAX485E MAX487E MAX1487E MAX3485 MAX3483 MAX3486 $FPLIST DIP*W7.62mm* SOIC*3.9x4.9mm*P1.27mm* $ENDFPLIST DRAW C -12 -145 14 0 1 10 F C -1 59 14 0 1 10 F C 65 75 14 0 1 10 F S -300 400 300 -500 0 1 10 f S 50 125 50 125 0 1 0 N P 2 0 1 10 -160 -200 -75 -200 N P 2 0 1 10 -160 100 -50 100 N P 2 0 1 10 -50 -126 -50 -136 N P 2 0 1 10 -25 -200 210 -200 N P 3 0 1 10 -160 -100 -50 -100 -50 -125 N P 3 0 1 10 0 50 0 0 -160 0 N P 3 0 1 10 50 125 150 125 150 -200 N P 3 0 1 10 100 75 100 -150 0 -150 N P 4 0 1 10 -75 -125 -75 -225 25 -175 -75 -125 N P 4 0 1 10 -50 100 50 150 50 50 -50 100 N P 4 0 1 10 75 75 175 75 175 100 210 100 N X RO 1 -400 100 100 R 50 50 1 1 O X ~RE 2 -400 0 100 R 50 50 1 1 I X DE 3 -400 -100 100 R 50 50 1 1 I X DI 4 -400 -200 100 R 50 50 1 1 I X GND 5 0 -600 100 U 50 50 1 1 W X A 6 400 -200 100 L 50 50 1 1 B X B 7 400 100 100 L 50 50 1 1 B X VCC 8 0 500 100 D 50 50 1 1 W ENDDRAW ENDDEF # # Jumper_Jumper_3_Bridged12 # DEF Jumper_Jumper_3_Bridged12 JP 0 0 Y N 1 F N F0 "JP" -100 -100 50 H V C CNN F1 "Jumper_Jumper_3_Bridged12" 0 110 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST Jumper* TestPoint*3Pads* TestPoint*Bridge* $ENDFPLIST DRAW A -65 -50 89 1282 518 0 1 0 N -120 20 -10 20 C -130 0 20 0 0 0 N C 0 0 20 0 0 0 N C 130 0 20 0 0 0 N P 2 0 1 0 0 -50 0 -20 N X A 1 -250 0 100 R 50 50 1 1 P X C 2 0 -150 100 U 50 50 1 1 I X B 3 250 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # LED_WS2812B # DEF LED_WS2812B D 0 10 Y Y 1 F N F0 "D" 200 225 50 H V R BNN F1 "LED_WS2812B" 50 -225 50 H V L TNN F2 "LED_SMD:LED_WS2812B_PLCC4_5.0x5.0mm_P3.2mm" 50 -300 50 H I L TNN F3 "" 100 -375 50 H I L TNN $FPLIST LED*WS2812*PLCC*5.0x5.0mm*P3.2mm* $ENDFPLIST DRAW T 0 90 -165 30 0 0 0 RGB Normal 0 C C S 200 200 -200 -200 0 1 10 f P 2 0 1 0 50 -140 70 -140 N P 2 0 1 0 50 -100 70 -100 N P 2 0 1 0 185 -140 105 -140 N P 3 0 1 0 90 -100 50 -140 50 -120 N P 3 0 1 0 90 -60 50 -100 50 -80 N P 3 0 1 0 145 -40 145 -140 145 -160 N P 4 0 1 0 185 -60 105 -60 145 -140 185 -60 N X VDD 1 0 300 100 D 50 50 1 1 W X DOUT 2 300 0 100 L 50 50 1 1 O X VSS 3 0 -300 100 U 50 50 1 1 W X DIN 4 -300 0 100 R 50 50 1 1 I ENDDRAW ENDDEF # # Logic_LevelTranslator_SN74LV1T34DBV # DEF Logic_LevelTranslator_SN74LV1T34DBV U 0 20 Y Y 1 F N F0 "U" 200 250 50 H V L CNN F1 "Logic_LevelTranslator_SN74LV1T34DBV" 200 150 50 H V L CNN F2 "Package_TO_SOT_SMD:SOT-23-5" 650 -250 50 H I C CNN F3 "" -400 -200 50 H I C CNN $FPLIST SOT?23* $ENDFPLIST DRAW S -200 200 200 -200 0 1 10 f P 2 0 1 0 -30 0 -100 0 N P 2 0 1 0 40 0 100 0 N P 4 1 1 0 -30 -30 -30 30 40 0 -30 -30 N X NC 1 -200 100 100 R 50 50 1 1 N N X A 2 -300 0 100 R 50 50 1 1 I X GND 3 0 -300 100 U 50 50 1 1 W X Y 4 300 0 100 L 50 50 1 1 O X VCC 5 0 300 100 D 50 50 1 1 W ENDDRAW ENDDEF # # Mechanical_MountingHole_Pad # DEF Mechanical_MountingHole_Pad H 0 40 N N 1 F N F0 "H" 0 250 50 H V C CNN F1 "Mechanical_MountingHole_Pad" 0 175 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST MountingHole*Pad* $ENDFPLIST DRAW C 0 50 50 0 1 50 N X 1 1 0 -100 100 U 50 50 1 1 I ENDDRAW ENDDEF # # Regulator_Linear_AP7361C-33E # DEF Regulator_Linear_AP7361C-33E U 0 10 Y Y 1 F N F0 "U" -150 125 50 H V C CNN F1 "Regulator_Linear_AP7361C-33E" 0 125 50 H V L CNN F2 "Package_TO_SOT_SMD:SOT-223-3_TabPin2" 0 225 50 H I C CIN F3 "" 0 -50 50 H I C CNN ALIAS SPX2920M3-5.0_SOT223 LT1129-3.3_SOT223 LT1129-5.0_SOT223 LM2937xMP AP7361C-10E AP7361C-12E AP7361C-15E AP7361C-18E AP7361C-25E AP7361C-28E AP7361C-33E $FPLIST SOT?223* $ENDFPLIST DRAW S -200 -200 200 75 0 1 10 f X VI 1 -300 0 100 R 50 50 1 1 W X GND 2 0 -300 100 U 50 50 1 1 W X VO 3 300 0 100 L 50 50 1 1 w ENDDRAW ENDDEF # # Switch_SW_DIP_x04 # DEF Switch_SW_DIP_x04 SW 0 0 Y N 1 F N F0 "SW" 0 350 50 H V C CNN F1 "Switch_SW_DIP_x04" 0 -250 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST SW?DIP?x4* $ENDFPLIST DRAW C -80 -100 20 0 0 0 N C -80 0 20 0 0 0 N C -80 100 20 0 0 0 N C -80 200 20 0 0 0 N C 80 -100 20 0 0 0 N C 80 0 20 0 0 0 N C 80 100 20 0 0 0 N C 80 200 20 0 0 0 N S -150 300 150 -200 0 1 10 f P 2 0 0 0 -60 -94 93 -53 N P 2 0 0 0 -60 5 93 46 N P 2 0 0 0 -60 105 93 146 N P 2 0 0 0 -60 205 93 246 N X ~ 1 -300 200 200 R 50 50 1 1 P X ~ 2 -300 100 200 R 50 50 1 1 P X ~ 3 -300 0 200 R 50 50 1 1 P X ~ 4 -300 -100 200 R 50 50 1 1 P X ~ 5 300 -100 200 L 50 50 1 1 P X ~ 6 300 0 200 L 50 50 1 1 P X ~ 7 300 100 200 L 50 50 1 1 P X ~ 8 300 200 200 L 50 50 1 1 P ENDDRAW ENDDEF # # Transistor_Array_ULN2003A # DEF Transistor_Array_ULN2003A U 0 20 Y Y 1 F N F0 "U" 0 625 50 H V C CNN F1 "Transistor_Array_ULN2003A" 0 550 50 H V C CNN F2 "" 50 -550 50 H I L CNN F3 "" 100 -200 50 H I C CNN ALIAS ULN2003A ULN2002 ULN2002A ULN2004 ULN2004A $FPLIST DIP*W7.62mm* SOIC*3.9x9.9mm*P1.27mm* SSOP*4.4x5.2mm*P0.65mm* TSSOP*4.4x5mm*P0.65mm* SOIC*W*5.3x10.2mm*P1.27mm* $ENDFPLIST DRAW C -70 200 10 0 1 0 N C -50 -90 10 0 1 0 F C -50 0 10 0 1 0 F C -50 100 10 0 1 0 F C -20 200 10 0 1 0 F S -300 -500 300 500 0 1 10 f P 2 0 1 0 -180 200 -140 200 N P 2 0 1 0 -60 200 160 200 N P 2 0 1 0 0 265 -40 265 N P 3 0 1 0 -20 200 -20 400 115 400 N P 4 0 1 0 -140 240 -140 160 -80 200 -140 240 N P 4 0 1 0 0 235 -40 235 -20 265 0 235 N X I1 1 -400 200 100 R 50 50 1 1 I X O7 10 400 -400 100 L 50 50 1 1 C X O6 11 400 -300 100 L 50 50 1 1 C X O5 12 400 -200 100 L 50 50 1 1 C X O4 13 400 -100 100 L 50 50 1 1 C X O3 14 400 0 100 L 50 50 1 1 C X O2 15 400 100 100 L 50 50 1 1 C X O1 16 400 200 100 L 50 50 1 1 C X I2 2 -400 100 100 R 50 50 1 1 I X I3 3 -400 0 100 R 50 50 1 1 I X I4 4 -400 -100 100 R 50 50 1 1 I X I5 5 -400 -200 100 R 50 50 1 1 I X I6 6 -400 -300 100 R 50 50 1 1 I X I7 7 -400 -400 100 R 50 50 1 1 I X GND 8 0 -600 100 U 50 50 1 1 W X COM 9 400 400 100 L 50 50 1 1 P ENDDRAW ENDDEF # # VN7007ALHTR_VN7007ALH # DEF VN7007ALHTR_VN7007ALH U 0 40 Y Y 1 F N F0 "U" -400 400 50 H V C CNN F1 "VN7007ALHTR_VN7007ALH" -400 300 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW S -500 250 500 -400 0 1 0 f X OUTPUT 1 600 100 100 L 50 50 1 1 w X OUTPUT 2 600 0 100 L 50 50 1 1 P X OUTPUT 3 600 -100 100 L 50 50 1 1 P X IN 4 -600 100 100 R 50 50 1 1 I X CURSENSE 5 -600 -200 100 R 50 50 1 1 O X FR_DIAG 6 -600 0 100 R 50 50 1 1 I X GND 7 0 -500 100 U 50 50 1 1 W X VCC TAB 0 350 100 D 50 50 1 1 W ENDDRAW ENDDEF # # no_pin_no_pin # DEF no_pin_no_pin Z 0 40 Y Y 1 F N F0 "Z" -350 150 60 H V C CNN F1 "no_pin_no_pin" 0 0 60 H V C CNN F2 "" 0 0 60 H I C CNN F3 "" 0 0 60 H I C CNN DRAW S -400 100 400 -100 0 1 0 N ENDDRAW ENDDEF # # power_+12V # DEF power_+12V #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -150 50 H I C CNN F1 "power_+12V" 0 140 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 2 0 1 0 -30 50 0 100 N P 2 0 1 0 0 0 0 100 N P 2 0 1 0 0 100 30 50 N X +12V 1 0 0 0 U 50 50 1 1 W N ENDDRAW ENDDEF # # power_+3.3V # DEF power_+3.3V #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -150 50 H I C CNN F1 "power_+3.3V" 0 140 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN ALIAS +3.3V DRAW P 2 0 1 0 -30 50 0 100 N P 2 0 1 0 0 0 0 100 N P 2 0 1 0 0 100 30 50 N X +3V3 1 0 0 0 U 50 50 1 1 W N ENDDRAW ENDDEF # # power_+5V # DEF power_+5V #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -150 50 H I C CNN F1 "power_+5V" 0 140 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 2 0 1 0 -30 50 0 100 N P 2 0 1 0 0 0 0 100 N P 2 0 1 0 0 100 30 50 N X +5V 1 0 0 0 U 50 50 1 1 W N ENDDRAW ENDDEF # # power_GND # DEF power_GND #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -250 50 H I C CNN F1 "power_GND" 0 -150 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 6 0 1 0 0 0 0 -50 50 -50 0 -100 -50 -50 0 -50 N X GND 1 0 0 0 D 50 50 1 1 W N ENDDRAW ENDDEF # # power_PWR_FLAG # DEF power_PWR_FLAG #FLG 0 0 N N 1 F P F0 "#FLG" 0 75 50 H I C CNN F1 "power_PWR_FLAG" 0 150 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 6 0 1 0 0 0 0 50 -40 75 0 100 40 75 0 50 N X pwr 1 0 0 0 U 50 50 0 0 w ENDDRAW ENDDEF # #End Library ================================================ FILE: electronics/chainlinkBase/chainlinkBase.kibot.yml ================================================ kibot: version: 1 preflight: check_zone_fills: true run_drc: true run_erc: true filters: - filter: 'Overlapping headers' number: 45 regex: '(?s)Footprint J112(.*)Footprint J111' update_xml: true outputs: - name: ibom comment: 'Interactive BOM' type: ibom dir: bom options: layer_view: F dark_mode: true netlist_file: '%F.xml' extra_fields: 'DK#' ================================================ FILE: electronics/chainlinkBase/chainlinkBase.kicad_pcb ================================================ (kicad_pcb (version 20171130) (host pcbnew 5.1.10-88a1d61d58~90~ubuntu20.04.1) (general (thickness 1.6) (drawings 99) (tracks 1191) (zones 0) (modules 128) (nets 101) ) (page USLedger) (layers (0 F.Cu signal) (31 B.Cu signal) (32 B.Adhes user) (33 F.Adhes user) (34 B.Paste user) (35 F.Paste user) (36 B.SilkS user) (37 F.SilkS user) (38 B.Mask user) (39 F.Mask user) (40 Dwgs.User user) (41 Cmts.User user) (42 Eco1.User user) (43 Eco2.User user) (44 Edge.Cuts user) (45 Margin user) (46 B.CrtYd user) (47 F.CrtYd user) (48 B.Fab user) (49 F.Fab user) ) (setup (last_trace_width 0.25) (user_trace_width 0.16) (user_trace_width 0.35) (user_trace_width 0.5) (user_trace_width 2) (trace_clearance 0.2) (zone_clearance 0.508) (zone_45_only no) (trace_min 0.16) (via_size 0.8) (via_drill 0.4) (via_min_size 0.4) (via_min_drill 0.3) (uvia_size 0.3) (uvia_drill 0.1) (uvias_allowed no) (uvia_min_size 0.2) (uvia_min_drill 0.1) (edge_width 0.05) (segment_width 0.2) (pcb_text_width 0.3) (pcb_text_size 1.5 1.5) (mod_edge_width 0.12) (mod_text_size 1 1) (mod_text_width 0.15) (pad_size 1.524 1.524) (pad_drill 0.762) (pad_to_mask_clearance 0.051) (solder_mask_min_width 0.25) (aux_axis_origin 0 0) (visible_elements FFFFFF7F) (pcbplotparams (layerselection 0x010fc_ffffffff) (usegerberextensions false) (usegerberattributes false) (usegerberadvancedattributes false) (creategerberjobfile false) (excludeedgelayer true) (linewidth 0.100000) (plotframeref false) (viasonmask false) (mode 1) (useauxorigin false) (hpglpennumber 1) (hpglpenspeed 20) (hpglpendiameter 15.000000) (psnegative false) (psa4output false) (plotreference true) (plotvalue true) (plotinvisibletext false) (padsonsilk false) (subtractmaskfromsilk false) (outputformat 1) (mirror false) (drillshape 1) (scaleselection 1) (outputdirectory "")) ) (net 0 "") (net 1 +5V) (net 2 GND) (net 3 /SENSOR_DATA) (net 4 /CLOCK) (net 5 /RX) (net 6 /TX) (net 7 /SCL) (net 8 /SDA) (net 9 /RS485_DRIVE_EN) (net 10 /MOTOR_DATA) (net 11 +3V3) (net 12 /3V3_EXT) (net 13 /OUT0_EN) (net 14 /OUT1_EN) (net 15 /OUT2_EN) (net 16 /OUT3_EN) (net 17 /OUT4_EN) (net 18 /RGB_LEDS) (net 19 /LATCH) (net 20 /MCP_RESET) (net 21 /ADDR_3) (net 22 /ADDR_2) (net 23 /ADDR_1) (net 24 /ADDR_0) (net 25 /MASTER_EN) (net 26 /MCP_INT) (net 27 /RGB_LEDS_3V3) (net 28 /RELAY_MASTER) (net 29 /PowerChannel0/POWER_IN) (net 30 /PowerChannel0/POWER_OUT) (net 31 +12V) (net 32 "Net-(D101-Pad2)") (net 33 "Net-(D102-Pad2)") (net 34 "Net-(D103-Pad2)") (net 35 "Net-(D104-Pad2)") (net 36 "Net-(D105-Pad2)") (net 37 "Net-(D201-Pad2)") (net 38 "Net-(D201-Pad1)") (net 39 "Net-(D202-Pad1)") (net 40 "Net-(J104-Pad2)") (net 41 "Net-(J104-Pad1)") (net 42 "Net-(R203-Pad1)") (net 43 "Net-(R204-Pad2)") (net 44 "Net-(R206-Pad2)") (net 45 "Net-(U106-Pad2)") (net 46 /PowerChannel0/POWER_MONITORED) (net 47 "Net-(D107-Pad2)") (net 48 /LED_GND) (net 49 /PowerChannel1/POWER_MONITORED) (net 50 /PowerChannel2/POWER_MONITORED) (net 51 /PowerChannel3/POWER_MONITORED) (net 52 /PowerChannel4/POWER_MONITORED) (net 53 "Net-(D301-Pad2)") (net 54 "Net-(D301-Pad1)") (net 55 "Net-(D302-Pad1)") (net 56 /PowerChannel1/POWER_OUT) (net 57 "Net-(D401-Pad2)") (net 58 "Net-(D401-Pad1)") (net 59 /PowerChannel2/POWER_OUT) (net 60 "Net-(D402-Pad1)") (net 61 "Net-(D501-Pad2)") (net 62 "Net-(D501-Pad1)") (net 63 /PowerChannel3/POWER_OUT) (net 64 "Net-(D502-Pad1)") (net 65 "Net-(D601-Pad2)") (net 66 "Net-(D601-Pad1)") (net 67 /PowerChannel4/POWER_OUT) (net 68 "Net-(D602-Pad1)") (net 69 /PowerChannel1/POWER_IN) (net 70 /PowerChannel2/POWER_IN) (net 71 /PowerChannel3/POWER_IN) (net 72 /PowerChannel4/POWER_IN) (net 73 "Net-(R303-Pad1)") (net 74 "Net-(R304-Pad2)") (net 75 "Net-(R306-Pad2)") (net 76 "Net-(R403-Pad1)") (net 77 "Net-(R404-Pad2)") (net 78 "Net-(R406-Pad2)") (net 79 "Net-(R503-Pad1)") (net 80 "Net-(R504-Pad2)") (net 81 "Net-(R506-Pad2)") (net 82 "Net-(R603-Pad1)") (net 83 "Net-(R604-Pad2)") (net 84 "Net-(R606-Pad2)") (net 85 "Net-(J111-Pad6)") (net 86 "Net-(J111-Pad5)") (net 87 "Net-(J111-Pad4)") (net 88 "Net-(J111-Pad3)") (net 89 "Net-(J111-Pad2)") (net 90 "Net-(J111-Pad1)") (net 91 /MISC5) (net 92 /MISC4) (net 93 /MISC3) (net 94 /MISC2) (net 95 /MISC1) (net 96 /MISC0) (net 97 "Net-(U104-Pad24)") (net 98 "Net-(U104-Pad21)") (net 99 "Net-(U104-Pad9)") (net 100 "Net-(U104-Pad7)") (net_class Default "This is the default net class." (clearance 0.2) (trace_width 0.25) (via_dia 0.8) (via_drill 0.4) (uvia_dia 0.3) (uvia_drill 0.1) (add_net +12V) (add_net +3V3) (add_net +5V) (add_net /3V3_EXT) (add_net /ADDR_0) (add_net /ADDR_1) (add_net /ADDR_2) (add_net /ADDR_3) (add_net /CLOCK) (add_net /LATCH) (add_net /LED_GND) (add_net /MASTER_EN) (add_net /MCP_INT) (add_net /MCP_RESET) (add_net /MISC0) (add_net /MISC1) (add_net /MISC2) (add_net /MISC3) (add_net /MISC4) (add_net /MISC5) (add_net /MOTOR_DATA) (add_net /OUT0_EN) (add_net /OUT1_EN) (add_net /OUT2_EN) (add_net /OUT3_EN) (add_net /OUT4_EN) (add_net /PowerChannel0/POWER_IN) (add_net /PowerChannel0/POWER_MONITORED) (add_net /PowerChannel0/POWER_OUT) (add_net /PowerChannel1/POWER_IN) (add_net /PowerChannel1/POWER_MONITORED) (add_net /PowerChannel1/POWER_OUT) (add_net /PowerChannel2/POWER_IN) (add_net /PowerChannel2/POWER_MONITORED) (add_net /PowerChannel2/POWER_OUT) (add_net /PowerChannel3/POWER_IN) (add_net /PowerChannel3/POWER_MONITORED) (add_net /PowerChannel3/POWER_OUT) (add_net /PowerChannel4/POWER_IN) (add_net /PowerChannel4/POWER_MONITORED) (add_net /PowerChannel4/POWER_OUT) (add_net /RELAY_MASTER) (add_net /RGB_LEDS) (add_net /RGB_LEDS_3V3) (add_net /RS485_DRIVE_EN) (add_net /RX) (add_net /SCL) (add_net /SDA) (add_net /SENSOR_DATA) (add_net /TX) (add_net GND) (add_net "Net-(D101-Pad2)") (add_net "Net-(D102-Pad2)") (add_net "Net-(D103-Pad2)") (add_net "Net-(D104-Pad2)") (add_net "Net-(D105-Pad2)") (add_net "Net-(D107-Pad2)") (add_net "Net-(D201-Pad1)") (add_net "Net-(D201-Pad2)") (add_net "Net-(D202-Pad1)") (add_net "Net-(D301-Pad1)") (add_net "Net-(D301-Pad2)") (add_net "Net-(D302-Pad1)") (add_net "Net-(D401-Pad1)") (add_net "Net-(D401-Pad2)") (add_net "Net-(D402-Pad1)") (add_net "Net-(D501-Pad1)") (add_net "Net-(D501-Pad2)") (add_net "Net-(D502-Pad1)") (add_net "Net-(D601-Pad1)") (add_net "Net-(D601-Pad2)") (add_net "Net-(D602-Pad1)") (add_net "Net-(J104-Pad1)") (add_net "Net-(J104-Pad2)") (add_net "Net-(J111-Pad1)") (add_net "Net-(J111-Pad2)") (add_net "Net-(J111-Pad3)") (add_net "Net-(J111-Pad4)") (add_net "Net-(J111-Pad5)") (add_net "Net-(J111-Pad6)") (add_net "Net-(R203-Pad1)") (add_net "Net-(R204-Pad2)") (add_net "Net-(R206-Pad2)") (add_net "Net-(R303-Pad1)") (add_net "Net-(R304-Pad2)") (add_net "Net-(R306-Pad2)") (add_net "Net-(R403-Pad1)") (add_net "Net-(R404-Pad2)") (add_net "Net-(R406-Pad2)") (add_net "Net-(R503-Pad1)") (add_net "Net-(R504-Pad2)") (add_net "Net-(R506-Pad2)") (add_net "Net-(R603-Pad1)") (add_net "Net-(R604-Pad2)") (add_net "Net-(R606-Pad2)") (add_net "Net-(U104-Pad21)") (add_net "Net-(U104-Pad24)") (add_net "Net-(U104-Pad7)") (add_net "Net-(U104-Pad9)") (add_net "Net-(U106-Pad2)") ) (module ESP32:T-DISPLAY_extra_pins_labeled (layer F.Cu) (tedit 617F1475) (tstamp 606F38EF) (at 26.67 208.28 90) (path /600AC4FA) (fp_text reference U104 (at 11.43 -1.27 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value TTGO_TDisplay (at 11.43 -5.08 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 22.86 0) (end 26.67 -3.81) (layer F.Fab) (width 0.12)) (fp_line (start 19.05 0) (end 26.67 -7.62) (layer F.Fab) (width 0.12)) (fp_line (start 15.24 0) (end 26.67 -11.43) (layer F.Fab) (width 0.12)) (fp_line (start 22.86 -11.43) (end 11.43 0) (layer F.Fab) (width 0.12)) (fp_line (start 7.62 0) (end 19.05 -11.43) (layer F.Fab) (width 0.12)) (fp_line (start 3.81 0) (end 15.24 -11.43) (layer F.Fab) (width 0.12)) (fp_line (start 0 0) (end 11.43 -11.43) (layer F.Fab) (width 0.12)) (fp_line (start -3.81 0) (end 7.62 -11.43) (layer F.Fab) (width 0.12)) (fp_line (start -3.81 -3.81) (end 3.81 -11.43) (layer F.Fab) (width 0.12)) (fp_line (start -3.81 -7.62) (end 0 -11.43) (layer F.Fab) (width 0.12)) (fp_line (start 26.67 0) (end -3.81 0) (layer F.Fab) (width 0.12)) (fp_line (start 26.67 -11.43) (end 26.67 0) (layer F.Fab) (width 0.12)) (fp_line (start -3.81 -11.43) (end 26.67 -11.43) (layer F.Fab) (width 0.12)) (fp_line (start -3.81 0) (end -3.81 -11.43) (layer F.Fab) (width 0.12)) (fp_line (start -1.11 -7.54) (end 23.98 -7.54) (layer F.SilkS) (width 0.15)) (fp_line (start -1.11 -3.15) (end 23.98 -3.15) (layer F.SilkS) (width 0.15)) (fp_line (start -1.11 -7.54) (end -1.11 43.95) (layer F.SilkS) (width 0.15)) (fp_line (start 23.98 -7.54) (end 23.98 43.95) (layer F.SilkS) (width 0.15)) (fp_line (start -1.11 43.95) (end 23.98 43.95) (layer F.SilkS) (width 0.15)) (fp_line (start 3.935 83.95) (end 18.935 83.95) (layer F.Fab) (width 0.12)) (fp_text user 38 (at 19.05 7.62 90) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left mirror)) ) (fp_text user 25 (at 19.05 17.78 90) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left mirror)) ) (fp_text user G (at 19.05 25.4 90) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left mirror)) ) (fp_text user 5V (at 19.05 27.94 90) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left mirror)) ) (fp_text user 36 (at 19.05 2.54 90) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left mirror)) ) (fp_text user 26 (at 19.05 20.32 90) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left mirror)) ) (fp_text user 37 (at 19.05 5.08 90) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left mirror)) ) (fp_text user 33 (at 19.05 15.24 90) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left mirror)) ) (fp_text user 39 (at 19.05 10.16 90) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left mirror)) ) (fp_text user 32 (at 19.05 12.7 90) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left mirror)) ) (fp_text user 27 (at 19.05 22.86 90) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left mirror)) ) (fp_text user 3V (at 19.05 0 90) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left mirror)) ) (fp_text user 2 (at 3.81 12.7 90) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right mirror)) ) (fp_text user G (at 3.81 22.86 90) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right mirror)) ) (fp_text user 22 (at 3.81 7.62 90) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right mirror)) ) (fp_text user 17 (at 3.81 10.16 90) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right mirror)) ) (fp_text user 21 (at 3.81 5.08 90) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right mirror)) ) (fp_text user G (at 3.81 25.4 90) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right mirror)) ) (fp_text user G (at 3.81 2.54 90) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right mirror)) ) (fp_text user 12 (at 3.81 20.32 90) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right mirror)) ) (fp_text user 3V (at 3.81 27.94 90) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right mirror)) ) (fp_text user 15 (at 3.81 15.24 90) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right mirror)) ) (fp_text user 13 (at 3.81 17.78 90) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right mirror)) ) (fp_text user G (at 3.81 0 90) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right mirror)) ) (fp_text user 5V (at 19.05 27.94 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right)) ) (fp_text user G (at 19.05 25.4 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right)) ) (fp_text user 27 (at 19.05 22.86 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right)) ) (fp_text user 26 (at 19.05 20.32 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right)) ) (fp_text user 25 (at 19.05 17.78 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right)) ) (fp_text user 33 (at 19.05 15.24 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right)) ) (fp_text user 32 (at 19.05 12.7 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right)) ) (fp_text user 39 (at 19.05 10.16 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right)) ) (fp_text user 38 (at 19.05 7.62 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right)) ) (fp_text user 37 (at 19.05 5.08 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right)) ) (fp_text user 36 (at 19.05 2.54 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right)) ) (fp_text user 3V (at 19.05 0 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right)) ) (fp_text user 3V (at 3.81 27.94 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left)) ) (fp_text user G (at 3.81 25.4 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left)) ) (fp_text user G (at 3.81 22.86 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left)) ) (fp_text user 12 (at 3.81 20.32 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left)) ) (fp_text user 13 (at 3.81 17.78 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left)) ) (fp_text user 15 (at 3.81 15.24 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left)) ) (fp_text user 2 (at 3.81 12.7 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left)) ) (fp_text user 17 (at 3.81 10.16 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left)) ) (fp_text user 22 (at 3.81 7.62 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left)) ) (fp_text user 21 (at 3.81 5.08 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left)) ) (fp_text user G (at 3.81 2.54 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left)) ) (fp_text user G (at 3.81 0 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left)) ) (fp_text user CABLE (at 10.795 63.754 180) (layer F.Fab) (effects (font (size 10 8) (thickness 0.15))) ) (pad 22 thru_hole circle (at 20.32 5.08 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 26 /MCP_INT)) (pad 21 thru_hole circle (at 20.32 7.62 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 98 "Net-(U104-Pad21)")) (pad 19 thru_hole circle (at 20.32 12.7 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 10 /MOTOR_DATA)) (pad 20 thru_hole circle (at 20.32 10.16 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 3 /SENSOR_DATA)) (pad 17 thru_hole circle (at 20.32 17.78 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 19 /LATCH)) (pad 16 thru_hole circle (at 20.32 20.32 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 20 /MCP_RESET)) (pad 14 thru_hole circle (at 20.32 25.4 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 2 GND)) (pad 24 thru_hole circle (at 20.32 0 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 97 "Net-(U104-Pad24)")) (pad 18 thru_hole circle (at 20.32 15.24 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 4 /CLOCK)) (pad 15 thru_hole circle (at 20.32 22.86 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 27 /RGB_LEDS_3V3)) (pad 13 thru_hole circle (at 20.32 27.94 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 1 +5V)) (pad 23 thru_hole circle (at 20.32 2.54 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 5 /RX)) (pad 8 thru_hole circle (at 2.54 17.78 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 6 /TX)) (pad 10 thru_hole circle (at 2.54 22.86 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 2 GND)) (pad 6 thru_hole circle (at 2.54 12.7 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 9 /RS485_DRIVE_EN)) (pad 1 thru_hole circle (at 2.54 0 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 2 GND)) (pad 2 thru_hole circle (at 2.54 2.54 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 2 GND)) (pad 3 thru_hole circle (at 2.54 5.08 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 8 /SDA)) (pad 4 thru_hole circle (at 2.54 7.62 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 7 /SCL)) (pad 5 thru_hole circle (at 2.54 10.16 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 25 /MASTER_EN)) (pad 12 thru_hole circle (at 2.54 27.94 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 11 +3V3)) (pad 9 thru_hole circle (at 2.54 20.32 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 99 "Net-(U104-Pad9)")) (pad 11 thru_hole circle (at 2.54 25.4 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 2 GND)) (pad 7 thru_hole circle (at 2.54 15.24 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 100 "Net-(U104-Pad7)")) (pad 24 thru_hole circle (at 22.86 0 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 97 "Net-(U104-Pad24)")) (pad 23 thru_hole circle (at 22.86 2.54 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 5 /RX)) (pad 22 thru_hole circle (at 22.86 5.08 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 26 /MCP_INT)) (pad 21 thru_hole circle (at 22.86 7.62 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 98 "Net-(U104-Pad21)")) (pad 20 thru_hole circle (at 22.86 10.16 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 3 /SENSOR_DATA)) (pad 19 thru_hole circle (at 22.86 12.7 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 10 /MOTOR_DATA)) (pad 18 thru_hole circle (at 22.86 15.24 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 4 /CLOCK)) (pad 17 thru_hole circle (at 22.86 17.78 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 19 /LATCH)) (pad 16 thru_hole circle (at 22.86 20.32 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 20 /MCP_RESET)) (pad 15 thru_hole circle (at 22.86 22.86 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 27 /RGB_LEDS_3V3)) (pad 14 thru_hole circle (at 22.86 25.4 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 2 GND)) (pad 13 thru_hole circle (at 22.86 27.94 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 1 +5V)) (pad 12 thru_hole circle (at 0 27.94 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 11 +3V3)) (pad 11 thru_hole circle (at 0 25.4 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 2 GND)) (pad 10 thru_hole circle (at 0 22.86 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 2 GND)) (pad 9 thru_hole circle (at 0 20.32 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 99 "Net-(U104-Pad9)")) (pad 8 thru_hole circle (at 0 17.78 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 6 /TX)) (pad 7 thru_hole circle (at 0 15.24 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 100 "Net-(U104-Pad7)")) (pad 6 thru_hole circle (at 0 12.7 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 9 /RS485_DRIVE_EN)) (pad 5 thru_hole circle (at 0 10.16 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 25 /MASTER_EN)) (pad 4 thru_hole circle (at 0 7.62 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 7 /SCL)) (pad 3 thru_hole circle (at 0 5.08 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 8 /SDA)) (pad 2 thru_hole circle (at 0 2.54 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 2 GND)) (pad 1 thru_hole circle (at 0 0 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 2 GND)) (model ../lib/TTGO.models/TTGO_TDisplay.step (offset (xyz 0 0 10.5)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) (model ${KISYS3DMOD}/Connector_PinSocket_2.54mm.3dshapes/PinSocket_1x12_P2.54mm_Vertical.step (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) (model ${KISYS3DMOD}/Connector_PinSocket_2.54mm.3dshapes/PinSocket_1x12_P2.54mm_Vertical.step (offset (xyz 22.86 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) (model ${KISYS3DMOD}/Connector_PinHeader_2.54mm.3dshapes/PinHeader_1x12_P2.54mm_Vertical.step (offset (xyz 0 0 10)) (scale (xyz 1 1 1)) (rotate (xyz 0 180 0)) ) (model ${KISYS3DMOD}/Connector_PinHeader_2.54mm.3dshapes/PinHeader_1x12_P2.54mm_Vertical.step (offset (xyz 22.86 0 10)) (scale (xyz 1 1 1)) (rotate (xyz 0 180 0)) ) ) (module ModifiedSymbols:IDC-Header_2x04_P2.54mm_Vertical (layer F.Cu) (tedit 617B5015) (tstamp 617F9FB3) (at 38.1 163.195) (descr "Through hole IDC box header, 2x04, 2.54mm pitch, DIN 41651 / IEC 60603-13, double rows, https://docs.google.com/spreadsheets/d/16SsEcesNF15N3Lb4niX7dcUr-NY5_MFPQhobNuNppn4/edit#gid=0") (tags "Through hole vertical IDC box header THT 2x04 2.54mm double row") (path /61826671) (fp_text reference J108 (at 1.27 -2.921) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value Conn_02x04_Odd_Even (at 1.27 13.72) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 6.22 -5.6) (end -3.68 -5.6) (layer F.CrtYd) (width 0.05)) (fp_line (start 6.22 13.22) (end 6.22 -5.6) (layer F.CrtYd) (width 0.05)) (fp_line (start -3.68 13.22) (end 6.22 13.22) (layer F.CrtYd) (width 0.05)) (fp_line (start -3.68 -5.6) (end -3.68 13.22) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.98 5.86) (end -3.29 5.86) (layer F.SilkS) (width 0.12)) (fp_line (start -1.98 5.86) (end -1.98 5.86) (layer F.SilkS) (width 0.12)) (fp_line (start -1.98 11.53) (end -1.98 5.86) (layer F.SilkS) (width 0.12)) (fp_line (start 4.52 11.53) (end -1.98 11.53) (layer F.SilkS) (width 0.12)) (fp_line (start 4.52 -3.91) (end 4.52 11.53) (layer F.SilkS) (width 0.12)) (fp_line (start -1.98 -3.91) (end 4.52 -3.91) (layer F.SilkS) (width 0.12)) (fp_line (start -1.98 1.76) (end -1.98 -3.91) (layer F.SilkS) (width 0.12)) (fp_line (start -3.29 1.76) (end -1.98 1.76) (layer F.SilkS) (width 0.12)) (fp_line (start -3.29 12.83) (end -3.29 -5.21) (layer F.SilkS) (width 0.12)) (fp_line (start 5.83 12.83) (end -3.29 12.83) (layer F.SilkS) (width 0.12)) (fp_line (start 5.83 -5.21) (end 5.83 12.83) (layer F.SilkS) (width 0.12)) (fp_line (start -3.29 -5.21) (end 5.83 -5.21) (layer F.SilkS) (width 0.12)) (fp_line (start -1.98 5.86) (end -3.18 5.86) (layer F.Fab) (width 0.1)) (fp_line (start -1.98 5.86) (end -1.98 5.86) (layer F.Fab) (width 0.1)) (fp_line (start -1.98 11.53) (end -1.98 5.86) (layer F.Fab) (width 0.1)) (fp_line (start 4.52 11.53) (end -1.98 11.53) (layer F.Fab) (width 0.1)) (fp_line (start 4.52 -3.91) (end 4.52 11.53) (layer F.Fab) (width 0.1)) (fp_line (start -1.98 -3.91) (end 4.52 -3.91) (layer F.Fab) (width 0.1)) (fp_line (start -1.98 1.76) (end -1.98 -3.91) (layer F.Fab) (width 0.1)) (fp_line (start -3.18 1.76) (end -1.98 1.76) (layer F.Fab) (width 0.1)) (fp_line (start -3.18 12.72) (end -3.18 -4.1) (layer F.Fab) (width 0.1)) (fp_line (start 5.72 12.72) (end -3.18 12.72) (layer F.Fab) (width 0.1)) (fp_line (start 5.72 -5.1) (end 5.72 12.72) (layer F.Fab) (width 0.1)) (fp_line (start -2.18 -5.1) (end 5.72 -5.1) (layer F.Fab) (width 0.1)) (fp_line (start -3.18 -4.1) (end -2.18 -5.1) (layer F.Fab) (width 0.1)) (fp_text user %R (at 1.27 3.81 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 1 thru_hole roundrect (at 0 0) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (roundrect_rratio 0.147059) (net 4 /CLOCK)) (pad 3 thru_hole circle (at 0 2.54) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 10 /MOTOR_DATA)) (pad 5 thru_hole circle (at 0 5.08) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 3 /SENSOR_DATA)) (pad 7 thru_hole circle (at 0 7.62) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 19 /LATCH)) (pad 2 thru_hole circle (at 2.54 0) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 2 GND)) (pad 4 thru_hole circle (at 2.54 2.54) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 2 GND)) (pad 6 thru_hole circle (at 2.54 5.08) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 2 GND)) (pad 8 thru_hole circle (at 2.54 7.62) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 2 GND)) (model ${KISYS3DMOD}/Connector_IDC.3dshapes/IDC-Header_2x04_P2.54mm_Vertical.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module ModifiedSymbols:PinHeader_1x03_P2.54mm_Vertical_SolderJumper (layer F.Cu) (tedit 60737402) (tstamp 60746A83) (at 67.31 212.09 270) (descr "Through hole straight pin header, 1x03, 2.54mm pitch, single row") (tags "Through hole pin header THT 1x03 2.54mm single row") (path /608A0DD3) (fp_text reference JP101 (at 0 -2.33 90) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value LEDs (at 0 7.41 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_poly (pts (xy 1 1.54) (xy 1 3.54) (xy -1 3.54) (xy -1 1.54) (xy 0 1.24)) (layer F.Cu) (width 0.01)) (fp_poly (pts (xy 1 -1) (xy 1 1.3) (xy 0 1) (xy -1 1.3) (xy -1 -1)) (layer F.Cu) (width 0.01)) (fp_poly (pts (xy 1 3.54) (xy -1 3.54) (xy -1 -1) (xy 1 -1)) (layer F.Mask) (width 0.01)) (fp_line (start -0.635 -1.27) (end 1.27 -1.27) (layer F.Fab) (width 0.1)) (fp_line (start 1.27 -1.27) (end 1.27 6.35) (layer F.Fab) (width 0.1)) (fp_line (start 1.27 6.35) (end -1.27 6.35) (layer F.Fab) (width 0.1)) (fp_line (start -1.27 6.35) (end -1.27 -0.635) (layer F.Fab) (width 0.1)) (fp_line (start -1.27 -0.635) (end -0.635 -1.27) (layer F.Fab) (width 0.1)) (fp_line (start -1.8 -1.8) (end -1.8 6.85) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.8 6.85) (end 1.8 6.85) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.8 6.85) (end 1.8 -1.8) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.8 -1.8) (end -1.8 -1.8) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 2.54) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 3 thru_hole circle (at 0 5.08 270) (size 2 2) (drill 1) (layers *.Cu *.Mask)) (pad 2 thru_hole rect (at 0 2.54 270) (size 2 2) (drill 1) (layers *.Cu *.Mask) (net 2 GND)) (pad 1 thru_hole rect (at 0 0 270) (size 2 2) (drill 1) (layers *.Cu *.Mask) (net 48 /LED_GND)) (model ${KISYS3DMOD}/Connector_PinHeader_2.54mm.3dshapes/PinHeader_1x03_P2.54mm_Vertical.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Resistor_SMD:R_0805_2012Metric (layer F.Cu) (tedit 5F68FEEE) (tstamp 607409A4) (at 111.76 163.83) (descr "Resistor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") (tags resistor) (path /60B1F5E9/607F8CFF) (attr smd) (fp_text reference R607 (at 0 -1.905) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (fp_text value 15k (at 0 1.65) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 1.68 0.95) (end -1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.68 -0.95) (end 1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.68 -0.95) (end 1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.68 0.95) (end -1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start -0.227064 0.735) (end 0.227064 0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -0.227064 -0.735) (end 0.227064 -0.735) (layer F.SilkS) (width 0.12)) (fp_line (start 1 0.625) (end -1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 -0.625) (end 1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start -1 -0.625) (end 1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start -1 0.625) (end -1 -0.625) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.5 0.5) (thickness 0.08))) ) (pad 2 smd roundrect (at 0.9125 0) (size 1.025 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.243902) (net 17 /OUT4_EN)) (pad 1 smd roundrect (at -0.9125 0) (size 1.025 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.243902) (net 2 GND)) (model ${KISYS3DMOD}/Resistor_SMD.3dshapes/R_0805_2012Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Resistor_SMD:R_0805_2012Metric (layer F.Cu) (tedit 5F68FEEE) (tstamp 6073DD86) (at 111.76 131.445) (descr "Resistor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") (tags resistor) (path /60B0E338/607F8CFF) (attr smd) (fp_text reference R507 (at 0 -1.905) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (fp_text value 15k (at 0 1.65) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 1.68 0.95) (end -1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.68 -0.95) (end 1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.68 -0.95) (end 1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.68 0.95) (end -1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start -0.227064 0.735) (end 0.227064 0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -0.227064 -0.735) (end 0.227064 -0.735) (layer F.SilkS) (width 0.12)) (fp_line (start 1 0.625) (end -1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 -0.625) (end 1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start -1 -0.625) (end 1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start -1 0.625) (end -1 -0.625) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.5 0.5) (thickness 0.08))) ) (pad 2 smd roundrect (at 0.9125 0) (size 1.025 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.243902) (net 16 /OUT3_EN)) (pad 1 smd roundrect (at -0.9125 0) (size 1.025 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.243902) (net 2 GND)) (model ${KISYS3DMOD}/Resistor_SMD.3dshapes/R_0805_2012Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Resistor_SMD:R_0805_2012Metric (layer F.Cu) (tedit 5F68FEEE) (tstamp 6073DCB5) (at 111.76 99.06) (descr "Resistor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") (tags resistor) (path /60AFE278/607F8CFF) (attr smd) (fp_text reference R407 (at 0 -1.905) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (fp_text value 15k (at 0 1.65) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 1.68 0.95) (end -1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.68 -0.95) (end 1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.68 -0.95) (end 1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.68 0.95) (end -1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start -0.227064 0.735) (end 0.227064 0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -0.227064 -0.735) (end 0.227064 -0.735) (layer F.SilkS) (width 0.12)) (fp_line (start 1 0.625) (end -1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 -0.625) (end 1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start -1 -0.625) (end 1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start -1 0.625) (end -1 -0.625) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.5 0.5) (thickness 0.08))) ) (pad 2 smd roundrect (at 0.9125 0) (size 1.025 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.243902) (net 15 /OUT2_EN)) (pad 1 smd roundrect (at -0.9125 0) (size 1.025 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.243902) (net 2 GND)) (model ${KISYS3DMOD}/Resistor_SMD.3dshapes/R_0805_2012Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Resistor_SMD:R_0805_2012Metric (layer F.Cu) (tedit 5F68FEEE) (tstamp 6073DBE4) (at 111.76 66.675) (descr "Resistor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") (tags resistor) (path /60AEE6BF/607F8CFF) (attr smd) (fp_text reference R307 (at 0 -1.905) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (fp_text value 15k (at 0 1.65) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 1.68 0.95) (end -1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.68 -0.95) (end 1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.68 -0.95) (end 1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.68 0.95) (end -1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start -0.227064 0.735) (end 0.227064 0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -0.227064 -0.735) (end 0.227064 -0.735) (layer F.SilkS) (width 0.12)) (fp_line (start 1 0.625) (end -1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 -0.625) (end 1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start -1 -0.625) (end 1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start -1 0.625) (end -1 -0.625) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.5 0.5) (thickness 0.08))) ) (pad 2 smd roundrect (at 0.9125 0) (size 1.025 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.243902) (net 14 /OUT1_EN)) (pad 1 smd roundrect (at -0.9125 0) (size 1.025 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.243902) (net 2 GND)) (model ${KISYS3DMOD}/Resistor_SMD.3dshapes/R_0805_2012Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Resistor_SMD:R_0805_2012Metric (layer F.Cu) (tedit 5F68FEEE) (tstamp 6073F83B) (at 111.76 34.29) (descr "Resistor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") (tags resistor) (path /606FA86C/607F8CFF) (attr smd) (fp_text reference R207 (at 0 -1.905) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (fp_text value 15k (at 0 1.65) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 1.68 0.95) (end -1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.68 -0.95) (end 1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.68 -0.95) (end 1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.68 0.95) (end -1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start -0.227064 0.735) (end 0.227064 0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -0.227064 -0.735) (end 0.227064 -0.735) (layer F.SilkS) (width 0.12)) (fp_line (start 1 0.625) (end -1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 -0.625) (end 1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start -1 -0.625) (end 1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start -1 0.625) (end -1 -0.625) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.5 0.5) (thickness 0.08))) ) (pad 2 smd roundrect (at 0.9125 0) (size 1.025 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.243902) (net 13 /OUT0_EN)) (pad 1 smd roundrect (at -0.9125 0) (size 1.025 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.243902) (net 2 GND)) (model ${KISYS3DMOD}/Resistor_SMD.3dshapes/R_0805_2012Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Buck:BuckModuleBackSilk (layer F.Cu) (tedit 606E666B) (tstamp 606F3D03) (at 66.04 32.385 270) (path /607153AC) (fp_text reference U103 (at 0 0.5 270) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value Buck (at 0 -0.5 270) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 15.24 6.35) (end 12.7 8.89) (layer B.SilkS) (width 0.15)) (fp_line (start 15.24 6.35) (end 12.7 3.81) (layer B.SilkS) (width 0.15)) (fp_line (start 2.54 6.35) (end 15.24 6.35) (layer B.SilkS) (width 0.15)) (fp_line (start 20.6 -1.765) (end 20.6 15.735) (layer B.SilkS) (width 0.15)) (fp_line (start -1.9 -1.765) (end -1.9 15.735) (layer B.SilkS) (width 0.15)) (fp_line (start -1.9 15.735) (end 20.6 15.735) (layer B.SilkS) (width 0.15)) (fp_line (start -1.9 -1.765) (end 20.6 -1.765) (layer B.SilkS) (width 0.15)) (fp_text user "[Install on other side]" (at 9.525 -0.635 90) (layer B.SilkS) (effects (font (size 0.8 0.8) (thickness 0.12) italic) (justify mirror)) ) (fp_text user IN- (at 3.81 1.27 270) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) (fp_text user OUT- (at 13.97 1.27 270) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) (fp_text user IN+ (at 3.81 12.7 270) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) (fp_text user OUT+ (at 13.97 12.7 270) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) (pad IN_GND thru_hole circle (at 0 0 270) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 2 GND)) (pad IN_GND thru_hole circle (at 0 2.54 270) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 2 GND)) (pad IN thru_hole circle (at 0 11.43 270) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 31 +12V)) (pad IN thru_hole circle (at 0 13.97 270) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 31 +12V)) (pad OUT_GND thru_hole circle (at 18.7 0 270) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 2 GND)) (pad OUT_GND thru_hole circle (at 18.7 2.54 270) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 2 GND)) (pad OUT thru_hole circle (at 18.7 11.43 270) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 47 "Net-(D107-Pad2)")) (pad OUT thru_hole circle (at 18.7 13.97 270) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 47 "Net-(D107-Pad2)")) ) (module VN7007ALHTR:VN7007ALHTR (layer F.Cu) (tedit 60700091) (tstamp 606F25D5) (at 96.52 168.91 180) (path /60B1F5E9/607187B2) (fp_text reference U602 (at -7.62 0 90) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (fp_text value VN7007ALH (at 0 0) (layer F.Fab) (effects (font (size 1.27 1.27) (thickness 0.15))) ) (fp_line (start 3.05 3.25) (end -3.05 3.25) (layer F.Fab) (width 0.15)) (fp_line (start 3.05 -3.25) (end 3.05 3.25) (layer F.Fab) (width 0.15)) (fp_line (start -3.05 -3.25) (end 3.05 -3.25) (layer F.Fab) (width 0.15)) (fp_line (start -3.05 3.25) (end -3.05 -3.25) (layer F.Fab) (width 0.15)) (fp_circle (center -6.4 -3.55) (end -6.275 -3.55) (layer F.SilkS) (width 0.25)) (fp_line (start -3.05 -3.25) (end 3.05 -3.25) (layer F.SilkS) (width 0.15)) (fp_line (start -3.05 3.25) (end 3.05 3.25) (layer F.SilkS) (width 0.15)) (fp_line (start 3.05 3.15) (end 3.05 3.25) (layer F.SilkS) (width 0.15)) (fp_line (start 3.05 -3.25) (end 3.05 -3.15) (layer F.SilkS) (width 0.15)) (fp_line (start 5.025001 3.725) (end 5.025001 -3.725) (layer F.CrtYd) (width 0.15)) (fp_line (start -7.024999 3.725) (end 5.025001 3.725) (layer F.CrtYd) (width 0.15)) (fp_line (start -7.024999 -3.725) (end -7.024999 3.725) (layer F.CrtYd) (width 0.15)) (fp_line (start 5.025001 -3.725) (end -7.024999 -3.725) (layer F.CrtYd) (width 0.15)) (fp_line (start 5.025001 -3.725) (end 5.025001 -3.725) (layer F.CrtYd) (width 0.15)) (pad 7 smd rect (at -5.425 2.55 270) (size 0.6 2.4) (layers F.Cu F.Paste F.Mask) (net 2 GND)) (pad 6 smd rect (at -5.425 1.7 270) (size 0.6 2.4) (layers F.Cu F.Paste F.Mask) (net 83 "Net-(R604-Pad2)")) (pad 5 smd rect (at -5.425 0.85 270) (size 0.6 2.4) (layers F.Cu F.Paste F.Mask) (net 84 "Net-(R606-Pad2)")) (pad 4 smd rect (at -5.425 0 270) (size 0.6 2.4) (layers F.Cu F.Paste F.Mask) (net 82 "Net-(R603-Pad1)")) (pad 3 smd rect (at -5.425 -0.85 270) (size 0.6 2.4) (layers F.Cu F.Paste F.Mask) (net 67 /PowerChannel4/POWER_OUT)) (pad 2 smd rect (at -5.425 -1.7 270) (size 0.6 2.4) (layers F.Cu F.Paste F.Mask) (net 67 /PowerChannel4/POWER_OUT)) (pad 1 smd rect (at -5.425 -2.55 270) (size 0.6 2.4) (layers F.Cu F.Paste F.Mask) (net 67 /PowerChannel4/POWER_OUT)) (pad TAB smd rect (at 1.375 0 270) (size 5.55 6.5) (layers F.Cu F.Paste F.Mask) (net 52 /PowerChannel4/POWER_MONITORED)) (model ../lib/VN7003ALHTR.models/STMicroelectronics_-_VN7003ALHTR.step (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 90)) ) ) (module VN7007ALHTR:VN7007ALHTR (layer F.Cu) (tedit 60700091) (tstamp 606F3598) (at 96.52 136.525 180) (path /60B0E338/607187B2) (fp_text reference U502 (at -7.62 0 90) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (fp_text value VN7007ALH (at 0 0) (layer F.Fab) (effects (font (size 1.27 1.27) (thickness 0.15))) ) (fp_line (start 3.05 3.25) (end -3.05 3.25) (layer F.Fab) (width 0.15)) (fp_line (start 3.05 -3.25) (end 3.05 3.25) (layer F.Fab) (width 0.15)) (fp_line (start -3.05 -3.25) (end 3.05 -3.25) (layer F.Fab) (width 0.15)) (fp_line (start -3.05 3.25) (end -3.05 -3.25) (layer F.Fab) (width 0.15)) (fp_circle (center -6.4 -3.55) (end -6.275 -3.55) (layer F.SilkS) (width 0.25)) (fp_line (start -3.05 -3.25) (end 3.05 -3.25) (layer F.SilkS) (width 0.15)) (fp_line (start -3.05 3.25) (end 3.05 3.25) (layer F.SilkS) (width 0.15)) (fp_line (start 3.05 3.15) (end 3.05 3.25) (layer F.SilkS) (width 0.15)) (fp_line (start 3.05 -3.25) (end 3.05 -3.15) (layer F.SilkS) (width 0.15)) (fp_line (start 5.025001 3.725) (end 5.025001 -3.725) (layer F.CrtYd) (width 0.15)) (fp_line (start -7.024999 3.725) (end 5.025001 3.725) (layer F.CrtYd) (width 0.15)) (fp_line (start -7.024999 -3.725) (end -7.024999 3.725) (layer F.CrtYd) (width 0.15)) (fp_line (start 5.025001 -3.725) (end -7.024999 -3.725) (layer F.CrtYd) (width 0.15)) (fp_line (start 5.025001 -3.725) (end 5.025001 -3.725) (layer F.CrtYd) (width 0.15)) (pad 7 smd rect (at -5.425 2.55 270) (size 0.6 2.4) (layers F.Cu F.Paste F.Mask) (net 2 GND)) (pad 6 smd rect (at -5.425 1.7 270) (size 0.6 2.4) (layers F.Cu F.Paste F.Mask) (net 80 "Net-(R504-Pad2)")) (pad 5 smd rect (at -5.425 0.85 270) (size 0.6 2.4) (layers F.Cu F.Paste F.Mask) (net 81 "Net-(R506-Pad2)")) (pad 4 smd rect (at -5.425 0 270) (size 0.6 2.4) (layers F.Cu F.Paste F.Mask) (net 79 "Net-(R503-Pad1)")) (pad 3 smd rect (at -5.425 -0.85 270) (size 0.6 2.4) (layers F.Cu F.Paste F.Mask) (net 63 /PowerChannel3/POWER_OUT)) (pad 2 smd rect (at -5.425 -1.7 270) (size 0.6 2.4) (layers F.Cu F.Paste F.Mask) (net 63 /PowerChannel3/POWER_OUT)) (pad 1 smd rect (at -5.425 -2.55 270) (size 0.6 2.4) (layers F.Cu F.Paste F.Mask) (net 63 /PowerChannel3/POWER_OUT)) (pad TAB smd rect (at 1.375 0 270) (size 5.55 6.5) (layers F.Cu F.Paste F.Mask) (net 51 /PowerChannel3/POWER_MONITORED)) (model ../lib/VN7003ALHTR.models/STMicroelectronics_-_VN7003ALHTR.step (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 90)) ) ) (module VN7007ALHTR:VN7007ALHTR (layer F.Cu) (tedit 60700091) (tstamp 606F35E6) (at 96.52 104.14 180) (path /60AFE278/607187B2) (fp_text reference U402 (at -7.62 0 90) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (fp_text value VN7007ALH (at 0 0) (layer F.Fab) (effects (font (size 1.27 1.27) (thickness 0.15))) ) (fp_line (start 3.05 3.25) (end -3.05 3.25) (layer F.Fab) (width 0.15)) (fp_line (start 3.05 -3.25) (end 3.05 3.25) (layer F.Fab) (width 0.15)) (fp_line (start -3.05 -3.25) (end 3.05 -3.25) (layer F.Fab) (width 0.15)) (fp_line (start -3.05 3.25) (end -3.05 -3.25) (layer F.Fab) (width 0.15)) (fp_circle (center -6.4 -3.55) (end -6.275 -3.55) (layer F.SilkS) (width 0.25)) (fp_line (start -3.05 -3.25) (end 3.05 -3.25) (layer F.SilkS) (width 0.15)) (fp_line (start -3.05 3.25) (end 3.05 3.25) (layer F.SilkS) (width 0.15)) (fp_line (start 3.05 3.15) (end 3.05 3.25) (layer F.SilkS) (width 0.15)) (fp_line (start 3.05 -3.25) (end 3.05 -3.15) (layer F.SilkS) (width 0.15)) (fp_line (start 5.025001 3.725) (end 5.025001 -3.725) (layer F.CrtYd) (width 0.15)) (fp_line (start -7.024999 3.725) (end 5.025001 3.725) (layer F.CrtYd) (width 0.15)) (fp_line (start -7.024999 -3.725) (end -7.024999 3.725) (layer F.CrtYd) (width 0.15)) (fp_line (start 5.025001 -3.725) (end -7.024999 -3.725) (layer F.CrtYd) (width 0.15)) (fp_line (start 5.025001 -3.725) (end 5.025001 -3.725) (layer F.CrtYd) (width 0.15)) (pad 7 smd rect (at -5.425 2.55 270) (size 0.6 2.4) (layers F.Cu F.Paste F.Mask) (net 2 GND)) (pad 6 smd rect (at -5.425 1.7 270) (size 0.6 2.4) (layers F.Cu F.Paste F.Mask) (net 77 "Net-(R404-Pad2)")) (pad 5 smd rect (at -5.425 0.85 270) (size 0.6 2.4) (layers F.Cu F.Paste F.Mask) (net 78 "Net-(R406-Pad2)")) (pad 4 smd rect (at -5.425 0 270) (size 0.6 2.4) (layers F.Cu F.Paste F.Mask) (net 76 "Net-(R403-Pad1)")) (pad 3 smd rect (at -5.425 -0.85 270) (size 0.6 2.4) (layers F.Cu F.Paste F.Mask) (net 59 /PowerChannel2/POWER_OUT)) (pad 2 smd rect (at -5.425 -1.7 270) (size 0.6 2.4) (layers F.Cu F.Paste F.Mask) (net 59 /PowerChannel2/POWER_OUT)) (pad 1 smd rect (at -5.425 -2.55 270) (size 0.6 2.4) (layers F.Cu F.Paste F.Mask) (net 59 /PowerChannel2/POWER_OUT)) (pad TAB smd rect (at 1.375 0 270) (size 5.55 6.5) (layers F.Cu F.Paste F.Mask) (net 50 /PowerChannel2/POWER_MONITORED)) (model ../lib/VN7003ALHTR.models/STMicroelectronics_-_VN7003ALHTR.step (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 90)) ) ) (module VN7007ALHTR:VN7007ALHTR (layer F.Cu) (tedit 60700091) (tstamp 606F20BF) (at 96.52 71.755 180) (path /60AEE6BF/607187B2) (fp_text reference U302 (at -7.62 0 90) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (fp_text value VN7007ALH (at 0 0) (layer F.Fab) (effects (font (size 1.27 1.27) (thickness 0.15))) ) (fp_line (start 3.05 3.25) (end -3.05 3.25) (layer F.Fab) (width 0.15)) (fp_line (start 3.05 -3.25) (end 3.05 3.25) (layer F.Fab) (width 0.15)) (fp_line (start -3.05 -3.25) (end 3.05 -3.25) (layer F.Fab) (width 0.15)) (fp_line (start -3.05 3.25) (end -3.05 -3.25) (layer F.Fab) (width 0.15)) (fp_circle (center -6.4 -3.55) (end -6.275 -3.55) (layer F.SilkS) (width 0.25)) (fp_line (start -3.05 -3.25) (end 3.05 -3.25) (layer F.SilkS) (width 0.15)) (fp_line (start -3.05 3.25) (end 3.05 3.25) (layer F.SilkS) (width 0.15)) (fp_line (start 3.05 3.15) (end 3.05 3.25) (layer F.SilkS) (width 0.15)) (fp_line (start 3.05 -3.25) (end 3.05 -3.15) (layer F.SilkS) (width 0.15)) (fp_line (start 5.025001 3.725) (end 5.025001 -3.725) (layer F.CrtYd) (width 0.15)) (fp_line (start -7.024999 3.725) (end 5.025001 3.725) (layer F.CrtYd) (width 0.15)) (fp_line (start -7.024999 -3.725) (end -7.024999 3.725) (layer F.CrtYd) (width 0.15)) (fp_line (start 5.025001 -3.725) (end -7.024999 -3.725) (layer F.CrtYd) (width 0.15)) (fp_line (start 5.025001 -3.725) (end 5.025001 -3.725) (layer F.CrtYd) (width 0.15)) (pad 7 smd rect (at -5.425 2.55 270) (size 0.6 2.4) (layers F.Cu F.Paste F.Mask) (net 2 GND)) (pad 6 smd rect (at -5.425 1.7 270) (size 0.6 2.4) (layers F.Cu F.Paste F.Mask) (net 74 "Net-(R304-Pad2)")) (pad 5 smd rect (at -5.425 0.85 270) (size 0.6 2.4) (layers F.Cu F.Paste F.Mask) (net 75 "Net-(R306-Pad2)")) (pad 4 smd rect (at -5.425 0 270) (size 0.6 2.4) (layers F.Cu F.Paste F.Mask) (net 73 "Net-(R303-Pad1)")) (pad 3 smd rect (at -5.425 -0.85 270) (size 0.6 2.4) (layers F.Cu F.Paste F.Mask) (net 56 /PowerChannel1/POWER_OUT)) (pad 2 smd rect (at -5.425 -1.7 270) (size 0.6 2.4) (layers F.Cu F.Paste F.Mask) (net 56 /PowerChannel1/POWER_OUT)) (pad 1 smd rect (at -5.425 -2.55 270) (size 0.6 2.4) (layers F.Cu F.Paste F.Mask) (net 56 /PowerChannel1/POWER_OUT)) (pad TAB smd rect (at 1.375 0 270) (size 5.55 6.5) (layers F.Cu F.Paste F.Mask) (net 49 /PowerChannel1/POWER_MONITORED)) (model ../lib/VN7003ALHTR.models/STMicroelectronics_-_VN7003ALHTR.step (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 90)) ) ) (module VN7007ALHTR:VN7007ALHTR (layer F.Cu) (tedit 60700091) (tstamp 606F2BE7) (at 96.52 39.37 180) (path /606FA86C/607187B2) (fp_text reference U202 (at -7.62 0 90) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (fp_text value VN7007ALH (at 0 0) (layer F.Fab) (effects (font (size 1.27 1.27) (thickness 0.15))) ) (fp_line (start 3.05 3.25) (end -3.05 3.25) (layer F.Fab) (width 0.15)) (fp_line (start 3.05 -3.25) (end 3.05 3.25) (layer F.Fab) (width 0.15)) (fp_line (start -3.05 -3.25) (end 3.05 -3.25) (layer F.Fab) (width 0.15)) (fp_line (start -3.05 3.25) (end -3.05 -3.25) (layer F.Fab) (width 0.15)) (fp_circle (center -6.4 -3.55) (end -6.275 -3.55) (layer F.SilkS) (width 0.25)) (fp_line (start -3.05 -3.25) (end 3.05 -3.25) (layer F.SilkS) (width 0.15)) (fp_line (start -3.05 3.25) (end 3.05 3.25) (layer F.SilkS) (width 0.15)) (fp_line (start 3.05 3.15) (end 3.05 3.25) (layer F.SilkS) (width 0.15)) (fp_line (start 3.05 -3.25) (end 3.05 -3.15) (layer F.SilkS) (width 0.15)) (fp_line (start 5.025001 3.725) (end 5.025001 -3.725) (layer F.CrtYd) (width 0.15)) (fp_line (start -7.024999 3.725) (end 5.025001 3.725) (layer F.CrtYd) (width 0.15)) (fp_line (start -7.024999 -3.725) (end -7.024999 3.725) (layer F.CrtYd) (width 0.15)) (fp_line (start 5.025001 -3.725) (end -7.024999 -3.725) (layer F.CrtYd) (width 0.15)) (fp_line (start 5.025001 -3.725) (end 5.025001 -3.725) (layer F.CrtYd) (width 0.15)) (pad 7 smd rect (at -5.425 2.55 270) (size 0.6 2.4) (layers F.Cu F.Paste F.Mask) (net 2 GND)) (pad 6 smd rect (at -5.425 1.7 270) (size 0.6 2.4) (layers F.Cu F.Paste F.Mask) (net 43 "Net-(R204-Pad2)")) (pad 5 smd rect (at -5.425 0.85 270) (size 0.6 2.4) (layers F.Cu F.Paste F.Mask) (net 44 "Net-(R206-Pad2)")) (pad 4 smd rect (at -5.425 0 270) (size 0.6 2.4) (layers F.Cu F.Paste F.Mask) (net 42 "Net-(R203-Pad1)")) (pad 3 smd rect (at -5.425 -0.85 270) (size 0.6 2.4) (layers F.Cu F.Paste F.Mask) (net 30 /PowerChannel0/POWER_OUT)) (pad 2 smd rect (at -5.425 -1.7 270) (size 0.6 2.4) (layers F.Cu F.Paste F.Mask) (net 30 /PowerChannel0/POWER_OUT)) (pad 1 smd rect (at -5.425 -2.55 270) (size 0.6 2.4) (layers F.Cu F.Paste F.Mask) (net 30 /PowerChannel0/POWER_OUT)) (pad TAB smd rect (at 1.375 0 270) (size 5.55 6.5) (layers F.Cu F.Paste F.Mask) (net 46 /PowerChannel0/POWER_MONITORED)) (model ../lib/VN7003ALHTR.models/STMicroelectronics_-_VN7003ALHTR.step (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 90)) ) ) (module ModifiedSymbols:LED_0805_2012Metric_Silkscreen (layer F.Cu) (tedit 606FFE5F) (tstamp 606F1FAA) (at 119.38 167.005 180) (descr "LED SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: https://docs.google.com/spreadsheets/d/1BsfQQcO9C6DZCsRaXUlFlo91Tg2WpOkGARC1WS5S8t0/edit?usp=sharing), generated with kicad-footprint-generator") (tags LED) (path /60B1F5E9/6071874C) (attr smd) (fp_text reference D602 (at 3.175 0) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (fp_text value Red (at 0 1.65) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -0.254 -0.635) (end -0.254 0.635) (layer F.SilkS) (width 0.15)) (fp_line (start -0.254 0) (end 0.254 -0.635) (layer F.SilkS) (width 0.15)) (fp_line (start 0.254 0.635) (end -0.254 0) (layer F.SilkS) (width 0.15)) (fp_line (start 0.254 -0.635) (end 0.254 0.635) (layer F.SilkS) (width 0.15)) (fp_line (start 1 -0.6) (end -0.7 -0.6) (layer F.Fab) (width 0.1)) (fp_line (start -0.7 -0.6) (end -1 -0.3) (layer F.Fab) (width 0.1)) (fp_line (start -1 -0.3) (end -1 0.6) (layer F.Fab) (width 0.1)) (fp_line (start -1 0.6) (end 1 0.6) (layer F.Fab) (width 0.1)) (fp_line (start 1 0.6) (end 1 -0.6) (layer F.Fab) (width 0.1)) (fp_line (start -1.68 0.95) (end -1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.68 -0.95) (end 1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.68 -0.95) (end 1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.68 0.95) (end -1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.5 0.5) (thickness 0.08))) ) (pad 2 smd roundrect (at 0.9375 0 180) (size 0.975 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 67 /PowerChannel4/POWER_OUT)) (pad 1 smd roundrect (at -0.9375 0 180) (size 0.975 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 68 "Net-(D602-Pad1)")) (model ${KISYS3DMOD}/LED_SMD.3dshapes/LED_0805_2012Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module ModifiedSymbols:LED_0805_2012Metric_Silkscreen (layer F.Cu) (tedit 606FFE5F) (tstamp 606F2FA6) (at 119.38 179.705 180) (descr "LED SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: https://docs.google.com/spreadsheets/d/1BsfQQcO9C6DZCsRaXUlFlo91Tg2WpOkGARC1WS5S8t0/edit?usp=sharing), generated with kicad-footprint-generator") (tags LED) (path /60B1F5E9/607187E7) (attr smd) (fp_text reference D601 (at 3.175 0) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (fp_text value Red (at 0 1.65) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -0.254 -0.635) (end -0.254 0.635) (layer F.SilkS) (width 0.15)) (fp_line (start -0.254 0) (end 0.254 -0.635) (layer F.SilkS) (width 0.15)) (fp_line (start 0.254 0.635) (end -0.254 0) (layer F.SilkS) (width 0.15)) (fp_line (start 0.254 -0.635) (end 0.254 0.635) (layer F.SilkS) (width 0.15)) (fp_line (start 1 -0.6) (end -0.7 -0.6) (layer F.Fab) (width 0.1)) (fp_line (start -0.7 -0.6) (end -1 -0.3) (layer F.Fab) (width 0.1)) (fp_line (start -1 -0.3) (end -1 0.6) (layer F.Fab) (width 0.1)) (fp_line (start -1 0.6) (end 1 0.6) (layer F.Fab) (width 0.1)) (fp_line (start 1 0.6) (end 1 -0.6) (layer F.Fab) (width 0.1)) (fp_line (start -1.68 0.95) (end -1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.68 -0.95) (end 1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.68 -0.95) (end 1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.68 0.95) (end -1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.5 0.5) (thickness 0.08))) ) (pad 2 smd roundrect (at 0.9375 0 180) (size 0.975 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 65 "Net-(D601-Pad2)")) (pad 1 smd roundrect (at -0.9375 0 180) (size 0.975 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 66 "Net-(D601-Pad1)")) (model ${KISYS3DMOD}/LED_SMD.3dshapes/LED_0805_2012Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module ModifiedSymbols:LED_0805_2012Metric_Silkscreen (layer F.Cu) (tedit 606FFE5F) (tstamp 606F1BCF) (at 119.38 134.62 180) (descr "LED SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: https://docs.google.com/spreadsheets/d/1BsfQQcO9C6DZCsRaXUlFlo91Tg2WpOkGARC1WS5S8t0/edit?usp=sharing), generated with kicad-footprint-generator") (tags LED) (path /60B0E338/6071874C) (attr smd) (fp_text reference D502 (at 3.175 0) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (fp_text value Red (at 0 1.65) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -0.254 -0.635) (end -0.254 0.635) (layer F.SilkS) (width 0.15)) (fp_line (start -0.254 0) (end 0.254 -0.635) (layer F.SilkS) (width 0.15)) (fp_line (start 0.254 0.635) (end -0.254 0) (layer F.SilkS) (width 0.15)) (fp_line (start 0.254 -0.635) (end 0.254 0.635) (layer F.SilkS) (width 0.15)) (fp_line (start 1 -0.6) (end -0.7 -0.6) (layer F.Fab) (width 0.1)) (fp_line (start -0.7 -0.6) (end -1 -0.3) (layer F.Fab) (width 0.1)) (fp_line (start -1 -0.3) (end -1 0.6) (layer F.Fab) (width 0.1)) (fp_line (start -1 0.6) (end 1 0.6) (layer F.Fab) (width 0.1)) (fp_line (start 1 0.6) (end 1 -0.6) (layer F.Fab) (width 0.1)) (fp_line (start -1.68 0.95) (end -1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.68 -0.95) (end 1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.68 -0.95) (end 1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.68 0.95) (end -1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.5 0.5) (thickness 0.08))) ) (pad 2 smd roundrect (at 0.9375 0 180) (size 0.975 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 63 /PowerChannel3/POWER_OUT)) (pad 1 smd roundrect (at -0.9375 0 180) (size 0.975 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 64 "Net-(D502-Pad1)")) (model ${KISYS3DMOD}/LED_SMD.3dshapes/LED_0805_2012Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module ModifiedSymbols:LED_0805_2012Metric_Silkscreen (layer F.Cu) (tedit 606FFE5F) (tstamp 606F21F9) (at 119.38 147.32 180) (descr "LED SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: https://docs.google.com/spreadsheets/d/1BsfQQcO9C6DZCsRaXUlFlo91Tg2WpOkGARC1WS5S8t0/edit?usp=sharing), generated with kicad-footprint-generator") (tags LED) (path /60B0E338/607187E7) (attr smd) (fp_text reference D501 (at 3.175 0) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (fp_text value Red (at 0 1.65) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -0.254 -0.635) (end -0.254 0.635) (layer F.SilkS) (width 0.15)) (fp_line (start -0.254 0) (end 0.254 -0.635) (layer F.SilkS) (width 0.15)) (fp_line (start 0.254 0.635) (end -0.254 0) (layer F.SilkS) (width 0.15)) (fp_line (start 0.254 -0.635) (end 0.254 0.635) (layer F.SilkS) (width 0.15)) (fp_line (start 1 -0.6) (end -0.7 -0.6) (layer F.Fab) (width 0.1)) (fp_line (start -0.7 -0.6) (end -1 -0.3) (layer F.Fab) (width 0.1)) (fp_line (start -1 -0.3) (end -1 0.6) (layer F.Fab) (width 0.1)) (fp_line (start -1 0.6) (end 1 0.6) (layer F.Fab) (width 0.1)) (fp_line (start 1 0.6) (end 1 -0.6) (layer F.Fab) (width 0.1)) (fp_line (start -1.68 0.95) (end -1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.68 -0.95) (end 1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.68 -0.95) (end 1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.68 0.95) (end -1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.5 0.5) (thickness 0.08))) ) (pad 2 smd roundrect (at 0.9375 0 180) (size 0.975 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 61 "Net-(D501-Pad2)")) (pad 1 smd roundrect (at -0.9375 0 180) (size 0.975 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 62 "Net-(D501-Pad1)")) (model ${KISYS3DMOD}/LED_SMD.3dshapes/LED_0805_2012Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module ModifiedSymbols:LED_0805_2012Metric_Silkscreen (layer F.Cu) (tedit 606FFE5F) (tstamp 606F237C) (at 119.38 102.235 180) (descr "LED SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: https://docs.google.com/spreadsheets/d/1BsfQQcO9C6DZCsRaXUlFlo91Tg2WpOkGARC1WS5S8t0/edit?usp=sharing), generated with kicad-footprint-generator") (tags LED) (path /60AFE278/6071874C) (attr smd) (fp_text reference D402 (at 3.175 0) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (fp_text value Red (at 0 1.65) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -0.254 -0.635) (end -0.254 0.635) (layer F.SilkS) (width 0.15)) (fp_line (start -0.254 0) (end 0.254 -0.635) (layer F.SilkS) (width 0.15)) (fp_line (start 0.254 0.635) (end -0.254 0) (layer F.SilkS) (width 0.15)) (fp_line (start 0.254 -0.635) (end 0.254 0.635) (layer F.SilkS) (width 0.15)) (fp_line (start 1 -0.6) (end -0.7 -0.6) (layer F.Fab) (width 0.1)) (fp_line (start -0.7 -0.6) (end -1 -0.3) (layer F.Fab) (width 0.1)) (fp_line (start -1 -0.3) (end -1 0.6) (layer F.Fab) (width 0.1)) (fp_line (start -1 0.6) (end 1 0.6) (layer F.Fab) (width 0.1)) (fp_line (start 1 0.6) (end 1 -0.6) (layer F.Fab) (width 0.1)) (fp_line (start -1.68 0.95) (end -1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.68 -0.95) (end 1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.68 -0.95) (end 1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.68 0.95) (end -1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.5 0.5) (thickness 0.08))) ) (pad 2 smd roundrect (at 0.9375 0 180) (size 0.975 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 59 /PowerChannel2/POWER_OUT)) (pad 1 smd roundrect (at -0.9375 0 180) (size 0.975 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 60 "Net-(D402-Pad1)")) (model ${KISYS3DMOD}/LED_SMD.3dshapes/LED_0805_2012Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module ModifiedSymbols:LED_0805_2012Metric_Silkscreen (layer F.Cu) (tedit 606FFE5F) (tstamp 606F2304) (at 119.38 114.935 180) (descr "LED SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: https://docs.google.com/spreadsheets/d/1BsfQQcO9C6DZCsRaXUlFlo91Tg2WpOkGARC1WS5S8t0/edit?usp=sharing), generated with kicad-footprint-generator") (tags LED) (path /60AFE278/607187E7) (attr smd) (fp_text reference D401 (at 3.175 0) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (fp_text value Red (at 0 1.65) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -0.254 -0.635) (end -0.254 0.635) (layer F.SilkS) (width 0.15)) (fp_line (start -0.254 0) (end 0.254 -0.635) (layer F.SilkS) (width 0.15)) (fp_line (start 0.254 0.635) (end -0.254 0) (layer F.SilkS) (width 0.15)) (fp_line (start 0.254 -0.635) (end 0.254 0.635) (layer F.SilkS) (width 0.15)) (fp_line (start 1 -0.6) (end -0.7 -0.6) (layer F.Fab) (width 0.1)) (fp_line (start -0.7 -0.6) (end -1 -0.3) (layer F.Fab) (width 0.1)) (fp_line (start -1 -0.3) (end -1 0.6) (layer F.Fab) (width 0.1)) (fp_line (start -1 0.6) (end 1 0.6) (layer F.Fab) (width 0.1)) (fp_line (start 1 0.6) (end 1 -0.6) (layer F.Fab) (width 0.1)) (fp_line (start -1.68 0.95) (end -1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.68 -0.95) (end 1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.68 -0.95) (end 1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.68 0.95) (end -1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.5 0.5) (thickness 0.08))) ) (pad 2 smd roundrect (at 0.9375 0 180) (size 0.975 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 57 "Net-(D401-Pad2)")) (pad 1 smd roundrect (at -0.9375 0 180) (size 0.975 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 58 "Net-(D401-Pad1)")) (model ${KISYS3DMOD}/LED_SMD.3dshapes/LED_0805_2012Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module ModifiedSymbols:LED_0805_2012Metric_Silkscreen (layer F.Cu) (tedit 606FFE5F) (tstamp 606F225C) (at 119.38 69.85 180) (descr "LED SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: https://docs.google.com/spreadsheets/d/1BsfQQcO9C6DZCsRaXUlFlo91Tg2WpOkGARC1WS5S8t0/edit?usp=sharing), generated with kicad-footprint-generator") (tags LED) (path /60AEE6BF/6071874C) (attr smd) (fp_text reference D302 (at 3.175 0) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (fp_text value Red (at 0 1.65) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -0.254 -0.635) (end -0.254 0.635) (layer F.SilkS) (width 0.15)) (fp_line (start -0.254 0) (end 0.254 -0.635) (layer F.SilkS) (width 0.15)) (fp_line (start 0.254 0.635) (end -0.254 0) (layer F.SilkS) (width 0.15)) (fp_line (start 0.254 -0.635) (end 0.254 0.635) (layer F.SilkS) (width 0.15)) (fp_line (start 1 -0.6) (end -0.7 -0.6) (layer F.Fab) (width 0.1)) (fp_line (start -0.7 -0.6) (end -1 -0.3) (layer F.Fab) (width 0.1)) (fp_line (start -1 -0.3) (end -1 0.6) (layer F.Fab) (width 0.1)) (fp_line (start -1 0.6) (end 1 0.6) (layer F.Fab) (width 0.1)) (fp_line (start 1 0.6) (end 1 -0.6) (layer F.Fab) (width 0.1)) (fp_line (start -1.68 0.95) (end -1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.68 -0.95) (end 1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.68 -0.95) (end 1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.68 0.95) (end -1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.5 0.5) (thickness 0.08))) ) (pad 2 smd roundrect (at 0.9375 0 180) (size 0.975 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 56 /PowerChannel1/POWER_OUT)) (pad 1 smd roundrect (at -0.9375 0 180) (size 0.975 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 55 "Net-(D302-Pad1)")) (model ${KISYS3DMOD}/LED_SMD.3dshapes/LED_0805_2012Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module ModifiedSymbols:LED_0805_2012Metric_Silkscreen (layer F.Cu) (tedit 606FFE5F) (tstamp 606F1CEC) (at 119.38 82.55 180) (descr "LED SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: https://docs.google.com/spreadsheets/d/1BsfQQcO9C6DZCsRaXUlFlo91Tg2WpOkGARC1WS5S8t0/edit?usp=sharing), generated with kicad-footprint-generator") (tags LED) (path /60AEE6BF/607187E7) (attr smd) (fp_text reference D301 (at 3.175 0) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (fp_text value Red (at 0 1.65) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -0.254 -0.635) (end -0.254 0.635) (layer F.SilkS) (width 0.15)) (fp_line (start -0.254 0) (end 0.254 -0.635) (layer F.SilkS) (width 0.15)) (fp_line (start 0.254 0.635) (end -0.254 0) (layer F.SilkS) (width 0.15)) (fp_line (start 0.254 -0.635) (end 0.254 0.635) (layer F.SilkS) (width 0.15)) (fp_line (start 1 -0.6) (end -0.7 -0.6) (layer F.Fab) (width 0.1)) (fp_line (start -0.7 -0.6) (end -1 -0.3) (layer F.Fab) (width 0.1)) (fp_line (start -1 -0.3) (end -1 0.6) (layer F.Fab) (width 0.1)) (fp_line (start -1 0.6) (end 1 0.6) (layer F.Fab) (width 0.1)) (fp_line (start 1 0.6) (end 1 -0.6) (layer F.Fab) (width 0.1)) (fp_line (start -1.68 0.95) (end -1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.68 -0.95) (end 1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.68 -0.95) (end 1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.68 0.95) (end -1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.5 0.5) (thickness 0.08))) ) (pad 2 smd roundrect (at 0.9375 0 180) (size 0.975 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 53 "Net-(D301-Pad2)")) (pad 1 smd roundrect (at -0.9375 0 180) (size 0.975 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 54 "Net-(D301-Pad1)")) (model ${KISYS3DMOD}/LED_SMD.3dshapes/LED_0805_2012Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module ModifiedSymbols:LED_0805_2012Metric_Silkscreen (layer F.Cu) (tedit 606FFE5F) (tstamp 606F395A) (at 119.38 37.465 180) (descr "LED SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: https://docs.google.com/spreadsheets/d/1BsfQQcO9C6DZCsRaXUlFlo91Tg2WpOkGARC1WS5S8t0/edit?usp=sharing), generated with kicad-footprint-generator") (tags LED) (path /606FA86C/6071874C) (attr smd) (fp_text reference D202 (at 3.175 0) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (fp_text value Red (at 0 1.65) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -0.254 -0.635) (end -0.254 0.635) (layer F.SilkS) (width 0.15)) (fp_line (start -0.254 0) (end 0.254 -0.635) (layer F.SilkS) (width 0.15)) (fp_line (start 0.254 0.635) (end -0.254 0) (layer F.SilkS) (width 0.15)) (fp_line (start 0.254 -0.635) (end 0.254 0.635) (layer F.SilkS) (width 0.15)) (fp_line (start 1 -0.6) (end -0.7 -0.6) (layer F.Fab) (width 0.1)) (fp_line (start -0.7 -0.6) (end -1 -0.3) (layer F.Fab) (width 0.1)) (fp_line (start -1 -0.3) (end -1 0.6) (layer F.Fab) (width 0.1)) (fp_line (start -1 0.6) (end 1 0.6) (layer F.Fab) (width 0.1)) (fp_line (start 1 0.6) (end 1 -0.6) (layer F.Fab) (width 0.1)) (fp_line (start -1.68 0.95) (end -1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.68 -0.95) (end 1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.68 -0.95) (end 1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.68 0.95) (end -1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.5 0.5) (thickness 0.08))) ) (pad 2 smd roundrect (at 0.9375 0 180) (size 0.975 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 30 /PowerChannel0/POWER_OUT)) (pad 1 smd roundrect (at -0.9375 0 180) (size 0.975 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 39 "Net-(D202-Pad1)")) (model ${KISYS3DMOD}/LED_SMD.3dshapes/LED_0805_2012Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module ModifiedSymbols:LED_0805_2012Metric_Silkscreen (layer F.Cu) (tedit 606FFE5F) (tstamp 606F30FF) (at 119.38 50.165 180) (descr "LED SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: https://docs.google.com/spreadsheets/d/1BsfQQcO9C6DZCsRaXUlFlo91Tg2WpOkGARC1WS5S8t0/edit?usp=sharing), generated with kicad-footprint-generator") (tags LED) (path /606FA86C/607187E7) (attr smd) (fp_text reference D201 (at 3.175 0) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (fp_text value Red (at 0 1.65) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -0.254 -0.635) (end -0.254 0.635) (layer F.SilkS) (width 0.15)) (fp_line (start -0.254 0) (end 0.254 -0.635) (layer F.SilkS) (width 0.15)) (fp_line (start 0.254 0.635) (end -0.254 0) (layer F.SilkS) (width 0.15)) (fp_line (start 0.254 -0.635) (end 0.254 0.635) (layer F.SilkS) (width 0.15)) (fp_line (start 1 -0.6) (end -0.7 -0.6) (layer F.Fab) (width 0.1)) (fp_line (start -0.7 -0.6) (end -1 -0.3) (layer F.Fab) (width 0.1)) (fp_line (start -1 -0.3) (end -1 0.6) (layer F.Fab) (width 0.1)) (fp_line (start -1 0.6) (end 1 0.6) (layer F.Fab) (width 0.1)) (fp_line (start 1 0.6) (end 1 -0.6) (layer F.Fab) (width 0.1)) (fp_line (start -1.68 0.95) (end -1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.68 -0.95) (end 1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.68 -0.95) (end 1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.68 0.95) (end -1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.5 0.5) (thickness 0.08))) ) (pad 2 smd roundrect (at 0.9375 0 180) (size 0.975 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 37 "Net-(D201-Pad2)")) (pad 1 smd roundrect (at -0.9375 0 180) (size 0.975 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 38 "Net-(D201-Pad1)")) (model ${KISYS3DMOD}/LED_SMD.3dshapes/LED_0805_2012Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Dummy:Dummy (layer F.Cu) (tedit 606FAF91) (tstamp 60702DF2) (at 119.38 186.055) (path /60B1F5E9/6078F8EB) (attr virtual) (fp_text reference Z601 (at 0 0.5) (layer Cmts.User) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value Fuse (at 0 -0.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text user "(BOM Only)" (at 0 1.905) (layer Cmts.User) (effects (font (size 1 1) (thickness 0.15))) ) ) (module Dummy:Dummy (layer F.Cu) (tedit 606FAF91) (tstamp 60702DED) (at 119.38 153.67) (path /60B0E338/6078F8EB) (attr virtual) (fp_text reference Z501 (at 0 0.5) (layer Cmts.User) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value Fuse (at 0 -0.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text user "(BOM Only)" (at 0 1.905) (layer Cmts.User) (effects (font (size 1 1) (thickness 0.15))) ) ) (module Dummy:Dummy (layer F.Cu) (tedit 606FAF91) (tstamp 60702DE8) (at 119.38 121.285) (path /60AFE278/6078F8EB) (attr virtual) (fp_text reference Z401 (at 0 0.5) (layer Cmts.User) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value Fuse (at 0 -0.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text user "(BOM Only)" (at 0 1.905) (layer Cmts.User) (effects (font (size 1 1) (thickness 0.15))) ) ) (module Dummy:Dummy (layer F.Cu) (tedit 606FAF91) (tstamp 6071245D) (at 119.38 88.9) (path /60AEE6BF/6078F8EB) (attr virtual) (fp_text reference Z301 (at 0 0.5) (layer Cmts.User) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value Fuse (at 0 -0.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text user "(BOM Only)" (at 0 1.905) (layer Cmts.User) (effects (font (size 1 1) (thickness 0.15))) ) ) (module Dummy:Dummy (layer F.Cu) (tedit 606FAF91) (tstamp 60712491) (at 119.38 56.515) (path /606FA86C/6078F8EB) (attr virtual) (fp_text reference Z201 (at 0 0.5) (layer Cmts.User) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value Fuse (at 0 -0.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text user "(BOM Only)" (at 0 1.905) (layer Cmts.User) (effects (font (size 1 1) (thickness 0.15))) ) ) (module Capacitor_SMD:C_0805_2012Metric (layer F.Cu) (tedit 5F68FEEE) (tstamp 606ED3AA) (at 47.625 81.915 90) (descr "Capacitor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf, https://docs.google.com/spreadsheets/d/1BsfQQcO9C6DZCsRaXUlFlo91Tg2WpOkGARC1WS5S8t0/edit?usp=sharing), generated with kicad-footprint-generator") (tags capacitor) (path /60A2AB1E) (attr smd) (fp_text reference C114 (at -2.413 0.127 180) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (fp_text value 0.1uF (at 0 1.68 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 1.7 0.98) (end -1.7 0.98) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.7 -0.98) (end 1.7 0.98) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.7 -0.98) (end 1.7 -0.98) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.7 0.98) (end -1.7 -0.98) (layer F.CrtYd) (width 0.05)) (fp_line (start -0.261252 0.735) (end 0.261252 0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -0.261252 -0.735) (end 0.261252 -0.735) (layer F.SilkS) (width 0.12)) (fp_line (start 1 0.625) (end -1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 -0.625) (end 1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start -1 -0.625) (end 1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start -1 0.625) (end -1 -0.625) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 0 90) (layer F.Fab) (effects (font (size 0.5 0.5) (thickness 0.08))) ) (pad 2 smd roundrect (at 0.95 0 90) (size 1 1.45) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 11 +3V3)) (pad 1 smd roundrect (at -0.95 0 90) (size 1 1.45) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 2 GND)) (model ${KISYS3DMOD}/Capacitor_SMD.3dshapes/C_0805_2012Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Connector_PinHeader_2.54mm:PinHeader_1x06_P2.54mm_Vertical (layer F.Cu) (tedit 59FED5CC) (tstamp 606FD4A4) (at 51.435 59.055) (descr "Through hole straight pin header, 1x06, 2.54mm pitch, single row") (tags "Through hole pin header THT 1x06 2.54mm single row") (path /6082E04D) (fp_text reference J112 (at 0.635 -2.33) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (fp_text value Conn_01x06_Male (at 0 15.03) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -0.635 -1.27) (end 1.27 -1.27) (layer F.Fab) (width 0.1)) (fp_line (start 1.27 -1.27) (end 1.27 13.97) (layer F.Fab) (width 0.1)) (fp_line (start 1.27 13.97) (end -1.27 13.97) (layer F.Fab) (width 0.1)) (fp_line (start -1.27 13.97) (end -1.27 -0.635) (layer F.Fab) (width 0.1)) (fp_line (start -1.27 -0.635) (end -0.635 -1.27) (layer F.Fab) (width 0.1)) (fp_line (start -1.33 14.03) (end 1.33 14.03) (layer F.SilkS) (width 0.12)) (fp_line (start -1.33 1.27) (end -1.33 14.03) (layer F.SilkS) (width 0.12)) (fp_line (start 1.33 1.27) (end 1.33 14.03) (layer F.SilkS) (width 0.12)) (fp_line (start -1.33 1.27) (end 1.33 1.27) (layer F.SilkS) (width 0.12)) (fp_line (start -1.33 0) (end -1.33 -1.33) (layer F.SilkS) (width 0.12)) (fp_line (start -1.33 -1.33) (end 0 -1.33) (layer F.SilkS) (width 0.12)) (fp_line (start -1.8 -1.8) (end -1.8 14.5) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.8 14.5) (end 1.8 14.5) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.8 14.5) (end 1.8 -1.8) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.8 -1.8) (end -1.8 -1.8) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 6.35 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 6 thru_hole oval (at 0 12.7) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 1 +5V)) (pad 5 thru_hole oval (at 0 10.16) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 1 +5V)) (pad 4 thru_hole oval (at 0 7.62) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 1 +5V)) (pad 3 thru_hole oval (at 0 5.08) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 1 +5V)) (pad 2 thru_hole oval (at 0 2.54) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 1 +5V)) (pad 1 thru_hole rect (at 0 0) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 1 +5V)) (model ${KISYS3DMOD}/Connector_PinHeader_2.54mm.3dshapes/PinHeader_1x06_P2.54mm_Vertical.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Connector_PinHeader_2.54mm:PinHeader_1x06_P2.54mm_Vertical (layer F.Cu) (tedit 59FED5CC) (tstamp 606FD48A) (at 48.895 59.055) (descr "Through hole straight pin header, 1x06, 2.54mm pitch, single row") (tags "Through hole pin header THT 1x06 2.54mm single row") (path /607902DC) (fp_text reference J111 (at -0.635 -2.33) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (fp_text value Conn_01x06_Male (at 0 15.03) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -0.635 -1.27) (end 1.27 -1.27) (layer F.Fab) (width 0.1)) (fp_line (start 1.27 -1.27) (end 1.27 13.97) (layer F.Fab) (width 0.1)) (fp_line (start 1.27 13.97) (end -1.27 13.97) (layer F.Fab) (width 0.1)) (fp_line (start -1.27 13.97) (end -1.27 -0.635) (layer F.Fab) (width 0.1)) (fp_line (start -1.27 -0.635) (end -0.635 -1.27) (layer F.Fab) (width 0.1)) (fp_line (start -1.33 14.03) (end 1.33 14.03) (layer F.SilkS) (width 0.12)) (fp_line (start -1.33 1.27) (end -1.33 14.03) (layer F.SilkS) (width 0.12)) (fp_line (start 1.33 1.27) (end 1.33 14.03) (layer F.SilkS) (width 0.12)) (fp_line (start -1.33 1.27) (end 1.33 1.27) (layer F.SilkS) (width 0.12)) (fp_line (start -1.33 0) (end -1.33 -1.33) (layer F.SilkS) (width 0.12)) (fp_line (start -1.33 -1.33) (end 0 -1.33) (layer F.SilkS) (width 0.12)) (fp_line (start -1.8 -1.8) (end -1.8 14.5) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.8 14.5) (end 1.8 14.5) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.8 14.5) (end 1.8 -1.8) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.8 -1.8) (end -1.8 -1.8) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 6.35 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 6 thru_hole oval (at 0 12.7) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 85 "Net-(J111-Pad6)")) (pad 5 thru_hole oval (at 0 10.16) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 86 "Net-(J111-Pad5)")) (pad 4 thru_hole oval (at 0 7.62) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 87 "Net-(J111-Pad4)")) (pad 3 thru_hole oval (at 0 5.08) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 88 "Net-(J111-Pad3)")) (pad 2 thru_hole oval (at 0 2.54) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 89 "Net-(J111-Pad2)")) (pad 1 thru_hole rect (at 0 0) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 90 "Net-(J111-Pad1)")) (model ${KISYS3DMOD}/Connector_PinHeader_2.54mm.3dshapes/PinHeader_1x06_P2.54mm_Vertical.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Resistor_SMD:R_0805_2012Metric (layer F.Cu) (tedit 5F68FEEE) (tstamp 606F1A74) (at 59.055 86.995 180) (descr "Resistor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") (tags resistor) (path /61C34240) (attr smd) (fp_text reference R103 (at 0 -1.65) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value 15k (at 0 1.65) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -1 0.625) (end -1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start -1 -0.625) (end 1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 -0.625) (end 1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 0.625) (end -1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start -0.227064 -0.735) (end 0.227064 -0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -0.227064 0.735) (end 0.227064 0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -1.68 0.95) (end -1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.68 -0.95) (end 1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.68 -0.95) (end 1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.68 0.95) (end -1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.5 0.5) (thickness 0.08))) ) (pad 2 smd roundrect (at 0.9125 0 180) (size 1.025 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.243902) (net 2 GND)) (pad 1 smd roundrect (at -0.9125 0 180) (size 1.025 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.243902) (net 20 /MCP_RESET)) (model ${KISYS3DMOD}/Resistor_SMD.3dshapes/R_0805_2012Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Resistor_SMD:R_0805_2012Metric (layer F.Cu) (tedit 5F68FEEE) (tstamp 606F22CC) (at 37.465 212.09 90) (descr "Resistor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") (tags resistor) (path /60E21C5F) (attr smd) (fp_text reference R102 (at 0 -1.65 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value 1k (at 0 1.65 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -1 0.625) (end -1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start -1 -0.625) (end 1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 -0.625) (end 1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 0.625) (end -1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start -0.227064 -0.735) (end 0.227064 -0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -0.227064 0.735) (end 0.227064 0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -1.68 0.95) (end -1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.68 -0.95) (end 1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.68 -0.95) (end 1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.68 0.95) (end -1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 0 90) (layer F.Fab) (effects (font (size 0.5 0.5) (thickness 0.08))) ) (pad 2 smd roundrect (at 0.9125 0 90) (size 1.025 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.243902) (net 7 /SCL)) (pad 1 smd roundrect (at -0.9125 0 90) (size 1.025 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.243902) (net 11 +3V3)) (model ${KISYS3DMOD}/Resistor_SMD.3dshapes/R_0805_2012Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Resistor_SMD:R_0805_2012Metric (layer F.Cu) (tedit 5F68FEEE) (tstamp 606F27D6) (at 34.29 212.09 90) (descr "Resistor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") (tags resistor) (path /60C3D07D) (attr smd) (fp_text reference R101 (at 0 -1.65 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value 1k (at 0 1.65 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -1 0.625) (end -1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start -1 -0.625) (end 1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 -0.625) (end 1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 0.625) (end -1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start -0.227064 -0.735) (end 0.227064 -0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -0.227064 0.735) (end 0.227064 0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -1.68 0.95) (end -1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.68 -0.95) (end 1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.68 -0.95) (end 1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.68 0.95) (end -1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 0 90) (layer F.Fab) (effects (font (size 0.5 0.5) (thickness 0.08))) ) (pad 2 smd roundrect (at 0.9125 0 90) (size 1.025 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.243902) (net 8 /SDA)) (pad 1 smd roundrect (at -0.9125 0 90) (size 1.025 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.243902) (net 11 +3V3)) (model ${KISYS3DMOD}/Resistor_SMD.3dshapes/R_0805_2012Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Capacitor_SMD:C_0805_2012Metric (layer F.Cu) (tedit 5F68FEEE) (tstamp 606EF23B) (at 60.325 175.895 180) (descr "Capacitor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf, https://docs.google.com/spreadsheets/d/1BsfQQcO9C6DZCsRaXUlFlo91Tg2WpOkGARC1WS5S8t0/edit?usp=sharing), generated with kicad-footprint-generator") (tags capacitor) (path /62A330C5) (attr smd) (fp_text reference C108 (at 0 -1.651) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (fp_text value 0.1uF (at 0 1.68) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -1 0.625) (end -1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start -1 -0.625) (end 1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 -0.625) (end 1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 0.625) (end -1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start -0.261252 -0.735) (end 0.261252 -0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -0.261252 0.735) (end 0.261252 0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -1.7 0.98) (end -1.7 -0.98) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.7 -0.98) (end 1.7 -0.98) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.7 -0.98) (end 1.7 0.98) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.7 0.98) (end -1.7 0.98) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.5 0.5) (thickness 0.08))) ) (pad 2 smd roundrect (at 0.95 0 180) (size 1 1.45) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 2 GND)) (pad 1 smd roundrect (at -0.95 0 180) (size 1 1.45) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 1 +5V)) (model ${KISYS3DMOD}/Capacitor_SMD.3dshapes/C_0805_2012Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Capacitor_SMD:C_0805_2012Metric (layer F.Cu) (tedit 5F68FEEE) (tstamp 606DB4B8) (at 47.625 179.705 270) (descr "Capacitor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf, https://docs.google.com/spreadsheets/d/1BsfQQcO9C6DZCsRaXUlFlo91Tg2WpOkGARC1WS5S8t0/edit?usp=sharing), generated with kicad-footprint-generator") (tags capacitor) (path /62C5C329) (attr smd) (fp_text reference C107 (at 2.54 0 180) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (fp_text value 0.1uF (at 0 1.68 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -1 0.625) (end -1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start -1 -0.625) (end 1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 -0.625) (end 1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 0.625) (end -1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start -0.261252 -0.735) (end 0.261252 -0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -0.261252 0.735) (end 0.261252 0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -1.7 0.98) (end -1.7 -0.98) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.7 -0.98) (end 1.7 -0.98) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.7 -0.98) (end 1.7 0.98) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.7 0.98) (end -1.7 0.98) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 0 90) (layer F.Fab) (effects (font (size 0.5 0.5) (thickness 0.08))) ) (pad 2 smd roundrect (at 0.95 0 270) (size 1 1.45) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 2 GND)) (pad 1 smd roundrect (at -0.95 0 270) (size 1 1.45) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 1 +5V)) (model ${KISYS3DMOD}/Capacitor_SMD.3dshapes/C_0805_2012Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Capacitor_SMD:C_0805_2012Metric (layer F.Cu) (tedit 5F68FEEE) (tstamp 606F1A44) (at 49.53 120.015 180) (descr "Capacitor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf, https://docs.google.com/spreadsheets/d/1BsfQQcO9C6DZCsRaXUlFlo91Tg2WpOkGARC1WS5S8t0/edit?usp=sharing), generated with kicad-footprint-generator") (tags capacitor) (path /602822B0) (attr smd) (fp_text reference C106 (at 0 -1.68) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value 0.1uF (at 0 1.68) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -1 0.625) (end -1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start -1 -0.625) (end 1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 -0.625) (end 1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 0.625) (end -1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start -0.261252 -0.735) (end 0.261252 -0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -0.261252 0.735) (end 0.261252 0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -1.7 0.98) (end -1.7 -0.98) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.7 -0.98) (end 1.7 -0.98) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.7 -0.98) (end 1.7 0.98) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.7 0.98) (end -1.7 0.98) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.5 0.5) (thickness 0.08))) ) (pad 2 smd roundrect (at 0.95 0 180) (size 1 1.45) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 1 +5V)) (pad 1 smd roundrect (at -0.95 0 180) (size 1 1.45) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 2 GND)) (model ${KISYS3DMOD}/Capacitor_SMD.3dshapes/C_0805_2012Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Capacitor_SMD:C_0805_2012Metric (layer F.Cu) (tedit 5F68FEEE) (tstamp 606F27A3) (at 57.15 114.935 180) (descr "Capacitor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf, https://docs.google.com/spreadsheets/d/1BsfQQcO9C6DZCsRaXUlFlo91Tg2WpOkGARC1WS5S8t0/edit?usp=sharing), generated with kicad-footprint-generator") (tags capacitor) (path /61B9C2C2) (attr smd) (fp_text reference C105 (at 0 1.905) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value 0.1uF (at 0 1.68) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -1 0.625) (end -1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start -1 -0.625) (end 1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 -0.625) (end 1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 0.625) (end -1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start -0.261252 -0.735) (end 0.261252 -0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -0.261252 0.735) (end 0.261252 0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -1.7 0.98) (end -1.7 -0.98) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.7 -0.98) (end 1.7 -0.98) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.7 -0.98) (end 1.7 0.98) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.7 0.98) (end -1.7 0.98) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.5 0.5) (thickness 0.08))) ) (pad 2 smd roundrect (at 0.95 0 180) (size 1 1.45) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 2 GND)) (pad 1 smd roundrect (at -0.95 0 180) (size 1 1.45) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 11 +3V3)) (model ${KISYS3DMOD}/Capacitor_SMD.3dshapes/C_0805_2012Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Capacitor_SMD:C_0805_2012Metric (layer F.Cu) (tedit 5F68FEEE) (tstamp 606F2767) (at 53.975 146.685) (descr "Capacitor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf, https://docs.google.com/spreadsheets/d/1BsfQQcO9C6DZCsRaXUlFlo91Tg2WpOkGARC1WS5S8t0/edit?usp=sharing), generated with kicad-footprint-generator") (tags capacitor) (path /60A13ADA) (attr smd) (fp_text reference C103 (at -3.81 0) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value 4.7uF (at 0 1.68) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -1 0.625) (end -1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start -1 -0.625) (end 1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 -0.625) (end 1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 0.625) (end -1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start -0.261252 -0.735) (end 0.261252 -0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -0.261252 0.735) (end 0.261252 0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -1.7 0.98) (end -1.7 -0.98) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.7 -0.98) (end 1.7 -0.98) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.7 -0.98) (end 1.7 0.98) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.7 0.98) (end -1.7 0.98) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.5 0.5) (thickness 0.08))) ) (pad 2 smd roundrect (at 0.95 0) (size 1 1.45) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 2 GND)) (pad 1 smd roundrect (at -0.95 0) (size 1 1.45) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 12 /3V3_EXT)) (model ${KISYS3DMOD}/Capacitor_SMD.3dshapes/C_0805_2012Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Capacitor_SMD:C_0805_2012Metric (layer F.Cu) (tedit 5F68FEEE) (tstamp 606F2737) (at 53.975 136.525) (descr "Capacitor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf, https://docs.google.com/spreadsheets/d/1BsfQQcO9C6DZCsRaXUlFlo91Tg2WpOkGARC1WS5S8t0/edit?usp=sharing), generated with kicad-footprint-generator") (tags capacitor) (path /60A0D7E3) (attr smd) (fp_text reference C102 (at -3.81 0) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value 4.7uF (at 0 1.68) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -1 0.625) (end -1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start -1 -0.625) (end 1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 -0.625) (end 1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 0.625) (end -1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start -0.261252 -0.735) (end 0.261252 -0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -0.261252 0.735) (end 0.261252 0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -1.7 0.98) (end -1.7 -0.98) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.7 -0.98) (end 1.7 -0.98) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.7 -0.98) (end 1.7 0.98) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.7 0.98) (end -1.7 0.98) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.5 0.5) (thickness 0.08))) ) (pad 2 smd roundrect (at 0.95 0) (size 1 1.45) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 2 GND)) (pad 1 smd roundrect (at -0.95 0) (size 1 1.45) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 1 +5V)) (model ${KISYS3DMOD}/Capacitor_SMD.3dshapes/C_0805_2012Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Resistor_SMD:R_0805_2012Metric (layer F.Cu) (tedit 5F68FEEE) (tstamp 606F2EC3) (at 107.315 166.37 180) (descr "Resistor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") (tags resistor) (path /60B1F5E9/607187BF) (attr smd) (fp_text reference R606 (at 0 -1.397) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (fp_text value 1k (at 0 1.65) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -1 0.625) (end -1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start -1 -0.625) (end 1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 -0.625) (end 1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 0.625) (end -1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start -0.227064 -0.735) (end 0.227064 -0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -0.227064 0.735) (end 0.227064 0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -1.68 0.95) (end -1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.68 -0.95) (end 1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.68 -0.95) (end 1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.68 0.95) (end -1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.5 0.5) (thickness 0.08))) ) (pad 2 smd roundrect (at 0.9125 0 180) (size 1.025 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.243902) (net 84 "Net-(R606-Pad2)")) (pad 1 smd roundrect (at -0.9125 0 180) (size 1.025 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.243902) (net 2 GND)) (model ${KISYS3DMOD}/Resistor_SMD.3dshapes/R_0805_2012Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module LED_SMD:LED_WS2812B_PLCC4_5.0x5.0mm_P3.2mm (layer F.Cu) (tedit 5AA4B285) (tstamp 606F2B42) (at 84.455 183.515) (descr https://cdn-shop.adafruit.com/datasheets/WS2812B.pdf) (tags "LED RGB NeoPixel") (path /62C202EB) (attr smd) (fp_text reference D102 (at 0 3.175) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (fp_text value WS2812B (at 0 4) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 3.45 -2.75) (end -3.45 -2.75) (layer F.CrtYd) (width 0.05)) (fp_line (start 3.45 2.75) (end 3.45 -2.75) (layer F.CrtYd) (width 0.05)) (fp_line (start -3.45 2.75) (end 3.45 2.75) (layer F.CrtYd) (width 0.05)) (fp_line (start -3.45 -2.75) (end -3.45 2.75) (layer F.CrtYd) (width 0.05)) (fp_line (start 2.5 1.5) (end 1.5 2.5) (layer F.Fab) (width 0.1)) (fp_line (start -2.5 -2.5) (end -2.5 2.5) (layer F.Fab) (width 0.1)) (fp_line (start -2.5 2.5) (end 2.5 2.5) (layer F.Fab) (width 0.1)) (fp_line (start 2.5 2.5) (end 2.5 -2.5) (layer F.Fab) (width 0.1)) (fp_line (start 2.5 -2.5) (end -2.5 -2.5) (layer F.Fab) (width 0.1)) (fp_line (start -3.65 -2.75) (end 3.65 -2.75) (layer F.SilkS) (width 0.12)) (fp_line (start -3.65 2.75) (end 3.65 2.75) (layer F.SilkS) (width 0.12)) (fp_line (start 3.65 2.75) (end 3.65 1.6) (layer F.SilkS) (width 0.12)) (fp_circle (center 0 0) (end 0 -2) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (pad 1 smd rect (at -2.45 -1.6) (size 1.5 1) (layers F.Cu F.Paste F.Mask) (net 1 +5V)) (pad 2 smd rect (at -2.45 1.6) (size 1.5 1) (layers F.Cu F.Paste F.Mask) (net 33 "Net-(D102-Pad2)")) (pad 4 smd rect (at 2.45 -1.6) (size 1.5 1) (layers F.Cu F.Paste F.Mask) (net 32 "Net-(D101-Pad2)")) (pad 3 smd rect (at 2.45 1.6) (size 1.5 1) (layers F.Cu F.Paste F.Mask) (net 2 GND)) (model ${KISYS3DMOD}/LED_SMD.3dshapes/LED_WS2812B_PLCC4_5.0x5.0mm_P3.2mm.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Resistor_SMD:R_0805_2012Metric (layer F.Cu) (tedit 5F68FEEE) (tstamp 606F2911) (at 111.76 166.37) (descr "Resistor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") (tags resistor) (path /60B1F5E9/6071879D) (attr smd) (fp_text reference R603 (at 0 1.397) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (fp_text value 15k (at 0 1.65) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -1 0.625) (end -1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start -1 -0.625) (end 1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 -0.625) (end 1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 0.625) (end -1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start -0.227064 -0.735) (end 0.227064 -0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -0.227064 0.735) (end 0.227064 0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -1.68 0.95) (end -1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.68 -0.95) (end 1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.68 -0.95) (end 1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.68 0.95) (end -1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.5 0.5) (thickness 0.08))) ) (pad 2 smd roundrect (at 0.9125 0) (size 1.025 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.243902) (net 17 /OUT4_EN)) (pad 1 smd roundrect (at -0.9125 0) (size 1.025 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.243902) (net 82 "Net-(R603-Pad1)")) (model ${KISYS3DMOD}/Resistor_SMD.3dshapes/R_0805_2012Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Capacitor_SMD:C_0805_2012Metric (layer F.Cu) (tedit 5F68FEEE) (tstamp 606F1EEE) (at 78.105 182.88 270) (descr "Capacitor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf, https://docs.google.com/spreadsheets/d/1BsfQQcO9C6DZCsRaXUlFlo91Tg2WpOkGARC1WS5S8t0/edit?usp=sharing), generated with kicad-footprint-generator") (tags capacitor) (path /62AEB5EB) (attr smd) (fp_text reference C109 (at 2.54 0 180) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (fp_text value 0.1uF (at 0 1.68 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -1 0.625) (end -1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start -1 -0.625) (end 1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 -0.625) (end 1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 0.625) (end -1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start -0.261252 -0.735) (end 0.261252 -0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -0.261252 0.735) (end 0.261252 0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -1.7 0.98) (end -1.7 -0.98) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.7 -0.98) (end 1.7 -0.98) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.7 -0.98) (end 1.7 0.98) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.7 0.98) (end -1.7 0.98) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 0 90) (layer F.Fab) (effects (font (size 0.5 0.5) (thickness 0.08))) ) (pad 2 smd roundrect (at 0.95 0 270) (size 1 1.45) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 2 GND)) (pad 1 smd roundrect (at -0.95 0 270) (size 1 1.45) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 1 +5V)) (model ${KISYS3DMOD}/Capacitor_SMD.3dshapes/C_0805_2012Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Capacitor_SMD:C_0805_2012Metric (layer F.Cu) (tedit 5F68FEEE) (tstamp 606F19A5) (at 99.06 184.785 270) (descr "Capacitor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf, https://docs.google.com/spreadsheets/d/1BsfQQcO9C6DZCsRaXUlFlo91Tg2WpOkGARC1WS5S8t0/edit?usp=sharing), generated with kicad-footprint-generator") (tags capacitor) (path /60B1F5E9/60718742) (attr smd) (fp_text reference C601 (at 0 -1.68 90) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (fp_text value 0.1uF (at 0 1.68 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -1 0.625) (end -1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start -1 -0.625) (end 1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 -0.625) (end 1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 0.625) (end -1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start -0.261252 -0.735) (end 0.261252 -0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -0.261252 0.735) (end 0.261252 0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -1.7 0.98) (end -1.7 -0.98) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.7 -0.98) (end 1.7 -0.98) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.7 -0.98) (end 1.7 0.98) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.7 0.98) (end -1.7 0.98) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 0 90) (layer F.Fab) (effects (font (size 0.5 0.5) (thickness 0.08))) ) (pad 2 smd roundrect (at 0.95 0 270) (size 1 1.45) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 11 +3V3)) (pad 1 smd roundrect (at -0.95 0 270) (size 1 1.45) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 2 GND)) (model ${KISYS3DMOD}/Capacitor_SMD.3dshapes/C_0805_2012Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Resistor_SMD:R_0612_1632Metric (layer F.Cu) (tedit 5F68FEEE) (tstamp 606F253C) (at 101.6 175.895 180) (descr "Resistor SMD 0612 (1632 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: https://www.vishay.com/docs/20019/rcwe.pdf), generated with kicad-footprint-generator") (tags resistor) (path /60B1F5E9/6071877C) (attr smd) (fp_text reference R601 (at 0 -2.65) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (fp_text value "0.01R 1% 1W" (at 0 2.65) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -0.8 1.6) (end -0.8 -1.6) (layer F.Fab) (width 0.1)) (fp_line (start -0.8 -1.6) (end 0.8 -1.6) (layer F.Fab) (width 0.1)) (fp_line (start 0.8 -1.6) (end 0.8 1.6) (layer F.Fab) (width 0.1)) (fp_line (start 0.8 1.6) (end -0.8 1.6) (layer F.Fab) (width 0.1)) (fp_line (start -0.182983 -1.71) (end 0.182983 -1.71) (layer F.SilkS) (width 0.12)) (fp_line (start -0.182983 1.71) (end 0.182983 1.71) (layer F.SilkS) (width 0.12)) (fp_line (start -1.5 1.95) (end -1.5 -1.95) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.5 -1.95) (end 1.5 -1.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.5 -1.95) (end 1.5 1.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.5 1.95) (end -1.5 1.95) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.4 0.4) (thickness 0.06))) ) (pad 2 smd roundrect (at 0.75 0 180) (size 1 3.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 52 /PowerChannel4/POWER_MONITORED)) (pad 1 smd roundrect (at -0.75 0 180) (size 1 3.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 65 "Net-(D601-Pad2)")) (model ${KISYS3DMOD}/Resistor_SMD.3dshapes/R_0612_1632Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Resistor_SMD:R_0805_2012Metric (layer F.Cu) (tedit 5F68FEEE) (tstamp 606F1AC8) (at 119.38 182.245) (descr "Resistor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") (tags resistor) (path /60B1F5E9/607187ED) (attr smd) (fp_text reference R602 (at -3.175 -0.635) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (fp_text value 2k (at 0 1.65) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -1 0.625) (end -1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start -1 -0.625) (end 1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 -0.625) (end 1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 0.625) (end -1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start -0.227064 -0.735) (end 0.227064 -0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -0.227064 0.735) (end 0.227064 0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -1.68 0.95) (end -1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.68 -0.95) (end 1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.68 -0.95) (end 1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.68 0.95) (end -1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.5 0.5) (thickness 0.08))) ) (pad 2 smd roundrect (at 0.9125 0) (size 1.025 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.243902) (net 66 "Net-(D601-Pad1)")) (pad 1 smd roundrect (at -0.9125 0) (size 1.025 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.243902) (net 48 /LED_GND)) (model ${KISYS3DMOD}/Resistor_SMD.3dshapes/R_0805_2012Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module BK-6013:BK-6013 (layer F.Cu) (tedit 605D2E8E) (tstamp 606F205B) (at 109.22 184.785) (path /60B1F5E9/60718784) (fp_text reference F601 (at 0 -3.81) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (fp_text value "Fuse Holder BK-6013" (at 0 -0.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -7.35 -2.375) (end 7.35 -2.375) (layer F.SilkS) (width 0.15)) (fp_line (start -7.35 2.375) (end 7.35 2.375) (layer F.SilkS) (width 0.15)) (fp_line (start 7.35 -2.375) (end 7.35 2.375) (layer F.SilkS) (width 0.15)) (fp_line (start -7.35 -2.375) (end -7.35 2.375) (layer F.SilkS) (width 0.15)) (fp_line (start -7.747 -2.794) (end 7.747 -2.794) (layer F.CrtYd) (width 0.12)) (fp_line (start 7.747 -2.794) (end 7.747 2.794) (layer F.CrtYd) (width 0.12)) (fp_line (start 7.747 2.794) (end -7.747 2.794) (layer F.CrtYd) (width 0.12)) (fp_line (start -7.747 2.794) (end -7.747 -2.794) (layer F.CrtYd) (width 0.12)) (pad 2 thru_hole circle (at 5.895 0) (size 2.7 2.7) (drill 1.65) (layers *.Cu *.Mask) (net 72 /PowerChannel4/POWER_IN)) (pad 2 thru_hole circle (at 2.235 0) (size 2.7 2.7) (drill 1.65) (layers *.Cu *.Mask) (net 72 /PowerChannel4/POWER_IN)) (pad 1 thru_hole rect (at -5.895 0) (size 2.7 2.7) (drill 1.65) (layers *.Cu *.Mask) (net 65 "Net-(D601-Pad2)")) (pad 1 thru_hole rect (at -2.235 0) (size 2.7 2.7) (drill 1.65) (layers *.Cu *.Mask) (net 65 "Net-(D601-Pad2)")) (model ../lib/BK-6013.models/Memory_Protection_Devices_-_BK-6013.step (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Resistor_SMD:R_0805_2012Metric (layer F.Cu) (tedit 5F68FEEE) (tstamp 606F1DC2) (at 119.38 164.465) (descr "Resistor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") (tags resistor) (path /60B1F5E9/60718758) (attr smd) (fp_text reference R605 (at -3.175 0.254) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (fp_text value 2k (at 0 1.65) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -1 0.625) (end -1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start -1 -0.625) (end 1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 -0.625) (end 1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 0.625) (end -1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start -0.227064 -0.735) (end 0.227064 -0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -0.227064 0.735) (end 0.227064 0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -1.68 0.95) (end -1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.68 -0.95) (end 1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.68 -0.95) (end 1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.68 0.95) (end -1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.5 0.5) (thickness 0.08))) ) (pad 2 smd roundrect (at 0.9125 0) (size 1.025 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.243902) (net 68 "Net-(D602-Pad1)")) (pad 1 smd roundrect (at -0.9125 0) (size 1.025 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.243902) (net 48 /LED_GND)) (model ${KISYS3DMOD}/Resistor_SMD.3dshapes/R_0805_2012Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module ScrewTerminals:Generic-5.08-2P (layer F.Cu) (tedit 606BAC3F) (tstamp 606F1B27) (at 111.76 175.895 90) (path /60B1F5E9/607187A4) (fp_text reference J601 (at 2.54 -2.921 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value CHANNEL (at 0 -0.5 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -2.54 -6.2) (end 7.62 -6.2) (layer F.CrtYd) (width 0.12)) (fp_line (start 7.62 -6.2) (end 7.62 6.2) (layer F.CrtYd) (width 0.12)) (fp_line (start 7.62 6.2) (end -2.54 6.2) (layer F.CrtYd) (width 0.12)) (fp_line (start -2.54 6.2) (end -2.54 -6.2) (layer F.CrtYd) (width 0.12)) (fp_line (start -2.54 4.3) (end -2.54 -4.3) (layer F.SilkS) (width 0.12)) (fp_line (start 7.62 4.3) (end -2.54 4.3) (layer F.SilkS) (width 0.12)) (fp_line (start -2.54 -4.3) (end 7.62 -4.3) (layer F.SilkS) (width 0.12)) (fp_line (start 7.62 -4.3) (end 7.62 4.3) (layer F.SilkS) (width 0.12)) (fp_line (start -1.27 4.23) (end -0.635 3.04) (layer F.SilkS) (width 0.15)) (fp_line (start -0.635 3.04) (end 0.635 3.04) (layer F.SilkS) (width 0.15)) (fp_line (start 0.635 3.04) (end 1.27 4.23) (layer F.SilkS) (width 0.15)) (fp_line (start 5.715 3.04) (end 6.35 4.23) (layer F.SilkS) (width 0.15)) (fp_line (start 3.81 4.23) (end 4.445 3.04) (layer F.SilkS) (width 0.15)) (fp_line (start 4.445 3.04) (end 5.715 3.04) (layer F.SilkS) (width 0.15)) (fp_text user "Generic screw terminal keep out region" (at 2.54 5.08 90) (layer F.Fab) (effects (font (size 0.5 0.3) (thickness 0.05))) ) (fp_text user "Generic screw terminal keep out region" (at 2.54 -5.08 90) (layer F.Fab) (effects (font (size 0.5 0.3) (thickness 0.05))) ) (pad 2 thru_hole circle (at 5.08 0 90) (size 2 2) (drill 1.2) (layers *.Cu *.Mask) (net 67 /PowerChannel4/POWER_OUT)) (pad 1 thru_hole rect (at 0 0 90) (size 2 2) (drill 1.2) (layers *.Cu *.Mask) (net 72 /PowerChannel4/POWER_IN)) (model ${KISYS3DMOD}/TerminalBlock_Phoenix.3dshapes/TerminalBlock_Phoenix_MKDS-1,5-2-5.08_1x02_P5.08mm_Horizontal.step (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Package_SO:SOIC-8_3.9x4.9mm_P1.27mm (layer F.Cu) (tedit 5D9F72B1) (tstamp 606F2134) (at 93.98 183.515) (descr "SOIC, 8 Pin (JEDEC MS-012AA, https://www.analog.com/media/en/package-pcb-resources/package/pkg_pdf/soic_narrow-r/r_8.pdf), generated with kicad-footprint-generator ipc_gullwing_generator.py") (tags "SOIC SO") (path /60B1F5E9/6071873C) (attr smd) (fp_text reference U601 (at 0 3.175) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (fp_text value INA219BxD (at 0 3.4) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 0 2.56) (end 1.95 2.56) (layer F.SilkS) (width 0.12)) (fp_line (start 0 2.56) (end -1.95 2.56) (layer F.SilkS) (width 0.12)) (fp_line (start 0 -2.56) (end 1.95 -2.56) (layer F.SilkS) (width 0.12)) (fp_line (start 0 -2.56) (end -3.45 -2.56) (layer F.SilkS) (width 0.12)) (fp_line (start -0.975 -2.45) (end 1.95 -2.45) (layer F.Fab) (width 0.1)) (fp_line (start 1.95 -2.45) (end 1.95 2.45) (layer F.Fab) (width 0.1)) (fp_line (start 1.95 2.45) (end -1.95 2.45) (layer F.Fab) (width 0.1)) (fp_line (start -1.95 2.45) (end -1.95 -1.475) (layer F.Fab) (width 0.1)) (fp_line (start -1.95 -1.475) (end -0.975 -2.45) (layer F.Fab) (width 0.1)) (fp_line (start -3.7 -2.7) (end -3.7 2.7) (layer F.CrtYd) (width 0.05)) (fp_line (start -3.7 2.7) (end 3.7 2.7) (layer F.CrtYd) (width 0.05)) (fp_line (start 3.7 2.7) (end 3.7 -2.7) (layer F.CrtYd) (width 0.05)) (fp_line (start 3.7 -2.7) (end -3.7 -2.7) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.98 0.98) (thickness 0.15))) ) (pad 8 smd roundrect (at 2.475 -1.905) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 65 "Net-(D601-Pad2)")) (pad 7 smd roundrect (at 2.475 -0.635) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 52 /PowerChannel4/POWER_MONITORED)) (pad 6 smd roundrect (at 2.475 0.635) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 2 GND)) (pad 5 smd roundrect (at 2.475 1.905) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 11 +3V3)) (pad 4 smd roundrect (at -2.475 1.905) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 7 /SCL)) (pad 3 smd roundrect (at -2.475 0.635) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 8 /SDA)) (pad 2 smd roundrect (at -2.475 -0.635) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 2 GND)) (pad 1 smd roundrect (at -2.475 -1.905) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 11 +3V3)) (model ${KISYS3DMOD}/Package_SO.3dshapes/SOIC-8_3.9x4.9mm_P1.27mm.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Resistor_SMD:R_0805_2012Metric (layer F.Cu) (tedit 5F68FEEE) (tstamp 606F2422) (at 107.315 163.83 180) (descr "Resistor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") (tags resistor) (path /60B1F5E9/607187C9) (attr smd) (fp_text reference R604 (at 0 1.905) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (fp_text value 15k (at 0 1.65) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -1 0.625) (end -1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start -1 -0.625) (end 1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 -0.625) (end 1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 0.625) (end -1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start -0.227064 -0.735) (end 0.227064 -0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -0.227064 0.735) (end 0.227064 0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -1.68 0.95) (end -1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.68 -0.95) (end 1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.68 -0.95) (end 1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.68 0.95) (end -1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.5 0.5) (thickness 0.08))) ) (pad 2 smd roundrect (at 0.9125 0 180) (size 1.025 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.243902) (net 83 "Net-(R604-Pad2)")) (pad 1 smd roundrect (at -0.9125 0 180) (size 1.025 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.243902) (net 2 GND)) (model ${KISYS3DMOD}/Resistor_SMD.3dshapes/R_0805_2012Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Capacitor_SMD:C_0805_2012Metric (layer F.Cu) (tedit 5F68FEEE) (tstamp 606F2575) (at 102.235 163.83 180) (descr "Capacitor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf, https://docs.google.com/spreadsheets/d/1BsfQQcO9C6DZCsRaXUlFlo91Tg2WpOkGARC1WS5S8t0/edit?usp=sharing), generated with kicad-footprint-generator") (tags capacitor) (path /60B1F5E9/6071875F) (attr smd) (fp_text reference C602 (at 0 1.905) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (fp_text value 0.1uF (at 0 1.68) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -1 0.625) (end -1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start -1 -0.625) (end 1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 -0.625) (end 1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 0.625) (end -1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start -0.261252 -0.735) (end 0.261252 -0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -0.261252 0.735) (end 0.261252 0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -1.7 0.98) (end -1.7 -0.98) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.7 -0.98) (end 1.7 -0.98) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.7 -0.98) (end 1.7 0.98) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.7 0.98) (end -1.7 0.98) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.5 0.5) (thickness 0.08))) ) (pad 2 smd roundrect (at 0.95 0 180) (size 1 1.45) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 52 /PowerChannel4/POWER_MONITORED)) (pad 1 smd roundrect (at -0.95 0 180) (size 1 1.45) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 2 GND)) (model ${KISYS3DMOD}/Capacitor_SMD.3dshapes/C_0805_2012Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Resistor_SMD:R_0805_2012Metric (layer F.Cu) (tedit 5F68FEEE) (tstamp 606F1C9C) (at 107.315 133.985 180) (descr "Resistor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") (tags resistor) (path /60B0E338/607187BF) (attr smd) (fp_text reference R506 (at 0 -1.397) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (fp_text value 1k (at 0 1.65) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -1 0.625) (end -1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start -1 -0.625) (end 1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 -0.625) (end 1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 0.625) (end -1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start -0.227064 -0.735) (end 0.227064 -0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -0.227064 0.735) (end 0.227064 0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -1.68 0.95) (end -1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.68 -0.95) (end 1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.68 -0.95) (end 1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.68 0.95) (end -1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.5 0.5) (thickness 0.08))) ) (pad 2 smd roundrect (at 0.9125 0 180) (size 1.025 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.243902) (net 81 "Net-(R506-Pad2)")) (pad 1 smd roundrect (at -0.9125 0 180) (size 1.025 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.243902) (net 2 GND)) (model ${KISYS3DMOD}/Resistor_SMD.3dshapes/R_0805_2012Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module LED_SMD:LED_WS2812B_PLCC4_5.0x5.0mm_P3.2mm (layer F.Cu) (tedit 5AA4B285) (tstamp 606F2AFD) (at 84.455 151.13) (descr https://cdn-shop.adafruit.com/datasheets/WS2812B.pdf) (tags "LED RGB NeoPixel") (path /62C20833) (attr smd) (fp_text reference D103 (at 0 3.175) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (fp_text value WS2812B (at 0 4) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 3.45 -2.75) (end -3.45 -2.75) (layer F.CrtYd) (width 0.05)) (fp_line (start 3.45 2.75) (end 3.45 -2.75) (layer F.CrtYd) (width 0.05)) (fp_line (start -3.45 2.75) (end 3.45 2.75) (layer F.CrtYd) (width 0.05)) (fp_line (start -3.45 -2.75) (end -3.45 2.75) (layer F.CrtYd) (width 0.05)) (fp_line (start 2.5 1.5) (end 1.5 2.5) (layer F.Fab) (width 0.1)) (fp_line (start -2.5 -2.5) (end -2.5 2.5) (layer F.Fab) (width 0.1)) (fp_line (start -2.5 2.5) (end 2.5 2.5) (layer F.Fab) (width 0.1)) (fp_line (start 2.5 2.5) (end 2.5 -2.5) (layer F.Fab) (width 0.1)) (fp_line (start 2.5 -2.5) (end -2.5 -2.5) (layer F.Fab) (width 0.1)) (fp_line (start -3.65 -2.75) (end 3.65 -2.75) (layer F.SilkS) (width 0.12)) (fp_line (start -3.65 2.75) (end 3.65 2.75) (layer F.SilkS) (width 0.12)) (fp_line (start 3.65 2.75) (end 3.65 1.6) (layer F.SilkS) (width 0.12)) (fp_circle (center 0 0) (end 0 -2) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (pad 1 smd rect (at -2.45 -1.6) (size 1.5 1) (layers F.Cu F.Paste F.Mask) (net 1 +5V)) (pad 2 smd rect (at -2.45 1.6) (size 1.5 1) (layers F.Cu F.Paste F.Mask) (net 34 "Net-(D103-Pad2)")) (pad 4 smd rect (at 2.45 -1.6) (size 1.5 1) (layers F.Cu F.Paste F.Mask) (net 33 "Net-(D102-Pad2)")) (pad 3 smd rect (at 2.45 1.6) (size 1.5 1) (layers F.Cu F.Paste F.Mask) (net 2 GND)) (model ${KISYS3DMOD}/LED_SMD.3dshapes/LED_WS2812B_PLCC4_5.0x5.0mm_P3.2mm.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Resistor_SMD:R_0805_2012Metric (layer F.Cu) (tedit 5F68FEEE) (tstamp 606F1D71) (at 111.76 133.985) (descr "Resistor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") (tags resistor) (path /60B0E338/6071879D) (attr smd) (fp_text reference R503 (at 0 1.397) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (fp_text value 15k (at 0 1.65) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -1 0.625) (end -1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start -1 -0.625) (end 1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 -0.625) (end 1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 0.625) (end -1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start -0.227064 -0.735) (end 0.227064 -0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -0.227064 0.735) (end 0.227064 0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -1.68 0.95) (end -1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.68 -0.95) (end 1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.68 -0.95) (end 1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.68 0.95) (end -1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.5 0.5) (thickness 0.08))) ) (pad 2 smd roundrect (at 0.9125 0) (size 1.025 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.243902) (net 16 /OUT3_EN)) (pad 1 smd roundrect (at -0.9125 0) (size 1.025 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.243902) (net 79 "Net-(R503-Pad1)")) (model ${KISYS3DMOD}/Resistor_SMD.3dshapes/R_0805_2012Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Capacitor_SMD:C_0805_2012Metric (layer F.Cu) (tedit 5F68FEEE) (tstamp 606F2DA0) (at 78.105 150.495 270) (descr "Capacitor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf, https://docs.google.com/spreadsheets/d/1BsfQQcO9C6DZCsRaXUlFlo91Tg2WpOkGARC1WS5S8t0/edit?usp=sharing), generated with kicad-footprint-generator") (tags capacitor) (path /62B1BC67) (attr smd) (fp_text reference C110 (at 2.54 0 180) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (fp_text value 0.1uF (at 0 1.68 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -1 0.625) (end -1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start -1 -0.625) (end 1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 -0.625) (end 1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 0.625) (end -1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start -0.261252 -0.735) (end 0.261252 -0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -0.261252 0.735) (end 0.261252 0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -1.7 0.98) (end -1.7 -0.98) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.7 -0.98) (end 1.7 -0.98) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.7 -0.98) (end 1.7 0.98) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.7 0.98) (end -1.7 0.98) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 0 90) (layer F.Fab) (effects (font (size 0.5 0.5) (thickness 0.08))) ) (pad 2 smd roundrect (at 0.95 0 270) (size 1 1.45) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 2 GND)) (pad 1 smd roundrect (at -0.95 0 270) (size 1 1.45) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 1 +5V)) (model ${KISYS3DMOD}/Capacitor_SMD.3dshapes/C_0805_2012Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Capacitor_SMD:C_0805_2012Metric (layer F.Cu) (tedit 5F68FEEE) (tstamp 606F2467) (at 99.06 152.4 270) (descr "Capacitor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf, https://docs.google.com/spreadsheets/d/1BsfQQcO9C6DZCsRaXUlFlo91Tg2WpOkGARC1WS5S8t0/edit?usp=sharing), generated with kicad-footprint-generator") (tags capacitor) (path /60B0E338/60718742) (attr smd) (fp_text reference C501 (at 0 -1.68 90) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (fp_text value 0.1uF (at 0 1.68 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -1 0.625) (end -1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start -1 -0.625) (end 1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 -0.625) (end 1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 0.625) (end -1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start -0.261252 -0.735) (end 0.261252 -0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -0.261252 0.735) (end 0.261252 0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -1.7 0.98) (end -1.7 -0.98) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.7 -0.98) (end 1.7 -0.98) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.7 -0.98) (end 1.7 0.98) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.7 0.98) (end -1.7 0.98) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 0 90) (layer F.Fab) (effects (font (size 0.5 0.5) (thickness 0.08))) ) (pad 2 smd roundrect (at 0.95 0 270) (size 1 1.45) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 11 +3V3)) (pad 1 smd roundrect (at -0.95 0 270) (size 1 1.45) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 2 GND)) (model ${KISYS3DMOD}/Capacitor_SMD.3dshapes/C_0805_2012Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Resistor_SMD:R_0612_1632Metric (layer F.Cu) (tedit 5F68FEEE) (tstamp 606F24D0) (at 101.6 143.51 180) (descr "Resistor SMD 0612 (1632 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: https://www.vishay.com/docs/20019/rcwe.pdf), generated with kicad-footprint-generator") (tags resistor) (path /60B0E338/6071877C) (attr smd) (fp_text reference R501 (at 0 -2.65) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (fp_text value "0.01R 1% 1W" (at 0 2.65) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -0.8 1.6) (end -0.8 -1.6) (layer F.Fab) (width 0.1)) (fp_line (start -0.8 -1.6) (end 0.8 -1.6) (layer F.Fab) (width 0.1)) (fp_line (start 0.8 -1.6) (end 0.8 1.6) (layer F.Fab) (width 0.1)) (fp_line (start 0.8 1.6) (end -0.8 1.6) (layer F.Fab) (width 0.1)) (fp_line (start -0.182983 -1.71) (end 0.182983 -1.71) (layer F.SilkS) (width 0.12)) (fp_line (start -0.182983 1.71) (end 0.182983 1.71) (layer F.SilkS) (width 0.12)) (fp_line (start -1.5 1.95) (end -1.5 -1.95) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.5 -1.95) (end 1.5 -1.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.5 -1.95) (end 1.5 1.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.5 1.95) (end -1.5 1.95) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.4 0.4) (thickness 0.06))) ) (pad 2 smd roundrect (at 0.75 0 180) (size 1 3.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 51 /PowerChannel3/POWER_MONITORED)) (pad 1 smd roundrect (at -0.75 0 180) (size 1 3.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 61 "Net-(D501-Pad2)")) (model ${KISYS3DMOD}/Resistor_SMD.3dshapes/R_0612_1632Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Resistor_SMD:R_0805_2012Metric (layer F.Cu) (tedit 5F68FEEE) (tstamp 606F1E25) (at 119.38 149.86) (descr "Resistor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") (tags resistor) (path /60B0E338/607187ED) (attr smd) (fp_text reference R502 (at -3.175 -0.635) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (fp_text value 2k (at 0 1.65) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -1 0.625) (end -1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start -1 -0.625) (end 1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 -0.625) (end 1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 0.625) (end -1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start -0.227064 -0.735) (end 0.227064 -0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -0.227064 0.735) (end 0.227064 0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -1.68 0.95) (end -1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.68 -0.95) (end 1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.68 -0.95) (end 1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.68 0.95) (end -1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.5 0.5) (thickness 0.08))) ) (pad 2 smd roundrect (at 0.9125 0) (size 1.025 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.243902) (net 62 "Net-(D501-Pad1)")) (pad 1 smd roundrect (at -0.9125 0) (size 1.025 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.243902) (net 48 /LED_GND)) (model ${KISYS3DMOD}/Resistor_SMD.3dshapes/R_0805_2012Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module BK-6013:BK-6013 (layer F.Cu) (tedit 605D2E8E) (tstamp 606F2340) (at 109.22 152.4) (path /60B0E338/60718784) (fp_text reference F501 (at 0 -3.81) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (fp_text value "Fuse Holder BK-6013" (at 0 -0.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -7.35 -2.375) (end 7.35 -2.375) (layer F.SilkS) (width 0.15)) (fp_line (start -7.35 2.375) (end 7.35 2.375) (layer F.SilkS) (width 0.15)) (fp_line (start 7.35 -2.375) (end 7.35 2.375) (layer F.SilkS) (width 0.15)) (fp_line (start -7.35 -2.375) (end -7.35 2.375) (layer F.SilkS) (width 0.15)) (fp_line (start -7.747 -2.794) (end 7.747 -2.794) (layer F.CrtYd) (width 0.12)) (fp_line (start 7.747 -2.794) (end 7.747 2.794) (layer F.CrtYd) (width 0.12)) (fp_line (start 7.747 2.794) (end -7.747 2.794) (layer F.CrtYd) (width 0.12)) (fp_line (start -7.747 2.794) (end -7.747 -2.794) (layer F.CrtYd) (width 0.12)) (pad 2 thru_hole circle (at 5.895 0) (size 2.7 2.7) (drill 1.65) (layers *.Cu *.Mask) (net 71 /PowerChannel3/POWER_IN)) (pad 2 thru_hole circle (at 2.235 0) (size 2.7 2.7) (drill 1.65) (layers *.Cu *.Mask) (net 71 /PowerChannel3/POWER_IN)) (pad 1 thru_hole rect (at -5.895 0) (size 2.7 2.7) (drill 1.65) (layers *.Cu *.Mask) (net 61 "Net-(D501-Pad2)")) (pad 1 thru_hole rect (at -2.235 0) (size 2.7 2.7) (drill 1.65) (layers *.Cu *.Mask) (net 61 "Net-(D501-Pad2)")) (model ../lib/BK-6013.models/Memory_Protection_Devices_-_BK-6013.step (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Resistor_SMD:R_0805_2012Metric (layer F.Cu) (tedit 5F68FEEE) (tstamp 606F34ED) (at 119.38 132.08) (descr "Resistor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") (tags resistor) (path /60B0E338/60718758) (attr smd) (fp_text reference R505 (at -3.175 0.254) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (fp_text value 2k (at 0 1.65) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -1 0.625) (end -1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start -1 -0.625) (end 1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 -0.625) (end 1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 0.625) (end -1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start -0.227064 -0.735) (end 0.227064 -0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -0.227064 0.735) (end 0.227064 0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -1.68 0.95) (end -1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.68 -0.95) (end 1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.68 -0.95) (end 1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.68 0.95) (end -1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.5 0.5) (thickness 0.08))) ) (pad 2 smd roundrect (at 0.9125 0) (size 1.025 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.243902) (net 64 "Net-(D502-Pad1)")) (pad 1 smd roundrect (at -0.9125 0) (size 1.025 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.243902) (net 48 /LED_GND)) (model ${KISYS3DMOD}/Resistor_SMD.3dshapes/R_0805_2012Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module ScrewTerminals:Generic-5.08-2P (layer F.Cu) (tedit 606BAC3F) (tstamp 606F2E83) (at 111.76 143.51 90) (path /60B0E338/607187A4) (fp_text reference J501 (at 2.54 -2.921 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value CHANNEL (at 0 -0.5 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -2.54 -6.2) (end 7.62 -6.2) (layer F.CrtYd) (width 0.12)) (fp_line (start 7.62 -6.2) (end 7.62 6.2) (layer F.CrtYd) (width 0.12)) (fp_line (start 7.62 6.2) (end -2.54 6.2) (layer F.CrtYd) (width 0.12)) (fp_line (start -2.54 6.2) (end -2.54 -6.2) (layer F.CrtYd) (width 0.12)) (fp_line (start -2.54 4.3) (end -2.54 -4.3) (layer F.SilkS) (width 0.12)) (fp_line (start 7.62 4.3) (end -2.54 4.3) (layer F.SilkS) (width 0.12)) (fp_line (start -2.54 -4.3) (end 7.62 -4.3) (layer F.SilkS) (width 0.12)) (fp_line (start 7.62 -4.3) (end 7.62 4.3) (layer F.SilkS) (width 0.12)) (fp_line (start -1.27 4.23) (end -0.635 3.04) (layer F.SilkS) (width 0.15)) (fp_line (start -0.635 3.04) (end 0.635 3.04) (layer F.SilkS) (width 0.15)) (fp_line (start 0.635 3.04) (end 1.27 4.23) (layer F.SilkS) (width 0.15)) (fp_line (start 5.715 3.04) (end 6.35 4.23) (layer F.SilkS) (width 0.15)) (fp_line (start 3.81 4.23) (end 4.445 3.04) (layer F.SilkS) (width 0.15)) (fp_line (start 4.445 3.04) (end 5.715 3.04) (layer F.SilkS) (width 0.15)) (fp_text user "Generic screw terminal keep out region" (at 2.54 5.08 90) (layer F.Fab) (effects (font (size 0.5 0.3) (thickness 0.05))) ) (fp_text user "Generic screw terminal keep out region" (at 2.54 -5.08 90) (layer F.Fab) (effects (font (size 0.5 0.3) (thickness 0.05))) ) (pad 2 thru_hole circle (at 5.08 0 90) (size 2 2) (drill 1.2) (layers *.Cu *.Mask) (net 63 /PowerChannel3/POWER_OUT)) (pad 1 thru_hole rect (at 0 0 90) (size 2 2) (drill 1.2) (layers *.Cu *.Mask) (net 71 /PowerChannel3/POWER_IN)) (model ${KISYS3DMOD}/TerminalBlock_Phoenix.3dshapes/TerminalBlock_Phoenix_MKDS-1,5-2-5.08_1x02_P5.08mm_Horizontal.step (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Package_SO:SOIC-8_3.9x4.9mm_P1.27mm (layer F.Cu) (tedit 5D9F72B1) (tstamp 606F1B85) (at 93.98 151.13) (descr "SOIC, 8 Pin (JEDEC MS-012AA, https://www.analog.com/media/en/package-pcb-resources/package/pkg_pdf/soic_narrow-r/r_8.pdf), generated with kicad-footprint-generator ipc_gullwing_generator.py") (tags "SOIC SO") (path /60B0E338/6071873C) (attr smd) (fp_text reference U501 (at 0 3.175) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (fp_text value INA219BxD (at 0 3.4) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 0 2.56) (end 1.95 2.56) (layer F.SilkS) (width 0.12)) (fp_line (start 0 2.56) (end -1.95 2.56) (layer F.SilkS) (width 0.12)) (fp_line (start 0 -2.56) (end 1.95 -2.56) (layer F.SilkS) (width 0.12)) (fp_line (start 0 -2.56) (end -3.45 -2.56) (layer F.SilkS) (width 0.12)) (fp_line (start -0.975 -2.45) (end 1.95 -2.45) (layer F.Fab) (width 0.1)) (fp_line (start 1.95 -2.45) (end 1.95 2.45) (layer F.Fab) (width 0.1)) (fp_line (start 1.95 2.45) (end -1.95 2.45) (layer F.Fab) (width 0.1)) (fp_line (start -1.95 2.45) (end -1.95 -1.475) (layer F.Fab) (width 0.1)) (fp_line (start -1.95 -1.475) (end -0.975 -2.45) (layer F.Fab) (width 0.1)) (fp_line (start -3.7 -2.7) (end -3.7 2.7) (layer F.CrtYd) (width 0.05)) (fp_line (start -3.7 2.7) (end 3.7 2.7) (layer F.CrtYd) (width 0.05)) (fp_line (start 3.7 2.7) (end 3.7 -2.7) (layer F.CrtYd) (width 0.05)) (fp_line (start 3.7 -2.7) (end -3.7 -2.7) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.98 0.98) (thickness 0.15))) ) (pad 8 smd roundrect (at 2.475 -1.905) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 61 "Net-(D501-Pad2)")) (pad 7 smd roundrect (at 2.475 -0.635) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 51 /PowerChannel3/POWER_MONITORED)) (pad 6 smd roundrect (at 2.475 0.635) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 2 GND)) (pad 5 smd roundrect (at 2.475 1.905) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 11 +3V3)) (pad 4 smd roundrect (at -2.475 1.905) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 7 /SCL)) (pad 3 smd roundrect (at -2.475 0.635) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 8 /SDA)) (pad 2 smd roundrect (at -2.475 -0.635) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 7 /SCL)) (pad 1 smd roundrect (at -2.475 -1.905) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 2 GND)) (model ${KISYS3DMOD}/Package_SO.3dshapes/SOIC-8_3.9x4.9mm_P1.27mm.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Resistor_SMD:R_0805_2012Metric (layer F.Cu) (tedit 5F68FEEE) (tstamp 606F1FE1) (at 107.315 131.445 180) (descr "Resistor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") (tags resistor) (path /60B0E338/607187C9) (attr smd) (fp_text reference R504 (at 0 1.905) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (fp_text value 15k (at 0 1.65) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -1 0.625) (end -1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start -1 -0.625) (end 1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 -0.625) (end 1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 0.625) (end -1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start -0.227064 -0.735) (end 0.227064 -0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -0.227064 0.735) (end 0.227064 0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -1.68 0.95) (end -1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.68 -0.95) (end 1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.68 -0.95) (end 1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.68 0.95) (end -1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.5 0.5) (thickness 0.08))) ) (pad 2 smd roundrect (at 0.9125 0 180) (size 1.025 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.243902) (net 80 "Net-(R504-Pad2)")) (pad 1 smd roundrect (at -0.9125 0 180) (size 1.025 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.243902) (net 2 GND)) (model ${KISYS3DMOD}/Resistor_SMD.3dshapes/R_0805_2012Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Capacitor_SMD:C_0805_2012Metric (layer F.Cu) (tedit 5F68FEEE) (tstamp 606F3475) (at 102.235 131.445 180) (descr "Capacitor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf, https://docs.google.com/spreadsheets/d/1BsfQQcO9C6DZCsRaXUlFlo91Tg2WpOkGARC1WS5S8t0/edit?usp=sharing), generated with kicad-footprint-generator") (tags capacitor) (path /60B0E338/6071875F) (attr smd) (fp_text reference C502 (at 0 1.905) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (fp_text value 0.1uF (at 0 1.68) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -1 0.625) (end -1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start -1 -0.625) (end 1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 -0.625) (end 1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 0.625) (end -1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start -0.261252 -0.735) (end 0.261252 -0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -0.261252 0.735) (end 0.261252 0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -1.7 0.98) (end -1.7 -0.98) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.7 -0.98) (end 1.7 -0.98) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.7 -0.98) (end 1.7 0.98) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.7 0.98) (end -1.7 0.98) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.5 0.5) (thickness 0.08))) ) (pad 2 smd roundrect (at 0.95 0 180) (size 1 1.45) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 51 /PowerChannel3/POWER_MONITORED)) (pad 1 smd roundrect (at -0.95 0 180) (size 1 1.45) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 2 GND)) (model ${KISYS3DMOD}/Capacitor_SMD.3dshapes/C_0805_2012Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Resistor_SMD:R_0805_2012Metric (layer F.Cu) (tedit 5F68FEEE) (tstamp 606F2497) (at 107.315 101.6 180) (descr "Resistor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") (tags resistor) (path /60AFE278/607187BF) (attr smd) (fp_text reference R406 (at 0 -1.397) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (fp_text value 1k (at 0 1.65) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -1 0.625) (end -1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start -1 -0.625) (end 1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 -0.625) (end 1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 0.625) (end -1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start -0.227064 -0.735) (end 0.227064 -0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -0.227064 0.735) (end 0.227064 0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -1.68 0.95) (end -1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.68 -0.95) (end 1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.68 -0.95) (end 1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.68 0.95) (end -1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.5 0.5) (thickness 0.08))) ) (pad 2 smd roundrect (at 0.9125 0 180) (size 1.025 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.243902) (net 78 "Net-(R406-Pad2)")) (pad 1 smd roundrect (at -0.9125 0 180) (size 1.025 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.243902) (net 2 GND)) (model ${KISYS3DMOD}/Resistor_SMD.3dshapes/R_0805_2012Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module LED_SMD:LED_WS2812B_PLCC4_5.0x5.0mm_P3.2mm (layer F.Cu) (tedit 5AA4B285) (tstamp 606F2D55) (at 84.455 118.745) (descr https://cdn-shop.adafruit.com/datasheets/WS2812B.pdf) (tags "LED RGB NeoPixel") (path /62C20D7C) (attr smd) (fp_text reference D104 (at 0 3.175) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (fp_text value WS2812B (at 0 4) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 3.45 -2.75) (end -3.45 -2.75) (layer F.CrtYd) (width 0.05)) (fp_line (start 3.45 2.75) (end 3.45 -2.75) (layer F.CrtYd) (width 0.05)) (fp_line (start -3.45 2.75) (end 3.45 2.75) (layer F.CrtYd) (width 0.05)) (fp_line (start -3.45 -2.75) (end -3.45 2.75) (layer F.CrtYd) (width 0.05)) (fp_line (start 2.5 1.5) (end 1.5 2.5) (layer F.Fab) (width 0.1)) (fp_line (start -2.5 -2.5) (end -2.5 2.5) (layer F.Fab) (width 0.1)) (fp_line (start -2.5 2.5) (end 2.5 2.5) (layer F.Fab) (width 0.1)) (fp_line (start 2.5 2.5) (end 2.5 -2.5) (layer F.Fab) (width 0.1)) (fp_line (start 2.5 -2.5) (end -2.5 -2.5) (layer F.Fab) (width 0.1)) (fp_line (start -3.65 -2.75) (end 3.65 -2.75) (layer F.SilkS) (width 0.12)) (fp_line (start -3.65 2.75) (end 3.65 2.75) (layer F.SilkS) (width 0.12)) (fp_line (start 3.65 2.75) (end 3.65 1.6) (layer F.SilkS) (width 0.12)) (fp_circle (center 0 0) (end 0 -2) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (pad 1 smd rect (at -2.45 -1.6) (size 1.5 1) (layers F.Cu F.Paste F.Mask) (net 1 +5V)) (pad 2 smd rect (at -2.45 1.6) (size 1.5 1) (layers F.Cu F.Paste F.Mask) (net 35 "Net-(D104-Pad2)")) (pad 4 smd rect (at 2.45 -1.6) (size 1.5 1) (layers F.Cu F.Paste F.Mask) (net 34 "Net-(D103-Pad2)")) (pad 3 smd rect (at 2.45 1.6) (size 1.5 1) (layers F.Cu F.Paste F.Mask) (net 2 GND)) (model ${KISYS3DMOD}/LED_SMD.3dshapes/LED_WS2812B_PLCC4_5.0x5.0mm_P3.2mm.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Resistor_SMD:R_0805_2012Metric (layer F.Cu) (tedit 5F68FEEE) (tstamp 606F29C2) (at 111.76 101.6) (descr "Resistor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") (tags resistor) (path /60AFE278/6071879D) (attr smd) (fp_text reference R403 (at 0 1.397) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (fp_text value 15k (at 0 1.65) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -1 0.625) (end -1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start -1 -0.625) (end 1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 -0.625) (end 1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 0.625) (end -1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start -0.227064 -0.735) (end 0.227064 -0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -0.227064 0.735) (end 0.227064 0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -1.68 0.95) (end -1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.68 -0.95) (end 1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.68 -0.95) (end 1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.68 0.95) (end -1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.5 0.5) (thickness 0.08))) ) (pad 2 smd roundrect (at 0.9125 0) (size 1.025 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.243902) (net 15 /OUT2_EN)) (pad 1 smd roundrect (at -0.9125 0) (size 1.025 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.243902) (net 76 "Net-(R403-Pad1)")) (model ${KISYS3DMOD}/Resistor_SMD.3dshapes/R_0805_2012Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Capacitor_SMD:C_0805_2012Metric (layer F.Cu) (tedit 5F68FEEE) (tstamp 606F1EB8) (at 78.105 118.11 270) (descr "Capacitor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf, https://docs.google.com/spreadsheets/d/1BsfQQcO9C6DZCsRaXUlFlo91Tg2WpOkGARC1WS5S8t0/edit?usp=sharing), generated with kicad-footprint-generator") (tags capacitor) (path /62B81D9E) (attr smd) (fp_text reference C111 (at 2.54 0 180) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (fp_text value 0.1uF (at 0 1.68 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -1 0.625) (end -1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start -1 -0.625) (end 1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 -0.625) (end 1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 0.625) (end -1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start -0.261252 -0.735) (end 0.261252 -0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -0.261252 0.735) (end 0.261252 0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -1.7 0.98) (end -1.7 -0.98) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.7 -0.98) (end 1.7 -0.98) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.7 -0.98) (end 1.7 0.98) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.7 0.98) (end -1.7 0.98) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 0 90) (layer F.Fab) (effects (font (size 0.5 0.5) (thickness 0.08))) ) (pad 2 smd roundrect (at 0.95 0 270) (size 1 1.45) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 2 GND)) (pad 1 smd roundrect (at -0.95 0 270) (size 1 1.45) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 1 +5V)) (model ${KISYS3DMOD}/Capacitor_SMD.3dshapes/C_0805_2012Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Capacitor_SMD:C_0805_2012Metric (layer F.Cu) (tedit 5F68FEEE) (tstamp 606F2A85) (at 99.06 120.015 270) (descr "Capacitor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf, https://docs.google.com/spreadsheets/d/1BsfQQcO9C6DZCsRaXUlFlo91Tg2WpOkGARC1WS5S8t0/edit?usp=sharing), generated with kicad-footprint-generator") (tags capacitor) (path /60AFE278/60718742) (attr smd) (fp_text reference C401 (at 0 -1.68 90) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (fp_text value 0.1uF (at 0 1.68 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -1 0.625) (end -1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start -1 -0.625) (end 1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 -0.625) (end 1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 0.625) (end -1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start -0.261252 -0.735) (end 0.261252 -0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -0.261252 0.735) (end 0.261252 0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -1.7 0.98) (end -1.7 -0.98) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.7 -0.98) (end 1.7 -0.98) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.7 -0.98) (end 1.7 0.98) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.7 0.98) (end -1.7 0.98) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 0 90) (layer F.Fab) (effects (font (size 0.5 0.5) (thickness 0.08))) ) (pad 2 smd roundrect (at 0.95 0 270) (size 1 1.45) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 11 +3V3)) (pad 1 smd roundrect (at -0.95 0 270) (size 1 1.45) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 2 GND)) (model ${KISYS3DMOD}/Capacitor_SMD.3dshapes/C_0805_2012Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Resistor_SMD:R_0612_1632Metric (layer F.Cu) (tedit 5F68FEEE) (tstamp 606F1F72) (at 101.6 111.125 180) (descr "Resistor SMD 0612 (1632 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: https://www.vishay.com/docs/20019/rcwe.pdf), generated with kicad-footprint-generator") (tags resistor) (path /60AFE278/6071877C) (attr smd) (fp_text reference R401 (at 0 -2.65) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (fp_text value "0.01R 1% 1W" (at 0 2.65) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -0.8 1.6) (end -0.8 -1.6) (layer F.Fab) (width 0.1)) (fp_line (start -0.8 -1.6) (end 0.8 -1.6) (layer F.Fab) (width 0.1)) (fp_line (start 0.8 -1.6) (end 0.8 1.6) (layer F.Fab) (width 0.1)) (fp_line (start 0.8 1.6) (end -0.8 1.6) (layer F.Fab) (width 0.1)) (fp_line (start -0.182983 -1.71) (end 0.182983 -1.71) (layer F.SilkS) (width 0.12)) (fp_line (start -0.182983 1.71) (end 0.182983 1.71) (layer F.SilkS) (width 0.12)) (fp_line (start -1.5 1.95) (end -1.5 -1.95) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.5 -1.95) (end 1.5 -1.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.5 -1.95) (end 1.5 1.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.5 1.95) (end -1.5 1.95) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.4 0.4) (thickness 0.06))) ) (pad 2 smd roundrect (at 0.75 0 180) (size 1 3.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 50 /PowerChannel2/POWER_MONITORED)) (pad 1 smd roundrect (at -0.75 0 180) (size 1 3.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 57 "Net-(D401-Pad2)")) (model ${KISYS3DMOD}/Resistor_SMD.3dshapes/R_0612_1632Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Resistor_SMD:R_0805_2012Metric (layer F.Cu) (tedit 5F68FEEE) (tstamp 606F1C0F) (at 119.38 117.475) (descr "Resistor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") (tags resistor) (path /60AFE278/607187ED) (attr smd) (fp_text reference R402 (at -3.175 -0.635) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (fp_text value 2k (at 0 1.65) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -1 0.625) (end -1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start -1 -0.625) (end 1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 -0.625) (end 1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 0.625) (end -1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start -0.227064 -0.735) (end 0.227064 -0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -0.227064 0.735) (end 0.227064 0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -1.68 0.95) (end -1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.68 -0.95) (end 1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.68 -0.95) (end 1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.68 0.95) (end -1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.5 0.5) (thickness 0.08))) ) (pad 2 smd roundrect (at 0.9125 0) (size 1.025 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.243902) (net 58 "Net-(D401-Pad1)")) (pad 1 smd roundrect (at -0.9125 0) (size 1.025 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.243902) (net 48 /LED_GND)) (model ${KISYS3DMOD}/Resistor_SMD.3dshapes/R_0805_2012Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module BK-6013:BK-6013 (layer F.Cu) (tedit 605D2E8E) (tstamp 606F2DDB) (at 109.22 120.015) (path /60AFE278/60718784) (fp_text reference F401 (at 0 -3.81) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (fp_text value "Fuse Holder BK-6013" (at 0 -0.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -7.35 -2.375) (end 7.35 -2.375) (layer F.SilkS) (width 0.15)) (fp_line (start -7.35 2.375) (end 7.35 2.375) (layer F.SilkS) (width 0.15)) (fp_line (start 7.35 -2.375) (end 7.35 2.375) (layer F.SilkS) (width 0.15)) (fp_line (start -7.35 -2.375) (end -7.35 2.375) (layer F.SilkS) (width 0.15)) (fp_line (start -7.747 -2.794) (end 7.747 -2.794) (layer F.CrtYd) (width 0.12)) (fp_line (start 7.747 -2.794) (end 7.747 2.794) (layer F.CrtYd) (width 0.12)) (fp_line (start 7.747 2.794) (end -7.747 2.794) (layer F.CrtYd) (width 0.12)) (fp_line (start -7.747 2.794) (end -7.747 -2.794) (layer F.CrtYd) (width 0.12)) (pad 2 thru_hole circle (at 5.895 0) (size 2.7 2.7) (drill 1.65) (layers *.Cu *.Mask) (net 70 /PowerChannel2/POWER_IN)) (pad 2 thru_hole circle (at 2.235 0) (size 2.7 2.7) (drill 1.65) (layers *.Cu *.Mask) (net 70 /PowerChannel2/POWER_IN)) (pad 1 thru_hole rect (at -5.895 0) (size 2.7 2.7) (drill 1.65) (layers *.Cu *.Mask) (net 57 "Net-(D401-Pad2)")) (pad 1 thru_hole rect (at -2.235 0) (size 2.7 2.7) (drill 1.65) (layers *.Cu *.Mask) (net 57 "Net-(D401-Pad2)")) (model ../lib/BK-6013.models/Memory_Protection_Devices_-_BK-6013.step (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Resistor_SMD:R_0805_2012Metric (layer F.Cu) (tedit 5F68FEEE) (tstamp 606F1F36) (at 119.38 99.695) (descr "Resistor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") (tags resistor) (path /60AFE278/60718758) (attr smd) (fp_text reference R405 (at -3.175 0.254) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (fp_text value 2k (at 0 1.65) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -1 0.625) (end -1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start -1 -0.625) (end 1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 -0.625) (end 1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 0.625) (end -1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start -0.227064 -0.735) (end 0.227064 -0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -0.227064 0.735) (end 0.227064 0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -1.68 0.95) (end -1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.68 -0.95) (end 1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.68 -0.95) (end 1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.68 0.95) (end -1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.5 0.5) (thickness 0.08))) ) (pad 2 smd roundrect (at 0.9125 0) (size 1.025 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.243902) (net 60 "Net-(D402-Pad1)")) (pad 1 smd roundrect (at -0.9125 0) (size 1.025 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.243902) (net 48 /LED_GND)) (model ${KISYS3DMOD}/Resistor_SMD.3dshapes/R_0805_2012Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module ScrewTerminals:Generic-5.08-2P (layer F.Cu) (tedit 606BAC3F) (tstamp 606F1E5D) (at 111.76 111.125 90) (path /60AFE278/607187A4) (fp_text reference J401 (at 2.54 -2.921 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value CHANNEL (at 0 -0.5 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -2.54 -6.2) (end 7.62 -6.2) (layer F.CrtYd) (width 0.12)) (fp_line (start 7.62 -6.2) (end 7.62 6.2) (layer F.CrtYd) (width 0.12)) (fp_line (start 7.62 6.2) (end -2.54 6.2) (layer F.CrtYd) (width 0.12)) (fp_line (start -2.54 6.2) (end -2.54 -6.2) (layer F.CrtYd) (width 0.12)) (fp_line (start -2.54 4.3) (end -2.54 -4.3) (layer F.SilkS) (width 0.12)) (fp_line (start 7.62 4.3) (end -2.54 4.3) (layer F.SilkS) (width 0.12)) (fp_line (start -2.54 -4.3) (end 7.62 -4.3) (layer F.SilkS) (width 0.12)) (fp_line (start 7.62 -4.3) (end 7.62 4.3) (layer F.SilkS) (width 0.12)) (fp_line (start -1.27 4.23) (end -0.635 3.04) (layer F.SilkS) (width 0.15)) (fp_line (start -0.635 3.04) (end 0.635 3.04) (layer F.SilkS) (width 0.15)) (fp_line (start 0.635 3.04) (end 1.27 4.23) (layer F.SilkS) (width 0.15)) (fp_line (start 5.715 3.04) (end 6.35 4.23) (layer F.SilkS) (width 0.15)) (fp_line (start 3.81 4.23) (end 4.445 3.04) (layer F.SilkS) (width 0.15)) (fp_line (start 4.445 3.04) (end 5.715 3.04) (layer F.SilkS) (width 0.15)) (fp_text user "Generic screw terminal keep out region" (at 2.54 5.08 90) (layer F.Fab) (effects (font (size 0.5 0.3) (thickness 0.05))) ) (fp_text user "Generic screw terminal keep out region" (at 2.54 -5.08 90) (layer F.Fab) (effects (font (size 0.5 0.3) (thickness 0.05))) ) (pad 2 thru_hole circle (at 5.08 0 90) (size 2 2) (drill 1.2) (layers *.Cu *.Mask) (net 59 /PowerChannel2/POWER_OUT)) (pad 1 thru_hole rect (at 0 0 90) (size 2 2) (drill 1.2) (layers *.Cu *.Mask) (net 70 /PowerChannel2/POWER_IN)) (model ${KISYS3DMOD}/TerminalBlock_Phoenix.3dshapes/TerminalBlock_Phoenix_MKDS-1,5-2-5.08_1x02_P5.08mm_Horizontal.step (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Package_SO:SOIC-8_3.9x4.9mm_P1.27mm (layer F.Cu) (tedit 5D9F72B1) (tstamp 606F2A2E) (at 93.98 118.745) (descr "SOIC, 8 Pin (JEDEC MS-012AA, https://www.analog.com/media/en/package-pcb-resources/package/pkg_pdf/soic_narrow-r/r_8.pdf), generated with kicad-footprint-generator ipc_gullwing_generator.py") (tags "SOIC SO") (path /60AFE278/6071873C) (attr smd) (fp_text reference U401 (at 0 3.175) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (fp_text value INA219BxD (at 0 3.4) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 0 2.56) (end 1.95 2.56) (layer F.SilkS) (width 0.12)) (fp_line (start 0 2.56) (end -1.95 2.56) (layer F.SilkS) (width 0.12)) (fp_line (start 0 -2.56) (end 1.95 -2.56) (layer F.SilkS) (width 0.12)) (fp_line (start 0 -2.56) (end -3.45 -2.56) (layer F.SilkS) (width 0.12)) (fp_line (start -0.975 -2.45) (end 1.95 -2.45) (layer F.Fab) (width 0.1)) (fp_line (start 1.95 -2.45) (end 1.95 2.45) (layer F.Fab) (width 0.1)) (fp_line (start 1.95 2.45) (end -1.95 2.45) (layer F.Fab) (width 0.1)) (fp_line (start -1.95 2.45) (end -1.95 -1.475) (layer F.Fab) (width 0.1)) (fp_line (start -1.95 -1.475) (end -0.975 -2.45) (layer F.Fab) (width 0.1)) (fp_line (start -3.7 -2.7) (end -3.7 2.7) (layer F.CrtYd) (width 0.05)) (fp_line (start -3.7 2.7) (end 3.7 2.7) (layer F.CrtYd) (width 0.05)) (fp_line (start 3.7 2.7) (end 3.7 -2.7) (layer F.CrtYd) (width 0.05)) (fp_line (start 3.7 -2.7) (end -3.7 -2.7) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.98 0.98) (thickness 0.15))) ) (pad 8 smd roundrect (at 2.475 -1.905) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 57 "Net-(D401-Pad2)")) (pad 7 smd roundrect (at 2.475 -0.635) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 50 /PowerChannel2/POWER_MONITORED)) (pad 6 smd roundrect (at 2.475 0.635) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 2 GND)) (pad 5 smd roundrect (at 2.475 1.905) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 11 +3V3)) (pad 4 smd roundrect (at -2.475 1.905) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 7 /SCL)) (pad 3 smd roundrect (at -2.475 0.635) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 8 /SDA)) (pad 2 smd roundrect (at -2.475 -0.635) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 8 /SDA)) (pad 1 smd roundrect (at -2.475 -1.905) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 2 GND)) (model ${KISYS3DMOD}/Package_SO.3dshapes/SOIC-8_3.9x4.9mm_P1.27mm.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Resistor_SMD:R_0805_2012Metric (layer F.Cu) (tedit 5F68FEEE) (tstamp 606F2896) (at 107.315 99.06 180) (descr "Resistor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") (tags resistor) (path /60AFE278/607187C9) (attr smd) (fp_text reference R404 (at 0 1.905) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (fp_text value 15k (at 0 1.65) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -1 0.625) (end -1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start -1 -0.625) (end 1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 -0.625) (end 1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 0.625) (end -1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start -0.227064 -0.735) (end 0.227064 -0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -0.227064 0.735) (end 0.227064 0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -1.68 0.95) (end -1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.68 -0.95) (end 1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.68 -0.95) (end 1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.68 0.95) (end -1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.5 0.5) (thickness 0.08))) ) (pad 2 smd roundrect (at 0.9125 0 180) (size 1.025 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.243902) (net 77 "Net-(R404-Pad2)")) (pad 1 smd roundrect (at -0.9125 0 180) (size 1.025 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.243902) (net 2 GND)) (model ${KISYS3DMOD}/Resistor_SMD.3dshapes/R_0805_2012Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Capacitor_SMD:C_0805_2012Metric (layer F.Cu) (tedit 5F68FEEE) (tstamp 606F23C5) (at 102.235 99.06 180) (descr "Capacitor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf, https://docs.google.com/spreadsheets/d/1BsfQQcO9C6DZCsRaXUlFlo91Tg2WpOkGARC1WS5S8t0/edit?usp=sharing), generated with kicad-footprint-generator") (tags capacitor) (path /60AFE278/6071875F) (attr smd) (fp_text reference C402 (at 0 1.905) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (fp_text value 0.1uF (at 0 1.68) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -1 0.625) (end -1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start -1 -0.625) (end 1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 -0.625) (end 1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 0.625) (end -1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start -0.261252 -0.735) (end 0.261252 -0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -0.261252 0.735) (end 0.261252 0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -1.7 0.98) (end -1.7 -0.98) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.7 -0.98) (end 1.7 -0.98) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.7 -0.98) (end 1.7 0.98) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.7 0.98) (end -1.7 0.98) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.5 0.5) (thickness 0.08))) ) (pad 2 smd roundrect (at 0.95 0 180) (size 1 1.45) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 50 /PowerChannel2/POWER_MONITORED)) (pad 1 smd roundrect (at -0.95 0 180) (size 1 1.45) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 2 GND)) (model ${KISYS3DMOD}/Capacitor_SMD.3dshapes/C_0805_2012Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Package_SO:SOIC-8_3.9x4.9mm_P1.27mm (layer F.Cu) (tedit 5D9F72B1) (tstamp 606F265F) (at 93.98 86.36) (descr "SOIC, 8 Pin (JEDEC MS-012AA, https://www.analog.com/media/en/package-pcb-resources/package/pkg_pdf/soic_narrow-r/r_8.pdf), generated with kicad-footprint-generator ipc_gullwing_generator.py") (tags "SOIC SO") (path /60AEE6BF/6071873C) (attr smd) (fp_text reference U301 (at 0 3.175) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (fp_text value INA219BxD (at 0 3.4) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 0 2.56) (end 1.95 2.56) (layer F.SilkS) (width 0.12)) (fp_line (start 0 2.56) (end -1.95 2.56) (layer F.SilkS) (width 0.12)) (fp_line (start 0 -2.56) (end 1.95 -2.56) (layer F.SilkS) (width 0.12)) (fp_line (start 0 -2.56) (end -3.45 -2.56) (layer F.SilkS) (width 0.12)) (fp_line (start -0.975 -2.45) (end 1.95 -2.45) (layer F.Fab) (width 0.1)) (fp_line (start 1.95 -2.45) (end 1.95 2.45) (layer F.Fab) (width 0.1)) (fp_line (start 1.95 2.45) (end -1.95 2.45) (layer F.Fab) (width 0.1)) (fp_line (start -1.95 2.45) (end -1.95 -1.475) (layer F.Fab) (width 0.1)) (fp_line (start -1.95 -1.475) (end -0.975 -2.45) (layer F.Fab) (width 0.1)) (fp_line (start -3.7 -2.7) (end -3.7 2.7) (layer F.CrtYd) (width 0.05)) (fp_line (start -3.7 2.7) (end 3.7 2.7) (layer F.CrtYd) (width 0.05)) (fp_line (start 3.7 2.7) (end 3.7 -2.7) (layer F.CrtYd) (width 0.05)) (fp_line (start 3.7 -2.7) (end -3.7 -2.7) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.98 0.98) (thickness 0.15))) ) (pad 1 smd roundrect (at -2.475 -1.905) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 2 GND)) (pad 2 smd roundrect (at -2.475 -0.635) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 11 +3V3)) (pad 3 smd roundrect (at -2.475 0.635) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 8 /SDA)) (pad 4 smd roundrect (at -2.475 1.905) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 7 /SCL)) (pad 5 smd roundrect (at 2.475 1.905) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 11 +3V3)) (pad 6 smd roundrect (at 2.475 0.635) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 2 GND)) (pad 7 smd roundrect (at 2.475 -0.635) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 49 /PowerChannel1/POWER_MONITORED)) (pad 8 smd roundrect (at 2.475 -1.905) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 53 "Net-(D301-Pad2)")) (model ${KISYS3DMOD}/Package_SO.3dshapes/SOIC-8_3.9x4.9mm_P1.27mm.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Resistor_SMD:R_0805_2012Metric (layer F.Cu) (tedit 5F68FEEE) (tstamp 606F1D23) (at 119.38 67.31) (descr "Resistor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") (tags resistor) (path /60AEE6BF/60718758) (attr smd) (fp_text reference R305 (at -3.175 0.254) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (fp_text value 2k (at 0 1.65) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -1 0.625) (end -1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start -1 -0.625) (end 1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 -0.625) (end 1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 0.625) (end -1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start -0.227064 -0.735) (end 0.227064 -0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -0.227064 0.735) (end 0.227064 0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -1.68 0.95) (end -1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.68 -0.95) (end 1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.68 -0.95) (end 1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.68 0.95) (end -1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.5 0.5) (thickness 0.08))) ) (pad 1 smd roundrect (at -0.9125 0) (size 1.025 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.243902) (net 48 /LED_GND)) (pad 2 smd roundrect (at 0.9125 0) (size 1.025 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.243902) (net 55 "Net-(D302-Pad1)")) (model ${KISYS3DMOD}/Resistor_SMD.3dshapes/R_0805_2012Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Resistor_SMD:R_0805_2012Metric (layer F.Cu) (tedit 5F68FEEE) (tstamp 606F2815) (at 107.315 66.675 180) (descr "Resistor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") (tags resistor) (path /60AEE6BF/607187C9) (attr smd) (fp_text reference R304 (at 0 1.905) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (fp_text value 15k (at 0 1.65) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -1 0.625) (end -1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start -1 -0.625) (end 1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 -0.625) (end 1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 0.625) (end -1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start -0.227064 -0.735) (end 0.227064 -0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -0.227064 0.735) (end 0.227064 0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -1.68 0.95) (end -1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.68 -0.95) (end 1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.68 -0.95) (end 1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.68 0.95) (end -1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.5 0.5) (thickness 0.08))) ) (pad 1 smd roundrect (at -0.9125 0 180) (size 1.025 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.243902) (net 2 GND)) (pad 2 smd roundrect (at 0.9125 0 180) (size 1.025 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.243902) (net 74 "Net-(R304-Pad2)")) (model ${KISYS3DMOD}/Resistor_SMD.3dshapes/R_0805_2012Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Resistor_SMD:R_0805_2012Metric (layer F.Cu) (tedit 5F68FEEE) (tstamp 606F201A) (at 111.76 69.215) (descr "Resistor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") (tags resistor) (path /60AEE6BF/6071879D) (attr smd) (fp_text reference R303 (at 0 1.397) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (fp_text value 15k (at 0 1.65) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -1 0.625) (end -1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start -1 -0.625) (end 1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 -0.625) (end 1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 0.625) (end -1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start -0.227064 -0.735) (end 0.227064 -0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -0.227064 0.735) (end 0.227064 0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -1.68 0.95) (end -1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.68 -0.95) (end 1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.68 -0.95) (end 1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.68 0.95) (end -1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.5 0.5) (thickness 0.08))) ) (pad 1 smd roundrect (at -0.9125 0) (size 1.025 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.243902) (net 73 "Net-(R303-Pad1)")) (pad 2 smd roundrect (at 0.9125 0) (size 1.025 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.243902) (net 14 /OUT1_EN)) (model ${KISYS3DMOD}/Resistor_SMD.3dshapes/R_0805_2012Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module ScrewTerminals:Generic-5.08-2P (layer F.Cu) (tedit 606BAC3F) (tstamp 606F2F0A) (at 111.76 78.74 90) (path /60AEE6BF/607187A4) (fp_text reference J301 (at 2.54 -2.921 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value CHANNEL (at 0 -0.5 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -2.54 -6.2) (end 7.62 -6.2) (layer F.CrtYd) (width 0.12)) (fp_line (start 7.62 -6.2) (end 7.62 6.2) (layer F.CrtYd) (width 0.12)) (fp_line (start 7.62 6.2) (end -2.54 6.2) (layer F.CrtYd) (width 0.12)) (fp_line (start -2.54 6.2) (end -2.54 -6.2) (layer F.CrtYd) (width 0.12)) (fp_line (start -2.54 4.3) (end -2.54 -4.3) (layer F.SilkS) (width 0.12)) (fp_line (start 7.62 4.3) (end -2.54 4.3) (layer F.SilkS) (width 0.12)) (fp_line (start -2.54 -4.3) (end 7.62 -4.3) (layer F.SilkS) (width 0.12)) (fp_line (start 7.62 -4.3) (end 7.62 4.3) (layer F.SilkS) (width 0.12)) (fp_line (start -1.27 4.23) (end -0.635 3.04) (layer F.SilkS) (width 0.15)) (fp_line (start -0.635 3.04) (end 0.635 3.04) (layer F.SilkS) (width 0.15)) (fp_line (start 0.635 3.04) (end 1.27 4.23) (layer F.SilkS) (width 0.15)) (fp_line (start 5.715 3.04) (end 6.35 4.23) (layer F.SilkS) (width 0.15)) (fp_line (start 3.81 4.23) (end 4.445 3.04) (layer F.SilkS) (width 0.15)) (fp_line (start 4.445 3.04) (end 5.715 3.04) (layer F.SilkS) (width 0.15)) (fp_text user "Generic screw terminal keep out region" (at 2.54 -5.08 90) (layer F.Fab) (effects (font (size 0.5 0.3) (thickness 0.05))) ) (fp_text user "Generic screw terminal keep out region" (at 2.54 5.08 90) (layer F.Fab) (effects (font (size 0.5 0.3) (thickness 0.05))) ) (pad 1 thru_hole rect (at 0 0 90) (size 2 2) (drill 1.2) (layers *.Cu *.Mask) (net 69 /PowerChannel1/POWER_IN)) (pad 2 thru_hole circle (at 5.08 0 90) (size 2 2) (drill 1.2) (layers *.Cu *.Mask) (net 56 /PowerChannel1/POWER_OUT)) (model ${KISYS3DMOD}/TerminalBlock_Phoenix.3dshapes/TerminalBlock_Phoenix_MKDS-1,5-2-5.08_1x02_P5.08mm_Horizontal.step (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Resistor_SMD:R_0805_2012Metric (layer F.Cu) (tedit 5F68FEEE) (tstamp 606F2F53) (at 107.315 69.215 180) (descr "Resistor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") (tags resistor) (path /60AEE6BF/607187BF) (attr smd) (fp_text reference R306 (at 0 -1.397) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (fp_text value 1k (at 0 1.65) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -1 0.625) (end -1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start -1 -0.625) (end 1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 -0.625) (end 1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 0.625) (end -1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start -0.227064 -0.735) (end 0.227064 -0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -0.227064 0.735) (end 0.227064 0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -1.68 0.95) (end -1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.68 -0.95) (end 1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.68 -0.95) (end 1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.68 0.95) (end -1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.5 0.5) (thickness 0.08))) ) (pad 1 smd roundrect (at -0.9125 0 180) (size 1.025 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.243902) (net 2 GND)) (pad 2 smd roundrect (at 0.9125 0 180) (size 1.025 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.243902) (net 75 "Net-(R306-Pad2)")) (model ${KISYS3DMOD}/Resistor_SMD.3dshapes/R_0805_2012Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Capacitor_SMD:C_0805_2012Metric (layer F.Cu) (tedit 5F68FEEE) (tstamp 606F2E12) (at 99.06 87.63 270) (descr "Capacitor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf, https://docs.google.com/spreadsheets/d/1BsfQQcO9C6DZCsRaXUlFlo91Tg2WpOkGARC1WS5S8t0/edit?usp=sharing), generated with kicad-footprint-generator") (tags capacitor) (path /60AEE6BF/60718742) (attr smd) (fp_text reference C301 (at 0 -1.68 90) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (fp_text value 0.1uF (at 0 1.68 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -1 0.625) (end -1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start -1 -0.625) (end 1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 -0.625) (end 1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 0.625) (end -1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start -0.261252 -0.735) (end 0.261252 -0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -0.261252 0.735) (end 0.261252 0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -1.7 0.98) (end -1.7 -0.98) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.7 -0.98) (end 1.7 -0.98) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.7 -0.98) (end 1.7 0.98) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.7 0.98) (end -1.7 0.98) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 0 90) (layer F.Fab) (effects (font (size 0.5 0.5) (thickness 0.08))) ) (pad 1 smd roundrect (at -0.95 0 270) (size 1 1.45) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 2 GND)) (pad 2 smd roundrect (at 0.95 0 270) (size 1 1.45) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 11 +3V3)) (model ${KISYS3DMOD}/Capacitor_SMD.3dshapes/C_0805_2012Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Capacitor_SMD:C_0805_2012Metric (layer F.Cu) (tedit 5F68FEEE) (tstamp 606F2293) (at 102.235 66.675 180) (descr "Capacitor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf, https://docs.google.com/spreadsheets/d/1BsfQQcO9C6DZCsRaXUlFlo91Tg2WpOkGARC1WS5S8t0/edit?usp=sharing), generated with kicad-footprint-generator") (tags capacitor) (path /60AEE6BF/6071875F) (attr smd) (fp_text reference C302 (at 0 1.905) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (fp_text value 0.1uF (at 0 1.68) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -1 0.625) (end -1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start -1 -0.625) (end 1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 -0.625) (end 1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 0.625) (end -1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start -0.261252 -0.735) (end 0.261252 -0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -0.261252 0.735) (end 0.261252 0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -1.7 0.98) (end -1.7 -0.98) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.7 -0.98) (end 1.7 -0.98) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.7 -0.98) (end 1.7 0.98) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.7 0.98) (end -1.7 0.98) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.5 0.5) (thickness 0.08))) ) (pad 1 smd roundrect (at -0.95 0 180) (size 1 1.45) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 2 GND)) (pad 2 smd roundrect (at 0.95 0 180) (size 1 1.45) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 49 /PowerChannel1/POWER_MONITORED)) (model ${KISYS3DMOD}/Capacitor_SMD.3dshapes/C_0805_2012Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Capacitor_SMD:C_0805_2012Metric (layer F.Cu) (tedit 5F68FEEE) (tstamp 606F3532) (at 78.105 85.725 270) (descr "Capacitor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf, https://docs.google.com/spreadsheets/d/1BsfQQcO9C6DZCsRaXUlFlo91Tg2WpOkGARC1WS5S8t0/edit?usp=sharing), generated with kicad-footprint-generator") (tags capacitor) (path /62C248BF) (attr smd) (fp_text reference C112 (at 2.54 0 180) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (fp_text value 0.1uF (at 0 1.68 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -1 0.625) (end -1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start -1 -0.625) (end 1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 -0.625) (end 1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 0.625) (end -1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start -0.261252 -0.735) (end 0.261252 -0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -0.261252 0.735) (end 0.261252 0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -1.7 0.98) (end -1.7 -0.98) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.7 -0.98) (end 1.7 -0.98) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.7 -0.98) (end 1.7 0.98) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.7 0.98) (end -1.7 0.98) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 0 90) (layer F.Fab) (effects (font (size 0.5 0.5) (thickness 0.08))) ) (pad 1 smd roundrect (at -0.95 0 270) (size 1 1.45) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 1 +5V)) (pad 2 smd roundrect (at 0.95 0 270) (size 1 1.45) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 2 GND)) (model ${KISYS3DMOD}/Capacitor_SMD.3dshapes/C_0805_2012Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Resistor_SMD:R_0612_1632Metric (layer F.Cu) (tedit 5F68FEEE) (tstamp 606F28CC) (at 101.6 78.74 180) (descr "Resistor SMD 0612 (1632 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: https://www.vishay.com/docs/20019/rcwe.pdf), generated with kicad-footprint-generator") (tags resistor) (path /60AEE6BF/6071877C) (attr smd) (fp_text reference R301 (at 0 -2.65) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (fp_text value "0.01R 1% 1W" (at 0 2.65) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -0.8 1.6) (end -0.8 -1.6) (layer F.Fab) (width 0.1)) (fp_line (start -0.8 -1.6) (end 0.8 -1.6) (layer F.Fab) (width 0.1)) (fp_line (start 0.8 -1.6) (end 0.8 1.6) (layer F.Fab) (width 0.1)) (fp_line (start 0.8 1.6) (end -0.8 1.6) (layer F.Fab) (width 0.1)) (fp_line (start -0.182983 -1.71) (end 0.182983 -1.71) (layer F.SilkS) (width 0.12)) (fp_line (start -0.182983 1.71) (end 0.182983 1.71) (layer F.SilkS) (width 0.12)) (fp_line (start -1.5 1.95) (end -1.5 -1.95) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.5 -1.95) (end 1.5 -1.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.5 -1.95) (end 1.5 1.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.5 1.95) (end -1.5 1.95) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.4 0.4) (thickness 0.06))) ) (pad 1 smd roundrect (at -0.75 0 180) (size 1 3.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 53 "Net-(D301-Pad2)")) (pad 2 smd roundrect (at 0.75 0 180) (size 1 3.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 49 /PowerChannel1/POWER_MONITORED)) (model ${KISYS3DMOD}/Resistor_SMD.3dshapes/R_0612_1632Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module LED_SMD:LED_WS2812B_PLCC4_5.0x5.0mm_P3.2mm (layer F.Cu) (tedit 5AA4B285) (tstamp 606F2983) (at 84.455 86.36) (descr https://cdn-shop.adafruit.com/datasheets/WS2812B.pdf) (tags "LED RGB NeoPixel") (path /62C248CE) (attr smd) (fp_text reference D105 (at 0 3.175) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (fp_text value WS2812B (at 0 4) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 3.45 -2.75) (end -3.45 -2.75) (layer F.CrtYd) (width 0.05)) (fp_line (start 3.45 2.75) (end 3.45 -2.75) (layer F.CrtYd) (width 0.05)) (fp_line (start -3.45 2.75) (end 3.45 2.75) (layer F.CrtYd) (width 0.05)) (fp_line (start -3.45 -2.75) (end -3.45 2.75) (layer F.CrtYd) (width 0.05)) (fp_line (start 2.5 1.5) (end 1.5 2.5) (layer F.Fab) (width 0.1)) (fp_line (start -2.5 -2.5) (end -2.5 2.5) (layer F.Fab) (width 0.1)) (fp_line (start -2.5 2.5) (end 2.5 2.5) (layer F.Fab) (width 0.1)) (fp_line (start 2.5 2.5) (end 2.5 -2.5) (layer F.Fab) (width 0.1)) (fp_line (start 2.5 -2.5) (end -2.5 -2.5) (layer F.Fab) (width 0.1)) (fp_line (start -3.65 -2.75) (end 3.65 -2.75) (layer F.SilkS) (width 0.12)) (fp_line (start -3.65 2.75) (end 3.65 2.75) (layer F.SilkS) (width 0.12)) (fp_line (start 3.65 2.75) (end 3.65 1.6) (layer F.SilkS) (width 0.12)) (fp_circle (center 0 0) (end 0 -2) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (pad 3 smd rect (at 2.45 1.6) (size 1.5 1) (layers F.Cu F.Paste F.Mask) (net 2 GND)) (pad 4 smd rect (at 2.45 -1.6) (size 1.5 1) (layers F.Cu F.Paste F.Mask) (net 35 "Net-(D104-Pad2)")) (pad 2 smd rect (at -2.45 1.6) (size 1.5 1) (layers F.Cu F.Paste F.Mask) (net 36 "Net-(D105-Pad2)")) (pad 1 smd rect (at -2.45 -1.6) (size 1.5 1) (layers F.Cu F.Paste F.Mask) (net 1 +5V)) (model ${KISYS3DMOD}/LED_SMD.3dshapes/LED_WS2812B_PLCC4_5.0x5.0mm_P3.2mm.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Resistor_SMD:R_0805_2012Metric (layer F.Cu) (tedit 5F68FEEE) (tstamp 606F363D) (at 119.38 85.09) (descr "Resistor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") (tags resistor) (path /60AEE6BF/607187ED) (attr smd) (fp_text reference R302 (at -3.175 -0.635) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (fp_text value 2k (at 0 1.65) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -1 0.625) (end -1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start -1 -0.625) (end 1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 -0.625) (end 1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 0.625) (end -1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start -0.227064 -0.735) (end 0.227064 -0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -0.227064 0.735) (end 0.227064 0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -1.68 0.95) (end -1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.68 -0.95) (end 1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.68 -0.95) (end 1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.68 0.95) (end -1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.5 0.5) (thickness 0.08))) ) (pad 1 smd roundrect (at -0.9125 0) (size 1.025 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.243902) (net 48 /LED_GND)) (pad 2 smd roundrect (at 0.9125 0) (size 1.025 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.243902) (net 54 "Net-(D301-Pad1)")) (model ${KISYS3DMOD}/Resistor_SMD.3dshapes/R_0805_2012Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module BK-6013:BK-6013 (layer F.Cu) (tedit 605D2E8E) (tstamp 606F21AB) (at 109.22 87.63) (path /60AEE6BF/60718784) (fp_text reference F301 (at 0 -3.81) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (fp_text value "Fuse Holder BK-6013" (at 0 -0.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -7.35 -2.375) (end 7.35 -2.375) (layer F.SilkS) (width 0.15)) (fp_line (start -7.35 2.375) (end 7.35 2.375) (layer F.SilkS) (width 0.15)) (fp_line (start 7.35 -2.375) (end 7.35 2.375) (layer F.SilkS) (width 0.15)) (fp_line (start -7.35 -2.375) (end -7.35 2.375) (layer F.SilkS) (width 0.15)) (fp_line (start -7.747 -2.794) (end 7.747 -2.794) (layer F.CrtYd) (width 0.12)) (fp_line (start 7.747 -2.794) (end 7.747 2.794) (layer F.CrtYd) (width 0.12)) (fp_line (start 7.747 2.794) (end -7.747 2.794) (layer F.CrtYd) (width 0.12)) (fp_line (start -7.747 2.794) (end -7.747 -2.794) (layer F.CrtYd) (width 0.12)) (pad 1 thru_hole rect (at -2.235 0) (size 2.7 2.7) (drill 1.65) (layers *.Cu *.Mask) (net 53 "Net-(D301-Pad2)")) (pad 1 thru_hole rect (at -5.895 0) (size 2.7 2.7) (drill 1.65) (layers *.Cu *.Mask) (net 53 "Net-(D301-Pad2)")) (pad 2 thru_hole circle (at 2.235 0) (size 2.7 2.7) (drill 1.65) (layers *.Cu *.Mask) (net 69 /PowerChannel1/POWER_IN)) (pad 2 thru_hole circle (at 5.895 0) (size 2.7 2.7) (drill 1.65) (layers *.Cu *.Mask) (net 69 /PowerChannel1/POWER_IN)) (model ../lib/BK-6013.models/Memory_Protection_Devices_-_BK-6013.step (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Diode_SMD:D_SOD-128 (layer F.Cu) (tedit 5D3216F4) (tstamp 606F303C) (at 59.055 55.88 180) (descr "D_SOD-128 (CFP5 SlimSMAW), https://assets.nexperia.com/documents/outline-drawing/SOD128.pdf") (tags D_SOD-128) (path /6079E20C) (attr smd) (fp_text reference D107 (at 0 -2) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value "2A 500mV" (at 0 2) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -3.08 -1.36) (end 1.9 -1.36) (layer F.SilkS) (width 0.12)) (fp_line (start -3.08 1.36) (end 1.9 1.36) (layer F.SilkS) (width 0.12)) (fp_line (start -3.15 -1.5) (end -3.15 1.5) (layer F.CrtYd) (width 0.05)) (fp_line (start 3.15 1.5) (end -3.15 1.5) (layer F.CrtYd) (width 0.05)) (fp_line (start 3.15 -1.5) (end 3.15 1.5) (layer F.CrtYd) (width 0.05)) (fp_line (start -3.15 -1.5) (end 3.15 -1.5) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.9 -1.25) (end 1.9 -1.25) (layer F.Fab) (width 0.1)) (fp_line (start 1.9 -1.25) (end 1.9 1.25) (layer F.Fab) (width 0.1)) (fp_line (start 1.9 1.25) (end -1.9 1.25) (layer F.Fab) (width 0.1)) (fp_line (start -1.9 1.25) (end -1.9 -1.25) (layer F.Fab) (width 0.1)) (fp_line (start -0.75 0) (end -0.35 0) (layer F.Fab) (width 0.1)) (fp_line (start -0.35 0) (end -0.35 -0.55) (layer F.Fab) (width 0.1)) (fp_line (start -0.35 0) (end -0.35 0.55) (layer F.Fab) (width 0.1)) (fp_line (start -0.35 0) (end 0.25 -0.4) (layer F.Fab) (width 0.1)) (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer F.Fab) (width 0.1)) (fp_line (start 0.25 0.4) (end -0.35 0) (layer F.Fab) (width 0.1)) (fp_line (start 0.25 0) (end 0.75 0) (layer F.Fab) (width 0.1)) (fp_line (start -3.08 -1.36) (end -3.08 1.36) (layer F.SilkS) (width 0.12)) (fp_text user %R (at 0 -2) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 2 smd rect (at 2.2 0 180) (size 1.4 2.1) (layers F.Cu F.Paste F.Mask) (net 47 "Net-(D107-Pad2)")) (pad 1 smd rect (at -2.2 0 180) (size 1.4 2.1) (layers F.Cu F.Paste F.Mask) (net 1 +5V)) (model ${KISYS3DMOD}/Diode_SMD.3dshapes/D_SOD-128.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module MountingHole:MountingHole_3.2mm_M3_ISO7380_Pad (layer F.Cu) (tedit 56D1B4CB) (tstamp 606F3013) (at 28.575 212.725) (descr "Mounting Hole 3.2mm, M3, ISO7380") (tags "mounting hole 3.2mm m3 iso7380") (path /60742CE7) (attr virtual) (fp_text reference H104 (at 0 -6.35) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) (fp_text value MountingHole_Pad (at 0 3.85) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_circle (center 0 0) (end 2.85 0) (layer Cmts.User) (width 0.15)) (fp_circle (center 0 0) (end 3.1 0) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0.3 0) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 1 thru_hole circle (at 0 0) (size 5.7 5.7) (drill 3.2) (layers *.Cu *.Mask) (net 2 GND)) ) (module MountingHole:MountingHole_3.2mm_M3_ISO7380_Pad (layer F.Cu) (tedit 56D1B4CB) (tstamp 606F3DC3) (at 120.65 212.725) (descr "Mounting Hole 3.2mm, M3, ISO7380") (tags "mounting hole 3.2mm m3 iso7380") (path /60731A69) (attr virtual) (fp_text reference H103 (at 0 -4.445) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) (fp_text value MountingHole_Pad (at 0 3.85) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_circle (center 0 0) (end 2.85 0) (layer Cmts.User) (width 0.15)) (fp_circle (center 0 0) (end 3.1 0) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0.3 0) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 1 thru_hole circle (at 0 0) (size 5.7 5.7) (drill 3.2) (layers *.Cu *.Mask) (net 2 GND)) ) (module MountingHole:MountingHole_3.2mm_M3_ISO7380_Pad (layer F.Cu) (tedit 56D1B4CB) (tstamp 606F3DAE) (at 120.65 28.575) (descr "Mounting Hole 3.2mm, M3, ISO7380") (tags "mounting hole 3.2mm m3 iso7380") (path /60720669) (attr virtual) (fp_text reference H102 (at 0 4.445) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) (fp_text value MountingHole_Pad (at 0 3.85) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_circle (center 0 0) (end 2.85 0) (layer Cmts.User) (width 0.15)) (fp_circle (center 0 0) (end 3.1 0) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0.3 0) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 1 thru_hole circle (at 0 0) (size 5.7 5.7) (drill 3.2) (layers *.Cu *.Mask) (net 2 GND)) ) (module MountingHole:MountingHole_3.2mm_M3_ISO7380_Pad (layer F.Cu) (tedit 56D1B4CB) (tstamp 606F3DDE) (at 28.575 28.575) (descr "Mounting Hole 3.2mm, M3, ISO7380") (tags "mounting hole 3.2mm m3 iso7380") (path /606EB095) (attr virtual) (fp_text reference H101 (at 0 4.445 -180) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) (fp_text value MountingHole_Pad (at 0 3.85) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_circle (center 0 0) (end 2.85 0) (layer Cmts.User) (width 0.15)) (fp_circle (center 0 0) (end 3.1 0) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0.3 0) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 1 thru_hole circle (at 0 0) (size 5.7 5.7) (drill 3.2) (layers *.Cu *.Mask) (net 2 GND)) ) (module ScrewTerminals:Generic-5.08-3P (layer F.Cu) (tedit 606BBBA9) (tstamp 606F3E08) (at 39.37 93.345 270) (path /5FB880B2) (fp_text reference J107 (at 2.54 -2.921 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value UART (at 0 -0.5 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 8.89 4.23) (end 9.525 3.04) (layer F.SilkS) (width 0.15)) (fp_line (start 10.795 3.04) (end 11.43 4.23) (layer F.SilkS) (width 0.15)) (fp_line (start 9.525 3.04) (end 10.795 3.04) (layer F.SilkS) (width 0.15)) (fp_line (start -2.54 -6.2) (end 12.7 -6.2) (layer F.CrtYd) (width 0.12)) (fp_line (start 12.7 -6.2) (end 12.7 6.2) (layer F.CrtYd) (width 0.12)) (fp_line (start 12.7 6.2) (end -2.54 6.2) (layer F.CrtYd) (width 0.12)) (fp_line (start -2.54 6.2) (end -2.54 -6.2) (layer F.CrtYd) (width 0.12)) (fp_line (start -2.54 4.3) (end -2.54 -4.3) (layer F.SilkS) (width 0.12)) (fp_line (start 12.7 4.3) (end -2.54 4.3) (layer F.SilkS) (width 0.12)) (fp_line (start -2.54 -4.3) (end 12.7 -4.3) (layer F.SilkS) (width 0.12)) (fp_line (start 12.7 -4.3) (end 12.7 4.3) (layer F.SilkS) (width 0.12)) (fp_line (start -1.27 4.23) (end -0.635 3.04) (layer F.SilkS) (width 0.15)) (fp_line (start -0.635 3.04) (end 0.635 3.04) (layer F.SilkS) (width 0.15)) (fp_line (start 0.635 3.04) (end 1.27 4.23) (layer F.SilkS) (width 0.15)) (fp_line (start 5.715 3.04) (end 6.35 4.23) (layer F.SilkS) (width 0.15)) (fp_line (start 3.81 4.23) (end 4.445 3.04) (layer F.SilkS) (width 0.15)) (fp_line (start 4.445 3.04) (end 5.715 3.04) (layer F.SilkS) (width 0.15)) (fp_text user "Generic screw terminal keep out region" (at 5.08 5.08 90) (layer F.Fab) (effects (font (size 0.5 0.3) (thickness 0.05))) ) (fp_text user "Generic screw terminal keep out region" (at 5.08 -5.08 90) (layer F.Fab) (effects (font (size 0.5 0.3) (thickness 0.05))) ) (pad 3 thru_hole circle (at 10.16 0 270) (size 2 2) (drill 1.2) (layers *.Cu *.Mask) (net 2 GND)) (pad 2 thru_hole circle (at 5.08 0 270) (size 2 2) (drill 1.2) (layers *.Cu *.Mask) (net 6 /TX)) (pad 1 thru_hole rect (at 0 0 270) (size 2 2) (drill 1.2) (layers *.Cu *.Mask) (net 5 /RX)) (model ${KISYS3DMOD}/TerminalBlock_Phoenix.3dshapes/TerminalBlock_Phoenix_MKDS-1,5-3-5.08_1x03_P5.08mm_Horizontal.step (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module ScrewTerminals:Generic-5.08-2P (layer F.Cu) (tedit 606BAC3F) (tstamp 606E861E) (at 111.76 46.355 90) (path /606FA86C/607187A4) (fp_text reference J201 (at 2.54 -2.921 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value CHANNEL (at 0 -0.5 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -2.54 -6.2) (end 7.62 -6.2) (layer F.CrtYd) (width 0.12)) (fp_line (start 7.62 -6.2) (end 7.62 6.2) (layer F.CrtYd) (width 0.12)) (fp_line (start 7.62 6.2) (end -2.54 6.2) (layer F.CrtYd) (width 0.12)) (fp_line (start -2.54 6.2) (end -2.54 -6.2) (layer F.CrtYd) (width 0.12)) (fp_line (start -2.54 4.3) (end -2.54 -4.3) (layer F.SilkS) (width 0.12)) (fp_line (start 7.62 4.3) (end -2.54 4.3) (layer F.SilkS) (width 0.12)) (fp_line (start -2.54 -4.3) (end 7.62 -4.3) (layer F.SilkS) (width 0.12)) (fp_line (start 7.62 -4.3) (end 7.62 4.3) (layer F.SilkS) (width 0.12)) (fp_line (start -1.27 4.23) (end -0.635 3.04) (layer F.SilkS) (width 0.15)) (fp_line (start -0.635 3.04) (end 0.635 3.04) (layer F.SilkS) (width 0.15)) (fp_line (start 0.635 3.04) (end 1.27 4.23) (layer F.SilkS) (width 0.15)) (fp_line (start 5.715 3.04) (end 6.35 4.23) (layer F.SilkS) (width 0.15)) (fp_line (start 3.81 4.23) (end 4.445 3.04) (layer F.SilkS) (width 0.15)) (fp_line (start 4.445 3.04) (end 5.715 3.04) (layer F.SilkS) (width 0.15)) (fp_text user "Generic screw terminal keep out region" (at 2.54 5.08 90) (layer F.Fab) (effects (font (size 0.5 0.3) (thickness 0.05))) ) (fp_text user "Generic screw terminal keep out region" (at 2.54 -5.08 90) (layer F.Fab) (effects (font (size 0.5 0.3) (thickness 0.05))) ) (pad 2 thru_hole circle (at 5.08 0 90) (size 2 2) (drill 1.2) (layers *.Cu *.Mask) (net 30 /PowerChannel0/POWER_OUT)) (pad 1 thru_hole rect (at 0 0 90) (size 2 2) (drill 1.2) (layers *.Cu *.Mask) (net 29 /PowerChannel0/POWER_IN)) (model ${KISYS3DMOD}/TerminalBlock_Phoenix.3dshapes/TerminalBlock_Phoenix_MKDS-1,5-2-5.08_1x02_P5.08mm_Horizontal.step (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module ScrewTerminals:Generic-5.08-2P (layer F.Cu) (tedit 606BAC3F) (tstamp 606F3B40) (at 39.37 139.065 270) (path /60C402B2) (fp_text reference J106 (at 2.54 -2.921 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value "Logic Power Out" (at 0 -0.5 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -2.54 -6.2) (end 7.62 -6.2) (layer F.CrtYd) (width 0.12)) (fp_line (start 7.62 -6.2) (end 7.62 6.2) (layer F.CrtYd) (width 0.12)) (fp_line (start 7.62 6.2) (end -2.54 6.2) (layer F.CrtYd) (width 0.12)) (fp_line (start -2.54 6.2) (end -2.54 -6.2) (layer F.CrtYd) (width 0.12)) (fp_line (start -2.54 4.3) (end -2.54 -4.3) (layer F.SilkS) (width 0.12)) (fp_line (start 7.62 4.3) (end -2.54 4.3) (layer F.SilkS) (width 0.12)) (fp_line (start -2.54 -4.3) (end 7.62 -4.3) (layer F.SilkS) (width 0.12)) (fp_line (start 7.62 -4.3) (end 7.62 4.3) (layer F.SilkS) (width 0.12)) (fp_line (start -1.27 4.23) (end -0.635 3.04) (layer F.SilkS) (width 0.15)) (fp_line (start -0.635 3.04) (end 0.635 3.04) (layer F.SilkS) (width 0.15)) (fp_line (start 0.635 3.04) (end 1.27 4.23) (layer F.SilkS) (width 0.15)) (fp_line (start 5.715 3.04) (end 6.35 4.23) (layer F.SilkS) (width 0.15)) (fp_line (start 3.81 4.23) (end 4.445 3.04) (layer F.SilkS) (width 0.15)) (fp_line (start 4.445 3.04) (end 5.715 3.04) (layer F.SilkS) (width 0.15)) (fp_text user "Generic screw terminal keep out region" (at 2.54 5.08 90) (layer F.Fab) (effects (font (size 0.5 0.3) (thickness 0.05))) ) (fp_text user "Generic screw terminal keep out region" (at 2.54 -5.08 90) (layer F.Fab) (effects (font (size 0.5 0.3) (thickness 0.05))) ) (pad 2 thru_hole circle (at 5.08 0 270) (size 2 2) (drill 1.2) (layers *.Cu *.Mask) (net 2 GND)) (pad 1 thru_hole rect (at 0 0 270) (size 2 2) (drill 1.2) (layers *.Cu *.Mask) (net 12 /3V3_EXT)) (model ${KISYS3DMOD}/TerminalBlock_Phoenix.3dshapes/TerminalBlock_Phoenix_MKDS-1,5-2-5.08_1x02_P5.08mm_Horizontal.step (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module ScrewTerminals:Generic-5.08-2P (layer F.Cu) (tedit 606BAC3F) (tstamp 606F37FE) (at 39.37 123.825 270) (path /60284131) (fp_text reference J105 (at 2.54 -2.921 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value RS485 (at 0 -0.5 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -2.54 -6.2) (end 7.62 -6.2) (layer F.CrtYd) (width 0.12)) (fp_line (start 7.62 -6.2) (end 7.62 6.2) (layer F.CrtYd) (width 0.12)) (fp_line (start 7.62 6.2) (end -2.54 6.2) (layer F.CrtYd) (width 0.12)) (fp_line (start -2.54 6.2) (end -2.54 -6.2) (layer F.CrtYd) (width 0.12)) (fp_line (start -2.54 4.3) (end -2.54 -4.3) (layer F.SilkS) (width 0.12)) (fp_line (start 7.62 4.3) (end -2.54 4.3) (layer F.SilkS) (width 0.12)) (fp_line (start -2.54 -4.3) (end 7.62 -4.3) (layer F.SilkS) (width 0.12)) (fp_line (start 7.62 -4.3) (end 7.62 4.3) (layer F.SilkS) (width 0.12)) (fp_line (start -1.27 4.23) (end -0.635 3.04) (layer F.SilkS) (width 0.15)) (fp_line (start -0.635 3.04) (end 0.635 3.04) (layer F.SilkS) (width 0.15)) (fp_line (start 0.635 3.04) (end 1.27 4.23) (layer F.SilkS) (width 0.15)) (fp_line (start 5.715 3.04) (end 6.35 4.23) (layer F.SilkS) (width 0.15)) (fp_line (start 3.81 4.23) (end 4.445 3.04) (layer F.SilkS) (width 0.15)) (fp_line (start 4.445 3.04) (end 5.715 3.04) (layer F.SilkS) (width 0.15)) (fp_text user "Generic screw terminal keep out region" (at 2.54 5.08 90) (layer F.Fab) (effects (font (size 0.5 0.3) (thickness 0.05))) ) (fp_text user "Generic screw terminal keep out region" (at 2.54 -5.08 90) (layer F.Fab) (effects (font (size 0.5 0.3) (thickness 0.05))) ) (pad 2 thru_hole circle (at 5.08 0 270) (size 2 2) (drill 1.2) (layers *.Cu *.Mask) (net 40 "Net-(J104-Pad2)")) (pad 1 thru_hole rect (at 0 0 270) (size 2 2) (drill 1.2) (layers *.Cu *.Mask) (net 41 "Net-(J104-Pad1)")) (model ${KISYS3DMOD}/TerminalBlock_Phoenix.3dshapes/TerminalBlock_Phoenix_MKDS-1,5-2-5.08_1x02_P5.08mm_Horizontal.step (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module ScrewTerminals:Generic-5.08-2P (layer F.Cu) (tedit 606BAC3F) (tstamp 606F39F6) (at 39.37 113.665 270) (path /60282EC9) (fp_text reference J104 (at 2.54 -2.921 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value RS485 (at 0 -0.5 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -2.54 -6.2) (end 7.62 -6.2) (layer F.CrtYd) (width 0.12)) (fp_line (start 7.62 -6.2) (end 7.62 6.2) (layer F.CrtYd) (width 0.12)) (fp_line (start 7.62 6.2) (end -2.54 6.2) (layer F.CrtYd) (width 0.12)) (fp_line (start -2.54 6.2) (end -2.54 -6.2) (layer F.CrtYd) (width 0.12)) (fp_line (start -2.54 4.3) (end -2.54 -4.3) (layer F.SilkS) (width 0.12)) (fp_line (start 7.62 4.3) (end -2.54 4.3) (layer F.SilkS) (width 0.12)) (fp_line (start -2.54 -4.3) (end 7.62 -4.3) (layer F.SilkS) (width 0.12)) (fp_line (start 7.62 -4.3) (end 7.62 4.3) (layer F.SilkS) (width 0.12)) (fp_line (start -1.27 4.23) (end -0.635 3.04) (layer F.SilkS) (width 0.15)) (fp_line (start -0.635 3.04) (end 0.635 3.04) (layer F.SilkS) (width 0.15)) (fp_line (start 0.635 3.04) (end 1.27 4.23) (layer F.SilkS) (width 0.15)) (fp_line (start 5.715 3.04) (end 6.35 4.23) (layer F.SilkS) (width 0.15)) (fp_line (start 3.81 4.23) (end 4.445 3.04) (layer F.SilkS) (width 0.15)) (fp_line (start 4.445 3.04) (end 5.715 3.04) (layer F.SilkS) (width 0.15)) (fp_text user "Generic screw terminal keep out region" (at 2.54 5.08 90) (layer F.Fab) (effects (font (size 0.5 0.3) (thickness 0.05))) ) (fp_text user "Generic screw terminal keep out region" (at 2.54 -5.08 90) (layer F.Fab) (effects (font (size 0.5 0.3) (thickness 0.05))) ) (pad 2 thru_hole circle (at 5.08 0 270) (size 2 2) (drill 1.2) (layers *.Cu *.Mask) (net 40 "Net-(J104-Pad2)")) (pad 1 thru_hole rect (at 0 0 270) (size 2 2) (drill 1.2) (layers *.Cu *.Mask) (net 41 "Net-(J104-Pad1)")) (model ${KISYS3DMOD}/TerminalBlock_Phoenix.3dshapes/TerminalBlock_Phoenix_MKDS-1,5-2-5.08_1x02_P5.08mm_Horizontal.step (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module ScrewTerminals:Generic-5.08-2P (layer F.Cu) (tedit 606BAC3F) (tstamp 606F30BA) (at 39.37 37.465 270) (path /6071BCFF) (fp_text reference J103 (at 2.54 -2.921 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value "Power In" (at 0 -0.5 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -2.54 -6.2) (end 7.62 -6.2) (layer F.CrtYd) (width 0.12)) (fp_line (start 7.62 -6.2) (end 7.62 6.2) (layer F.CrtYd) (width 0.12)) (fp_line (start 7.62 6.2) (end -2.54 6.2) (layer F.CrtYd) (width 0.12)) (fp_line (start -2.54 6.2) (end -2.54 -6.2) (layer F.CrtYd) (width 0.12)) (fp_line (start -2.54 4.3) (end -2.54 -4.3) (layer F.SilkS) (width 0.12)) (fp_line (start 7.62 4.3) (end -2.54 4.3) (layer F.SilkS) (width 0.12)) (fp_line (start -2.54 -4.3) (end 7.62 -4.3) (layer F.SilkS) (width 0.12)) (fp_line (start 7.62 -4.3) (end 7.62 4.3) (layer F.SilkS) (width 0.12)) (fp_line (start -1.27 4.23) (end -0.635 3.04) (layer F.SilkS) (width 0.15)) (fp_line (start -0.635 3.04) (end 0.635 3.04) (layer F.SilkS) (width 0.15)) (fp_line (start 0.635 3.04) (end 1.27 4.23) (layer F.SilkS) (width 0.15)) (fp_line (start 5.715 3.04) (end 6.35 4.23) (layer F.SilkS) (width 0.15)) (fp_line (start 3.81 4.23) (end 4.445 3.04) (layer F.SilkS) (width 0.15)) (fp_line (start 4.445 3.04) (end 5.715 3.04) (layer F.SilkS) (width 0.15)) (fp_text user "Generic screw terminal keep out region" (at 2.54 5.08 90) (layer F.Fab) (effects (font (size 0.5 0.3) (thickness 0.05))) ) (fp_text user "Generic screw terminal keep out region" (at 2.54 -5.08 90) (layer F.Fab) (effects (font (size 0.5 0.3) (thickness 0.05))) ) (pad 2 thru_hole circle (at 5.08 0 270) (size 2 2) (drill 1.2) (layers *.Cu *.Mask) (net 2 GND)) (pad 1 thru_hole rect (at 0 0 270) (size 2 2) (drill 1.2) (layers *.Cu *.Mask) (net 31 +12V)) (model ${KISYS3DMOD}/TerminalBlock_Phoenix.3dshapes/TerminalBlock_Phoenix_MKDS-1,5-2-5.08_1x02_P5.08mm_Horizontal.step (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module ScrewTerminals:Generic-5.08-2P (layer F.Cu) (tedit 606BAC3F) (tstamp 606F34AA) (at 39.37 62.865 270) (path /62F1BE81) (fp_text reference J102 (at 2.54 -2.921 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value RELAY (at 0 -0.5 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -2.54 -6.2) (end 7.62 -6.2) (layer F.CrtYd) (width 0.12)) (fp_line (start 7.62 -6.2) (end 7.62 6.2) (layer F.CrtYd) (width 0.12)) (fp_line (start 7.62 6.2) (end -2.54 6.2) (layer F.CrtYd) (width 0.12)) (fp_line (start -2.54 6.2) (end -2.54 -6.2) (layer F.CrtYd) (width 0.12)) (fp_line (start -2.54 4.3) (end -2.54 -4.3) (layer F.SilkS) (width 0.12)) (fp_line (start 7.62 4.3) (end -2.54 4.3) (layer F.SilkS) (width 0.12)) (fp_line (start -2.54 -4.3) (end 7.62 -4.3) (layer F.SilkS) (width 0.12)) (fp_line (start 7.62 -4.3) (end 7.62 4.3) (layer F.SilkS) (width 0.12)) (fp_line (start -1.27 4.23) (end -0.635 3.04) (layer F.SilkS) (width 0.15)) (fp_line (start -0.635 3.04) (end 0.635 3.04) (layer F.SilkS) (width 0.15)) (fp_line (start 0.635 3.04) (end 1.27 4.23) (layer F.SilkS) (width 0.15)) (fp_line (start 5.715 3.04) (end 6.35 4.23) (layer F.SilkS) (width 0.15)) (fp_line (start 3.81 4.23) (end 4.445 3.04) (layer F.SilkS) (width 0.15)) (fp_line (start 4.445 3.04) (end 5.715 3.04) (layer F.SilkS) (width 0.15)) (fp_text user "Generic screw terminal keep out region" (at 2.54 5.08 90) (layer F.Fab) (effects (font (size 0.5 0.3) (thickness 0.05))) ) (fp_text user "Generic screw terminal keep out region" (at 2.54 -5.08 90) (layer F.Fab) (effects (font (size 0.5 0.3) (thickness 0.05))) ) (pad 2 thru_hole circle (at 5.08 0 270) (size 2 2) (drill 1.2) (layers *.Cu *.Mask) (net 28 /RELAY_MASTER)) (pad 1 thru_hole rect (at 0 0 270) (size 2 2) (drill 1.2) (layers *.Cu *.Mask) (net 1 +5V)) (model ${KISYS3DMOD}/TerminalBlock_Phoenix.3dshapes/TerminalBlock_Phoenix_MKDS-1,5-2-5.08_1x02_P5.08mm_Horizontal.step (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module ScrewTerminals:Generic-5.08-2P (layer F.Cu) (tedit 606BAC3F) (tstamp 606F337E) (at 39.37 47.625 270) (path /60E26775) (fp_text reference J101 (at 2.54 -2.921 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value "Power In" (at 0 -0.5 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -2.54 -6.2) (end 7.62 -6.2) (layer F.CrtYd) (width 0.12)) (fp_line (start 7.62 -6.2) (end 7.62 6.2) (layer F.CrtYd) (width 0.12)) (fp_line (start 7.62 6.2) (end -2.54 6.2) (layer F.CrtYd) (width 0.12)) (fp_line (start -2.54 6.2) (end -2.54 -6.2) (layer F.CrtYd) (width 0.12)) (fp_line (start -2.54 4.3) (end -2.54 -4.3) (layer F.SilkS) (width 0.12)) (fp_line (start 7.62 4.3) (end -2.54 4.3) (layer F.SilkS) (width 0.12)) (fp_line (start -2.54 -4.3) (end 7.62 -4.3) (layer F.SilkS) (width 0.12)) (fp_line (start 7.62 -4.3) (end 7.62 4.3) (layer F.SilkS) (width 0.12)) (fp_line (start -1.27 4.23) (end -0.635 3.04) (layer F.SilkS) (width 0.15)) (fp_line (start -0.635 3.04) (end 0.635 3.04) (layer F.SilkS) (width 0.15)) (fp_line (start 0.635 3.04) (end 1.27 4.23) (layer F.SilkS) (width 0.15)) (fp_line (start 5.715 3.04) (end 6.35 4.23) (layer F.SilkS) (width 0.15)) (fp_line (start 3.81 4.23) (end 4.445 3.04) (layer F.SilkS) (width 0.15)) (fp_line (start 4.445 3.04) (end 5.715 3.04) (layer F.SilkS) (width 0.15)) (fp_text user "Generic screw terminal keep out region" (at 2.54 5.08 90) (layer F.Fab) (effects (font (size 0.5 0.3) (thickness 0.05))) ) (fp_text user "Generic screw terminal keep out region" (at 2.54 -5.08 90) (layer F.Fab) (effects (font (size 0.5 0.3) (thickness 0.05))) ) (pad 2 thru_hole circle (at 5.08 0 270) (size 2 2) (drill 1.2) (layers *.Cu *.Mask) (net 2 GND)) (pad 1 thru_hole rect (at 0 0 270) (size 2 2) (drill 1.2) (layers *.Cu *.Mask) (net 1 +5V)) (model ${KISYS3DMOD}/TerminalBlock_Phoenix.3dshapes/TerminalBlock_Phoenix_MKDS-1,5-2-5.08_1x02_P5.08mm_Horizontal.step (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Package_SO:SOIC-8_3.9x4.9mm_P1.27mm (layer F.Cu) (tedit 5D9F72B1) (tstamp 606F2CC8) (at 93.98 53.975) (descr "SOIC, 8 Pin (JEDEC MS-012AA, https://www.analog.com/media/en/package-pcb-resources/package/pkg_pdf/soic_narrow-r/r_8.pdf), generated with kicad-footprint-generator ipc_gullwing_generator.py") (tags "SOIC SO") (path /606FA86C/6071873C) (attr smd) (fp_text reference U201 (at 0 3.175) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (fp_text value INA219BxD (at 0 3.4) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 0 2.56) (end 1.95 2.56) (layer F.SilkS) (width 0.12)) (fp_line (start 0 2.56) (end -1.95 2.56) (layer F.SilkS) (width 0.12)) (fp_line (start 0 -2.56) (end 1.95 -2.56) (layer F.SilkS) (width 0.12)) (fp_line (start 0 -2.56) (end -3.45 -2.56) (layer F.SilkS) (width 0.12)) (fp_line (start -0.975 -2.45) (end 1.95 -2.45) (layer F.Fab) (width 0.1)) (fp_line (start 1.95 -2.45) (end 1.95 2.45) (layer F.Fab) (width 0.1)) (fp_line (start 1.95 2.45) (end -1.95 2.45) (layer F.Fab) (width 0.1)) (fp_line (start -1.95 2.45) (end -1.95 -1.475) (layer F.Fab) (width 0.1)) (fp_line (start -1.95 -1.475) (end -0.975 -2.45) (layer F.Fab) (width 0.1)) (fp_line (start -3.7 -2.7) (end -3.7 2.7) (layer F.CrtYd) (width 0.05)) (fp_line (start -3.7 2.7) (end 3.7 2.7) (layer F.CrtYd) (width 0.05)) (fp_line (start 3.7 2.7) (end 3.7 -2.7) (layer F.CrtYd) (width 0.05)) (fp_line (start 3.7 -2.7) (end -3.7 -2.7) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.98 0.98) (thickness 0.15))) ) (pad 8 smd roundrect (at 2.475 -1.905) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 37 "Net-(D201-Pad2)")) (pad 7 smd roundrect (at 2.475 -0.635) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 46 /PowerChannel0/POWER_MONITORED)) (pad 6 smd roundrect (at 2.475 0.635) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 2 GND)) (pad 5 smd roundrect (at 2.475 1.905) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 11 +3V3)) (pad 4 smd roundrect (at -2.475 1.905) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 7 /SCL)) (pad 3 smd roundrect (at -2.475 0.635) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 8 /SDA)) (pad 2 smd roundrect (at -2.475 -0.635) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 2 GND)) (pad 1 smd roundrect (at -2.475 -1.905) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 2 GND)) (model ${KISYS3DMOD}/Package_SO.3dshapes/SOIC-8_3.9x4.9mm_P1.27mm.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Resistor_SMD:R_0805_2012Metric (layer F.Cu) (tedit 5F68FEEE) (tstamp 606F37C9) (at 107.315 36.83 180) (descr "Resistor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") (tags resistor) (path /606FA86C/607187BF) (attr smd) (fp_text reference R206 (at 0 -1.397) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (fp_text value 1k (at 0 1.65) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -1 0.625) (end -1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start -1 -0.625) (end 1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 -0.625) (end 1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 0.625) (end -1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start -0.227064 -0.735) (end 0.227064 -0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -0.227064 0.735) (end 0.227064 0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -1.68 0.95) (end -1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.68 -0.95) (end 1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.68 -0.95) (end 1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.68 0.95) (end -1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.5 0.5) (thickness 0.08))) ) (pad 2 smd roundrect (at 0.9125 0 180) (size 1.025 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.243902) (net 44 "Net-(R206-Pad2)")) (pad 1 smd roundrect (at -0.9125 0 180) (size 1.025 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.243902) (net 2 GND)) (model ${KISYS3DMOD}/Resistor_SMD.3dshapes/R_0805_2012Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Resistor_SMD:R_0805_2012Metric (layer F.Cu) (tedit 5F68FEEE) (tstamp 606F3085) (at 119.38 34.925) (descr "Resistor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") (tags resistor) (path /606FA86C/60718758) (attr smd) (fp_text reference R205 (at -3.175 0.254) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (fp_text value 2k (at 0 1.65) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -1 0.625) (end -1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start -1 -0.625) (end 1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 -0.625) (end 1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 0.625) (end -1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start -0.227064 -0.735) (end 0.227064 -0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -0.227064 0.735) (end 0.227064 0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -1.68 0.95) (end -1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.68 -0.95) (end 1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.68 -0.95) (end 1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.68 0.95) (end -1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.5 0.5) (thickness 0.08))) ) (pad 2 smd roundrect (at 0.9125 0) (size 1.025 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.243902) (net 39 "Net-(D202-Pad1)")) (pad 1 smd roundrect (at -0.9125 0) (size 1.025 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.243902) (net 48 /LED_GND)) (model ${KISYS3DMOD}/Resistor_SMD.3dshapes/R_0805_2012Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Resistor_SMD:R_0805_2012Metric (layer F.Cu) (tedit 5F68FEEE) (tstamp 606F3133) (at 107.315 34.29 180) (descr "Resistor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") (tags resistor) (path /606FA86C/607187C9) (attr smd) (fp_text reference R204 (at 0 1.905) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (fp_text value 15k (at 0 1.65) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -1 0.625) (end -1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start -1 -0.625) (end 1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 -0.625) (end 1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 0.625) (end -1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start -0.227064 -0.735) (end 0.227064 -0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -0.227064 0.735) (end 0.227064 0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -1.68 0.95) (end -1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.68 -0.95) (end 1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.68 -0.95) (end 1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.68 0.95) (end -1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.5 0.5) (thickness 0.08))) ) (pad 2 smd roundrect (at 0.9125 0 180) (size 1.025 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.243902) (net 43 "Net-(R204-Pad2)")) (pad 1 smd roundrect (at -0.9125 0 180) (size 1.025 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.243902) (net 2 GND)) (model ${KISYS3DMOD}/Resistor_SMD.3dshapes/R_0805_2012Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Resistor_SMD:R_0805_2012Metric (layer F.Cu) (tedit 5F68FEEE) (tstamp 60741263) (at 111.76 36.83) (descr "Resistor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") (tags resistor) (path /606FA86C/6071879D) (attr smd) (fp_text reference R203 (at 0 1.397) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (fp_text value 15k (at 0 1.65) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -1 0.625) (end -1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start -1 -0.625) (end 1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 -0.625) (end 1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 0.625) (end -1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start -0.227064 -0.735) (end 0.227064 -0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -0.227064 0.735) (end 0.227064 0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -1.68 0.95) (end -1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.68 -0.95) (end 1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.68 -0.95) (end 1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.68 0.95) (end -1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.5 0.5) (thickness 0.08))) ) (pad 2 smd roundrect (at 0.9125 0) (size 1.025 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.243902) (net 13 /OUT0_EN)) (pad 1 smd roundrect (at -0.9125 0) (size 1.025 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.243902) (net 42 "Net-(R203-Pad1)")) (model ${KISYS3DMOD}/Resistor_SMD.3dshapes/R_0805_2012Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Resistor_SMD:R_0805_2012Metric (layer F.Cu) (tedit 5F68FEEE) (tstamp 606F3CCD) (at 119.38 52.705) (descr "Resistor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") (tags resistor) (path /606FA86C/607187ED) (attr smd) (fp_text reference R202 (at -3.175 -0.635) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (fp_text value 2k (at 0 1.65) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -1 0.625) (end -1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start -1 -0.625) (end 1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 -0.625) (end 1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 0.625) (end -1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start -0.227064 -0.735) (end 0.227064 -0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -0.227064 0.735) (end 0.227064 0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -1.68 0.95) (end -1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.68 -0.95) (end 1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.68 -0.95) (end 1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.68 0.95) (end -1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.5 0.5) (thickness 0.08))) ) (pad 2 smd roundrect (at 0.9125 0) (size 1.025 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.243902) (net 38 "Net-(D201-Pad1)")) (pad 1 smd roundrect (at -0.9125 0) (size 1.025 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.243902) (net 48 /LED_GND)) (model ${KISYS3DMOD}/Resistor_SMD.3dshapes/R_0805_2012Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Resistor_SMD:R_0612_1632Metric (layer F.Cu) (tedit 5F68FEEE) (tstamp 606F3AC6) (at 101.6 46.355 180) (descr "Resistor SMD 0612 (1632 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: https://www.vishay.com/docs/20019/rcwe.pdf), generated with kicad-footprint-generator") (tags resistor) (path /606FA86C/6071877C) (attr smd) (fp_text reference R201 (at 0 -2.65) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (fp_text value "0.01R 1% 1W" (at 0 2.65) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -0.8 1.6) (end -0.8 -1.6) (layer F.Fab) (width 0.1)) (fp_line (start -0.8 -1.6) (end 0.8 -1.6) (layer F.Fab) (width 0.1)) (fp_line (start 0.8 -1.6) (end 0.8 1.6) (layer F.Fab) (width 0.1)) (fp_line (start 0.8 1.6) (end -0.8 1.6) (layer F.Fab) (width 0.1)) (fp_line (start -0.182983 -1.71) (end 0.182983 -1.71) (layer F.SilkS) (width 0.12)) (fp_line (start -0.182983 1.71) (end 0.182983 1.71) (layer F.SilkS) (width 0.12)) (fp_line (start -1.5 1.95) (end -1.5 -1.95) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.5 -1.95) (end 1.5 -1.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.5 -1.95) (end 1.5 1.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.5 1.95) (end -1.5 1.95) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.4 0.4) (thickness 0.06))) ) (pad 2 smd roundrect (at 0.75 0 180) (size 1 3.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 46 /PowerChannel0/POWER_MONITORED)) (pad 1 smd roundrect (at -0.75 0 180) (size 1 3.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 37 "Net-(D201-Pad2)")) (model ${KISYS3DMOD}/Resistor_SMD.3dshapes/R_0612_1632Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module BK-6013:BK-6013 (layer F.Cu) (tedit 605D2E8E) (tstamp 606F3D41) (at 109.22 55.245) (path /606FA86C/60718784) (fp_text reference F201 (at 0 -3.81) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (fp_text value "Fuse Holder BK-6013" (at 0 -0.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -7.35 -2.375) (end 7.35 -2.375) (layer F.SilkS) (width 0.15)) (fp_line (start -7.35 2.375) (end 7.35 2.375) (layer F.SilkS) (width 0.15)) (fp_line (start 7.35 -2.375) (end 7.35 2.375) (layer F.SilkS) (width 0.15)) (fp_line (start -7.35 -2.375) (end -7.35 2.375) (layer F.SilkS) (width 0.15)) (fp_line (start -7.747 -2.794) (end 7.747 -2.794) (layer F.CrtYd) (width 0.12)) (fp_line (start 7.747 -2.794) (end 7.747 2.794) (layer F.CrtYd) (width 0.12)) (fp_line (start 7.747 2.794) (end -7.747 2.794) (layer F.CrtYd) (width 0.12)) (fp_line (start -7.747 2.794) (end -7.747 -2.794) (layer F.CrtYd) (width 0.12)) (pad 2 thru_hole circle (at 5.895 0) (size 2.7 2.7) (drill 1.65) (layers *.Cu *.Mask) (net 29 /PowerChannel0/POWER_IN)) (pad 2 thru_hole circle (at 2.235 0) (size 2.7 2.7) (drill 1.65) (layers *.Cu *.Mask) (net 29 /PowerChannel0/POWER_IN)) (pad 1 thru_hole rect (at -5.895 0) (size 2.7 2.7) (drill 1.65) (layers *.Cu *.Mask) (net 37 "Net-(D201-Pad2)")) (pad 1 thru_hole rect (at -2.235 0) (size 2.7 2.7) (drill 1.65) (layers *.Cu *.Mask) (net 37 "Net-(D201-Pad2)")) (model ../lib/BK-6013.models/Memory_Protection_Devices_-_BK-6013.step (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Capacitor_SMD:C_0805_2012Metric (layer F.Cu) (tedit 5F68FEEE) (tstamp 606F3991) (at 102.235 34.29 180) (descr "Capacitor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf, https://docs.google.com/spreadsheets/d/1BsfQQcO9C6DZCsRaXUlFlo91Tg2WpOkGARC1WS5S8t0/edit?usp=sharing), generated with kicad-footprint-generator") (tags capacitor) (path /606FA86C/6071875F) (attr smd) (fp_text reference C202 (at 0 1.905) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (fp_text value 0.1uF (at 0 1.68) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -1 0.625) (end -1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start -1 -0.625) (end 1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 -0.625) (end 1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 0.625) (end -1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start -0.261252 -0.735) (end 0.261252 -0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -0.261252 0.735) (end 0.261252 0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -1.7 0.98) (end -1.7 -0.98) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.7 -0.98) (end 1.7 -0.98) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.7 -0.98) (end 1.7 0.98) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.7 0.98) (end -1.7 0.98) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.5 0.5) (thickness 0.08))) ) (pad 2 smd roundrect (at 0.95 0 180) (size 1 1.45) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 46 /PowerChannel0/POWER_MONITORED)) (pad 1 smd roundrect (at -0.95 0 180) (size 1 1.45) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 2 GND)) (model ${KISYS3DMOD}/Capacitor_SMD.3dshapes/C_0805_2012Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Capacitor_SMD:C_0805_2012Metric (layer F.Cu) (tedit 5F68FEEE) (tstamp 606F3838) (at 99.06 55.245 270) (descr "Capacitor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf, https://docs.google.com/spreadsheets/d/1BsfQQcO9C6DZCsRaXUlFlo91Tg2WpOkGARC1WS5S8t0/edit?usp=sharing), generated with kicad-footprint-generator") (tags capacitor) (path /606FA86C/60718742) (attr smd) (fp_text reference C201 (at 0 -1.68 90) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (fp_text value 0.1uF (at 0 1.68 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -1 0.625) (end -1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start -1 -0.625) (end 1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 -0.625) (end 1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 0.625) (end -1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start -0.261252 -0.735) (end 0.261252 -0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -0.261252 0.735) (end 0.261252 0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -1.7 0.98) (end -1.7 -0.98) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.7 -0.98) (end 1.7 -0.98) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.7 -0.98) (end 1.7 0.98) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.7 0.98) (end -1.7 0.98) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 0 90) (layer F.Fab) (effects (font (size 0.5 0.5) (thickness 0.08))) ) (pad 2 smd roundrect (at 0.95 0 270) (size 1 1.45) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 11 +3V3)) (pad 1 smd roundrect (at -0.95 0 270) (size 1 1.45) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 2 GND)) (model ${KISYS3DMOD}/Capacitor_SMD.3dshapes/C_0805_2012Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Capacitor_SMD:CP_Elec_6.3x5.4 (layer F.Cu) (tedit 5BCA39D0) (tstamp 606F387F) (at 53.975 151.765) (descr "SMD capacitor, aluminum electrolytic, Panasonic C55, 6.3x5.4mm") (tags "capacitor electrolytic") (path /60A13D5C) (attr smd) (fp_text reference C104 (at 0 4.445) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value 47uF (at 0 4.35) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_circle (center 0 0) (end 3.15 0) (layer F.Fab) (width 0.1)) (fp_line (start 3.3 -3.3) (end 3.3 3.3) (layer F.Fab) (width 0.1)) (fp_line (start -2.3 -3.3) (end 3.3 -3.3) (layer F.Fab) (width 0.1)) (fp_line (start -2.3 3.3) (end 3.3 3.3) (layer F.Fab) (width 0.1)) (fp_line (start -3.3 -2.3) (end -3.3 2.3) (layer F.Fab) (width 0.1)) (fp_line (start -3.3 -2.3) (end -2.3 -3.3) (layer F.Fab) (width 0.1)) (fp_line (start -3.3 2.3) (end -2.3 3.3) (layer F.Fab) (width 0.1)) (fp_line (start -2.704838 -1.33) (end -2.074838 -1.33) (layer F.Fab) (width 0.1)) (fp_line (start -2.389838 -1.645) (end -2.389838 -1.015) (layer F.Fab) (width 0.1)) (fp_line (start 3.41 3.41) (end 3.41 1.06) (layer F.SilkS) (width 0.12)) (fp_line (start 3.41 -3.41) (end 3.41 -1.06) (layer F.SilkS) (width 0.12)) (fp_line (start -2.345563 -3.41) (end 3.41 -3.41) (layer F.SilkS) (width 0.12)) (fp_line (start -2.345563 3.41) (end 3.41 3.41) (layer F.SilkS) (width 0.12)) (fp_line (start -3.41 2.345563) (end -3.41 1.06) (layer F.SilkS) (width 0.12)) (fp_line (start -3.41 -2.345563) (end -3.41 -1.06) (layer F.SilkS) (width 0.12)) (fp_line (start -3.41 -2.345563) (end -2.345563 -3.41) (layer F.SilkS) (width 0.12)) (fp_line (start -3.41 2.345563) (end -2.345563 3.41) (layer F.SilkS) (width 0.12)) (fp_line (start -4.4375 -1.8475) (end -3.65 -1.8475) (layer F.SilkS) (width 0.12)) (fp_line (start -4.04375 -2.24125) (end -4.04375 -1.45375) (layer F.SilkS) (width 0.12)) (fp_line (start 3.55 -3.55) (end 3.55 -1.05) (layer F.CrtYd) (width 0.05)) (fp_line (start 3.55 -1.05) (end 4.8 -1.05) (layer F.CrtYd) (width 0.05)) (fp_line (start 4.8 -1.05) (end 4.8 1.05) (layer F.CrtYd) (width 0.05)) (fp_line (start 4.8 1.05) (end 3.55 1.05) (layer F.CrtYd) (width 0.05)) (fp_line (start 3.55 1.05) (end 3.55 3.55) (layer F.CrtYd) (width 0.05)) (fp_line (start -2.4 3.55) (end 3.55 3.55) (layer F.CrtYd) (width 0.05)) (fp_line (start -2.4 -3.55) (end 3.55 -3.55) (layer F.CrtYd) (width 0.05)) (fp_line (start -3.55 2.4) (end -2.4 3.55) (layer F.CrtYd) (width 0.05)) (fp_line (start -3.55 -2.4) (end -2.4 -3.55) (layer F.CrtYd) (width 0.05)) (fp_line (start -3.55 -2.4) (end -3.55 -1.05) (layer F.CrtYd) (width 0.05)) (fp_line (start -3.55 1.05) (end -3.55 2.4) (layer F.CrtYd) (width 0.05)) (fp_line (start -3.55 -1.05) (end -4.8 -1.05) (layer F.CrtYd) (width 0.05)) (fp_line (start -4.8 -1.05) (end -4.8 1.05) (layer F.CrtYd) (width 0.05)) (fp_line (start -4.8 1.05) (end -3.55 1.05) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 2 smd roundrect (at 2.8 0) (size 3.5 1.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.15625) (net 2 GND)) (pad 1 smd roundrect (at -2.8 0) (size 3.5 1.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.15625) (net 12 /3V3_EXT)) (model ${KISYS3DMOD}/Capacitor_SMD.3dshapes/CP_Elec_6.3x5.4.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Capacitor_SMD:CP_Elec_6.3x5.4 (layer F.Cu) (tedit 5BCA39D0) (tstamp 606F372F) (at 53.975 131.445) (descr "SMD capacitor, aluminum electrolytic, Panasonic C55, 6.3x5.4mm") (tags "capacitor electrolytic") (path /60A0F855) (attr smd) (fp_text reference C101 (at 0 -4.35) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value 47uF (at 0 4.35) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_circle (center 0 0) (end 3.15 0) (layer F.Fab) (width 0.1)) (fp_line (start 3.3 -3.3) (end 3.3 3.3) (layer F.Fab) (width 0.1)) (fp_line (start -2.3 -3.3) (end 3.3 -3.3) (layer F.Fab) (width 0.1)) (fp_line (start -2.3 3.3) (end 3.3 3.3) (layer F.Fab) (width 0.1)) (fp_line (start -3.3 -2.3) (end -3.3 2.3) (layer F.Fab) (width 0.1)) (fp_line (start -3.3 -2.3) (end -2.3 -3.3) (layer F.Fab) (width 0.1)) (fp_line (start -3.3 2.3) (end -2.3 3.3) (layer F.Fab) (width 0.1)) (fp_line (start -2.704838 -1.33) (end -2.074838 -1.33) (layer F.Fab) (width 0.1)) (fp_line (start -2.389838 -1.645) (end -2.389838 -1.015) (layer F.Fab) (width 0.1)) (fp_line (start 3.41 3.41) (end 3.41 1.06) (layer F.SilkS) (width 0.12)) (fp_line (start 3.41 -3.41) (end 3.41 -1.06) (layer F.SilkS) (width 0.12)) (fp_line (start -2.345563 -3.41) (end 3.41 -3.41) (layer F.SilkS) (width 0.12)) (fp_line (start -2.345563 3.41) (end 3.41 3.41) (layer F.SilkS) (width 0.12)) (fp_line (start -3.41 2.345563) (end -3.41 1.06) (layer F.SilkS) (width 0.12)) (fp_line (start -3.41 -2.345563) (end -3.41 -1.06) (layer F.SilkS) (width 0.12)) (fp_line (start -3.41 -2.345563) (end -2.345563 -3.41) (layer F.SilkS) (width 0.12)) (fp_line (start -3.41 2.345563) (end -2.345563 3.41) (layer F.SilkS) (width 0.12)) (fp_line (start -4.4375 -1.8475) (end -3.65 -1.8475) (layer F.SilkS) (width 0.12)) (fp_line (start -4.04375 -2.24125) (end -4.04375 -1.45375) (layer F.SilkS) (width 0.12)) (fp_line (start 3.55 -3.55) (end 3.55 -1.05) (layer F.CrtYd) (width 0.05)) (fp_line (start 3.55 -1.05) (end 4.8 -1.05) (layer F.CrtYd) (width 0.05)) (fp_line (start 4.8 -1.05) (end 4.8 1.05) (layer F.CrtYd) (width 0.05)) (fp_line (start 4.8 1.05) (end 3.55 1.05) (layer F.CrtYd) (width 0.05)) (fp_line (start 3.55 1.05) (end 3.55 3.55) (layer F.CrtYd) (width 0.05)) (fp_line (start -2.4 3.55) (end 3.55 3.55) (layer F.CrtYd) (width 0.05)) (fp_line (start -2.4 -3.55) (end 3.55 -3.55) (layer F.CrtYd) (width 0.05)) (fp_line (start -3.55 2.4) (end -2.4 3.55) (layer F.CrtYd) (width 0.05)) (fp_line (start -3.55 -2.4) (end -2.4 -3.55) (layer F.CrtYd) (width 0.05)) (fp_line (start -3.55 -2.4) (end -3.55 -1.05) (layer F.CrtYd) (width 0.05)) (fp_line (start -3.55 1.05) (end -3.55 2.4) (layer F.CrtYd) (width 0.05)) (fp_line (start -3.55 -1.05) (end -4.8 -1.05) (layer F.CrtYd) (width 0.05)) (fp_line (start -4.8 -1.05) (end -4.8 1.05) (layer F.CrtYd) (width 0.05)) (fp_line (start -4.8 1.05) (end -3.55 1.05) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 2 smd roundrect (at 2.8 0) (size 3.5 1.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.15625) (net 2 GND)) (pad 1 smd roundrect (at -2.8 0) (size 3.5 1.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.15625) (net 1 +5V)) (model ${KISYS3DMOD}/Capacitor_SMD.3dshapes/CP_Elec_6.3x5.4.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Button_Switch_SMD:SW_DIP_SPSTx04_Slide_Omron_A6S-410x_W8.9mm_P2.54mm (layer F.Cu) (tedit 5AC88315) (tstamp 606F3C05) (at 39.37 80.645) (descr "SMD 4x-dip-switch SPST Omron_A6S-410x, Slide, row spacing 8.9 mm (350 mils), body size (see http://omronfs.omron.com/en_US/ecb/products/pdf/en-a6s.pdf)") (tags "SMD DIP Switch SPST Slide 8.9mm 350mil") (path /60FDD1A2) (attr smd) (fp_text reference SW101 (at 0 -6.61) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value SW_DIP_x04 (at 0 6.61) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 5.45 -5.9) (end -5.45 -5.9) (layer F.CrtYd) (width 0.05)) (fp_line (start 5.45 5.9) (end 5.45 -5.9) (layer F.CrtYd) (width 0.05)) (fp_line (start -5.45 5.9) (end 5.45 5.9) (layer F.CrtYd) (width 0.05)) (fp_line (start -5.45 -5.9) (end -5.45 5.9) (layer F.CrtYd) (width 0.05)) (fp_line (start 3.16 3.87) (end 3.16 5.61) (layer F.SilkS) (width 0.12)) (fp_line (start -3.16 3.87) (end -3.16 5.61) (layer F.SilkS) (width 0.12)) (fp_line (start 3.16 -5.61) (end 3.16 -3.871) (layer F.SilkS) (width 0.12)) (fp_line (start -3.16 -5.61) (end 3.16 -5.61) (layer F.SilkS) (width 0.12)) (fp_line (start -3.16 -5.61) (end -3.16 -4.661) (layer F.SilkS) (width 0.12)) (fp_line (start -5.2 -4.661) (end -3.16 -4.661) (layer F.SilkS) (width 0.12)) (fp_line (start -3.16 5.61) (end 3.16 5.61) (layer F.SilkS) (width 0.12)) (fp_line (start -0.5 3.26) (end -0.5 4.36) (layer F.Fab) (width 0.1)) (fp_line (start -1.5 4.36) (end -0.5 4.36) (layer F.Fab) (width 0.1)) (fp_line (start -1.5 4.26) (end -0.5 4.26) (layer F.Fab) (width 0.1)) (fp_line (start -1.5 4.16) (end -0.5 4.16) (layer F.Fab) (width 0.1)) (fp_line (start -1.5 4.06) (end -0.5 4.06) (layer F.Fab) (width 0.1)) (fp_line (start -1.5 3.96) (end -0.5 3.96) (layer F.Fab) (width 0.1)) (fp_line (start -1.5 3.86) (end -0.5 3.86) (layer F.Fab) (width 0.1)) (fp_line (start -1.5 3.76) (end -0.5 3.76) (layer F.Fab) (width 0.1)) (fp_line (start -1.5 3.66) (end -0.5 3.66) (layer F.Fab) (width 0.1)) (fp_line (start -1.5 3.56) (end -0.5 3.56) (layer F.Fab) (width 0.1)) (fp_line (start -1.5 3.46) (end -0.5 3.46) (layer F.Fab) (width 0.1)) (fp_line (start -1.5 3.36) (end -0.5 3.36) (layer F.Fab) (width 0.1)) (fp_line (start 1.5 3.26) (end -1.5 3.26) (layer F.Fab) (width 0.1)) (fp_line (start 1.5 4.36) (end 1.5 3.26) (layer F.Fab) (width 0.1)) (fp_line (start -1.5 4.36) (end 1.5 4.36) (layer F.Fab) (width 0.1)) (fp_line (start -1.5 3.26) (end -1.5 4.36) (layer F.Fab) (width 0.1)) (fp_line (start -0.5 0.72) (end -0.5 1.82) (layer F.Fab) (width 0.1)) (fp_line (start -1.5 1.82) (end -0.5 1.82) (layer F.Fab) (width 0.1)) (fp_line (start -1.5 1.72) (end -0.5 1.72) (layer F.Fab) (width 0.1)) (fp_line (start -1.5 1.62) (end -0.5 1.62) (layer F.Fab) (width 0.1)) (fp_line (start -1.5 1.52) (end -0.5 1.52) (layer F.Fab) (width 0.1)) (fp_line (start -1.5 1.42) (end -0.5 1.42) (layer F.Fab) (width 0.1)) (fp_line (start -1.5 1.32) (end -0.5 1.32) (layer F.Fab) (width 0.1)) (fp_line (start -1.5 1.22) (end -0.5 1.22) (layer F.Fab) (width 0.1)) (fp_line (start -1.5 1.12) (end -0.5 1.12) (layer F.Fab) (width 0.1)) (fp_line (start -1.5 1.02) (end -0.5 1.02) (layer F.Fab) (width 0.1)) (fp_line (start -1.5 0.92) (end -0.5 0.92) (layer F.Fab) (width 0.1)) (fp_line (start -1.5 0.82) (end -0.5 0.82) (layer F.Fab) (width 0.1)) (fp_line (start 1.5 0.72) (end -1.5 0.72) (layer F.Fab) (width 0.1)) (fp_line (start 1.5 1.82) (end 1.5 0.72) (layer F.Fab) (width 0.1)) (fp_line (start -1.5 1.82) (end 1.5 1.82) (layer F.Fab) (width 0.1)) (fp_line (start -1.5 0.72) (end -1.5 1.82) (layer F.Fab) (width 0.1)) (fp_line (start -0.5 -1.82) (end -0.5 -0.72) (layer F.Fab) (width 0.1)) (fp_line (start -1.5 -0.82) (end -0.5 -0.82) (layer F.Fab) (width 0.1)) (fp_line (start -1.5 -0.92) (end -0.5 -0.92) (layer F.Fab) (width 0.1)) (fp_line (start -1.5 -1.02) (end -0.5 -1.02) (layer F.Fab) (width 0.1)) (fp_line (start -1.5 -1.12) (end -0.5 -1.12) (layer F.Fab) (width 0.1)) (fp_line (start -1.5 -1.22) (end -0.5 -1.22) (layer F.Fab) (width 0.1)) (fp_line (start -1.5 -1.32) (end -0.5 -1.32) (layer F.Fab) (width 0.1)) (fp_line (start -1.5 -1.42) (end -0.5 -1.42) (layer F.Fab) (width 0.1)) (fp_line (start -1.5 -1.52) (end -0.5 -1.52) (layer F.Fab) (width 0.1)) (fp_line (start -1.5 -1.62) (end -0.5 -1.62) (layer F.Fab) (width 0.1)) (fp_line (start -1.5 -1.72) (end -0.5 -1.72) (layer F.Fab) (width 0.1)) (fp_line (start 1.5 -1.82) (end -1.5 -1.82) (layer F.Fab) (width 0.1)) (fp_line (start 1.5 -0.72) (end 1.5 -1.82) (layer F.Fab) (width 0.1)) (fp_line (start -1.5 -0.72) (end 1.5 -0.72) (layer F.Fab) (width 0.1)) (fp_line (start -1.5 -1.82) (end -1.5 -0.72) (layer F.Fab) (width 0.1)) (fp_line (start -0.5 -4.36) (end -0.5 -3.26) (layer F.Fab) (width 0.1)) (fp_line (start -1.5 -3.26) (end -0.5 -3.26) (layer F.Fab) (width 0.1)) (fp_line (start -1.5 -3.36) (end -0.5 -3.36) (layer F.Fab) (width 0.1)) (fp_line (start -1.5 -3.46) (end -0.5 -3.46) (layer F.Fab) (width 0.1)) (fp_line (start -1.5 -3.56) (end -0.5 -3.56) (layer F.Fab) (width 0.1)) (fp_line (start -1.5 -3.66) (end -0.5 -3.66) (layer F.Fab) (width 0.1)) (fp_line (start -1.5 -3.76) (end -0.5 -3.76) (layer F.Fab) (width 0.1)) (fp_line (start -1.5 -3.86) (end -0.5 -3.86) (layer F.Fab) (width 0.1)) (fp_line (start -1.5 -3.96) (end -0.5 -3.96) (layer F.Fab) (width 0.1)) (fp_line (start -1.5 -4.06) (end -0.5 -4.06) (layer F.Fab) (width 0.1)) (fp_line (start -1.5 -4.16) (end -0.5 -4.16) (layer F.Fab) (width 0.1)) (fp_line (start -1.5 -4.26) (end -0.5 -4.26) (layer F.Fab) (width 0.1)) (fp_line (start 1.5 -4.36) (end -1.5 -4.36) (layer F.Fab) (width 0.1)) (fp_line (start 1.5 -3.26) (end 1.5 -4.36) (layer F.Fab) (width 0.1)) (fp_line (start -1.5 -3.26) (end 1.5 -3.26) (layer F.Fab) (width 0.1)) (fp_line (start -1.5 -4.36) (end -1.5 -3.26) (layer F.Fab) (width 0.1)) (fp_line (start -3.1 -4.55) (end -2.1 -5.55) (layer F.Fab) (width 0.1)) (fp_line (start -3.1 5.55) (end -3.1 -4.55) (layer F.Fab) (width 0.1)) (fp_line (start 3.1 5.55) (end -3.1 5.55) (layer F.Fab) (width 0.1)) (fp_line (start 3.1 -5.55) (end 3.1 5.55) (layer F.Fab) (width 0.1)) (fp_line (start -2.1 -5.55) (end 3.1 -5.55) (layer F.Fab) (width 0.1)) (fp_text user on (at 0.075 -4.955) (layer F.Fab) (effects (font (size 0.8 0.8) (thickness 0.12))) ) (fp_text user %R (at 2.3 0 90) (layer F.Fab) (effects (font (size 0.8 0.8) (thickness 0.12))) ) (pad 8 smd rect (at 4.45 -3.81) (size 1.5 1.1) (layers F.Cu F.Paste F.Mask) (net 21 /ADDR_3)) (pad 4 smd rect (at -4.45 3.81) (size 1.5 1.1) (layers F.Cu F.Paste F.Mask) (net 2 GND)) (pad 7 smd rect (at 4.45 -1.27) (size 1.5 1.1) (layers F.Cu F.Paste F.Mask) (net 22 /ADDR_2)) (pad 3 smd rect (at -4.45 1.27) (size 1.5 1.1) (layers F.Cu F.Paste F.Mask) (net 2 GND)) (pad 6 smd rect (at 4.45 1.27) (size 1.5 1.1) (layers F.Cu F.Paste F.Mask) (net 23 /ADDR_1)) (pad 2 smd rect (at -4.45 -1.27) (size 1.5 1.1) (layers F.Cu F.Paste F.Mask) (net 2 GND)) (pad 5 smd rect (at 4.45 3.81) (size 1.5 1.1) (layers F.Cu F.Paste F.Mask) (net 24 /ADDR_0)) (pad 1 smd rect (at -4.45 -3.81) (size 1.5 1.1) (layers F.Cu F.Paste F.Mask) (net 2 GND)) (model ${KISYS3DMOD}/Button_Switch_SMD.3dshapes/SW_DIP_SPSTx04_Slide_Omron_A6S-410x_W8.9mm_P2.54mm.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Package_SO:SSOP-28_5.3x10.2mm_P0.65mm (layer F.Cu) (tedit 5A02F25C) (tstamp 606F2C49) (at 53.975 80.01) (descr "28-Lead Plastic Shrink Small Outline (SS)-5.30 mm Body [SSOP] (see Microchip Packaging Specification 00000049BS.pdf)") (tags "SSOP 0.65") (path /60A0AFF5) (attr smd) (fp_text reference U105 (at 0 -6.25) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value MCP23017_SS (at 0 6.25) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -1.65 -5.1) (end 2.65 -5.1) (layer F.Fab) (width 0.15)) (fp_line (start 2.65 -5.1) (end 2.65 5.1) (layer F.Fab) (width 0.15)) (fp_line (start 2.65 5.1) (end -2.65 5.1) (layer F.Fab) (width 0.15)) (fp_line (start -2.65 5.1) (end -2.65 -4.1) (layer F.Fab) (width 0.15)) (fp_line (start -2.65 -4.1) (end -1.65 -5.1) (layer F.Fab) (width 0.15)) (fp_line (start -4.75 -5.5) (end -4.75 5.5) (layer F.CrtYd) (width 0.05)) (fp_line (start 4.75 -5.5) (end 4.75 5.5) (layer F.CrtYd) (width 0.05)) (fp_line (start -4.75 -5.5) (end 4.75 -5.5) (layer F.CrtYd) (width 0.05)) (fp_line (start -4.75 5.5) (end 4.75 5.5) (layer F.CrtYd) (width 0.05)) (fp_line (start -2.875 -5.325) (end -2.875 -4.75) (layer F.SilkS) (width 0.15)) (fp_line (start 2.875 -5.325) (end 2.875 -4.675) (layer F.SilkS) (width 0.15)) (fp_line (start 2.875 5.325) (end 2.875 4.675) (layer F.SilkS) (width 0.15)) (fp_line (start -2.875 5.325) (end -2.875 4.675) (layer F.SilkS) (width 0.15)) (fp_line (start -2.875 -5.325) (end 2.875 -5.325) (layer F.SilkS) (width 0.15)) (fp_line (start -2.875 5.325) (end 2.875 5.325) (layer F.SilkS) (width 0.15)) (fp_line (start -2.875 -4.75) (end -4.475 -4.75) (layer F.SilkS) (width 0.15)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (pad 28 smd rect (at 3.6 -4.225) (size 1.75 0.45) (layers F.Cu F.Paste F.Mask) (net 96 /MISC0)) (pad 27 smd rect (at 3.6 -3.575) (size 1.75 0.45) (layers F.Cu F.Paste F.Mask) (net 95 /MISC1)) (pad 26 smd rect (at 3.6 -2.925) (size 1.75 0.45) (layers F.Cu F.Paste F.Mask) (net 13 /OUT0_EN)) (pad 25 smd rect (at 3.6 -2.275) (size 1.75 0.45) (layers F.Cu F.Paste F.Mask) (net 14 /OUT1_EN)) (pad 24 smd rect (at 3.6 -1.625) (size 1.75 0.45) (layers F.Cu F.Paste F.Mask) (net 15 /OUT2_EN)) (pad 23 smd rect (at 3.6 -0.975) (size 1.75 0.45) (layers F.Cu F.Paste F.Mask) (net 16 /OUT3_EN)) (pad 22 smd rect (at 3.6 -0.325) (size 1.75 0.45) (layers F.Cu F.Paste F.Mask) (net 17 /OUT4_EN)) (pad 21 smd rect (at 3.6 0.325) (size 1.75 0.45) (layers F.Cu F.Paste F.Mask)) (pad 20 smd rect (at 3.6 0.975) (size 1.75 0.45) (layers F.Cu F.Paste F.Mask) (net 26 /MCP_INT)) (pad 19 smd rect (at 3.6 1.625) (size 1.75 0.45) (layers F.Cu F.Paste F.Mask)) (pad 18 smd rect (at 3.6 2.275) (size 1.75 0.45) (layers F.Cu F.Paste F.Mask) (net 20 /MCP_RESET)) (pad 17 smd rect (at 3.6 2.925) (size 1.75 0.45) (layers F.Cu F.Paste F.Mask) (net 11 +3V3)) (pad 16 smd rect (at 3.6 3.575) (size 1.75 0.45) (layers F.Cu F.Paste F.Mask) (net 11 +3V3)) (pad 15 smd rect (at 3.6 4.225) (size 1.75 0.45) (layers F.Cu F.Paste F.Mask) (net 11 +3V3)) (pad 14 smd rect (at -3.6 4.225) (size 1.75 0.45) (layers F.Cu F.Paste F.Mask)) (pad 13 smd rect (at -3.6 3.575) (size 1.75 0.45) (layers F.Cu F.Paste F.Mask) (net 8 /SDA)) (pad 12 smd rect (at -3.6 2.925) (size 1.75 0.45) (layers F.Cu F.Paste F.Mask) (net 7 /SCL)) (pad 11 smd rect (at -3.6 2.275) (size 1.75 0.45) (layers F.Cu F.Paste F.Mask)) (pad 10 smd rect (at -3.6 1.625) (size 1.75 0.45) (layers F.Cu F.Paste F.Mask) (net 2 GND)) (pad 9 smd rect (at -3.6 0.975) (size 1.75 0.45) (layers F.Cu F.Paste F.Mask) (net 11 +3V3)) (pad 8 smd rect (at -3.6 0.325) (size 1.75 0.45) (layers F.Cu F.Paste F.Mask) (net 24 /ADDR_0)) (pad 7 smd rect (at -3.6 -0.325) (size 1.75 0.45) (layers F.Cu F.Paste F.Mask) (net 23 /ADDR_1)) (pad 6 smd rect (at -3.6 -0.975) (size 1.75 0.45) (layers F.Cu F.Paste F.Mask) (net 22 /ADDR_2)) (pad 5 smd rect (at -3.6 -1.625) (size 1.75 0.45) (layers F.Cu F.Paste F.Mask) (net 21 /ADDR_3)) (pad 4 smd rect (at -3.6 -2.275) (size 1.75 0.45) (layers F.Cu F.Paste F.Mask) (net 94 /MISC2)) (pad 3 smd rect (at -3.6 -2.925) (size 1.75 0.45) (layers F.Cu F.Paste F.Mask) (net 93 /MISC3)) (pad 2 smd rect (at -3.6 -3.575) (size 1.75 0.45) (layers F.Cu F.Paste F.Mask) (net 92 /MISC4)) (pad 1 smd rect (at -3.6 -4.225) (size 1.75 0.45) (layers F.Cu F.Paste F.Mask) (net 91 /MISC5)) (model ${KISYS3DMOD}/Package_SO.3dshapes/SSOP-28_5.3x10.2mm_P0.65mm.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Package_TO_SOT_SMD:SOT-23-5 (layer F.Cu) (tedit 5A02FF57) (tstamp 606DB3EC) (at 50.8 179.705 90) (descr "5-pin SOT23 package") (tags SOT-23-5) (path /617D4DB9) (attr smd) (fp_text reference U108 (at -2.54 0 180) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (fp_text value SN74LV1T34DBV (at 0 2.9 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -0.9 1.61) (end 0.9 1.61) (layer F.SilkS) (width 0.12)) (fp_line (start 0.9 -1.61) (end -1.55 -1.61) (layer F.SilkS) (width 0.12)) (fp_line (start -1.9 -1.8) (end 1.9 -1.8) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.9 -1.8) (end 1.9 1.8) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.9 1.8) (end -1.9 1.8) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.9 1.8) (end -1.9 -1.8) (layer F.CrtYd) (width 0.05)) (fp_line (start -0.9 -0.9) (end -0.25 -1.55) (layer F.Fab) (width 0.1)) (fp_line (start 0.9 -1.55) (end -0.25 -1.55) (layer F.Fab) (width 0.1)) (fp_line (start -0.9 -0.9) (end -0.9 1.55) (layer F.Fab) (width 0.1)) (fp_line (start 0.9 1.55) (end -0.9 1.55) (layer F.Fab) (width 0.1)) (fp_line (start 0.9 -1.55) (end 0.9 1.55) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.5 0.5) (thickness 0.075))) ) (pad 5 smd rect (at 1.1 -0.95 90) (size 1.06 0.65) (layers F.Cu F.Paste F.Mask) (net 1 +5V)) (pad 4 smd rect (at 1.1 0.95 90) (size 1.06 0.65) (layers F.Cu F.Paste F.Mask) (net 18 /RGB_LEDS)) (pad 3 smd rect (at -1.1 0.95 90) (size 1.06 0.65) (layers F.Cu F.Paste F.Mask) (net 2 GND)) (pad 2 smd rect (at -1.1 0 90) (size 1.06 0.65) (layers F.Cu F.Paste F.Mask) (net 27 /RGB_LEDS_3V3)) (pad 1 smd rect (at -1.1 -0.95 90) (size 1.06 0.65) (layers F.Cu F.Paste F.Mask)) (model ${KISYS3DMOD}/Package_TO_SOT_SMD.3dshapes/SOT-23-5.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Package_TO_SOT_SMD:SOT-23-5 (layer F.Cu) (tedit 5A02FF57) (tstamp 606EC1A7) (at 57.15 118.11) (descr "5-pin SOT23 package") (tags SOT-23-5) (path /61A44922) (attr smd) (fp_text reference U106 (at 0 2.54) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value SN74LV1T34DBV (at 0 2.9) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -0.9 1.61) (end 0.9 1.61) (layer F.SilkS) (width 0.12)) (fp_line (start 0.9 -1.61) (end -1.55 -1.61) (layer F.SilkS) (width 0.12)) (fp_line (start -1.9 -1.8) (end 1.9 -1.8) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.9 -1.8) (end 1.9 1.8) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.9 1.8) (end -1.9 1.8) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.9 1.8) (end -1.9 -1.8) (layer F.CrtYd) (width 0.05)) (fp_line (start -0.9 -0.9) (end -0.25 -1.55) (layer F.Fab) (width 0.1)) (fp_line (start 0.9 -1.55) (end -0.25 -1.55) (layer F.Fab) (width 0.1)) (fp_line (start -0.9 -0.9) (end -0.9 1.55) (layer F.Fab) (width 0.1)) (fp_line (start 0.9 1.55) (end -0.9 1.55) (layer F.Fab) (width 0.1)) (fp_line (start 0.9 -1.55) (end 0.9 1.55) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 0 -270) (layer F.Fab) (effects (font (size 0.5 0.5) (thickness 0.075))) ) (pad 5 smd rect (at 1.1 -0.95) (size 1.06 0.65) (layers F.Cu F.Paste F.Mask) (net 11 +3V3)) (pad 4 smd rect (at 1.1 0.95) (size 1.06 0.65) (layers F.Cu F.Paste F.Mask) (net 5 /RX)) (pad 3 smd rect (at -1.1 0.95) (size 1.06 0.65) (layers F.Cu F.Paste F.Mask) (net 2 GND)) (pad 2 smd rect (at -1.1 0) (size 1.06 0.65) (layers F.Cu F.Paste F.Mask) (net 45 "Net-(U106-Pad2)")) (pad 1 smd rect (at -1.1 -0.95) (size 1.06 0.65) (layers F.Cu F.Paste F.Mask)) (model ${KISYS3DMOD}/Package_TO_SOT_SMD.3dshapes/SOT-23-5.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module ModifiedSymbols:SOIC-16_3.9x9.9mm_P1.27mm_silk (layer F.Cu) (tedit 6018D7C5) (tstamp 606D3EDB) (at 57.15 64.77 180) (descr "SOIC, 16 Pin (JEDEC MS-012AC, https://www.analog.com/media/en/package-pcb-resources/package/pkg_pdf/soic_narrow-r/r_16.pdf), generated with kicad-footprint-generator ipc_gullwing_generator.py") (tags "SOIC SO") (path /60BF5C71) (attr smd) (fp_text reference U102 (at 0 -5.9) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value TPL7407L (at 0 5.9) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_circle (center -1.016 -4.572) (end -1.016 -4.318) (layer F.SilkS) (width 0.15)) (fp_line (start -0.975 -4.95) (end 1.95 -4.95) (layer F.Fab) (width 0.1)) (fp_line (start 1.95 -4.95) (end 1.95 4.95) (layer F.Fab) (width 0.1)) (fp_line (start 1.95 4.95) (end -1.95 4.95) (layer F.Fab) (width 0.1)) (fp_line (start -1.95 4.95) (end -1.95 -3.975) (layer F.Fab) (width 0.1)) (fp_line (start -1.95 -3.975) (end -0.975 -4.95) (layer F.Fab) (width 0.1)) (fp_line (start -3.7 -5.2) (end -3.7 5.2) (layer F.CrtYd) (width 0.05)) (fp_line (start -3.7 5.2) (end 3.7 5.2) (layer F.CrtYd) (width 0.05)) (fp_line (start 3.7 5.2) (end 3.7 -5.2) (layer F.CrtYd) (width 0.05)) (fp_line (start 3.7 -5.2) (end -3.7 -5.2) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.98 0.98) (thickness 0.15))) ) (pad 16 smd roundrect (at 2.475 -4.445 180) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 28 /RELAY_MASTER)) (pad 15 smd roundrect (at 2.475 -3.175 180) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 85 "Net-(J111-Pad6)")) (pad 14 smd roundrect (at 2.475 -1.905 180) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 86 "Net-(J111-Pad5)")) (pad 13 smd roundrect (at 2.475 -0.635 180) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 87 "Net-(J111-Pad4)")) (pad 12 smd roundrect (at 2.475 0.635 180) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 88 "Net-(J111-Pad3)")) (pad 11 smd roundrect (at 2.475 1.905 180) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 89 "Net-(J111-Pad2)")) (pad 10 smd roundrect (at 2.475 3.175 180) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 90 "Net-(J111-Pad1)")) (pad 9 smd roundrect (at 2.475 4.445 180) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 1 +5V)) (pad 8 smd roundrect (at -2.475 4.445 180) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 2 GND)) (pad 7 smd roundrect (at -2.475 3.175 180) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 91 /MISC5)) (pad 6 smd roundrect (at -2.475 1.905 180) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 92 /MISC4)) (pad 5 smd roundrect (at -2.475 0.635 180) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 93 /MISC3)) (pad 4 smd roundrect (at -2.475 -0.635 180) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 94 /MISC2)) (pad 3 smd roundrect (at -2.475 -1.905 180) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 95 /MISC1)) (pad 2 smd roundrect (at -2.475 -3.175 180) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 96 /MISC0)) (pad 1 smd roundrect (at -2.475 -4.445 180) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 25 /MASTER_EN)) (model ${KISYS3DMOD}/Package_SO.3dshapes/SOIC-16_3.9x9.9mm_P1.27mm.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Package_TO_SOT_SMD:SOT-223-3_TabPin2 (layer F.Cu) (tedit 5A02FF57) (tstamp 606F36DE) (at 53.975 141.605) (descr "module CMS SOT223 4 pins") (tags "CMS SOT") (path /608B110C) (attr smd) (fp_text reference U101 (at 4.445 -3.175) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value AP7361C-33E (at 0 4.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 1.85 -3.35) (end 1.85 3.35) (layer F.Fab) (width 0.1)) (fp_line (start -1.85 3.35) (end 1.85 3.35) (layer F.Fab) (width 0.1)) (fp_line (start -4.1 -3.41) (end 1.91 -3.41) (layer F.SilkS) (width 0.12)) (fp_line (start -0.85 -3.35) (end 1.85 -3.35) (layer F.Fab) (width 0.1)) (fp_line (start -1.85 3.41) (end 1.91 3.41) (layer F.SilkS) (width 0.12)) (fp_line (start -1.85 -2.35) (end -1.85 3.35) (layer F.Fab) (width 0.1)) (fp_line (start -1.85 -2.35) (end -0.85 -3.35) (layer F.Fab) (width 0.1)) (fp_line (start -4.4 -3.6) (end -4.4 3.6) (layer F.CrtYd) (width 0.05)) (fp_line (start -4.4 3.6) (end 4.4 3.6) (layer F.CrtYd) (width 0.05)) (fp_line (start 4.4 3.6) (end 4.4 -3.6) (layer F.CrtYd) (width 0.05)) (fp_line (start 4.4 -3.6) (end -4.4 -3.6) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.91 -3.41) (end 1.91 -2.15) (layer F.SilkS) (width 0.12)) (fp_line (start 1.91 3.41) (end 1.91 2.15) (layer F.SilkS) (width 0.12)) (fp_text user %R (at 0 0 90) (layer F.Fab) (effects (font (size 0.8 0.8) (thickness 0.12))) ) (pad 2 smd rect (at 3.15 0) (size 2 3.8) (layers F.Cu F.Paste F.Mask) (net 2 GND)) (pad 2 smd rect (at -3.15 0) (size 2 1.5) (layers F.Cu F.Paste F.Mask) (net 2 GND)) (pad 3 smd rect (at -3.15 2.3) (size 2 1.5) (layers F.Cu F.Paste F.Mask) (net 12 /3V3_EXT)) (pad 1 smd rect (at -3.15 -2.3) (size 2 1.5) (layers F.Cu F.Paste F.Mask) (net 1 +5V)) (model ${KISYS3DMOD}/Package_TO_SOT_SMD.3dshapes/SOT-223.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module LED_SMD:LED_WS2812B_PLCC4_5.0x5.0mm_P3.2mm (layer F.Cu) (tedit 5AA4B285) (tstamp 606F3AFF) (at 84.455 53.975) (descr https://cdn-shop.adafruit.com/datasheets/WS2812B.pdf) (tags "LED RGB NeoPixel") (path /6137E505) (attr smd) (fp_text reference D106 (at 0 3.175) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (fp_text value WS2812B (at 0 4) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 3.45 -2.75) (end -3.45 -2.75) (layer F.CrtYd) (width 0.05)) (fp_line (start 3.45 2.75) (end 3.45 -2.75) (layer F.CrtYd) (width 0.05)) (fp_line (start -3.45 2.75) (end 3.45 2.75) (layer F.CrtYd) (width 0.05)) (fp_line (start -3.45 -2.75) (end -3.45 2.75) (layer F.CrtYd) (width 0.05)) (fp_line (start 2.5 1.5) (end 1.5 2.5) (layer F.Fab) (width 0.1)) (fp_line (start -2.5 -2.5) (end -2.5 2.5) (layer F.Fab) (width 0.1)) (fp_line (start -2.5 2.5) (end 2.5 2.5) (layer F.Fab) (width 0.1)) (fp_line (start 2.5 2.5) (end 2.5 -2.5) (layer F.Fab) (width 0.1)) (fp_line (start 2.5 -2.5) (end -2.5 -2.5) (layer F.Fab) (width 0.1)) (fp_line (start -3.65 -2.75) (end 3.65 -2.75) (layer F.SilkS) (width 0.12)) (fp_line (start -3.65 2.75) (end 3.65 2.75) (layer F.SilkS) (width 0.12)) (fp_line (start 3.65 2.75) (end 3.65 1.6) (layer F.SilkS) (width 0.12)) (fp_circle (center 0 0) (end 0 -2) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (pad 1 smd rect (at -2.45 -1.6) (size 1.5 1) (layers F.Cu F.Paste F.Mask) (net 1 +5V)) (pad 2 smd rect (at -2.45 1.6) (size 1.5 1) (layers F.Cu F.Paste F.Mask)) (pad 4 smd rect (at 2.45 -1.6) (size 1.5 1) (layers F.Cu F.Paste F.Mask) (net 36 "Net-(D105-Pad2)")) (pad 3 smd rect (at 2.45 1.6) (size 1.5 1) (layers F.Cu F.Paste F.Mask) (net 2 GND)) (model ${KISYS3DMOD}/LED_SMD.3dshapes/LED_WS2812B_PLCC4_5.0x5.0mm_P3.2mm.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module LED_SMD:LED_WS2812B_PLCC4_5.0x5.0mm_P3.2mm (layer F.Cu) (tedit 5AA4B285) (tstamp 606F2BA2) (at 58.42 172.085 180) (descr https://cdn-shop.adafruit.com/datasheets/WS2812B.pdf) (tags "LED RGB NeoPixel") (path /62A2E5F2) (attr smd) (fp_text reference D101 (at 1.524 -3.429) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (fp_text value WS2812B (at 0 4) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 3.45 -2.75) (end -3.45 -2.75) (layer F.CrtYd) (width 0.05)) (fp_line (start 3.45 2.75) (end 3.45 -2.75) (layer F.CrtYd) (width 0.05)) (fp_line (start -3.45 2.75) (end 3.45 2.75) (layer F.CrtYd) (width 0.05)) (fp_line (start -3.45 -2.75) (end -3.45 2.75) (layer F.CrtYd) (width 0.05)) (fp_line (start 2.5 1.5) (end 1.5 2.5) (layer F.Fab) (width 0.1)) (fp_line (start -2.5 -2.5) (end -2.5 2.5) (layer F.Fab) (width 0.1)) (fp_line (start -2.5 2.5) (end 2.5 2.5) (layer F.Fab) (width 0.1)) (fp_line (start 2.5 2.5) (end 2.5 -2.5) (layer F.Fab) (width 0.1)) (fp_line (start 2.5 -2.5) (end -2.5 -2.5) (layer F.Fab) (width 0.1)) (fp_line (start -3.65 -2.75) (end 3.65 -2.75) (layer F.SilkS) (width 0.12)) (fp_line (start -3.65 2.75) (end 3.65 2.75) (layer F.SilkS) (width 0.12)) (fp_line (start 3.65 2.75) (end 3.65 1.6) (layer F.SilkS) (width 0.12)) (fp_circle (center 0 0) (end 0 -2) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (pad 1 smd rect (at -2.45 -1.6 180) (size 1.5 1) (layers F.Cu F.Paste F.Mask) (net 1 +5V)) (pad 2 smd rect (at -2.45 1.6 180) (size 1.5 1) (layers F.Cu F.Paste F.Mask) (net 32 "Net-(D101-Pad2)")) (pad 4 smd rect (at 2.45 -1.6 180) (size 1.5 1) (layers F.Cu F.Paste F.Mask) (net 18 /RGB_LEDS)) (pad 3 smd rect (at 2.45 1.6 180) (size 1.5 1) (layers F.Cu F.Paste F.Mask) (net 2 GND)) (model ${KISYS3DMOD}/LED_SMD.3dshapes/LED_WS2812B_PLCC4_5.0x5.0mm_P3.2mm.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Capacitor_SMD:C_0805_2012Metric (layer F.Cu) (tedit 5F68FEEE) (tstamp 606F39C1) (at 78.105 53.34 270) (descr "Capacitor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf, https://docs.google.com/spreadsheets/d/1BsfQQcO9C6DZCsRaXUlFlo91Tg2WpOkGARC1WS5S8t0/edit?usp=sharing), generated with kicad-footprint-generator") (tags capacitor) (path /6137E0BC) (attr smd) (fp_text reference C113 (at 2.54 0 180) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (fp_text value 0.1uF (at 0 1.68 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -1 0.625) (end -1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start -1 -0.625) (end 1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 -0.625) (end 1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 0.625) (end -1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start -0.261252 -0.735) (end 0.261252 -0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -0.261252 0.735) (end 0.261252 0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -1.7 0.98) (end -1.7 -0.98) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.7 -0.98) (end 1.7 -0.98) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.7 -0.98) (end 1.7 0.98) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.7 0.98) (end -1.7 0.98) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 0 90) (layer F.Fab) (effects (font (size 0.5 0.5) (thickness 0.08))) ) (pad 2 smd roundrect (at 0.95 0 270) (size 1 1.45) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 2 GND)) (pad 1 smd roundrect (at -0.95 0 270) (size 1 1.45) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 1 +5V)) (model ${KISYS3DMOD}/Capacitor_SMD.3dshapes/C_0805_2012Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Package_SO:SOIC-8_3.9x4.9mm_P1.27mm (layer F.Cu) (tedit 5D9F72B1) (tstamp 606F32EC) (at 50.8 116.205 180) (descr "SOIC, 8 Pin (JEDEC MS-012AA, https://www.analog.com/media/en/package-pcb-resources/package/pkg_pdf/soic_narrow-r/r_8.pdf), generated with kicad-footprint-generator ipc_gullwing_generator.py") (tags "SOIC SO") (path /602614C0) (attr smd) (fp_text reference U107 (at -2.54 -3.175) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value SP485 (at 0 3.4) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 0 2.56) (end 1.95 2.56) (layer F.SilkS) (width 0.12)) (fp_line (start 0 2.56) (end -1.95 2.56) (layer F.SilkS) (width 0.12)) (fp_line (start 0 -2.56) (end 1.95 -2.56) (layer F.SilkS) (width 0.12)) (fp_line (start 0 -2.56) (end -3.45 -2.56) (layer F.SilkS) (width 0.12)) (fp_line (start -0.975 -2.45) (end 1.95 -2.45) (layer F.Fab) (width 0.1)) (fp_line (start 1.95 -2.45) (end 1.95 2.45) (layer F.Fab) (width 0.1)) (fp_line (start 1.95 2.45) (end -1.95 2.45) (layer F.Fab) (width 0.1)) (fp_line (start -1.95 2.45) (end -1.95 -1.475) (layer F.Fab) (width 0.1)) (fp_line (start -1.95 -1.475) (end -0.975 -2.45) (layer F.Fab) (width 0.1)) (fp_line (start -3.7 -2.7) (end -3.7 2.7) (layer F.CrtYd) (width 0.05)) (fp_line (start -3.7 2.7) (end 3.7 2.7) (layer F.CrtYd) (width 0.05)) (fp_line (start 3.7 2.7) (end 3.7 -2.7) (layer F.CrtYd) (width 0.05)) (fp_line (start 3.7 -2.7) (end -3.7 -2.7) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.98 0.98) (thickness 0.15))) ) (pad 8 smd roundrect (at 2.475 -1.905 180) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 1 +5V)) (pad 7 smd roundrect (at 2.475 -0.635 180) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 40 "Net-(J104-Pad2)")) (pad 6 smd roundrect (at 2.475 0.635 180) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 41 "Net-(J104-Pad1)")) (pad 5 smd roundrect (at 2.475 1.905 180) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 2 GND)) (pad 4 smd roundrect (at -2.475 1.905 180) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 6 /TX)) (pad 3 smd roundrect (at -2.475 0.635 180) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 9 /RS485_DRIVE_EN)) (pad 2 smd roundrect (at -2.475 -0.635 180) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 9 /RS485_DRIVE_EN)) (pad 1 smd roundrect (at -2.475 -1.905 180) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 45 "Net-(U106-Pad2)")) (model ${KISYS3DMOD}/Package_SO.3dshapes/SOIC-8_3.9x4.9mm_P1.27mm.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (gr_text v1.1 (at 108.585 210.82) (layer F.SilkS) (tstamp 6180526A) (effects (font (size 1.2 1.2) (thickness 0.1)) (justify left)) ) (gr_text Data (at 31.115 167.005 -90) (layer F.SilkS) (tstamp 617FAAFD) (effects (font (size 1 1) (thickness 0.15))) ) (dimension 3.175 (width 0.15) (layer Cmts.User) (gr_text "3.175 mm" (at 22.83 26.9875 90) (layer Cmts.User) (effects (font (size 1 1) (thickness 0.15))) ) (feature1 (pts (xy 28.575 25.4) (xy 23.543579 25.4))) (feature2 (pts (xy 28.575 28.575) (xy 23.543579 28.575))) (crossbar (pts (xy 24.13 28.575) (xy 24.13 25.4))) (arrow1a (pts (xy 24.13 25.4) (xy 24.716421 26.526504))) (arrow1b (pts (xy 24.13 25.4) (xy 23.543579 26.526504))) (arrow2a (pts (xy 24.13 28.575) (xy 24.716421 27.448496))) (arrow2b (pts (xy 24.13 28.575) (xy 23.543579 27.448496))) ) (dimension 3.175 (width 0.15) (layer Cmts.User) (tstamp 60747292) (gr_text "3.175 mm" (at 26.9875 19.655) (layer Cmts.User) (tstamp 60747292) (effects (font (size 1 1) (thickness 0.15))) ) (feature1 (pts (xy 25.4 28.575) (xy 25.4 20.368579))) (feature2 (pts (xy 28.575 28.575) (xy 28.575 20.368579))) (crossbar (pts (xy 28.575 20.955) (xy 25.4 20.955))) (arrow1a (pts (xy 25.4 20.955) (xy 26.526504 20.368579))) (arrow1b (pts (xy 25.4 20.955) (xy 26.526504 21.541421))) (arrow2a (pts (xy 28.575 20.955) (xy 27.448496 20.368579))) (arrow2b (pts (xy 28.575 20.955) (xy 27.448496 21.541421))) ) (gr_text off (at 63.119 214.63) (layer F.SilkS) (tstamp 60746A14) (effects (font (size 0.8 0.8) (thickness 0.12))) ) (gr_text on (at 66.421 214.63) (layer F.SilkS) (tstamp 60746A11) (effects (font (size 0.8 0.8) (thickness 0.12))) ) (gr_line (start 64.389 213.741) (end 61.595 213.741) (layer F.SilkS) (width 0.12) (tstamp 60746A0E)) (gr_line (start 65.151 213.741) (end 67.945 213.741) (layer F.SilkS) (width 0.12) (tstamp 60746A0B)) (gr_text Next/Up (at 71.755 189.865) (layer F.SilkS) (tstamp 606DCA30) (effects (font (size 1.2 1.2) (thickness 0.15)) (justify left)) ) (gr_text Select (at 71.755 205.74) (layer F.SilkS) (tstamp 606DBF5F) (effects (font (size 1.2 1.2) (thickness 0.15)) (justify left)) ) (gr_text Reset (at 59.055 182.88) (layer F.SilkS) (tstamp 606DC9E5) (effects (font (size 1 1) (thickness 0.1) italic)) ) (gr_text Status (at 58.42 167.005) (layer F.SilkS) (tstamp 606DB56A) (effects (font (size 2.5 2.1) (thickness 0.35))) ) (gr_text 8 (at 31.75 76.835 -90) (layer F.SilkS) (tstamp 606D95C4) (effects (font (size 1 1) (thickness 0.15))) ) (gr_text 4 (at 31.75 79.375 -90) (layer F.SilkS) (tstamp 606D95C2) (effects (font (size 1 1) (thickness 0.15))) ) (gr_text 2 (at 31.75 81.915 -90) (layer F.SilkS) (tstamp 606D95C0) (effects (font (size 1 1) (thickness 0.15))) ) (gr_text 1 (at 31.75 84.455 -90) (layer F.SilkS) (tstamp 606D95BE) (effects (font (size 1 1) (thickness 0.15))) ) (gr_text "500mA Max" (at 31.75 65.532 270) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.12))) ) (gr_line (start 45.72 184.785) (end 45.72 25.4) (layer F.SilkS) (width 1) (tstamp 606F2A0A)) (gr_line (start 71.12 187.96) (end 71.12 25.4) (layer F.SilkS) (width 1) (tstamp 606F2B75)) (gr_text "DATE: YYYY-MM-DD\nCOMMIT: deadbeef" (at 115.57 198.755) (layer B.SilkS) (tstamp 606F351A) (effects (font (size 1.2 1.2) (thickness 0.12)) (justify left mirror)) ) (gr_text "Splitflap Chainlink Base" (at 70.485 210.82) (layer F.SilkS) (tstamp 606F2AA9) (effects (font (size 2 2) (thickness 0.25)) (justify left)) ) (gr_text https://github.com/scottbez1/splitflap (at 115.57 213.995) (layer F.SilkS) (tstamp 606F295F) (effects (font (size 1.5 1.5) (thickness 0.12)) (justify right)) ) (gr_text "7V to\n28V" (at 31.75 37.465 -90) (layer F.SilkS) (tstamp 606F1A0E) (effects (font (size 1 1) (thickness 0.15))) ) (gr_line (start 34.925 50.165) (end 30.48 50.165) (layer F.SilkS) (width 0.2) (tstamp 606F203E)) (gr_text 5V (at 31.75 47.625 -90) (layer F.SilkS) (tstamp 606F2B87) (effects (font (size 1 1) (thickness 0.15))) ) (gr_text GND (at 31.75 52.705 -90) (layer F.SilkS) (tstamp 606F198A) (effects (font (size 1 1) (thickness 0.15))) ) (gr_text GND (at 31.75 42.545 -90) (layer F.SilkS) (tstamp 606F2524) (effects (font (size 1 1) (thickness 0.15))) ) (gr_line (start 34.925 40.005) (end 30.48 40.005) (layer F.SilkS) (width 0.2) (tstamp 606F36C4)) (gr_line (start 34.925 45.085) (end 30.48 45.085) (layer F.SilkS) (width 0.7) (tstamp 606F2521)) (gr_text "Power In" (at 27.94 45.085 -90) (layer F.SilkS) (tstamp 606F2B6F) (effects (font (size 2.5 2.1) (thickness 0.35))) ) (gr_text Relay (at 27.94 65.405 -90) (layer F.SilkS) (tstamp 606F19DE) (effects (font (size 2.5 2.1) (thickness 0.35))) ) (gr_text Address (at 27.94 80.645 -90) (layer F.SilkS) (tstamp 606F31C9) (effects (font (size 2.5 2.1) (thickness 0.35))) ) (gr_line (start 45.72 57.785) (end 25.4 57.785) (layer F.SilkS) (width 1) (tstamp 606F278E)) (gr_line (start 45.72 73.025) (end 25.4 73.025) (layer F.SilkS) (width 1) (tstamp 606F1D92)) (gr_line (start 45.72 149.225) (end 25.4 149.225) (layer F.SilkS) (width 1) (tstamp 606F1F21)) (gr_line (start 45.72 108.585) (end 25.4 108.585) (layer F.SilkS) (width 1) (tstamp 606F1A11)) (gr_line (start 45.72 88.265) (end 25.4 88.265) (layer F.SilkS) (width 1) (tstamp 606F19D5)) (gr_line (start 45.72 133.985) (end 25.4 133.985) (layer F.SilkS) (width 1) (tstamp 606F2E4E)) (gr_text RX (at 31.75 93.345 -90) (layer F.SilkS) (tstamp 606F2E48) (effects (font (size 1 1) (thickness 0.15))) ) (gr_text GND (at 31.75 103.505 -90) (layer F.SilkS) (tstamp 606F2695) (effects (font (size 1 1) (thickness 0.15))) ) (gr_text TX (at 31.75 98.425 -90) (layer F.SilkS) (tstamp 606F1F57) (effects (font (size 1 1) (thickness 0.15))) ) (gr_line (start 34.925 95.885) (end 30.48 95.885) (layer F.SilkS) (width 0.2) (tstamp 606F2644)) (gr_line (start 34.925 100.965) (end 30.48 100.965) (layer F.SilkS) (width 0.2) (tstamp 606F2947)) (gr_text UART (at 27.94 98.425 -90) (layer F.SilkS) (tstamp 606F2ABE) (effects (font (size 2.5 2.1) (thickness 0.35))) ) (gr_line (start 34.925 121.285) (end 30.48 121.285) (layer F.SilkS) (width 0.7) (tstamp 606F3694)) (gr_text A (at 31.75 123.825 -90) (layer F.SilkS) (tstamp 606F1F15) (effects (font (size 1 1) (thickness 0.15))) ) (gr_text B (at 31.75 128.905 -90) (layer F.SilkS) (tstamp 606F20A4) (effects (font (size 1 1) (thickness 0.15))) ) (gr_line (start 34.925 126.365) (end 30.48 126.365) (layer F.SilkS) (width 0.2) (tstamp 606F1D5C)) (gr_text RS485 (at 27.94 121.285 -90) (layer F.SilkS) (tstamp 606F28BA) (effects (font (size 2.5 2.1) (thickness 0.35))) ) (gr_text A (at 31.75 113.665 -90) (layer F.SilkS) (tstamp 606F1D56) (effects (font (size 1 1) (thickness 0.15))) ) (gr_text B (at 31.75 118.745 -90) (layer F.SilkS) (tstamp 606F222D) (effects (font (size 1 1) (thickness 0.15))) ) (gr_line (start 34.925 116.205) (end 30.48 116.205) (layer F.SilkS) (width 0.2) (tstamp 606F285A)) (gr_text GND (at 31.75 144.145 -90) (layer F.SilkS) (tstamp 606F2D22) (effects (font (size 1 1) (thickness 0.15))) ) (gr_line (start 34.925 141.605) (end 30.48 141.605) (layer F.SilkS) (width 0.2) (tstamp 606F356B)) (gr_text 3.3V (at 31.75 139.065 -90) (layer F.SilkS) (tstamp 606F2ABB) (effects (font (size 1 1) (thickness 0.15))) ) (gr_text "Pwr Out" (at 27.94 141.605 -90) (layer F.SilkS) (tstamp 606F2092) (effects (font (size 2.5 2.1) (thickness 0.35))) ) (gr_text Output (at 27.94 167.005 -90) (layer F.SilkS) (tstamp 606F2239) (effects (font (size 2.5 2.1) (thickness 0.35))) ) (dimension 190.5 (width 0.15) (layer Cmts.User) (tstamp 606F2AC2) (gr_text "190.500 mm" (at 131.475 120.65 -90) (layer Cmts.User) (tstamp 606F2AC2) (effects (font (size 1 1) (thickness 0.15))) ) (feature1 (pts (xy 123.825 215.9) (xy 130.761421 215.9))) (feature2 (pts (xy 123.825 25.4) (xy 130.761421 25.4))) (crossbar (pts (xy 130.175 25.4) (xy 130.175 215.9))) (arrow1a (pts (xy 130.175 215.9) (xy 129.588579 214.773496))) (arrow1b (pts (xy 130.175 215.9) (xy 130.761421 214.773496))) (arrow2a (pts (xy 130.175 25.4) (xy 129.588579 26.526504))) (arrow2b (pts (xy 130.175 25.4) (xy 130.761421 26.526504))) ) (dimension 98.425 (width 0.15) (layer Cmts.User) (tstamp 606F2D05) (gr_text "98.425 mm" (at 74.6125 22.195) (layer Cmts.User) (tstamp 606F2D05) (effects (font (size 1 1) (thickness 0.15))) ) (feature1 (pts (xy 123.825 25.4) (xy 123.825 22.908579))) (feature2 (pts (xy 25.4 25.4) (xy 25.4 22.908579))) (crossbar (pts (xy 25.4 23.495) (xy 123.825 23.495))) (arrow1a (pts (xy 123.825 23.495) (xy 122.698496 24.081421))) (arrow1b (pts (xy 123.825 23.495) (xy 122.698496 22.908579))) (arrow2a (pts (xy 25.4 23.495) (xy 26.526504 24.081421))) (arrow2b (pts (xy 25.4 23.495) (xy 26.526504 22.908579))) ) (gr_line (start 121.92 173.355) (end 116.205 173.355) (layer F.SilkS) (width 0.25) (tstamp 606F29E6)) (gr_line (start 121.92 168.275) (end 116.205 168.275) (layer F.SilkS) (width 0.25) (tstamp 606F2098)) (gr_line (start 121.92 178.435) (end 116.205 178.435) (layer F.SilkS) (width 0.25) (tstamp 606F2FDD)) (gr_text In (at 120.65 175.895 90) (layer F.SilkS) (tstamp 606F2407) (effects (font (size 1.5 1.5) (thickness 0.3))) ) (gr_text Out (at 120.65 170.815 90) (layer F.SilkS) (tstamp 606F2611) (effects (font (size 1.5 1.5) (thickness 0.3))) ) (gr_line (start 71.12 187.96) (end 123.825 187.96) (layer F.SilkS) (width 1) (tstamp 606F1DA1)) (gr_text "Channel 4" (at 74.295 171.7675 90) (layer F.SilkS) (tstamp 606D91E7) (effects (font (size 2.8 3) (thickness 0.4))) ) (gr_line (start 121.92 140.97) (end 116.205 140.97) (layer F.SilkS) (width 0.25) (tstamp 606F2FE3)) (gr_line (start 121.92 135.89) (end 116.205 135.89) (layer F.SilkS) (width 0.25) (tstamp 606F2224)) (gr_line (start 121.92 146.05) (end 116.205 146.05) (layer F.SilkS) (width 0.25) (tstamp 606F263B)) (gr_text In (at 120.65 143.51 90) (layer F.SilkS) (tstamp 606F2A67) (effects (font (size 1.5 1.5) (thickness 0.3))) ) (gr_text Out (at 120.65 138.43 90) (layer F.SilkS) (tstamp 606F2F83) (effects (font (size 1.5 1.5) (thickness 0.3))) ) (gr_line (start 71.12 155.575) (end 123.825 155.575) (layer F.SilkS) (width 1) (tstamp 606F393A)) (gr_text "Channel 3" (at 74.295 139.3825 90) (layer F.SilkS) (tstamp 606F23AA) (effects (font (size 2.8 3) (thickness 0.4))) ) (gr_line (start 121.92 108.585) (end 116.205 108.585) (layer F.SilkS) (width 0.25) (tstamp 606F209E)) (gr_line (start 121.92 103.505) (end 116.205 103.505) (layer F.SilkS) (width 0.25) (tstamp 606F2AE2)) (gr_line (start 121.92 113.665) (end 116.205 113.665) (layer F.SilkS) (width 0.25) (tstamp 606F1DEC)) (gr_text In (at 120.65 111.125 90) (layer F.SilkS) (tstamp 606F20F5) (effects (font (size 1.5 1.5) (thickness 0.3))) ) (gr_text Out (at 120.65 106.045 90) (layer F.SilkS) (tstamp 606F3DD5) (effects (font (size 1.5 1.5) (thickness 0.3))) ) (gr_line (start 71.12 123.19) (end 123.825 123.19) (layer F.SilkS) (width 1) (tstamp 606F2A6D)) (gr_text "Channel 2" (at 74.295 106.9975 90) (layer F.SilkS) (tstamp 606F2FD7) (effects (font (size 2.8 3) (thickness 0.4))) ) (gr_line (start 121.92 71.12) (end 116.205 71.12) (layer F.SilkS) (width 0.25) (tstamp 606F23FB)) (gr_text In (at 120.65 78.74 90) (layer F.SilkS) (tstamp 606F2698) (effects (font (size 1.5 1.5) (thickness 0.3))) ) (gr_text Out (at 120.65 73.66 90) (layer F.SilkS) (tstamp 606F31BD) (effects (font (size 1.5 1.5) (thickness 0.3))) ) (gr_text "Channel 1" (at 74.295 74.6125 90) (layer F.SilkS) (tstamp 606F1B01) (effects (font (size 2.8 3) (thickness 0.4))) ) (gr_line (start 71.12 90.805) (end 123.825 90.805) (layer F.SilkS) (width 1) (tstamp 606F25B4)) (gr_line (start 121.92 76.2) (end 116.205 76.2) (layer F.SilkS) (width 0.25) (tstamp 606F2452)) (gr_line (start 121.92 81.28) (end 116.205 81.28) (layer F.SilkS) (width 0.25) (tstamp 606F1D44)) (gr_text LEDs (at 58.42 212.09) (layer F.SilkS) (tstamp 60746A17) (effects (font (size 1 1) (thickness 0.2))) ) (gr_line (start 121.92 48.895) (end 116.205 48.895) (layer F.SilkS) (width 0.25) (tstamp 606F3943)) (gr_line (start 121.92 38.735) (end 116.205 38.735) (layer F.SilkS) (width 0.25) (tstamp 606F3022)) (gr_line (start 25.4 215.9) (end 25.4 25.4) (layer Edge.Cuts) (width 0.05) (tstamp 606F3946)) (gr_line (start 123.825 215.9) (end 25.4 215.9) (layer Edge.Cuts) (width 0.05) (tstamp 606F393D)) (gr_line (start 123.825 25.4) (end 123.825 215.9) (layer Edge.Cuts) (width 0.05) (tstamp 606F300A)) (gr_line (start 25.4 25.4) (end 123.825 25.4) (layer Edge.Cuts) (width 0.05) (tstamp 606F3007)) (gr_line (start 121.92 43.815) (end 116.205 43.815) (layer F.SilkS) (width 0.25) (tstamp 606F32CE)) (gr_line (start 71.12 58.42) (end 123.825 58.42) (layer F.SilkS) (width 1) (tstamp 606F32CB)) (gr_text "Channel 0" (at 74.295 42.2275 90) (layer F.SilkS) (tstamp 606F32C8) (effects (font (size 2.8 3) (thickness 0.4))) ) (gr_text Out (at 120.65 41.275 90) (layer F.SilkS) (tstamp 606F32C5) (effects (font (size 1.5 1.5) (thickness 0.3))) ) (gr_text In (at 120.65 46.355 90) (layer F.SilkS) (tstamp 606F32C2) (effects (font (size 1.5 1.5) (thickness 0.3))) ) (segment (start 78.12 117.145) (end 78.105 117.16) (width 0.35) (layer F.Cu) (net 1) (tstamp 606F2EB1) (status 30)) (segment (start 82.005 117.145) (end 78.12 117.145) (width 0.35) (layer F.Cu) (net 1) (tstamp 606F1C3F) (status 30)) (segment (start 78.12 149.53) (end 78.105 149.545) (width 0.35) (layer F.Cu) (net 1) (tstamp 606F2AD0) (status 30)) (segment (start 82.005 149.53) (end 78.12 149.53) (width 0.35) (layer F.Cu) (net 1) (tstamp 606F2623) (status 30)) (segment (start 78.12 181.915) (end 78.105 181.93) (width 0.35) (layer F.Cu) (net 1) (tstamp 606F2E63) (status 30)) (segment (start 82.005 181.915) (end 78.12 181.915) (width 0.35) (layer F.Cu) (net 1) (tstamp 606F24F1) (status 30)) (segment (start 82.005 84.76) (end 78.12 84.76) (width 0.35) (layer F.Cu) (net 1) (tstamp 606F25AB) (status 30)) (segment (start 78.12 84.76) (end 78.105 84.775) (width 0.35) (layer F.Cu) (net 1) (tstamp 606F2F74) (status 30)) (segment (start 78.12 52.375) (end 78.105 52.39) (width 0.35) (layer F.Cu) (net 1) (tstamp 606F3D78) (status 30)) (segment (start 82.005 52.375) (end 78.12 52.375) (width 0.35) (layer F.Cu) (net 1) (tstamp 606F3D8D) (status 30)) (segment (start 70.866 56.637996) (end 75.113996 52.39) (width 0.35) (layer F.Cu) (net 1) (tstamp 606F2047)) (segment (start 75.113996 52.39) (end 78.105 52.39) (width 0.35) (layer F.Cu) (net 1) (tstamp 606F2AAF) (status 20)) (segment (start 53.405 59.055) (end 54.675 60.325) (width 0.5) (layer F.Cu) (net 1) (status 20)) (segment (start 51.435 59.055) (end 53.405 59.055) (width 0.5) (layer F.Cu) (net 1) (status 10)) (segment (start 51.435 59.055) (end 51.435 71.755) (width 0.5) (layer B.Cu) (net 1) (status 30)) (segment (start 49.7 178.755) (end 49.85 178.605) (width 0.35) (layer F.Cu) (net 1) (status 30)) (segment (start 47.625 178.755) (end 49.7 178.755) (width 0.35) (layer F.Cu) (net 1) (status 30)) (segment (start 60.8895 173.685) (end 60.87 173.685) (width 0.35) (layer F.Cu) (net 1) (status 30)) (segment (start 60.095 55.88) (end 61.255 55.88) (width 0.5) (layer F.Cu) (net 1) (status 20)) (segment (start 55.65 60.325) (end 60.095 55.88) (width 0.5) (layer F.Cu) (net 1)) (segment (start 54.675 60.325) (end 55.65 60.325) (width 0.5) (layer F.Cu) (net 1) (status 10)) (segment (start 61.255 54.27) (end 61.255 55.88) (width 0.5) (layer F.Cu) (net 1) (status 20)) (segment (start 54.61 47.625) (end 61.255 54.27) (width 0.5) (layer F.Cu) (net 1)) (segment (start 39.37 47.625) (end 54.61 47.625) (width 0.5) (layer F.Cu) (net 1) (status 10)) (segment (start 53.025 137.16) (end 53.025 136.525) (width 0.5) (layer F.Cu) (net 1) (status 30)) (segment (start 50.88 139.305) (end 53.025 137.16) (width 0.5) (layer F.Cu) (net 1) (status 30)) (segment (start 50.825 139.305) (end 50.88 139.305) (width 0.5) (layer F.Cu) (net 1) (status 30)) (segment (start 51.175 134.675) (end 51.175 131.445) (width 0.5) (layer F.Cu) (net 1) (status 20)) (segment (start 53.025 136.525) (end 51.175 134.675) (width 0.5) (layer F.Cu) (net 1) (status 10)) (segment (start 51.175 131.445) (end 52.572 130.048) (width 0.5) (layer F.Cu) (net 1) (status 10)) (segment (start 48.58 126.056) (end 48.58 120.015) (width 0.5) (layer F.Cu) (net 1) (status 20)) (segment (start 52.572 130.048) (end 48.58 126.056) (width 0.5) (layer F.Cu) (net 1)) (segment (start 48.325 119.76) (end 48.58 120.015) (width 0.5) (layer F.Cu) (net 1) (status 30)) (segment (start 48.325 118.11) (end 48.325 119.76) (width 0.5) (layer F.Cu) (net 1) (status 30)) (segment (start 61.275 174.09) (end 61.275 175.895) (width 0.35) (layer F.Cu) (net 1) (status 30)) (segment (start 60.87 173.685) (end 61.275 174.09) (width 0.35) (layer F.Cu) (net 1) (status 30)) (via (at 61.214 181.61) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 1)) (segment (start 54.61 185.42) (end 57.404 185.42) (width 0.5) (layer F.Cu) (net 1) (status 10)) (segment (start 57.404 185.42) (end 61.214 181.61) (width 0.5) (layer F.Cu) (net 1)) (segment (start 61.275 175.895) (end 61.275 181.549) (width 0.35) (layer F.Cu) (net 1) (status 10)) (segment (start 61.275 181.549) (end 61.214 181.61) (width 0.35) (layer F.Cu) (net 1)) (segment (start 49.85 177.48) (end 49.85 178.605) (width 0.35) (layer F.Cu) (net 1) (status 20)) (segment (start 59.651 172.466) (end 54.864 172.466) (width 0.35) (layer F.Cu) (net 1)) (segment (start 54.864 172.466) (end 49.85 177.48) (width 0.35) (layer F.Cu) (net 1)) (segment (start 60.87 173.685) (end 59.651 172.466) (width 0.35) (layer F.Cu) (net 1) (status 10)) (via (at 61.54999 129.794) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 1)) (segment (start 52.826 129.794) (end 61.54999 129.794) (width 0.5) (layer F.Cu) (net 1)) (segment (start 52.572 130.048) (end 52.826 129.794) (width 0.5) (layer F.Cu) (net 1)) (via (at 71.374 116.84) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 1)) (via (at 73.152 116.84) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 1)) (segment (start 71.374 116.84) (end 73.152 116.84) (width 0.35) (layer B.Cu) (net 1)) (segment (start 78.105 117.16) (end 73.472 117.16) (width 0.35) (layer F.Cu) (net 1)) (segment (start 73.472 117.16) (end 73.152 116.84) (width 0.35) (layer F.Cu) (net 1)) (segment (start 61.54999 129.794) (end 71.374 129.794) (width 0.5) (layer B.Cu) (net 1)) (via (at 71.374 129.794) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 1)) (via (at 71.374 149.352) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 1)) (via (at 73.406008 149.352) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 1)) (segment (start 71.374 149.352) (end 73.406008 149.352) (width 0.35) (layer B.Cu) (net 1)) (segment (start 78.105 149.545) (end 73.599008 149.545) (width 0.35) (layer F.Cu) (net 1)) (segment (start 73.599008 149.545) (end 73.406008 149.352) (width 0.35) (layer F.Cu) (net 1)) (segment (start 78.105 84.775) (end 73.345004 84.775) (width 0.35) (layer F.Cu) (net 1)) (segment (start 73.345004 84.775) (end 73.152 84.581996) (width 0.35) (layer F.Cu) (net 1)) (via (at 73.152 84.581996) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 1)) (segment (start 73.152 84.581996) (end 71.374004 84.581996) (width 0.35) (layer B.Cu) (net 1)) (via (at 71.374 84.582) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 1)) (segment (start 71.374004 84.581996) (end 71.374 84.582) (width 0.35) (layer B.Cu) (net 1)) (segment (start 73.48501 181.93) (end 73.16501 181.61) (width 0.35) (layer F.Cu) (net 1)) (segment (start 78.105 181.93) (end 73.48501 181.93) (width 0.35) (layer F.Cu) (net 1)) (via (at 73.16501 181.61) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 1)) (segment (start 71.374 57.145996) (end 71.374 181.61) (width 0.5) (layer F.Cu) (net 1)) (segment (start 70.866 56.637996) (end 71.374 57.145996) (width 0.5) (layer F.Cu) (net 1)) (segment (start 73.16501 181.61) (end 71.374 181.61) (width 0.35) (layer B.Cu) (net 1)) (via (at 71.374 181.61) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 1)) (segment (start 61.214 181.61) (end 71.374 181.61) (width 0.5) (layer B.Cu) (net 1)) (segment (start 70.019995 55.791991) (end 70.866 56.637996) (width 0.5) (layer F.Cu) (net 1)) (segment (start 61.255 55.88) (end 61.343009 55.791991) (width 0.5) (layer F.Cu) (net 1)) (segment (start 61.343009 55.791991) (end 70.019995 55.791991) (width 0.5) (layer F.Cu) (net 1)) (segment (start 49.53 57.15) (end 51.435 59.055) (width 0.5) (layer F.Cu) (net 1)) (segment (start 45.085 57.15) (end 49.53 57.15) (width 0.5) (layer F.Cu) (net 1)) (segment (start 39.37 62.865) (end 45.085 57.15) (width 0.5) (layer F.Cu) (net 1)) (segment (start 54.61 185.42) (end 54.61 187.96) (width 0.35) (layer F.Cu) (net 1)) (segment (start 78.105 119.06) (end 79.695 119.06) (width 0.35) (layer F.Cu) (net 2) (tstamp 606F3D87) (status 10)) (via (at 102.87 91.313) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 2) (tstamp 606F28B7)) (segment (start 98.745 119.38) (end 99.06 119.065) (width 0.35) (layer F.Cu) (net 2) (tstamp 606F204A) (status 30)) (segment (start 99.06 119.065) (end 100.015 119.065) (width 0.35) (layer F.Cu) (net 2) (tstamp 606F244F) (status 10)) (segment (start 101.945 101.59) (end 102.245 101.59) (width 0.35) (layer F.Cu) (net 2) (tstamp 606F2005) (status 30)) (segment (start 103.185 99.06) (end 103.185 97.47) (width 0.35) (layer F.Cu) (net 2) (tstamp 606F36AF) (status 10)) (segment (start 108.2275 99.06) (end 106.6375 97.47) (width 0.16) (layer F.Cu) (net 2) (tstamp 606F2FF8) (status 10)) (segment (start 96.455 119.38) (end 98.745 119.38) (width 0.35) (layer F.Cu) (net 2) (tstamp 606F1C8A) (status 30)) (segment (start 108.2275 101.6) (end 108.2275 99.06) (width 0.16) (layer F.Cu) (net 2) (tstamp 606F27FD) (status 30)) (segment (start 103.185 91.628) (end 102.87 91.313) (width 0.35) (layer F.Cu) (net 2) (tstamp 606F355C)) (via (at 100.33 119.38) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 2) (tstamp 606F1B0A)) (segment (start 103.185 97.47) (end 103.185 91.628) (width 0.35) (layer F.Cu) (net 2) (tstamp 606F2965)) (segment (start 85.62 119.06) (end 78.105 119.06) (width 0.35) (layer F.Cu) (net 2) (tstamp 606F25A8) (status 20)) (segment (start 102.245 101.59) (end 103.185 100.65) (width 0.35) (layer F.Cu) (net 2) (tstamp 606F217C) (status 10)) (segment (start 79.695 119.06) (end 80.01 118.745) (width 0.35) (layer F.Cu) (net 2) (tstamp 606F3D6F)) (segment (start 86.905 120.345) (end 85.62 119.06) (width 0.35) (layer F.Cu) (net 2) (tstamp 606F20F2) (status 10)) (segment (start 103.185 100.65) (end 103.185 99.06) (width 0.35) (layer F.Cu) (net 2) (tstamp 606F293E) (status 20)) (segment (start 100.015 119.065) (end 100.33 119.38) (width 0.35) (layer F.Cu) (net 2) (tstamp 606F36A3)) (segment (start 106.6375 97.47) (end 103.185 97.47) (width 0.16) (layer F.Cu) (net 2) (tstamp 606F24BE)) (via (at 80.01 118.745) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 2) (tstamp 606F25B1)) (segment (start 78.105 151.445) (end 79.695 151.445) (width 0.35) (layer F.Cu) (net 2) (tstamp 606F3463) (status 10)) (via (at 102.87 123.698) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 2) (tstamp 606F1F0F)) (segment (start 98.745 151.765) (end 99.06 151.45) (width 0.35) (layer F.Cu) (net 2) (tstamp 606F217F) (status 30)) (segment (start 99.06 151.45) (end 100.015 151.45) (width 0.35) (layer F.Cu) (net 2) (tstamp 606F21E2) (status 10)) (segment (start 101.945 133.975) (end 102.245 133.975) (width 0.35) (layer F.Cu) (net 2) (tstamp 606F294A) (status 30)) (segment (start 103.185 131.445) (end 103.185 129.855) (width 0.35) (layer F.Cu) (net 2) (tstamp 606F1E04) (status 10)) (segment (start 108.2275 131.445) (end 106.6375 129.855) (width 0.16) (layer F.Cu) (net 2) (tstamp 606F2ADF) (status 10)) (segment (start 96.455 151.765) (end 98.745 151.765) (width 0.35) (layer F.Cu) (net 2) (tstamp 606F1B07) (status 30)) (segment (start 108.2275 133.985) (end 108.2275 131.445) (width 0.16) (layer F.Cu) (net 2) (tstamp 606F3073) (status 30)) (segment (start 103.185 124.013) (end 102.87 123.698) (width 0.35) (layer F.Cu) (net 2) (tstamp 606F331F)) (via (at 100.33 151.765) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 2) (tstamp 606F250C)) (segment (start 103.185 129.855) (end 103.185 124.013) (width 0.35) (layer F.Cu) (net 2) (tstamp 606F2CAD)) (segment (start 85.62 151.445) (end 78.105 151.445) (width 0.35) (layer F.Cu) (net 2) (tstamp 606F2083) (status 20)) (segment (start 102.245 133.975) (end 103.185 133.035) (width 0.35) (layer F.Cu) (net 2) (tstamp 606F1B6A) (status 10)) (segment (start 79.695 151.445) (end 80.01 151.13) (width 0.35) (layer F.Cu) (net 2) (tstamp 606F2449)) (segment (start 86.905 152.73) (end 85.62 151.445) (width 0.35) (layer F.Cu) (net 2) (tstamp 606F2A61) (status 10)) (segment (start 103.185 133.035) (end 103.185 131.445) (width 0.35) (layer F.Cu) (net 2) (tstamp 606F2104) (status 20)) (segment (start 100.015 151.45) (end 100.33 151.765) (width 0.35) (layer F.Cu) (net 2) (tstamp 606F1E46)) (segment (start 106.6375 129.855) (end 103.185 129.855) (width 0.16) (layer F.Cu) (net 2) (tstamp 606F1DF8)) (via (at 80.01 151.13) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 2) (tstamp 606F1F12)) (segment (start 78.105 183.83) (end 79.695 183.83) (width 0.35) (layer F.Cu) (net 2) (tstamp 606F2D3A) (status 10)) (via (at 102.87 156.083) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 2) (tstamp 606F3670)) (segment (start 98.745 184.15) (end 99.06 183.835) (width 0.35) (layer F.Cu) (net 2) (tstamp 606F2560) (status 30)) (segment (start 99.06 183.835) (end 100.015 183.835) (width 0.35) (layer F.Cu) (net 2) (tstamp 606F2AB5) (status 10)) (segment (start 101.945 166.36) (end 102.245 166.36) (width 0.35) (layer F.Cu) (net 2) (tstamp 606F2E36) (status 30)) (segment (start 103.185 163.83) (end 103.185 162.24) (width 0.35) (layer F.Cu) (net 2) (tstamp 606F3664) (status 10)) (segment (start 108.2275 163.83) (end 106.6375 162.24) (width 0.16) (layer F.Cu) (net 2) (tstamp 606F1E01) (status 10)) (segment (start 96.455 184.15) (end 98.745 184.15) (width 0.35) (layer F.Cu) (net 2) (tstamp 606F2FF2) (status 30)) (segment (start 108.2275 166.37) (end 108.2275 163.83) (width 0.16) (layer F.Cu) (net 2) (tstamp 606F26D7) (status 30)) (segment (start 103.185 156.398) (end 102.87 156.083) (width 0.35) (layer F.Cu) (net 2) (tstamp 606F24FD)) (via (at 100.33 184.15) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 2) (tstamp 606F24F7)) (segment (start 103.185 162.24) (end 103.185 156.398) (width 0.35) (layer F.Cu) (net 2) (tstamp 606F1981)) (segment (start 85.62 183.83) (end 78.105 183.83) (width 0.35) (layer F.Cu) (net 2) (tstamp 606F270A) (status 20)) (segment (start 102.245 166.36) (end 103.185 165.42) (width 0.35) (layer F.Cu) (net 2) (tstamp 606F2701) (status 10)) (segment (start 79.695 183.83) (end 80.01 183.515) (width 0.35) (layer F.Cu) (net 2) (tstamp 606F1B58)) (segment (start 86.905 185.115) (end 85.62 183.83) (width 0.35) (layer F.Cu) (net 2) (tstamp 606F2401) (status 10)) (segment (start 103.185 165.42) (end 103.185 163.83) (width 0.35) (layer F.Cu) (net 2) (tstamp 606F23FE) (status 20)) (segment (start 100.015 183.835) (end 100.33 184.15) (width 0.35) (layer F.Cu) (net 2) (tstamp 606F1AE9)) (segment (start 106.6375 162.24) (end 103.185 162.24) (width 0.16) (layer F.Cu) (net 2) (tstamp 606F26EC)) (via (at 80.01 183.515) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 2) (tstamp 606F2932)) (via (at 80.01 86.36) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 2) (tstamp 606F1C36)) (via (at 102.87 58.928) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 2) (tstamp 606F2EF3)) (segment (start 103.185 59.243) (end 102.87 58.928) (width 0.35) (layer F.Cu) (net 2) (tstamp 606F31A8)) (segment (start 85.62 86.675) (end 78.105 86.675) (width 0.35) (layer F.Cu) (net 2) (tstamp 606F36BB) (status 20)) (segment (start 106.6375 65.085) (end 103.185 65.085) (width 0.16) (layer F.Cu) (net 2) (tstamp 606F1A17)) (segment (start 108.2275 69.215) (end 108.2275 66.675) (width 0.16) (layer F.Cu) (net 2) (tstamp 606F2D16) (status 30)) (segment (start 103.185 66.675) (end 103.185 65.085) (width 0.35) (layer F.Cu) (net 2) (tstamp 606F2D19) (status 10)) (segment (start 98.745 86.995) (end 99.06 86.68) (width 0.35) (layer F.Cu) (net 2) (tstamp 606F31B1) (status 30)) (segment (start 96.455 86.995) (end 98.745 86.995) (width 0.35) (layer F.Cu) (net 2) (tstamp 606F3D72) (status 30)) (via (at 100.33 86.995) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 2) (tstamp 606F2509)) (segment (start 100.015 86.68) (end 100.33 86.995) (width 0.35) (layer F.Cu) (net 2) (tstamp 606F1E8E)) (segment (start 99.06 86.68) (end 100.015 86.68) (width 0.35) (layer F.Cu) (net 2) (tstamp 606F232C) (status 10)) (segment (start 101.945 69.205) (end 102.245 69.205) (width 0.35) (layer F.Cu) (net 2) (tstamp 606F24F4) (status 30)) (segment (start 103.185 68.265) (end 103.185 66.675) (width 0.35) (layer F.Cu) (net 2) (tstamp 606F1BF7) (status 20)) (segment (start 102.245 69.205) (end 103.185 68.265) (width 0.35) (layer F.Cu) (net 2) (tstamp 606F1CC9) (status 10)) (segment (start 86.905 87.96) (end 85.62 86.675) (width 0.35) (layer F.Cu) (net 2) (tstamp 606F31A2) (status 10)) (segment (start 78.105 86.675) (end 79.695 86.675) (width 0.35) (layer F.Cu) (net 2) (tstamp 606F2692) (status 10)) (segment (start 79.695 86.675) (end 80.01 86.36) (width 0.35) (layer F.Cu) (net 2) (tstamp 606F293B)) (segment (start 103.185 65.085) (end 103.185 59.243) (width 0.35) (layer F.Cu) (net 2) (tstamp 606F2E60)) (segment (start 108.2275 66.675) (end 106.6375 65.085) (width 0.16) (layer F.Cu) (net 2) (tstamp 606F25AE) (status 10)) (segment (start 106.6375 32.7) (end 103.185 32.7) (width 0.16) (layer F.Cu) (net 2) (tstamp 606F3421)) (segment (start 108.2275 34.29) (end 106.6375 32.7) (width 0.16) (layer F.Cu) (net 2) (tstamp 606F306D) (status 10)) (segment (start 103.185 34.29) (end 103.185 32.7) (width 0.35) (layer F.Cu) (net 2) (tstamp 606F33D9) (status 10)) (segment (start 108.2275 36.83) (end 108.2275 34.29) (width 0.16) (layer F.Cu) (net 2) (tstamp 606F33DF) (status 30)) (segment (start 98.745 54.61) (end 99.06 54.295) (width 0.35) (layer F.Cu) (net 2) (tstamp 606F32BC) (status 30)) (segment (start 96.455 54.61) (end 98.745 54.61) (width 0.35) (layer F.Cu) (net 2) (tstamp 606F32B9) (status 30)) (via (at 100.33 54.61) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 2) (tstamp 606F32B6)) (segment (start 100.015 54.295) (end 100.33 54.61) (width 0.35) (layer F.Cu) (net 2) (tstamp 606F32B3)) (segment (start 99.06 54.295) (end 100.015 54.295) (width 0.35) (layer F.Cu) (net 2) (tstamp 606F32B0) (status 10)) (segment (start 101.945 36.82) (end 102.245 36.82) (width 0.35) (layer F.Cu) (net 2) (tstamp 606F32AD) (status 30)) (segment (start 103.185 35.88) (end 103.185 34.29) (width 0.35) (layer F.Cu) (net 2) (tstamp 606F32AA) (status 20)) (segment (start 102.245 36.82) (end 103.185 35.88) (width 0.35) (layer F.Cu) (net 2) (tstamp 606F32A7) (status 10)) (segment (start 85.62 54.29) (end 78.105 54.29) (width 0.35) (layer F.Cu) (net 2) (tstamp 606F36C7) (status 20)) (segment (start 86.905 55.575) (end 85.62 54.29) (width 0.35) (layer F.Cu) (net 2) (tstamp 606F31C0) (status 10)) (via (at 80.01 53.975) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 2) (tstamp 606F3D7B)) (segment (start 79.695 54.29) (end 80.01 53.975) (width 0.35) (layer F.Cu) (net 2) (tstamp 606F3154)) (segment (start 78.105 54.29) (end 79.695 54.29) (width 0.35) (layer F.Cu) (net 2) (tstamp 606F31AB) (status 10)) (segment (start 103.185 32.7) (end 103.185 26.858) (width 0.35) (layer F.Cu) (net 2) (tstamp 606F30EB)) (segment (start 103.185 26.858) (end 102.87 26.543) (width 0.35) (layer F.Cu) (net 2) (tstamp 606F3D63)) (via (at 102.87 26.543) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 2) (tstamp 606F3D6C)) (segment (start 91.505 52.07) (end 91.505 53.34) (width 0.16) (layer F.Cu) (net 2) (tstamp 606F3934) (status 30)) (segment (start 93.599 53.34) (end 91.505 53.34) (width 0.16) (layer F.Cu) (net 2) (tstamp 606F3556) (status 20)) (segment (start 94.869 54.61) (end 93.599 53.34) (width 0.16) (layer F.Cu) (net 2) (tstamp 606F1AF5)) (segment (start 96.455 54.61) (end 94.869 54.61) (width 0.16) (layer F.Cu) (net 2) (tstamp 606F1A05) (status 10)) (segment (start 94.996 86.995) (end 96.455 86.995) (width 0.16) (layer F.Cu) (net 2) (tstamp 606F2869) (status 20)) (segment (start 92.456 84.455) (end 94.996 86.995) (width 0.16) (layer F.Cu) (net 2) (tstamp 606F2E5A) (status 10)) (segment (start 91.505 84.455) (end 92.456 84.455) (width 0.16) (layer F.Cu) (net 2) (tstamp 606F3679) (status 30)) (segment (start 95.123 119.38) (end 96.455 119.38) (width 0.16) (layer F.Cu) (net 2) (tstamp 606F19F3) (status 20)) (segment (start 92.583 116.84) (end 95.123 119.38) (width 0.16) (layer F.Cu) (net 2) (tstamp 606F2A07)) (segment (start 91.505 116.84) (end 92.583 116.84) (width 0.16) (layer F.Cu) (net 2) (tstamp 606F1D59) (status 10)) (segment (start 94.804064 151.765) (end 92.264064 149.225) (width 0.16) (layer F.Cu) (net 2) (tstamp 606F2866) (status 20)) (segment (start 92.264064 149.225) (end 91.505 149.225) (width 0.16) (layer F.Cu) (net 2) (tstamp 606F2044) (status 30)) (segment (start 96.455 151.765) (end 94.804064 151.765) (width 0.16) (layer F.Cu) (net 2) (tstamp 606F286C) (status 10)) (via (at 90.424 183.007) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 2) (tstamp 606F23E9)) (segment (start 90.551 182.88) (end 90.424 183.007) (width 0.16) (layer F.Cu) (net 2) (tstamp 606F31B4) (status 10)) (segment (start 91.505 182.88) (end 90.551 182.88) (width 0.16) (layer F.Cu) (net 2) (tstamp 606F295C) (status 30)) (segment (start 34.92 76.835) (end 34.92 84.455) (width 0.16) (layer F.Cu) (net 2) (status 30)) (via (at 36.83 84.455) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 2)) (segment (start 34.92 84.455) (end 36.83 84.455) (width 0.16) (layer F.Cu) (net 2) (status 10)) (via (at 60.452 59.436) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 2)) (segment (start 59.625 60.263) (end 60.452 59.436) (width 0.5) (layer F.Cu) (net 2) (status 10)) (segment (start 59.625 60.325) (end 59.625 60.263) (width 0.5) (layer F.Cu) (net 2) (status 30)) (via (at 58.928 59.436) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 2)) (segment (start 59.625 60.133) (end 58.928 59.436) (width 0.5) (layer F.Cu) (net 2) (status 10)) (segment (start 59.625 60.325) (end 59.625 60.133) (width 0.5) (layer F.Cu) (net 2) (status 30)) (segment (start 48.855 81.635) (end 50.375 81.635) (width 0.35) (layer F.Cu) (net 2) (status 20)) (segment (start 47.625 82.865) (end 48.855 81.635) (width 0.35) (layer F.Cu) (net 2) (status 10)) (via (at 49.276 141.478) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 2)) (segment (start 49.403 141.605) (end 49.276 141.478) (width 0.5) (layer F.Cu) (net 2)) (segment (start 50.825 141.605) (end 49.403 141.605) (width 0.5) (layer F.Cu) (net 2) (status 10)) (segment (start 57.125 144.485) (end 54.925 146.685) (width 0.5) (layer F.Cu) (net 2) (status 20)) (segment (start 57.125 141.605) (end 57.125 144.485) (width 0.5) (layer F.Cu) (net 2) (status 10)) (segment (start 58.547 141.605) (end 58.674 141.478) (width 0.5) (layer F.Cu) (net 2)) (via (at 58.674 141.478) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 2)) (segment (start 57.125 141.605) (end 58.547 141.605) (width 0.5) (layer F.Cu) (net 2) (status 10)) (via (at 57.15 87.122) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 2)) (segment (start 57.277 86.995) (end 57.15 87.122) (width 0.16) (layer F.Cu) (net 2)) (segment (start 58.1425 86.995) (end 57.277 86.995) (width 0.16) (layer F.Cu) (net 2) (status 10)) (via (at 47.498 83.82) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 2)) (segment (start 47.625 82.865) (end 47.625 83.693) (width 0.35) (layer F.Cu) (net 2) (status 10)) (segment (start 47.625 83.693) (end 47.498 83.82) (width 0.35) (layer F.Cu) (net 2)) (via (at 48.514 181.356) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 2)) (segment (start 47.813 180.655) (end 48.514 181.356) (width 0.16) (layer F.Cu) (net 2) (status 10)) (segment (start 47.625 180.655) (end 47.813 180.655) (width 0.16) (layer F.Cu) (net 2) (status 30)) (via (at 52.578 181.356) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 2)) (segment (start 52.027 180.805) (end 52.578 181.356) (width 0.35) (layer F.Cu) (net 2) (status 10)) (segment (start 51.75 180.805) (end 52.027 180.805) (width 0.35) (layer F.Cu) (net 2) (status 30)) (via (at 55.88 136.525) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 2)) (segment (start 54.925 136.525) (end 55.88 136.525) (width 0.5) (layer F.Cu) (net 2) (status 10)) (via (at 55.88 146.685) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 2)) (segment (start 54.925 146.685) (end 55.88 146.685) (width 0.5) (layer F.Cu) (net 2) (status 10)) (segment (start 54.925 149.915) (end 56.775 151.765) (width 0.5) (layer F.Cu) (net 2) (status 20)) (segment (start 54.925 146.685) (end 54.925 149.915) (width 0.5) (layer F.Cu) (net 2) (status 10)) (segment (start 54.925 133.295) (end 56.775 131.445) (width 0.5) (layer F.Cu) (net 2) (status 20)) (segment (start 54.925 137.16) (end 54.925 133.295) (width 0.5) (layer F.Cu) (net 2) (status 10)) (segment (start 57.125 139.36) (end 54.925 137.16) (width 0.5) (layer F.Cu) (net 2) (status 20)) (segment (start 57.125 141.605) (end 57.125 139.36) (width 0.5) (layer F.Cu) (net 2) (status 10)) (via (at 59.055 151.765) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 2)) (segment (start 56.775 151.765) (end 59.055 151.765) (width 0.5) (layer F.Cu) (net 2) (status 10)) (via (at 59.055 131.445) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 2)) (segment (start 56.775 131.445) (end 59.055 131.445) (width 0.5) (layer F.Cu) (net 2) (status 10)) (segment (start 50.48 115.48) (end 50.48 120.015) (width 0.5) (layer F.Cu) (net 2) (status 20)) (segment (start 49.3 114.3) (end 50.48 115.48) (width 0.5) (layer F.Cu) (net 2)) (segment (start 48.325 114.3) (end 49.3 114.3) (width 0.5) (layer F.Cu) (net 2) (status 10)) (segment (start 56.93 119.06) (end 56.05 119.06) (width 0.35) (layer F.Cu) (net 2) (status 20)) (segment (start 56.955001 119.034999) (end 56.93 119.06) (width 0.35) (layer F.Cu) (net 2)) (segment (start 56.955001 115.690001) (end 56.955001 119.034999) (width 0.35) (layer F.Cu) (net 2)) (segment (start 56.2 114.935) (end 56.955001 115.690001) (width 0.35) (layer F.Cu) (net 2) (status 10)) (via (at 55.245 114.935) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 2)) (segment (start 56.2 114.935) (end 55.245 114.935) (width 0.35) (layer F.Cu) (net 2) (status 10)) (via (at 57.404 170.434) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 2)) (segment (start 57.353 170.485) (end 57.404 170.434) (width 0.5) (layer F.Cu) (net 2)) (segment (start 55.97 170.485) (end 57.353 170.485) (width 0.5) (layer F.Cu) (net 2) (status 10)) (via (at 58.928 174.498) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 2)) (segment (start 59.375 174.945) (end 58.928 174.498) (width 0.5) (layer F.Cu) (net 2)) (segment (start 59.375 175.895) (end 59.375 174.945) (width 0.5) (layer F.Cu) (net 2) (status 10)) (via (at 50.291998 118.618) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 2)) (segment (start 50.48 120.015) (end 50.48 118.806002) (width 0.5) (layer F.Cu) (net 2) (status 10)) (segment (start 50.48 118.806002) (end 50.291998 118.618) (width 0.5) (layer F.Cu) (net 2)) (segment (start 110.8475 34.29) (end 108.2275 34.29) (width 0.16) (layer F.Cu) (net 2)) (segment (start 110.8475 66.675) (end 108.2275 66.675) (width 0.16) (layer F.Cu) (net 2)) (segment (start 110.8475 99.06) (end 108.2275 99.06) (width 0.16) (layer F.Cu) (net 2)) (segment (start 110.8475 131.445) (end 108.2275 131.445) (width 0.16) (layer F.Cu) (net 2)) (segment (start 110.8475 163.83) (end 108.2275 163.83) (width 0.16) (layer F.Cu) (net 2)) (segment (start 52.07 185.42) (end 52.07 187.96) (width 0.35) (layer F.Cu) (net 2)) (segment (start 52.07 205.74) (end 52.07 208.28) (width 0.35) (layer F.Cu) (net 2)) (segment (start 49.53 205.74) (end 49.53 208.28) (width 0.35) (layer F.Cu) (net 2)) (segment (start 29.21 205.74) (end 29.21 208.28) (width 0.35) (layer F.Cu) (net 2)) (segment (start 26.67 205.74) (end 26.67 208.28) (width 0.35) (layer F.Cu) (net 2)) (segment (start 36.83 185.42) (end 36.83 187.96) (width 0.35) (layer F.Cu) (net 3)) (segment (start 36.83 169.545) (end 38.1 168.275) (width 0.16) (layer F.Cu) (net 3)) (segment (start 36.83 185.42) (end 36.83 169.545) (width 0.16) (layer F.Cu) (net 3)) (segment (start 41.91 185.42) (end 41.91 187.96) (width 0.35) (layer F.Cu) (net 4)) (segment (start 39.230001 162.064999) (end 38.1 163.195) (width 0.16) (layer F.Cu) (net 4)) (segment (start 41.91 162.792598) (end 41.182401 162.064999) (width 0.16) (layer F.Cu) (net 4)) (segment (start 41.182401 162.064999) (end 39.230001 162.064999) (width 0.16) (layer F.Cu) (net 4)) (segment (start 41.91 185.42) (end 41.91 162.792598) (width 0.16) (layer F.Cu) (net 4)) (via (at 64.77 120.396) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 5)) (segment (start 63.754 118.11) (end 61.468 120.396) (width 0.16) (layer F.Cu) (net 5)) (segment (start 63.754 113.673464) (end 63.754 118.11) (width 0.16) (layer F.Cu) (net 5)) (segment (start 43.425536 93.345) (end 63.754 113.673464) (width 0.16) (layer F.Cu) (net 5)) (segment (start 39.37 93.345) (end 43.425536 93.345) (width 0.16) (layer F.Cu) (net 5) (status 10)) (segment (start 60.132 119.06) (end 61.468 120.396) (width 0.16) (layer F.Cu) (net 5)) (segment (start 58.25 119.06) (end 60.132 119.06) (width 0.16) (layer F.Cu) (net 5) (status 10)) (segment (start 64.77 120.396) (end 61.468 120.396) (width 0.16) (layer B.Cu) (net 5)) (via (at 61.468 120.396) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 5)) (segment (start 63.754 121.412) (end 64.77 120.396) (width 0.16) (layer F.Cu) (net 5)) (segment (start 63.754 128.27) (end 63.754 121.412) (width 0.16) (layer F.Cu) (net 5)) (segment (start 64.516 129.032) (end 63.754 128.27) (width 0.16) (layer F.Cu) (net 5)) (segment (start 64.516 159.766) (end 64.516 129.032) (width 0.16) (layer F.Cu) (net 5)) (segment (start 65.278 160.528) (end 64.516 159.766) (width 0.16) (layer F.Cu) (net 5)) (segment (start 60.452 190.5) (end 65.278 185.674) (width 0.16) (layer F.Cu) (net 5)) (segment (start 65.278 185.674) (end 65.278 160.528) (width 0.16) (layer F.Cu) (net 5)) (segment (start 30.48 190.5) (end 60.452 190.5) (width 0.16) (layer F.Cu) (net 5)) (segment (start 29.21 189.23) (end 30.48 190.5) (width 0.16) (layer F.Cu) (net 5)) (segment (start 29.21 185.42) (end 29.21 189.23) (width 0.16) (layer F.Cu) (net 5)) (segment (start 29.21 185.42) (end 29.21 187.96) (width 0.35) (layer F.Cu) (net 5)) (segment (start 39.37 100.395) (end 53.275 114.3) (width 0.16) (layer F.Cu) (net 6) (status 20)) (segment (start 39.37 98.425) (end 39.37 100.395) (width 0.16) (layer F.Cu) (net 6) (status 10)) (via (at 61.468 123.952) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 6)) (segment (start 53.275 114.3) (end 52.3 114.3) (width 0.16) (layer F.Cu) (net 6) (status 30)) (segment (start 51.45599 115.14401) (end 51.45599 120.03599) (width 0.16) (layer F.Cu) (net 6)) (segment (start 52.3 114.3) (end 51.45599 115.14401) (width 0.16) (layer F.Cu) (net 6) (status 10)) (segment (start 51.45599 120.03599) (end 55.372 123.952) (width 0.16) (layer F.Cu) (net 6)) (segment (start 55.372 123.952) (end 61.468 123.952) (width 0.16) (layer F.Cu) (net 6)) (segment (start 61.468 123.952) (end 66.802 123.952) (width 0.16) (layer B.Cu) (net 6)) (via (at 66.802 123.952) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 6)) (segment (start 44.45 205.74) (end 44.45 208.28) (width 0.35) (layer F.Cu) (net 6)) (segment (start 66.802 192.659) (end 66.802 123.952) (width 0.16) (layer F.Cu) (net 6)) (segment (start 57.785 201.676) (end 66.802 192.659) (width 0.16) (layer F.Cu) (net 6)) (via (at 44.704 201.676) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 6)) (segment (start 50.927 201.676) (end 44.704 201.676) (width 0.16) (layer F.Cu) (net 6)) (segment (start 50.800012 201.676) (end 50.927 201.676) (width 0.16) (layer F.Cu) (net 6)) (segment (start 50.927 201.676) (end 57.785 201.676) (width 0.16) (layer F.Cu) (net 6)) (segment (start 44.704 205.486) (end 44.45 205.74) (width 0.16) (layer B.Cu) (net 6)) (segment (start 44.704 201.676) (end 44.704 205.486) (width 0.16) (layer B.Cu) (net 6)) (via (at 69.85 91.821) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 7) (tstamp 606F2230)) (via (at 69.85 124.841) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 7) (tstamp 606F1DE3)) (segment (start 92.48 153.035) (end 91.505 153.035) (width 0.16) (layer F.Cu) (net 7) (tstamp 606F31D5) (status 20)) (segment (start 92.76001 152.75499) (end 92.48 153.035) (width 0.16) (layer F.Cu) (net 7) (tstamp 606F1D5F)) (segment (start 92.76001 150.77501) (end 92.76001 152.75499) (width 0.16) (layer F.Cu) (net 7) (tstamp 606F3D96)) (segment (start 92.48 150.495) (end 92.76001 150.77501) (width 0.16) (layer F.Cu) (net 7) (tstamp 606F3688)) (segment (start 91.505 150.495) (end 92.48 150.495) (width 0.16) (layer F.Cu) (net 7) (tstamp 606F2941) (status 10)) (via (at 69.85 156.591) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 7) (tstamp 606F19F9)) (via (at 69.85 188.849) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 7) (tstamp 606F2AD3)) (segment (start 49.34 82.935) (end 49.219999 83.055001) (width 0.16) (layer F.Cu) (net 7)) (segment (start 69.85 91.821) (end 63.145155 91.821) (width 0.16) (layer B.Cu) (net 7)) (segment (start 49.219999 85.033999) (end 55.935835 91.749835) (width 0.16) (layer F.Cu) (net 7)) (segment (start 55.935835 91.749835) (end 63.07399 91.749835) (width 0.16) (layer F.Cu) (net 7)) (segment (start 50.375 82.935) (end 49.34 82.935) (width 0.16) (layer F.Cu) (net 7) (status 10)) (segment (start 63.145155 91.821) (end 63.07399 91.749835) (width 0.16) (layer B.Cu) (net 7)) (via (at 63.07399 91.749835) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 7)) (segment (start 49.219999 83.055001) (end 49.219999 85.033999) (width 0.16) (layer F.Cu) (net 7)) (via (at 69.85 60.071002) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 7)) (segment (start 69.85 188.849) (end 69.85 60.071002) (width 0.16) (layer F.Cu) (net 7)) (via (at 73.16501 91.821) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 7)) (segment (start 75.32401 89.662) (end 73.16501 91.821) (width 0.16) (layer F.Cu) (net 7)) (segment (start 69.85 91.821) (end 73.16501 91.821) (width 0.16) (layer B.Cu) (net 7)) (segment (start 91.505 88.265) (end 90.108 89.662) (width 0.16) (layer F.Cu) (net 7)) (segment (start 90.108 89.662) (end 75.32401 89.662) (width 0.16) (layer F.Cu) (net 7)) (segment (start 75.95901 122.047) (end 73.16501 124.841) (width 0.16) (layer F.Cu) (net 7)) (segment (start 91.505 120.65) (end 90.108 122.047) (width 0.16) (layer F.Cu) (net 7)) (segment (start 90.108 122.047) (end 75.95901 122.047) (width 0.16) (layer F.Cu) (net 7)) (segment (start 69.85 124.841) (end 73.16501 124.841) (width 0.16) (layer B.Cu) (net 7)) (via (at 73.16501 124.841) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 7)) (segment (start 75.32401 154.432) (end 73.16501 156.591) (width 0.16) (layer F.Cu) (net 7)) (segment (start 90.108 154.432) (end 75.32401 154.432) (width 0.16) (layer F.Cu) (net 7)) (segment (start 91.505 153.035) (end 90.108 154.432) (width 0.16) (layer F.Cu) (net 7)) (segment (start 69.85 156.591) (end 73.16501 156.591) (width 0.16) (layer B.Cu) (net 7)) (via (at 73.16501 156.591) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 7)) (via (at 73.16501 188.849) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 7)) (segment (start 69.85 188.849) (end 73.16501 188.849) (width 0.16) (layer B.Cu) (net 7)) (segment (start 91.505 185.42) (end 88.076 188.849) (width 0.16) (layer F.Cu) (net 7)) (segment (start 88.076 188.849) (end 73.16501 188.849) (width 0.16) (layer F.Cu) (net 7)) (segment (start 69.85 60.071002) (end 72.224008 60.071002) (width 0.16) (layer B.Cu) (net 7)) (segment (start 75.01801 57.277) (end 72.22401 60.071) (width 0.16) (layer F.Cu) (net 7)) (segment (start 91.505 55.88) (end 90.108 57.277) (width 0.16) (layer F.Cu) (net 7)) (segment (start 90.108 57.277) (end 75.01801 57.277) (width 0.16) (layer F.Cu) (net 7)) (via (at 72.22401 60.071) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 7)) (segment (start 72.224008 60.071002) (end 72.22401 60.071) (width 0.16) (layer B.Cu) (net 7)) (segment (start 37.1875 211.1775) (end 37.465 211.1775) (width 0.16) (layer F.Cu) (net 7)) (segment (start 34.29 208.28) (end 37.1875 211.1775) (width 0.16) (layer F.Cu) (net 7)) (segment (start 34.29 205.74) (end 34.29 208.28) (width 0.35) (layer F.Cu) (net 7)) (via (at 65.278 188.849) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 7)) (segment (start 69.85 188.849) (end 65.278 188.849) (width 0.16) (layer B.Cu) (net 7)) (segment (start 65.278 188.849) (end 59.436 194.691) (width 0.16) (layer F.Cu) (net 7)) (segment (start 59.436 194.691) (end 59.182 194.945) (width 0.16) (layer F.Cu) (net 7)) (segment (start 45.085 194.945) (end 34.29 205.74) (width 0.16) (layer F.Cu) (net 7)) (segment (start 48.133 194.945) (end 45.085 194.945) (width 0.16) (layer F.Cu) (net 7)) (segment (start 59.182 194.945) (end 48.133 194.945) (width 0.16) (layer F.Cu) (net 7)) (segment (start 48.133 194.945) (end 45.72 194.945) (width 0.16) (layer F.Cu) (net 7)) (via (at 69.088 58.293) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 8) (tstamp 606F3520)) (via (at 69.088 90.043) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 8) (tstamp 606F2DFA)) (via (at 69.088 123.063) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 8) (tstamp 606F1AA1)) (segment (start 91.505 118.11) (end 91.505 119.38) (width 0.16) (layer F.Cu) (net 8) (tstamp 606F2113) (status 30)) (segment (start 69.088 154.305) (end 69.088 187.061998) (width 0.16) (layer F.Cu) (net 8)) (via (at 69.124008 187.098006) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 8)) (segment (start 69.088 187.061998) (end 69.124008 187.098006) (width 0.16) (layer F.Cu) (net 8)) (segment (start 50.375 83.585) (end 51.41 83.585) (width 0.16) (layer F.Cu) (net 8) (status 10)) (segment (start 69.088 90.043) (end 63.20099 90.043) (width 0.16) (layer B.Cu) (net 8)) (segment (start 63.20099 90.043) (end 63.07399 89.916) (width 0.16) (layer B.Cu) (net 8)) (segment (start 57.741 89.916) (end 63.07399 89.916) (width 0.16) (layer F.Cu) (net 8)) (segment (start 51.41 83.585) (end 57.741 89.916) (width 0.16) (layer F.Cu) (net 8)) (via (at 63.07399 89.916) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 8)) (via (at 69.088 154.686004) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 8)) (segment (start 69.088 154.305) (end 69.088 154.686004) (width 0.16) (layer F.Cu) (net 8)) (segment (start 69.088 154.305) (end 69.088 58.293) (width 0.16) (layer F.Cu) (net 8)) (segment (start 74.05401 89.154) (end 73.16501 90.043) (width 0.16) (layer F.Cu) (net 8)) (segment (start 69.088 90.043) (end 73.16501 90.043) (width 0.16) (layer B.Cu) (net 8)) (segment (start 88.371 89.154) (end 74.05401 89.154) (width 0.16) (layer F.Cu) (net 8)) (segment (start 91.505 86.995) (end 90.53 86.995) (width 0.16) (layer F.Cu) (net 8)) (segment (start 90.53 86.995) (end 88.371 89.154) (width 0.16) (layer F.Cu) (net 8)) (via (at 73.16501 90.043) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 8)) (segment (start 91.505 119.38) (end 90.53 119.38) (width 0.16) (layer F.Cu) (net 8)) (segment (start 90.53 119.38) (end 88.371 121.539) (width 0.16) (layer F.Cu) (net 8)) (segment (start 74.68901 121.539) (end 73.16501 123.063) (width 0.16) (layer F.Cu) (net 8)) (segment (start 88.371 121.539) (end 74.68901 121.539) (width 0.16) (layer F.Cu) (net 8)) (via (at 73.16501 123.063) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 8)) (segment (start 69.088 123.063) (end 73.16501 123.063) (width 0.16) (layer B.Cu) (net 8)) (segment (start 91.505 151.765) (end 90.53 151.765) (width 0.16) (layer F.Cu) (net 8)) (segment (start 90.53 151.765) (end 88.371 153.924) (width 0.16) (layer F.Cu) (net 8)) (segment (start 69.088 154.686004) (end 73.165006 154.686004) (width 0.16) (layer B.Cu) (net 8)) (segment (start 73.165006 154.686004) (end 73.16501 154.686) (width 0.16) (layer B.Cu) (net 8)) (via (at 73.16501 154.686) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 8)) (segment (start 73.92701 153.924) (end 73.16501 154.686) (width 0.16) (layer F.Cu) (net 8)) (segment (start 88.371 153.924) (end 73.92701 153.924) (width 0.16) (layer F.Cu) (net 8)) (via (at 73.16501 187.071) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 8)) (segment (start 90.53 184.15) (end 87.609 187.071) (width 0.16) (layer F.Cu) (net 8)) (segment (start 69.124008 187.098006) (end 73.138004 187.098006) (width 0.16) (layer B.Cu) (net 8)) (segment (start 87.609 187.071) (end 73.730695 187.071) (width 0.16) (layer F.Cu) (net 8)) (segment (start 91.505 184.15) (end 90.53 184.15) (width 0.16) (layer F.Cu) (net 8)) (segment (start 73.138004 187.098006) (end 73.16501 187.071) (width 0.16) (layer B.Cu) (net 8)) (segment (start 73.730695 187.071) (end 73.16501 187.071) (width 0.16) (layer F.Cu) (net 8)) (segment (start 90.53 54.61) (end 88.262999 56.877001) (width 0.16) (layer F.Cu) (net 8)) (segment (start 73.640013 56.877001) (end 72.22401 58.293004) (width 0.16) (layer F.Cu) (net 8)) (segment (start 91.505 54.61) (end 90.53 54.61) (width 0.16) (layer F.Cu) (net 8)) (segment (start 69.088 58.293) (end 72.224006 58.293) (width 0.16) (layer B.Cu) (net 8)) (segment (start 72.224006 58.293) (end 72.22401 58.293004) (width 0.16) (layer B.Cu) (net 8)) (segment (start 88.262999 56.877001) (end 73.640013 56.877001) (width 0.16) (layer F.Cu) (net 8)) (via (at 72.22401 58.293004) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 8)) (segment (start 34.29 210.82) (end 34.29 211.1775) (width 0.16) (layer F.Cu) (net 8)) (segment (start 31.75 208.28) (end 34.29 210.82) (width 0.16) (layer F.Cu) (net 8)) (segment (start 31.75 205.74) (end 31.75 208.28) (width 0.35) (layer F.Cu) (net 8)) (via (at 65.278 187.071) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 8)) (segment (start 65.305006 187.098006) (end 65.278 187.071) (width 0.16) (layer B.Cu) (net 8)) (segment (start 69.124008 187.098006) (end 65.305006 187.098006) (width 0.16) (layer B.Cu) (net 8)) (segment (start 43.688 193.802) (end 43.434 194.056) (width 0.16) (layer F.Cu) (net 8)) (segment (start 58.547 193.802) (end 43.688 193.802) (width 0.16) (layer F.Cu) (net 8)) (segment (start 65.278 187.071) (end 58.547 193.802) (width 0.16) (layer F.Cu) (net 8)) (segment (start 43.434 194.056) (end 31.75 205.74) (width 0.16) (layer F.Cu) (net 8)) (segment (start 53.275 115.57) (end 53.275 116.84) (width 0.16) (layer F.Cu) (net 9) (status 30)) (via (at 61.468 122.174) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 9)) (segment (start 66.802006 122.174004) (end 61.468004 122.174004) (width 0.16) (layer B.Cu) (net 9)) (segment (start 61.468004 122.174004) (end 61.468 122.174) (width 0.16) (layer B.Cu) (net 9)) (segment (start 54.229 122.174) (end 61.468 122.174) (width 0.16) (layer F.Cu) (net 9)) (segment (start 51.816 119.761) (end 54.229 122.174) (width 0.16) (layer F.Cu) (net 9)) (segment (start 51.816 117.324) (end 51.816 119.761) (width 0.16) (layer F.Cu) (net 9)) (segment (start 53.275 116.84) (end 52.3 116.84) (width 0.16) (layer F.Cu) (net 9) (status 30)) (segment (start 52.3 116.84) (end 51.816 117.324) (width 0.16) (layer F.Cu) (net 9) (status 10)) (via (at 67.564 122.174) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 9)) (segment (start 66.80201 122.174) (end 66.802006 122.174004) (width 0.16) (layer B.Cu) (net 9)) (segment (start 67.564 122.174) (end 66.80201 122.174) (width 0.16) (layer B.Cu) (net 9)) (segment (start 39.37 205.74) (end 39.37 208.28) (width 0.35) (layer F.Cu) (net 9)) (segment (start 67.564 193.167) (end 58.293 202.438) (width 0.16) (layer F.Cu) (net 9)) (segment (start 67.564 122.174) (end 67.564 193.167) (width 0.16) (layer F.Cu) (net 9)) (segment (start 42.672 202.438) (end 39.37 205.74) (width 0.16) (layer F.Cu) (net 9)) (segment (start 51.308 202.438) (end 42.672 202.438) (width 0.16) (layer F.Cu) (net 9)) (segment (start 58.293 202.438) (end 51.308 202.438) (width 0.16) (layer F.Cu) (net 9)) (segment (start 51.308 202.438) (end 50.8 202.438) (width 0.16) (layer F.Cu) (net 9)) (segment (start 39.37 185.42) (end 39.37 187.96) (width 0.35) (layer F.Cu) (net 10)) (segment (start 39.37 167.005) (end 38.1 165.735) (width 0.16) (layer F.Cu) (net 10)) (segment (start 39.37 185.42) (end 39.37 167.005) (width 0.16) (layer F.Cu) (net 10)) (segment (start 98.745 120.65) (end 99.06 120.965) (width 0.35) (layer F.Cu) (net 11) (tstamp 606F2F35) (status 30)) (segment (start 96.455 120.65) (end 98.745 120.65) (width 0.35) (layer F.Cu) (net 11) (tstamp 606F2365) (status 30)) (segment (start 98.745 153.035) (end 99.06 153.35) (width 0.35) (layer F.Cu) (net 11) (tstamp 606F2DC1) (status 30)) (segment (start 96.455 153.035) (end 98.745 153.035) (width 0.35) (layer F.Cu) (net 11) (tstamp 606F1CD5) (status 30)) (segment (start 98.745 185.42) (end 99.06 185.735) (width 0.35) (layer F.Cu) (net 11) (tstamp 606F1CC3) (status 30)) (segment (start 96.455 185.42) (end 98.745 185.42) (width 0.35) (layer F.Cu) (net 11) (tstamp 606F1975) (status 30)) (segment (start 96.455 88.265) (end 98.745 88.265) (width 0.35) (layer F.Cu) (net 11) (tstamp 606F3D60) (status 30)) (segment (start 98.745 88.265) (end 99.06 88.58) (width 0.35) (layer F.Cu) (net 11) (tstamp 606F31A5) (status 30)) (segment (start 98.745 55.88) (end 99.06 56.195) (width 0.35) (layer F.Cu) (net 11) (tstamp 606F30E8) (status 30)) (segment (start 96.455 55.88) (end 98.745 55.88) (width 0.35) (layer F.Cu) (net 11) (tstamp 606F32A4) (status 30)) (segment (start 95.756868 88.265) (end 96.455 88.265) (width 0.16) (layer F.Cu) (net 11) (tstamp 606F2E4B) (status 30)) (segment (start 91.505 85.725) (end 93.216868 85.725) (width 0.16) (layer F.Cu) (net 11) (tstamp 606F278B) (status 10)) (segment (start 93.216868 85.725) (end 95.756868 88.265) (width 0.16) (layer F.Cu) (net 11) (tstamp 606F2788) (status 20)) (segment (start 96.141872 185.42) (end 96.455 185.42) (width 0.16) (layer F.Cu) (net 11) (tstamp 606F2872) (status 30)) (segment (start 92.331872 181.61) (end 96.141872 185.42) (width 0.16) (layer F.Cu) (net 11) (tstamp 606F1972) (status 30)) (segment (start 91.505 181.61) (end 92.331872 181.61) (width 0.16) (layer F.Cu) (net 11) (tstamp 606F2AD6) (status 30)) (segment (start 49.8875 213.0025) (end 54.61 208.28) (width 0.16) (layer F.Cu) (net 11) (tstamp 606F19C9) (status 20)) (segment (start 44.45 213.0025) (end 49.8875 213.0025) (width 0.16) (layer F.Cu) (net 11) (tstamp 606F2AE5) (status 10)) (segment (start 50.355 80.965) (end 50.375 80.985) (width 0.35) (layer F.Cu) (net 11) (status 30)) (segment (start 47.625 80.965) (end 50.355 80.965) (width 0.35) (layer F.Cu) (net 11) (status 30)) (segment (start 57.575 82.935) (end 57.575 84.235) (width 0.16) (layer F.Cu) (net 11) (status 30)) (segment (start 54.995 82.935) (end 57.575 82.935) (width 0.16) (layer F.Cu) (net 11) (status 20)) (segment (start 53.045 80.985) (end 54.995 82.935) (width 0.16) (layer F.Cu) (net 11)) (segment (start 50.375 80.985) (end 53.045 80.985) (width 0.16) (layer F.Cu) (net 11) (status 10)) (via (at 62.84522 95.86522) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 11)) (segment (start 58.396216 95.86522) (end 62.84522 95.86522) (width 0.35) (layer F.Cu) (net 11)) (segment (start 46.188181 83.657185) (end 58.396216 95.86522) (width 0.35) (layer F.Cu) (net 11)) (segment (start 47.625 80.965) (end 46.188181 82.401819) (width 0.35) (layer F.Cu) (net 11) (status 10)) (segment (start 46.188181 82.401819) (end 46.188181 83.657185) (width 0.35) (layer F.Cu) (net 11)) (segment (start 58.25 115.085) (end 58.1 114.935) (width 0.35) (layer F.Cu) (net 11) (status 30)) (segment (start 58.25 117.16) (end 58.25 115.085) (width 0.35) (layer F.Cu) (net 11) (status 30)) (segment (start 58.1 114.935) (end 62.713979 114.935) (width 0.35) (layer F.Cu) (net 11) (status 10)) (via (at 62.713979 114.935) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 11)) (segment (start 97.462013 90.177987) (end 99.06 88.58) (width 0.35) (layer F.Cu) (net 11)) (segment (start 75.942017 90.177987) (end 97.462013 90.177987) (width 0.35) (layer F.Cu) (net 11)) (segment (start 72.39 93.730004) (end 75.942017 90.177987) (width 0.35) (layer F.Cu) (net 11)) (segment (start 72.39 89.154) (end 72.39 93.730004) (width 0.35) (layer F.Cu) (net 11)) (segment (start 72.28278 95.86522) (end 72.39 95.758) (width 0.35) (layer B.Cu) (net 11)) (segment (start 62.84522 95.86522) (end 72.28278 95.86522) (width 0.35) (layer B.Cu) (net 11)) (via (at 72.39 95.758) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 11)) (via (at 72.39 114.807976) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 11)) (segment (start 72.39 89.154) (end 72.39 114.807976) (width 0.35) (layer F.Cu) (net 11)) (segment (start 62.713979 114.935) (end 72.262976 114.935) (width 0.35) (layer B.Cu) (net 11)) (segment (start 72.262976 114.935) (end 72.39 114.807976) (width 0.35) (layer B.Cu) (net 11)) (segment (start 76.708 122.555) (end 72.39 126.873) (width 0.35) (layer F.Cu) (net 11)) (segment (start 97.47 122.555) (end 76.708 122.555) (width 0.35) (layer F.Cu) (net 11)) (segment (start 99.06 120.965) (end 97.47 122.555) (width 0.35) (layer F.Cu) (net 11)) (segment (start 75.963014 154.94) (end 72.39 158.513014) (width 0.35) (layer F.Cu) (net 11)) (segment (start 97.47 154.94) (end 75.963014 154.94) (width 0.35) (layer F.Cu) (net 11)) (segment (start 99.06 153.35) (end 97.47 154.94) (width 0.35) (layer F.Cu) (net 11)) (segment (start 72.39 200.787) (end 64.897 208.28) (width 0.35) (layer F.Cu) (net 11)) (segment (start 72.39 190.246) (end 72.39 200.787) (width 0.35) (layer F.Cu) (net 11)) (segment (start 64.897 208.28) (end 54.61 208.28) (width 0.35) (layer F.Cu) (net 11)) (segment (start 72.771 189.865) (end 72.39 190.246) (width 0.35) (layer F.Cu) (net 11)) (segment (start 94.93 189.865) (end 72.771 189.865) (width 0.35) (layer F.Cu) (net 11)) (segment (start 99.06 185.735) (end 94.93 189.865) (width 0.35) (layer F.Cu) (net 11)) (segment (start 72.39 158.877) (end 72.39 126.873) (width 0.35) (layer F.Cu) (net 11)) (segment (start 72.39 190.246) (end 72.39 158.877) (width 0.35) (layer F.Cu) (net 11)) (segment (start 72.39 61.463996) (end 72.39 83.942996) (width 0.35) (layer F.Cu) (net 11)) (segment (start 72.376998 83.955998) (end 72.376998 84.954002) (width 0.35) (layer F.Cu) (net 11)) (segment (start 99.06 56.195) (end 97.47 57.785) (width 0.35) (layer F.Cu) (net 11)) (segment (start 72.39 83.942996) (end 72.376998 83.955998) (width 0.35) (layer F.Cu) (net 11)) (segment (start 97.47 57.785) (end 76.068996 57.785) (width 0.35) (layer F.Cu) (net 11)) (segment (start 72.39 84.967004) (end 72.39 89.154) (width 0.35) (layer F.Cu) (net 11)) (segment (start 76.068996 57.785) (end 72.39 61.463996) (width 0.35) (layer F.Cu) (net 11)) (segment (start 72.376998 84.954002) (end 72.39 84.967004) (width 0.35) (layer F.Cu) (net 11)) (segment (start 72.376998 114.820978) (end 72.39 114.807976) (width 0.35) (layer F.Cu) (net 11)) (segment (start 72.376998 126.859998) (end 72.376998 114.820978) (width 0.35) (layer F.Cu) (net 11)) (segment (start 72.39 126.873) (end 72.376998 126.859998) (width 0.35) (layer F.Cu) (net 11)) (segment (start 34.29 213.0025) (end 37.465 213.0025) (width 0.16) (layer F.Cu) (net 11)) (segment (start 37.465 213.0025) (end 39.7275 213.0025) (width 0.16) (layer F.Cu) (net 11)) (segment (start 39.7275 213.0025) (end 44.45 213.0025) (width 0.16) (layer F.Cu) (net 11)) (segment (start 39.37 213.0025) (end 39.7275 213.0025) (width 0.16) (layer F.Cu) (net 11)) (segment (start 54.61 205.74) (end 54.61 208.28) (width 0.35) (layer F.Cu) (net 11)) (segment (start 44.21 143.905) (end 50.825 143.905) (width 0.5) (layer F.Cu) (net 12) (status 20)) (segment (start 39.37 139.065) (end 44.21 143.905) (width 0.5) (layer F.Cu) (net 12) (status 10)) (segment (start 53.025 146.105) (end 50.825 143.905) (width 0.5) (layer F.Cu) (net 12) (status 30)) (segment (start 53.025 146.685) (end 53.025 146.105) (width 0.5) (layer F.Cu) (net 12) (status 30)) (segment (start 53.025 149.915) (end 51.175 151.765) (width 0.5) (layer F.Cu) (net 12) (status 20)) (segment (start 53.025 146.685) (end 53.025 149.915) (width 0.5) (layer F.Cu) (net 12) (status 10)) (via (at 66.04 54.864) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 13)) (via (at 66.04 56.64201) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 13)) (segment (start 66.04 54.864) (end 66.04 56.64201) (width 0.16) (layer B.Cu) (net 13)) (segment (start 57.575 77.085) (end 58.61 77.085) (width 0.16) (layer F.Cu) (net 13)) (segment (start 58.61 77.085) (end 66.04 69.655) (width 0.16) (layer F.Cu) (net 13)) (segment (start 66.04 69.655) (end 66.04 56.64201) (width 0.16) (layer F.Cu) (net 13)) (segment (start 112.6725 36.83) (end 112.6725 34.29) (width 0.16) (layer F.Cu) (net 13)) (segment (start 66.04 52.265001) (end 66.04 54.864) (width 0.16) (layer F.Cu) (net 13)) (segment (start 65.473599 52.265001) (end 66.04 52.265001) (width 0.16) (layer F.Cu) (net 13)) (segment (start 64.859999 51.651401) (end 65.473599 52.265001) (width 0.16) (layer F.Cu) (net 13)) (segment (start 65.473599 49.904999) (end 64.859999 50.518599) (width 0.16) (layer F.Cu) (net 13)) (segment (start 66.04 49.904999) (end 65.473599 49.904999) (width 0.16) (layer F.Cu) (net 13)) (segment (start 66.04 36.83) (end 66.04 49.904999) (width 0.16) (layer F.Cu) (net 13)) (segment (start 64.859999 50.518599) (end 64.859999 51.651401) (width 0.16) (layer F.Cu) (net 13)) (segment (start 77.007002 25.862998) (end 66.04 36.83) (width 0.16) (layer F.Cu) (net 13)) (segment (start 104.245498 25.862998) (end 77.007002 25.862998) (width 0.16) (layer F.Cu) (net 13)) (segment (start 112.6725 34.29) (end 104.245498 25.862998) (width 0.16) (layer F.Cu) (net 13)) (via (at 67.564 61.976) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 14)) (segment (start 67.564 61.976) (end 73.16501 61.976) (width 0.16) (layer B.Cu) (net 14)) (via (at 73.16501 61.976) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 14)) (segment (start 66.802 62.738) (end 67.564 61.976) (width 0.16) (layer F.Cu) (net 14)) (segment (start 66.802 69.543) (end 66.802 62.738) (width 0.16) (layer F.Cu) (net 14)) (segment (start 58.61 77.735) (end 66.802 69.543) (width 0.16) (layer F.Cu) (net 14)) (segment (start 57.575 77.735) (end 58.61 77.735) (width 0.16) (layer F.Cu) (net 14)) (segment (start 112.6725 69.215) (end 112.6725 66.675) (width 0.16) (layer F.Cu) (net 14)) (segment (start 76.893012 58.247998) (end 73.16501 61.976) (width 0.16) (layer F.Cu) (net 14)) (segment (start 104.245498 58.247998) (end 76.893012 58.247998) (width 0.16) (layer F.Cu) (net 14)) (segment (start 112.6725 66.675) (end 104.245498 58.247998) (width 0.16) (layer F.Cu) (net 14)) (via (at 66.802 94.234) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 15)) (segment (start 66.802 86.36) (end 58.827 78.385) (width 0.16) (layer F.Cu) (net 15)) (segment (start 58.827 78.385) (end 57.575 78.385) (width 0.16) (layer F.Cu) (net 15) (status 20)) (segment (start 66.802 94.234) (end 66.802 86.36) (width 0.16) (layer F.Cu) (net 15)) (segment (start 66.802 94.234) (end 73.03801 94.234) (width 0.16) (layer B.Cu) (net 15)) (via (at 73.16501 94.107) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 15)) (segment (start 73.03801 94.234) (end 73.16501 94.107) (width 0.16) (layer B.Cu) (net 15)) (segment (start 76.639012 90.632998) (end 73.16501 94.107) (width 0.16) (layer F.Cu) (net 15)) (segment (start 104.245498 90.632998) (end 76.639012 90.632998) (width 0.16) (layer F.Cu) (net 15)) (segment (start 112.6725 99.06) (end 104.245498 90.632998) (width 0.16) (layer F.Cu) (net 15)) (segment (start 112.6725 101.6) (end 112.6725 99.06) (width 0.16) (layer F.Cu) (net 15)) (via (at 65.35999 127.635) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 16)) (segment (start 65.278 127.55301) (end 65.35999 127.635) (width 0.16) (layer F.Cu) (net 16)) (segment (start 65.278 122.174) (end 65.278 127.55301) (width 0.16) (layer F.Cu) (net 16)) (segment (start 66.802 120.65) (end 65.278 122.174) (width 0.16) (layer F.Cu) (net 16)) (segment (start 66.802 95.25) (end 66.802 120.65) (width 0.16) (layer F.Cu) (net 16)) (segment (start 66.04 94.488) (end 66.802 95.25) (width 0.16) (layer F.Cu) (net 16)) (segment (start 66.04 86.36) (end 66.04 94.488) (width 0.16) (layer F.Cu) (net 16)) (segment (start 58.715 79.035) (end 66.04 86.36) (width 0.16) (layer F.Cu) (net 16)) (segment (start 57.575 79.035) (end 58.715 79.035) (width 0.16) (layer F.Cu) (net 16) (status 10)) (via (at 73.16501 127.560601) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 16)) (segment (start 65.35999 127.635) (end 73.090611 127.635) (width 0.16) (layer B.Cu) (net 16)) (segment (start 73.090611 127.635) (end 73.16501 127.560601) (width 0.16) (layer B.Cu) (net 16)) (segment (start 77.707613 123.017998) (end 73.16501 127.560601) (width 0.16) (layer F.Cu) (net 16)) (segment (start 104.245498 123.017998) (end 77.707613 123.017998) (width 0.16) (layer F.Cu) (net 16)) (segment (start 112.6725 131.445) (end 104.245498 123.017998) (width 0.16) (layer F.Cu) (net 16)) (segment (start 112.6725 133.985) (end 112.6725 131.445) (width 0.16) (layer F.Cu) (net 16)) (via (at 65.278 159.512004) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 17)) (segment (start 64.516 128.27) (end 65.278 129.032) (width 0.16) (layer F.Cu) (net 17)) (segment (start 64.516 122.174) (end 64.516 128.27) (width 0.16) (layer F.Cu) (net 17)) (segment (start 66.04 120.65) (end 64.516 122.174) (width 0.16) (layer F.Cu) (net 17)) (segment (start 66.04 95.25) (end 66.04 120.65) (width 0.16) (layer F.Cu) (net 17)) (segment (start 65.278 86.353) (end 65.278 94.488) (width 0.16) (layer F.Cu) (net 17)) (segment (start 65.278 129.032) (end 65.278 159.512004) (width 0.16) (layer F.Cu) (net 17)) (segment (start 58.61 79.685) (end 65.278 86.353) (width 0.16) (layer F.Cu) (net 17)) (segment (start 65.278 94.488) (end 66.04 95.25) (width 0.16) (layer F.Cu) (net 17)) (segment (start 57.575 79.685) (end 58.61 79.685) (width 0.16) (layer F.Cu) (net 17) (status 10)) (segment (start 65.278 159.512004) (end 73.165006 159.512004) (width 0.16) (layer B.Cu) (net 17)) (segment (start 73.165006 159.512004) (end 73.16501 159.512) (width 0.16) (layer B.Cu) (net 17)) (via (at 73.16501 159.512) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 17)) (segment (start 77.274012 155.402998) (end 73.16501 159.512) (width 0.16) (layer F.Cu) (net 17)) (segment (start 104.245498 155.402998) (end 77.274012 155.402998) (width 0.16) (layer F.Cu) (net 17)) (segment (start 112.6725 163.83) (end 104.245498 155.402998) (width 0.16) (layer F.Cu) (net 17)) (segment (start 112.6725 166.37) (end 112.6725 163.83) (width 0.16) (layer F.Cu) (net 17)) (segment (start 55.97 174.385) (end 51.75 178.605) (width 0.16) (layer F.Cu) (net 18) (status 20)) (segment (start 55.97 173.685) (end 55.97 174.385) (width 0.16) (layer F.Cu) (net 18) (status 10)) (segment (start 44.45 185.42) (end 44.45 187.96) (width 0.35) (layer F.Cu) (net 19)) (segment (start 38.1 188.436402) (end 38.1 170.815) (width 0.16) (layer F.Cu) (net 19)) (segment (start 38.803599 189.140001) (end 38.1 188.436402) (width 0.16) (layer F.Cu) (net 19)) (segment (start 43.269999 189.140001) (end 38.803599 189.140001) (width 0.16) (layer F.Cu) (net 19)) (segment (start 44.45 187.96) (end 43.269999 189.140001) (width 0.16) (layer F.Cu) (net 19)) (segment (start 59.9675 83.6425) (end 59.9675 86.995) (width 0.16) (layer F.Cu) (net 20) (status 20)) (segment (start 58.61 82.285) (end 59.9675 83.6425) (width 0.16) (layer F.Cu) (net 20)) (segment (start 57.575 82.285) (end 58.61 82.285) (width 0.16) (layer F.Cu) (net 20) (status 10)) (segment (start 63.754 88.9) (end 63.754 94.488) (width 0.16) (layer F.Cu) (net 20)) (segment (start 63.754 94.488) (end 64.516 95.25) (width 0.16) (layer F.Cu) (net 20)) (segment (start 64.516 95.25) (end 64.516 118.364) (width 0.16) (layer F.Cu) (net 20)) (segment (start 62.23 120.65) (end 62.23 128.27) (width 0.16) (layer F.Cu) (net 20)) (segment (start 60.287999 189.140001) (end 48.170001 189.140001) (width 0.16) (layer F.Cu) (net 20)) (segment (start 61.849 86.995) (end 63.754 88.9) (width 0.16) (layer F.Cu) (net 20)) (segment (start 64.516 118.364) (end 62.23 120.65) (width 0.16) (layer F.Cu) (net 20)) (segment (start 62.992 129.032) (end 62.992 159.766) (width 0.16) (layer F.Cu) (net 20)) (segment (start 62.992 159.766) (end 63.754 160.528) (width 0.16) (layer F.Cu) (net 20)) (segment (start 48.170001 189.140001) (end 46.99 187.96) (width 0.16) (layer F.Cu) (net 20)) (segment (start 59.9675 86.995) (end 61.849 86.995) (width 0.16) (layer F.Cu) (net 20)) (segment (start 62.23 128.27) (end 62.992 129.032) (width 0.16) (layer F.Cu) (net 20)) (segment (start 63.754 160.528) (end 63.754 185.674) (width 0.16) (layer F.Cu) (net 20)) (segment (start 63.754 185.674) (end 60.287999 189.140001) (width 0.16) (layer F.Cu) (net 20)) (segment (start 46.99 185.42) (end 46.99 187.96) (width 0.35) (layer F.Cu) (net 20)) (segment (start 45.37 78.385) (end 50.375 78.385) (width 0.16) (layer F.Cu) (net 21) (status 20)) (segment (start 43.82 76.835) (end 45.37 78.385) (width 0.16) (layer F.Cu) (net 21) (status 10)) (segment (start 44.16 79.035) (end 50.375 79.035) (width 0.16) (layer F.Cu) (net 22) (status 30)) (segment (start 43.82 79.375) (end 44.16 79.035) (width 0.16) (layer F.Cu) (net 22) (status 30)) (segment (start 46.05 79.685) (end 50.375 79.685) (width 0.16) (layer F.Cu) (net 23) (status 20)) (segment (start 43.82 81.915) (end 46.05 79.685) (width 0.16) (layer F.Cu) (net 23) (status 10)) (segment (start 49.420998 80.335) (end 50.375 80.335) (width 0.16) (layer F.Cu) (net 24) (status 20)) (segment (start 49.270988 80.18499) (end 49.420998 80.335) (width 0.16) (layer F.Cu) (net 24)) (segment (start 46.93046 80.18499) (end 49.270988 80.18499) (width 0.16) (layer F.Cu) (net 24)) (segment (start 45.72 81.39545) (end 46.93046 80.18499) (width 0.16) (layer F.Cu) (net 24)) (segment (start 45.72 82.555) (end 45.72 81.39545) (width 0.16) (layer F.Cu) (net 24)) (segment (start 43.82 84.455) (end 45.72 82.555) (width 0.16) (layer F.Cu) (net 24) (status 10)) (segment (start 36.83 207.264) (end 36.83 208.28) (width 0.16) (layer F.Cu) (net 25) (status 20)) (via (at 65.278 69.215) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 25)) (segment (start 59.625 69.215) (end 65.278 69.215) (width 0.16) (layer F.Cu) (net 25)) (via (at 67.564 69.341978) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 25)) (segment (start 65.278 69.215) (end 67.437022 69.215) (width 0.16) (layer B.Cu) (net 25)) (segment (start 67.437022 69.215) (end 67.564 69.341978) (width 0.16) (layer B.Cu) (net 25)) (segment (start 36.83 205.74) (end 36.83 208.28) (width 0.35) (layer F.Cu) (net 25)) (segment (start 67.564 120.65) (end 67.564 69.341978) (width 0.16) (layer F.Cu) (net 25)) (segment (start 66.04 192.278) (end 66.04 122.174) (width 0.16) (layer F.Cu) (net 25)) (segment (start 66.04 122.174) (end 67.564 120.65) (width 0.16) (layer F.Cu) (net 25)) (segment (start 57.404 200.914) (end 66.04 192.278) (width 0.16) (layer F.Cu) (net 25)) (segment (start 41.656 200.914) (end 36.83 205.74) (width 0.16) (layer F.Cu) (net 25)) (segment (start 51.054 200.914) (end 41.656 200.914) (width 0.16) (layer F.Cu) (net 25)) (segment (start 50.8 200.914) (end 51.054 200.914) (width 0.16) (layer F.Cu) (net 25)) (segment (start 51.054 200.914) (end 57.404 200.914) (width 0.16) (layer F.Cu) (net 25)) (segment (start 31.75 189.103) (end 31.75 187.96) (width 0.16) (layer F.Cu) (net 26)) (segment (start 32.385 189.738) (end 31.75 189.103) (width 0.16) (layer F.Cu) (net 26)) (segment (start 57.575 80.985) (end 59.141 80.985) (width 0.16) (layer F.Cu) (net 26)) (segment (start 59.141 80.985) (end 64.516 86.36) (width 0.16) (layer F.Cu) (net 26)) (segment (start 64.516 86.36) (end 64.516 94.488) (width 0.16) (layer F.Cu) (net 26)) (segment (start 64.516 94.488) (end 65.278 95.25) (width 0.16) (layer F.Cu) (net 26)) (segment (start 65.278 95.25) (end 65.278 118.364) (width 0.16) (layer F.Cu) (net 26)) (segment (start 65.278 118.364) (end 62.992 120.65) (width 0.16) (layer F.Cu) (net 26)) (segment (start 62.992 120.65) (end 62.992 128.27) (width 0.16) (layer F.Cu) (net 26)) (segment (start 63.754 159.766) (end 64.516 160.528) (width 0.16) (layer F.Cu) (net 26)) (segment (start 63.754 129.032) (end 63.754 159.766) (width 0.16) (layer F.Cu) (net 26)) (segment (start 62.992 128.27) (end 63.754 129.032) (width 0.16) (layer F.Cu) (net 26)) (segment (start 64.516 160.528) (end 64.516 185.674) (width 0.16) (layer F.Cu) (net 26)) (segment (start 64.516 185.674) (end 60.452 189.738) (width 0.16) (layer F.Cu) (net 26)) (segment (start 60.452 189.738) (end 32.385 189.738) (width 0.16) (layer F.Cu) (net 26)) (segment (start 31.75 185.42) (end 31.75 187.96) (width 0.35) (layer F.Cu) (net 26)) (segment (start 50.8 184.15) (end 49.53 185.42) (width 0.16) (layer F.Cu) (net 27) (status 20)) (segment (start 50.8 180.805) (end 50.8 184.15) (width 0.16) (layer F.Cu) (net 27) (status 10)) (segment (start 49.53 185.42) (end 49.53 187.96) (width 0.35) (layer F.Cu) (net 27)) (segment (start 54.675 71.211901) (end 54.675 69.215) (width 0.5) (layer F.Cu) (net 28) (status 20)) (segment (start 45.030012 73.605012) (end 52.281889 73.605012) (width 0.5) (layer F.Cu) (net 28)) (segment (start 52.281889 73.605012) (end 54.675 71.211901) (width 0.5) (layer F.Cu) (net 28)) (segment (start 39.37 67.945) (end 45.030012 73.605012) (width 0.5) (layer F.Cu) (net 28) (status 10)) (segment (start 115.57 37.465) (end 118.4425 37.465) (width 0.16) (layer F.Cu) (net 30) (tstamp 606F32A1) (status 20)) (segment (start 111.76 41.275) (end 115.57 37.465) (width 0.16) (layer F.Cu) (net 30) (tstamp 606F329E) (status 10)) (segment (start 46.99 37.465) (end 52.07 32.385) (width 0.5) (layer F.Cu) (net 31) (status 20)) (segment (start 39.37 37.465) (end 46.99 37.465) (width 0.5) (layer F.Cu) (net 31) (status 10)) (segment (start 54.61 32.385) (end 52.07 32.385) (width 0.5) (layer F.Cu) (net 31) (status 30)) (segment (start 62.992 172.607) (end 62.992 185.166) (width 0.16) (layer F.Cu) (net 32)) (segment (start 60.87 170.485) (end 62.992 172.607) (width 0.16) (layer F.Cu) (net 32) (status 10)) (via (at 62.992 185.166) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 32)) (via (at 73.16501 185.166) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 32)) (segment (start 87.935001 185.839001) (end 87.879001 185.895001) (width 0.16) (layer F.Cu) (net 32)) (segment (start 87.935001 182.945001) (end 87.935001 185.839001) (width 0.16) (layer F.Cu) (net 32)) (segment (start 87.879001 185.895001) (end 73.894011 185.895001) (width 0.16) (layer F.Cu) (net 32)) (segment (start 73.894011 185.895001) (end 73.16501 185.166) (width 0.16) (layer F.Cu) (net 32)) (segment (start 86.905 181.915) (end 87.935001 182.945001) (width 0.16) (layer F.Cu) (net 32)) (segment (start 62.992 185.166) (end 73.16501 185.166) (width 0.16) (layer B.Cu) (net 32)) (via (at 68.326 183.515) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 33) (tstamp 606F23A1)) (segment (start 68.326 183.515) (end 68.326 181.991) (width 0.16) (layer F.Cu) (net 33) (tstamp 606F1A02)) (segment (start 68.326 181.991) (end 68.326 182.245) (width 0.16) (layer F.Cu) (net 33) (tstamp 606F3568)) (segment (start 68.326 181.991) (end 68.326 152.908) (width 0.16) (layer F.Cu) (net 33)) (via (at 68.326 152.908) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 33)) (segment (start 68.326 152.908) (end 73.16501 152.908) (width 0.16) (layer B.Cu) (net 33)) (segment (start 87.935001 149.650001) (end 87.935001 153.454001) (width 0.16) (layer F.Cu) (net 33)) (segment (start 73.767011 153.510001) (end 73.16501 152.908) (width 0.16) (layer F.Cu) (net 33)) (segment (start 86.905 149.53) (end 87.815 149.53) (width 0.16) (layer F.Cu) (net 33)) (segment (start 87.935001 153.454001) (end 87.879001 153.510001) (width 0.16) (layer F.Cu) (net 33)) (segment (start 87.879001 153.510001) (end 73.767011 153.510001) (width 0.16) (layer F.Cu) (net 33)) (via (at 73.16501 152.908) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 33)) (segment (start 87.815 149.53) (end 87.935001 149.650001) (width 0.16) (layer F.Cu) (net 33)) (segment (start 74.76501 185.115) (end 73.16501 183.515) (width 0.16) (layer F.Cu) (net 33)) (via (at 73.16501 183.515) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 33)) (segment (start 82.005 185.115) (end 74.76501 185.115) (width 0.16) (layer F.Cu) (net 33)) (segment (start 68.326 183.515) (end 73.16501 183.515) (width 0.16) (layer B.Cu) (net 33)) (segment (start 68.326 150.749) (end 68.326 151.003) (width 0.16) (layer F.Cu) (net 34)) (via (at 68.326 151.130014) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 34)) (segment (start 68.326 151.003) (end 68.326 151.130014) (width 0.16) (layer F.Cu) (net 34)) (via (at 68.326 120.649998) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 34)) (segment (start 68.326 151.003) (end 68.326 120.649998) (width 0.16) (layer F.Cu) (net 34)) (segment (start 87.879001 121.125001) (end 73.640011 121.125001) (width 0.16) (layer F.Cu) (net 34)) (segment (start 73.640011 121.125001) (end 73.16501 120.65) (width 0.16) (layer F.Cu) (net 34)) (segment (start 86.905 117.145) (end 87.935001 118.175001) (width 0.16) (layer F.Cu) (net 34)) (segment (start 68.326 120.649998) (end 73.165008 120.649998) (width 0.16) (layer B.Cu) (net 34)) (segment (start 87.935001 118.175001) (end 87.935001 121.069001) (width 0.16) (layer F.Cu) (net 34)) (segment (start 73.165008 120.649998) (end 73.16501 120.65) (width 0.16) (layer B.Cu) (net 34)) (segment (start 87.935001 121.069001) (end 87.879001 121.125001) (width 0.16) (layer F.Cu) (net 34)) (via (at 73.16501 120.65) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 34)) (segment (start 73.164996 151.130014) (end 73.16501 151.13) (width 0.16) (layer B.Cu) (net 34)) (segment (start 68.326 151.130014) (end 73.164996 151.130014) (width 0.16) (layer B.Cu) (net 34)) (segment (start 74.76501 152.73) (end 73.16501 151.13) (width 0.16) (layer F.Cu) (net 34)) (segment (start 82.005 152.73) (end 74.76501 152.73) (width 0.16) (layer F.Cu) (net 34)) (via (at 73.16501 151.13) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 34)) (via (at 68.326 88.265) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 35) (tstamp 606F1A95)) (via (at 68.326 118.999) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 35) (tstamp 606F1D47)) (segment (start 68.326 116.205) (end 68.326 116.459) (width 0.16) (layer F.Cu) (net 35) (tstamp 606F2725)) (segment (start 68.326 118.999) (end 68.326 116.205) (width 0.16) (layer F.Cu) (net 35) (tstamp 606F2245)) (segment (start 68.326 88.265) (end 68.326 116.205) (width 0.16) (layer F.Cu) (net 35) (tstamp 606F357A)) (via (at 73.16501 88.265411) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 35)) (segment (start 86.905 84.76) (end 87.815 84.76) (width 0.16) (layer F.Cu) (net 35)) (segment (start 68.326 88.265) (end 73.164599 88.265) (width 0.16) (layer B.Cu) (net 35)) (segment (start 87.815 84.76) (end 87.935001 84.880001) (width 0.16) (layer F.Cu) (net 35)) (segment (start 87.935001 84.880001) (end 87.935001 88.684001) (width 0.16) (layer F.Cu) (net 35)) (segment (start 87.935001 88.684001) (end 87.879001 88.740001) (width 0.16) (layer F.Cu) (net 35)) (segment (start 87.879001 88.740001) (end 73.6396 88.740001) (width 0.16) (layer F.Cu) (net 35)) (segment (start 73.6396 88.740001) (end 73.16501 88.265411) (width 0.16) (layer F.Cu) (net 35)) (segment (start 73.164599 88.265) (end 73.16501 88.265411) (width 0.16) (layer B.Cu) (net 35)) (segment (start 82.005 120.345) (end 74.51101 120.345) (width 0.16) (layer F.Cu) (net 35)) (segment (start 74.51101 120.345) (end 73.16501 118.999) (width 0.16) (layer F.Cu) (net 35)) (segment (start 68.326 118.999) (end 73.16501 118.999) (width 0.16) (layer B.Cu) (net 35)) (via (at 73.16501 118.999) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 35)) (segment (start 82.005 87.96) (end 81.954 88.011) (width 0.16) (layer F.Cu) (net 36) (tstamp 606F2194) (status 30)) (via (at 68.326 86.487) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 36) (tstamp 606F1C87)) (segment (start 82.005 87.96) (end 74.63801 87.96) (width 0.16) (layer F.Cu) (net 36)) (segment (start 74.63801 87.96) (end 73.16501 86.487) (width 0.16) (layer F.Cu) (net 36)) (via (at 73.16501 86.487) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 36)) (segment (start 68.326 86.487) (end 73.16501 86.487) (width 0.16) (layer B.Cu) (net 36)) (segment (start 68.326 86.487) (end 68.326 56.642) (width 0.16) (layer F.Cu) (net 36)) (via (at 68.326 56.642) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 36)) (via (at 72.136 56.642) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 36)) (segment (start 86.905 52.375) (end 87.935001 53.405001) (width 0.16) (layer F.Cu) (net 36)) (segment (start 87.935001 53.405001) (end 87.935001 56.299001) (width 0.16) (layer F.Cu) (net 36)) (segment (start 68.891685 56.642) (end 72.136 56.642) (width 0.16) (layer B.Cu) (net 36)) (segment (start 87.935001 56.299001) (end 87.879001 56.355001) (width 0.16) (layer F.Cu) (net 36)) (segment (start 87.879001 56.355001) (end 72.422999 56.355001) (width 0.16) (layer F.Cu) (net 36)) (segment (start 72.422999 56.355001) (end 72.136 56.642) (width 0.16) (layer F.Cu) (net 36)) (segment (start 68.326 56.642) (end 68.891685 56.642) (width 0.16) (layer B.Cu) (net 36)) (segment (start 101.092 51.943) (end 96.582 51.943) (width 0.16) (layer F.Cu) (net 37) (tstamp 606F3298) (status 20)) (segment (start 101.854 51.181) (end 101.092 51.943) (width 0.16) (layer F.Cu) (net 37) (tstamp 606F3295)) (segment (start 96.582 51.943) (end 96.455 52.07) (width 0.16) (layer F.Cu) (net 37) (tstamp 606F3292) (status 30)) (segment (start 101.854 46.355) (end 101.854 51.181) (width 0.16) (layer F.Cu) (net 37) (tstamp 606F328F) (status 10)) (segment (start 102.35 46.355) (end 101.854 46.355) (width 0.16) (layer F.Cu) (net 37) (tstamp 606F328C) (status 30)) (segment (start 117.67499 56.31501) (end 117.67499 50.93251) (width 0.16) (layer F.Cu) (net 37) (tstamp 606F3289)) (segment (start 116.84 57.15) (end 117.67499 56.31501) (width 0.16) (layer F.Cu) (net 37) (tstamp 606F3286)) (segment (start 117.67499 50.93251) (end 118.4425 50.165) (width 0.16) (layer F.Cu) (net 37) (tstamp 606F3283) (status 20)) (segment (start 108.89 57.15) (end 116.84 57.15) (width 0.16) (layer F.Cu) (net 37) (tstamp 606F3280)) (segment (start 106.985 55.245) (end 108.89 57.15) (width 0.16) (layer F.Cu) (net 37) (tstamp 606F327D) (status 10)) (segment (start 120.3175 52.68) (end 120.2925 52.705) (width 0.16) (layer F.Cu) (net 38) (tstamp 606F327A) (status 30)) (segment (start 120.3175 50.165) (end 120.3175 52.68) (width 0.16) (layer F.Cu) (net 38) (tstamp 606F3277) (status 30)) (segment (start 120.3175 34.95) (end 120.2925 34.925) (width 0.16) (layer F.Cu) (net 39) (tstamp 606F3274) (status 30)) (segment (start 120.3175 37.465) (end 120.3175 34.95) (width 0.16) (layer F.Cu) (net 39) (tstamp 606F3271) (status 30)) (segment (start 41.275 116.84) (end 39.37 118.745) (width 0.16) (layer F.Cu) (net 40) (status 20)) (segment (start 48.325 116.84) (end 41.275 116.84) (width 0.16) (layer F.Cu) (net 40) (status 10)) (segment (start 39.37 118.745) (end 41.148 120.523) (width 0.16) (layer F.Cu) (net 40) (status 10)) (segment (start 41.148 127.127) (end 39.37 128.905) (width 0.16) (layer F.Cu) (net 40) (status 20)) (segment (start 41.148 120.523) (end 41.148 127.127) (width 0.16) (layer F.Cu) (net 40)) (segment (start 41.275 115.57) (end 39.37 113.665) (width 0.16) (layer F.Cu) (net 41) (status 20)) (segment (start 48.325 115.57) (end 41.275 115.57) (width 0.16) (layer F.Cu) (net 41) (status 10)) (segment (start 37.846 122.301) (end 39.37 123.825) (width 0.16) (layer F.Cu) (net 41) (status 20)) (segment (start 37.846 115.189) (end 37.846 122.301) (width 0.16) (layer F.Cu) (net 41)) (segment (start 39.37 113.665) (end 37.846 115.189) (width 0.16) (layer F.Cu) (net 41) (status 10)) (segment (start 108.3075 39.37) (end 110.8475 36.83) (width 0.16) (layer F.Cu) (net 42) (tstamp 606F326E) (status 20)) (segment (start 101.945 39.37) (end 108.3075 39.37) (width 0.16) (layer F.Cu) (net 42) (tstamp 606F326B) (status 10)) (segment (start 106.4025 34.5725) (end 106.4025 34.29) (width 0.16) (layer F.Cu) (net 43) (tstamp 606F3268) (status 30)) (segment (start 103.305 37.67) (end 106.4025 34.5725) (width 0.16) (layer F.Cu) (net 43) (tstamp 606F3265) (status 20)) (segment (start 101.945 37.67) (end 103.305 37.67) (width 0.16) (layer F.Cu) (net 43) (tstamp 606F3262) (status 10)) (segment (start 104.7125 38.52) (end 106.4025 36.83) (width 0.16) (layer F.Cu) (net 44) (tstamp 606F325F) (status 20)) (segment (start 101.945 38.52) (end 104.7125 38.52) (width 0.16) (layer F.Cu) (net 44) (tstamp 606F325C) (status 10)) (segment (start 53.275 118.11) (end 56.05 118.11) (width 0.16) (layer F.Cu) (net 45) (status 30)) (via (at 96.52 39.243) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 46) (tstamp 606F32D1) (status 30)) (via (at 95.504 39.243) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 46) (tstamp 606F32BF) (status 30)) (via (at 97.536 37.211) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 46) (tstamp 606F3259) (status 30)) (via (at 97.536 38.227) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 46) (tstamp 606F3256) (status 30)) (via (at 97.536 39.243) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 46) (tstamp 606F3253) (status 30)) (via (at 97.536 40.259) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 46) (tstamp 606F3250) (status 30)) (via (at 97.536 41.275) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 46) (tstamp 606F324D) (status 30)) (via (at 96.52 41.275) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 46) (tstamp 606F324A) (status 30)) (via (at 96.52 40.259) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 46) (tstamp 606F3247) (status 30)) (via (at 96.52 38.227) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 46) (tstamp 606F3244) (status 30)) (via (at 96.52 37.211) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 46) (tstamp 606F3241) (status 30)) (via (at 95.504 37.211) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 46) (tstamp 606F323E) (status 30)) (via (at 95.504 38.227) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 46) (tstamp 606F323B) (status 30)) (via (at 95.504 40.259) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 46) (tstamp 606F3238) (status 30)) (via (at 95.504 41.275) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 46) (tstamp 606F3235) (status 30)) (via (at 94.488 41.275) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 46) (tstamp 606F3232) (status 30)) (via (at 94.488 40.259) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 46) (tstamp 606F322F) (status 30)) (via (at 94.488 39.243) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 46) (tstamp 606F322C) (status 30)) (via (at 94.488 38.227) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 46) (tstamp 606F3229) (status 30)) (via (at 94.488 37.211) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 46) (tstamp 606F3226) (status 30)) (via (at 93.472 37.211) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 46) (tstamp 606F3223) (status 30)) (via (at 93.472 38.227) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 46) (tstamp 606F3220) (status 30)) (via (at 93.472 39.243) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 46) (tstamp 606F321D) (status 30)) (via (at 93.472 40.259) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 46) (tstamp 606F321A) (status 30)) (via (at 93.472 41.275) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 46) (tstamp 606F3217) (status 30)) (via (at 92.456 41.275) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 46) (tstamp 606F3214) (status 30)) (via (at 92.456 40.259) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 46) (tstamp 606F3211) (status 30)) (via (at 92.456 39.243) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 46) (tstamp 606F320E) (status 30)) (via (at 92.456 38.227) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 46) (tstamp 606F320B) (status 30)) (via (at 92.456 37.211) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 46) (tstamp 606F3208) (status 30)) (segment (start 101.090868 51.435) (end 95.25 51.435) (width 0.16) (layer F.Cu) (net 46) (tstamp 606F3205)) (segment (start 101.35 51.175868) (end 101.090868 51.435) (width 0.16) (layer F.Cu) (net 46) (tstamp 606F3202)) (segment (start 95.25 51.435) (end 94.996 51.689) (width 0.16) (layer F.Cu) (net 46) (tstamp 606F31FF)) (segment (start 95.48 53.34) (end 96.455 53.34) (width 0.16) (layer F.Cu) (net 46) (tstamp 606F31FC) (status 30)) (segment (start 101.35 46.855) (end 101.35 51.175868) (width 0.16) (layer F.Cu) (net 46) (tstamp 606F31F9)) (segment (start 100.85 46.355) (end 101.35 46.855) (width 0.16) (layer F.Cu) (net 46) (tstamp 606F31F6) (status 10)) (segment (start 94.996 51.689) (end 94.996 52.856) (width 0.16) (layer F.Cu) (net 46) (tstamp 606F31F3)) (segment (start 94.996 52.856) (end 95.48 53.34) (width 0.16) (layer F.Cu) (net 46) (tstamp 606F31F0) (status 20)) (segment (start 100.225 34.29) (end 95.145 39.37) (width 0.35) (layer F.Cu) (net 46) (tstamp 606F31ED) (status 20)) (segment (start 101.285 34.29) (end 100.225 34.29) (width 0.35) (layer F.Cu) (net 46) (tstamp 606F31EA) (status 10)) (segment (start 52.07 51.085) (end 54.61 51.085) (width 0.5) (layer F.Cu) (net 47) (status 30)) (segment (start 54.61 53.635) (end 56.855 55.88) (width 0.5) (layer F.Cu) (net 47) (status 20)) (segment (start 54.61 51.085) (end 54.61 53.635) (width 0.5) (layer F.Cu) (net 47) (status 10)) (segment (start 119.7375 118.745) (end 121.92 118.745) (width 0.16) (layer F.Cu) (net 48) (tstamp 606F3625)) (segment (start 118.4675 99.695) (end 121.0075 97.155) (width 0.16) (layer F.Cu) (net 48) (tstamp 606F2221) (status 10)) (segment (start 121.0075 97.155) (end 121.92 97.155) (width 0.16) (layer F.Cu) (net 48) (tstamp 606F2A70)) (segment (start 121.92 118.745) (end 121.92 97.155) (width 0.16) (layer F.Cu) (net 48) (tstamp 606F1AAD)) (segment (start 118.4675 117.475) (end 119.7375 118.745) (width 0.16) (layer F.Cu) (net 48) (tstamp 606F21CA) (status 10)) (segment (start 119.7375 151.13) (end 121.92 151.13) (width 0.16) (layer F.Cu) (net 48) (tstamp 606F21D6)) (segment (start 118.4675 132.08) (end 121.0075 129.54) (width 0.16) (layer F.Cu) (net 48) (tstamp 606F355F) (status 10)) (segment (start 121.0075 129.54) (end 121.92 129.54) (width 0.16) (layer F.Cu) (net 48) (tstamp 606F2455)) (segment (start 121.92 151.13) (end 121.92 129.54) (width 0.16) (layer F.Cu) (net 48) (tstamp 606F2D8E)) (segment (start 118.4675 149.86) (end 119.7375 151.13) (width 0.16) (layer F.Cu) (net 48) (tstamp 606F1CC0) (status 10)) (segment (start 118.4675 164.465) (end 121.0075 161.925) (width 0.16) (layer F.Cu) (net 48) (tstamp 606F1D98) (status 10)) (segment (start 121.0075 161.925) (end 121.92 161.925) (width 0.16) (layer F.Cu) (net 48) (tstamp 606F1993)) (segment (start 118.4675 67.31) (end 121.0075 64.77) (width 0.16) (layer F.Cu) (net 48) (tstamp 606F1A9B) (status 10)) (segment (start 121.0075 64.77) (end 121.92 64.77) (width 0.16) (layer F.Cu) (net 48) (tstamp 606F271F)) (segment (start 121.92 86.36) (end 121.92 64.77) (width 0.16) (layer F.Cu) (net 48) (tstamp 606F1C33)) (segment (start 119.7375 86.36) (end 121.92 86.36) (width 0.16) (layer F.Cu) (net 48) (tstamp 606F1D11)) (segment (start 118.4675 85.09) (end 119.7375 86.36) (width 0.16) (layer F.Cu) (net 48) (tstamp 606F2803) (status 10)) (segment (start 119.7375 53.975) (end 121.92 53.975) (width 0.16) (layer F.Cu) (net 48) (tstamp 606F31DE)) (segment (start 118.4675 52.705) (end 119.7375 53.975) (width 0.16) (layer F.Cu) (net 48) (tstamp 606F31DB) (status 10)) (segment (start 121.92 53.975) (end 121.92 64.77) (width 0.16) (layer F.Cu) (net 48)) (segment (start 121.92 86.36) (end 121.92 97.155) (width 0.16) (layer F.Cu) (net 48)) (segment (start 121.92 118.745) (end 121.92 129.54) (width 0.16) (layer F.Cu) (net 48)) (segment (start 121.92 151.13) (end 121.92 161.925) (width 0.16) (layer F.Cu) (net 48)) (segment (start 121.92 34.29) (end 121.92 53.975) (width 0.16) (layer F.Cu) (net 48)) (segment (start 121.285 33.655) (end 121.92 34.29) (width 0.16) (layer F.Cu) (net 48)) (segment (start 119.7375 33.655) (end 121.285 33.655) (width 0.16) (layer F.Cu) (net 48)) (segment (start 118.4675 34.925) (end 119.7375 33.655) (width 0.16) (layer F.Cu) (net 48) (status 10)) (segment (start 121.92 182.88) (end 121.92 161.925) (width 0.16) (layer F.Cu) (net 48)) (segment (start 121.285 183.515) (end 121.92 182.88) (width 0.16) (layer F.Cu) (net 48)) (segment (start 119.7375 183.515) (end 121.285 183.515) (width 0.16) (layer F.Cu) (net 48)) (segment (start 118.4675 182.245) (end 119.7375 183.515) (width 0.16) (layer F.Cu) (net 48) (status 10)) (segment (start 67.31 212.09) (end 115.57 212.09) (width 0.16) (layer F.Cu) (net 48)) (segment (start 118.4675 209.1925) (end 118.4675 182.245) (width 0.16) (layer F.Cu) (net 48)) (segment (start 115.57 212.09) (end 118.4675 209.1925) (width 0.16) (layer F.Cu) (net 48)) (via (at 96.52 71.628) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 49) (tstamp 606F25A2) (status 30)) (via (at 95.504 71.628) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 49) (tstamp 606F2182) (status 30)) (via (at 97.536 69.596) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 49) (tstamp 606F2CFB) (status 30)) (via (at 97.536 70.612) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 49) (tstamp 606F1E94) (status 30)) (via (at 97.536 71.628) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 49) (tstamp 606F294D) (status 30)) (via (at 97.536 72.644) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 49) (tstamp 606F2176) (status 30)) (via (at 97.536 73.66) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 49) (tstamp 606F3D84) (status 30)) (via (at 96.52 73.66) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 49) (tstamp 606F2FDA) (status 30)) (via (at 96.52 72.644) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 49) (tstamp 606F1E9A) (status 30)) (via (at 96.52 70.612) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 49) (tstamp 606F24BB) (status 30)) (via (at 96.52 69.596) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 49) (tstamp 606F366D) (status 30)) (via (at 95.504 69.596) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 49) (tstamp 606F1EA0) (status 30)) (via (at 95.504 70.612) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 49) (tstamp 606F21CD) (status 30)) (via (at 95.504 72.644) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 49) (tstamp 606F223F) (status 30)) (via (at 95.504 73.66) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 49) (tstamp 606F36AC) (status 30)) (via (at 94.488 73.66) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 49) (tstamp 606F31BA) (status 30)) (via (at 94.488 72.644) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 49) (tstamp 606F2A01) (status 30)) (via (at 94.488 71.628) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 49) (tstamp 606F3E3E) (status 30)) (via (at 94.488 70.612) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 49) (tstamp 606F22B7) (status 30)) (via (at 94.488 69.596) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 49) (tstamp 606F2620) (status 30)) (via (at 93.472 69.596) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 49) (tstamp 606F2878) (status 30)) (via (at 93.472 70.612) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 49) (tstamp 606F1E0A) (status 30)) (via (at 93.472 71.628) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 49) (tstamp 606F25B7) (status 30)) (via (at 93.472 72.644) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 49) (tstamp 606F23E6) (status 30)) (via (at 93.472 73.66) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 49) (tstamp 606F33DC) (status 30)) (via (at 92.456 73.66) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 49) (tstamp 606F1F60) (status 30)) (via (at 92.456 72.644) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 49) (tstamp 606F1EA6) (status 30)) (via (at 92.456 71.628) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 49) (tstamp 606F3511) (status 30)) (via (at 92.456 70.612) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 49) (tstamp 606F2DCA) (status 30)) (via (at 92.456 69.596) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 49) (tstamp 606F2F7A) (status 30)) (segment (start 101.090868 83.82) (end 95.25 83.82) (width 0.16) (layer F.Cu) (net 49) (tstamp 606F20A1)) (segment (start 101.35 83.560868) (end 101.090868 83.82) (width 0.16) (layer F.Cu) (net 49) (tstamp 606F25BA)) (segment (start 95.25 83.82) (end 94.996 84.074) (width 0.16) (layer F.Cu) (net 49) (tstamp 606F2527)) (segment (start 95.48 85.725) (end 96.455 85.725) (width 0.16) (layer F.Cu) (net 49) (tstamp 606F3D75) (status 30)) (segment (start 101.35 79.24) (end 101.35 83.560868) (width 0.16) (layer F.Cu) (net 49) (tstamp 606F2839)) (segment (start 100.85 78.74) (end 101.35 79.24) (width 0.16) (layer F.Cu) (net 49) (tstamp 606F219A) (status 10)) (segment (start 94.996 84.074) (end 94.996 85.241) (width 0.16) (layer F.Cu) (net 49) (tstamp 606F25A5)) (segment (start 94.996 85.241) (end 95.48 85.725) (width 0.16) (layer F.Cu) (net 49) (tstamp 606F2242) (status 20)) (segment (start 100.225 66.675) (end 95.145 71.755) (width 0.35) (layer F.Cu) (net 49) (tstamp 606F3001) (status 20)) (segment (start 101.285 66.675) (end 100.225 66.675) (width 0.35) (layer F.Cu) (net 49) (tstamp 606F2E33) (status 10)) (segment (start 100.225 99.06) (end 95.145 104.14) (width 0.35) (layer F.Cu) (net 50) (tstamp 606F28ED) (status 20)) (via (at 96.52 104.013) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 50) (tstamp 606F271C) (status 30)) (via (at 95.504 106.045) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 50) (tstamp 606F1CCC) (status 30)) (via (at 92.456 101.981) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 50) (tstamp 606F2AD9) (status 30)) (segment (start 95.48 118.11) (end 96.455 118.11) (width 0.16) (layer F.Cu) (net 50) (tstamp 606F2D10) (status 30)) (via (at 95.504 105.029) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 50) (tstamp 606F2515) (status 30)) (via (at 96.52 106.045) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 50) (tstamp 606F21E5) (status 30)) (via (at 93.472 106.045) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 50) (tstamp 606F23F8) (status 30)) (via (at 93.472 102.997) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 50) (tstamp 606F1AFB) (status 30)) (via (at 92.456 106.045) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 50) (tstamp 606F2632) (status 30)) (segment (start 94.996 116.459) (end 94.996 117.626) (width 0.16) (layer F.Cu) (net 50) (tstamp 606F1C48)) (via (at 95.504 101.981) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 50) (tstamp 606F21D9) (status 30)) (via (at 96.52 105.029) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 50) (tstamp 606F3685) (status 30)) (segment (start 100.85 111.125) (end 101.35 111.625) (width 0.16) (layer F.Cu) (net 50) (tstamp 606F34D5) (status 10)) (via (at 95.504 104.013) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 50) (tstamp 606F27C4) (status 30)) (via (at 92.456 102.997) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 50) (tstamp 606F22F0) (status 30)) (via (at 92.456 104.013) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 50) (tstamp 606F31AE) (status 30)) (segment (start 101.35 111.625) (end 101.35 115.945868) (width 0.16) (layer F.Cu) (net 50) (tstamp 606F2F7D)) (via (at 94.488 105.029) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 50) (tstamp 606F31CF) (status 30)) (via (at 94.488 104.013) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 50) (tstamp 606F2110) (status 30)) (via (at 94.488 102.997) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 50) (tstamp 606F210D) (status 30)) (via (at 93.472 101.981) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 50) (tstamp 606F2107) (status 30)) (via (at 96.52 102.997) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 50) (tstamp 606F1CC6) (status 30)) (via (at 96.52 101.981) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 50) (tstamp 606F259C) (status 30)) (via (at 94.488 106.045) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 50) (tstamp 606F1AAA) (status 30)) (via (at 95.504 102.997) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 50) (tstamp 606F1C45) (status 30)) (via (at 97.536 104.013) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 50) (tstamp 606F1BFD) (status 30)) (via (at 93.472 104.013) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 50) (tstamp 606F2FE6) (status 30)) (segment (start 101.090868 116.205) (end 95.25 116.205) (width 0.16) (layer F.Cu) (net 50) (tstamp 606F3DED)) (via (at 93.472 105.029) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 50) (tstamp 606F3DD2) (status 30)) (via (at 94.488 101.981) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 50) (tstamp 606F2116) (status 30)) (via (at 97.536 101.981) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 50) (tstamp 606F2179) (status 30)) (via (at 97.536 106.045) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 50) (tstamp 606F259F) (status 30)) (via (at 92.456 105.029) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 50) (tstamp 606F1C39) (status 30)) (via (at 97.536 105.029) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 50) (tstamp 606F397F) (status 30)) (via (at 97.536 102.997) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 50) (tstamp 606F2008) (status 30)) (segment (start 94.996 117.626) (end 95.48 118.11) (width 0.16) (layer F.Cu) (net 50) (tstamp 606F3D8A) (status 20)) (segment (start 95.25 116.205) (end 94.996 116.459) (width 0.16) (layer F.Cu) (net 50) (tstamp 606F26DD)) (segment (start 101.285 99.06) (end 100.225 99.06) (width 0.35) (layer F.Cu) (net 50) (tstamp 606F2119) (status 10)) (segment (start 101.35 115.945868) (end 101.090868 116.205) (width 0.16) (layer F.Cu) (net 50) (tstamp 606F3673)) (segment (start 100.225 131.445) (end 95.145 136.525) (width 0.35) (layer F.Cu) (net 51) (tstamp 606F2B2A) (status 20)) (via (at 96.52 136.398) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 51) (tstamp 606F1AF8) (status 30)) (via (at 95.504 138.43) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 51) (tstamp 606F2629) (status 30)) (via (at 92.456 134.366) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 51) (tstamp 606F21DC) (status 30)) (segment (start 95.48 150.495) (end 96.455 150.495) (width 0.16) (layer F.Cu) (net 51) (tstamp 606F2638) (status 30)) (via (at 95.504 137.414) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 51) (tstamp 606F26D4) (status 30)) (via (at 96.52 138.43) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 51) (tstamp 606F3322) (status 30)) (via (at 93.472 138.43) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 51) (tstamp 606F2167) (status 30)) (via (at 93.472 135.382) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 51) (tstamp 606F2AC7) (status 30)) (via (at 92.456 138.43) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 51) (tstamp 606F2FD4) (status 30)) (segment (start 94.996 148.844) (end 94.996 150.011) (width 0.16) (layer F.Cu) (net 51) (tstamp 606F21DF)) (via (at 95.504 134.366) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 51) (tstamp 606F23EC) (status 30)) (via (at 96.52 137.414) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 51) (tstamp 606F31C3) (status 30)) (segment (start 100.85 143.51) (end 101.35 144.01) (width 0.16) (layer F.Cu) (net 51) (tstamp 606F26D1) (status 10)) (via (at 95.504 136.398) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 51) (tstamp 606F20FB) (status 30)) (via (at 92.456 135.382) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 51) (tstamp 606F2086) (status 30)) (via (at 92.456 136.398) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 51) (tstamp 606F2080) (status 30)) (segment (start 101.35 144.01) (end 101.35 148.330868) (width 0.16) (layer F.Cu) (net 51) (tstamp 606F207D)) (via (at 94.488 137.414) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 51) (tstamp 606F1B67) (status 30)) (via (at 94.488 136.398) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 51) (tstamp 606F1B64) (status 30)) (via (at 94.488 135.382) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 51) (tstamp 606F244C) (status 30)) (via (at 93.472 134.366) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 51) (tstamp 606F2443) (status 30)) (via (at 96.52 135.382) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 51) (tstamp 606F235F) (status 30)) (via (at 96.52 134.366) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 51) (tstamp 606F361C) (status 30)) (via (at 94.488 138.43) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 51) (tstamp 606F3619) (status 30)) (via (at 95.504 135.382) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 51) (tstamp 606F1DA7) (status 30)) (via (at 97.536 136.398) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 51) (tstamp 606F2F8F) (status 30)) (via (at 93.472 136.398) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 51) (tstamp 606F2F8C) (status 30)) (segment (start 101.090868 148.59) (end 95.25 148.59) (width 0.16) (layer F.Cu) (net 51) (tstamp 606F2F86)) (via (at 93.472 137.414) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 51) (tstamp 606F3577) (status 30)) (via (at 94.488 134.366) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 51) (tstamp 606F3571) (status 30)) (via (at 97.536 134.366) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 51) (tstamp 606F20FE) (status 30)) (via (at 97.536 138.43) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 51) (tstamp 606F2F80) (status 30)) (via (at 92.456 137.414) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 51) (tstamp 606F2EF0) (status 30)) (via (at 97.536 137.414) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 51) (tstamp 606F2EED) (status 30)) (via (at 97.536 135.382) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 51) (tstamp 606F2EEA) (status 30)) (segment (start 94.996 150.011) (end 95.48 150.495) (width 0.16) (layer F.Cu) (net 51) (tstamp 606F1DFB) (status 20)) (segment (start 95.25 148.59) (end 94.996 148.844) (width 0.16) (layer F.Cu) (net 51) (tstamp 606F1DF5)) (segment (start 101.285 131.445) (end 100.225 131.445) (width 0.35) (layer F.Cu) (net 51) (tstamp 606F2D8B) (status 10)) (segment (start 101.35 148.330868) (end 101.090868 148.59) (width 0.16) (layer F.Cu) (net 51) (tstamp 606F1CBD)) (segment (start 100.225 163.83) (end 95.145 168.91) (width 0.35) (layer F.Cu) (net 52) (tstamp 606F361F) (status 20)) (via (at 96.52 168.783) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 52) (tstamp 606F1D9B) (status 30)) (via (at 95.504 170.815) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 52) (tstamp 606F1D9E) (status 30)) (via (at 92.456 166.751) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 52) (tstamp 606F2884) (status 30)) (segment (start 95.48 182.88) (end 96.455 182.88) (width 0.16) (layer F.Cu) (net 52) (tstamp 606F1F18) (status 30)) (via (at 95.504 169.799) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 52) (tstamp 606F2881) (status 30)) (via (at 96.52 170.815) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 52) (tstamp 606F222A) (status 30)) (via (at 93.472 170.815) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 52) (tstamp 606F1D50) (status 30)) (via (at 93.472 167.767) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 52) (tstamp 606F1D4D) (status 30)) (via (at 92.456 170.815) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 52) (tstamp 606F24FA) (status 30)) (segment (start 94.996 181.229) (end 94.996 182.396) (width 0.16) (layer F.Cu) (net 52) (tstamp 606F2AAC)) (via (at 95.504 166.751) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 52) (tstamp 606F1A32) (status 30)) (via (at 96.52 169.799) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 52) (tstamp 606F1A2F) (status 30)) (segment (start 100.85 175.895) (end 101.35 176.395) (width 0.16) (layer F.Cu) (net 52) (tstamp 606F1A2C) (status 10)) (via (at 95.504 168.783) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 52) (tstamp 606F1A26) (status 30)) (via (at 92.456 167.767) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 52) (tstamp 606F270D) (status 30)) (via (at 92.456 168.783) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 52) (tstamp 606F2707) (status 30)) (segment (start 101.35 176.395) (end 101.35 180.715868) (width 0.16) (layer F.Cu) (net 52) (tstamp 606F2704)) (via (at 94.488 169.799) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 52) (tstamp 606F26FE) (status 30)) (via (at 94.488 168.783) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 52) (tstamp 606F1B5E) (status 30)) (via (at 94.488 167.767) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 52) (tstamp 606F1B5B) (status 30)) (via (at 93.472 166.751) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 52) (tstamp 606F1B52) (status 30)) (via (at 96.52 167.767) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 52) (tstamp 606F207A) (status 30)) (via (at 96.52 166.751) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 52) (tstamp 606F2FCE) (status 30)) (via (at 94.488 170.815) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 52) (tstamp 606F2FCB) (status 30)) (via (at 95.504 167.767) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 52) (tstamp 606F1C51) (status 30)) (via (at 97.536 168.783) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 52) (tstamp 606F261D) (status 30)) (via (at 93.472 168.783) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 52) (tstamp 606F261A) (status 30)) (segment (start 101.090868 180.975) (end 95.25 180.975) (width 0.16) (layer F.Cu) (net 52) (tstamp 606F2614)) (via (at 93.472 169.799) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 52) (tstamp 606F260E) (status 30)) (via (at 94.488 166.751) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 52) (tstamp 606F2608) (status 30)) (via (at 97.536 166.751) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 52) (tstamp 606F1AEC) (status 30)) (via (at 97.536 170.815) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 52) (tstamp 606F19C6) (status 30)) (via (at 92.456 169.799) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 52) (tstamp 606F26FB) (status 30)) (via (at 97.536 169.799) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 52) (tstamp 606F26F8) (status 30)) (via (at 97.536 167.767) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 52) (tstamp 606F26F5) (status 30)) (segment (start 94.996 182.396) (end 95.48 182.88) (width 0.16) (layer F.Cu) (net 52) (tstamp 606F26EF) (status 20)) (segment (start 95.25 180.975) (end 94.996 181.229) (width 0.16) (layer F.Cu) (net 52) (tstamp 606F26E9)) (segment (start 101.285 163.83) (end 100.225 163.83) (width 0.35) (layer F.Cu) (net 52) (tstamp 606F1ED9) (status 10)) (segment (start 101.35 180.715868) (end 101.090868 180.975) (width 0.16) (layer F.Cu) (net 52) (tstamp 606F2EE4)) (segment (start 101.092 84.328) (end 96.582 84.328) (width 0.16) (layer F.Cu) (net 53) (tstamp 606F1D4A) (status 20)) (segment (start 101.854 83.566) (end 101.092 84.328) (width 0.16) (layer F.Cu) (net 53) (tstamp 606F23F5)) (segment (start 96.582 84.328) (end 96.455 84.455) (width 0.16) (layer F.Cu) (net 53) (tstamp 606F2185) (status 30)) (segment (start 101.854 78.74) (end 101.854 83.566) (width 0.16) (layer F.Cu) (net 53) (tstamp 606F262F) (status 10)) (segment (start 102.35 78.74) (end 101.854 78.74) (width 0.16) (layer F.Cu) (net 53) (tstamp 606F2D13) (status 30)) (segment (start 117.67499 88.70001) (end 117.67499 83.31751) (width 0.16) (layer F.Cu) (net 53) (tstamp 606F1AA4)) (segment (start 116.84 89.535) (end 117.67499 88.70001) (width 0.16) (layer F.Cu) (net 53) (tstamp 606F1E88)) (segment (start 117.67499 83.31751) (end 118.4425 82.55) (width 0.16) (layer F.Cu) (net 53) (tstamp 606F1A9E) (status 20)) (segment (start 108.89 89.535) (end 116.84 89.535) (width 0.16) (layer F.Cu) (net 53) (tstamp 606F1BFA)) (segment (start 106.985 87.63) (end 108.89 89.535) (width 0.16) (layer F.Cu) (net 53) (tstamp 606F23EF) (status 10)) (segment (start 120.3175 85.065) (end 120.2925 85.09) (width 0.16) (layer F.Cu) (net 54) (tstamp 606F3D93) (status 30)) (segment (start 120.3175 82.55) (end 120.3175 85.065) (width 0.16) (layer F.Cu) (net 54) (tstamp 606F2FFE) (status 30)) (segment (start 120.3175 67.335) (end 120.2925 67.31) (width 0.16) (layer F.Cu) (net 55) (tstamp 606F3691) (status 30)) (segment (start 120.3175 69.85) (end 120.3175 67.335) (width 0.16) (layer F.Cu) (net 55) (tstamp 606F2281) (status 30)) (segment (start 115.57 69.85) (end 118.4425 69.85) (width 0.16) (layer F.Cu) (net 56) (tstamp 606F2FE0) (status 20)) (segment (start 111.76 73.66) (end 115.57 69.85) (width 0.16) (layer F.Cu) (net 56) (tstamp 606F218B) (status 10)) (segment (start 101.854 115.951) (end 101.092 116.713) (width 0.16) (layer F.Cu) (net 57) (tstamp 606F28F6)) (segment (start 117.67499 115.70251) (end 118.4425 114.935) (width 0.16) (layer F.Cu) (net 57) (tstamp 606F28F3) (status 20)) (segment (start 106.985 120.015) (end 108.89 121.92) (width 0.16) (layer F.Cu) (net 57) (tstamp 606F2173) (status 10)) (segment (start 96.582 116.713) (end 96.455 116.84) (width 0.16) (layer F.Cu) (net 57) (tstamp 606F29EF) (status 30)) (segment (start 108.89 121.92) (end 116.84 121.92) (width 0.16) (layer F.Cu) (net 57) (tstamp 606F1AF2)) (segment (start 116.84 121.92) (end 117.67499 121.08501) (width 0.16) (layer F.Cu) (net 57) (tstamp 606F20F8)) (segment (start 101.854 111.125) (end 101.854 115.951) (width 0.16) (layer F.Cu) (net 57) (tstamp 606F2ADC) (status 10)) (segment (start 117.67499 121.08501) (end 117.67499 115.70251) (width 0.16) (layer F.Cu) (net 57) (tstamp 606F24B8)) (segment (start 101.092 116.713) (end 96.582 116.713) (width 0.16) (layer F.Cu) (net 57) (tstamp 606F2236) (status 20)) (segment (start 102.35 111.125) (end 101.854 111.125) (width 0.16) (layer F.Cu) (net 57) (tstamp 606F1987) (status 30)) (segment (start 120.3175 117.45) (end 120.2925 117.475) (width 0.16) (layer F.Cu) (net 58) (tstamp 606F367C) (status 30)) (segment (start 120.3175 114.935) (end 120.3175 117.45) (width 0.16) (layer F.Cu) (net 58) (tstamp 606F1DAA) (status 30)) (segment (start 115.57 102.235) (end 118.4425 102.235) (width 0.16) (layer F.Cu) (net 59) (tstamp 606F2170) (status 20)) (segment (start 111.76 106.045) (end 115.57 102.235) (width 0.16) (layer F.Cu) (net 59) (tstamp 606F2599) (status 10)) (segment (start 120.3175 102.235) (end 120.3175 99.72) (width 0.16) (layer F.Cu) (net 60) (tstamp 606F2D0A) (status 30)) (segment (start 120.3175 99.72) (end 120.2925 99.695) (width 0.16) (layer F.Cu) (net 60) (tstamp 606F31B7) (status 30)) (segment (start 101.854 148.336) (end 101.092 149.098) (width 0.16) (layer F.Cu) (net 61) (tstamp 606F35CB)) (segment (start 117.67499 148.08751) (end 118.4425 147.32) (width 0.16) (layer F.Cu) (net 61) (tstamp 606F26CE) (status 20)) (segment (start 106.985 152.4) (end 108.89 154.305) (width 0.16) (layer F.Cu) (net 61) (tstamp 606F1F1E) (status 10)) (segment (start 96.582 149.098) (end 96.455 149.225) (width 0.16) (layer F.Cu) (net 61) (tstamp 606F1A1D) (status 30)) (segment (start 108.89 154.305) (end 116.84 154.305) (width 0.16) (layer F.Cu) (net 61) (tstamp 606F1DE9)) (segment (start 116.84 154.305) (end 117.67499 153.47001) (width 0.16) (layer F.Cu) (net 61) (tstamp 606F2CAA)) (segment (start 101.854 143.51) (end 101.854 148.336) (width 0.16) (layer F.Cu) (net 61) (tstamp 606F2089) (status 10)) (segment (start 117.67499 153.47001) (end 117.67499 148.08751) (width 0.16) (layer F.Cu) (net 61) (tstamp 606F2E69)) (segment (start 101.092 149.098) (end 96.582 149.098) (width 0.16) (layer F.Cu) (net 61) (tstamp 606F1E10) (status 20)) (segment (start 102.35 143.51) (end 101.854 143.51) (width 0.16) (layer F.Cu) (net 61) (tstamp 606F1DFE) (status 30)) (segment (start 120.3175 149.835) (end 120.2925 149.86) (width 0.16) (layer F.Cu) (net 62) (tstamp 606F1FCF) (status 30)) (segment (start 120.3175 147.32) (end 120.3175 149.835) (width 0.16) (layer F.Cu) (net 62) (tstamp 606F3574) (status 30)) (segment (start 115.57 134.62) (end 118.4425 134.62) (width 0.16) (layer F.Cu) (net 63) (tstamp 606F350E) (status 20)) (segment (start 111.76 138.43) (end 115.57 134.62) (width 0.16) (layer F.Cu) (net 63) (tstamp 606F1DF2) (status 10)) (segment (start 120.3175 134.62) (end 120.3175 132.105) (width 0.16) (layer F.Cu) (net 64) (tstamp 606F368B) (status 30)) (segment (start 120.3175 132.105) (end 120.2925 132.08) (width 0.16) (layer F.Cu) (net 64) (tstamp 606F2A6A) (status 30)) (segment (start 101.854 180.721) (end 101.092 181.483) (width 0.16) (layer F.Cu) (net 65) (tstamp 606F2FEF)) (segment (start 117.67499 180.47251) (end 118.4425 179.705) (width 0.16) (layer F.Cu) (net 65) (tstamp 606F2FEC) (status 20)) (segment (start 106.985 184.785) (end 108.89 186.69) (width 0.16) (layer F.Cu) (net 65) (tstamp 606F2719) (status 10)) (segment (start 96.582 181.483) (end 96.455 181.61) (width 0.16) (layer F.Cu) (net 65) (tstamp 606F1D53) (status 30)) (segment (start 108.89 186.69) (end 116.84 186.69) (width 0.16) (layer F.Cu) (net 65) (tstamp 606F197B)) (segment (start 116.84 186.69) (end 117.67499 185.85501) (width 0.16) (layer F.Cu) (net 65) (tstamp 606F1978)) (segment (start 101.854 175.895) (end 101.854 180.721) (width 0.16) (layer F.Cu) (net 65) (tstamp 606F2710) (status 10)) (segment (start 117.67499 185.85501) (end 117.67499 180.47251) (width 0.16) (layer F.Cu) (net 65) (tstamp 606F1B0D)) (segment (start 101.092 181.483) (end 96.582 181.483) (width 0.16) (layer F.Cu) (net 65) (tstamp 606F1AB3) (status 20)) (segment (start 102.35 175.895) (end 101.854 175.895) (width 0.16) (layer F.Cu) (net 65) (tstamp 606F26F2) (status 30)) (segment (start 120.3175 182.22) (end 120.2925 182.245) (width 0.16) (layer F.Cu) (net 66) (tstamp 606F3667) (status 30)) (segment (start 120.3175 179.705) (end 120.3175 182.22) (width 0.16) (layer F.Cu) (net 66) (tstamp 606F260B) (status 30)) (segment (start 115.57 167.005) (end 118.4425 167.005) (width 0.16) (layer F.Cu) (net 67) (tstamp 606F2716) (status 20)) (segment (start 111.76 170.815) (end 115.57 167.005) (width 0.16) (layer F.Cu) (net 67) (tstamp 606F26E6) (status 10)) (segment (start 120.3175 167.005) (end 120.3175 164.49) (width 0.16) (layer F.Cu) (net 68) (tstamp 606F1B61) (status 30)) (segment (start 120.3175 164.49) (end 120.2925 164.465) (width 0.16) (layer F.Cu) (net 68) (tstamp 606F240A) (status 30)) (segment (start 108.3075 71.755) (end 110.8475 69.215) (width 0.16) (layer F.Cu) (net 73) (tstamp 606F3367) (status 20)) (segment (start 101.945 71.755) (end 108.3075 71.755) (width 0.16) (layer F.Cu) (net 73) (tstamp 606F2FF5) (status 10)) (segment (start 106.4025 66.9575) (end 106.4025 66.675) (width 0.16) (layer F.Cu) (net 74) (tstamp 606F2A0D) (status 30)) (segment (start 103.305 70.055) (end 106.4025 66.9575) (width 0.16) (layer F.Cu) (net 74) (tstamp 606F1A23) (status 20)) (segment (start 101.945 70.055) (end 103.305 70.055) (width 0.16) (layer F.Cu) (net 74) (tstamp 606F287E) (status 10)) (segment (start 104.7125 70.905) (end 106.4025 69.215) (width 0.16) (layer F.Cu) (net 75) (tstamp 606F3AE7) (status 20)) (segment (start 101.945 70.905) (end 104.7125 70.905) (width 0.16) (layer F.Cu) (net 75) (tstamp 606F2E66) (status 10)) (segment (start 101.945 104.14) (end 108.3075 104.14) (width 0.16) (layer F.Cu) (net 76) (tstamp 606F2EAE) (status 10)) (segment (start 108.3075 104.14) (end 110.8475 101.6) (width 0.16) (layer F.Cu) (net 76) (tstamp 606F2836) (status 20)) (segment (start 101.945 102.44) (end 103.305 102.44) (width 0.16) (layer F.Cu) (net 77) (tstamp 606F2800) (status 10)) (segment (start 103.305 102.44) (end 106.4025 99.3425) (width 0.16) (layer F.Cu) (net 77) (tstamp 606F31C6) (status 20)) (segment (start 106.4025 99.3425) (end 106.4025 99.06) (width 0.16) (layer F.Cu) (net 77) (tstamp 606F31D8) (status 30)) (segment (start 104.7125 103.29) (end 106.4025 101.6) (width 0.16) (layer F.Cu) (net 78) (tstamp 606F2938) (status 20)) (segment (start 101.945 103.29) (end 104.7125 103.29) (width 0.16) (layer F.Cu) (net 78) (tstamp 606F2ACA) (status 10)) (segment (start 101.945 136.525) (end 108.3075 136.525) (width 0.16) (layer F.Cu) (net 79) (tstamp 606F2E6C) (status 10)) (segment (start 108.3075 136.525) (end 110.8475 133.985) (width 0.16) (layer F.Cu) (net 79) (tstamp 606F2A64) (status 20)) (segment (start 101.945 134.825) (end 103.305 134.825) (width 0.16) (layer F.Cu) (net 80) (tstamp 606F262C) (status 10)) (segment (start 103.305 134.825) (end 106.4025 131.7275) (width 0.16) (layer F.Cu) (net 80) (tstamp 606F1DB0) (status 20)) (segment (start 106.4025 131.7275) (end 106.4025 131.445) (width 0.16) (layer F.Cu) (net 80) (tstamp 606F2F89) (status 30)) (segment (start 104.7125 135.675) (end 106.4025 133.985) (width 0.16) (layer F.Cu) (net 81) (tstamp 606F2635) (status 20)) (segment (start 101.945 135.675) (end 104.7125 135.675) (width 0.16) (layer F.Cu) (net 81) (tstamp 606F2446) (status 10)) (segment (start 101.945 168.91) (end 108.3075 168.91) (width 0.16) (layer F.Cu) (net 82) (tstamp 606F1B10) (status 10)) (segment (start 108.3075 168.91) (end 110.8475 166.37) (width 0.16) (layer F.Cu) (net 82) (tstamp 606F2404) (status 20)) (segment (start 101.945 167.21) (end 103.305 167.21) (width 0.16) (layer F.Cu) (net 83) (tstamp 606F1DA4) (status 10)) (segment (start 103.305 167.21) (end 106.4025 164.1125) (width 0.16) (layer F.Cu) (net 83) (tstamp 606F197E) (status 20)) (segment (start 106.4025 164.1125) (end 106.4025 163.83) (width 0.16) (layer F.Cu) (net 83) (tstamp 606F2617) (status 30)) (segment (start 104.7125 168.06) (end 106.4025 166.37) (width 0.16) (layer F.Cu) (net 84) (tstamp 606F2410) (status 20)) (segment (start 101.945 168.06) (end 104.7125 168.06) (width 0.16) (layer F.Cu) (net 84) (tstamp 606F1B55) (status 10)) (segment (start 53.752665 67.945) (end 54.675 67.945) (width 0.35) (layer F.Cu) (net 85) (status 30)) (segment (start 48.895 71.755) (end 50.120001 72.980001) (width 0.35) (layer F.Cu) (net 85) (status 10)) (segment (start 53.32499 68.372675) (end 53.752665 67.945) (width 0.35) (layer F.Cu) (net 85) (status 20)) (segment (start 52.023001 72.980001) (end 53.32499 71.678012) (width 0.35) (layer F.Cu) (net 85)) (segment (start 50.120001 72.980001) (end 52.023001 72.980001) (width 0.35) (layer F.Cu) (net 85)) (segment (start 53.32499 71.678012) (end 53.32499 68.372675) (width 0.35) (layer F.Cu) (net 85)) (segment (start 52.660001 69.803001) (end 52.660001 68.040833) (width 0.35) (layer F.Cu) (net 86)) (segment (start 52.023001 70.440001) (end 52.660001 69.803001) (width 0.35) (layer F.Cu) (net 86)) (segment (start 50.120001 70.440001) (end 52.023001 70.440001) (width 0.35) (layer F.Cu) (net 86)) (segment (start 54.025834 66.675) (end 54.675 66.675) (width 0.35) (layer F.Cu) (net 86) (status 30)) (segment (start 52.660001 68.040833) (end 54.025834 66.675) (width 0.35) (layer F.Cu) (net 86) (status 20)) (segment (start 48.895 69.215) (end 50.120001 70.440001) (width 0.35) (layer F.Cu) (net 86) (status 10)) (segment (start 53.735354 65.405) (end 54.675 65.405) (width 0.35) (layer F.Cu) (net 87) (status 30)) (segment (start 53.230343 65.910011) (end 53.735354 65.405) (width 0.35) (layer F.Cu) (net 87) (status 20)) (segment (start 53.230343 66.692659) (end 53.230343 65.910011) (width 0.35) (layer F.Cu) (net 87)) (segment (start 52.023001 67.900001) (end 53.230343 66.692659) (width 0.35) (layer F.Cu) (net 87)) (segment (start 50.120001 67.900001) (end 52.023001 67.900001) (width 0.35) (layer F.Cu) (net 87)) (segment (start 48.895 66.675) (end 50.120001 67.900001) (width 0.35) (layer F.Cu) (net 87) (status 10)) (segment (start 53.466261 64.135) (end 54.675 64.135) (width 0.35) (layer F.Cu) (net 88) (status 20)) (segment (start 52.24126 65.360001) (end 53.466261 64.135) (width 0.35) (layer F.Cu) (net 88)) (segment (start 50.120001 65.360001) (end 52.24126 65.360001) (width 0.35) (layer F.Cu) (net 88)) (segment (start 48.895 64.135) (end 50.120001 65.360001) (width 0.35) (layer F.Cu) (net 88) (status 10)) (segment (start 54.630001 62.820001) (end 54.675 62.865) (width 0.35) (layer F.Cu) (net 89) (status 30)) (segment (start 50.120001 62.820001) (end 54.630001 62.820001) (width 0.35) (layer F.Cu) (net 89) (status 20)) (segment (start 48.895 61.595) (end 50.120001 62.820001) (width 0.35) (layer F.Cu) (net 89) (status 10)) (segment (start 54.227522 61.595) (end 54.675 61.595) (width 0.35) (layer F.Cu) (net 90) (status 30)) (segment (start 52.912523 60.280001) (end 54.227522 61.595) (width 0.35) (layer F.Cu) (net 90) (status 20)) (segment (start 50.120001 60.280001) (end 52.912523 60.280001) (width 0.35) (layer F.Cu) (net 90)) (segment (start 48.895 59.055) (end 50.120001 60.280001) (width 0.35) (layer F.Cu) (net 90) (status 10)) (segment (start 56.365949 70.2705) (end 50.851449 75.785) (width 0.16) (layer F.Cu) (net 91) (status 20)) (segment (start 56.365949 63.879051) (end 56.365949 70.2705) (width 0.16) (layer F.Cu) (net 91)) (segment (start 50.851449 75.785) (end 50.375 75.785) (width 0.16) (layer F.Cu) (net 91) (status 30)) (segment (start 58.65 61.595) (end 56.365949 63.879051) (width 0.16) (layer F.Cu) (net 91) (status 10)) (segment (start 59.625 61.595) (end 58.65 61.595) (width 0.16) (layer F.Cu) (net 91) (status 30)) (segment (start 56.725959 71.036041) (end 51.327 76.435) (width 0.16) (layer F.Cu) (net 92)) (segment (start 56.725959 64.789041) (end 56.725959 71.036041) (width 0.16) (layer F.Cu) (net 92)) (segment (start 58.65 62.865) (end 56.725959 64.789041) (width 0.16) (layer F.Cu) (net 92) (status 10)) (segment (start 51.327 76.435) (end 50.375 76.435) (width 0.16) (layer F.Cu) (net 92) (status 20)) (segment (start 59.625 62.865) (end 58.65 62.865) (width 0.16) (layer F.Cu) (net 92) (status 30)) (segment (start 51.41 77.085) (end 50.375 77.085) (width 0.16) (layer F.Cu) (net 93) (status 20)) (segment (start 57.085969 71.409031) (end 51.41 77.085) (width 0.16) (layer F.Cu) (net 93)) (segment (start 57.085969 65.699031) (end 57.085969 71.409031) (width 0.16) (layer F.Cu) (net 93)) (segment (start 58.65 64.135) (end 57.085969 65.699031) (width 0.16) (layer F.Cu) (net 93) (status 10)) (segment (start 59.625 64.135) (end 58.65 64.135) (width 0.16) (layer F.Cu) (net 93) (status 30)) (segment (start 58.65 65.405) (end 59.625 65.405) (width 0.16) (layer F.Cu) (net 94) (status 30)) (segment (start 57.44598 66.60902) (end 58.65 65.405) (width 0.16) (layer F.Cu) (net 94) (status 20)) (segment (start 57.44598 71.58602) (end 57.44598 66.60902) (width 0.16) (layer F.Cu) (net 94)) (segment (start 51.297 77.735) (end 57.44598 71.58602) (width 0.16) (layer F.Cu) (net 94)) (segment (start 50.375 77.735) (end 51.297 77.735) (width 0.16) (layer F.Cu) (net 94) (status 10)) (segment (start 58.65 66.675) (end 59.625 66.675) (width 0.16) (layer F.Cu) (net 95) (status 30)) (segment (start 58.65 66.675) (end 57.912 67.413) (width 0.16) (layer F.Cu) (net 95) (status 10)) (segment (start 57.912 67.413) (end 57.912 73.152) (width 0.16) (layer F.Cu) (net 95)) (segment (start 56.419999 76.314999) (end 56.54 76.435) (width 0.16) (layer F.Cu) (net 95)) (segment (start 56.419999 74.644001) (end 56.419999 76.314999) (width 0.16) (layer F.Cu) (net 95)) (segment (start 56.54 76.435) (end 57.575 76.435) (width 0.16) (layer F.Cu) (net 95) (status 20)) (segment (start 57.912 73.152) (end 56.419999 74.644001) (width 0.16) (layer F.Cu) (net 95)) (segment (start 57.658 75.702) (end 57.575 75.785) (width 0.16) (layer F.Cu) (net 96) (status 30)) (segment (start 58.36999 73.45601) (end 57.658 74.168) (width 0.16) (layer F.Cu) (net 96)) (segment (start 57.658 74.168) (end 57.658 75.702) (width 0.16) (layer F.Cu) (net 96) (status 20)) (segment (start 58.36999 68.22501) (end 58.36999 73.45601) (width 0.16) (layer F.Cu) (net 96)) (segment (start 58.65 67.945) (end 58.36999 68.22501) (width 0.16) (layer F.Cu) (net 96) (status 10)) (segment (start 59.625 67.945) (end 58.65 67.945) (width 0.16) (layer F.Cu) (net 96) (status 30)) (segment (start 26.67 185.42) (end 26.67 187.96) (width 0.35) (layer F.Cu) (net 97)) (segment (start 34.29 185.42) (end 34.29 187.96) (width 0.35) (layer F.Cu) (net 98)) (segment (start 46.99 205.74) (end 46.99 208.28) (width 0.35) (layer F.Cu) (net 99)) (segment (start 41.91 205.74) (end 41.91 208.28) (width 0.35) (layer F.Cu) (net 100)) (zone (net 46) (net_name /PowerChannel0/POWER_MONITORED) (layer F.Cu) (tstamp 6070EAEF) (hatch edge 0.508) (priority 1) (connect_pads yes (clearance 0.508)) (min_thickness 0.254) (fill yes (arc_segments 32) (thermal_gap 0.508) (thermal_bridge_width 0.508)) (polygon (pts (xy 100.33 44.45) (xy 100.965 44.45) (xy 100.965 48.26) (xy 100.33 48.26) (xy 100.33 51.181) (xy 77.47 51.181) (xy 77.47 27.305) (xy 100.33 27.305) ) ) (filled_polygon (pts (xy 100.203 36.186951) (xy 100.155498 36.27582) (xy 100.119188 36.395518) (xy 100.106928 36.52) (xy 100.106928 37.12) (xy 100.119188 37.244482) (xy 100.119345 37.245) (xy 100.119188 37.245518) (xy 100.106928 37.37) (xy 100.106928 37.97) (xy 100.119188 38.094482) (xy 100.119345 38.095) (xy 100.119188 38.095518) (xy 100.106928 38.22) (xy 100.106928 38.82) (xy 100.119188 38.944482) (xy 100.119345 38.945) (xy 100.119188 38.945518) (xy 100.106928 39.07) (xy 100.106928 39.67) (xy 100.119188 39.794482) (xy 100.119345 39.795) (xy 100.119188 39.795518) (xy 100.106928 39.92) (xy 100.106928 40.52) (xy 100.119188 40.644482) (xy 100.119345 40.645) (xy 100.119188 40.645518) (xy 100.106928 40.77) (xy 100.106928 41.37) (xy 100.119188 41.494482) (xy 100.119345 41.495) (xy 100.119188 41.495518) (xy 100.106928 41.62) (xy 100.106928 42.22) (xy 100.119188 42.344482) (xy 100.155498 42.46418) (xy 100.203 42.553049) (xy 100.203 44.45) (xy 100.20544 44.474776) (xy 100.212667 44.498601) (xy 100.224403 44.520557) (xy 100.240197 44.539803) (xy 100.259443 44.555597) (xy 100.281399 44.567333) (xy 100.305224 44.57456) (xy 100.33 44.577) (xy 100.838 44.577) (xy 100.838 48.133) (xy 100.33 48.133) (xy 100.305224 48.13544) (xy 100.281399 48.142667) (xy 100.259443 48.154403) (xy 100.240197 48.170197) (xy 100.224403 48.189443) (xy 100.212667 48.211399) (xy 100.20544 48.235224) (xy 100.203 48.26) (xy 100.203 51.054) (xy 77.597 51.054) (xy 77.597 27.432) (xy 100.203 27.432) ) ) ) (zone (net 46) (net_name /PowerChannel0/POWER_MONITORED) (layer B.Cu) (tstamp 6070EAEC) (hatch edge 0.508) (priority 1) (connect_pads yes (clearance 0.508)) (min_thickness 0.254) (fill yes (arc_segments 32) (thermal_gap 0.508) (thermal_bridge_width 0.508)) (polygon (pts (xy 116.332 51.435) (xy 77.47 51.435) (xy 77.47 27.305) (xy 116.332 27.305) ) ) (filled_polygon (pts (xy 102.379744 27.460205) (xy 102.568102 27.538226) (xy 102.768061 27.578) (xy 102.971939 27.578) (xy 103.171898 27.538226) (xy 103.360256 27.460205) (xy 103.402468 27.432) (xy 116.205 27.432) (xy 116.205 51.308) (xy 77.597 51.308) (xy 77.597 45.355) (xy 110.121928 45.355) (xy 110.121928 47.355) (xy 110.134188 47.479482) (xy 110.170498 47.59918) (xy 110.229463 47.709494) (xy 110.308815 47.806185) (xy 110.405506 47.885537) (xy 110.51582 47.944502) (xy 110.635518 47.980812) (xy 110.76 47.993072) (xy 112.76 47.993072) (xy 112.884482 47.980812) (xy 113.00418 47.944502) (xy 113.114494 47.885537) (xy 113.211185 47.806185) (xy 113.290537 47.709494) (xy 113.349502 47.59918) (xy 113.385812 47.479482) (xy 113.398072 47.355) (xy 113.398072 45.355) (xy 113.385812 45.230518) (xy 113.349502 45.11082) (xy 113.290537 45.000506) (xy 113.211185 44.903815) (xy 113.114494 44.824463) (xy 113.00418 44.765498) (xy 112.884482 44.729188) (xy 112.76 44.716928) (xy 110.76 44.716928) (xy 110.635518 44.729188) (xy 110.51582 44.765498) (xy 110.405506 44.824463) (xy 110.308815 44.903815) (xy 110.229463 45.000506) (xy 110.170498 45.11082) (xy 110.134188 45.230518) (xy 110.121928 45.355) (xy 77.597 45.355) (xy 77.597 41.113967) (xy 110.125 41.113967) (xy 110.125 41.436033) (xy 110.187832 41.751912) (xy 110.311082 42.049463) (xy 110.490013 42.317252) (xy 110.717748 42.544987) (xy 110.985537 42.723918) (xy 111.283088 42.847168) (xy 111.598967 42.91) (xy 111.921033 42.91) (xy 112.236912 42.847168) (xy 112.534463 42.723918) (xy 112.802252 42.544987) (xy 113.029987 42.317252) (xy 113.208918 42.049463) (xy 113.332168 41.751912) (xy 113.395 41.436033) (xy 113.395 41.113967) (xy 113.332168 40.798088) (xy 113.208918 40.500537) (xy 113.029987 40.232748) (xy 112.802252 40.005013) (xy 112.534463 39.826082) (xy 112.236912 39.702832) (xy 111.921033 39.64) (xy 111.598967 39.64) (xy 111.283088 39.702832) (xy 110.985537 39.826082) (xy 110.717748 40.005013) (xy 110.490013 40.232748) (xy 110.311082 40.500537) (xy 110.187832 40.798088) (xy 110.125 41.113967) (xy 77.597 41.113967) (xy 77.597 27.432) (xy 102.337532 27.432) ) ) ) (zone (net 37) (net_name "Net-(D201-Pad2)") (layer F.Cu) (tstamp 6070EAE9) (hatch edge 0.508) (priority 1) (connect_pads yes (clearance 0.508)) (min_thickness 0.254) (fill yes (arc_segments 32) (thermal_gap 0.508) (thermal_bridge_width 0.508)) (polygon (pts (xy 108.458 56.769) (xy 102.108 56.769) (xy 102.235 45.085) (xy 108.458 45.085) ) ) (filled_polygon (pts (xy 108.331 56.642) (xy 102.236387 56.642) (xy 102.360627 45.212) (xy 108.331 45.212) ) ) ) (zone (net 30) (net_name /PowerChannel0/POWER_OUT) (layer F.Cu) (tstamp 6070EAE6) (hatch edge 0.508) (connect_pads yes (clearance 0.25)) (min_thickness 0.254) (fill yes (arc_segments 32) (thermal_gap 0.508) (thermal_bridge_width 0.508)) (polygon (pts (xy 113.538 44.069) (xy 100.584 44.069) (xy 100.584 39.751) (xy 113.538 39.751) ) ) (filled_polygon (pts (xy 113.411 43.942) (xy 101.342137 43.942) (xy 101.317787 43.922017) (xy 101.208004 43.863336) (xy 101.088882 43.827201) (xy 100.965 43.815) (xy 100.965 40.048824) (xy 103.145 40.048824) (xy 103.218905 40.041545) (xy 103.28997 40.019988) (xy 103.355463 39.984981) (xy 103.412869 39.937869) (xy 103.459981 39.880463) (xy 103.461298 39.878) (xy 113.411 39.878) ) ) ) (zone (net 29) (net_name /PowerChannel0/POWER_IN) (layer F.Cu) (tstamp 6070EAE3) (hatch edge 0.508) (connect_pads yes (clearance 0.25)) (min_thickness 0.254) (fill yes (arc_segments 32) (thermal_gap 0.508) (thermal_bridge_width 0.508)) (polygon (pts (xy 116.84 56.769) (xy 109.728 56.769) (xy 109.728 45.085) (xy 116.84 45.085) ) ) (filled_polygon (pts (xy 116.713 56.630706) (xy 116.701706 56.642) (xy 109.855 56.642) (xy 109.855 45.212) (xy 116.713 45.212) ) ) ) (zone (net 49) (net_name /PowerChannel1/POWER_MONITORED) (layer F.Cu) (tstamp 6070EAE0) (hatch edge 0.508) (priority 1) (connect_pads yes (clearance 0.508)) (min_thickness 0.254) (fill yes (arc_segments 32) (thermal_gap 0.508) (thermal_bridge_width 0.508)) (polygon (pts (xy 100.33 76.835) (xy 100.965 76.835) (xy 100.965 80.645) (xy 100.33 80.645) (xy 100.33 83.566) (xy 77.47 83.566) (xy 77.47 59.69) (xy 100.33 59.69) ) ) (filled_polygon (pts (xy 100.203 68.571951) (xy 100.155498 68.66082) (xy 100.119188 68.780518) (xy 100.106928 68.905) (xy 100.106928 69.505) (xy 100.119188 69.629482) (xy 100.119345 69.63) (xy 100.119188 69.630518) (xy 100.106928 69.755) (xy 100.106928 70.355) (xy 100.119188 70.479482) (xy 100.119345 70.48) (xy 100.119188 70.480518) (xy 100.106928 70.605) (xy 100.106928 71.205) (xy 100.119188 71.329482) (xy 100.119345 71.33) (xy 100.119188 71.330518) (xy 100.106928 71.455) (xy 100.106928 72.055) (xy 100.119188 72.179482) (xy 100.119345 72.18) (xy 100.119188 72.180518) (xy 100.106928 72.305) (xy 100.106928 72.905) (xy 100.119188 73.029482) (xy 100.119345 73.03) (xy 100.119188 73.030518) (xy 100.106928 73.155) (xy 100.106928 73.755) (xy 100.119188 73.879482) (xy 100.119345 73.88) (xy 100.119188 73.880518) (xy 100.106928 74.005) (xy 100.106928 74.605) (xy 100.119188 74.729482) (xy 100.155498 74.84918) (xy 100.203 74.938049) (xy 100.203 76.835) (xy 100.20544 76.859776) (xy 100.212667 76.883601) (xy 100.224403 76.905557) (xy 100.240197 76.924803) (xy 100.259443 76.940597) (xy 100.281399 76.952333) (xy 100.305224 76.95956) (xy 100.33 76.962) (xy 100.838 76.962) (xy 100.838 80.518) (xy 100.33 80.518) (xy 100.305224 80.52044) (xy 100.281399 80.527667) (xy 100.259443 80.539403) (xy 100.240197 80.555197) (xy 100.224403 80.574443) (xy 100.212667 80.596399) (xy 100.20544 80.620224) (xy 100.203 80.645) (xy 100.203 83.439) (xy 77.597 83.439) (xy 77.597 59.817) (xy 100.203 59.817) ) ) ) (zone (net 49) (net_name /PowerChannel1/POWER_MONITORED) (layer B.Cu) (tstamp 6070EADD) (hatch edge 0.508) (priority 1) (connect_pads yes (clearance 0.508)) (min_thickness 0.254) (fill yes (arc_segments 32) (thermal_gap 0.508) (thermal_bridge_width 0.508)) (polygon (pts (xy 116.332 83.82) (xy 77.47 83.82) (xy 77.47 59.69) (xy 116.332 59.69) ) ) (filled_polygon (pts (xy 102.379744 59.845205) (xy 102.568102 59.923226) (xy 102.768061 59.963) (xy 102.971939 59.963) (xy 103.171898 59.923226) (xy 103.360256 59.845205) (xy 103.402468 59.817) (xy 116.205 59.817) (xy 116.205 83.693) (xy 77.597 83.693) (xy 77.597 77.74) (xy 110.121928 77.74) (xy 110.121928 79.74) (xy 110.134188 79.864482) (xy 110.170498 79.98418) (xy 110.229463 80.094494) (xy 110.308815 80.191185) (xy 110.405506 80.270537) (xy 110.51582 80.329502) (xy 110.635518 80.365812) (xy 110.76 80.378072) (xy 112.76 80.378072) (xy 112.884482 80.365812) (xy 113.00418 80.329502) (xy 113.114494 80.270537) (xy 113.211185 80.191185) (xy 113.290537 80.094494) (xy 113.349502 79.98418) (xy 113.385812 79.864482) (xy 113.398072 79.74) (xy 113.398072 77.74) (xy 113.385812 77.615518) (xy 113.349502 77.49582) (xy 113.290537 77.385506) (xy 113.211185 77.288815) (xy 113.114494 77.209463) (xy 113.00418 77.150498) (xy 112.884482 77.114188) (xy 112.76 77.101928) (xy 110.76 77.101928) (xy 110.635518 77.114188) (xy 110.51582 77.150498) (xy 110.405506 77.209463) (xy 110.308815 77.288815) (xy 110.229463 77.385506) (xy 110.170498 77.49582) (xy 110.134188 77.615518) (xy 110.121928 77.74) (xy 77.597 77.74) (xy 77.597 73.498967) (xy 110.125 73.498967) (xy 110.125 73.821033) (xy 110.187832 74.136912) (xy 110.311082 74.434463) (xy 110.490013 74.702252) (xy 110.717748 74.929987) (xy 110.985537 75.108918) (xy 111.283088 75.232168) (xy 111.598967 75.295) (xy 111.921033 75.295) (xy 112.236912 75.232168) (xy 112.534463 75.108918) (xy 112.802252 74.929987) (xy 113.029987 74.702252) (xy 113.208918 74.434463) (xy 113.332168 74.136912) (xy 113.395 73.821033) (xy 113.395 73.498967) (xy 113.332168 73.183088) (xy 113.208918 72.885537) (xy 113.029987 72.617748) (xy 112.802252 72.390013) (xy 112.534463 72.211082) (xy 112.236912 72.087832) (xy 111.921033 72.025) (xy 111.598967 72.025) (xy 111.283088 72.087832) (xy 110.985537 72.211082) (xy 110.717748 72.390013) (xy 110.490013 72.617748) (xy 110.311082 72.885537) (xy 110.187832 73.183088) (xy 110.125 73.498967) (xy 77.597 73.498967) (xy 77.597 59.817) (xy 102.337532 59.817) ) ) ) (zone (net 53) (net_name "Net-(D301-Pad2)") (layer F.Cu) (tstamp 6070EADA) (hatch edge 0.508) (priority 1) (connect_pads yes (clearance 0.508)) (min_thickness 0.254) (fill yes (arc_segments 32) (thermal_gap 0.508) (thermal_bridge_width 0.508)) (polygon (pts (xy 108.458 89.154) (xy 102.108 89.154) (xy 102.235 77.47) (xy 108.458 77.47) ) ) (filled_polygon (pts (xy 108.331 89.027) (xy 102.236387 89.027) (xy 102.360627 77.597) (xy 108.331 77.597) ) ) ) (zone (net 56) (net_name /PowerChannel1/POWER_OUT) (layer F.Cu) (tstamp 6070EAD7) (hatch edge 0.508) (connect_pads yes (clearance 0.25)) (min_thickness 0.254) (fill yes (arc_segments 32) (thermal_gap 0.508) (thermal_bridge_width 0.508)) (polygon (pts (xy 113.538 76.454) (xy 100.584 76.454) (xy 100.584 72.136) (xy 113.538 72.136) ) ) (filled_polygon (pts (xy 113.411 76.327) (xy 101.342137 76.327) (xy 101.317787 76.307017) (xy 101.208004 76.248336) (xy 101.088882 76.212201) (xy 100.965 76.2) (xy 100.965 72.433824) (xy 103.145 72.433824) (xy 103.218905 72.426545) (xy 103.28997 72.404988) (xy 103.355463 72.369981) (xy 103.412869 72.322869) (xy 103.459981 72.265463) (xy 103.461298 72.263) (xy 113.411 72.263) ) ) ) (zone (net 69) (net_name /PowerChannel1/POWER_IN) (layer F.Cu) (tstamp 6070EAD4) (hatch edge 0.508) (connect_pads yes (clearance 0.25)) (min_thickness 0.254) (fill yes (arc_segments 32) (thermal_gap 0.508) (thermal_bridge_width 0.508)) (polygon (pts (xy 116.84 89.154) (xy 109.728 89.154) (xy 109.728 77.47) (xy 116.84 77.47) ) ) (filled_polygon (pts (xy 116.713 89.015706) (xy 116.701706 89.027) (xy 109.855 89.027) (xy 109.855 77.597) (xy 116.713 77.597) ) ) ) (zone (net 70) (net_name /PowerChannel2/POWER_IN) (layer F.Cu) (tstamp 6070EAD1) (hatch edge 0.508) (connect_pads yes (clearance 0.25)) (min_thickness 0.254) (fill yes (arc_segments 32) (thermal_gap 0.508) (thermal_bridge_width 0.508)) (polygon (pts (xy 116.84 121.539) (xy 109.728 121.539) (xy 109.728 109.855) (xy 116.84 109.855) ) ) (filled_polygon (pts (xy 116.713 121.400706) (xy 116.701706 121.412) (xy 109.855 121.412) (xy 109.855 109.982) (xy 116.713 109.982) ) ) ) (zone (net 50) (net_name /PowerChannel2/POWER_MONITORED) (layer F.Cu) (tstamp 6070EACE) (hatch edge 0.508) (priority 1) (connect_pads yes (clearance 0.508)) (min_thickness 0.254) (fill yes (arc_segments 32) (thermal_gap 0.508) (thermal_bridge_width 0.508)) (polygon (pts (xy 100.33 109.22) (xy 100.965 109.22) (xy 100.965 113.03) (xy 100.33 113.03) (xy 100.33 115.951) (xy 77.47 115.951) (xy 77.47 92.075) (xy 100.33 92.075) ) ) (filled_polygon (pts (xy 100.203 100.956951) (xy 100.155498 101.04582) (xy 100.119188 101.165518) (xy 100.106928 101.29) (xy 100.106928 101.89) (xy 100.119188 102.014482) (xy 100.119345 102.015) (xy 100.119188 102.015518) (xy 100.106928 102.14) (xy 100.106928 102.74) (xy 100.119188 102.864482) (xy 100.119345 102.865) (xy 100.119188 102.865518) (xy 100.106928 102.99) (xy 100.106928 103.59) (xy 100.119188 103.714482) (xy 100.119345 103.715) (xy 100.119188 103.715518) (xy 100.106928 103.84) (xy 100.106928 104.44) (xy 100.119188 104.564482) (xy 100.119345 104.565) (xy 100.119188 104.565518) (xy 100.106928 104.69) (xy 100.106928 105.29) (xy 100.119188 105.414482) (xy 100.119345 105.415) (xy 100.119188 105.415518) (xy 100.106928 105.54) (xy 100.106928 106.14) (xy 100.119188 106.264482) (xy 100.119345 106.265) (xy 100.119188 106.265518) (xy 100.106928 106.39) (xy 100.106928 106.99) (xy 100.119188 107.114482) (xy 100.155498 107.23418) (xy 100.203 107.323049) (xy 100.203 109.22) (xy 100.20544 109.244776) (xy 100.212667 109.268601) (xy 100.224403 109.290557) (xy 100.240197 109.309803) (xy 100.259443 109.325597) (xy 100.281399 109.337333) (xy 100.305224 109.34456) (xy 100.33 109.347) (xy 100.838 109.347) (xy 100.838 112.903) (xy 100.33 112.903) (xy 100.305224 112.90544) (xy 100.281399 112.912667) (xy 100.259443 112.924403) (xy 100.240197 112.940197) (xy 100.224403 112.959443) (xy 100.212667 112.981399) (xy 100.20544 113.005224) (xy 100.203 113.03) (xy 100.203 115.824) (xy 77.597 115.824) (xy 77.597 92.202) (xy 100.203 92.202) ) ) ) (zone (net 57) (net_name "Net-(D401-Pad2)") (layer F.Cu) (tstamp 6070EACB) (hatch edge 0.508) (priority 1) (connect_pads yes (clearance 0.508)) (min_thickness 0.254) (fill yes (arc_segments 32) (thermal_gap 0.508) (thermal_bridge_width 0.508)) (polygon (pts (xy 108.458 121.539) (xy 102.108 121.539) (xy 102.235 109.855) (xy 108.458 109.855) ) ) (filled_polygon (pts (xy 108.331 121.412) (xy 102.236387 121.412) (xy 102.360627 109.982) (xy 108.331 109.982) ) ) ) (zone (net 50) (net_name /PowerChannel2/POWER_MONITORED) (layer B.Cu) (tstamp 6070EAC8) (hatch edge 0.508) (priority 1) (connect_pads yes (clearance 0.508)) (min_thickness 0.254) (fill yes (arc_segments 32) (thermal_gap 0.508) (thermal_bridge_width 0.508)) (polygon (pts (xy 116.332 116.205) (xy 77.47 116.205) (xy 77.47 92.075) (xy 116.332 92.075) ) ) (filled_polygon (pts (xy 102.379744 92.230205) (xy 102.568102 92.308226) (xy 102.768061 92.348) (xy 102.971939 92.348) (xy 103.171898 92.308226) (xy 103.360256 92.230205) (xy 103.402468 92.202) (xy 116.205 92.202) (xy 116.205 116.078) (xy 77.597 116.078) (xy 77.597 110.125) (xy 110.121928 110.125) (xy 110.121928 112.125) (xy 110.134188 112.249482) (xy 110.170498 112.36918) (xy 110.229463 112.479494) (xy 110.308815 112.576185) (xy 110.405506 112.655537) (xy 110.51582 112.714502) (xy 110.635518 112.750812) (xy 110.76 112.763072) (xy 112.76 112.763072) (xy 112.884482 112.750812) (xy 113.00418 112.714502) (xy 113.114494 112.655537) (xy 113.211185 112.576185) (xy 113.290537 112.479494) (xy 113.349502 112.36918) (xy 113.385812 112.249482) (xy 113.398072 112.125) (xy 113.398072 110.125) (xy 113.385812 110.000518) (xy 113.349502 109.88082) (xy 113.290537 109.770506) (xy 113.211185 109.673815) (xy 113.114494 109.594463) (xy 113.00418 109.535498) (xy 112.884482 109.499188) (xy 112.76 109.486928) (xy 110.76 109.486928) (xy 110.635518 109.499188) (xy 110.51582 109.535498) (xy 110.405506 109.594463) (xy 110.308815 109.673815) (xy 110.229463 109.770506) (xy 110.170498 109.88082) (xy 110.134188 110.000518) (xy 110.121928 110.125) (xy 77.597 110.125) (xy 77.597 105.883967) (xy 110.125 105.883967) (xy 110.125 106.206033) (xy 110.187832 106.521912) (xy 110.311082 106.819463) (xy 110.490013 107.087252) (xy 110.717748 107.314987) (xy 110.985537 107.493918) (xy 111.283088 107.617168) (xy 111.598967 107.68) (xy 111.921033 107.68) (xy 112.236912 107.617168) (xy 112.534463 107.493918) (xy 112.802252 107.314987) (xy 113.029987 107.087252) (xy 113.208918 106.819463) (xy 113.332168 106.521912) (xy 113.395 106.206033) (xy 113.395 105.883967) (xy 113.332168 105.568088) (xy 113.208918 105.270537) (xy 113.029987 105.002748) (xy 112.802252 104.775013) (xy 112.534463 104.596082) (xy 112.236912 104.472832) (xy 111.921033 104.41) (xy 111.598967 104.41) (xy 111.283088 104.472832) (xy 110.985537 104.596082) (xy 110.717748 104.775013) (xy 110.490013 105.002748) (xy 110.311082 105.270537) (xy 110.187832 105.568088) (xy 110.125 105.883967) (xy 77.597 105.883967) (xy 77.597 92.202) (xy 102.337532 92.202) ) ) ) (zone (net 59) (net_name /PowerChannel2/POWER_OUT) (layer F.Cu) (tstamp 6070EAC5) (hatch edge 0.508) (connect_pads yes (clearance 0.25)) (min_thickness 0.254) (fill yes (arc_segments 32) (thermal_gap 0.508) (thermal_bridge_width 0.508)) (polygon (pts (xy 113.538 108.839) (xy 100.584 108.839) (xy 100.584 104.521) (xy 113.538 104.521) ) ) (filled_polygon (pts (xy 113.411 108.712) (xy 101.342137 108.712) (xy 101.317787 108.692017) (xy 101.208004 108.633336) (xy 101.088882 108.597201) (xy 100.965 108.585) (xy 100.965 104.818824) (xy 103.145 104.818824) (xy 103.218905 104.811545) (xy 103.28997 104.789988) (xy 103.355463 104.754981) (xy 103.412869 104.707869) (xy 103.459981 104.650463) (xy 103.461298 104.648) (xy 113.411 104.648) ) ) ) (zone (net 71) (net_name /PowerChannel3/POWER_IN) (layer F.Cu) (tstamp 6070EAC2) (hatch edge 0.508) (connect_pads yes (clearance 0.25)) (min_thickness 0.254) (fill yes (arc_segments 32) (thermal_gap 0.508) (thermal_bridge_width 0.508)) (polygon (pts (xy 116.84 153.924) (xy 109.728 153.924) (xy 109.728 142.24) (xy 116.84 142.24) ) ) (filled_polygon (pts (xy 116.713 153.785706) (xy 116.701706 153.797) (xy 109.855 153.797) (xy 109.855 142.367) (xy 116.713 142.367) ) ) ) (zone (net 51) (net_name /PowerChannel3/POWER_MONITORED) (layer F.Cu) (tstamp 6070EABF) (hatch edge 0.508) (priority 1) (connect_pads yes (clearance 0.508)) (min_thickness 0.254) (fill yes (arc_segments 32) (thermal_gap 0.508) (thermal_bridge_width 0.508)) (polygon (pts (xy 100.33 141.605) (xy 100.965 141.605) (xy 100.965 145.415) (xy 100.33 145.415) (xy 100.33 148.336) (xy 77.47 148.336) (xy 77.47 124.46) (xy 100.33 124.46) ) ) (filled_polygon (pts (xy 100.203 133.341951) (xy 100.155498 133.43082) (xy 100.119188 133.550518) (xy 100.106928 133.675) (xy 100.106928 134.275) (xy 100.119188 134.399482) (xy 100.119345 134.4) (xy 100.119188 134.400518) (xy 100.106928 134.525) (xy 100.106928 135.125) (xy 100.119188 135.249482) (xy 100.119345 135.25) (xy 100.119188 135.250518) (xy 100.106928 135.375) (xy 100.106928 135.975) (xy 100.119188 136.099482) (xy 100.119345 136.1) (xy 100.119188 136.100518) (xy 100.106928 136.225) (xy 100.106928 136.825) (xy 100.119188 136.949482) (xy 100.119345 136.95) (xy 100.119188 136.950518) (xy 100.106928 137.075) (xy 100.106928 137.675) (xy 100.119188 137.799482) (xy 100.119345 137.8) (xy 100.119188 137.800518) (xy 100.106928 137.925) (xy 100.106928 138.525) (xy 100.119188 138.649482) (xy 100.119345 138.65) (xy 100.119188 138.650518) (xy 100.106928 138.775) (xy 100.106928 139.375) (xy 100.119188 139.499482) (xy 100.155498 139.61918) (xy 100.203 139.708049) (xy 100.203 141.605) (xy 100.20544 141.629776) (xy 100.212667 141.653601) (xy 100.224403 141.675557) (xy 100.240197 141.694803) (xy 100.259443 141.710597) (xy 100.281399 141.722333) (xy 100.305224 141.72956) (xy 100.33 141.732) (xy 100.838 141.732) (xy 100.838 145.288) (xy 100.33 145.288) (xy 100.305224 145.29044) (xy 100.281399 145.297667) (xy 100.259443 145.309403) (xy 100.240197 145.325197) (xy 100.224403 145.344443) (xy 100.212667 145.366399) (xy 100.20544 145.390224) (xy 100.203 145.415) (xy 100.203 148.209) (xy 77.597 148.209) (xy 77.597 124.587) (xy 100.203 124.587) ) ) ) (zone (net 61) (net_name "Net-(D501-Pad2)") (layer F.Cu) (tstamp 6070EABC) (hatch edge 0.508) (priority 1) (connect_pads yes (clearance 0.508)) (min_thickness 0.254) (fill yes (arc_segments 32) (thermal_gap 0.508) (thermal_bridge_width 0.508)) (polygon (pts (xy 108.458 153.924) (xy 102.108 153.924) (xy 102.235 142.24) (xy 108.458 142.24) ) ) (filled_polygon (pts (xy 108.331 153.797) (xy 102.236387 153.797) (xy 102.360627 142.367) (xy 108.331 142.367) ) ) ) (zone (net 51) (net_name /PowerChannel3/POWER_MONITORED) (layer B.Cu) (tstamp 6070EAB9) (hatch edge 0.508) (priority 1) (connect_pads yes (clearance 0.508)) (min_thickness 0.254) (fill yes (arc_segments 32) (thermal_gap 0.508) (thermal_bridge_width 0.508)) (polygon (pts (xy 116.332 148.59) (xy 77.47 148.59) (xy 77.47 124.46) (xy 116.332 124.46) ) ) (filled_polygon (pts (xy 102.379744 124.615205) (xy 102.568102 124.693226) (xy 102.768061 124.733) (xy 102.971939 124.733) (xy 103.171898 124.693226) (xy 103.360256 124.615205) (xy 103.402468 124.587) (xy 116.205 124.587) (xy 116.205 148.463) (xy 77.597 148.463) (xy 77.597 142.51) (xy 110.121928 142.51) (xy 110.121928 144.51) (xy 110.134188 144.634482) (xy 110.170498 144.75418) (xy 110.229463 144.864494) (xy 110.308815 144.961185) (xy 110.405506 145.040537) (xy 110.51582 145.099502) (xy 110.635518 145.135812) (xy 110.76 145.148072) (xy 112.76 145.148072) (xy 112.884482 145.135812) (xy 113.00418 145.099502) (xy 113.114494 145.040537) (xy 113.211185 144.961185) (xy 113.290537 144.864494) (xy 113.349502 144.75418) (xy 113.385812 144.634482) (xy 113.398072 144.51) (xy 113.398072 142.51) (xy 113.385812 142.385518) (xy 113.349502 142.26582) (xy 113.290537 142.155506) (xy 113.211185 142.058815) (xy 113.114494 141.979463) (xy 113.00418 141.920498) (xy 112.884482 141.884188) (xy 112.76 141.871928) (xy 110.76 141.871928) (xy 110.635518 141.884188) (xy 110.51582 141.920498) (xy 110.405506 141.979463) (xy 110.308815 142.058815) (xy 110.229463 142.155506) (xy 110.170498 142.26582) (xy 110.134188 142.385518) (xy 110.121928 142.51) (xy 77.597 142.51) (xy 77.597 138.268967) (xy 110.125 138.268967) (xy 110.125 138.591033) (xy 110.187832 138.906912) (xy 110.311082 139.204463) (xy 110.490013 139.472252) (xy 110.717748 139.699987) (xy 110.985537 139.878918) (xy 111.283088 140.002168) (xy 111.598967 140.065) (xy 111.921033 140.065) (xy 112.236912 140.002168) (xy 112.534463 139.878918) (xy 112.802252 139.699987) (xy 113.029987 139.472252) (xy 113.208918 139.204463) (xy 113.332168 138.906912) (xy 113.395 138.591033) (xy 113.395 138.268967) (xy 113.332168 137.953088) (xy 113.208918 137.655537) (xy 113.029987 137.387748) (xy 112.802252 137.160013) (xy 112.534463 136.981082) (xy 112.236912 136.857832) (xy 111.921033 136.795) (xy 111.598967 136.795) (xy 111.283088 136.857832) (xy 110.985537 136.981082) (xy 110.717748 137.160013) (xy 110.490013 137.387748) (xy 110.311082 137.655537) (xy 110.187832 137.953088) (xy 110.125 138.268967) (xy 77.597 138.268967) (xy 77.597 124.587) (xy 102.337532 124.587) ) ) ) (zone (net 63) (net_name /PowerChannel3/POWER_OUT) (layer F.Cu) (tstamp 6070EAB6) (hatch edge 0.508) (connect_pads yes (clearance 0.25)) (min_thickness 0.254) (fill yes (arc_segments 32) (thermal_gap 0.508) (thermal_bridge_width 0.508)) (polygon (pts (xy 113.538 141.224) (xy 100.584 141.224) (xy 100.584 136.906) (xy 113.538 136.906) ) ) (filled_polygon (pts (xy 113.411 141.097) (xy 101.342137 141.097) (xy 101.317787 141.077017) (xy 101.208004 141.018336) (xy 101.088882 140.982201) (xy 100.965 140.97) (xy 100.965 137.203824) (xy 103.145 137.203824) (xy 103.218905 137.196545) (xy 103.28997 137.174988) (xy 103.355463 137.139981) (xy 103.412869 137.092869) (xy 103.459981 137.035463) (xy 103.461298 137.033) (xy 113.411 137.033) ) ) ) (zone (net 72) (net_name /PowerChannel4/POWER_IN) (layer F.Cu) (tstamp 6070EAB3) (hatch edge 0.508) (connect_pads yes (clearance 0.25)) (min_thickness 0.254) (fill yes (arc_segments 32) (thermal_gap 0.508) (thermal_bridge_width 0.508)) (polygon (pts (xy 116.84 186.309) (xy 109.728 186.309) (xy 109.728 174.625) (xy 116.84 174.625) ) ) (filled_polygon (pts (xy 116.713 186.170706) (xy 116.701706 186.182) (xy 109.855 186.182) (xy 109.855 174.752) (xy 116.713 174.752) ) ) ) (zone (net 52) (net_name /PowerChannel4/POWER_MONITORED) (layer F.Cu) (tstamp 6070EAB0) (hatch edge 0.508) (priority 1) (connect_pads yes (clearance 0.508)) (min_thickness 0.254) (fill yes (arc_segments 32) (thermal_gap 0.508) (thermal_bridge_width 0.508)) (polygon (pts (xy 100.33 173.99) (xy 100.965 173.99) (xy 100.965 177.8) (xy 100.33 177.8) (xy 100.33 180.721) (xy 77.47 180.721) (xy 77.47 156.845) (xy 100.33 156.845) ) ) (filled_polygon (pts (xy 100.203 165.726951) (xy 100.155498 165.81582) (xy 100.119188 165.935518) (xy 100.106928 166.06) (xy 100.106928 166.66) (xy 100.119188 166.784482) (xy 100.119345 166.785) (xy 100.119188 166.785518) (xy 100.106928 166.91) (xy 100.106928 167.51) (xy 100.119188 167.634482) (xy 100.119345 167.635) (xy 100.119188 167.635518) (xy 100.106928 167.76) (xy 100.106928 168.36) (xy 100.119188 168.484482) (xy 100.119345 168.485) (xy 100.119188 168.485518) (xy 100.106928 168.61) (xy 100.106928 169.21) (xy 100.119188 169.334482) (xy 100.119345 169.335) (xy 100.119188 169.335518) (xy 100.106928 169.46) (xy 100.106928 170.06) (xy 100.119188 170.184482) (xy 100.119345 170.185) (xy 100.119188 170.185518) (xy 100.106928 170.31) (xy 100.106928 170.91) (xy 100.119188 171.034482) (xy 100.119345 171.035) (xy 100.119188 171.035518) (xy 100.106928 171.16) (xy 100.106928 171.76) (xy 100.119188 171.884482) (xy 100.155498 172.00418) (xy 100.203 172.093049) (xy 100.203 173.99) (xy 100.20544 174.014776) (xy 100.212667 174.038601) (xy 100.224403 174.060557) (xy 100.240197 174.079803) (xy 100.259443 174.095597) (xy 100.281399 174.107333) (xy 100.305224 174.11456) (xy 100.33 174.117) (xy 100.838 174.117) (xy 100.838 177.673) (xy 100.33 177.673) (xy 100.305224 177.67544) (xy 100.281399 177.682667) (xy 100.259443 177.694403) (xy 100.240197 177.710197) (xy 100.224403 177.729443) (xy 100.212667 177.751399) (xy 100.20544 177.775224) (xy 100.203 177.8) (xy 100.203 180.594) (xy 77.597 180.594) (xy 77.597 156.972) (xy 100.203 156.972) ) ) ) (zone (net 65) (net_name "Net-(D601-Pad2)") (layer F.Cu) (tstamp 6070EAAD) (hatch edge 0.508) (priority 1) (connect_pads yes (clearance 0.508)) (min_thickness 0.254) (fill yes (arc_segments 32) (thermal_gap 0.508) (thermal_bridge_width 0.508)) (polygon (pts (xy 108.458 186.309) (xy 102.108 186.309) (xy 102.235 174.625) (xy 108.458 174.625) ) ) (filled_polygon (pts (xy 108.331 186.182) (xy 102.236387 186.182) (xy 102.360627 174.752) (xy 108.331 174.752) ) ) ) (zone (net 52) (net_name /PowerChannel4/POWER_MONITORED) (layer B.Cu) (tstamp 6070EAAA) (hatch edge 0.508) (priority 1) (connect_pads yes (clearance 0.508)) (min_thickness 0.254) (fill yes (arc_segments 32) (thermal_gap 0.508) (thermal_bridge_width 0.508)) (polygon (pts (xy 116.332 180.975) (xy 77.47 180.975) (xy 77.47 156.845) (xy 116.332 156.845) ) ) (filled_polygon (pts (xy 102.379744 157.000205) (xy 102.568102 157.078226) (xy 102.768061 157.118) (xy 102.971939 157.118) (xy 103.171898 157.078226) (xy 103.360256 157.000205) (xy 103.402468 156.972) (xy 116.205 156.972) (xy 116.205 180.848) (xy 77.597 180.848) (xy 77.597 174.895) (xy 110.121928 174.895) (xy 110.121928 176.895) (xy 110.134188 177.019482) (xy 110.170498 177.13918) (xy 110.229463 177.249494) (xy 110.308815 177.346185) (xy 110.405506 177.425537) (xy 110.51582 177.484502) (xy 110.635518 177.520812) (xy 110.76 177.533072) (xy 112.76 177.533072) (xy 112.884482 177.520812) (xy 113.00418 177.484502) (xy 113.114494 177.425537) (xy 113.211185 177.346185) (xy 113.290537 177.249494) (xy 113.349502 177.13918) (xy 113.385812 177.019482) (xy 113.398072 176.895) (xy 113.398072 174.895) (xy 113.385812 174.770518) (xy 113.349502 174.65082) (xy 113.290537 174.540506) (xy 113.211185 174.443815) (xy 113.114494 174.364463) (xy 113.00418 174.305498) (xy 112.884482 174.269188) (xy 112.76 174.256928) (xy 110.76 174.256928) (xy 110.635518 174.269188) (xy 110.51582 174.305498) (xy 110.405506 174.364463) (xy 110.308815 174.443815) (xy 110.229463 174.540506) (xy 110.170498 174.65082) (xy 110.134188 174.770518) (xy 110.121928 174.895) (xy 77.597 174.895) (xy 77.597 170.653967) (xy 110.125 170.653967) (xy 110.125 170.976033) (xy 110.187832 171.291912) (xy 110.311082 171.589463) (xy 110.490013 171.857252) (xy 110.717748 172.084987) (xy 110.985537 172.263918) (xy 111.283088 172.387168) (xy 111.598967 172.45) (xy 111.921033 172.45) (xy 112.236912 172.387168) (xy 112.534463 172.263918) (xy 112.802252 172.084987) (xy 113.029987 171.857252) (xy 113.208918 171.589463) (xy 113.332168 171.291912) (xy 113.395 170.976033) (xy 113.395 170.653967) (xy 113.332168 170.338088) (xy 113.208918 170.040537) (xy 113.029987 169.772748) (xy 112.802252 169.545013) (xy 112.534463 169.366082) (xy 112.236912 169.242832) (xy 111.921033 169.18) (xy 111.598967 169.18) (xy 111.283088 169.242832) (xy 110.985537 169.366082) (xy 110.717748 169.545013) (xy 110.490013 169.772748) (xy 110.311082 170.040537) (xy 110.187832 170.338088) (xy 110.125 170.653967) (xy 77.597 170.653967) (xy 77.597 156.972) (xy 102.337532 156.972) ) ) ) (zone (net 67) (net_name /PowerChannel4/POWER_OUT) (layer F.Cu) (tstamp 6070EAA7) (hatch edge 0.508) (connect_pads yes (clearance 0.25)) (min_thickness 0.254) (fill yes (arc_segments 32) (thermal_gap 0.508) (thermal_bridge_width 0.508)) (polygon (pts (xy 113.538 173.609) (xy 100.584 173.609) (xy 100.584 169.291) (xy 113.538 169.291) ) ) (filled_polygon (pts (xy 113.411 173.482) (xy 101.342137 173.482) (xy 101.317787 173.462017) (xy 101.208004 173.403336) (xy 101.088882 173.367201) (xy 100.965 173.355) (xy 100.965 169.588824) (xy 103.145 169.588824) (xy 103.218905 169.581545) (xy 103.28997 169.559988) (xy 103.355463 169.524981) (xy 103.412869 169.477869) (xy 103.459981 169.420463) (xy 103.461298 169.418) (xy 113.411 169.418) ) ) ) (zone (net 2) (net_name GND) (layer B.Cu) (tstamp 6070EAA4) (hatch edge 0.508) (connect_pads (clearance 0.25)) (min_thickness 0.254) (fill yes (arc_segments 32) (thermal_gap 0.508) (thermal_bridge_width 0.508)) (polygon (pts (xy 123.825 215.9) (xy 25.4 215.9) (xy 25.4 25.4) (xy 123.825 25.4) ) ) (filled_polygon (pts (xy 26.302572 26.122967) (xy 28.575 28.395395) (xy 30.847428 26.122967) (xy 30.622388 25.802) (xy 118.602612 25.802) (xy 118.377572 26.122967) (xy 120.65 28.395395) (xy 122.922428 26.122967) (xy 122.697388 25.802) (xy 123.423 25.802) (xy 123.423 26.527612) (xy 123.102033 26.302572) (xy 120.829605 28.575) (xy 123.102033 30.847428) (xy 123.423 30.622388) (xy 123.423001 210.677612) (xy 123.102033 210.452572) (xy 120.829605 212.725) (xy 123.102033 214.997428) (xy 123.423001 214.772388) (xy 123.423001 215.498) (xy 122.697388 215.498) (xy 122.922428 215.177033) (xy 120.65 212.904605) (xy 118.377572 215.177033) (xy 118.602612 215.498) (xy 30.622388 215.498) (xy 30.847428 215.177033) (xy 28.575 212.904605) (xy 26.302572 215.177033) (xy 26.527612 215.498) (xy 25.802 215.498) (xy 25.802 214.772388) (xy 26.122967 214.997428) (xy 28.395395 212.725) (xy 28.754605 212.725) (xy 31.027033 214.997428) (xy 31.48085 214.679243) (xy 31.806269 214.07479) (xy 32.007512 213.418465) (xy 32.076845 212.73549) (xy 32.011605 212.052112) (xy 31.982277 211.954377) (xy 60.853 211.954377) (xy 60.853 212.225623) (xy 60.905917 212.491656) (xy 61.009718 212.742254) (xy 61.160414 212.967787) (xy 61.352213 213.159586) (xy 61.577746 213.310282) (xy 61.828344 213.414083) (xy 62.094377 213.467) (xy 62.365623 213.467) (xy 62.631656 213.414083) (xy 62.882254 213.310282) (xy 63.107787 213.159586) (xy 63.136003 213.13137) (xy 63.144188 213.214482) (xy 63.180498 213.33418) (xy 63.239463 213.444494) (xy 63.318815 213.541185) (xy 63.415506 213.620537) (xy 63.52582 213.679502) (xy 63.645518 213.715812) (xy 63.77 213.728072) (xy 64.48425 213.725) (xy 64.643 213.56625) (xy 64.643 212.217) (xy 64.623 212.217) (xy 64.623 211.963) (xy 64.643 211.963) (xy 64.643 210.61375) (xy 64.897 210.61375) (xy 64.897 211.963) (xy 64.917 211.963) (xy 64.917 212.217) (xy 64.897 212.217) (xy 64.897 213.56625) (xy 65.05575 213.725) (xy 65.77 213.728072) (xy 65.894482 213.715812) (xy 66.01418 213.679502) (xy 66.124494 213.620537) (xy 66.221185 213.541185) (xy 66.282771 213.466142) (xy 66.31 213.468824) (xy 68.31 213.468824) (xy 68.383905 213.461545) (xy 68.45497 213.439988) (xy 68.520463 213.404981) (xy 68.577869 213.357869) (xy 68.624981 213.300463) (xy 68.659988 213.23497) (xy 68.681545 213.163905) (xy 68.688824 213.09) (xy 68.688824 212.71451) (xy 117.148155 212.71451) (xy 117.213395 213.397888) (xy 117.410702 214.055407) (xy 117.732494 214.661799) (xy 117.74415 214.679243) (xy 118.197967 214.997428) (xy 120.470395 212.725) (xy 118.197967 210.452572) (xy 117.74415 210.770757) (xy 117.418731 211.37521) (xy 117.217488 212.031535) (xy 117.148155 212.71451) (xy 68.688824 212.71451) (xy 68.688824 211.09) (xy 68.681545 211.016095) (xy 68.659988 210.94503) (xy 68.624981 210.879537) (xy 68.577869 210.822131) (xy 68.520463 210.775019) (xy 68.45497 210.740012) (xy 68.383905 210.718455) (xy 68.31 210.711176) (xy 66.31 210.711176) (xy 66.282771 210.713858) (xy 66.221185 210.638815) (xy 66.124494 210.559463) (xy 66.01418 210.500498) (xy 65.894482 210.464188) (xy 65.77 210.451928) (xy 65.05575 210.455) (xy 64.897 210.61375) (xy 64.643 210.61375) (xy 64.48425 210.455) (xy 63.77 210.451928) (xy 63.645518 210.464188) (xy 63.52582 210.500498) (xy 63.415506 210.559463) (xy 63.318815 210.638815) (xy 63.239463 210.735506) (xy 63.180498 210.84582) (xy 63.144188 210.965518) (xy 63.136003 211.04863) (xy 63.107787 211.020414) (xy 62.882254 210.869718) (xy 62.631656 210.765917) (xy 62.365623 210.713) (xy 62.094377 210.713) (xy 61.828344 210.765917) (xy 61.577746 210.869718) (xy 61.352213 211.020414) (xy 61.160414 211.212213) (xy 61.009718 211.437746) (xy 60.905917 211.688344) (xy 60.853 211.954377) (xy 31.982277 211.954377) (xy 31.814298 211.394593) (xy 31.492506 210.788201) (xy 31.48085 210.770757) (xy 31.027033 210.452572) (xy 28.754605 212.725) (xy 28.395395 212.725) (xy 26.122967 210.452572) (xy 25.802 210.677612) (xy 25.802 209.394122) (xy 25.869208 209.598261) (xy 26.141775 209.729158) (xy 26.434642 209.804365) (xy 26.627028 209.81496) (xy 26.620757 209.81915) (xy 26.302572 210.272967) (xy 28.575 212.545395) (xy 30.847428 210.272967) (xy 118.377572 210.272967) (xy 120.65 212.545395) (xy 122.922428 210.272967) (xy 122.604243 209.81915) (xy 121.99979 209.493731) (xy 121.343465 209.292488) (xy 120.66049 209.223155) (xy 119.977112 209.288395) (xy 119.319593 209.485702) (xy 118.713201 209.807494) (xy 118.695757 209.81915) (xy 118.377572 210.272967) (xy 30.847428 210.272967) (xy 30.529243 209.81915) (xy 30.027076 209.548799) (xy 30.094475 209.34408) (xy 29.21 208.459605) (xy 29.195858 208.473748) (xy 29.016253 208.294143) (xy 29.030395 208.28) (xy 28.14592 207.395525) (xy 27.94 207.463319) (xy 27.73408 207.395525) (xy 26.849605 208.28) (xy 26.863748 208.294143) (xy 26.684143 208.473748) (xy 26.67 208.459605) (xy 26.655858 208.473748) (xy 26.476253 208.294143) (xy 26.490395 208.28) (xy 26.476253 208.265858) (xy 26.655858 208.086253) (xy 26.67 208.100395) (xy 27.554475 207.21592) (xy 27.486681 207.01) (xy 27.554475 206.80408) (xy 28.325525 206.80408) (xy 28.393319 207.01) (xy 28.325525 207.21592) (xy 29.21 208.100395) (xy 30.094475 207.21592) (xy 30.026681 207.01) (xy 30.094475 206.80408) (xy 29.21 205.919605) (xy 28.325525 206.80408) (xy 27.554475 206.80408) (xy 26.67 205.919605) (xy 26.655858 205.933748) (xy 26.476253 205.754143) (xy 26.490395 205.74) (xy 26.849605 205.74) (xy 27.73408 206.624475) (xy 27.94 206.556681) (xy 28.14592 206.624475) (xy 29.030395 205.74) (xy 29.389605 205.74) (xy 30.27408 206.624475) (xy 30.528261 206.540792) (xy 30.620667 206.348374) (xy 30.758089 206.55404) (xy 30.93596 206.731911) (xy 31.145114 206.871663) (xy 31.377513 206.967926) (xy 31.589034 207.01) (xy 31.377513 207.052074) (xy 31.145114 207.148337) (xy 30.93596 207.288089) (xy 30.758089 207.46596) (xy 30.622366 207.669083) (xy 30.608222 207.628801) (xy 30.528261 207.479208) (xy 30.27408 207.395525) (xy 29.389605 208.28) (xy 30.27408 209.164475) (xy 30.528261 209.080792) (xy 30.620667 208.888374) (xy 30.758089 209.09404) (xy 30.93596 209.271911) (xy 31.145114 209.411663) (xy 31.377513 209.507926) (xy 31.624226 209.557) (xy 31.875774 209.557) (xy 32.122487 209.507926) (xy 32.354886 209.411663) (xy 32.56404 209.271911) (xy 32.741911 209.09404) (xy 32.881663 208.884886) (xy 32.977926 208.652487) (xy 33.02 208.440966) (xy 33.062074 208.652487) (xy 33.158337 208.884886) (xy 33.298089 209.09404) (xy 33.47596 209.271911) (xy 33.685114 209.411663) (xy 33.917513 209.507926) (xy 34.164226 209.557) (xy 34.415774 209.557) (xy 34.662487 209.507926) (xy 34.894886 209.411663) (xy 35.10404 209.271911) (xy 35.281911 209.09404) (xy 35.421663 208.884886) (xy 35.517926 208.652487) (xy 35.56 208.440966) (xy 35.602074 208.652487) (xy 35.698337 208.884886) (xy 35.838089 209.09404) (xy 36.01596 209.271911) (xy 36.225114 209.411663) (xy 36.457513 209.507926) (xy 36.704226 209.557) (xy 36.955774 209.557) (xy 37.202487 209.507926) (xy 37.434886 209.411663) (xy 37.64404 209.271911) (xy 37.821911 209.09404) (xy 37.961663 208.884886) (xy 38.057926 208.652487) (xy 38.1 208.440966) (xy 38.142074 208.652487) (xy 38.238337 208.884886) (xy 38.378089 209.09404) (xy 38.55596 209.271911) (xy 38.765114 209.411663) (xy 38.997513 209.507926) (xy 39.244226 209.557) (xy 39.495774 209.557) (xy 39.742487 209.507926) (xy 39.974886 209.411663) (xy 40.18404 209.271911) (xy 40.361911 209.09404) (xy 40.501663 208.884886) (xy 40.597926 208.652487) (xy 40.64 208.440966) (xy 40.682074 208.652487) (xy 40.778337 208.884886) (xy 40.918089 209.09404) (xy 41.09596 209.271911) (xy 41.305114 209.411663) (xy 41.537513 209.507926) (xy 41.784226 209.557) (xy 42.035774 209.557) (xy 42.282487 209.507926) (xy 42.514886 209.411663) (xy 42.72404 209.271911) (xy 42.901911 209.09404) (xy 43.041663 208.884886) (xy 43.137926 208.652487) (xy 43.18 208.440966) (xy 43.222074 208.652487) (xy 43.318337 208.884886) (xy 43.458089 209.09404) (xy 43.63596 209.271911) (xy 43.845114 209.411663) (xy 44.077513 209.507926) (xy 44.324226 209.557) (xy 44.575774 209.557) (xy 44.822487 209.507926) (xy 45.054886 209.411663) (xy 45.26404 209.271911) (xy 45.441911 209.09404) (xy 45.581663 208.884886) (xy 45.677926 208.652487) (xy 45.72 208.440966) (xy 45.762074 208.652487) (xy 45.858337 208.884886) (xy 45.998089 209.09404) (xy 46.17596 209.271911) (xy 46.385114 209.411663) (xy 46.617513 209.507926) (xy 46.864226 209.557) (xy 47.115774 209.557) (xy 47.362487 209.507926) (xy 47.594886 209.411663) (xy 47.696031 209.34408) (xy 48.645525 209.34408) (xy 48.729208 209.598261) (xy 49.001775 209.729158) (xy 49.294642 209.804365) (xy 49.596553 209.820991) (xy 49.895907 209.778397) (xy 50.181199 209.678222) (xy 50.330792 209.598261) (xy 50.414475 209.34408) (xy 51.185525 209.34408) (xy 51.269208 209.598261) (xy 51.541775 209.729158) (xy 51.834642 209.804365) (xy 52.136553 209.820991) (xy 52.435907 209.778397) (xy 52.721199 209.678222) (xy 52.870792 209.598261) (xy 52.954475 209.34408) (xy 52.07 208.459605) (xy 51.185525 209.34408) (xy 50.414475 209.34408) (xy 49.53 208.459605) (xy 48.645525 209.34408) (xy 47.696031 209.34408) (xy 47.80404 209.271911) (xy 47.981911 209.09404) (xy 48.117634 208.890917) (xy 48.131778 208.931199) (xy 48.211739 209.080792) (xy 48.46592 209.164475) (xy 49.350395 208.28) (xy 49.709605 208.28) (xy 50.59408 209.164475) (xy 50.8 209.096681) (xy 51.00592 209.164475) (xy 51.890395 208.28) (xy 51.00592 207.395525) (xy 50.8 207.463319) (xy 50.59408 207.395525) (xy 49.709605 208.28) (xy 49.350395 208.28) (xy 48.46592 207.395525) (xy 48.211739 207.479208) (xy 48.119333 207.671626) (xy 47.981911 207.46596) (xy 47.80404 207.288089) (xy 47.594886 207.148337) (xy 47.362487 207.052074) (xy 47.150966 207.01) (xy 47.362487 206.967926) (xy 47.594886 206.871663) (xy 47.696031 206.80408) (xy 48.645525 206.80408) (xy 48.713319 207.01) (xy 48.645525 207.21592) (xy 49.53 208.100395) (xy 50.414475 207.21592) (xy 50.346681 207.01) (xy 50.414475 206.80408) (xy 51.185525 206.80408) (xy 51.253319 207.01) (xy 51.185525 207.21592) (xy 52.07 208.100395) (xy 52.954475 207.21592) (xy 52.886681 207.01) (xy 52.954475 206.80408) (xy 52.07 205.919605) (xy 51.185525 206.80408) (xy 50.414475 206.80408) (xy 49.53 205.919605) (xy 48.645525 206.80408) (xy 47.696031 206.80408) (xy 47.80404 206.731911) (xy 47.981911 206.55404) (xy 48.117634 206.350917) (xy 48.131778 206.391199) (xy 48.211739 206.540792) (xy 48.46592 206.624475) (xy 49.350395 205.74) (xy 49.709605 205.74) (xy 50.59408 206.624475) (xy 50.8 206.556681) (xy 51.00592 206.624475) (xy 51.890395 205.74) (xy 52.249605 205.74) (xy 53.13408 206.624475) (xy 53.388261 206.540792) (xy 53.480667 206.348374) (xy 53.618089 206.55404) (xy 53.79596 206.731911) (xy 54.005114 206.871663) (xy 54.237513 206.967926) (xy 54.449034 207.01) (xy 54.237513 207.052074) (xy 54.005114 207.148337) (xy 53.79596 207.288089) (xy 53.618089 207.46596) (xy 53.482366 207.669083) (xy 53.468222 207.628801) (xy 53.388261 207.479208) (xy 53.13408 207.395525) (xy 52.249605 208.28) (xy 53.13408 209.164475) (xy 53.388261 209.080792) (xy 53.480667 208.888374) (xy 53.618089 209.09404) (xy 53.79596 209.271911) (xy 54.005114 209.411663) (xy 54.237513 209.507926) (xy 54.484226 209.557) (xy 54.735774 209.557) (xy 54.982487 209.507926) (xy 55.214886 209.411663) (xy 55.42404 209.271911) (xy 55.601911 209.09404) (xy 55.741663 208.884886) (xy 55.837926 208.652487) (xy 55.887 208.405774) (xy 55.887 208.154226) (xy 55.837926 207.907513) (xy 55.741663 207.675114) (xy 55.601911 207.46596) (xy 55.42404 207.288089) (xy 55.214886 207.148337) (xy 54.982487 207.052074) (xy 54.770966 207.01) (xy 54.982487 206.967926) (xy 55.214886 206.871663) (xy 55.42404 206.731911) (xy 55.601911 206.55404) (xy 55.741663 206.344886) (xy 55.837926 206.112487) (xy 55.887 205.865774) (xy 55.887 205.614226) (xy 55.837926 205.367513) (xy 55.741663 205.135114) (xy 55.601911 204.92596) (xy 55.42404 204.748089) (xy 55.214886 204.608337) (xy 54.982487 204.512074) (xy 54.735774 204.463) (xy 54.484226 204.463) (xy 54.237513 204.512074) (xy 54.005114 204.608337) (xy 53.79596 204.748089) (xy 53.618089 204.92596) (xy 53.482366 205.129083) (xy 53.468222 205.088801) (xy 53.388261 204.939208) (xy 53.13408 204.855525) (xy 52.249605 205.74) (xy 51.890395 205.74) (xy 51.00592 204.855525) (xy 50.8 204.923319) (xy 50.59408 204.855525) (xy 49.709605 205.74) (xy 49.350395 205.74) (xy 48.46592 204.855525) (xy 48.211739 204.939208) (xy 48.119333 205.131626) (xy 47.981911 204.92596) (xy 47.80404 204.748089) (xy 47.696032 204.67592) (xy 48.645525 204.67592) (xy 49.53 205.560395) (xy 50.414475 204.67592) (xy 51.185525 204.67592) (xy 52.07 205.560395) (xy 52.954475 204.67592) (xy 52.870792 204.421739) (xy 52.598225 204.290842) (xy 52.305358 204.215635) (xy 52.003447 204.199009) (xy 51.704093 204.241603) (xy 51.418801 204.341778) (xy 51.269208 204.421739) (xy 51.185525 204.67592) (xy 50.414475 204.67592) (xy 50.330792 204.421739) (xy 50.058225 204.290842) (xy 49.765358 204.215635) (xy 49.463447 204.199009) (xy 49.164093 204.241603) (xy 48.878801 204.341778) (xy 48.729208 204.421739) (xy 48.645525 204.67592) (xy 47.696032 204.67592) (xy 47.594886 204.608337) (xy 47.362487 204.512074) (xy 47.115774 204.463) (xy 46.864226 204.463) (xy 46.617513 204.512074) (xy 46.385114 204.608337) (xy 46.17596 204.748089) (xy 45.998089 204.92596) (xy 45.858337 205.135114) (xy 45.762074 205.367513) (xy 45.72 205.579034) (xy 45.677926 205.367513) (xy 45.581663 205.135114) (xy 45.441911 204.92596) (xy 45.26404 204.748089) (xy 45.161 204.67924) (xy 45.161 202.305133) (xy 45.199309 202.279536) (xy 45.307536 202.171309) (xy 45.392569 202.044048) (xy 45.451141 201.902643) (xy 45.481 201.752528) (xy 45.481 201.599472) (xy 45.451141 201.449357) (xy 45.392569 201.307952) (xy 45.307536 201.180691) (xy 45.199309 201.072464) (xy 45.072048 200.987431) (xy 44.930643 200.928859) (xy 44.780528 200.899) (xy 44.627472 200.899) (xy 44.477357 200.928859) (xy 44.335952 200.987431) (xy 44.208691 201.072464) (xy 44.100464 201.180691) (xy 44.015431 201.307952) (xy 43.956859 201.449357) (xy 43.927 201.599472) (xy 43.927 201.752528) (xy 43.956859 201.902643) (xy 44.015431 202.044048) (xy 44.100464 202.171309) (xy 44.208691 202.279536) (xy 44.247 202.305133) (xy 44.247001 204.478361) (xy 44.077513 204.512074) (xy 43.845114 204.608337) (xy 43.63596 204.748089) (xy 43.458089 204.92596) (xy 43.318337 205.135114) (xy 43.222074 205.367513) (xy 43.18 205.579034) (xy 43.137926 205.367513) (xy 43.041663 205.135114) (xy 42.901911 204.92596) (xy 42.72404 204.748089) (xy 42.514886 204.608337) (xy 42.282487 204.512074) (xy 42.035774 204.463) (xy 41.784226 204.463) (xy 41.537513 204.512074) (xy 41.305114 204.608337) (xy 41.09596 204.748089) (xy 40.918089 204.92596) (xy 40.778337 205.135114) (xy 40.682074 205.367513) (xy 40.64 205.579034) (xy 40.597926 205.367513) (xy 40.501663 205.135114) (xy 40.361911 204.92596) (xy 40.18404 204.748089) (xy 39.974886 204.608337) (xy 39.742487 204.512074) (xy 39.495774 204.463) (xy 39.244226 204.463) (xy 38.997513 204.512074) (xy 38.765114 204.608337) (xy 38.55596 204.748089) (xy 38.378089 204.92596) (xy 38.238337 205.135114) (xy 38.142074 205.367513) (xy 38.1 205.579034) (xy 38.057926 205.367513) (xy 37.961663 205.135114) (xy 37.821911 204.92596) (xy 37.64404 204.748089) (xy 37.434886 204.608337) (xy 37.202487 204.512074) (xy 36.955774 204.463) (xy 36.704226 204.463) (xy 36.457513 204.512074) (xy 36.225114 204.608337) (xy 36.01596 204.748089) (xy 35.838089 204.92596) (xy 35.698337 205.135114) (xy 35.602074 205.367513) (xy 35.56 205.579034) (xy 35.517926 205.367513) (xy 35.421663 205.135114) (xy 35.281911 204.92596) (xy 35.10404 204.748089) (xy 34.894886 204.608337) (xy 34.662487 204.512074) (xy 34.415774 204.463) (xy 34.164226 204.463) (xy 33.917513 204.512074) (xy 33.685114 204.608337) (xy 33.47596 204.748089) (xy 33.298089 204.92596) (xy 33.158337 205.135114) (xy 33.062074 205.367513) (xy 33.02 205.579034) (xy 32.977926 205.367513) (xy 32.881663 205.135114) (xy 32.741911 204.92596) (xy 32.56404 204.748089) (xy 32.354886 204.608337) (xy 32.122487 204.512074) (xy 31.875774 204.463) (xy 31.624226 204.463) (xy 31.377513 204.512074) (xy 31.145114 204.608337) (xy 30.93596 204.748089) (xy 30.758089 204.92596) (xy 30.622366 205.129083) (xy 30.608222 205.088801) (xy 30.528261 204.939208) (xy 30.27408 204.855525) (xy 29.389605 205.74) (xy 29.030395 205.74) (xy 28.14592 204.855525) (xy 27.94 204.923319) (xy 27.73408 204.855525) (xy 26.849605 205.74) (xy 26.490395 205.74) (xy 26.476253 205.725858) (xy 26.655858 205.546253) (xy 26.67 205.560395) (xy 27.554475 204.67592) (xy 28.325525 204.67592) (xy 29.21 205.560395) (xy 30.094475 204.67592) (xy 30.010792 204.421739) (xy 29.738225 204.290842) (xy 29.445358 204.215635) (xy 29.143447 204.199009) (xy 28.844093 204.241603) (xy 28.558801 204.341778) (xy 28.409208 204.421739) (xy 28.325525 204.67592) (xy 27.554475 204.67592) (xy 27.470792 204.421739) (xy 27.198225 204.290842) (xy 26.905358 204.215635) (xy 26.603447 204.199009) (xy 26.304093 204.241603) (xy 26.018801 204.341778) (xy 25.869208 204.421739) (xy 25.802 204.625878) (xy 25.802 188.897951) (xy 25.85596 188.951911) (xy 26.065114 189.091663) (xy 26.297513 189.187926) (xy 26.544226 189.237) (xy 26.795774 189.237) (xy 27.042487 189.187926) (xy 27.274886 189.091663) (xy 27.48404 188.951911) (xy 27.661911 188.77404) (xy 27.801663 188.564886) (xy 27.897926 188.332487) (xy 27.94 188.120966) (xy 27.982074 188.332487) (xy 28.078337 188.564886) (xy 28.218089 188.77404) (xy 28.39596 188.951911) (xy 28.605114 189.091663) (xy 28.837513 189.187926) (xy 29.084226 189.237) (xy 29.335774 189.237) (xy 29.582487 189.187926) (xy 29.814886 189.091663) (xy 30.02404 188.951911) (xy 30.201911 188.77404) (xy 30.341663 188.564886) (xy 30.437926 188.332487) (xy 30.48 188.120966) (xy 30.522074 188.332487) (xy 30.618337 188.564886) (xy 30.758089 188.77404) (xy 30.93596 188.951911) (xy 31.145114 189.091663) (xy 31.377513 189.187926) (xy 31.624226 189.237) (xy 31.875774 189.237) (xy 32.122487 189.187926) (xy 32.354886 189.091663) (xy 32.56404 188.951911) (xy 32.741911 188.77404) (xy 32.881663 188.564886) (xy 32.977926 188.332487) (xy 33.02 188.120966) (xy 33.062074 188.332487) (xy 33.158337 188.564886) (xy 33.298089 188.77404) (xy 33.47596 188.951911) (xy 33.685114 189.091663) (xy 33.917513 189.187926) (xy 34.164226 189.237) (xy 34.415774 189.237) (xy 34.662487 189.187926) (xy 34.894886 189.091663) (xy 35.10404 188.951911) (xy 35.281911 188.77404) (xy 35.421663 188.564886) (xy 35.517926 188.332487) (xy 35.56 188.120966) (xy 35.602074 188.332487) (xy 35.698337 188.564886) (xy 35.838089 188.77404) (xy 36.01596 188.951911) (xy 36.225114 189.091663) (xy 36.457513 189.187926) (xy 36.704226 189.237) (xy 36.955774 189.237) (xy 37.202487 189.187926) (xy 37.434886 189.091663) (xy 37.64404 188.951911) (xy 37.821911 188.77404) (xy 37.961663 188.564886) (xy 38.057926 188.332487) (xy 38.1 188.120966) (xy 38.142074 188.332487) (xy 38.238337 188.564886) (xy 38.378089 188.77404) (xy 38.55596 188.951911) (xy 38.765114 189.091663) (xy 38.997513 189.187926) (xy 39.244226 189.237) (xy 39.495774 189.237) (xy 39.742487 189.187926) (xy 39.974886 189.091663) (xy 40.18404 188.951911) (xy 40.361911 188.77404) (xy 40.501663 188.564886) (xy 40.597926 188.332487) (xy 40.64 188.120966) (xy 40.682074 188.332487) (xy 40.778337 188.564886) (xy 40.918089 188.77404) (xy 41.09596 188.951911) (xy 41.305114 189.091663) (xy 41.537513 189.187926) (xy 41.784226 189.237) (xy 42.035774 189.237) (xy 42.282487 189.187926) (xy 42.514886 189.091663) (xy 42.72404 188.951911) (xy 42.901911 188.77404) (xy 43.041663 188.564886) (xy 43.137926 188.332487) (xy 43.18 188.120966) (xy 43.222074 188.332487) (xy 43.318337 188.564886) (xy 43.458089 188.77404) (xy 43.63596 188.951911) (xy 43.845114 189.091663) (xy 44.077513 189.187926) (xy 44.324226 189.237) (xy 44.575774 189.237) (xy 44.822487 189.187926) (xy 45.054886 189.091663) (xy 45.26404 188.951911) (xy 45.441911 188.77404) (xy 45.581663 188.564886) (xy 45.677926 188.332487) (xy 45.72 188.120966) (xy 45.762074 188.332487) (xy 45.858337 188.564886) (xy 45.998089 188.77404) (xy 46.17596 188.951911) (xy 46.385114 189.091663) (xy 46.617513 189.187926) (xy 46.864226 189.237) (xy 47.115774 189.237) (xy 47.362487 189.187926) (xy 47.594886 189.091663) (xy 47.80404 188.951911) (xy 47.981911 188.77404) (xy 48.121663 188.564886) (xy 48.217926 188.332487) (xy 48.26 188.120966) (xy 48.302074 188.332487) (xy 48.398337 188.564886) (xy 48.538089 188.77404) (xy 48.71596 188.951911) (xy 48.925114 189.091663) (xy 49.157513 189.187926) (xy 49.404226 189.237) (xy 49.655774 189.237) (xy 49.902487 189.187926) (xy 50.134886 189.091663) (xy 50.236031 189.02408) (xy 51.185525 189.02408) (xy 51.269208 189.278261) (xy 51.541775 189.409158) (xy 51.834642 189.484365) (xy 52.136553 189.500991) (xy 52.435907 189.458397) (xy 52.721199 189.358222) (xy 52.870792 189.278261) (xy 52.954475 189.02408) (xy 52.07 188.139605) (xy 51.185525 189.02408) (xy 50.236031 189.02408) (xy 50.34404 188.951911) (xy 50.521911 188.77404) (xy 50.657634 188.570917) (xy 50.671778 188.611199) (xy 50.751739 188.760792) (xy 51.00592 188.844475) (xy 51.890395 187.96) (xy 51.00592 187.075525) (xy 50.751739 187.159208) (xy 50.659333 187.351626) (xy 50.521911 187.14596) (xy 50.34404 186.968089) (xy 50.134886 186.828337) (xy 49.902487 186.732074) (xy 49.690966 186.69) (xy 49.902487 186.647926) (xy 50.134886 186.551663) (xy 50.236031 186.48408) (xy 51.185525 186.48408) (xy 51.253319 186.69) (xy 51.185525 186.89592) (xy 52.07 187.780395) (xy 52.954475 186.89592) (xy 52.886681 186.69) (xy 52.954475 186.48408) (xy 52.07 185.599605) (xy 51.185525 186.48408) (xy 50.236031 186.48408) (xy 50.34404 186.411911) (xy 50.521911 186.23404) (xy 50.657634 186.030917) (xy 50.671778 186.071199) (xy 50.751739 186.220792) (xy 51.00592 186.304475) (xy 51.890395 185.42) (xy 52.249605 185.42) (xy 53.13408 186.304475) (xy 53.388261 186.220792) (xy 53.480667 186.028374) (xy 53.618089 186.23404) (xy 53.79596 186.411911) (xy 54.005114 186.551663) (xy 54.237513 186.647926) (xy 54.449034 186.69) (xy 54.237513 186.732074) (xy 54.005114 186.828337) (xy 53.79596 186.968089) (xy 53.618089 187.14596) (xy 53.482366 187.349083) (xy 53.468222 187.308801) (xy 53.388261 187.159208) (xy 53.13408 187.075525) (xy 52.249605 187.96) (xy 53.13408 188.844475) (xy 53.388261 188.760792) (xy 53.480667 188.568374) (xy 53.618089 188.77404) (xy 53.79596 188.951911) (xy 54.005114 189.091663) (xy 54.237513 189.187926) (xy 54.484226 189.237) (xy 54.735774 189.237) (xy 54.982487 189.187926) (xy 55.214886 189.091663) (xy 55.42404 188.951911) (xy 55.601911 188.77404) (xy 55.602958 188.772472) (xy 64.501 188.772472) (xy 64.501 188.925528) (xy 64.530859 189.075643) (xy 64.589431 189.217048) (xy 64.674464 189.344309) (xy 64.782691 189.452536) (xy 64.909952 189.537569) (xy 65.051357 189.596141) (xy 65.201472 189.626) (xy 65.354528 189.626) (xy 65.504643 189.596141) (xy 65.646048 189.537569) (xy 65.773309 189.452536) (xy 65.881536 189.344309) (xy 65.907133 189.306) (xy 69.220867 189.306) (xy 69.246464 189.344309) (xy 69.354691 189.452536) (xy 69.481952 189.537569) (xy 69.623357 189.596141) (xy 69.773472 189.626) (xy 69.926528 189.626) (xy 70.076643 189.596141) (xy 70.218048 189.537569) (xy 70.345309 189.452536) (xy 70.453536 189.344309) (xy 70.479133 189.306) (xy 72.535877 189.306) (xy 72.561474 189.344309) (xy 72.669701 189.452536) (xy 72.796962 189.537569) (xy 72.938367 189.596141) (xy 73.088482 189.626) (xy 73.241538 189.626) (xy 73.391653 189.596141) (xy 73.533058 189.537569) (xy 73.660319 189.452536) (xy 73.768546 189.344309) (xy 73.853579 189.217048) (xy 73.912151 189.075643) (xy 73.94201 188.925528) (xy 73.94201 188.772472) (xy 73.912151 188.622357) (xy 73.853579 188.480952) (xy 73.768546 188.353691) (xy 73.660319 188.245464) (xy 73.533058 188.160431) (xy 73.391653 188.101859) (xy 73.241538 188.072) (xy 73.088482 188.072) (xy 72.938367 188.101859) (xy 72.796962 188.160431) (xy 72.669701 188.245464) (xy 72.561474 188.353691) (xy 72.535877 188.392) (xy 70.479133 188.392) (xy 70.453536 188.353691) (xy 70.345309 188.245464) (xy 70.218048 188.160431) (xy 70.076643 188.101859) (xy 69.926528 188.072) (xy 69.773472 188.072) (xy 69.623357 188.101859) (xy 69.481952 188.160431) (xy 69.354691 188.245464) (xy 69.246464 188.353691) (xy 69.220867 188.392) (xy 65.907133 188.392) (xy 65.881536 188.353691) (xy 65.773309 188.245464) (xy 65.646048 188.160431) (xy 65.504643 188.101859) (xy 65.354528 188.072) (xy 65.201472 188.072) (xy 65.051357 188.101859) (xy 64.909952 188.160431) (xy 64.782691 188.245464) (xy 64.674464 188.353691) (xy 64.589431 188.480952) (xy 64.530859 188.622357) (xy 64.501 188.772472) (xy 55.602958 188.772472) (xy 55.741663 188.564886) (xy 55.837926 188.332487) (xy 55.887 188.085774) (xy 55.887 187.834226) (xy 55.837926 187.587513) (xy 55.741663 187.355114) (xy 55.601911 187.14596) (xy 55.450423 186.994472) (xy 64.501 186.994472) (xy 64.501 187.147528) (xy 64.530859 187.297643) (xy 64.589431 187.439048) (xy 64.674464 187.566309) (xy 64.782691 187.674536) (xy 64.909952 187.759569) (xy 65.051357 187.818141) (xy 65.201472 187.848) (xy 65.354528 187.848) (xy 65.504643 187.818141) (xy 65.646048 187.759569) (xy 65.773309 187.674536) (xy 65.881536 187.566309) (xy 65.889088 187.555006) (xy 68.494875 187.555006) (xy 68.520472 187.593315) (xy 68.628699 187.701542) (xy 68.75596 187.786575) (xy 68.897365 187.845147) (xy 69.04748 187.875006) (xy 69.200536 187.875006) (xy 69.350651 187.845147) (xy 69.492056 187.786575) (xy 69.619317 187.701542) (xy 69.727544 187.593315) (xy 69.753141 187.555006) (xy 72.553922 187.555006) (xy 72.561474 187.566309) (xy 72.669701 187.674536) (xy 72.796962 187.759569) (xy 72.938367 187.818141) (xy 73.088482 187.848) (xy 73.241538 187.848) (xy 73.391653 187.818141) (xy 73.533058 187.759569) (xy 73.660319 187.674536) (xy 73.768546 187.566309) (xy 73.853579 187.439048) (xy 73.912151 187.297643) (xy 73.94201 187.147528) (xy 73.94201 186.994472) (xy 73.912151 186.844357) (xy 73.853579 186.702952) (xy 73.768546 186.575691) (xy 73.660319 186.467464) (xy 73.533058 186.382431) (xy 73.391653 186.323859) (xy 73.241538 186.294) (xy 73.088482 186.294) (xy 72.938367 186.323859) (xy 72.796962 186.382431) (xy 72.669701 186.467464) (xy 72.561474 186.575691) (xy 72.517832 186.641006) (xy 69.753141 186.641006) (xy 69.727544 186.602697) (xy 69.619317 186.49447) (xy 69.492056 186.409437) (xy 69.350651 186.350865) (xy 69.200536 186.321006) (xy 69.04748 186.321006) (xy 68.897365 186.350865) (xy 68.75596 186.409437) (xy 68.628699 186.49447) (xy 68.520472 186.602697) (xy 68.494875 186.641006) (xy 65.925178 186.641006) (xy 65.881536 186.575691) (xy 65.773309 186.467464) (xy 65.646048 186.382431) (xy 65.504643 186.323859) (xy 65.354528 186.294) (xy 65.201472 186.294) (xy 65.051357 186.323859) (xy 64.909952 186.382431) (xy 64.782691 186.467464) (xy 64.674464 186.575691) (xy 64.589431 186.702952) (xy 64.530859 186.844357) (xy 64.501 186.994472) (xy 55.450423 186.994472) (xy 55.42404 186.968089) (xy 55.214886 186.828337) (xy 54.982487 186.732074) (xy 54.770966 186.69) (xy 54.982487 186.647926) (xy 55.214886 186.551663) (xy 55.42404 186.411911) (xy 55.601911 186.23404) (xy 55.741663 186.024886) (xy 55.837926 185.792487) (xy 55.887 185.545774) (xy 55.887 185.294226) (xy 55.846273 185.089472) (xy 62.215 185.089472) (xy 62.215 185.242528) (xy 62.244859 185.392643) (xy 62.303431 185.534048) (xy 62.388464 185.661309) (xy 62.496691 185.769536) (xy 62.623952 185.854569) (xy 62.765357 185.913141) (xy 62.915472 185.943) (xy 63.068528 185.943) (xy 63.218643 185.913141) (xy 63.360048 185.854569) (xy 63.487309 185.769536) (xy 63.595536 185.661309) (xy 63.621133 185.623) (xy 72.535877 185.623) (xy 72.561474 185.661309) (xy 72.669701 185.769536) (xy 72.796962 185.854569) (xy 72.938367 185.913141) (xy 73.088482 185.943) (xy 73.241538 185.943) (xy 73.391653 185.913141) (xy 73.533058 185.854569) (xy 73.660319 185.769536) (xy 73.768546 185.661309) (xy 73.853579 185.534048) (xy 73.912151 185.392643) (xy 73.94201 185.242528) (xy 73.94201 185.089472) (xy 73.912151 184.939357) (xy 73.853579 184.797952) (xy 73.768546 184.670691) (xy 73.660319 184.562464) (xy 73.533058 184.477431) (xy 73.391653 184.418859) (xy 73.241538 184.389) (xy 73.088482 184.389) (xy 72.938367 184.418859) (xy 72.796962 184.477431) (xy 72.669701 184.562464) (xy 72.561474 184.670691) (xy 72.535877 184.709) (xy 63.621133 184.709) (xy 63.595536 184.670691) (xy 63.487309 184.562464) (xy 63.360048 184.477431) (xy 63.218643 184.418859) (xy 63.068528 184.389) (xy 62.915472 184.389) (xy 62.765357 184.418859) (xy 62.623952 184.477431) (xy 62.496691 184.562464) (xy 62.388464 184.670691) (xy 62.303431 184.797952) (xy 62.244859 184.939357) (xy 62.215 185.089472) (xy 55.846273 185.089472) (xy 55.837926 185.047513) (xy 55.741663 184.815114) (xy 55.601911 184.60596) (xy 55.42404 184.428089) (xy 55.214886 184.288337) (xy 54.982487 184.192074) (xy 54.735774 184.143) (xy 54.484226 184.143) (xy 54.237513 184.192074) (xy 54.005114 184.288337) (xy 53.79596 184.428089) (xy 53.618089 184.60596) (xy 53.482366 184.809083) (xy 53.468222 184.768801) (xy 53.388261 184.619208) (xy 53.13408 184.535525) (xy 52.249605 185.42) (xy 51.890395 185.42) (xy 51.00592 184.535525) (xy 50.751739 184.619208) (xy 50.659333 184.811626) (xy 50.521911 184.60596) (xy 50.34404 184.428089) (xy 50.236032 184.35592) (xy 51.185525 184.35592) (xy 52.07 185.240395) (xy 52.954475 184.35592) (xy 52.870792 184.101739) (xy 52.598225 183.970842) (xy 52.305358 183.895635) (xy 52.003447 183.879009) (xy 51.704093 183.921603) (xy 51.418801 184.021778) (xy 51.269208 184.101739) (xy 51.185525 184.35592) (xy 50.236032 184.35592) (xy 50.134886 184.288337) (xy 49.902487 184.192074) (xy 49.655774 184.143) (xy 49.404226 184.143) (xy 49.157513 184.192074) (xy 48.925114 184.288337) (xy 48.71596 184.428089) (xy 48.538089 184.60596) (xy 48.398337 184.815114) (xy 48.302074 185.047513) (xy 48.26 185.259034) (xy 48.217926 185.047513) (xy 48.121663 184.815114) (xy 47.981911 184.60596) (xy 47.80404 184.428089) (xy 47.594886 184.288337) (xy 47.362487 184.192074) (xy 47.115774 184.143) (xy 46.864226 184.143) (xy 46.617513 184.192074) (xy 46.385114 184.288337) (xy 46.17596 184.428089) (xy 45.998089 184.60596) (xy 45.858337 184.815114) (xy 45.762074 185.047513) (xy 45.72 185.259034) (xy 45.677926 185.047513) (xy 45.581663 184.815114) (xy 45.441911 184.60596) (xy 45.26404 184.428089) (xy 45.054886 184.288337) (xy 44.822487 184.192074) (xy 44.575774 184.143) (xy 44.324226 184.143) (xy 44.077513 184.192074) (xy 43.845114 184.288337) (xy 43.63596 184.428089) (xy 43.458089 184.60596) (xy 43.318337 184.815114) (xy 43.222074 185.047513) (xy 43.18 185.259034) (xy 43.137926 185.047513) (xy 43.041663 184.815114) (xy 42.901911 184.60596) (xy 42.72404 184.428089) (xy 42.514886 184.288337) (xy 42.282487 184.192074) (xy 42.035774 184.143) (xy 41.784226 184.143) (xy 41.537513 184.192074) (xy 41.305114 184.288337) (xy 41.09596 184.428089) (xy 40.918089 184.60596) (xy 40.778337 184.815114) (xy 40.682074 185.047513) (xy 40.64 185.259034) (xy 40.597926 185.047513) (xy 40.501663 184.815114) (xy 40.361911 184.60596) (xy 40.18404 184.428089) (xy 39.974886 184.288337) (xy 39.742487 184.192074) (xy 39.495774 184.143) (xy 39.244226 184.143) (xy 38.997513 184.192074) (xy 38.765114 184.288337) (xy 38.55596 184.428089) (xy 38.378089 184.60596) (xy 38.238337 184.815114) (xy 38.142074 185.047513) (xy 38.1 185.259034) (xy 38.057926 185.047513) (xy 37.961663 184.815114) (xy 37.821911 184.60596) (xy 37.64404 184.428089) (xy 37.434886 184.288337) (xy 37.202487 184.192074) (xy 36.955774 184.143) (xy 36.704226 184.143) (xy 36.457513 184.192074) (xy 36.225114 184.288337) (xy 36.01596 184.428089) (xy 35.838089 184.60596) (xy 35.698337 184.815114) (xy 35.602074 185.047513) (xy 35.56 185.259034) (xy 35.517926 185.047513) (xy 35.421663 184.815114) (xy 35.281911 184.60596) (xy 35.10404 184.428089) (xy 34.894886 184.288337) (xy 34.662487 184.192074) (xy 34.415774 184.143) (xy 34.164226 184.143) (xy 33.917513 184.192074) (xy 33.685114 184.288337) (xy 33.47596 184.428089) (xy 33.298089 184.60596) (xy 33.158337 184.815114) (xy 33.062074 185.047513) (xy 33.02 185.259034) (xy 32.977926 185.047513) (xy 32.881663 184.815114) (xy 32.741911 184.60596) (xy 32.56404 184.428089) (xy 32.354886 184.288337) (xy 32.122487 184.192074) (xy 31.875774 184.143) (xy 31.624226 184.143) (xy 31.377513 184.192074) (xy 31.145114 184.288337) (xy 30.93596 184.428089) (xy 30.758089 184.60596) (xy 30.618337 184.815114) (xy 30.522074 185.047513) (xy 30.48 185.259034) (xy 30.437926 185.047513) (xy 30.341663 184.815114) (xy 30.201911 184.60596) (xy 30.02404 184.428089) (xy 29.814886 184.288337) (xy 29.582487 184.192074) (xy 29.335774 184.143) (xy 29.084226 184.143) (xy 28.837513 184.192074) (xy 28.605114 184.288337) (xy 28.39596 184.428089) (xy 28.218089 184.60596) (xy 28.078337 184.815114) (xy 27.982074 185.047513) (xy 27.94 185.259034) (xy 27.897926 185.047513) (xy 27.801663 184.815114) (xy 27.661911 184.60596) (xy 27.48404 184.428089) (xy 27.274886 184.288337) (xy 27.042487 184.192074) (xy 26.795774 184.143) (xy 26.544226 184.143) (xy 26.297513 184.192074) (xy 26.065114 184.288337) (xy 25.85596 184.428089) (xy 25.802 184.482049) (xy 25.802 183.438472) (xy 67.549 183.438472) (xy 67.549 183.591528) (xy 67.578859 183.741643) (xy 67.637431 183.883048) (xy 67.722464 184.010309) (xy 67.830691 184.118536) (xy 67.957952 184.203569) (xy 68.099357 184.262141) (xy 68.249472 184.292) (xy 68.402528 184.292) (xy 68.552643 184.262141) (xy 68.694048 184.203569) (xy 68.821309 184.118536) (xy 68.929536 184.010309) (xy 68.955133 183.972) (xy 72.535877 183.972) (xy 72.561474 184.010309) (xy 72.669701 184.118536) (xy 72.796962 184.203569) (xy 72.938367 184.262141) (xy 73.088482 184.292) (xy 73.241538 184.292) (xy 73.391653 184.262141) (xy 73.533058 184.203569) (xy 73.660319 184.118536) (xy 73.768546 184.010309) (xy 73.853579 183.883048) (xy 73.912151 183.741643) (xy 73.94201 183.591528) (xy 73.94201 183.438472) (xy 73.94132 183.435) (xy 101.596176 183.435) (xy 101.596176 186.135) (xy 101.603455 186.208905) (xy 101.625012 186.27997) (xy 101.660019 186.345463) (xy 101.707131 186.402869) (xy 101.764537 186.449981) (xy 101.83003 186.484988) (xy 101.901095 186.506545) (xy 101.975 186.513824) (xy 104.675 186.513824) (xy 104.748905 186.506545) (xy 104.81997 186.484988) (xy 104.885463 186.449981) (xy 104.942869 186.402869) (xy 104.989981 186.345463) (xy 105.024988 186.27997) (xy 105.046545 186.208905) (xy 105.053824 186.135) (xy 105.053824 183.435) (xy 105.256176 183.435) (xy 105.256176 186.135) (xy 105.263455 186.208905) (xy 105.285012 186.27997) (xy 105.320019 186.345463) (xy 105.367131 186.402869) (xy 105.424537 186.449981) (xy 105.49003 186.484988) (xy 105.561095 186.506545) (xy 105.635 186.513824) (xy 108.335 186.513824) (xy 108.408905 186.506545) (xy 108.47997 186.484988) (xy 108.545463 186.449981) (xy 108.602869 186.402869) (xy 108.649981 186.345463) (xy 108.684988 186.27997) (xy 108.706545 186.208905) (xy 108.713824 186.135) (xy 108.713824 184.614905) (xy 109.728 184.614905) (xy 109.728 184.955095) (xy 109.794368 185.288747) (xy 109.924553 185.603041) (xy 110.113552 185.885898) (xy 110.354102 186.126448) (xy 110.636959 186.315447) (xy 110.951253 186.445632) (xy 111.284905 186.512) (xy 111.625095 186.512) (xy 111.958747 186.445632) (xy 112.273041 186.315447) (xy 112.555898 186.126448) (xy 112.796448 185.885898) (xy 112.985447 185.603041) (xy 113.115632 185.288747) (xy 113.182 184.955095) (xy 113.182 184.614905) (xy 113.388 184.614905) (xy 113.388 184.955095) (xy 113.454368 185.288747) (xy 113.584553 185.603041) (xy 113.773552 185.885898) (xy 114.014102 186.126448) (xy 114.296959 186.315447) (xy 114.611253 186.445632) (xy 114.944905 186.512) (xy 115.285095 186.512) (xy 115.618747 186.445632) (xy 115.933041 186.315447) (xy 116.215898 186.126448) (xy 116.456448 185.885898) (xy 116.645447 185.603041) (xy 116.775632 185.288747) (xy 116.842 184.955095) (xy 116.842 184.614905) (xy 116.775632 184.281253) (xy 116.645447 183.966959) (xy 116.456448 183.684102) (xy 116.215898 183.443552) (xy 115.933041 183.254553) (xy 115.618747 183.124368) (xy 115.285095 183.058) (xy 114.944905 183.058) (xy 114.611253 183.124368) (xy 114.296959 183.254553) (xy 114.014102 183.443552) (xy 113.773552 183.684102) (xy 113.584553 183.966959) (xy 113.454368 184.281253) (xy 113.388 184.614905) (xy 113.182 184.614905) (xy 113.115632 184.281253) (xy 112.985447 183.966959) (xy 112.796448 183.684102) (xy 112.555898 183.443552) (xy 112.273041 183.254553) (xy 111.958747 183.124368) (xy 111.625095 183.058) (xy 111.284905 183.058) (xy 110.951253 183.124368) (xy 110.636959 183.254553) (xy 110.354102 183.443552) (xy 110.113552 183.684102) (xy 109.924553 183.966959) (xy 109.794368 184.281253) (xy 109.728 184.614905) (xy 108.713824 184.614905) (xy 108.713824 183.435) (xy 108.706545 183.361095) (xy 108.684988 183.29003) (xy 108.649981 183.224537) (xy 108.602869 183.167131) (xy 108.545463 183.120019) (xy 108.47997 183.085012) (xy 108.408905 183.063455) (xy 108.335 183.056176) (xy 105.635 183.056176) (xy 105.561095 183.063455) (xy 105.49003 183.085012) (xy 105.424537 183.120019) (xy 105.367131 183.167131) (xy 105.320019 183.224537) (xy 105.285012 183.29003) (xy 105.263455 183.361095) (xy 105.256176 183.435) (xy 105.053824 183.435) (xy 105.046545 183.361095) (xy 105.024988 183.29003) (xy 104.989981 183.224537) (xy 104.942869 183.167131) (xy 104.885463 183.120019) (xy 104.81997 183.085012) (xy 104.748905 183.063455) (xy 104.675 183.056176) (xy 101.975 183.056176) (xy 101.901095 183.063455) (xy 101.83003 183.085012) (xy 101.764537 183.120019) (xy 101.707131 183.167131) (xy 101.660019 183.224537) (xy 101.625012 183.29003) (xy 101.603455 183.361095) (xy 101.596176 183.435) (xy 73.94132 183.435) (xy 73.912151 183.288357) (xy 73.853579 183.146952) (xy 73.768546 183.019691) (xy 73.660319 182.911464) (xy 73.533058 182.826431) (xy 73.391653 182.767859) (xy 73.241538 182.738) (xy 73.088482 182.738) (xy 72.938367 182.767859) (xy 72.796962 182.826431) (xy 72.669701 182.911464) (xy 72.561474 183.019691) (xy 72.535877 183.058) (xy 68.955133 183.058) (xy 68.929536 183.019691) (xy 68.821309 182.911464) (xy 68.694048 182.826431) (xy 68.552643 182.767859) (xy 68.402528 182.738) (xy 68.249472 182.738) (xy 68.099357 182.767859) (xy 67.957952 182.826431) (xy 67.830691 182.911464) (xy 67.722464 183.019691) (xy 67.637431 183.146952) (xy 67.578859 183.288357) (xy 67.549 183.438472) (xy 25.802 183.438472) (xy 25.802 181.533472) (xy 60.437 181.533472) (xy 60.437 181.686528) (xy 60.466859 181.836643) (xy 60.525431 181.978048) (xy 60.610464 182.105309) (xy 60.718691 182.213536) (xy 60.845952 182.298569) (xy 60.987357 182.357141) (xy 61.137472 182.387) (xy 61.290528 182.387) (xy 61.440643 182.357141) (xy 61.582048 182.298569) (xy 61.674193 182.237) (xy 70.913807 182.237) (xy 71.005952 182.298569) (xy 71.147357 182.357141) (xy 71.297472 182.387) (xy 71.450528 182.387) (xy 71.600643 182.357141) (xy 71.742048 182.298569) (xy 71.869309 182.213536) (xy 71.920845 182.162) (xy 72.618165 182.162) (xy 72.669701 182.213536) (xy 72.796962 182.298569) (xy 72.938367 182.357141) (xy 73.088482 182.387) (xy 73.241538 182.387) (xy 73.391653 182.357141) (xy 73.533058 182.298569) (xy 73.660319 182.213536) (xy 73.768546 182.105309) (xy 73.853579 181.978048) (xy 73.912151 181.836643) (xy 73.94201 181.686528) (xy 73.94201 181.533472) (xy 73.912151 181.383357) (xy 73.853579 181.241952) (xy 73.768546 181.114691) (xy 73.660319 181.006464) (xy 73.533058 180.921431) (xy 73.391653 180.862859) (xy 73.241538 180.833) (xy 73.088482 180.833) (xy 72.938367 180.862859) (xy 72.796962 180.921431) (xy 72.669701 181.006464) (xy 72.618165 181.058) (xy 71.920845 181.058) (xy 71.869309 181.006464) (xy 71.742048 180.921431) (xy 71.600643 180.862859) (xy 71.450528 180.833) (xy 71.297472 180.833) (xy 71.147357 180.862859) (xy 71.005952 180.921431) (xy 70.913807 180.983) (xy 61.674193 180.983) (xy 61.582048 180.921431) (xy 61.440643 180.862859) (xy 61.290528 180.833) (xy 61.137472 180.833) (xy 60.987357 180.862859) (xy 60.845952 180.921431) (xy 60.718691 181.006464) (xy 60.610464 181.114691) (xy 60.525431 181.241952) (xy 60.466859 181.383357) (xy 60.437 181.533472) (xy 25.802 181.533472) (xy 25.802 170.694151) (xy 36.873 170.694151) (xy 36.873 170.935849) (xy 36.920153 171.172903) (xy 37.012647 171.396202) (xy 37.146927 171.597167) (xy 37.317833 171.768073) (xy 37.518798 171.902353) (xy 37.742097 171.994847) (xy 37.979151 172.042) (xy 38.220849 172.042) (xy 38.457903 171.994847) (xy 38.681202 171.902353) (xy 38.769436 171.843397) (xy 39.791208 171.843397) (xy 39.868843 172.092472) (xy 40.132883 172.218371) (xy 40.416411 172.290339) (xy 40.708531 172.305611) (xy 40.998019 172.263599) (xy 41.273747 172.165919) (xy 41.411157 172.092472) (xy 41.488792 171.843397) (xy 40.64 170.994605) (xy 39.791208 171.843397) (xy 38.769436 171.843397) (xy 38.882167 171.768073) (xy 39.053073 171.597167) (xy 39.187353 171.396202) (xy 39.232152 171.288049) (xy 39.289081 171.448747) (xy 39.362528 171.586157) (xy 39.611603 171.663792) (xy 40.460395 170.815) (xy 40.819605 170.815) (xy 41.668397 171.663792) (xy 41.917472 171.586157) (xy 42.043371 171.322117) (xy 42.115339 171.038589) (xy 42.130611 170.746469) (xy 42.088599 170.456981) (xy 41.990919 170.181253) (xy 41.917472 170.043843) (xy 41.668397 169.966208) (xy 40.819605 170.815) (xy 40.460395 170.815) (xy 39.611603 169.966208) (xy 39.362528 170.043843) (xy 39.236629 170.307883) (xy 39.229566 170.335709) (xy 39.187353 170.233798) (xy 39.053073 170.032833) (xy 38.882167 169.861927) (xy 38.681202 169.727647) (xy 38.457903 169.635153) (xy 38.220849 169.588) (xy 37.979151 169.588) (xy 37.742097 169.635153) (xy 37.518798 169.727647) (xy 37.317833 169.861927) (xy 37.146927 170.032833) (xy 37.012647 170.233798) (xy 36.920153 170.457097) (xy 36.873 170.694151) (xy 25.802 170.694151) (xy 25.802 168.154151) (xy 36.873 168.154151) (xy 36.873 168.395849) (xy 36.920153 168.632903) (xy 37.012647 168.856202) (xy 37.146927 169.057167) (xy 37.317833 169.228073) (xy 37.518798 169.362353) (xy 37.742097 169.454847) (xy 37.979151 169.502) (xy 38.220849 169.502) (xy 38.457903 169.454847) (xy 38.681202 169.362353) (xy 38.769436 169.303397) (xy 39.791208 169.303397) (xy 39.866514 169.545) (xy 39.791208 169.786603) (xy 40.64 170.635395) (xy 41.488792 169.786603) (xy 41.413486 169.545) (xy 41.488792 169.303397) (xy 40.64 168.454605) (xy 39.791208 169.303397) (xy 38.769436 169.303397) (xy 38.882167 169.228073) (xy 39.053073 169.057167) (xy 39.187353 168.856202) (xy 39.232152 168.748049) (xy 39.289081 168.908747) (xy 39.362528 169.046157) (xy 39.611603 169.123792) (xy 40.460395 168.275) (xy 40.819605 168.275) (xy 41.668397 169.123792) (xy 41.917472 169.046157) (xy 42.043371 168.782117) (xy 42.115339 168.498589) (xy 42.130611 168.206469) (xy 42.088599 167.916981) (xy 41.990919 167.641253) (xy 41.917472 167.503843) (xy 41.668397 167.426208) (xy 40.819605 168.275) (xy 40.460395 168.275) (xy 39.611603 167.426208) (xy 39.362528 167.503843) (xy 39.236629 167.767883) (xy 39.229566 167.795709) (xy 39.187353 167.693798) (xy 39.053073 167.492833) (xy 38.882167 167.321927) (xy 38.681202 167.187647) (xy 38.457903 167.095153) (xy 38.220849 167.048) (xy 37.979151 167.048) (xy 37.742097 167.095153) (xy 37.518798 167.187647) (xy 37.317833 167.321927) (xy 37.146927 167.492833) (xy 37.012647 167.693798) (xy 36.920153 167.917097) (xy 36.873 168.154151) (xy 25.802 168.154151) (xy 25.802 165.614151) (xy 36.873 165.614151) (xy 36.873 165.855849) (xy 36.920153 166.092903) (xy 37.012647 166.316202) (xy 37.146927 166.517167) (xy 37.317833 166.688073) (xy 37.518798 166.822353) (xy 37.742097 166.914847) (xy 37.979151 166.962) (xy 38.220849 166.962) (xy 38.457903 166.914847) (xy 38.681202 166.822353) (xy 38.769436 166.763397) (xy 39.791208 166.763397) (xy 39.866514 167.005) (xy 39.791208 167.246603) (xy 40.64 168.095395) (xy 41.488792 167.246603) (xy 41.413486 167.005) (xy 41.488792 166.763397) (xy 40.64 165.914605) (xy 39.791208 166.763397) (xy 38.769436 166.763397) (xy 38.882167 166.688073) (xy 39.053073 166.517167) (xy 39.187353 166.316202) (xy 39.232152 166.208049) (xy 39.289081 166.368747) (xy 39.362528 166.506157) (xy 39.611603 166.583792) (xy 40.460395 165.735) (xy 40.819605 165.735) (xy 41.668397 166.583792) (xy 41.917472 166.506157) (xy 42.043371 166.242117) (xy 42.115339 165.958589) (xy 42.130611 165.666469) (xy 42.088599 165.376981) (xy 41.990919 165.101253) (xy 41.917472 164.963843) (xy 41.668397 164.886208) (xy 40.819605 165.735) (xy 40.460395 165.735) (xy 39.611603 164.886208) (xy 39.362528 164.963843) (xy 39.236629 165.227883) (xy 39.229566 165.255709) (xy 39.187353 165.153798) (xy 39.053073 164.952833) (xy 38.882167 164.781927) (xy 38.681202 164.647647) (xy 38.457903 164.555153) (xy 38.220849 164.508) (xy 37.979151 164.508) (xy 37.742097 164.555153) (xy 37.518798 164.647647) (xy 37.317833 164.781927) (xy 37.146927 164.952833) (xy 37.012647 165.153798) (xy 36.920153 165.377097) (xy 36.873 165.614151) (xy 25.802 165.614151) (xy 25.802 162.595) (xy 36.871176 162.595) (xy 36.871176 163.795) (xy 36.883259 163.917677) (xy 36.919042 164.035641) (xy 36.977152 164.144356) (xy 37.055354 164.239646) (xy 37.150644 164.317848) (xy 37.259359 164.375958) (xy 37.377323 164.411741) (xy 37.5 164.423824) (xy 38.7 164.423824) (xy 38.822677 164.411741) (xy 38.940641 164.375958) (xy 39.049356 164.317848) (xy 39.144646 164.239646) (xy 39.157981 164.223397) (xy 39.791208 164.223397) (xy 39.866514 164.465) (xy 39.791208 164.706603) (xy 40.64 165.555395) (xy 41.488792 164.706603) (xy 41.413486 164.465) (xy 41.488792 164.223397) (xy 40.64 163.374605) (xy 39.791208 164.223397) (xy 39.157981 164.223397) (xy 39.222848 164.144356) (xy 39.280958 164.035641) (xy 39.316741 163.917677) (xy 39.319833 163.886281) (xy 39.362528 163.966157) (xy 39.611603 164.043792) (xy 40.460395 163.195) (xy 40.819605 163.195) (xy 41.668397 164.043792) (xy 41.917472 163.966157) (xy 42.043371 163.702117) (xy 42.115339 163.418589) (xy 42.130611 163.126469) (xy 42.088599 162.836981) (xy 41.990919 162.561253) (xy 41.917472 162.423843) (xy 41.668397 162.346208) (xy 40.819605 163.195) (xy 40.460395 163.195) (xy 39.611603 162.346208) (xy 39.362528 162.423843) (xy 39.320622 162.511729) (xy 39.316741 162.472323) (xy 39.280958 162.354359) (xy 39.222848 162.245644) (xy 39.157982 162.166603) (xy 39.791208 162.166603) (xy 40.64 163.015395) (xy 41.488792 162.166603) (xy 41.411157 161.917528) (xy 41.147117 161.791629) (xy 40.863589 161.719661) (xy 40.571469 161.704389) (xy 40.281981 161.746401) (xy 40.006253 161.844081) (xy 39.868843 161.917528) (xy 39.791208 162.166603) (xy 39.157982 162.166603) (xy 39.144646 162.150354) (xy 39.049356 162.072152) (xy 38.940641 162.014042) (xy 38.822677 161.978259) (xy 38.7 161.966176) (xy 37.5 161.966176) (xy 37.377323 161.978259) (xy 37.259359 162.014042) (xy 37.150644 162.072152) (xy 37.055354 162.150354) (xy 36.977152 162.245644) (xy 36.919042 162.354359) (xy 36.883259 162.472323) (xy 36.871176 162.595) (xy 25.802 162.595) (xy 25.802 159.435476) (xy 64.501 159.435476) (xy 64.501 159.588532) (xy 64.530859 159.738647) (xy 64.589431 159.880052) (xy 64.674464 160.007313) (xy 64.782691 160.11554) (xy 64.909952 160.200573) (xy 65.051357 160.259145) (xy 65.201472 160.289004) (xy 65.354528 160.289004) (xy 65.504643 160.259145) (xy 65.646048 160.200573) (xy 65.773309 160.11554) (xy 65.881536 160.007313) (xy 65.907133 159.969004) (xy 72.535879 159.969004) (xy 72.561474 160.007309) (xy 72.669701 160.115536) (xy 72.796962 160.200569) (xy 72.938367 160.259141) (xy 73.088482 160.289) (xy 73.241538 160.289) (xy 73.391653 160.259141) (xy 73.533058 160.200569) (xy 73.660319 160.115536) (xy 73.768546 160.007309) (xy 73.853579 159.880048) (xy 73.912151 159.738643) (xy 73.94201 159.588528) (xy 73.94201 159.435472) (xy 73.912151 159.285357) (xy 73.853579 159.143952) (xy 73.768546 159.016691) (xy 73.660319 158.908464) (xy 73.533058 158.823431) (xy 73.391653 158.764859) (xy 73.241538 158.735) (xy 73.088482 158.735) (xy 72.938367 158.764859) (xy 72.796962 158.823431) (xy 72.669701 158.908464) (xy 72.561474 159.016691) (xy 72.535874 159.055004) (xy 65.907133 159.055004) (xy 65.881536 159.016695) (xy 65.773309 158.908468) (xy 65.646048 158.823435) (xy 65.504643 158.764863) (xy 65.354528 158.735004) (xy 65.201472 158.735004) (xy 65.051357 158.764863) (xy 64.909952 158.823435) (xy 64.782691 158.908468) (xy 64.674464 159.016695) (xy 64.589431 159.143956) (xy 64.530859 159.285361) (xy 64.501 159.435476) (xy 25.802 159.435476) (xy 25.802 156.514472) (xy 69.073 156.514472) (xy 69.073 156.667528) (xy 69.102859 156.817643) (xy 69.161431 156.959048) (xy 69.246464 157.086309) (xy 69.354691 157.194536) (xy 69.481952 157.279569) (xy 69.623357 157.338141) (xy 69.773472 157.368) (xy 69.926528 157.368) (xy 70.076643 157.338141) (xy 70.218048 157.279569) (xy 70.345309 157.194536) (xy 70.453536 157.086309) (xy 70.479133 157.048) (xy 72.535877 157.048) (xy 72.561474 157.086309) (xy 72.669701 157.194536) (xy 72.796962 157.279569) (xy 72.938367 157.338141) (xy 73.088482 157.368) (xy 73.241538 157.368) (xy 73.391653 157.338141) (xy 73.533058 157.279569) (xy 73.660319 157.194536) (xy 73.768546 157.086309) (xy 73.853579 156.959048) (xy 73.900819 156.845) (xy 76.835 156.845) (xy 76.835 180.975) (xy 76.847201 181.098882) (xy 76.883336 181.218004) (xy 76.942017 181.327787) (xy 77.020987 181.424013) (xy 77.117213 181.502983) (xy 77.226996 181.561664) (xy 77.346118 181.597799) (xy 77.47 181.61) (xy 116.332 181.61) (xy 116.455882 181.597799) (xy 116.575004 181.561664) (xy 116.684787 181.502983) (xy 116.781013 181.424013) (xy 116.859983 181.327787) (xy 116.918664 181.218004) (xy 116.954799 181.098882) (xy 116.967 180.975) (xy 116.967 156.845) (xy 116.954799 156.721118) (xy 116.918664 156.601996) (xy 116.859983 156.492213) (xy 116.781013 156.395987) (xy 116.684787 156.317017) (xy 116.575004 156.258336) (xy 116.455882 156.222201) (xy 116.332 156.21) (xy 77.47 156.21) (xy 77.346118 156.222201) (xy 77.226996 156.258336) (xy 77.117213 156.317017) (xy 77.020987 156.395987) (xy 76.942017 156.492213) (xy 76.883336 156.601996) (xy 76.847201 156.721118) (xy 76.835 156.845) (xy 73.900819 156.845) (xy 73.912151 156.817643) (xy 73.94201 156.667528) (xy 73.94201 156.514472) (xy 73.912151 156.364357) (xy 73.853579 156.222952) (xy 73.768546 156.095691) (xy 73.660319 155.987464) (xy 73.533058 155.902431) (xy 73.391653 155.843859) (xy 73.241538 155.814) (xy 73.088482 155.814) (xy 72.938367 155.843859) (xy 72.796962 155.902431) (xy 72.669701 155.987464) (xy 72.561474 156.095691) (xy 72.535877 156.134) (xy 70.479133 156.134) (xy 70.453536 156.095691) (xy 70.345309 155.987464) (xy 70.218048 155.902431) (xy 70.076643 155.843859) (xy 69.926528 155.814) (xy 69.773472 155.814) (xy 69.623357 155.843859) (xy 69.481952 155.902431) (xy 69.354691 155.987464) (xy 69.246464 156.095691) (xy 69.161431 156.222952) (xy 69.102859 156.364357) (xy 69.073 156.514472) (xy 25.802 156.514472) (xy 25.802 154.609476) (xy 68.311 154.609476) (xy 68.311 154.762532) (xy 68.340859 154.912647) (xy 68.399431 155.054052) (xy 68.484464 155.181313) (xy 68.592691 155.28954) (xy 68.719952 155.374573) (xy 68.861357 155.433145) (xy 69.011472 155.463004) (xy 69.164528 155.463004) (xy 69.314643 155.433145) (xy 69.456048 155.374573) (xy 69.583309 155.28954) (xy 69.691536 155.181313) (xy 69.717133 155.143004) (xy 72.535879 155.143004) (xy 72.561474 155.181309) (xy 72.669701 155.289536) (xy 72.796962 155.374569) (xy 72.938367 155.433141) (xy 73.088482 155.463) (xy 73.241538 155.463) (xy 73.391653 155.433141) (xy 73.533058 155.374569) (xy 73.660319 155.289536) (xy 73.768546 155.181309) (xy 73.853579 155.054048) (xy 73.912151 154.912643) (xy 73.94201 154.762528) (xy 73.94201 154.609472) (xy 73.912151 154.459357) (xy 73.853579 154.317952) (xy 73.768546 154.190691) (xy 73.660319 154.082464) (xy 73.533058 153.997431) (xy 73.391653 153.938859) (xy 73.241538 153.909) (xy 73.088482 153.909) (xy 72.938367 153.938859) (xy 72.796962 153.997431) (xy 72.669701 154.082464) (xy 72.561474 154.190691) (xy 72.535874 154.229004) (xy 69.717133 154.229004) (xy 69.691536 154.190695) (xy 69.583309 154.082468) (xy 69.456048 153.997435) (xy 69.314643 153.938863) (xy 69.164528 153.909004) (xy 69.011472 153.909004) (xy 68.861357 153.938863) (xy 68.719952 153.997435) (xy 68.592691 154.082468) (xy 68.484464 154.190695) (xy 68.399431 154.317956) (xy 68.340859 154.459361) (xy 68.311 154.609476) (xy 25.802 154.609476) (xy 25.802 152.831472) (xy 67.549 152.831472) (xy 67.549 152.984528) (xy 67.578859 153.134643) (xy 67.637431 153.276048) (xy 67.722464 153.403309) (xy 67.830691 153.511536) (xy 67.957952 153.596569) (xy 68.099357 153.655141) (xy 68.249472 153.685) (xy 68.402528 153.685) (xy 68.552643 153.655141) (xy 68.694048 153.596569) (xy 68.821309 153.511536) (xy 68.929536 153.403309) (xy 68.955133 153.365) (xy 72.535877 153.365) (xy 72.561474 153.403309) (xy 72.669701 153.511536) (xy 72.796962 153.596569) (xy 72.938367 153.655141) (xy 73.088482 153.685) (xy 73.241538 153.685) (xy 73.391653 153.655141) (xy 73.533058 153.596569) (xy 73.660319 153.511536) (xy 73.768546 153.403309) (xy 73.853579 153.276048) (xy 73.912151 153.134643) (xy 73.94201 152.984528) (xy 73.94201 152.831472) (xy 73.912151 152.681357) (xy 73.853579 152.539952) (xy 73.768546 152.412691) (xy 73.660319 152.304464) (xy 73.533058 152.219431) (xy 73.391653 152.160859) (xy 73.241538 152.131) (xy 73.088482 152.131) (xy 72.938367 152.160859) (xy 72.796962 152.219431) (xy 72.669701 152.304464) (xy 72.561474 152.412691) (xy 72.535877 152.451) (xy 68.955133 152.451) (xy 68.929536 152.412691) (xy 68.821309 152.304464) (xy 68.694048 152.219431) (xy 68.552643 152.160859) (xy 68.402528 152.131) (xy 68.249472 152.131) (xy 68.099357 152.160859) (xy 67.957952 152.219431) (xy 67.830691 152.304464) (xy 67.722464 152.412691) (xy 67.637431 152.539952) (xy 67.578859 152.681357) (xy 67.549 152.831472) (xy 25.802 152.831472) (xy 25.802 151.053486) (xy 67.549 151.053486) (xy 67.549 151.206542) (xy 67.578859 151.356657) (xy 67.637431 151.498062) (xy 67.722464 151.625323) (xy 67.830691 151.73355) (xy 67.957952 151.818583) (xy 68.099357 151.877155) (xy 68.249472 151.907014) (xy 68.402528 151.907014) (xy 68.552643 151.877155) (xy 68.694048 151.818583) (xy 68.821309 151.73355) (xy 68.929536 151.625323) (xy 68.955133 151.587014) (xy 72.535886 151.587014) (xy 72.561474 151.625309) (xy 72.669701 151.733536) (xy 72.796962 151.818569) (xy 72.938367 151.877141) (xy 73.088482 151.907) (xy 73.241538 151.907) (xy 73.391653 151.877141) (xy 73.533058 151.818569) (xy 73.660319 151.733536) (xy 73.768546 151.625309) (xy 73.853579 151.498048) (xy 73.912151 151.356643) (xy 73.94201 151.206528) (xy 73.94201 151.053472) (xy 73.94132 151.05) (xy 101.596176 151.05) (xy 101.596176 153.75) (xy 101.603455 153.823905) (xy 101.625012 153.89497) (xy 101.660019 153.960463) (xy 101.707131 154.017869) (xy 101.764537 154.064981) (xy 101.83003 154.099988) (xy 101.901095 154.121545) (xy 101.975 154.128824) (xy 104.675 154.128824) (xy 104.748905 154.121545) (xy 104.81997 154.099988) (xy 104.885463 154.064981) (xy 104.942869 154.017869) (xy 104.989981 153.960463) (xy 105.024988 153.89497) (xy 105.046545 153.823905) (xy 105.053824 153.75) (xy 105.053824 151.05) (xy 105.256176 151.05) (xy 105.256176 153.75) (xy 105.263455 153.823905) (xy 105.285012 153.89497) (xy 105.320019 153.960463) (xy 105.367131 154.017869) (xy 105.424537 154.064981) (xy 105.49003 154.099988) (xy 105.561095 154.121545) (xy 105.635 154.128824) (xy 108.335 154.128824) (xy 108.408905 154.121545) (xy 108.47997 154.099988) (xy 108.545463 154.064981) (xy 108.602869 154.017869) (xy 108.649981 153.960463) (xy 108.684988 153.89497) (xy 108.706545 153.823905) (xy 108.713824 153.75) (xy 108.713824 152.229905) (xy 109.728 152.229905) (xy 109.728 152.570095) (xy 109.794368 152.903747) (xy 109.924553 153.218041) (xy 110.113552 153.500898) (xy 110.354102 153.741448) (xy 110.636959 153.930447) (xy 110.951253 154.060632) (xy 111.284905 154.127) (xy 111.625095 154.127) (xy 111.958747 154.060632) (xy 112.273041 153.930447) (xy 112.555898 153.741448) (xy 112.796448 153.500898) (xy 112.985447 153.218041) (xy 113.115632 152.903747) (xy 113.182 152.570095) (xy 113.182 152.229905) (xy 113.388 152.229905) (xy 113.388 152.570095) (xy 113.454368 152.903747) (xy 113.584553 153.218041) (xy 113.773552 153.500898) (xy 114.014102 153.741448) (xy 114.296959 153.930447) (xy 114.611253 154.060632) (xy 114.944905 154.127) (xy 115.285095 154.127) (xy 115.618747 154.060632) (xy 115.933041 153.930447) (xy 116.215898 153.741448) (xy 116.456448 153.500898) (xy 116.645447 153.218041) (xy 116.775632 152.903747) (xy 116.842 152.570095) (xy 116.842 152.229905) (xy 116.775632 151.896253) (xy 116.645447 151.581959) (xy 116.456448 151.299102) (xy 116.215898 151.058552) (xy 115.933041 150.869553) (xy 115.618747 150.739368) (xy 115.285095 150.673) (xy 114.944905 150.673) (xy 114.611253 150.739368) (xy 114.296959 150.869553) (xy 114.014102 151.058552) (xy 113.773552 151.299102) (xy 113.584553 151.581959) (xy 113.454368 151.896253) (xy 113.388 152.229905) (xy 113.182 152.229905) (xy 113.115632 151.896253) (xy 112.985447 151.581959) (xy 112.796448 151.299102) (xy 112.555898 151.058552) (xy 112.273041 150.869553) (xy 111.958747 150.739368) (xy 111.625095 150.673) (xy 111.284905 150.673) (xy 110.951253 150.739368) (xy 110.636959 150.869553) (xy 110.354102 151.058552) (xy 110.113552 151.299102) (xy 109.924553 151.581959) (xy 109.794368 151.896253) (xy 109.728 152.229905) (xy 108.713824 152.229905) (xy 108.713824 151.05) (xy 108.706545 150.976095) (xy 108.684988 150.90503) (xy 108.649981 150.839537) (xy 108.602869 150.782131) (xy 108.545463 150.735019) (xy 108.47997 150.700012) (xy 108.408905 150.678455) (xy 108.335 150.671176) (xy 105.635 150.671176) (xy 105.561095 150.678455) (xy 105.49003 150.700012) (xy 105.424537 150.735019) (xy 105.367131 150.782131) (xy 105.320019 150.839537) (xy 105.285012 150.90503) (xy 105.263455 150.976095) (xy 105.256176 151.05) (xy 105.053824 151.05) (xy 105.046545 150.976095) (xy 105.024988 150.90503) (xy 104.989981 150.839537) (xy 104.942869 150.782131) (xy 104.885463 150.735019) (xy 104.81997 150.700012) (xy 104.748905 150.678455) (xy 104.675 150.671176) (xy 101.975 150.671176) (xy 101.901095 150.678455) (xy 101.83003 150.700012) (xy 101.764537 150.735019) (xy 101.707131 150.782131) (xy 101.660019 150.839537) (xy 101.625012 150.90503) (xy 101.603455 150.976095) (xy 101.596176 151.05) (xy 73.94132 151.05) (xy 73.912151 150.903357) (xy 73.853579 150.761952) (xy 73.768546 150.634691) (xy 73.660319 150.526464) (xy 73.533058 150.441431) (xy 73.391653 150.382859) (xy 73.241538 150.353) (xy 73.088482 150.353) (xy 72.938367 150.382859) (xy 72.796962 150.441431) (xy 72.669701 150.526464) (xy 72.561474 150.634691) (xy 72.535867 150.673014) (xy 68.955133 150.673014) (xy 68.929536 150.634705) (xy 68.821309 150.526478) (xy 68.694048 150.441445) (xy 68.552643 150.382873) (xy 68.402528 150.353014) (xy 68.249472 150.353014) (xy 68.099357 150.382873) (xy 67.957952 150.441445) (xy 67.830691 150.526478) (xy 67.722464 150.634705) (xy 67.637431 150.761966) (xy 67.578859 150.903371) (xy 67.549 151.053486) (xy 25.802 151.053486) (xy 25.802 149.275472) (xy 70.597 149.275472) (xy 70.597 149.428528) (xy 70.626859 149.578643) (xy 70.685431 149.720048) (xy 70.770464 149.847309) (xy 70.878691 149.955536) (xy 71.005952 150.040569) (xy 71.147357 150.099141) (xy 71.297472 150.129) (xy 71.450528 150.129) (xy 71.600643 150.099141) (xy 71.742048 150.040569) (xy 71.869309 149.955536) (xy 71.920845 149.904) (xy 72.859163 149.904) (xy 72.910699 149.955536) (xy 73.03796 150.040569) (xy 73.179365 150.099141) (xy 73.32948 150.129) (xy 73.482536 150.129) (xy 73.632651 150.099141) (xy 73.774056 150.040569) (xy 73.901317 149.955536) (xy 74.009544 149.847309) (xy 74.094577 149.720048) (xy 74.153149 149.578643) (xy 74.183008 149.428528) (xy 74.183008 149.275472) (xy 74.153149 149.125357) (xy 74.094577 148.983952) (xy 74.009544 148.856691) (xy 73.901317 148.748464) (xy 73.774056 148.663431) (xy 73.632651 148.604859) (xy 73.482536 148.575) (xy 73.32948 148.575) (xy 73.179365 148.604859) (xy 73.03796 148.663431) (xy 72.910699 148.748464) (xy 72.859163 148.8) (xy 71.920845 148.8) (xy 71.869309 148.748464) (xy 71.742048 148.663431) (xy 71.600643 148.604859) (xy 71.450528 148.575) (xy 71.297472 148.575) (xy 71.147357 148.604859) (xy 71.005952 148.663431) (xy 70.878691 148.748464) (xy 70.770464 148.856691) (xy 70.685431 148.983952) (xy 70.626859 149.125357) (xy 70.597 149.275472) (xy 25.802 149.275472) (xy 25.802 145.280413) (xy 38.414192 145.280413) (xy 38.509956 145.544814) (xy 38.799571 145.685704) (xy 39.111108 145.767384) (xy 39.432595 145.786718) (xy 39.751675 145.742961) (xy 40.056088 145.637795) (xy 40.230044 145.544814) (xy 40.325808 145.280413) (xy 39.37 144.324605) (xy 38.414192 145.280413) (xy 25.802 145.280413) (xy 25.802 144.207595) (xy 37.728282 144.207595) (xy 37.772039 144.526675) (xy 37.877205 144.831088) (xy 37.970186 145.005044) (xy 38.234587 145.100808) (xy 39.190395 144.145) (xy 39.549605 144.145) (xy 40.505413 145.100808) (xy 40.769814 145.005044) (xy 40.910704 144.715429) (xy 40.992384 144.403892) (xy 41.011718 144.082405) (xy 40.967961 143.763325) (xy 40.862795 143.458912) (xy 40.769814 143.284956) (xy 40.505413 143.189192) (xy 39.549605 144.145) (xy 39.190395 144.145) (xy 38.234587 143.189192) (xy 37.970186 143.284956) (xy 37.829296 143.574571) (xy 37.747616 143.886108) (xy 37.728282 144.207595) (xy 25.802 144.207595) (xy 25.802 143.009587) (xy 38.414192 143.009587) (xy 39.37 143.965395) (xy 40.325808 143.009587) (xy 40.230044 142.745186) (xy 39.940429 142.604296) (xy 39.628892 142.522616) (xy 39.307405 142.503282) (xy 38.988325 142.547039) (xy 38.683912 142.652205) (xy 38.509956 142.745186) (xy 38.414192 143.009587) (xy 25.802 143.009587) (xy 25.802 138.065) (xy 37.991176 138.065) (xy 37.991176 140.065) (xy 37.998455 140.138905) (xy 38.020012 140.20997) (xy 38.055019 140.275463) (xy 38.102131 140.332869) (xy 38.159537 140.379981) (xy 38.22503 140.414988) (xy 38.296095 140.436545) (xy 38.37 140.443824) (xy 40.37 140.443824) (xy 40.443905 140.436545) (xy 40.51497 140.414988) (xy 40.580463 140.379981) (xy 40.637869 140.332869) (xy 40.684981 140.275463) (xy 40.719988 140.20997) (xy 40.741545 140.138905) (xy 40.748824 140.065) (xy 40.748824 138.065) (xy 40.741545 137.991095) (xy 40.719988 137.92003) (xy 40.684981 137.854537) (xy 40.637869 137.797131) (xy 40.580463 137.750019) (xy 40.51497 137.715012) (xy 40.443905 137.693455) (xy 40.37 137.686176) (xy 38.37 137.686176) (xy 38.296095 137.693455) (xy 38.22503 137.715012) (xy 38.159537 137.750019) (xy 38.102131 137.797131) (xy 38.055019 137.854537) (xy 38.020012 137.92003) (xy 37.998455 137.991095) (xy 37.991176 138.065) (xy 25.802 138.065) (xy 25.802 128.769377) (xy 37.993 128.769377) (xy 37.993 129.040623) (xy 38.045917 129.306656) (xy 38.149718 129.557254) (xy 38.300414 129.782787) (xy 38.492213 129.974586) (xy 38.717746 130.125282) (xy 38.968344 130.229083) (xy 39.234377 130.282) (xy 39.505623 130.282) (xy 39.771656 130.229083) (xy 40.022254 130.125282) (xy 40.247787 129.974586) (xy 40.439586 129.782787) (xy 40.483227 129.717472) (xy 60.77299 129.717472) (xy 60.77299 129.870528) (xy 60.802849 130.020643) (xy 60.861421 130.162048) (xy 60.946454 130.289309) (xy 61.054681 130.397536) (xy 61.181942 130.482569) (xy 61.323347 130.541141) (xy 61.473462 130.571) (xy 61.626518 130.571) (xy 61.776633 130.541141) (xy 61.918038 130.482569) (xy 62.010183 130.421) (xy 70.913807 130.421) (xy 71.005952 130.482569) (xy 71.147357 130.541141) (xy 71.297472 130.571) (xy 71.450528 130.571) (xy 71.600643 130.541141) (xy 71.742048 130.482569) (xy 71.869309 130.397536) (xy 71.977536 130.289309) (xy 72.062569 130.162048) (xy 72.121141 130.020643) (xy 72.151 129.870528) (xy 72.151 129.717472) (xy 72.121141 129.567357) (xy 72.062569 129.425952) (xy 71.977536 129.298691) (xy 71.869309 129.190464) (xy 71.742048 129.105431) (xy 71.600643 129.046859) (xy 71.450528 129.017) (xy 71.297472 129.017) (xy 71.147357 129.046859) (xy 71.005952 129.105431) (xy 70.913807 129.167) (xy 62.010183 129.167) (xy 61.918038 129.105431) (xy 61.776633 129.046859) (xy 61.626518 129.017) (xy 61.473462 129.017) (xy 61.323347 129.046859) (xy 61.181942 129.105431) (xy 61.054681 129.190464) (xy 60.946454 129.298691) (xy 60.861421 129.425952) (xy 60.802849 129.567357) (xy 60.77299 129.717472) (xy 40.483227 129.717472) (xy 40.590282 129.557254) (xy 40.694083 129.306656) (xy 40.747 129.040623) (xy 40.747 128.769377) (xy 40.694083 128.503344) (xy 40.590282 128.252746) (xy 40.439586 128.027213) (xy 40.247787 127.835414) (xy 40.022254 127.684718) (xy 39.771656 127.580917) (xy 39.658817 127.558472) (xy 64.58299 127.558472) (xy 64.58299 127.711528) (xy 64.612849 127.861643) (xy 64.671421 128.003048) (xy 64.756454 128.130309) (xy 64.864681 128.238536) (xy 64.991942 128.323569) (xy 65.133347 128.382141) (xy 65.283462 128.412) (xy 65.436518 128.412) (xy 65.586633 128.382141) (xy 65.728038 128.323569) (xy 65.855299 128.238536) (xy 65.963526 128.130309) (xy 65.989123 128.092) (xy 72.597564 128.092) (xy 72.669701 128.164137) (xy 72.796962 128.24917) (xy 72.938367 128.307742) (xy 73.088482 128.337601) (xy 73.241538 128.337601) (xy 73.391653 128.307742) (xy 73.533058 128.24917) (xy 73.660319 128.164137) (xy 73.768546 128.05591) (xy 73.853579 127.928649) (xy 73.912151 127.787244) (xy 73.94201 127.637129) (xy 73.94201 127.484073) (xy 73.912151 127.333958) (xy 73.853579 127.192553) (xy 73.768546 127.065292) (xy 73.660319 126.957065) (xy 73.533058 126.872032) (xy 73.391653 126.81346) (xy 73.241538 126.783601) (xy 73.088482 126.783601) (xy 72.938367 126.81346) (xy 72.796962 126.872032) (xy 72.669701 126.957065) (xy 72.561474 127.065292) (xy 72.486165 127.178) (xy 65.989123 127.178) (xy 65.963526 127.139691) (xy 65.855299 127.031464) (xy 65.728038 126.946431) (xy 65.586633 126.887859) (xy 65.436518 126.858) (xy 65.283462 126.858) (xy 65.133347 126.887859) (xy 64.991942 126.946431) (xy 64.864681 127.031464) (xy 64.756454 127.139691) (xy 64.671421 127.266952) (xy 64.612849 127.408357) (xy 64.58299 127.558472) (xy 39.658817 127.558472) (xy 39.505623 127.528) (xy 39.234377 127.528) (xy 38.968344 127.580917) (xy 38.717746 127.684718) (xy 38.492213 127.835414) (xy 38.300414 128.027213) (xy 38.149718 128.252746) (xy 38.045917 128.503344) (xy 37.993 128.769377) (xy 25.802 128.769377) (xy 25.802 122.825) (xy 37.991176 122.825) (xy 37.991176 124.825) (xy 37.998455 124.898905) (xy 38.020012 124.96997) (xy 38.055019 125.035463) (xy 38.102131 125.092869) (xy 38.159537 125.139981) (xy 38.22503 125.174988) (xy 38.296095 125.196545) (xy 38.37 125.203824) (xy 40.37 125.203824) (xy 40.443905 125.196545) (xy 40.51497 125.174988) (xy 40.580463 125.139981) (xy 40.637869 125.092869) (xy 40.684981 125.035463) (xy 40.719988 124.96997) (xy 40.741545 124.898905) (xy 40.748824 124.825) (xy 40.748824 124.764472) (xy 69.073 124.764472) (xy 69.073 124.917528) (xy 69.102859 125.067643) (xy 69.161431 125.209048) (xy 69.246464 125.336309) (xy 69.354691 125.444536) (xy 69.481952 125.529569) (xy 69.623357 125.588141) (xy 69.773472 125.618) (xy 69.926528 125.618) (xy 70.076643 125.588141) (xy 70.218048 125.529569) (xy 70.345309 125.444536) (xy 70.453536 125.336309) (xy 70.479133 125.298) (xy 72.535877 125.298) (xy 72.561474 125.336309) (xy 72.669701 125.444536) (xy 72.796962 125.529569) (xy 72.938367 125.588141) (xy 73.088482 125.618) (xy 73.241538 125.618) (xy 73.391653 125.588141) (xy 73.533058 125.529569) (xy 73.660319 125.444536) (xy 73.768546 125.336309) (xy 73.853579 125.209048) (xy 73.912151 125.067643) (xy 73.94201 124.917528) (xy 73.94201 124.764472) (xy 73.912151 124.614357) (xy 73.853579 124.472952) (xy 73.844925 124.46) (xy 76.835 124.46) (xy 76.835 148.59) (xy 76.847201 148.713882) (xy 76.883336 148.833004) (xy 76.942017 148.942787) (xy 77.020987 149.039013) (xy 77.117213 149.117983) (xy 77.226996 149.176664) (xy 77.346118 149.212799) (xy 77.47 149.225) (xy 116.332 149.225) (xy 116.455882 149.212799) (xy 116.575004 149.176664) (xy 116.684787 149.117983) (xy 116.781013 149.039013) (xy 116.859983 148.942787) (xy 116.918664 148.833004) (xy 116.954799 148.713882) (xy 116.967 148.59) (xy 116.967 124.46) (xy 116.954799 124.336118) (xy 116.918664 124.216996) (xy 116.859983 124.107213) (xy 116.781013 124.010987) (xy 116.684787 123.932017) (xy 116.575004 123.873336) (xy 116.455882 123.837201) (xy 116.332 123.825) (xy 77.47 123.825) (xy 77.346118 123.837201) (xy 77.226996 123.873336) (xy 77.117213 123.932017) (xy 77.020987 124.010987) (xy 76.942017 124.107213) (xy 76.883336 124.216996) (xy 76.847201 124.336118) (xy 76.835 124.46) (xy 73.844925 124.46) (xy 73.768546 124.345691) (xy 73.660319 124.237464) (xy 73.533058 124.152431) (xy 73.391653 124.093859) (xy 73.241538 124.064) (xy 73.088482 124.064) (xy 72.938367 124.093859) (xy 72.796962 124.152431) (xy 72.669701 124.237464) (xy 72.561474 124.345691) (xy 72.535877 124.384) (xy 70.479133 124.384) (xy 70.453536 124.345691) (xy 70.345309 124.237464) (xy 70.218048 124.152431) (xy 70.076643 124.093859) (xy 69.926528 124.064) (xy 69.773472 124.064) (xy 69.623357 124.093859) (xy 69.481952 124.152431) (xy 69.354691 124.237464) (xy 69.246464 124.345691) (xy 69.161431 124.472952) (xy 69.102859 124.614357) (xy 69.073 124.764472) (xy 40.748824 124.764472) (xy 40.748824 123.875472) (xy 60.691 123.875472) (xy 60.691 124.028528) (xy 60.720859 124.178643) (xy 60.779431 124.320048) (xy 60.864464 124.447309) (xy 60.972691 124.555536) (xy 61.099952 124.640569) (xy 61.241357 124.699141) (xy 61.391472 124.729) (xy 61.544528 124.729) (xy 61.694643 124.699141) (xy 61.836048 124.640569) (xy 61.963309 124.555536) (xy 62.071536 124.447309) (xy 62.097133 124.409) (xy 66.172867 124.409) (xy 66.198464 124.447309) (xy 66.306691 124.555536) (xy 66.433952 124.640569) (xy 66.575357 124.699141) (xy 66.725472 124.729) (xy 66.878528 124.729) (xy 67.028643 124.699141) (xy 67.170048 124.640569) (xy 67.297309 124.555536) (xy 67.405536 124.447309) (xy 67.490569 124.320048) (xy 67.549141 124.178643) (xy 67.579 124.028528) (xy 67.579 123.875472) (xy 67.549141 123.725357) (xy 67.490569 123.583952) (xy 67.405536 123.456691) (xy 67.297309 123.348464) (xy 67.170048 123.263431) (xy 67.028643 123.204859) (xy 66.878528 123.175) (xy 66.725472 123.175) (xy 66.575357 123.204859) (xy 66.433952 123.263431) (xy 66.306691 123.348464) (xy 66.198464 123.456691) (xy 66.172867 123.495) (xy 62.097133 123.495) (xy 62.071536 123.456691) (xy 61.963309 123.348464) (xy 61.836048 123.263431) (xy 61.694643 123.204859) (xy 61.544528 123.175) (xy 61.391472 123.175) (xy 61.241357 123.204859) (xy 61.099952 123.263431) (xy 60.972691 123.348464) (xy 60.864464 123.456691) (xy 60.779431 123.583952) (xy 60.720859 123.725357) (xy 60.691 123.875472) (xy 40.748824 123.875472) (xy 40.748824 122.986472) (xy 68.311 122.986472) (xy 68.311 123.139528) (xy 68.340859 123.289643) (xy 68.399431 123.431048) (xy 68.484464 123.558309) (xy 68.592691 123.666536) (xy 68.719952 123.751569) (xy 68.861357 123.810141) (xy 69.011472 123.84) (xy 69.164528 123.84) (xy 69.314643 123.810141) (xy 69.456048 123.751569) (xy 69.583309 123.666536) (xy 69.691536 123.558309) (xy 69.717133 123.52) (xy 72.535877 123.52) (xy 72.561474 123.558309) (xy 72.669701 123.666536) (xy 72.796962 123.751569) (xy 72.938367 123.810141) (xy 73.088482 123.84) (xy 73.241538 123.84) (xy 73.391653 123.810141) (xy 73.533058 123.751569) (xy 73.660319 123.666536) (xy 73.768546 123.558309) (xy 73.853579 123.431048) (xy 73.912151 123.289643) (xy 73.94201 123.139528) (xy 73.94201 122.986472) (xy 73.912151 122.836357) (xy 73.853579 122.694952) (xy 73.768546 122.567691) (xy 73.660319 122.459464) (xy 73.533058 122.374431) (xy 73.391653 122.315859) (xy 73.241538 122.286) (xy 73.088482 122.286) (xy 72.938367 122.315859) (xy 72.796962 122.374431) (xy 72.669701 122.459464) (xy 72.561474 122.567691) (xy 72.535877 122.606) (xy 69.717133 122.606) (xy 69.691536 122.567691) (xy 69.583309 122.459464) (xy 69.456048 122.374431) (xy 69.314643 122.315859) (xy 69.164528 122.286) (xy 69.011472 122.286) (xy 68.861357 122.315859) (xy 68.719952 122.374431) (xy 68.592691 122.459464) (xy 68.484464 122.567691) (xy 68.399431 122.694952) (xy 68.340859 122.836357) (xy 68.311 122.986472) (xy 40.748824 122.986472) (xy 40.748824 122.825) (xy 40.741545 122.751095) (xy 40.719988 122.68003) (xy 40.684981 122.614537) (xy 40.637869 122.557131) (xy 40.580463 122.510019) (xy 40.51497 122.475012) (xy 40.443905 122.453455) (xy 40.37 122.446176) (xy 38.37 122.446176) (xy 38.296095 122.453455) (xy 38.22503 122.475012) (xy 38.159537 122.510019) (xy 38.102131 122.557131) (xy 38.055019 122.614537) (xy 38.020012 122.68003) (xy 37.998455 122.751095) (xy 37.991176 122.825) (xy 25.802 122.825) (xy 25.802 122.097472) (xy 60.691 122.097472) (xy 60.691 122.250528) (xy 60.720859 122.400643) (xy 60.779431 122.542048) (xy 60.864464 122.669309) (xy 60.972691 122.777536) (xy 61.099952 122.862569) (xy 61.241357 122.921141) (xy 61.391472 122.951) (xy 61.544528 122.951) (xy 61.694643 122.921141) (xy 61.836048 122.862569) (xy 61.963309 122.777536) (xy 62.071536 122.669309) (xy 62.097131 122.631004) (xy 66.779566 122.631004) (xy 66.802006 122.633214) (xy 66.824446 122.631004) (xy 66.824454 122.631004) (xy 66.824495 122.631) (xy 66.934867 122.631) (xy 66.960464 122.669309) (xy 67.068691 122.777536) (xy 67.195952 122.862569) (xy 67.337357 122.921141) (xy 67.487472 122.951) (xy 67.640528 122.951) (xy 67.790643 122.921141) (xy 67.932048 122.862569) (xy 68.059309 122.777536) (xy 68.167536 122.669309) (xy 68.252569 122.542048) (xy 68.311141 122.400643) (xy 68.341 122.250528) (xy 68.341 122.097472) (xy 68.311141 121.947357) (xy 68.252569 121.805952) (xy 68.167536 121.678691) (xy 68.059309 121.570464) (xy 67.932048 121.485431) (xy 67.790643 121.426859) (xy 67.640528 121.397) (xy 67.487472 121.397) (xy 67.337357 121.426859) (xy 67.195952 121.485431) (xy 67.068691 121.570464) (xy 66.960464 121.678691) (xy 66.934867 121.717) (xy 66.82445 121.717) (xy 66.80201 121.71479) (xy 66.77957 121.717) (xy 66.779562 121.717) (xy 66.779521 121.717004) (xy 62.097136 121.717004) (xy 62.071536 121.678691) (xy 61.963309 121.570464) (xy 61.836048 121.485431) (xy 61.694643 121.426859) (xy 61.544528 121.397) (xy 61.391472 121.397) (xy 61.241357 121.426859) (xy 61.099952 121.485431) (xy 60.972691 121.570464) (xy 60.864464 121.678691) (xy 60.779431 121.805952) (xy 60.720859 121.947357) (xy 60.691 122.097472) (xy 25.802 122.097472) (xy 25.802 120.319472) (xy 60.691 120.319472) (xy 60.691 120.472528) (xy 60.720859 120.622643) (xy 60.779431 120.764048) (xy 60.864464 120.891309) (xy 60.972691 120.999536) (xy 61.099952 121.084569) (xy 61.241357 121.143141) (xy 61.391472 121.173) (xy 61.544528 121.173) (xy 61.694643 121.143141) (xy 61.836048 121.084569) (xy 61.963309 120.999536) (xy 62.071536 120.891309) (xy 62.097133 120.853) (xy 64.140867 120.853) (xy 64.166464 120.891309) (xy 64.274691 120.999536) (xy 64.401952 121.084569) (xy 64.543357 121.143141) (xy 64.693472 121.173) (xy 64.846528 121.173) (xy 64.996643 121.143141) (xy 65.138048 121.084569) (xy 65.265309 120.999536) (xy 65.373536 120.891309) (xy 65.458569 120.764048) (xy 65.517141 120.622643) (xy 65.526921 120.57347) (xy 67.549 120.57347) (xy 67.549 120.726526) (xy 67.578859 120.876641) (xy 67.637431 121.018046) (xy 67.722464 121.145307) (xy 67.830691 121.253534) (xy 67.957952 121.338567) (xy 68.099357 121.397139) (xy 68.249472 121.426998) (xy 68.402528 121.426998) (xy 68.552643 121.397139) (xy 68.694048 121.338567) (xy 68.821309 121.253534) (xy 68.929536 121.145307) (xy 68.955133 121.106998) (xy 72.535875 121.106998) (xy 72.561474 121.145309) (xy 72.669701 121.253536) (xy 72.796962 121.338569) (xy 72.938367 121.397141) (xy 73.088482 121.427) (xy 73.241538 121.427) (xy 73.391653 121.397141) (xy 73.533058 121.338569) (xy 73.660319 121.253536) (xy 73.768546 121.145309) (xy 73.853579 121.018048) (xy 73.912151 120.876643) (xy 73.94201 120.726528) (xy 73.94201 120.573472) (xy 73.912151 120.423357) (xy 73.853579 120.281952) (xy 73.768546 120.154691) (xy 73.660319 120.046464) (xy 73.533058 119.961431) (xy 73.391653 119.902859) (xy 73.241538 119.873) (xy 73.088482 119.873) (xy 72.938367 119.902859) (xy 72.796962 119.961431) (xy 72.669701 120.046464) (xy 72.561474 120.154691) (xy 72.535878 120.192998) (xy 68.955133 120.192998) (xy 68.929536 120.154689) (xy 68.821309 120.046462) (xy 68.694048 119.961429) (xy 68.552643 119.902857) (xy 68.402528 119.872998) (xy 68.249472 119.872998) (xy 68.099357 119.902857) (xy 67.957952 119.961429) (xy 67.830691 120.046462) (xy 67.722464 120.154689) (xy 67.637431 120.28195) (xy 67.578859 120.423355) (xy 67.549 120.57347) (xy 65.526921 120.57347) (xy 65.547 120.472528) (xy 65.547 120.319472) (xy 65.517141 120.169357) (xy 65.458569 120.027952) (xy 65.373536 119.900691) (xy 65.265309 119.792464) (xy 65.138048 119.707431) (xy 64.996643 119.648859) (xy 64.846528 119.619) (xy 64.693472 119.619) (xy 64.543357 119.648859) (xy 64.401952 119.707431) (xy 64.274691 119.792464) (xy 64.166464 119.900691) (xy 64.140867 119.939) (xy 62.097133 119.939) (xy 62.071536 119.900691) (xy 61.963309 119.792464) (xy 61.836048 119.707431) (xy 61.694643 119.648859) (xy 61.544528 119.619) (xy 61.391472 119.619) (xy 61.241357 119.648859) (xy 61.099952 119.707431) (xy 60.972691 119.792464) (xy 60.864464 119.900691) (xy 60.779431 120.027952) (xy 60.720859 120.169357) (xy 60.691 120.319472) (xy 25.802 120.319472) (xy 25.802 118.609377) (xy 37.993 118.609377) (xy 37.993 118.880623) (xy 38.045917 119.146656) (xy 38.149718 119.397254) (xy 38.300414 119.622787) (xy 38.492213 119.814586) (xy 38.717746 119.965282) (xy 38.968344 120.069083) (xy 39.234377 120.122) (xy 39.505623 120.122) (xy 39.771656 120.069083) (xy 40.022254 119.965282) (xy 40.247787 119.814586) (xy 40.439586 119.622787) (xy 40.590282 119.397254) (xy 40.694083 119.146656) (xy 40.738675 118.922472) (xy 67.549 118.922472) (xy 67.549 119.075528) (xy 67.578859 119.225643) (xy 67.637431 119.367048) (xy 67.722464 119.494309) (xy 67.830691 119.602536) (xy 67.957952 119.687569) (xy 68.099357 119.746141) (xy 68.249472 119.776) (xy 68.402528 119.776) (xy 68.552643 119.746141) (xy 68.694048 119.687569) (xy 68.821309 119.602536) (xy 68.929536 119.494309) (xy 68.955133 119.456) (xy 72.535877 119.456) (xy 72.561474 119.494309) (xy 72.669701 119.602536) (xy 72.796962 119.687569) (xy 72.938367 119.746141) (xy 73.088482 119.776) (xy 73.241538 119.776) (xy 73.391653 119.746141) (xy 73.533058 119.687569) (xy 73.660319 119.602536) (xy 73.768546 119.494309) (xy 73.853579 119.367048) (xy 73.912151 119.225643) (xy 73.94201 119.075528) (xy 73.94201 118.922472) (xy 73.912151 118.772357) (xy 73.867683 118.665) (xy 101.596176 118.665) (xy 101.596176 121.365) (xy 101.603455 121.438905) (xy 101.625012 121.50997) (xy 101.660019 121.575463) (xy 101.707131 121.632869) (xy 101.764537 121.679981) (xy 101.83003 121.714988) (xy 101.901095 121.736545) (xy 101.975 121.743824) (xy 104.675 121.743824) (xy 104.748905 121.736545) (xy 104.81997 121.714988) (xy 104.885463 121.679981) (xy 104.942869 121.632869) (xy 104.989981 121.575463) (xy 105.024988 121.50997) (xy 105.046545 121.438905) (xy 105.053824 121.365) (xy 105.053824 118.665) (xy 105.256176 118.665) (xy 105.256176 121.365) (xy 105.263455 121.438905) (xy 105.285012 121.50997) (xy 105.320019 121.575463) (xy 105.367131 121.632869) (xy 105.424537 121.679981) (xy 105.49003 121.714988) (xy 105.561095 121.736545) (xy 105.635 121.743824) (xy 108.335 121.743824) (xy 108.408905 121.736545) (xy 108.47997 121.714988) (xy 108.545463 121.679981) (xy 108.602869 121.632869) (xy 108.649981 121.575463) (xy 108.684988 121.50997) (xy 108.706545 121.438905) (xy 108.713824 121.365) (xy 108.713824 119.844905) (xy 109.728 119.844905) (xy 109.728 120.185095) (xy 109.794368 120.518747) (xy 109.924553 120.833041) (xy 110.113552 121.115898) (xy 110.354102 121.356448) (xy 110.636959 121.545447) (xy 110.951253 121.675632) (xy 111.284905 121.742) (xy 111.625095 121.742) (xy 111.958747 121.675632) (xy 112.273041 121.545447) (xy 112.555898 121.356448) (xy 112.796448 121.115898) (xy 112.985447 120.833041) (xy 113.115632 120.518747) (xy 113.182 120.185095) (xy 113.182 119.844905) (xy 113.388 119.844905) (xy 113.388 120.185095) (xy 113.454368 120.518747) (xy 113.584553 120.833041) (xy 113.773552 121.115898) (xy 114.014102 121.356448) (xy 114.296959 121.545447) (xy 114.611253 121.675632) (xy 114.944905 121.742) (xy 115.285095 121.742) (xy 115.618747 121.675632) (xy 115.933041 121.545447) (xy 116.215898 121.356448) (xy 116.456448 121.115898) (xy 116.645447 120.833041) (xy 116.775632 120.518747) (xy 116.842 120.185095) (xy 116.842 119.844905) (xy 116.775632 119.511253) (xy 116.645447 119.196959) (xy 116.456448 118.914102) (xy 116.215898 118.673552) (xy 115.933041 118.484553) (xy 115.618747 118.354368) (xy 115.285095 118.288) (xy 114.944905 118.288) (xy 114.611253 118.354368) (xy 114.296959 118.484553) (xy 114.014102 118.673552) (xy 113.773552 118.914102) (xy 113.584553 119.196959) (xy 113.454368 119.511253) (xy 113.388 119.844905) (xy 113.182 119.844905) (xy 113.115632 119.511253) (xy 112.985447 119.196959) (xy 112.796448 118.914102) (xy 112.555898 118.673552) (xy 112.273041 118.484553) (xy 111.958747 118.354368) (xy 111.625095 118.288) (xy 111.284905 118.288) (xy 110.951253 118.354368) (xy 110.636959 118.484553) (xy 110.354102 118.673552) (xy 110.113552 118.914102) (xy 109.924553 119.196959) (xy 109.794368 119.511253) (xy 109.728 119.844905) (xy 108.713824 119.844905) (xy 108.713824 118.665) (xy 108.706545 118.591095) (xy 108.684988 118.52003) (xy 108.649981 118.454537) (xy 108.602869 118.397131) (xy 108.545463 118.350019) (xy 108.47997 118.315012) (xy 108.408905 118.293455) (xy 108.335 118.286176) (xy 105.635 118.286176) (xy 105.561095 118.293455) (xy 105.49003 118.315012) (xy 105.424537 118.350019) (xy 105.367131 118.397131) (xy 105.320019 118.454537) (xy 105.285012 118.52003) (xy 105.263455 118.591095) (xy 105.256176 118.665) (xy 105.053824 118.665) (xy 105.046545 118.591095) (xy 105.024988 118.52003) (xy 104.989981 118.454537) (xy 104.942869 118.397131) (xy 104.885463 118.350019) (xy 104.81997 118.315012) (xy 104.748905 118.293455) (xy 104.675 118.286176) (xy 101.975 118.286176) (xy 101.901095 118.293455) (xy 101.83003 118.315012) (xy 101.764537 118.350019) (xy 101.707131 118.397131) (xy 101.660019 118.454537) (xy 101.625012 118.52003) (xy 101.603455 118.591095) (xy 101.596176 118.665) (xy 73.867683 118.665) (xy 73.853579 118.630952) (xy 73.768546 118.503691) (xy 73.660319 118.395464) (xy 73.533058 118.310431) (xy 73.391653 118.251859) (xy 73.241538 118.222) (xy 73.088482 118.222) (xy 72.938367 118.251859) (xy 72.796962 118.310431) (xy 72.669701 118.395464) (xy 72.561474 118.503691) (xy 72.535877 118.542) (xy 68.955133 118.542) (xy 68.929536 118.503691) (xy 68.821309 118.395464) (xy 68.694048 118.310431) (xy 68.552643 118.251859) (xy 68.402528 118.222) (xy 68.249472 118.222) (xy 68.099357 118.251859) (xy 67.957952 118.310431) (xy 67.830691 118.395464) (xy 67.722464 118.503691) (xy 67.637431 118.630952) (xy 67.578859 118.772357) (xy 67.549 118.922472) (xy 40.738675 118.922472) (xy 40.747 118.880623) (xy 40.747 118.609377) (xy 40.694083 118.343344) (xy 40.590282 118.092746) (xy 40.439586 117.867213) (xy 40.247787 117.675414) (xy 40.022254 117.524718) (xy 39.771656 117.420917) (xy 39.505623 117.368) (xy 39.234377 117.368) (xy 38.968344 117.420917) (xy 38.717746 117.524718) (xy 38.492213 117.675414) (xy 38.300414 117.867213) (xy 38.149718 118.092746) (xy 38.045917 118.343344) (xy 37.993 118.609377) (xy 25.802 118.609377) (xy 25.802 116.763472) (xy 70.597 116.763472) (xy 70.597 116.916528) (xy 70.626859 117.066643) (xy 70.685431 117.208048) (xy 70.770464 117.335309) (xy 70.878691 117.443536) (xy 71.005952 117.528569) (xy 71.147357 117.587141) (xy 71.297472 117.617) (xy 71.450528 117.617) (xy 71.600643 117.587141) (xy 71.742048 117.528569) (xy 71.869309 117.443536) (xy 71.920845 117.392) (xy 72.605155 117.392) (xy 72.656691 117.443536) (xy 72.783952 117.528569) (xy 72.925357 117.587141) (xy 73.075472 117.617) (xy 73.228528 117.617) (xy 73.378643 117.587141) (xy 73.520048 117.528569) (xy 73.647309 117.443536) (xy 73.755536 117.335309) (xy 73.840569 117.208048) (xy 73.899141 117.066643) (xy 73.929 116.916528) (xy 73.929 116.763472) (xy 73.899141 116.613357) (xy 73.840569 116.471952) (xy 73.755536 116.344691) (xy 73.647309 116.236464) (xy 73.520048 116.151431) (xy 73.378643 116.092859) (xy 73.228528 116.063) (xy 73.075472 116.063) (xy 72.925357 116.092859) (xy 72.783952 116.151431) (xy 72.656691 116.236464) (xy 72.605155 116.288) (xy 71.920845 116.288) (xy 71.869309 116.236464) (xy 71.742048 116.151431) (xy 71.600643 116.092859) (xy 71.450528 116.063) (xy 71.297472 116.063) (xy 71.147357 116.092859) (xy 71.005952 116.151431) (xy 70.878691 116.236464) (xy 70.770464 116.344691) (xy 70.685431 116.471952) (xy 70.626859 116.613357) (xy 70.597 116.763472) (xy 25.802 116.763472) (xy 25.802 112.665) (xy 37.991176 112.665) (xy 37.991176 114.665) (xy 37.998455 114.738905) (xy 38.020012 114.80997) (xy 38.055019 114.875463) (xy 38.102131 114.932869) (xy 38.159537 114.979981) (xy 38.22503 115.014988) (xy 38.296095 115.036545) (xy 38.37 115.043824) (xy 40.37 115.043824) (xy 40.443905 115.036545) (xy 40.51497 115.014988) (xy 40.580463 114.979981) (xy 40.637869 114.932869) (xy 40.684981 114.875463) (xy 40.694062 114.858472) (xy 61.936979 114.858472) (xy 61.936979 115.011528) (xy 61.966838 115.161643) (xy 62.02541 115.303048) (xy 62.110443 115.430309) (xy 62.21867 115.538536) (xy 62.345931 115.623569) (xy 62.487336 115.682141) (xy 62.637451 115.712) (xy 62.790507 115.712) (xy 62.940622 115.682141) (xy 63.082027 115.623569) (xy 63.209288 115.538536) (xy 63.260824 115.487) (xy 72.007667 115.487) (xy 72.021952 115.496545) (xy 72.163357 115.555117) (xy 72.313472 115.584976) (xy 72.466528 115.584976) (xy 72.616643 115.555117) (xy 72.758048 115.496545) (xy 72.885309 115.411512) (xy 72.993536 115.303285) (xy 73.078569 115.176024) (xy 73.137141 115.034619) (xy 73.167 114.884504) (xy 73.167 114.731448) (xy 73.137141 114.581333) (xy 73.078569 114.439928) (xy 72.993536 114.312667) (xy 72.885309 114.20444) (xy 72.758048 114.119407) (xy 72.616643 114.060835) (xy 72.466528 114.030976) (xy 72.313472 114.030976) (xy 72.163357 114.060835) (xy 72.021952 114.119407) (xy 71.894691 114.20444) (xy 71.786464 114.312667) (xy 71.739469 114.383) (xy 63.260824 114.383) (xy 63.209288 114.331464) (xy 63.082027 114.246431) (xy 62.940622 114.187859) (xy 62.790507 114.158) (xy 62.637451 114.158) (xy 62.487336 114.187859) (xy 62.345931 114.246431) (xy 62.21867 114.331464) (xy 62.110443 114.439691) (xy 62.02541 114.566952) (xy 61.966838 114.708357) (xy 61.936979 114.858472) (xy 40.694062 114.858472) (xy 40.719988 114.80997) (xy 40.741545 114.738905) (xy 40.748824 114.665) (xy 40.748824 112.665) (xy 40.741545 112.591095) (xy 40.719988 112.52003) (xy 40.684981 112.454537) (xy 40.637869 112.397131) (xy 40.580463 112.350019) (xy 40.51497 112.315012) (xy 40.443905 112.293455) (xy 40.37 112.286176) (xy 38.37 112.286176) (xy 38.296095 112.293455) (xy 38.22503 112.315012) (xy 38.159537 112.350019) (xy 38.102131 112.397131) (xy 38.055019 112.454537) (xy 38.020012 112.52003) (xy 37.998455 112.591095) (xy 37.991176 112.665) (xy 25.802 112.665) (xy 25.802 104.640413) (xy 38.414192 104.640413) (xy 38.509956 104.904814) (xy 38.799571 105.045704) (xy 39.111108 105.127384) (xy 39.432595 105.146718) (xy 39.751675 105.102961) (xy 40.056088 104.997795) (xy 40.230044 104.904814) (xy 40.325808 104.640413) (xy 39.37 103.684605) (xy 38.414192 104.640413) (xy 25.802 104.640413) (xy 25.802 103.567595) (xy 37.728282 103.567595) (xy 37.772039 103.886675) (xy 37.877205 104.191088) (xy 37.970186 104.365044) (xy 38.234587 104.460808) (xy 39.190395 103.505) (xy 39.549605 103.505) (xy 40.505413 104.460808) (xy 40.769814 104.365044) (xy 40.910704 104.075429) (xy 40.992384 103.763892) (xy 41.011718 103.442405) (xy 40.967961 103.123325) (xy 40.862795 102.818912) (xy 40.769814 102.644956) (xy 40.505413 102.549192) (xy 39.549605 103.505) (xy 39.190395 103.505) (xy 38.234587 102.549192) (xy 37.970186 102.644956) (xy 37.829296 102.934571) (xy 37.747616 103.246108) (xy 37.728282 103.567595) (xy 25.802 103.567595) (xy 25.802 102.369587) (xy 38.414192 102.369587) (xy 39.37 103.325395) (xy 40.325808 102.369587) (xy 40.230044 102.105186) (xy 39.940429 101.964296) (xy 39.628892 101.882616) (xy 39.307405 101.863282) (xy 38.988325 101.907039) (xy 38.683912 102.012205) (xy 38.509956 102.105186) (xy 38.414192 102.369587) (xy 25.802 102.369587) (xy 25.802 98.289377) (xy 37.993 98.289377) (xy 37.993 98.560623) (xy 38.045917 98.826656) (xy 38.149718 99.077254) (xy 38.300414 99.302787) (xy 38.492213 99.494586) (xy 38.717746 99.645282) (xy 38.968344 99.749083) (xy 39.234377 99.802) (xy 39.505623 99.802) (xy 39.771656 99.749083) (xy 40.022254 99.645282) (xy 40.247787 99.494586) (xy 40.439586 99.302787) (xy 40.590282 99.077254) (xy 40.694083 98.826656) (xy 40.747 98.560623) (xy 40.747 98.289377) (xy 40.694083 98.023344) (xy 40.590282 97.772746) (xy 40.439586 97.547213) (xy 40.247787 97.355414) (xy 40.022254 97.204718) (xy 39.771656 97.100917) (xy 39.505623 97.048) (xy 39.234377 97.048) (xy 38.968344 97.100917) (xy 38.717746 97.204718) (xy 38.492213 97.355414) (xy 38.300414 97.547213) (xy 38.149718 97.772746) (xy 38.045917 98.023344) (xy 37.993 98.289377) (xy 25.802 98.289377) (xy 25.802 95.788692) (xy 62.06822 95.788692) (xy 62.06822 95.941748) (xy 62.098079 96.091863) (xy 62.156651 96.233268) (xy 62.241684 96.360529) (xy 62.349911 96.468756) (xy 62.477172 96.553789) (xy 62.618577 96.612361) (xy 62.768692 96.64222) (xy 62.921748 96.64222) (xy 63.071863 96.612361) (xy 63.213268 96.553789) (xy 63.340529 96.468756) (xy 63.392065 96.41722) (xy 71.978028 96.41722) (xy 72.021952 96.446569) (xy 72.163357 96.505141) (xy 72.313472 96.535) (xy 72.466528 96.535) (xy 72.616643 96.505141) (xy 72.758048 96.446569) (xy 72.885309 96.361536) (xy 72.993536 96.253309) (xy 73.078569 96.126048) (xy 73.137141 95.984643) (xy 73.167 95.834528) (xy 73.167 95.681472) (xy 73.137141 95.531357) (xy 73.078569 95.389952) (xy 72.993536 95.262691) (xy 72.885309 95.154464) (xy 72.758048 95.069431) (xy 72.616643 95.010859) (xy 72.466528 94.981) (xy 72.313472 94.981) (xy 72.163357 95.010859) (xy 72.021952 95.069431) (xy 71.894691 95.154464) (xy 71.786464 95.262691) (xy 71.752702 95.31322) (xy 63.392065 95.31322) (xy 63.340529 95.261684) (xy 63.213268 95.176651) (xy 63.071863 95.118079) (xy 62.921748 95.08822) (xy 62.768692 95.08822) (xy 62.618577 95.118079) (xy 62.477172 95.176651) (xy 62.349911 95.261684) (xy 62.241684 95.369911) (xy 62.156651 95.497172) (xy 62.098079 95.638577) (xy 62.06822 95.788692) (xy 25.802 95.788692) (xy 25.802 92.345) (xy 37.991176 92.345) (xy 37.991176 94.345) (xy 37.998455 94.418905) (xy 38.020012 94.48997) (xy 38.055019 94.555463) (xy 38.102131 94.612869) (xy 38.159537 94.659981) (xy 38.22503 94.694988) (xy 38.296095 94.716545) (xy 38.37 94.723824) (xy 40.37 94.723824) (xy 40.443905 94.716545) (xy 40.51497 94.694988) (xy 40.580463 94.659981) (xy 40.637869 94.612869) (xy 40.684981 94.555463) (xy 40.719988 94.48997) (xy 40.741545 94.418905) (xy 40.748824 94.345) (xy 40.748824 94.157472) (xy 66.025 94.157472) (xy 66.025 94.310528) (xy 66.054859 94.460643) (xy 66.113431 94.602048) (xy 66.198464 94.729309) (xy 66.306691 94.837536) (xy 66.433952 94.922569) (xy 66.575357 94.981141) (xy 66.725472 95.011) (xy 66.878528 95.011) (xy 67.028643 94.981141) (xy 67.170048 94.922569) (xy 67.297309 94.837536) (xy 67.405536 94.729309) (xy 67.431133 94.691) (xy 72.650165 94.691) (xy 72.669701 94.710536) (xy 72.796962 94.795569) (xy 72.938367 94.854141) (xy 73.088482 94.884) (xy 73.241538 94.884) (xy 73.391653 94.854141) (xy 73.533058 94.795569) (xy 73.660319 94.710536) (xy 73.768546 94.602309) (xy 73.853579 94.475048) (xy 73.912151 94.333643) (xy 73.94201 94.183528) (xy 73.94201 94.030472) (xy 73.912151 93.880357) (xy 73.853579 93.738952) (xy 73.768546 93.611691) (xy 73.660319 93.503464) (xy 73.533058 93.418431) (xy 73.391653 93.359859) (xy 73.241538 93.33) (xy 73.088482 93.33) (xy 72.938367 93.359859) (xy 72.796962 93.418431) (xy 72.669701 93.503464) (xy 72.561474 93.611691) (xy 72.476441 93.738952) (xy 72.460681 93.777) (xy 67.431133 93.777) (xy 67.405536 93.738691) (xy 67.297309 93.630464) (xy 67.170048 93.545431) (xy 67.028643 93.486859) (xy 66.878528 93.457) (xy 66.725472 93.457) (xy 66.575357 93.486859) (xy 66.433952 93.545431) (xy 66.306691 93.630464) (xy 66.198464 93.738691) (xy 66.113431 93.865952) (xy 66.054859 94.007357) (xy 66.025 94.157472) (xy 40.748824 94.157472) (xy 40.748824 92.345) (xy 40.741545 92.271095) (xy 40.719988 92.20003) (xy 40.684981 92.134537) (xy 40.637869 92.077131) (xy 40.580463 92.030019) (xy 40.51497 91.995012) (xy 40.443905 91.973455) (xy 40.37 91.966176) (xy 38.37 91.966176) (xy 38.296095 91.973455) (xy 38.22503 91.995012) (xy 38.159537 92.030019) (xy 38.102131 92.077131) (xy 38.055019 92.134537) (xy 38.020012 92.20003) (xy 37.998455 92.271095) (xy 37.991176 92.345) (xy 25.802 92.345) (xy 25.802 91.673307) (xy 62.29699 91.673307) (xy 62.29699 91.826363) (xy 62.326849 91.976478) (xy 62.385421 92.117883) (xy 62.470454 92.245144) (xy 62.578681 92.353371) (xy 62.705942 92.438404) (xy 62.847347 92.496976) (xy 62.997462 92.526835) (xy 63.150518 92.526835) (xy 63.300633 92.496976) (xy 63.442038 92.438404) (xy 63.569299 92.353371) (xy 63.64467 92.278) (xy 69.220867 92.278) (xy 69.246464 92.316309) (xy 69.354691 92.424536) (xy 69.481952 92.509569) (xy 69.623357 92.568141) (xy 69.773472 92.598) (xy 69.926528 92.598) (xy 70.076643 92.568141) (xy 70.218048 92.509569) (xy 70.345309 92.424536) (xy 70.453536 92.316309) (xy 70.479133 92.278) (xy 72.535877 92.278) (xy 72.561474 92.316309) (xy 72.669701 92.424536) (xy 72.796962 92.509569) (xy 72.938367 92.568141) (xy 73.088482 92.598) (xy 73.241538 92.598) (xy 73.391653 92.568141) (xy 73.533058 92.509569) (xy 73.660319 92.424536) (xy 73.768546 92.316309) (xy 73.853579 92.189048) (xy 73.900819 92.075) (xy 76.835 92.075) (xy 76.835 116.205) (xy 76.847201 116.328882) (xy 76.883336 116.448004) (xy 76.942017 116.557787) (xy 77.020987 116.654013) (xy 77.117213 116.732983) (xy 77.226996 116.791664) (xy 77.346118 116.827799) (xy 77.47 116.84) (xy 116.332 116.84) (xy 116.455882 116.827799) (xy 116.575004 116.791664) (xy 116.684787 116.732983) (xy 116.781013 116.654013) (xy 116.859983 116.557787) (xy 116.918664 116.448004) (xy 116.954799 116.328882) (xy 116.967 116.205) (xy 116.967 92.075) (xy 116.954799 91.951118) (xy 116.918664 91.831996) (xy 116.859983 91.722213) (xy 116.781013 91.625987) (xy 116.684787 91.547017) (xy 116.575004 91.488336) (xy 116.455882 91.452201) (xy 116.332 91.44) (xy 77.47 91.44) (xy 77.346118 91.452201) (xy 77.226996 91.488336) (xy 77.117213 91.547017) (xy 77.020987 91.625987) (xy 76.942017 91.722213) (xy 76.883336 91.831996) (xy 76.847201 91.951118) (xy 76.835 92.075) (xy 73.900819 92.075) (xy 73.912151 92.047643) (xy 73.94201 91.897528) (xy 73.94201 91.744472) (xy 73.912151 91.594357) (xy 73.853579 91.452952) (xy 73.768546 91.325691) (xy 73.660319 91.217464) (xy 73.533058 91.132431) (xy 73.391653 91.073859) (xy 73.241538 91.044) (xy 73.088482 91.044) (xy 72.938367 91.073859) (xy 72.796962 91.132431) (xy 72.669701 91.217464) (xy 72.561474 91.325691) (xy 72.535877 91.364) (xy 70.479133 91.364) (xy 70.453536 91.325691) (xy 70.345309 91.217464) (xy 70.218048 91.132431) (xy 70.076643 91.073859) (xy 69.926528 91.044) (xy 69.773472 91.044) (xy 69.623357 91.073859) (xy 69.481952 91.132431) (xy 69.354691 91.217464) (xy 69.246464 91.325691) (xy 69.220867 91.364) (xy 63.750674 91.364) (xy 63.677526 91.254526) (xy 63.569299 91.146299) (xy 63.442038 91.061266) (xy 63.300633 91.002694) (xy 63.150518 90.972835) (xy 62.997462 90.972835) (xy 62.847347 91.002694) (xy 62.705942 91.061266) (xy 62.578681 91.146299) (xy 62.470454 91.254526) (xy 62.385421 91.381787) (xy 62.326849 91.523192) (xy 62.29699 91.673307) (xy 25.802 91.673307) (xy 25.802 89.839472) (xy 62.29699 89.839472) (xy 62.29699 89.992528) (xy 62.326849 90.142643) (xy 62.385421 90.284048) (xy 62.470454 90.411309) (xy 62.578681 90.519536) (xy 62.705942 90.604569) (xy 62.847347 90.663141) (xy 62.997462 90.693) (xy 63.150518 90.693) (xy 63.300633 90.663141) (xy 63.442038 90.604569) (xy 63.569299 90.519536) (xy 63.588835 90.5) (xy 68.458867 90.5) (xy 68.484464 90.538309) (xy 68.592691 90.646536) (xy 68.719952 90.731569) (xy 68.861357 90.790141) (xy 69.011472 90.82) (xy 69.164528 90.82) (xy 69.314643 90.790141) (xy 69.456048 90.731569) (xy 69.583309 90.646536) (xy 69.691536 90.538309) (xy 69.717133 90.5) (xy 72.535877 90.5) (xy 72.561474 90.538309) (xy 72.669701 90.646536) (xy 72.796962 90.731569) (xy 72.938367 90.790141) (xy 73.088482 90.82) (xy 73.241538 90.82) (xy 73.391653 90.790141) (xy 73.533058 90.731569) (xy 73.660319 90.646536) (xy 73.768546 90.538309) (xy 73.853579 90.411048) (xy 73.912151 90.269643) (xy 73.94201 90.119528) (xy 73.94201 89.966472) (xy 73.912151 89.816357) (xy 73.853579 89.674952) (xy 73.768546 89.547691) (xy 73.660319 89.439464) (xy 73.533058 89.354431) (xy 73.391653 89.295859) (xy 73.241538 89.266) (xy 73.088482 89.266) (xy 72.938367 89.295859) (xy 72.796962 89.354431) (xy 72.669701 89.439464) (xy 72.561474 89.547691) (xy 72.535877 89.586) (xy 69.717133 89.586) (xy 69.691536 89.547691) (xy 69.583309 89.439464) (xy 69.456048 89.354431) (xy 69.314643 89.295859) (xy 69.164528 89.266) (xy 69.011472 89.266) (xy 68.861357 89.295859) (xy 68.719952 89.354431) (xy 68.592691 89.439464) (xy 68.484464 89.547691) (xy 68.458867 89.586) (xy 63.778319 89.586) (xy 63.762559 89.547952) (xy 63.677526 89.420691) (xy 63.569299 89.312464) (xy 63.442038 89.227431) (xy 63.300633 89.168859) (xy 63.150518 89.139) (xy 62.997462 89.139) (xy 62.847347 89.168859) (xy 62.705942 89.227431) (xy 62.578681 89.312464) (xy 62.470454 89.420691) (xy 62.385421 89.547952) (xy 62.326849 89.689357) (xy 62.29699 89.839472) (xy 25.802 89.839472) (xy 25.802 88.188472) (xy 67.549 88.188472) (xy 67.549 88.341528) (xy 67.578859 88.491643) (xy 67.637431 88.633048) (xy 67.722464 88.760309) (xy 67.830691 88.868536) (xy 67.957952 88.953569) (xy 68.099357 89.012141) (xy 68.249472 89.042) (xy 68.402528 89.042) (xy 68.552643 89.012141) (xy 68.694048 88.953569) (xy 68.821309 88.868536) (xy 68.929536 88.760309) (xy 68.955133 88.722) (xy 72.535602 88.722) (xy 72.561474 88.76072) (xy 72.669701 88.868947) (xy 72.796962 88.95398) (xy 72.938367 89.012552) (xy 73.088482 89.042411) (xy 73.241538 89.042411) (xy 73.391653 89.012552) (xy 73.533058 88.95398) (xy 73.660319 88.868947) (xy 73.768546 88.76072) (xy 73.853579 88.633459) (xy 73.912151 88.492054) (xy 73.94201 88.341939) (xy 73.94201 88.188883) (xy 73.912151 88.038768) (xy 73.853579 87.897363) (xy 73.768546 87.770102) (xy 73.660319 87.661875) (xy 73.533058 87.576842) (xy 73.391653 87.51827) (xy 73.241538 87.488411) (xy 73.088482 87.488411) (xy 72.938367 87.51827) (xy 72.796962 87.576842) (xy 72.669701 87.661875) (xy 72.561474 87.770102) (xy 72.536151 87.808) (xy 68.955133 87.808) (xy 68.929536 87.769691) (xy 68.821309 87.661464) (xy 68.694048 87.576431) (xy 68.552643 87.517859) (xy 68.402528 87.488) (xy 68.249472 87.488) (xy 68.099357 87.517859) (xy 67.957952 87.576431) (xy 67.830691 87.661464) (xy 67.722464 87.769691) (xy 67.637431 87.896952) (xy 67.578859 88.038357) (xy 67.549 88.188472) (xy 25.802 88.188472) (xy 25.802 86.410472) (xy 67.549 86.410472) (xy 67.549 86.563528) (xy 67.578859 86.713643) (xy 67.637431 86.855048) (xy 67.722464 86.982309) (xy 67.830691 87.090536) (xy 67.957952 87.175569) (xy 68.099357 87.234141) (xy 68.249472 87.264) (xy 68.402528 87.264) (xy 68.552643 87.234141) (xy 68.694048 87.175569) (xy 68.821309 87.090536) (xy 68.929536 86.982309) (xy 68.955133 86.944) (xy 72.535877 86.944) (xy 72.561474 86.982309) (xy 72.669701 87.090536) (xy 72.796962 87.175569) (xy 72.938367 87.234141) (xy 73.088482 87.264) (xy 73.241538 87.264) (xy 73.391653 87.234141) (xy 73.533058 87.175569) (xy 73.660319 87.090536) (xy 73.768546 86.982309) (xy 73.853579 86.855048) (xy 73.912151 86.713643) (xy 73.94201 86.563528) (xy 73.94201 86.410472) (xy 73.916059 86.28) (xy 101.596176 86.28) (xy 101.596176 88.98) (xy 101.603455 89.053905) (xy 101.625012 89.12497) (xy 101.660019 89.190463) (xy 101.707131 89.247869) (xy 101.764537 89.294981) (xy 101.83003 89.329988) (xy 101.901095 89.351545) (xy 101.975 89.358824) (xy 104.675 89.358824) (xy 104.748905 89.351545) (xy 104.81997 89.329988) (xy 104.885463 89.294981) (xy 104.942869 89.247869) (xy 104.989981 89.190463) (xy 105.024988 89.12497) (xy 105.046545 89.053905) (xy 105.053824 88.98) (xy 105.053824 86.28) (xy 105.256176 86.28) (xy 105.256176 88.98) (xy 105.263455 89.053905) (xy 105.285012 89.12497) (xy 105.320019 89.190463) (xy 105.367131 89.247869) (xy 105.424537 89.294981) (xy 105.49003 89.329988) (xy 105.561095 89.351545) (xy 105.635 89.358824) (xy 108.335 89.358824) (xy 108.408905 89.351545) (xy 108.47997 89.329988) (xy 108.545463 89.294981) (xy 108.602869 89.247869) (xy 108.649981 89.190463) (xy 108.684988 89.12497) (xy 108.706545 89.053905) (xy 108.713824 88.98) (xy 108.713824 87.459905) (xy 109.728 87.459905) (xy 109.728 87.800095) (xy 109.794368 88.133747) (xy 109.924553 88.448041) (xy 110.113552 88.730898) (xy 110.354102 88.971448) (xy 110.636959 89.160447) (xy 110.951253 89.290632) (xy 111.284905 89.357) (xy 111.625095 89.357) (xy 111.958747 89.290632) (xy 112.273041 89.160447) (xy 112.555898 88.971448) (xy 112.796448 88.730898) (xy 112.985447 88.448041) (xy 113.115632 88.133747) (xy 113.182 87.800095) (xy 113.182 87.459905) (xy 113.388 87.459905) (xy 113.388 87.800095) (xy 113.454368 88.133747) (xy 113.584553 88.448041) (xy 113.773552 88.730898) (xy 114.014102 88.971448) (xy 114.296959 89.160447) (xy 114.611253 89.290632) (xy 114.944905 89.357) (xy 115.285095 89.357) (xy 115.618747 89.290632) (xy 115.933041 89.160447) (xy 116.215898 88.971448) (xy 116.456448 88.730898) (xy 116.645447 88.448041) (xy 116.775632 88.133747) (xy 116.842 87.800095) (xy 116.842 87.459905) (xy 116.775632 87.126253) (xy 116.645447 86.811959) (xy 116.456448 86.529102) (xy 116.215898 86.288552) (xy 115.933041 86.099553) (xy 115.618747 85.969368) (xy 115.285095 85.903) (xy 114.944905 85.903) (xy 114.611253 85.969368) (xy 114.296959 86.099553) (xy 114.014102 86.288552) (xy 113.773552 86.529102) (xy 113.584553 86.811959) (xy 113.454368 87.126253) (xy 113.388 87.459905) (xy 113.182 87.459905) (xy 113.115632 87.126253) (xy 112.985447 86.811959) (xy 112.796448 86.529102) (xy 112.555898 86.288552) (xy 112.273041 86.099553) (xy 111.958747 85.969368) (xy 111.625095 85.903) (xy 111.284905 85.903) (xy 110.951253 85.969368) (xy 110.636959 86.099553) (xy 110.354102 86.288552) (xy 110.113552 86.529102) (xy 109.924553 86.811959) (xy 109.794368 87.126253) (xy 109.728 87.459905) (xy 108.713824 87.459905) (xy 108.713824 86.28) (xy 108.706545 86.206095) (xy 108.684988 86.13503) (xy 108.649981 86.069537) (xy 108.602869 86.012131) (xy 108.545463 85.965019) (xy 108.47997 85.930012) (xy 108.408905 85.908455) (xy 108.335 85.901176) (xy 105.635 85.901176) (xy 105.561095 85.908455) (xy 105.49003 85.930012) (xy 105.424537 85.965019) (xy 105.367131 86.012131) (xy 105.320019 86.069537) (xy 105.285012 86.13503) (xy 105.263455 86.206095) (xy 105.256176 86.28) (xy 105.053824 86.28) (xy 105.046545 86.206095) (xy 105.024988 86.13503) (xy 104.989981 86.069537) (xy 104.942869 86.012131) (xy 104.885463 85.965019) (xy 104.81997 85.930012) (xy 104.748905 85.908455) (xy 104.675 85.901176) (xy 101.975 85.901176) (xy 101.901095 85.908455) (xy 101.83003 85.930012) (xy 101.764537 85.965019) (xy 101.707131 86.012131) (xy 101.660019 86.069537) (xy 101.625012 86.13503) (xy 101.603455 86.206095) (xy 101.596176 86.28) (xy 73.916059 86.28) (xy 73.912151 86.260357) (xy 73.853579 86.118952) (xy 73.768546 85.991691) (xy 73.660319 85.883464) (xy 73.533058 85.798431) (xy 73.391653 85.739859) (xy 73.241538 85.71) (xy 73.088482 85.71) (xy 72.938367 85.739859) (xy 72.796962 85.798431) (xy 72.669701 85.883464) (xy 72.561474 85.991691) (xy 72.535877 86.03) (xy 68.955133 86.03) (xy 68.929536 85.991691) (xy 68.821309 85.883464) (xy 68.694048 85.798431) (xy 68.552643 85.739859) (xy 68.402528 85.71) (xy 68.249472 85.71) (xy 68.099357 85.739859) (xy 67.957952 85.798431) (xy 67.830691 85.883464) (xy 67.722464 85.991691) (xy 67.637431 86.118952) (xy 67.578859 86.260357) (xy 67.549 86.410472) (xy 25.802 86.410472) (xy 25.802 84.505472) (xy 70.597 84.505472) (xy 70.597 84.658528) (xy 70.626859 84.808643) (xy 70.685431 84.950048) (xy 70.770464 85.077309) (xy 70.878691 85.185536) (xy 71.005952 85.270569) (xy 71.147357 85.329141) (xy 71.297472 85.359) (xy 71.450528 85.359) (xy 71.600643 85.329141) (xy 71.742048 85.270569) (xy 71.869309 85.185536) (xy 71.920849 85.133996) (xy 72.605155 85.133996) (xy 72.656691 85.185532) (xy 72.783952 85.270565) (xy 72.925357 85.329137) (xy 73.075472 85.358996) (xy 73.228528 85.358996) (xy 73.378643 85.329137) (xy 73.520048 85.270565) (xy 73.647309 85.185532) (xy 73.755536 85.077305) (xy 73.840569 84.950044) (xy 73.899141 84.808639) (xy 73.929 84.658524) (xy 73.929 84.505468) (xy 73.899141 84.355353) (xy 73.840569 84.213948) (xy 73.755536 84.086687) (xy 73.647309 83.97846) (xy 73.520048 83.893427) (xy 73.378643 83.834855) (xy 73.228528 83.804996) (xy 73.075472 83.804996) (xy 72.925357 83.834855) (xy 72.783952 83.893427) (xy 72.656691 83.97846) (xy 72.605155 84.029996) (xy 71.920841 84.029996) (xy 71.869309 83.978464) (xy 71.742048 83.893431) (xy 71.600643 83.834859) (xy 71.450528 83.805) (xy 71.297472 83.805) (xy 71.147357 83.834859) (xy 71.005952 83.893431) (xy 70.878691 83.978464) (xy 70.770464 84.086691) (xy 70.685431 84.213952) (xy 70.626859 84.355357) (xy 70.597 84.505472) (xy 25.802 84.505472) (xy 25.802 71.634151) (xy 47.668 71.634151) (xy 47.668 71.875849) (xy 47.715153 72.112903) (xy 47.807647 72.336202) (xy 47.941927 72.537167) (xy 48.112833 72.708073) (xy 48.313798 72.842353) (xy 48.537097 72.934847) (xy 48.774151 72.982) (xy 49.015849 72.982) (xy 49.252903 72.934847) (xy 49.476202 72.842353) (xy 49.677167 72.708073) (xy 49.848073 72.537167) (xy 49.982353 72.336202) (xy 50.074847 72.112903) (xy 50.122 71.875849) (xy 50.122 71.634151) (xy 50.074847 71.397097) (xy 49.982353 71.173798) (xy 49.848073 70.972833) (xy 49.677167 70.801927) (xy 49.476202 70.667647) (xy 49.252903 70.575153) (xy 49.015849 70.528) (xy 48.774151 70.528) (xy 48.537097 70.575153) (xy 48.313798 70.667647) (xy 48.112833 70.801927) (xy 47.941927 70.972833) (xy 47.807647 71.173798) (xy 47.715153 71.397097) (xy 47.668 71.634151) (xy 25.802 71.634151) (xy 25.802 67.809377) (xy 37.993 67.809377) (xy 37.993 68.080623) (xy 38.045917 68.346656) (xy 38.149718 68.597254) (xy 38.300414 68.822787) (xy 38.492213 69.014586) (xy 38.717746 69.165282) (xy 38.968344 69.269083) (xy 39.234377 69.322) (xy 39.505623 69.322) (xy 39.771656 69.269083) (xy 40.022254 69.165282) (xy 40.128709 69.094151) (xy 47.668 69.094151) (xy 47.668 69.335849) (xy 47.715153 69.572903) (xy 47.807647 69.796202) (xy 47.941927 69.997167) (xy 48.112833 70.168073) (xy 48.313798 70.302353) (xy 48.537097 70.394847) (xy 48.774151 70.442) (xy 49.015849 70.442) (xy 49.252903 70.394847) (xy 49.476202 70.302353) (xy 49.677167 70.168073) (xy 49.848073 69.997167) (xy 49.982353 69.796202) (xy 50.074847 69.572903) (xy 50.122 69.335849) (xy 50.122 69.094151) (xy 50.074847 68.857097) (xy 49.982353 68.633798) (xy 49.848073 68.432833) (xy 49.677167 68.261927) (xy 49.476202 68.127647) (xy 49.252903 68.035153) (xy 49.015849 67.988) (xy 48.774151 67.988) (xy 48.537097 68.035153) (xy 48.313798 68.127647) (xy 48.112833 68.261927) (xy 47.941927 68.432833) (xy 47.807647 68.633798) (xy 47.715153 68.857097) (xy 47.668 69.094151) (xy 40.128709 69.094151) (xy 40.247787 69.014586) (xy 40.439586 68.822787) (xy 40.590282 68.597254) (xy 40.694083 68.346656) (xy 40.747 68.080623) (xy 40.747 67.809377) (xy 40.694083 67.543344) (xy 40.590282 67.292746) (xy 40.439586 67.067213) (xy 40.247787 66.875414) (xy 40.022254 66.724718) (xy 39.771656 66.620917) (xy 39.505623 66.568) (xy 39.234377 66.568) (xy 38.968344 66.620917) (xy 38.717746 66.724718) (xy 38.492213 66.875414) (xy 38.300414 67.067213) (xy 38.149718 67.292746) (xy 38.045917 67.543344) (xy 37.993 67.809377) (xy 25.802 67.809377) (xy 25.802 66.554151) (xy 47.668 66.554151) (xy 47.668 66.795849) (xy 47.715153 67.032903) (xy 47.807647 67.256202) (xy 47.941927 67.457167) (xy 48.112833 67.628073) (xy 48.313798 67.762353) (xy 48.537097 67.854847) (xy 48.774151 67.902) (xy 49.015849 67.902) (xy 49.252903 67.854847) (xy 49.476202 67.762353) (xy 49.677167 67.628073) (xy 49.848073 67.457167) (xy 49.982353 67.256202) (xy 50.074847 67.032903) (xy 50.122 66.795849) (xy 50.122 66.554151) (xy 50.074847 66.317097) (xy 49.982353 66.093798) (xy 49.848073 65.892833) (xy 49.677167 65.721927) (xy 49.476202 65.587647) (xy 49.252903 65.495153) (xy 49.015849 65.448) (xy 48.774151 65.448) (xy 48.537097 65.495153) (xy 48.313798 65.587647) (xy 48.112833 65.721927) (xy 47.941927 65.892833) (xy 47.807647 66.093798) (xy 47.715153 66.317097) (xy 47.668 66.554151) (xy 25.802 66.554151) (xy 25.802 61.865) (xy 37.991176 61.865) (xy 37.991176 63.865) (xy 37.998455 63.938905) (xy 38.020012 64.00997) (xy 38.055019 64.075463) (xy 38.102131 64.132869) (xy 38.159537 64.179981) (xy 38.22503 64.214988) (xy 38.296095 64.236545) (xy 38.37 64.243824) (xy 40.37 64.243824) (xy 40.443905 64.236545) (xy 40.51497 64.214988) (xy 40.580463 64.179981) (xy 40.637869 64.132869) (xy 40.684981 64.075463) (xy 40.717753 64.014151) (xy 47.668 64.014151) (xy 47.668 64.255849) (xy 47.715153 64.492903) (xy 47.807647 64.716202) (xy 47.941927 64.917167) (xy 48.112833 65.088073) (xy 48.313798 65.222353) (xy 48.537097 65.314847) (xy 48.774151 65.362) (xy 49.015849 65.362) (xy 49.252903 65.314847) (xy 49.476202 65.222353) (xy 49.677167 65.088073) (xy 49.848073 64.917167) (xy 49.982353 64.716202) (xy 50.074847 64.492903) (xy 50.122 64.255849) (xy 50.122 64.014151) (xy 50.074847 63.777097) (xy 49.982353 63.553798) (xy 49.848073 63.352833) (xy 49.677167 63.181927) (xy 49.476202 63.047647) (xy 49.252903 62.955153) (xy 49.015849 62.908) (xy 48.774151 62.908) (xy 48.537097 62.955153) (xy 48.313798 63.047647) (xy 48.112833 63.181927) (xy 47.941927 63.352833) (xy 47.807647 63.553798) (xy 47.715153 63.777097) (xy 47.668 64.014151) (xy 40.717753 64.014151) (xy 40.719988 64.00997) (xy 40.741545 63.938905) (xy 40.748824 63.865) (xy 40.748824 61.865) (xy 40.741545 61.791095) (xy 40.719988 61.72003) (xy 40.684981 61.654537) (xy 40.637869 61.597131) (xy 40.580463 61.550019) (xy 40.51497 61.515012) (xy 40.443905 61.493455) (xy 40.37 61.486176) (xy 38.37 61.486176) (xy 38.296095 61.493455) (xy 38.22503 61.515012) (xy 38.159537 61.550019) (xy 38.102131 61.597131) (xy 38.055019 61.654537) (xy 38.020012 61.72003) (xy 37.998455 61.791095) (xy 37.991176 61.865) (xy 25.802 61.865) (xy 25.802 61.474151) (xy 47.668 61.474151) (xy 47.668 61.715849) (xy 47.715153 61.952903) (xy 47.807647 62.176202) (xy 47.941927 62.377167) (xy 48.112833 62.548073) (xy 48.313798 62.682353) (xy 48.537097 62.774847) (xy 48.774151 62.822) (xy 49.015849 62.822) (xy 49.252903 62.774847) (xy 49.476202 62.682353) (xy 49.677167 62.548073) (xy 49.848073 62.377167) (xy 49.982353 62.176202) (xy 50.074847 61.952903) (xy 50.122 61.715849) (xy 50.122 61.474151) (xy 50.074847 61.237097) (xy 49.982353 61.013798) (xy 49.848073 60.812833) (xy 49.677167 60.641927) (xy 49.476202 60.507647) (xy 49.252903 60.415153) (xy 49.015849 60.368) (xy 48.774151 60.368) (xy 48.537097 60.415153) (xy 48.313798 60.507647) (xy 48.112833 60.641927) (xy 47.941927 60.812833) (xy 47.807647 61.013798) (xy 47.715153 61.237097) (xy 47.668 61.474151) (xy 25.802 61.474151) (xy 25.802 58.205) (xy 47.666176 58.205) (xy 47.666176 59.905) (xy 47.673455 59.978905) (xy 47.695012 60.04997) (xy 47.730019 60.115463) (xy 47.777131 60.172869) (xy 47.834537 60.219981) (xy 47.90003 60.254988) (xy 47.971095 60.276545) (xy 48.045 60.283824) (xy 49.745 60.283824) (xy 49.818905 60.276545) (xy 49.88997 60.254988) (xy 49.955463 60.219981) (xy 50.012869 60.172869) (xy 50.059981 60.115463) (xy 50.094988 60.04997) (xy 50.116545 59.978905) (xy 50.123824 59.905) (xy 50.123824 58.205) (xy 50.206176 58.205) (xy 50.206176 59.905) (xy 50.213455 59.978905) (xy 50.235012 60.04997) (xy 50.270019 60.115463) (xy 50.317131 60.172869) (xy 50.374537 60.219981) (xy 50.44003 60.254988) (xy 50.511095 60.276545) (xy 50.585 60.283824) (xy 50.808 60.283824) (xy 50.808 60.538248) (xy 50.652833 60.641927) (xy 50.481927 60.812833) (xy 50.347647 61.013798) (xy 50.255153 61.237097) (xy 50.208 61.474151) (xy 50.208 61.715849) (xy 50.255153 61.952903) (xy 50.347647 62.176202) (xy 50.481927 62.377167) (xy 50.652833 62.548073) (xy 50.808 62.651752) (xy 50.808 63.078248) (xy 50.652833 63.181927) (xy 50.481927 63.352833) (xy 50.347647 63.553798) (xy 50.255153 63.777097) (xy 50.208 64.014151) (xy 50.208 64.255849) (xy 50.255153 64.492903) (xy 50.347647 64.716202) (xy 50.481927 64.917167) (xy 50.652833 65.088073) (xy 50.808 65.191752) (xy 50.808001 65.618248) (xy 50.652833 65.721927) (xy 50.481927 65.892833) (xy 50.347647 66.093798) (xy 50.255153 66.317097) (xy 50.208 66.554151) (xy 50.208 66.795849) (xy 50.255153 67.032903) (xy 50.347647 67.256202) (xy 50.481927 67.457167) (xy 50.652833 67.628073) (xy 50.808001 67.731752) (xy 50.808001 68.158248) (xy 50.652833 68.261927) (xy 50.481927 68.432833) (xy 50.347647 68.633798) (xy 50.255153 68.857097) (xy 50.208 69.094151) (xy 50.208 69.335849) (xy 50.255153 69.572903) (xy 50.347647 69.796202) (xy 50.481927 69.997167) (xy 50.652833 70.168073) (xy 50.808001 70.271752) (xy 50.808001 70.698248) (xy 50.652833 70.801927) (xy 50.481927 70.972833) (xy 50.347647 71.173798) (xy 50.255153 71.397097) (xy 50.208 71.634151) (xy 50.208 71.875849) (xy 50.255153 72.112903) (xy 50.347647 72.336202) (xy 50.481927 72.537167) (xy 50.652833 72.708073) (xy 50.853798 72.842353) (xy 51.077097 72.934847) (xy 51.314151 72.982) (xy 51.555849 72.982) (xy 51.792903 72.934847) (xy 52.016202 72.842353) (xy 52.217167 72.708073) (xy 52.388073 72.537167) (xy 52.522353 72.336202) (xy 52.614847 72.112903) (xy 52.662 71.875849) (xy 52.662 71.634151) (xy 52.614847 71.397097) (xy 52.522353 71.173798) (xy 52.388073 70.972833) (xy 52.217167 70.801927) (xy 52.062 70.698248) (xy 52.062 70.271752) (xy 52.217167 70.168073) (xy 52.388073 69.997167) (xy 52.522353 69.796202) (xy 52.614847 69.572903) (xy 52.662 69.335849) (xy 52.662 69.138472) (xy 64.501 69.138472) (xy 64.501 69.291528) (xy 64.530859 69.441643) (xy 64.589431 69.583048) (xy 64.674464 69.710309) (xy 64.782691 69.818536) (xy 64.909952 69.903569) (xy 65.051357 69.962141) (xy 65.201472 69.992) (xy 65.354528 69.992) (xy 65.504643 69.962141) (xy 65.646048 69.903569) (xy 65.773309 69.818536) (xy 65.881536 69.710309) (xy 65.907133 69.672) (xy 66.85968 69.672) (xy 66.875431 69.710026) (xy 66.960464 69.837287) (xy 67.068691 69.945514) (xy 67.195952 70.030547) (xy 67.337357 70.089119) (xy 67.487472 70.118978) (xy 67.640528 70.118978) (xy 67.790643 70.089119) (xy 67.932048 70.030547) (xy 68.059309 69.945514) (xy 68.167536 69.837287) (xy 68.252569 69.710026) (xy 68.311141 69.568621) (xy 68.341 69.418506) (xy 68.341 69.26545) (xy 68.311141 69.115335) (xy 68.252569 68.97393) (xy 68.167536 68.846669) (xy 68.059309 68.738442) (xy 67.932048 68.653409) (xy 67.790643 68.594837) (xy 67.640528 68.564978) (xy 67.487472 68.564978) (xy 67.337357 68.594837) (xy 67.195952 68.653409) (xy 67.068691 68.738442) (xy 67.049133 68.758) (xy 65.907133 68.758) (xy 65.881536 68.719691) (xy 65.773309 68.611464) (xy 65.646048 68.526431) (xy 65.504643 68.467859) (xy 65.354528 68.438) (xy 65.201472 68.438) (xy 65.051357 68.467859) (xy 64.909952 68.526431) (xy 64.782691 68.611464) (xy 64.674464 68.719691) (xy 64.589431 68.846952) (xy 64.530859 68.988357) (xy 64.501 69.138472) (xy 52.662 69.138472) (xy 52.662 69.094151) (xy 52.614847 68.857097) (xy 52.522353 68.633798) (xy 52.388073 68.432833) (xy 52.217167 68.261927) (xy 52.062 68.158248) (xy 52.062 67.731752) (xy 52.217167 67.628073) (xy 52.388073 67.457167) (xy 52.522353 67.256202) (xy 52.614847 67.032903) (xy 52.662 66.795849) (xy 52.662 66.554151) (xy 52.614847 66.317097) (xy 52.522353 66.093798) (xy 52.388073 65.892833) (xy 52.217167 65.721927) (xy 52.062 65.618248) (xy 52.062 65.191752) (xy 52.217167 65.088073) (xy 52.388073 64.917167) (xy 52.522353 64.716202) (xy 52.614847 64.492903) (xy 52.662 64.255849) (xy 52.662 64.014151) (xy 52.614847 63.777097) (xy 52.522353 63.553798) (xy 52.388073 63.352833) (xy 52.217167 63.181927) (xy 52.062 63.078248) (xy 52.062 62.651752) (xy 52.217167 62.548073) (xy 52.388073 62.377167) (xy 52.522353 62.176202) (xy 52.614847 61.952903) (xy 52.625475 61.899472) (xy 66.787 61.899472) (xy 66.787 62.052528) (xy 66.816859 62.202643) (xy 66.875431 62.344048) (xy 66.960464 62.471309) (xy 67.068691 62.579536) (xy 67.195952 62.664569) (xy 67.337357 62.723141) (xy 67.487472 62.753) (xy 67.640528 62.753) (xy 67.790643 62.723141) (xy 67.932048 62.664569) (xy 68.059309 62.579536) (xy 68.167536 62.471309) (xy 68.193133 62.433) (xy 72.535877 62.433) (xy 72.561474 62.471309) (xy 72.669701 62.579536) (xy 72.796962 62.664569) (xy 72.938367 62.723141) (xy 73.088482 62.753) (xy 73.241538 62.753) (xy 73.391653 62.723141) (xy 73.533058 62.664569) (xy 73.660319 62.579536) (xy 73.768546 62.471309) (xy 73.853579 62.344048) (xy 73.912151 62.202643) (xy 73.94201 62.052528) (xy 73.94201 61.899472) (xy 73.912151 61.749357) (xy 73.853579 61.607952) (xy 73.768546 61.480691) (xy 73.660319 61.372464) (xy 73.533058 61.287431) (xy 73.391653 61.228859) (xy 73.241538 61.199) (xy 73.088482 61.199) (xy 72.938367 61.228859) (xy 72.796962 61.287431) (xy 72.669701 61.372464) (xy 72.561474 61.480691) (xy 72.535877 61.519) (xy 68.193133 61.519) (xy 68.167536 61.480691) (xy 68.059309 61.372464) (xy 67.932048 61.287431) (xy 67.790643 61.228859) (xy 67.640528 61.199) (xy 67.487472 61.199) (xy 67.337357 61.228859) (xy 67.195952 61.287431) (xy 67.068691 61.372464) (xy 66.960464 61.480691) (xy 66.875431 61.607952) (xy 66.816859 61.749357) (xy 66.787 61.899472) (xy 52.625475 61.899472) (xy 52.662 61.715849) (xy 52.662 61.474151) (xy 52.614847 61.237097) (xy 52.522353 61.013798) (xy 52.388073 60.812833) (xy 52.217167 60.641927) (xy 52.062 60.538248) (xy 52.062 60.283824) (xy 52.285 60.283824) (xy 52.358905 60.276545) (xy 52.42997 60.254988) (xy 52.495463 60.219981) (xy 52.552869 60.172869) (xy 52.599981 60.115463) (xy 52.634988 60.04997) (xy 52.651822 59.994474) (xy 69.073 59.994474) (xy 69.073 60.14753) (xy 69.102859 60.297645) (xy 69.161431 60.43905) (xy 69.246464 60.566311) (xy 69.354691 60.674538) (xy 69.481952 60.759571) (xy 69.623357 60.818143) (xy 69.773472 60.848002) (xy 69.926528 60.848002) (xy 70.076643 60.818143) (xy 70.218048 60.759571) (xy 70.345309 60.674538) (xy 70.453536 60.566311) (xy 70.479133 60.528002) (xy 71.594878 60.528002) (xy 71.620474 60.566309) (xy 71.728701 60.674536) (xy 71.855962 60.759569) (xy 71.997367 60.818141) (xy 72.147482 60.848) (xy 72.300538 60.848) (xy 72.450653 60.818141) (xy 72.592058 60.759569) (xy 72.719319 60.674536) (xy 72.827546 60.566309) (xy 72.912579 60.439048) (xy 72.971151 60.297643) (xy 73.00101 60.147528) (xy 73.00101 59.994472) (xy 72.971151 59.844357) (xy 72.912579 59.702952) (xy 72.903925 59.69) (xy 76.835 59.69) (xy 76.835 83.82) (xy 76.847201 83.943882) (xy 76.883336 84.063004) (xy 76.942017 84.172787) (xy 77.020987 84.269013) (xy 77.117213 84.347983) (xy 77.226996 84.406664) (xy 77.346118 84.442799) (xy 77.47 84.455) (xy 116.332 84.455) (xy 116.455882 84.442799) (xy 116.575004 84.406664) (xy 116.684787 84.347983) (xy 116.781013 84.269013) (xy 116.859983 84.172787) (xy 116.918664 84.063004) (xy 116.954799 83.943882) (xy 116.967 83.82) (xy 116.967 59.69) (xy 116.954799 59.566118) (xy 116.918664 59.446996) (xy 116.859983 59.337213) (xy 116.781013 59.240987) (xy 116.684787 59.162017) (xy 116.575004 59.103336) (xy 116.455882 59.067201) (xy 116.332 59.055) (xy 77.47 59.055) (xy 77.346118 59.067201) (xy 77.226996 59.103336) (xy 77.117213 59.162017) (xy 77.020987 59.240987) (xy 76.942017 59.337213) (xy 76.883336 59.446996) (xy 76.847201 59.566118) (xy 76.835 59.69) (xy 72.903925 59.69) (xy 72.827546 59.575691) (xy 72.719319 59.467464) (xy 72.592058 59.382431) (xy 72.450653 59.323859) (xy 72.300538 59.294) (xy 72.147482 59.294) (xy 71.997367 59.323859) (xy 71.855962 59.382431) (xy 71.728701 59.467464) (xy 71.620474 59.575691) (xy 71.594875 59.614002) (xy 70.479133 59.614002) (xy 70.453536 59.575693) (xy 70.345309 59.467466) (xy 70.218048 59.382433) (xy 70.076643 59.323861) (xy 69.926528 59.294002) (xy 69.773472 59.294002) (xy 69.623357 59.323861) (xy 69.481952 59.382433) (xy 69.354691 59.467466) (xy 69.246464 59.575693) (xy 69.161431 59.702954) (xy 69.102859 59.844359) (xy 69.073 59.994474) (xy 52.651822 59.994474) (xy 52.656545 59.978905) (xy 52.663824 59.905) (xy 52.663824 58.216472) (xy 68.311 58.216472) (xy 68.311 58.369528) (xy 68.340859 58.519643) (xy 68.399431 58.661048) (xy 68.484464 58.788309) (xy 68.592691 58.896536) (xy 68.719952 58.981569) (xy 68.861357 59.040141) (xy 69.011472 59.07) (xy 69.164528 59.07) (xy 69.314643 59.040141) (xy 69.456048 58.981569) (xy 69.583309 58.896536) (xy 69.691536 58.788309) (xy 69.717133 58.75) (xy 71.594874 58.75) (xy 71.620474 58.788313) (xy 71.728701 58.89654) (xy 71.855962 58.981573) (xy 71.997367 59.040145) (xy 72.147482 59.070004) (xy 72.300538 59.070004) (xy 72.450653 59.040145) (xy 72.592058 58.981573) (xy 72.719319 58.89654) (xy 72.827546 58.788313) (xy 72.912579 58.661052) (xy 72.971151 58.519647) (xy 73.00101 58.369532) (xy 73.00101 58.216476) (xy 72.971151 58.066361) (xy 72.912579 57.924956) (xy 72.827546 57.797695) (xy 72.719319 57.689468) (xy 72.592058 57.604435) (xy 72.450653 57.545863) (xy 72.300538 57.516004) (xy 72.147482 57.516004) (xy 71.997367 57.545863) (xy 71.855962 57.604435) (xy 71.728701 57.689468) (xy 71.620474 57.797695) (xy 71.594879 57.836) (xy 69.717133 57.836) (xy 69.691536 57.797691) (xy 69.583309 57.689464) (xy 69.456048 57.604431) (xy 69.314643 57.545859) (xy 69.164528 57.516) (xy 69.011472 57.516) (xy 68.861357 57.545859) (xy 68.719952 57.604431) (xy 68.592691 57.689464) (xy 68.484464 57.797691) (xy 68.399431 57.924952) (xy 68.340859 58.066357) (xy 68.311 58.216472) (xy 52.663824 58.216472) (xy 52.663824 58.205) (xy 52.656545 58.131095) (xy 52.634988 58.06003) (xy 52.599981 57.994537) (xy 52.552869 57.937131) (xy 52.495463 57.890019) (xy 52.42997 57.855012) (xy 52.358905 57.833455) (xy 52.285 57.826176) (xy 50.585 57.826176) (xy 50.511095 57.833455) (xy 50.44003 57.855012) (xy 50.374537 57.890019) (xy 50.317131 57.937131) (xy 50.270019 57.994537) (xy 50.235012 58.06003) (xy 50.213455 58.131095) (xy 50.206176 58.205) (xy 50.123824 58.205) (xy 50.116545 58.131095) (xy 50.094988 58.06003) (xy 50.059981 57.994537) (xy 50.012869 57.937131) (xy 49.955463 57.890019) (xy 49.88997 57.855012) (xy 49.818905 57.833455) (xy 49.745 57.826176) (xy 48.045 57.826176) (xy 47.971095 57.833455) (xy 47.90003 57.855012) (xy 47.834537 57.890019) (xy 47.777131 57.937131) (xy 47.730019 57.994537) (xy 47.695012 58.06003) (xy 47.673455 58.131095) (xy 47.666176 58.205) (xy 25.802 58.205) (xy 25.802 54.787472) (xy 65.263 54.787472) (xy 65.263 54.940528) (xy 65.292859 55.090643) (xy 65.351431 55.232048) (xy 65.436464 55.359309) (xy 65.544691 55.467536) (xy 65.583 55.493133) (xy 65.583001 56.012876) (xy 65.544691 56.038474) (xy 65.436464 56.146701) (xy 65.351431 56.273962) (xy 65.292859 56.415367) (xy 65.263 56.565482) (xy 65.263 56.718538) (xy 65.292859 56.868653) (xy 65.351431 57.010058) (xy 65.436464 57.137319) (xy 65.544691 57.245546) (xy 65.671952 57.330579) (xy 65.813357 57.389151) (xy 65.963472 57.41901) (xy 66.116528 57.41901) (xy 66.266643 57.389151) (xy 66.408048 57.330579) (xy 66.535309 57.245546) (xy 66.643536 57.137319) (xy 66.728569 57.010058) (xy 66.787141 56.868653) (xy 66.817 56.718538) (xy 66.817 56.565482) (xy 66.816999 56.565472) (xy 67.549 56.565472) (xy 67.549 56.718528) (xy 67.578859 56.868643) (xy 67.637431 57.010048) (xy 67.722464 57.137309) (xy 67.830691 57.245536) (xy 67.957952 57.330569) (xy 68.099357 57.389141) (xy 68.249472 57.419) (xy 68.402528 57.419) (xy 68.552643 57.389141) (xy 68.694048 57.330569) (xy 68.821309 57.245536) (xy 68.929536 57.137309) (xy 68.955133 57.099) (xy 71.506867 57.099) (xy 71.532464 57.137309) (xy 71.640691 57.245536) (xy 71.767952 57.330569) (xy 71.909357 57.389141) (xy 72.059472 57.419) (xy 72.212528 57.419) (xy 72.362643 57.389141) (xy 72.504048 57.330569) (xy 72.631309 57.245536) (xy 72.739536 57.137309) (xy 72.824569 57.010048) (xy 72.883141 56.868643) (xy 72.913 56.718528) (xy 72.913 56.565472) (xy 72.883141 56.415357) (xy 72.824569 56.273952) (xy 72.739536 56.146691) (xy 72.631309 56.038464) (xy 72.504048 55.953431) (xy 72.362643 55.894859) (xy 72.212528 55.865) (xy 72.059472 55.865) (xy 71.909357 55.894859) (xy 71.767952 55.953431) (xy 71.640691 56.038464) (xy 71.532464 56.146691) (xy 71.506867 56.185) (xy 68.955133 56.185) (xy 68.929536 56.146691) (xy 68.821309 56.038464) (xy 68.694048 55.953431) (xy 68.552643 55.894859) (xy 68.402528 55.865) (xy 68.249472 55.865) (xy 68.099357 55.894859) (xy 67.957952 55.953431) (xy 67.830691 56.038464) (xy 67.722464 56.146691) (xy 67.637431 56.273952) (xy 67.578859 56.415357) (xy 67.549 56.565472) (xy 66.816999 56.565472) (xy 66.787141 56.415367) (xy 66.728569 56.273962) (xy 66.643536 56.146701) (xy 66.535309 56.038474) (xy 66.497 56.012877) (xy 66.497 55.493133) (xy 66.535309 55.467536) (xy 66.643536 55.359309) (xy 66.728569 55.232048) (xy 66.787141 55.090643) (xy 66.817 54.940528) (xy 66.817 54.787472) (xy 66.787141 54.637357) (xy 66.728569 54.495952) (xy 66.643536 54.368691) (xy 66.535309 54.260464) (xy 66.408048 54.175431) (xy 66.266643 54.116859) (xy 66.116528 54.087) (xy 65.963472 54.087) (xy 65.813357 54.116859) (xy 65.671952 54.175431) (xy 65.544691 54.260464) (xy 65.436464 54.368691) (xy 65.351431 54.495952) (xy 65.292859 54.637357) (xy 65.263 54.787472) (xy 25.802 54.787472) (xy 25.802 53.840413) (xy 38.414192 53.840413) (xy 38.509956 54.104814) (xy 38.799571 54.245704) (xy 39.111108 54.327384) (xy 39.432595 54.346718) (xy 39.751675 54.302961) (xy 40.056088 54.197795) (xy 40.230044 54.104814) (xy 40.306037 53.895) (xy 101.596176 53.895) (xy 101.596176 56.595) (xy 101.603455 56.668905) (xy 101.625012 56.73997) (xy 101.660019 56.805463) (xy 101.707131 56.862869) (xy 101.764537 56.909981) (xy 101.83003 56.944988) (xy 101.901095 56.966545) (xy 101.975 56.973824) (xy 104.675 56.973824) (xy 104.748905 56.966545) (xy 104.81997 56.944988) (xy 104.885463 56.909981) (xy 104.942869 56.862869) (xy 104.989981 56.805463) (xy 105.024988 56.73997) (xy 105.046545 56.668905) (xy 105.053824 56.595) (xy 105.053824 53.895) (xy 105.256176 53.895) (xy 105.256176 56.595) (xy 105.263455 56.668905) (xy 105.285012 56.73997) (xy 105.320019 56.805463) (xy 105.367131 56.862869) (xy 105.424537 56.909981) (xy 105.49003 56.944988) (xy 105.561095 56.966545) (xy 105.635 56.973824) (xy 108.335 56.973824) (xy 108.408905 56.966545) (xy 108.47997 56.944988) (xy 108.545463 56.909981) (xy 108.602869 56.862869) (xy 108.649981 56.805463) (xy 108.684988 56.73997) (xy 108.706545 56.668905) (xy 108.713824 56.595) (xy 108.713824 55.074905) (xy 109.728 55.074905) (xy 109.728 55.415095) (xy 109.794368 55.748747) (xy 109.924553 56.063041) (xy 110.113552 56.345898) (xy 110.354102 56.586448) (xy 110.636959 56.775447) (xy 110.951253 56.905632) (xy 111.284905 56.972) (xy 111.625095 56.972) (xy 111.958747 56.905632) (xy 112.273041 56.775447) (xy 112.555898 56.586448) (xy 112.796448 56.345898) (xy 112.985447 56.063041) (xy 113.115632 55.748747) (xy 113.182 55.415095) (xy 113.182 55.074905) (xy 113.388 55.074905) (xy 113.388 55.415095) (xy 113.454368 55.748747) (xy 113.584553 56.063041) (xy 113.773552 56.345898) (xy 114.014102 56.586448) (xy 114.296959 56.775447) (xy 114.611253 56.905632) (xy 114.944905 56.972) (xy 115.285095 56.972) (xy 115.618747 56.905632) (xy 115.933041 56.775447) (xy 116.215898 56.586448) (xy 116.456448 56.345898) (xy 116.645447 56.063041) (xy 116.775632 55.748747) (xy 116.842 55.415095) (xy 116.842 55.074905) (xy 116.775632 54.741253) (xy 116.645447 54.426959) (xy 116.456448 54.144102) (xy 116.215898 53.903552) (xy 115.933041 53.714553) (xy 115.618747 53.584368) (xy 115.285095 53.518) (xy 114.944905 53.518) (xy 114.611253 53.584368) (xy 114.296959 53.714553) (xy 114.014102 53.903552) (xy 113.773552 54.144102) (xy 113.584553 54.426959) (xy 113.454368 54.741253) (xy 113.388 55.074905) (xy 113.182 55.074905) (xy 113.115632 54.741253) (xy 112.985447 54.426959) (xy 112.796448 54.144102) (xy 112.555898 53.903552) (xy 112.273041 53.714553) (xy 111.958747 53.584368) (xy 111.625095 53.518) (xy 111.284905 53.518) (xy 110.951253 53.584368) (xy 110.636959 53.714553) (xy 110.354102 53.903552) (xy 110.113552 54.144102) (xy 109.924553 54.426959) (xy 109.794368 54.741253) (xy 109.728 55.074905) (xy 108.713824 55.074905) (xy 108.713824 53.895) (xy 108.706545 53.821095) (xy 108.684988 53.75003) (xy 108.649981 53.684537) (xy 108.602869 53.627131) (xy 108.545463 53.580019) (xy 108.47997 53.545012) (xy 108.408905 53.523455) (xy 108.335 53.516176) (xy 105.635 53.516176) (xy 105.561095 53.523455) (xy 105.49003 53.545012) (xy 105.424537 53.580019) (xy 105.367131 53.627131) (xy 105.320019 53.684537) (xy 105.285012 53.75003) (xy 105.263455 53.821095) (xy 105.256176 53.895) (xy 105.053824 53.895) (xy 105.046545 53.821095) (xy 105.024988 53.75003) (xy 104.989981 53.684537) (xy 104.942869 53.627131) (xy 104.885463 53.580019) (xy 104.81997 53.545012) (xy 104.748905 53.523455) (xy 104.675 53.516176) (xy 101.975 53.516176) (xy 101.901095 53.523455) (xy 101.83003 53.545012) (xy 101.764537 53.580019) (xy 101.707131 53.627131) (xy 101.660019 53.684537) (xy 101.625012 53.75003) (xy 101.603455 53.821095) (xy 101.596176 53.895) (xy 40.306037 53.895) (xy 40.325808 53.840413) (xy 39.37 52.884605) (xy 38.414192 53.840413) (xy 25.802 53.840413) (xy 25.802 52.767595) (xy 37.728282 52.767595) (xy 37.772039 53.086675) (xy 37.877205 53.391088) (xy 37.970186 53.565044) (xy 38.234587 53.660808) (xy 39.190395 52.705) (xy 39.549605 52.705) (xy 40.505413 53.660808) (xy 40.769814 53.565044) (xy 40.910704 53.275429) (xy 40.992384 52.963892) (xy 41.011718 52.642405) (xy 40.967961 52.323325) (xy 40.862795 52.018912) (xy 40.769814 51.844956) (xy 40.505413 51.749192) (xy 39.549605 52.705) (xy 39.190395 52.705) (xy 38.234587 51.749192) (xy 37.970186 51.844956) (xy 37.829296 52.134571) (xy 37.747616 52.446108) (xy 37.728282 52.767595) (xy 25.802 52.767595) (xy 25.802 51.569587) (xy 38.414192 51.569587) (xy 39.37 52.525395) (xy 40.325808 51.569587) (xy 40.230044 51.305186) (xy 39.940429 51.164296) (xy 39.628892 51.082616) (xy 39.307405 51.063282) (xy 38.988325 51.107039) (xy 38.683912 51.212205) (xy 38.509956 51.305186) (xy 38.414192 51.569587) (xy 25.802 51.569587) (xy 25.802 50.959226) (xy 50.793 50.959226) (xy 50.793 51.210774) (xy 50.842074 51.457487) (xy 50.938337 51.689886) (xy 51.078089 51.89904) (xy 51.25596 52.076911) (xy 51.465114 52.216663) (xy 51.697513 52.312926) (xy 51.944226 52.362) (xy 52.195774 52.362) (xy 52.442487 52.312926) (xy 52.674886 52.216663) (xy 52.88404 52.076911) (xy 53.061911 51.89904) (xy 53.201663 51.689886) (xy 53.297926 51.457487) (xy 53.34 51.245966) (xy 53.382074 51.457487) (xy 53.478337 51.689886) (xy 53.618089 51.89904) (xy 53.79596 52.076911) (xy 54.005114 52.216663) (xy 54.237513 52.312926) (xy 54.484226 52.362) (xy 54.735774 52.362) (xy 54.982487 52.312926) (xy 55.214886 52.216663) (xy 55.316031 52.14908) (xy 62.615525 52.14908) (xy 62.699208 52.403261) (xy 62.971775 52.534158) (xy 63.264642 52.609365) (xy 63.566553 52.625991) (xy 63.865907 52.583397) (xy 64.151199 52.483222) (xy 64.300792 52.403261) (xy 64.384475 52.14908) (xy 65.155525 52.14908) (xy 65.239208 52.403261) (xy 65.511775 52.534158) (xy 65.804642 52.609365) (xy 66.106553 52.625991) (xy 66.405907 52.583397) (xy 66.691199 52.483222) (xy 66.840792 52.403261) (xy 66.924475 52.14908) (xy 66.04 51.264605) (xy 65.155525 52.14908) (xy 64.384475 52.14908) (xy 63.5 51.264605) (xy 62.615525 52.14908) (xy 55.316031 52.14908) (xy 55.42404 52.076911) (xy 55.601911 51.89904) (xy 55.741663 51.689886) (xy 55.837926 51.457487) (xy 55.887 51.210774) (xy 55.887 51.151553) (xy 61.959009 51.151553) (xy 62.001603 51.450907) (xy 62.101778 51.736199) (xy 62.181739 51.885792) (xy 62.43592 51.969475) (xy 63.320395 51.085) (xy 63.679605 51.085) (xy 64.56408 51.969475) (xy 64.77 51.901681) (xy 64.97592 51.969475) (xy 65.860395 51.085) (xy 66.219605 51.085) (xy 67.10408 51.969475) (xy 67.358261 51.885792) (xy 67.489158 51.613225) (xy 67.564365 51.320358) (xy 67.580991 51.018447) (xy 67.538397 50.719093) (xy 67.438222 50.433801) (xy 67.358261 50.284208) (xy 67.10408 50.200525) (xy 66.219605 51.085) (xy 65.860395 51.085) (xy 64.97592 50.200525) (xy 64.77 50.268319) (xy 64.56408 50.200525) (xy 63.679605 51.085) (xy 63.320395 51.085) (xy 62.43592 50.200525) (xy 62.181739 50.284208) (xy 62.050842 50.556775) (xy 61.975635 50.849642) (xy 61.959009 51.151553) (xy 55.887 51.151553) (xy 55.887 50.959226) (xy 55.837926 50.712513) (xy 55.741663 50.480114) (xy 55.601911 50.27096) (xy 55.42404 50.093089) (xy 55.316032 50.02092) (xy 62.615525 50.02092) (xy 63.5 50.905395) (xy 64.384475 50.02092) (xy 65.155525 50.02092) (xy 66.04 50.905395) (xy 66.924475 50.02092) (xy 66.840792 49.766739) (xy 66.568225 49.635842) (xy 66.275358 49.560635) (xy 65.973447 49.544009) (xy 65.674093 49.586603) (xy 65.388801 49.686778) (xy 65.239208 49.766739) (xy 65.155525 50.02092) (xy 64.384475 50.02092) (xy 64.300792 49.766739) (xy 64.028225 49.635842) (xy 63.735358 49.560635) (xy 63.433447 49.544009) (xy 63.134093 49.586603) (xy 62.848801 49.686778) (xy 62.699208 49.766739) (xy 62.615525 50.02092) (xy 55.316032 50.02092) (xy 55.214886 49.953337) (xy 54.982487 49.857074) (xy 54.735774 49.808) (xy 54.484226 49.808) (xy 54.237513 49.857074) (xy 54.005114 49.953337) (xy 53.79596 50.093089) (xy 53.618089 50.27096) (xy 53.478337 50.480114) (xy 53.382074 50.712513) (xy 53.34 50.924034) (xy 53.297926 50.712513) (xy 53.201663 50.480114) (xy 53.061911 50.27096) (xy 52.88404 50.093089) (xy 52.674886 49.953337) (xy 52.442487 49.857074) (xy 52.195774 49.808) (xy 51.944226 49.808) (xy 51.697513 49.857074) (xy 51.465114 49.953337) (xy 51.25596 50.093089) (xy 51.078089 50.27096) (xy 50.938337 50.480114) (xy 50.842074 50.712513) (xy 50.793 50.959226) (xy 25.802 50.959226) (xy 25.802 46.625) (xy 37.991176 46.625) (xy 37.991176 48.625) (xy 37.998455 48.698905) (xy 38.020012 48.76997) (xy 38.055019 48.835463) (xy 38.102131 48.892869) (xy 38.159537 48.939981) (xy 38.22503 48.974988) (xy 38.296095 48.996545) (xy 38.37 49.003824) (xy 40.37 49.003824) (xy 40.443905 48.996545) (xy 40.51497 48.974988) (xy 40.580463 48.939981) (xy 40.637869 48.892869) (xy 40.684981 48.835463) (xy 40.719988 48.76997) (xy 40.741545 48.698905) (xy 40.748824 48.625) (xy 40.748824 46.625) (xy 40.741545 46.551095) (xy 40.719988 46.48003) (xy 40.684981 46.414537) (xy 40.637869 46.357131) (xy 40.580463 46.310019) (xy 40.51497 46.275012) (xy 40.443905 46.253455) (xy 40.37 46.246176) (xy 38.37 46.246176) (xy 38.296095 46.253455) (xy 38.22503 46.275012) (xy 38.159537 46.310019) (xy 38.102131 46.357131) (xy 38.055019 46.414537) (xy 38.020012 46.48003) (xy 37.998455 46.551095) (xy 37.991176 46.625) (xy 25.802 46.625) (xy 25.802 43.680413) (xy 38.414192 43.680413) (xy 38.509956 43.944814) (xy 38.799571 44.085704) (xy 39.111108 44.167384) (xy 39.432595 44.186718) (xy 39.751675 44.142961) (xy 40.056088 44.037795) (xy 40.230044 43.944814) (xy 40.325808 43.680413) (xy 39.37 42.724605) (xy 38.414192 43.680413) (xy 25.802 43.680413) (xy 25.802 42.607595) (xy 37.728282 42.607595) (xy 37.772039 42.926675) (xy 37.877205 43.231088) (xy 37.970186 43.405044) (xy 38.234587 43.500808) (xy 39.190395 42.545) (xy 39.549605 42.545) (xy 40.505413 43.500808) (xy 40.769814 43.405044) (xy 40.910704 43.115429) (xy 40.992384 42.803892) (xy 41.011718 42.482405) (xy 40.967961 42.163325) (xy 40.862795 41.858912) (xy 40.769814 41.684956) (xy 40.505413 41.589192) (xy 39.549605 42.545) (xy 39.190395 42.545) (xy 38.234587 41.589192) (xy 37.970186 41.684956) (xy 37.829296 41.974571) (xy 37.747616 42.286108) (xy 37.728282 42.607595) (xy 25.802 42.607595) (xy 25.802 41.409587) (xy 38.414192 41.409587) (xy 39.37 42.365395) (xy 40.325808 41.409587) (xy 40.230044 41.145186) (xy 39.940429 41.004296) (xy 39.628892 40.922616) (xy 39.307405 40.903282) (xy 38.988325 40.947039) (xy 38.683912 41.052205) (xy 38.509956 41.145186) (xy 38.414192 41.409587) (xy 25.802 41.409587) (xy 25.802 36.465) (xy 37.991176 36.465) (xy 37.991176 38.465) (xy 37.998455 38.538905) (xy 38.020012 38.60997) (xy 38.055019 38.675463) (xy 38.102131 38.732869) (xy 38.159537 38.779981) (xy 38.22503 38.814988) (xy 38.296095 38.836545) (xy 38.37 38.843824) (xy 40.37 38.843824) (xy 40.443905 38.836545) (xy 40.51497 38.814988) (xy 40.580463 38.779981) (xy 40.637869 38.732869) (xy 40.684981 38.675463) (xy 40.719988 38.60997) (xy 40.741545 38.538905) (xy 40.748824 38.465) (xy 40.748824 36.465) (xy 40.741545 36.391095) (xy 40.719988 36.32003) (xy 40.684981 36.254537) (xy 40.637869 36.197131) (xy 40.580463 36.150019) (xy 40.51497 36.115012) (xy 40.443905 36.093455) (xy 40.37 36.086176) (xy 38.37 36.086176) (xy 38.296095 36.093455) (xy 38.22503 36.115012) (xy 38.159537 36.150019) (xy 38.102131 36.197131) (xy 38.055019 36.254537) (xy 38.020012 36.32003) (xy 37.998455 36.391095) (xy 37.991176 36.465) (xy 25.802 36.465) (xy 25.802 32.259226) (xy 50.793 32.259226) (xy 50.793 32.510774) (xy 50.842074 32.757487) (xy 50.938337 32.989886) (xy 51.078089 33.19904) (xy 51.25596 33.376911) (xy 51.465114 33.516663) (xy 51.697513 33.612926) (xy 51.944226 33.662) (xy 52.195774 33.662) (xy 52.442487 33.612926) (xy 52.674886 33.516663) (xy 52.88404 33.376911) (xy 53.061911 33.19904) (xy 53.201663 32.989886) (xy 53.297926 32.757487) (xy 53.34 32.545966) (xy 53.382074 32.757487) (xy 53.478337 32.989886) (xy 53.618089 33.19904) (xy 53.79596 33.376911) (xy 54.005114 33.516663) (xy 54.237513 33.612926) (xy 54.484226 33.662) (xy 54.735774 33.662) (xy 54.982487 33.612926) (xy 55.214886 33.516663) (xy 55.316031 33.44908) (xy 62.615525 33.44908) (xy 62.699208 33.703261) (xy 62.971775 33.834158) (xy 63.264642 33.909365) (xy 63.566553 33.925991) (xy 63.865907 33.883397) (xy 64.151199 33.783222) (xy 64.300792 33.703261) (xy 64.384475 33.44908) (xy 65.155525 33.44908) (xy 65.239208 33.703261) (xy 65.511775 33.834158) (xy 65.804642 33.909365) (xy 66.106553 33.925991) (xy 66.405907 33.883397) (xy 66.691199 33.783222) (xy 66.840792 33.703261) (xy 66.924475 33.44908) (xy 66.04 32.564605) (xy 65.155525 33.44908) (xy 64.384475 33.44908) (xy 63.5 32.564605) (xy 62.615525 33.44908) (xy 55.316031 33.44908) (xy 55.42404 33.376911) (xy 55.601911 33.19904) (xy 55.741663 32.989886) (xy 55.837926 32.757487) (xy 55.887 32.510774) (xy 55.887 32.451553) (xy 61.959009 32.451553) (xy 62.001603 32.750907) (xy 62.101778 33.036199) (xy 62.181739 33.185792) (xy 62.43592 33.269475) (xy 63.320395 32.385) (xy 63.679605 32.385) (xy 64.56408 33.269475) (xy 64.77 33.201681) (xy 64.97592 33.269475) (xy 65.860395 32.385) (xy 66.219605 32.385) (xy 67.10408 33.269475) (xy 67.358261 33.185792) (xy 67.489158 32.913225) (xy 67.564365 32.620358) (xy 67.580991 32.318447) (xy 67.538397 32.019093) (xy 67.438222 31.733801) (xy 67.358261 31.584208) (xy 67.10408 31.500525) (xy 66.219605 32.385) (xy 65.860395 32.385) (xy 64.97592 31.500525) (xy 64.77 31.568319) (xy 64.56408 31.500525) (xy 63.679605 32.385) (xy 63.320395 32.385) (xy 62.43592 31.500525) (xy 62.181739 31.584208) (xy 62.050842 31.856775) (xy 61.975635 32.149642) (xy 61.959009 32.451553) (xy 55.887 32.451553) (xy 55.887 32.259226) (xy 55.837926 32.012513) (xy 55.741663 31.780114) (xy 55.601911 31.57096) (xy 55.42404 31.393089) (xy 55.316032 31.32092) (xy 62.615525 31.32092) (xy 63.5 32.205395) (xy 64.384475 31.32092) (xy 65.155525 31.32092) (xy 66.04 32.205395) (xy 66.924475 31.32092) (xy 66.840792 31.066739) (xy 66.568225 30.935842) (xy 66.275358 30.860635) (xy 65.973447 30.844009) (xy 65.674093 30.886603) (xy 65.388801 30.986778) (xy 65.239208 31.066739) (xy 65.155525 31.32092) (xy 64.384475 31.32092) (xy 64.300792 31.066739) (xy 64.028225 30.935842) (xy 63.735358 30.860635) (xy 63.433447 30.844009) (xy 63.134093 30.886603) (xy 62.848801 30.986778) (xy 62.699208 31.066739) (xy 62.615525 31.32092) (xy 55.316032 31.32092) (xy 55.214886 31.253337) (xy 54.982487 31.157074) (xy 54.735774 31.108) (xy 54.484226 31.108) (xy 54.237513 31.157074) (xy 54.005114 31.253337) (xy 53.79596 31.393089) (xy 53.618089 31.57096) (xy 53.478337 31.780114) (xy 53.382074 32.012513) (xy 53.34 32.224034) (xy 53.297926 32.012513) (xy 53.201663 31.780114) (xy 53.061911 31.57096) (xy 52.88404 31.393089) (xy 52.674886 31.253337) (xy 52.442487 31.157074) (xy 52.195774 31.108) (xy 51.944226 31.108) (xy 51.697513 31.157074) (xy 51.465114 31.253337) (xy 51.25596 31.393089) (xy 51.078089 31.57096) (xy 50.938337 31.780114) (xy 50.842074 32.012513) (xy 50.793 32.259226) (xy 25.802 32.259226) (xy 25.802 31.027033) (xy 26.302572 31.027033) (xy 26.620757 31.48085) (xy 27.22521 31.806269) (xy 27.881535 32.007512) (xy 28.56451 32.076845) (xy 29.247888 32.011605) (xy 29.905407 31.814298) (xy 30.511799 31.492506) (xy 30.529243 31.48085) (xy 30.847428 31.027033) (xy 28.575 28.754605) (xy 26.302572 31.027033) (xy 25.802 31.027033) (xy 25.802 30.622388) (xy 26.122967 30.847428) (xy 28.395395 28.575) (xy 28.754605 28.575) (xy 31.027033 30.847428) (xy 31.48085 30.529243) (xy 31.806269 29.92479) (xy 32.007512 29.268465) (xy 32.076845 28.58549) (xy 32.011605 27.902112) (xy 31.832425 27.305) (xy 76.835 27.305) (xy 76.835 51.435) (xy 76.847201 51.558882) (xy 76.883336 51.678004) (xy 76.942017 51.787787) (xy 77.020987 51.884013) (xy 77.117213 51.962983) (xy 77.226996 52.021664) (xy 77.346118 52.057799) (xy 77.47 52.07) (xy 116.332 52.07) (xy 116.455882 52.057799) (xy 116.575004 52.021664) (xy 116.684787 51.962983) (xy 116.781013 51.884013) (xy 116.859983 51.787787) (xy 116.918664 51.678004) (xy 116.954799 51.558882) (xy 116.967 51.435) (xy 116.967 31.027033) (xy 118.377572 31.027033) (xy 118.695757 31.48085) (xy 119.30021 31.806269) (xy 119.956535 32.007512) (xy 120.63951 32.076845) (xy 121.322888 32.011605) (xy 121.980407 31.814298) (xy 122.586799 31.492506) (xy 122.604243 31.48085) (xy 122.922428 31.027033) (xy 120.65 28.754605) (xy 118.377572 31.027033) (xy 116.967 31.027033) (xy 116.967 28.56451) (xy 117.148155 28.56451) (xy 117.213395 29.247888) (xy 117.410702 29.905407) (xy 117.732494 30.511799) (xy 117.74415 30.529243) (xy 118.197967 30.847428) (xy 120.470395 28.575) (xy 118.197967 26.302572) (xy 117.74415 26.620757) (xy 117.418731 27.22521) (xy 117.217488 27.881535) (xy 117.148155 28.56451) (xy 116.967 28.56451) (xy 116.967 27.305) (xy 116.954799 27.181118) (xy 116.918664 27.061996) (xy 116.859983 26.952213) (xy 116.781013 26.855987) (xy 116.684787 26.777017) (xy 116.575004 26.718336) (xy 116.455882 26.682201) (xy 116.332 26.67) (xy 77.47 26.67) (xy 77.346118 26.682201) (xy 77.226996 26.718336) (xy 77.117213 26.777017) (xy 77.020987 26.855987) (xy 76.942017 26.952213) (xy 76.883336 27.061996) (xy 76.847201 27.181118) (xy 76.835 27.305) (xy 31.832425 27.305) (xy 31.814298 27.244593) (xy 31.492506 26.638201) (xy 31.48085 26.620757) (xy 31.027033 26.302572) (xy 28.754605 28.575) (xy 28.395395 28.575) (xy 26.122967 26.302572) (xy 25.802 26.527612) (xy 25.802 25.802) (xy 26.527612 25.802) ) ) ) ) ================================================ FILE: electronics/chainlinkBase/chainlinkBase.lib ================================================ EESchema-LIBRARY Version 2.4 #encoding utf-8 # # 74HC165_2_74HC165 # DEF 74HC165_2_74HC165 U 0 40 Y Y 1 F N F0 "U" 150 700 50 H V C CNN F1 "74HC165_2_74HC165" 250 600 50 H V C CNN F2 "MODULE" 600 1200 50 H I C CNN F3 "DOCUMENTATION" 750 1100 50 H I C CNN DRAW S 300 550 -300 -550 0 1 0 f X ~LD 1 -600 350 300 R 50 50 1 1 I X SER 10 -600 -400 300 R 50 50 1 1 I X A 11 600 500 300 L 50 50 1 1 I X B 12 600 400 300 L 50 50 1 1 I X C 13 600 300 300 L 50 50 1 1 I X D 14 600 200 300 L 50 50 1 1 I X CLKIN 15 -600 50 300 R 50 50 1 1 I X VCC 16 0 850 300 D 50 50 1 1 W X CLK 2 -600 150 300 R 50 50 1 1 I X E 3 600 100 300 L 50 50 1 1 I X F 4 600 0 300 L 50 50 1 1 I X G 5 600 -100 300 L 50 50 1 1 I X H 6 600 -200 300 L 50 50 1 1 I X ~QH 7 600 -500 300 L 50 50 1 1 O X GND 8 0 -850 300 U 50 50 1 1 W X QH 9 600 -400 300 L 50 50 1 1 O ENDDRAW ENDDEF # # 74xx_74HC244 # DEF 74xx_74HC244 U 0 20 Y Y 1 F N F0 "U" -300 650 50 H V C CNN F1 "74xx_74HC244" -300 -650 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN ALIAS 74HCT244 74AHC244 74AHCT244 $FPLIST TSSOP*4.4x6.5mm*P0.65mm* SSOP*4.4x6.5mm*P0.65mm* $ENDFPLIST DRAW S -300 600 300 -600 1 1 10 f P 4 1 0 6 50 0 -50 50 -50 -50 50 0 N X 1OE 1 -500 -400 200 R 50 50 1 0 I I X GND 10 0 -800 200 U 50 50 1 0 W X 2A3 11 -500 -200 200 R 50 50 1 0 I X 1Y3 12 500 200 200 L 50 50 1 0 T X 2A2 13 -500 -100 200 R 50 50 1 0 I X 1Y2 14 500 300 200 L 50 50 1 0 T X 2A1 15 -500 0 200 R 50 50 1 0 I X 1Y1 16 500 400 200 L 50 50 1 0 T X 2A0 17 -500 100 200 R 50 50 1 0 I X 1Y0 18 500 500 200 L 50 50 1 0 T X 2OE 19 -500 -500 200 R 50 50 1 0 I I X 1A0 2 -500 500 200 R 50 50 1 0 I X VCC 20 0 800 200 D 50 50 1 0 W X 2Y0 3 500 100 200 L 50 50 1 0 T X 1A1 4 -500 400 200 R 50 50 1 0 I X 2Y1 5 500 0 200 L 50 50 1 0 T X 1A2 6 -500 300 200 R 50 50 1 0 I X 2Y2 7 500 -100 200 L 50 50 1 0 T X 1A3 8 -500 200 200 R 50 50 1 0 I X 2Y3 9 500 -200 200 L 50 50 1 0 T ENDDRAW ENDDEF # # 74xx_74HC595 # DEF 74xx_74HC595 U 0 20 Y Y 1 F N F0 "U" -300 550 50 H V C CNN F1 "74xx_74HC595" -300 -650 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN ALIAS 74LS595 74HCT595 $FPLIST DIP*W7.62mm* SOIC*3.9x9.9mm*P1.27mm* TSSOP*4.4x5mm*P0.65mm* SOIC*5.3x10.2mm*P1.27mm* SOIC*7.5x10.3mm*P1.27mm* $ENDFPLIST DRAW S -300 500 300 -600 1 1 10 f X QB 1 400 300 100 L 50 50 1 0 T X ~SRCLR 10 -400 100 100 R 50 50 1 0 I X SRCLK 11 -400 200 100 R 50 50 1 0 I X RCLK 12 -400 -100 100 R 50 50 1 0 I X ~OE 13 -400 -200 100 R 50 50 1 0 I X SER 14 -400 400 100 R 50 50 1 0 I X QA 15 400 400 100 L 50 50 1 0 T X VCC 16 0 600 100 D 50 50 1 0 W X QC 2 400 200 100 L 50 50 1 0 T X QD 3 400 100 100 L 50 50 1 0 T X QE 4 400 0 100 L 50 50 1 0 T X QF 5 400 -100 100 L 50 50 1 0 T X QG 6 400 -200 100 L 50 50 1 0 T X QH 7 400 -300 100 L 50 50 1 0 T X GND 8 0 -700 100 U 50 50 1 0 W X QH' 9 400 -500 100 L 50 50 1 0 O ENDDRAW ENDDEF # # Analog_ADC_INA219BxD # DEF Analog_ADC_INA219BxD U 0 20 Y Y 1 F N F0 "U" -250 350 50 H V C CNN F1 "Analog_ADC_INA219BxD" 200 350 50 H V C CNN F2 "Package_SO:SOIC-8_3.9x4.9mm_P1.27mm" 800 -350 50 H I C CNN F3 "" 350 -100 50 H I C CNN ALIAS INA219BxD $FPLIST SOIC*3.9x4.9mm*P1.27mm* $ENDFPLIST DRAW S -300 300 300 -300 0 1 10 f X A1 1 400 -100 100 L 50 50 1 1 I X A0 2 400 -200 100 L 50 50 1 1 I X SDA 3 400 200 100 L 50 50 1 1 B X SCL 4 400 100 100 L 50 50 1 1 I X VS 5 0 400 100 D 50 50 1 1 W X GND 6 0 -400 100 U 50 50 1 1 W X IN- 7 -400 -100 100 R 50 50 1 1 I X IN+ 8 -400 100 100 R 50 50 1 1 I ENDDRAW ENDDEF # # Connector_Conn_01x05_Male # DEF Connector_Conn_01x05_Male J 0 40 Y N 1 F N F0 "J" 0 300 50 H V C CNN F1 "Connector_Conn_01x05_Male" 0 -300 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST Connector*:*_1x??_* $ENDFPLIST DRAW S 34 -195 0 -205 1 1 6 F S 34 -95 0 -105 1 1 6 F S 34 5 0 -5 1 1 6 F S 34 105 0 95 1 1 6 F S 34 205 0 195 1 1 6 F P 2 1 1 6 50 -200 34 -200 N P 2 1 1 6 50 -100 34 -100 N P 2 1 1 6 50 0 34 0 N P 2 1 1 6 50 100 34 100 N P 2 1 1 6 50 200 34 200 N X Pin_1 1 200 200 150 L 50 50 1 1 P X Pin_2 2 200 100 150 L 50 50 1 1 P X Pin_3 3 200 0 150 L 50 50 1 1 P X Pin_4 4 200 -100 150 L 50 50 1 1 P X Pin_5 5 200 -200 150 L 50 50 1 1 P ENDDRAW ENDDEF # # Connector_Conn_01x12_Male # DEF Connector_Conn_01x12_Male J 0 40 Y N 1 F N F0 "J" 0 600 50 H V C CNN F1 "Connector_Conn_01x12_Male" 0 -700 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST Connector*:*_1x??_* $ENDFPLIST DRAW S 34 -595 0 -605 1 1 6 F S 34 -495 0 -505 1 1 6 F S 34 -395 0 -405 1 1 6 F S 34 -295 0 -305 1 1 6 F S 34 -195 0 -205 1 1 6 F S 34 -95 0 -105 1 1 6 F S 34 5 0 -5 1 1 6 F S 34 105 0 95 1 1 6 F S 34 205 0 195 1 1 6 F S 34 305 0 295 1 1 6 F S 34 405 0 395 1 1 6 F S 34 505 0 495 1 1 6 F P 2 1 1 6 50 -600 34 -600 N P 2 1 1 6 50 -500 34 -500 N P 2 1 1 6 50 -400 34 -400 N P 2 1 1 6 50 -300 34 -300 N P 2 1 1 6 50 -200 34 -200 N P 2 1 1 6 50 -100 34 -100 N P 2 1 1 6 50 0 34 0 N P 2 1 1 6 50 100 34 100 N P 2 1 1 6 50 200 34 200 N P 2 1 1 6 50 300 34 300 N P 2 1 1 6 50 400 34 400 N P 2 1 1 6 50 500 34 500 N X Pin_1 1 200 500 150 L 50 50 1 1 P X Pin_10 10 200 -400 150 L 50 50 1 1 P X Pin_11 11 200 -500 150 L 50 50 1 1 P X Pin_12 12 200 -600 150 L 50 50 1 1 P X Pin_2 2 200 400 150 L 50 50 1 1 P X Pin_3 3 200 300 150 L 50 50 1 1 P X Pin_4 4 200 200 150 L 50 50 1 1 P X Pin_5 5 200 100 150 L 50 50 1 1 P X Pin_6 6 200 0 150 L 50 50 1 1 P X Pin_7 7 200 -100 150 L 50 50 1 1 P X Pin_8 8 200 -200 150 L 50 50 1 1 P X Pin_9 9 200 -300 150 L 50 50 1 1 P ENDDRAW ENDDEF # # Connector_Screw_Terminal_01x02 # DEF Connector_Screw_Terminal_01x02 J 0 40 Y N 1 F N F0 "J" 0 100 50 H V C CNN F1 "Connector_Screw_Terminal_01x02" 0 -200 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST TerminalBlock*:* $ENDFPLIST DRAW C 0 -100 25 1 1 6 N C 0 0 25 1 1 6 N S -50 50 50 -150 1 1 10 f P 2 1 1 6 -21 -87 13 -120 N P 2 1 1 6 -21 13 13 -20 N P 2 1 1 6 -14 -80 20 -113 N P 2 1 1 6 -14 20 20 -13 N X Pin_1 1 -200 0 150 R 50 50 1 1 P X Pin_2 2 -200 -100 150 R 50 50 1 1 P ENDDRAW ENDDEF # # Connector_Screw_Terminal_01x03 # DEF Connector_Screw_Terminal_01x03 J 0 40 Y N 1 F N F0 "J" 0 200 50 H V C CNN F1 "Connector_Screw_Terminal_01x03" 0 -200 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST TerminalBlock*:* $ENDFPLIST DRAW C 0 -100 25 1 1 6 N C 0 0 25 1 1 6 N C 0 100 25 1 1 6 N S -50 150 50 -150 1 1 10 f P 2 1 1 6 -21 -87 13 -120 N P 2 1 1 6 -21 13 13 -20 N P 2 1 1 6 -21 113 13 80 N P 2 1 1 6 -14 -80 20 -113 N P 2 1 1 6 -14 20 20 -13 N P 2 1 1 6 -14 120 20 87 N X Pin_1 1 -200 100 150 R 50 50 1 1 P X Pin_2 2 -200 0 150 R 50 50 1 1 P X Pin_3 3 -200 -100 150 R 50 50 1 1 P ENDDRAW ENDDEF # # Connector_Screw_Terminal_01x06 # DEF Connector_Screw_Terminal_01x06 J 0 40 Y N 1 F N F0 "J" 0 300 50 H V C CNN F1 "Connector_Screw_Terminal_01x06" 0 -400 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST TerminalBlock*:* $ENDFPLIST DRAW C 0 -300 25 1 1 6 N C 0 -200 25 1 1 6 N C 0 -100 25 1 1 6 N C 0 0 25 1 1 6 N C 0 100 25 1 1 6 N C 0 200 25 1 1 6 N S -50 250 50 -350 1 1 10 f P 2 1 1 6 -21 -287 13 -320 N P 2 1 1 6 -21 -187 13 -220 N P 2 1 1 6 -21 -87 13 -120 N P 2 1 1 6 -21 13 13 -20 N P 2 1 1 6 -21 113 13 80 N P 2 1 1 6 -21 213 13 180 N P 2 1 1 6 -14 -280 20 -313 N P 2 1 1 6 -14 -180 20 -213 N P 2 1 1 6 -14 -80 20 -113 N P 2 1 1 6 -14 20 20 -13 N P 2 1 1 6 -14 120 20 87 N P 2 1 1 6 -14 220 20 187 N X Pin_1 1 -200 200 150 R 50 50 1 1 P X Pin_2 2 -200 100 150 R 50 50 1 1 P X Pin_3 3 -200 0 150 R 50 50 1 1 P X Pin_4 4 -200 -100 150 R 50 50 1 1 P X Pin_5 5 -200 -200 150 R 50 50 1 1 P X Pin_6 6 -200 -300 150 R 50 50 1 1 P ENDDRAW ENDDEF # # CustomPower_+12V_Monitored # DEF CustomPower_+12V_Monitored #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -150 50 H I C CNN F1 "CustomPower_+12V_Monitored" 0 140 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 2 0 1 0 -30 50 0 100 N P 2 0 1 0 0 0 0 100 N P 2 0 1 0 0 100 30 50 N X +12V_Monitored 1 0 0 0 U 50 50 1 1 W N ENDDRAW ENDDEF # # CustomPower_IOVCC # DEF CustomPower_IOVCC #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -150 50 H I C CNN F1 "CustomPower_IOVCC" 0 140 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 2 0 1 0 -30 50 0 100 N P 2 0 1 0 0 0 0 100 N P 2 0 1 0 0 100 30 50 N X IOVCC 1 0 0 0 U 50 50 1 1 W N ENDDRAW ENDDEF # # Device_CP_Small # DEF Device_CP_Small C 0 10 N N 1 F N F0 "C" 10 70 50 H V L CNN F1 "Device_CP_Small" 10 -80 50 H V L CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST CP_* $ENDFPLIST DRAW S -60 -12 60 -27 0 1 0 F S -60 27 60 12 0 1 0 N P 2 0 1 0 -50 60 -30 60 N P 2 0 1 0 -40 50 -40 70 N X ~ 1 0 100 73 D 50 50 1 1 P X ~ 2 0 -100 73 U 50 50 1 1 P ENDDRAW ENDDEF # # Device_C_Small # DEF Device_C_Small C 0 10 N N 1 F N F0 "C" 10 70 50 H V L CNN F1 "Device_C_Small" 10 -80 50 H V L CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST C_* $ENDFPLIST DRAW P 2 0 1 13 -60 -20 60 -20 N P 2 0 1 12 -60 20 60 20 N X ~ 1 0 100 80 D 50 50 1 1 P X ~ 2 0 -100 80 U 50 50 1 1 P ENDDRAW ENDDEF # # Device_Jumper_NO_Small # DEF Device_Jumper_NO_Small JP 0 30 N N 1 F N F0 "JP" 0 80 50 H V C CNN F1 "Device_Jumper_NO_Small" 10 -60 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST SolderJumper*Open* $ENDFPLIST DRAW C -40 0 20 0 1 0 N C 40 0 20 0 1 0 N X 1 1 -100 0 40 R 50 50 0 1 P X 2 2 100 0 40 L 50 50 0 1 P ENDDRAW ENDDEF # # Device_R_Small # DEF Device_R_Small R 0 10 N N 1 F N F0 "R" 30 20 50 H V L CNN F1 "Device_R_Small" 30 -40 50 H V L CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST R_* $ENDFPLIST DRAW S -30 70 30 -70 0 1 8 N X ~ 1 0 100 30 D 50 50 1 1 P X ~ 2 0 -100 30 U 50 50 1 1 P ENDDRAW ENDDEF # # ESP32Modules_D1_32 # DEF ESP32Modules_D1_32 U 0 40 Y Y 1 F N F0 "U" 0 1100 50 H V C CNN F1 "ESP32Modules_D1_32" 0 950 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW S -550 1050 550 -1050 0 1 0 f P 2 0 1 0 -600 -850 -550 -850 N P 2 0 1 0 -600 -650 -550 -650 N P 2 0 1 0 -600 -450 -550 -450 N P 2 0 1 0 -600 -250 -550 -250 N P 2 0 1 0 -600 -50 -550 -50 N P 2 0 1 0 -600 150 -550 150 N P 2 0 1 0 -600 350 -550 350 N P 2 0 1 0 -600 550 -550 550 N P 2 0 1 0 -600 750 -550 750 N P 2 0 1 0 -600 950 -550 950 N P 2 0 1 0 600 -850 550 -850 N P 2 0 1 0 600 -650 550 -650 N P 2 0 1 0 600 -450 550 -450 N P 2 0 1 0 600 -250 550 -250 N P 2 0 1 0 600 -50 550 -50 N P 2 0 1 0 600 150 550 150 N P 2 0 1 0 600 350 550 350 N P 2 0 1 0 600 550 550 550 N P 2 0 1 0 600 750 550 750 N P 2 0 1 0 600 950 550 950 N X GND 1 -700 950 100 R 50 50 1 1 P X GPIO19/D6 10 -650 50 100 R 50 50 1 1 P X GPIO34 11 -700 -50 100 R 50 50 1 1 P X GPIO23/D7 12 -650 -150 100 R 50 50 1 1 P X GPIO14 13 -700 -250 100 R 50 50 1 1 P X GPIO5/D8 14 -650 -350 100 R 50 50 1 1 P X ~ 15 -700 -450 100 R 50 50 1 1 N X 3V3/3V3 16 -650 -550 100 R 50 50 1 1 P X GPIO9 17 -700 -650 100 R 50 50 1 1 P X GPIO13 18 -650 -750 100 R 50 50 1 1 P X GPIO11 19 -700 -850 100 R 50 50 1 1 P X RST 2 -650 850 100 R 50 50 1 1 P X GPIO10 20 -650 -950 100 R 50 50 1 1 P X GND 21 700 950 100 L 50 50 1 1 P X GPIO1/TX 22 650 850 100 L 50 50 1 1 P X GPIO27 23 700 750 100 L 50 50 1 1 P X GPIO3/RX 24 650 650 100 L 50 50 1 1 P X GPIO25 25 700 550 100 L 50 50 1 1 P X GPIO22/D1 26 650 450 100 L 50 50 1 1 P X GPIO32 27 700 350 100 L 50 50 1 1 P X GPIO21/D2 28 650 250 100 L 50 50 1 1 P X GPIO12 29 700 150 100 L 50 50 1 1 P X ~ 3 -700 750 100 R 50 50 1 1 N X GPIO17/D3 30 650 50 100 L 50 50 1 1 P X GPIO4 31 700 -50 100 L 50 50 1 1 P X GPIO16/D4 32 650 -150 100 L 50 50 1 1 P X GPIO0 33 700 -250 100 L 50 50 1 1 P X GND/GND 34 650 -350 100 L 50 50 1 1 P X GPIO2 35 700 -450 100 L 50 50 1 1 P X 5V/5V 36 650 -550 100 L 50 50 1 1 P X GPIO8 37 700 -650 100 L 50 50 1 1 P X GPIO15 38 650 -750 100 L 50 50 1 1 P X GPIO6 39 700 -850 100 L 50 50 1 1 P X GPIO36/A0 4 -650 650 100 R 50 50 1 1 P X GPIO7 40 650 -950 100 L 50 50 1 1 P X GPIO39 5 -700 550 100 R 50 50 1 1 P X GPIO26/D0 6 -650 450 100 R 50 50 1 1 P X GPIO35 7 -700 350 100 R 50 50 1 1 P X GPIO18/D5 8 -650 250 100 R 50 50 1 1 P X GPIO33 9 -700 150 100 R 50 50 1 1 P ENDDRAW ENDDEF # # ESP32Modules_TTGO_TDisplay # DEF ESP32Modules_TTGO_TDisplay U 0 40 Y Y 1 F N F0 "U" -200 750 50 H V C CNN F1 "ESP32Modules_TTGO_TDisplay" 0 650 50 H V C CNN F2 "" -200 50 50 H I C CNN F3 "" -200 50 50 H I C CNN DRAW C -60 -310 0 0 1 0 N C -60 -110 0 0 1 0 N S -400 700 400 -700 0 1 0 f P 2 0 1 0 -60 -290 -60 -300 N P 2 0 1 0 -60 -90 -60 -100 N P 4 0 1 0 -60 -270 -90 -320 -30 -320 -60 -270 N P 4 0 1 0 -60 -70 -90 -120 -30 -120 -60 -70 N P 4 0 1 0 370 100 400 130 400 70 370 100 F P 4 0 1 0 370 200 400 230 400 170 370 200 F P 4 0 1 0 370 300 400 330 400 270 370 300 F P 4 0 1 0 370 400 400 430 400 370 370 400 F X GND 1 -500 500 100 R 50 50 1 1 P X GND 10 -500 -400 100 R 50 50 1 1 P X GND 11 -500 -500 100 R 50 50 1 1 P X 3V3 12 -500 -600 100 R 50 50 1 1 P X 5V 13 500 -600 100 L 50 50 1 1 P X GND 14 500 -500 100 L 50 50 1 1 P X GPIO27 15 500 -400 100 L 50 50 1 1 P X GPIO26 16 500 -300 100 L 50 50 1 1 P X GPIO25 17 500 -200 100 L 50 50 1 1 P X GPIO33 18 500 -100 100 L 50 50 1 1 P X GPIO32 19 500 0 100 L 50 50 1 1 P X GND 2 -500 400 100 R 50 50 1 1 P X GPIO39 20 500 100 100 L 50 50 1 1 P X GPIO38 21 500 200 100 L 50 50 1 1 P X GPIO37 22 500 300 100 L 50 50 1 1 P X GPIO36 23 500 400 100 L 50 50 1 1 P X 3V3 24 500 500 100 L 50 50 1 1 P X GPIO21 3 -500 300 100 R 50 50 1 1 P X GPIO22 4 -500 200 100 R 50 50 1 1 P X GPIO17 5 -500 100 100 R 50 50 1 1 P X GPIO2 6 -500 0 100 R 50 50 1 1 P X GPIO15 7 -500 -100 100 R 50 50 1 1 P X GPIO13 8 -500 -200 100 R 50 50 1 1 P X GPIO12 9 -500 -300 100 R 50 50 1 1 P ENDDRAW ENDDEF # # INA219_Breakout_INA219_Breakout # DEF INA219_Breakout_INA219_Breakout U 0 40 Y Y 1 F N F0 "U" -150 400 50 H V C CNN F1 "INA219_Breakout_INA219_Breakout" 150 0 50 V V C CNN F2 "" -300 50 50 H I C CNN F3 "" -300 50 50 H I C CNN DRAW S -200 350 200 -350 0 1 0 f X VCC 1 -300 250 100 R 50 50 1 1 P X GND 2 -300 150 100 R 50 50 1 1 P X SCL 3 -300 50 100 R 50 50 1 1 P X SDA 4 -300 -50 100 R 50 50 1 1 P X VIN- 5 -300 -150 100 R 50 50 1 1 P X VIN+ 6 -300 -250 100 R 50 50 1 1 w ENDDRAW ENDDEF # # Interface_UART_MAX485E # DEF Interface_UART_MAX485E U 0 20 Y Y 1 F N F0 "U" -240 450 50 H V C CNN F1 "Interface_UART_MAX485E" 30 450 50 H V L CNN F2 "" 0 -700 50 H I C CNN F3 "" 0 50 50 H I C CNN ALIAS MAX483E MAX485E MAX487E MAX1487E MAX3485 MAX3483 MAX3486 $FPLIST DIP*W7.62mm* SOIC*3.9x4.9mm*P1.27mm* $ENDFPLIST DRAW C -12 -145 14 0 1 10 F C -1 59 14 0 1 10 F C 65 75 14 0 1 10 F S -300 400 300 -500 0 1 10 f S 50 125 50 125 0 1 0 N P 2 0 1 10 -160 -200 -75 -200 N P 2 0 1 10 -160 100 -50 100 N P 2 0 1 10 -50 -126 -50 -136 N P 2 0 1 10 -25 -200 210 -200 N P 3 0 1 10 -160 -100 -50 -100 -50 -125 N P 3 0 1 10 0 50 0 0 -160 0 N P 3 0 1 10 50 125 150 125 150 -200 N P 3 0 1 10 100 75 100 -150 0 -150 N P 4 0 1 10 -75 -125 -75 -225 25 -175 -75 -125 N P 4 0 1 10 -50 100 50 150 50 50 -50 100 N P 4 0 1 10 75 75 175 75 175 100 210 100 N X RO 1 -400 100 100 R 50 50 1 1 O X ~RE 2 -400 0 100 R 50 50 1 1 I X DE 3 -400 -100 100 R 50 50 1 1 I X DI 4 -400 -200 100 R 50 50 1 1 I X GND 5 0 -600 100 U 50 50 1 1 W X A 6 400 -200 100 L 50 50 1 1 B X B 7 400 100 100 L 50 50 1 1 B X VCC 8 0 500 100 D 50 50 1 1 W ENDDRAW ENDDEF # # Jumper_SolderJumper_2_Open # DEF Jumper_SolderJumper_2_Open JP 0 0 Y N 1 F N F0 "JP" 0 80 50 H V C CNN F1 "Jumper_SolderJumper_2_Open" 0 -100 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST SolderJumper*Open* $ENDFPLIST DRAW A -10 0 40 901 -901 0 1 0 N -10 40 -10 -40 A -10 0 40 901 -901 0 1 0 F -10 40 -10 -40 A 10 0 40 -899 899 0 1 0 N 10 -40 10 40 A 10 0 40 -899 899 0 1 0 F 10 -40 10 40 P 2 0 1 0 -10 40 -10 -40 N P 2 0 1 0 10 40 10 -40 N X A 1 -150 0 100 R 50 50 1 1 P X B 2 150 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # LCD_ST7789_240x240 # DEF LCD_ST7789_240x240 U 0 40 Y Y 1 F N F0 "U" 0 450 50 H V C CNN F1 "LCD_ST7789_240x240" 50 350 50 H V C CNN F2 "" -150 0 50 H I C CNN F3 "" -150 0 50 H I C CNN DRAW S -300 400 300 -350 0 1 0 f X BLK BLK -600 300 300 R 50 50 1 1 P X DC DC -600 200 300 R 50 50 1 1 P X GND GND -600 -300 300 R 50 50 1 1 P X RES RES -600 100 300 R 50 50 1 1 P X SCL(CLK) SCL -600 -100 300 R 50 50 1 1 P X SDA_(MOSI) SDA -600 0 300 R 50 50 1 1 P X VCC VCC -600 -200 300 R 50 50 1 1 P ENDDRAW ENDDEF # # LCD_ST7789_80x160 # DEF LCD_ST7789_80x160 U 0 40 Y Y 1 F N F0 "U" 0 500 50 H V C CNN F1 "LCD_ST7789_80x160" 50 400 50 H V C CNN F2 "" -150 50 50 H I C CNN F3 "" -150 50 50 H I C CNN DRAW S -300 450 300 -450 0 1 0 f X BLK BLK -600 350 300 R 50 50 1 1 P X CS CS -600 250 300 R 50 50 1 1 P X DC DC -600 150 300 R 50 50 1 1 P X GND GND -600 -350 300 R 50 50 1 1 P X RES RES -600 50 300 R 50 50 1 1 P X SCL(CLK) SCL -600 -150 300 R 50 50 1 1 P X SDA_(MOSI) SDA -600 -50 300 R 50 50 1 1 P X VCC VCC -600 -250 300 R 50 50 1 1 P ENDDRAW ENDDEF # # LevelShifterModule_LevelShifterModule # DEF LevelShifterModule_LevelShifterModule U 0 40 Y Y 1 F N F0 "U" 0 350 50 H V C CNN F1 "LevelShifterModule_LevelShifterModule" 0 400 50 H V C CNN F2 "" -150 50 50 H I C CNN F3 "" -150 50 50 H I C CNN DRAW S -250 300 250 -300 0 0 0 f X LV1 1 -350 250 100 R 50 50 1 1 B X HV 10 350 50 100 L 50 50 1 1 W X HV2 11 350 150 100 L 50 50 1 1 B X HV1 12 350 250 100 L 50 50 1 1 B X LV2 2 -350 150 100 R 50 50 1 1 B X LV 3 -350 50 100 R 50 50 1 1 W X GND 4 -350 -50 100 R 50 50 1 1 W X LV3 5 -350 -150 100 R 50 50 1 1 B X LV4 6 -350 -250 100 R 50 50 1 1 B X HV4 7 350 -250 100 L 50 50 1 1 B X HV3 8 350 -150 100 L 50 50 1 1 B X GND 9 350 -50 100 L 50 50 1 1 W ENDDRAW ENDDEF # # Mechanical_MountingHole # DEF Mechanical_MountingHole H 0 40 Y Y 1 F N F0 "H" 0 200 50 H V C CNN F1 "Mechanical_MountingHole" 0 125 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST MountingHole* $ENDFPLIST DRAW C 0 0 50 0 1 50 N ENDDRAW ENDDEF # # Mega2560Shield_Mega2560Shield # DEF Mega2560Shield_Mega2560Shield U 0 40 Y Y 1 F N F0 "U" 550 50 50 H V C CNN F1 "Mega2560Shield_Mega2560Shield" 350 -100 50 H V C CNN F2 "" -900 100 50 H I C CNN F3 "" -900 100 50 H I C CNN DRAW S 0 0 1100 -9000 0 1 0 f X 3V3 3V3 1200 -300 100 L 50 50 1 1 P X 5V 5V 1200 -400 100 L 50 50 1 1 P X A0 A0 1200 -7400 100 L 50 50 1 1 P X A1 A1 1200 -7500 100 L 50 50 1 1 P X A10 A10 1200 -8400 100 L 50 50 1 1 P X A11 A11 1200 -8500 100 L 50 50 1 1 P X A12 A12 1200 -8600 100 L 50 50 1 1 P X A13 A13 1200 -8700 100 L 50 50 1 1 P X A14 A14 1200 -8800 100 L 50 50 1 1 P X A15 A15 1200 -8900 100 L 50 50 1 1 P X A2 A2 1200 -7600 100 L 50 50 1 1 P X A3 A3 1200 -7700 100 L 50 50 1 1 P X A4 A4 1200 -7800 100 L 50 50 1 1 P X A5 A5 1200 -7900 100 L 50 50 1 1 P X A6 A6 1200 -8000 100 L 50 50 1 1 P X A7 A7 1200 -8100 100 L 50 50 1 1 P X A8 A8 1200 -8200 100 L 50 50 1 1 P X A9 A9 1200 -8300 100 L 50 50 1 1 P X AREF AREF 1200 -1000 100 L 50 50 1 1 P X D0 D0 1200 -1900 100 L 50 50 1 1 P X D1 D1 1200 -2000 100 L 50 50 1 1 P X D10 D10 1200 -2900 100 L 50 50 1 1 P X D11 D11 1200 -3000 100 L 50 50 1 1 P X D12 D12 1200 -3100 100 L 50 50 1 1 P X D13 D13 1200 -3200 100 L 50 50 1 1 P X D14 D14 1200 -3300 100 L 50 50 1 1 P X D15 D15 1200 -3400 100 L 50 50 1 1 P X D16 D16 1200 -3500 100 L 50 50 1 1 P X D17 D17 1200 -3600 100 L 50 50 1 1 P X D18 D18 1200 -3700 100 L 50 50 1 1 P X D19 D19 1200 -3800 100 L 50 50 1 1 P X D2 D2 1200 -2100 100 L 50 50 1 1 P X D20 D20 1200 -3900 100 L 50 50 1 1 P X D21 D21 1200 -4000 100 L 50 50 1 1 P X D22 D22 1200 -4100 100 L 50 50 1 1 P X D23 D23 1200 -4200 100 L 50 50 1 1 P X D24 D24 1200 -4300 100 L 50 50 1 1 P X D25 D25 1200 -4400 100 L 50 50 1 1 P X D26 D26 1200 -4500 100 L 50 50 1 1 P X D27 D27 1200 -4600 100 L 50 50 1 1 P X D28 D28 1200 -4700 100 L 50 50 1 1 P X D29 D29 1200 -4800 100 L 50 50 1 1 P X D3 D3 1200 -2200 100 L 50 50 1 1 P X D30 D30 1200 -4900 100 L 50 50 1 1 P X D31 D31 1200 -5000 100 L 50 50 1 1 P X D32 D32 1200 -5100 100 L 50 50 1 1 P X D33 D33 1200 -5200 100 L 50 50 1 1 P X D34 D34 1200 -5300 100 L 50 50 1 1 P X D35 D35 1200 -5400 100 L 50 50 1 1 P X D36 D36 1200 -5500 100 L 50 50 1 1 P X D37 D37 1200 -5600 100 L 50 50 1 1 P X D38 D38 1200 -5700 100 L 50 50 1 1 P X D39 D39 1200 -5800 100 L 50 50 1 1 P X D4 D4 1200 -2300 100 L 50 50 1 1 P X D40 D40 1200 -5900 100 L 50 50 1 1 P X D41 D41 1200 -6000 100 L 50 50 1 1 P X D42 D42 1200 -6100 100 L 50 50 1 1 P X D43 D43 1200 -6200 100 L 50 50 1 1 P X D44 D44 1200 -6300 100 L 50 50 1 1 P X D45 D45 1200 -6400 100 L 50 50 1 1 P X D46 D46 1200 -6500 100 L 50 50 1 1 P X D47 D47 1200 -6600 100 L 50 50 1 1 P X D48 D48 1200 -6700 100 L 50 50 1 1 P X D49 D49 1200 -6800 100 L 50 50 1 1 P X D5 D5 1200 -2400 100 L 50 50 1 1 P X D50 D50 1200 -6900 100 L 50 50 1 1 P X D51 D51 1200 -7000 100 L 50 50 1 1 P X D52 D52 1200 -7100 100 L 50 50 1 1 P X D53 D53 1200 -7200 100 L 50 50 1 1 P X D6 D6 1200 -2500 100 L 50 50 1 1 P X D7 D7 1200 -2600 100 L 50 50 1 1 P X D8 D8 1200 -2700 100 L 50 50 1 1 P X D9 D9 1200 -2800 100 L 50 50 1 1 P X GND GND 1200 -500 100 L 50 50 1 1 P X ICSP_5V ICSP_5V 1200 -1300 100 L 50 50 1 1 P X ICSP_GND ICSP_GND 1200 -1700 100 L 50 50 1 1 P X ICSP_MISO ICSP_MISO 1200 -1200 100 L 50 50 1 1 P X ICSP_MOSI ICSP_MOSI 1200 -1500 100 L 50 50 1 1 P X ICSP_RESET ICSP_RESET 1200 -1600 100 L 50 50 1 1 P X ICSP_SCK ICSP_SCK 1200 -1400 100 L 50 50 1 1 P X IOREF IOREF 1200 -800 100 L 50 50 1 1 P X NC NC 1200 -100 100 L 50 50 1 1 P X RESET RESET 1200 -900 100 L 50 50 1 1 P X VIN VIN 1200 -600 100 L 50 50 1 1 P ENDDRAW ENDDEF # # RS485Module_RS485Module # DEF RS485Module_RS485Module U 0 40 Y Y 1 F N F0 "U" 0 300 50 H V C CNN F1 "RS485Module_RS485Module" 0 350 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C 150 -100 50 0 1 0 N C 150 100 50 0 1 0 N S -450 250 450 -250 0 1 0 f S 50 200 250 -200 0 1 0 N P 2 0 1 0 100 -100 200 -100 N P 2 0 1 0 100 100 200 100 N P 2 0 1 0 150 -50 150 -150 N P 2 0 1 0 150 150 150 50 N X A A 550 -50 100 L 50 50 1 1 B X B B 550 50 100 L 50 50 1 1 B X DE DE -550 -50 100 R 50 50 1 1 I X DI DI -550 -150 100 R 50 50 1 1 I X GND GND 550 -150 100 L 50 50 1 1 W X RE RE -550 50 100 R 50 50 1 1 I X RO RO -550 150 100 R 50 50 1 1 O X VCC VCC 550 150 100 L 50 50 1 1 W ENDDRAW ENDDEF # # Transistor_Array_ULN2003A # DEF Transistor_Array_ULN2003A U 0 20 Y Y 1 F N F0 "U" 0 625 50 H V C CNN F1 "Transistor_Array_ULN2003A" 0 550 50 H V C CNN F2 "" 50 -550 50 H I L CNN F3 "" 100 -200 50 H I C CNN ALIAS ULN2003A ULN2002 ULN2002A ULN2004 ULN2004A $FPLIST DIP*W7.62mm* SOIC*3.9x9.9mm*P1.27mm* SSOP*4.4x5.2mm*P0.65mm* TSSOP*4.4x5mm*P0.65mm* SOIC*W*5.3x10.2mm*P1.27mm* $ENDFPLIST DRAW C -70 200 10 0 1 0 N C -50 -90 10 0 1 0 F C -50 0 10 0 1 0 F C -50 100 10 0 1 0 F C -20 200 10 0 1 0 F S -300 -500 300 500 0 1 10 f P 2 0 1 0 -180 200 -140 200 N P 2 0 1 0 -60 200 160 200 N P 2 0 1 0 0 265 -40 265 N P 3 0 1 0 -20 200 -20 400 115 400 N P 4 0 1 0 -140 240 -140 160 -80 200 -140 240 N P 4 0 1 0 0 235 -40 235 -20 265 0 235 N X I1 1 -400 200 100 R 50 50 1 1 I X O7 10 400 -400 100 L 50 50 1 1 C X O6 11 400 -300 100 L 50 50 1 1 C X O5 12 400 -200 100 L 50 50 1 1 C X O4 13 400 -100 100 L 50 50 1 1 C X O3 14 400 0 100 L 50 50 1 1 C X O2 15 400 100 100 L 50 50 1 1 C X O1 16 400 200 100 L 50 50 1 1 C X I2 2 -400 100 100 R 50 50 1 1 I X I3 3 -400 0 100 R 50 50 1 1 I X I4 4 -400 -100 100 R 50 50 1 1 I X I5 5 -400 -200 100 R 50 50 1 1 I X I6 6 -400 -300 100 R 50 50 1 1 I X I7 7 -400 -400 100 R 50 50 1 1 I X GND 8 0 -600 100 U 50 50 1 1 W X COM 9 400 400 100 L 50 50 1 1 P ENDDRAW ENDDEF # # Transistor_FET_BSS138 # DEF Transistor_FET_BSS138 Q 0 20 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "Transistor_FET_BSS138" 200 0 50 H V L CNN F2 "Package_TO_SOT_SMD:SOT-23" 200 -75 50 H I L CIN F3 "" 0 0 50 H I L CNN ALIAS 2N7002 2N7002E 2N7002H 2N7002K BS170F BS870 BSN20 BSS123 BSS127S DMG2302U DMG3402L DMG3404L DMG3406L DMG3414U DMG3418L DMN10H220L DMN10H700S DMN13H750S DMN2041L DMN2050L DMN2056U DMN2058U DMN2075U DMN2230U DMN24H11DS DMN24H3D5L DMN3042L DMN3051L DMN30H4D0L DMN3110S DMN3150L DMN3300U DMN3404L DMN6075S DMN6140L DMN67D7L DMN67D8L MMBF170 VN10LF ZVN3306F ZVN3310F ZVN3320F ZVN4106F ZXM61N02F ZXM61N03F ZXMN10A07F ZXMN2A01F ZXMN2A14F ZXMN2B01F ZXMN2B14FH ZXMN2F30FH ZXMN2F34FH ZXMN3A01F ZXMN3A14F ZXMN3B01F ZXMN3B14F ZXMN3F30FH ZXMN6A07F IRLML0030 IRLML2060 $FPLIST SOT?23* $ENDFPLIST DRAW C 65 0 110 0 1 10 N C 100 -70 10 0 1 0 F C 100 70 10 0 1 0 F P 2 0 1 0 10 0 -100 0 N P 2 0 1 10 10 75 10 -75 N P 2 0 1 10 30 -50 30 -90 N P 2 0 1 10 30 20 30 -20 N P 2 0 1 10 30 90 30 50 N P 2 0 1 0 100 100 100 70 N P 3 0 1 0 100 -100 100 0 30 0 N P 4 0 1 0 30 -70 130 -70 130 70 30 70 N P 4 0 1 0 40 0 80 15 80 -15 40 0 F P 4 0 1 0 110 20 115 15 145 15 150 10 N P 4 0 1 0 130 15 115 -10 145 -10 130 15 N X G 1 -200 0 100 R 50 50 1 1 I X S 2 100 -200 100 U 50 50 1 1 P X D 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # ULN2003AModule_ULN2003AModule # DEF ULN2003AModule_ULN2003AModule U 0 40 Y Y 1 F N F0 "U" 100 50 50 H V C CNN F1 "ULN2003AModule_ULN2003AModule" 250 -400 50 V V C CNN F2 "" 200 -250 50 H I C CNN F3 "" 200 -250 50 H I C CNN DRAW S 0 0 800 -800 0 1 0 f X EN_JMP1 EN_JMP1 900 -100 100 L 50 50 1 1 P X EN_JMP2 EN_JMP2 900 -200 100 L 50 50 1 1 P X GND GND 350 -900 100 U 50 50 1 1 P X IN1 IN1 -100 -100 100 R 50 50 1 1 P X IN2 IN2 -100 -200 100 R 50 50 1 1 P X IN3 IN3 -100 -300 100 R 50 50 1 1 P X IN4 IN4 -100 -400 100 R 50 50 1 1 P X IN5 IN5 -100 -500 100 R 50 50 1 1 P X IN6 IN6 -100 -600 100 R 50 50 1 1 P X IN7 IN7 -100 -700 100 R 50 50 1 1 P X VCC VCC 350 100 100 D 50 50 1 1 P ENDDRAW ENDDEF # # oled_SSD1306_I2C # DEF oled_SSD1306_I2C U 0 40 Y Y 1 F N F0 "U" 0 300 50 H V C CNN F1 "oled_SSD1306_I2C" 100 0 50 V V C CNN F2 "" -250 -300 50 H I C CNN F3 "" -250 -300 50 H I C CNN DRAW S -150 250 150 -250 0 1 0 f X SDA 1 -250 150 100 R 50 50 1 1 P X SCL 2 -250 50 100 R 50 50 1 1 P X VCC 3 -250 -50 100 R 50 50 1 1 P X GND 4 -250 -150 100 R 50 50 1 1 P ENDDRAW ENDDEF # # power_+12V # DEF power_+12V #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -150 50 H I C CNN F1 "power_+12V" 0 140 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 2 0 1 0 -30 50 0 100 N P 2 0 1 0 0 0 0 100 N P 2 0 1 0 0 100 30 50 N X +12V 1 0 0 0 U 50 50 1 1 W N ENDDRAW ENDDEF # # power_+5V # DEF power_+5V #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -150 50 H I C CNN F1 "power_+5V" 0 140 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 2 0 1 0 -30 50 0 100 N P 2 0 1 0 0 0 0 100 N P 2 0 1 0 0 100 30 50 N X +5V 1 0 0 0 U 50 50 1 1 W N ENDDRAW ENDDEF # # power_GND # DEF power_GND #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -250 50 H I C CNN F1 "power_GND" 0 -150 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 6 0 1 0 0 0 0 -50 50 -50 0 -100 -50 -50 0 -50 N X GND 1 0 0 0 D 50 50 1 1 W N ENDDRAW ENDDEF # # power_PWR_FLAG # DEF power_PWR_FLAG #FLG 0 0 N N 1 F P F0 "#FLG" 0 75 50 H I C CNN F1 "power_PWR_FLAG" 0 150 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 6 0 1 0 0 0 0 50 -40 75 0 100 40 75 0 50 N X pwr 1 0 0 0 U 50 50 0 0 w ENDDRAW ENDDEF # #End Library ================================================ FILE: electronics/chainlinkBase/chainlinkBase.pro ================================================ update=Tue 06 Apr 2021 09:21:01 PM PDT version=1 last_client=kicad [general] version=1 RootSch= BoardNm= [cvpcb] version=1 NetIExt=net [eeschema] version=1 LibDir= [eeschema/libraries] [pcbnew] version=1 PageLayoutDescrFile= LastNetListRead= CopperLayerCount=2 BoardThickness=1.6 AllowMicroVias=0 AllowBlindVias=0 RequireCourtyardDefinitions=0 ProhibitOverlappingCourtyards=1 MinTrackWidth=0.16 MinViaDiameter=0.4 MinViaDrill=0.3 MinMicroViaDiameter=0.2 MinMicroViaDrill=0.09999999999999999 MinHoleToHole=0.25 TrackWidth1=0.25 TrackWidth2=0.16 TrackWidth3=0.35 TrackWidth4=0.5 TrackWidth5=2 ViaDiameter1=0.8 ViaDrill1=0.4 dPairWidth1=0.2 dPairGap1=0.25 dPairViaGap1=0.25 SilkLineWidth=0.12 SilkTextSizeV=1 SilkTextSizeH=1 SilkTextSizeThickness=0.15 SilkTextItalic=0 SilkTextUpright=1 CopperLineWidth=0.2 CopperTextSizeV=1.5 CopperTextSizeH=1.5 CopperTextThickness=0.3 CopperTextItalic=0 CopperTextUpright=1 EdgeCutLineWidth=0.05 CourtyardLineWidth=0.05 OthersLineWidth=0.15 OthersTextSizeV=1 OthersTextSizeH=1 OthersTextSizeThickness=0.15 OthersTextItalic=0 OthersTextUpright=1 SolderMaskClearance=0.051 SolderMaskMinWidth=0.25 SolderPasteClearance=0 SolderPasteRatio=-0 [pcbnew/Layer.F.Cu] Name=F.Cu Type=0 Enabled=1 [pcbnew/Layer.In1.Cu] Name=In1.Cu Type=0 Enabled=0 [pcbnew/Layer.In2.Cu] Name=In2.Cu Type=0 Enabled=0 [pcbnew/Layer.In3.Cu] Name=In3.Cu Type=0 Enabled=0 [pcbnew/Layer.In4.Cu] Name=In4.Cu Type=0 Enabled=0 [pcbnew/Layer.In5.Cu] Name=In5.Cu Type=0 Enabled=0 [pcbnew/Layer.In6.Cu] Name=In6.Cu Type=0 Enabled=0 [pcbnew/Layer.In7.Cu] Name=In7.Cu Type=0 Enabled=0 [pcbnew/Layer.In8.Cu] Name=In8.Cu Type=0 Enabled=0 [pcbnew/Layer.In9.Cu] Name=In9.Cu Type=0 Enabled=0 [pcbnew/Layer.In10.Cu] Name=In10.Cu Type=0 Enabled=0 [pcbnew/Layer.In11.Cu] Name=In11.Cu Type=0 Enabled=0 [pcbnew/Layer.In12.Cu] Name=In12.Cu Type=0 Enabled=0 [pcbnew/Layer.In13.Cu] Name=In13.Cu Type=0 Enabled=0 [pcbnew/Layer.In14.Cu] Name=In14.Cu Type=0 Enabled=0 [pcbnew/Layer.In15.Cu] Name=In15.Cu Type=0 Enabled=0 [pcbnew/Layer.In16.Cu] Name=In16.Cu Type=0 Enabled=0 [pcbnew/Layer.In17.Cu] Name=In17.Cu Type=0 Enabled=0 [pcbnew/Layer.In18.Cu] Name=In18.Cu Type=0 Enabled=0 [pcbnew/Layer.In19.Cu] Name=In19.Cu Type=0 Enabled=0 [pcbnew/Layer.In20.Cu] Name=In20.Cu Type=0 Enabled=0 [pcbnew/Layer.In21.Cu] Name=In21.Cu Type=0 Enabled=0 [pcbnew/Layer.In22.Cu] Name=In22.Cu Type=0 Enabled=0 [pcbnew/Layer.In23.Cu] Name=In23.Cu Type=0 Enabled=0 [pcbnew/Layer.In24.Cu] Name=In24.Cu Type=0 Enabled=0 [pcbnew/Layer.In25.Cu] Name=In25.Cu Type=0 Enabled=0 [pcbnew/Layer.In26.Cu] Name=In26.Cu Type=0 Enabled=0 [pcbnew/Layer.In27.Cu] Name=In27.Cu Type=0 Enabled=0 [pcbnew/Layer.In28.Cu] Name=In28.Cu Type=0 Enabled=0 [pcbnew/Layer.In29.Cu] Name=In29.Cu Type=0 Enabled=0 [pcbnew/Layer.In30.Cu] Name=In30.Cu Type=0 Enabled=0 [pcbnew/Layer.B.Cu] Name=B.Cu Type=0 Enabled=1 [pcbnew/Layer.B.Adhes] Enabled=1 [pcbnew/Layer.F.Adhes] Enabled=1 [pcbnew/Layer.B.Paste] Enabled=1 [pcbnew/Layer.F.Paste] Enabled=1 [pcbnew/Layer.B.SilkS] Enabled=1 [pcbnew/Layer.F.SilkS] Enabled=1 [pcbnew/Layer.B.Mask] Enabled=1 [pcbnew/Layer.F.Mask] Enabled=1 [pcbnew/Layer.Dwgs.User] Enabled=1 [pcbnew/Layer.Cmts.User] Enabled=1 [pcbnew/Layer.Eco1.User] Enabled=1 [pcbnew/Layer.Eco2.User] Enabled=1 [pcbnew/Layer.Edge.Cuts] Enabled=1 [pcbnew/Layer.Margin] Enabled=1 [pcbnew/Layer.B.CrtYd] Enabled=1 [pcbnew/Layer.F.CrtYd] Enabled=1 [pcbnew/Layer.B.Fab] Enabled=1 [pcbnew/Layer.F.Fab] Enabled=1 [pcbnew/Layer.Rescue] Enabled=0 [pcbnew/Netclasses] [pcbnew/Netclasses/Default] Name=Default Clearance=0.2 TrackWidth=0.25 ViaDiameter=0.8 ViaDrill=0.4 uViaDiameter=0.3 uViaDrill=0.1 dPairWidth=0.2 dPairGap=0.25 dPairViaGap=0.25 ================================================ FILE: electronics/chainlinkBase/chainlinkBase.sch ================================================ EESchema Schematic File Version 4 EELAYER 30 0 EELAYER END $Descr USLedger 17000 11000 encoding utf-8 Sheet 1 6 Title "" Date "" Rev "" Comp "" Comment1 "" Comment2 "" Comment3 "" Comment4 "" $EndDescr $Comp L power:GND #PWR0104 U 1 1 5F37A219 P 1150 1450 F 0 "#PWR0104" H 1150 1200 50 0001 C CNN F 1 "GND" H 1155 1277 50 0000 C CNN F 2 "" H 1150 1450 50 0001 C CNN F 3 "" H 1150 1450 50 0001 C CNN 1 1150 1450 1 0 0 -1 $EndComp $Comp L power:+5V #PWR0109 U 1 1 5F387D57 P 3050 2150 F 0 "#PWR0109" H 3050 2000 50 0001 C CNN F 1 "+5V" H 3065 2323 50 0000 C CNN F 2 "" H 3050 2150 50 0001 C CNN F 3 "" H 3050 2150 50 0001 C CNN 1 3050 2150 1 0 0 -1 $EndComp Text Label 1000 7250 0 50 ~ 0 RS485_DRIVE_EN Text Label 1000 7450 0 50 ~ 0 TX $Comp L power:+5V #PWR0131 U 1 1 6026BAB5 P 4150 6750 F 0 "#PWR0131" H 4150 6600 50 0001 C CNN F 1 "+5V" H 4165 6923 50 0000 C CNN F 2 "" H 4150 6750 50 0001 C CNN F 3 "" H 4150 6750 50 0001 C CNN 1 4150 6750 1 0 0 -1 $EndComp $Comp L Interface_UART:MAX485E U107 U 1 1 602614C0 P 4150 7250 F 0 "U107" H 3900 7800 50 0000 C CNN F 1 "SP485" H 3900 7700 50 0000 C CNN F 2 "Package_SO:SOIC-8_3.9x4.9mm_P1.27mm" H 4150 6550 50 0001 C CNN F 3 "https://datasheets.maximintegrated.com/en/ds/MAX1487E-MAX491E.pdf" H 4150 7300 50 0001 C CNN F 4 "1016-1171-5-ND" H 4150 7250 50 0001 C CNN "DK#" 1 4150 7250 1 0 0 -1 $EndComp $Comp L Device:C_Small C106 U 1 1 602822B0 P 4450 6750 F 0 "C106" V 4221 6750 50 0000 C CNN F 1 "0.1uF" V 4312 6750 50 0000 C CNN F 2 "Capacitor_SMD:C_0805_2012Metric" H 4450 6750 50 0001 C CNN F 3 "~" H 4450 6750 50 0001 C CNN F 4 "1276-2449-1-ND" H 4450 6750 50 0001 C CNN "DK#" 1 4450 6750 0 1 1 0 $EndComp $Comp L Connector:Screw_Terminal_01x02 J104 U 1 1 60282EC9 P 5200 7200 F 0 "J104" H 5280 7192 50 0000 L CNN F 1 "RS485" H 5280 7101 50 0000 L CNN F 2 "ScrewTerminals:Generic-5.08-2P" H 5200 7200 50 0001 C CNN F 3 "~" H 5200 7200 50 0001 C CNN F 4 "EB147A-02-D" H 5200 7200 50 0001 C CNN "DK#" 1 5200 7200 1 0 0 1 $EndComp $Comp L Connector:Screw_Terminal_01x02 J105 U 1 1 60284131 P 5200 7500 F 0 "J105" H 5280 7492 50 0000 L CNN F 1 "RS485" H 5280 7401 50 0000 L CNN F 2 "ScrewTerminals:Generic-5.08-2P" H 5200 7500 50 0001 C CNN F 3 "~" H 5200 7500 50 0001 C CNN F 4 "EB147A-02-D" H 5200 7500 50 0001 C CNN "DK#" 1 5200 7500 1 0 0 1 $EndComp Wire Wire Line 4750 7100 5000 7100 Wire Wire Line 4750 7400 5000 7400 Wire Wire Line 4850 7450 4850 7200 Wire Wire Line 4850 7200 5000 7200 Wire Wire Line 4850 7450 4850 7500 Wire Wire Line 4850 7500 5000 7500 Connection ~ 4850 7450 Wire Wire Line 4150 6750 4350 6750 Connection ~ 4150 6750 Wire Wire Line 4550 7150 4750 7150 Wire Wire Line 4750 7150 4750 7100 Wire Wire Line 4750 7150 4750 7400 Connection ~ 4750 7150 Wire Wire Line 4550 7450 4850 7450 Wire Wire Line 4550 6750 4600 6750 Wire Wire Line 4600 6750 4600 7850 Wire Wire Line 4600 7850 4150 7850 Wire Wire Line 4150 7850 4150 7900 Connection ~ 4150 7850 $Comp L power:GND #PWR0135 U 1 1 60770C07 P 4150 7900 F 0 "#PWR0135" H 4150 7650 50 0001 C CNN F 1 "GND" H 4155 7727 50 0000 C CNN F 2 "" H 4150 7900 50 0001 C CNN F 3 "" H 4150 7900 50 0001 C CNN 1 4150 7900 1 0 0 -1 $EndComp Wire Wire Line 3700 7250 3700 7350 Wire Wire Line 3700 7350 3750 7350 Wire Wire Line 3700 7250 3750 7250 $Comp L power:PWR_FLAG #FLG0101 U 1 1 625EFA89 P 1500 1050 F 0 "#FLG0101" H 1500 1125 50 0001 C CNN F 1 "PWR_FLAG" H 1500 1200 50 0000 C CNN F 2 "" H 1500 1050 50 0001 C CNN F 3 "~" H 1500 1050 50 0001 C CNN 1 1500 1050 1 0 0 -1 $EndComp $Comp L power:PWR_FLAG #FLG0102 U 1 1 604C4E50 P 1500 1450 F 0 "#FLG0102" H 1500 1525 50 0001 C CNN F 1 "PWR_FLAG" H 1500 1600 50 0000 C CNN F 2 "" H 1500 1450 50 0001 C CNN F 3 "~" H 1500 1450 50 0001 C CNN 1 1500 1450 -1 0 0 1 $EndComp $Comp L power:+3.3V #PWR0130 U 1 1 60BFAA7F P 2250 6450 F 0 "#PWR0130" H 2250 6300 50 0001 C CNN F 1 "+3.3V" H 2265 6623 50 0000 C CNN F 2 "" H 2250 6450 50 0001 C CNN F 3 "" H 2250 6450 50 0001 C CNN 1 2250 6450 1 0 0 -1 $EndComp $Comp L Interface_Expansion:MCP23017_SS U105 U 1 1 60A0AFF5 P 6900 4200 F 0 "U105" H 6500 5300 50 0000 C CNN F 1 "MCP23017_SS" H 6500 5200 50 0000 C CNN F 2 "Package_SO:SSOP-28_5.3x10.2mm_P0.65mm" H 7100 3200 50 0001 L CNN F 3 "http://ww1.microchip.com/downloads/en/DeviceDoc/20001952C.pdf" H 7100 3100 50 0001 L CNN F 4 "MCP23017-E/SS-ND" H 6900 4200 50 0001 C CNN "DK#" 1 6900 4200 1 0 0 -1 $EndComp Wire Wire Line 1750 7850 1750 7900 Wire Wire Line 1800 7850 1750 7850 $Comp L power:GND #PWR0134 U 1 1 5FB88245 P 1750 7900 F 0 "#PWR0134" H 1750 7650 50 0001 C CNN F 1 "GND" H 1755 7727 50 0000 C CNN F 2 "" H 1750 7900 50 0001 C CNN F 3 "" H 1750 7900 50 0001 C CNN 1 1750 7900 1 0 0 -1 $EndComp $Comp L Connector:Screw_Terminal_01x03 J107 U 1 1 5FB880B2 P 2000 7750 F 0 "J107" H 2080 7792 50 0000 L CNN F 1 "UART" H 2080 7701 50 0000 L CNN F 2 "ScrewTerminals:Generic-5.08-3P" H 2000 7750 50 0001 C CNN F 3 "~" H 2000 7750 50 0001 C CNN F 4 "EB147A-03-D" H 2000 7750 50 0001 C CNN "DK#" 1 2000 7750 1 0 0 -1 $EndComp Text Notes 8950 1000 0 50 ~ 0 Relay Driver $Comp L Device:R_Small R101 U 1 1 60C3D07D P 4850 2900 F 0 "R101" H 4909 2946 50 0000 L CNN F 1 "1k" H 4909 2855 50 0000 L CNN F 2 "Resistor_SMD:R_0805_2012Metric" H 4850 2900 50 0001 C CNN F 3 "~" H 4850 2900 50 0001 C CNN F 4 "RMCF0805JT1K00CT-ND" H 4850 2900 50 0001 C CNN "DK#" 1 4850 2900 1 0 0 -1 $EndComp $Comp L Device:R_Small R102 U 1 1 60E21C5F P 5150 2900 F 0 "R102" H 5209 2946 50 0000 L CNN F 1 "1k" H 5209 2855 50 0000 L CNN F 2 "Resistor_SMD:R_0805_2012Metric" H 5150 2900 50 0001 C CNN F 3 "~" H 5150 2900 50 0001 C CNN F 4 "RMCF0805JT1K00CT-ND" H 5150 2900 50 0001 C CNN "DK#" 1 5150 2900 1 0 0 -1 $EndComp Wire Wire Line 4850 2800 4850 2700 Wire Wire Line 5150 2700 5150 2800 Wire Wire Line 4850 3000 4850 3100 Wire Wire Line 4850 3100 4450 3100 Wire Wire Line 5150 3000 5150 3200 Wire Wire Line 5150 3200 4450 3200 Text Label 4450 3100 0 50 ~ 0 SDA Text Label 4450 3200 0 50 ~ 0 SCL Text Label 1000 6850 0 50 ~ 0 RX Wire Wire Line 6200 3500 5500 3500 Text Label 5500 3400 0 50 ~ 0 SDA Text Label 5500 3500 0 50 ~ 0 SCL Wire Wire Line 5500 3400 6200 3400 Wire Wire Line 7600 4800 8300 4800 Text Label 8300 4800 2 50 ~ 0 OUT0_EN Wire Wire Line 7600 4700 8300 4700 Text Label 8300 4700 2 50 ~ 0 OUT1_EN Wire Wire Line 7600 4500 8300 4500 Text Label 8300 4500 2 50 ~ 0 OUT3_EN Wire Wire Line 7600 4400 8300 4400 Text Label 8300 4400 2 50 ~ 0 OUT4_EN $Comp L power:+3.3V #PWR0116 U 1 1 61A6560A P 6900 2950 F 0 "#PWR0116" H 6900 2800 50 0001 C CNN F 1 "+3.3V" H 6915 3123 50 0000 C CNN F 2 "" H 6900 2950 50 0001 C CNN F 3 "" H 6900 2950 50 0001 C CNN 1 6900 2950 1 0 0 -1 $EndComp Wire Wire Line 6900 3100 6900 3000 $Comp L power:+3.3V #PWR0123 U 1 1 61B08A60 P 6100 4700 F 0 "#PWR0123" H 6100 4550 50 0001 C CNN F 1 "+3.3V" H 6115 4873 50 0000 C CNN F 2 "" H 6100 4700 50 0001 C CNN F 3 "" H 6100 4700 50 0001 C CNN 1 6100 4700 1 0 0 -1 $EndComp Wire Wire Line 6100 4700 6100 4800 Wire Wire Line 6100 5000 6200 5000 Wire Wire Line 6200 4900 6100 4900 Connection ~ 6100 4900 Wire Wire Line 6100 4900 6100 5000 Wire Wire Line 6100 4800 6200 4800 Connection ~ 6100 4800 Wire Wire Line 6100 4800 6100 4900 $Comp L power:GND #PWR0129 U 1 1 61BE7A18 P 6900 5400 F 0 "#PWR0129" H 6900 5150 50 0001 C CNN F 1 "GND" H 6905 5227 50 0000 C CNN F 2 "" H 6900 5400 50 0001 C CNN F 3 "" H 6900 5400 50 0001 C CNN 1 6900 5400 1 0 0 -1 $EndComp Wire Wire Line 6900 5300 6900 5400 $Comp L Device:R_Small R103 U 1 1 61C34240 P 5650 4500 F 0 "R103" H 5709 4546 50 0000 L CNN F 1 "15k" H 5709 4455 50 0000 L CNN F 2 "Resistor_SMD:R_0805_2012Metric" H 5650 4500 50 0001 C CNN F 3 "~" H 5650 4500 50 0001 C CNN F 4 "RMCF0805JT15K0CT-ND" H 5650 4500 50 0001 C CNN "DK#" 1 5650 4500 1 0 0 -1 $EndComp Wire Wire Line 5650 4600 5650 5300 Wire Wire Line 5650 5300 6900 5300 Connection ~ 6900 5300 Wire Wire Line 5650 4400 5650 4300 Wire Wire Line 5650 4300 6200 4300 Wire Wire Line 5650 4300 5200 4300 Connection ~ 5650 4300 Text Label 5200 4300 0 50 ~ 0 MCP_RESET $Comp L ESP32Modules:TTGO_TDisplay U104 U 1 1 600AC4FA P 2850 4150 F 0 "U104" H 2850 5015 50 0000 C CNN F 1 "TTGO_TDisplay" H 2850 4924 50 0000 C CNN F 2 "ESP32:T-DISPLAY_extra_pins_labeled" H 2650 4200 50 0001 C CNN F 3 "" H 2650 4200 50 0001 C CNN 1 2850 4150 1 0 0 -1 $EndComp $Comp L power:GND #PWR0120 U 1 1 6028B534 P 1350 3800 F 0 "#PWR0120" H 1350 3550 50 0001 C CNN F 1 "GND" H 1355 3627 50 0000 C CNN F 2 "" H 1350 3800 50 0001 C CNN F 3 "" H 1350 3800 50 0001 C CNN 1 1350 3800 1 0 0 -1 $EndComp Wire Wire Line 1350 3800 1350 3750 Wire Wire Line 1350 3650 2350 3650 Wire Wire Line 2350 3750 1350 3750 Connection ~ 1350 3750 Wire Wire Line 1350 3750 1350 3650 $Comp L power:GND #PWR0126 U 1 1 602EE03B P 2150 4900 F 0 "#PWR0126" H 2150 4650 50 0001 C CNN F 1 "GND" H 2155 4727 50 0000 C CNN F 2 "" H 2150 4900 50 0001 C CNN F 3 "" H 2150 4900 50 0001 C CNN 1 2150 4900 1 0 0 -1 $EndComp Wire Wire Line 2350 4550 2150 4550 Wire Wire Line 2150 4550 2150 4650 Wire Wire Line 2350 4650 2150 4650 Connection ~ 2150 4650 Wire Wire Line 2150 4650 2150 4900 $Comp L power:GND #PWR0125 U 1 1 603B786F P 3450 4850 F 0 "#PWR0125" H 3450 4600 50 0001 C CNN F 1 "GND" H 3455 4677 50 0000 C CNN F 2 "" H 3450 4850 50 0001 C CNN F 3 "" H 3450 4850 50 0001 C CNN 1 3450 4850 1 0 0 -1 $EndComp Wire Wire Line 3350 4650 3450 4650 Wire Wire Line 3450 4650 3450 4850 $Comp L power:+5V #PWR0124 U 1 1 603EADE5 P 3600 4750 F 0 "#PWR0124" H 3600 4600 50 0001 C CNN F 1 "+5V" H 3615 4923 50 0000 C CNN F 2 "" H 3600 4750 50 0001 C CNN F 3 "" H 3600 4750 50 0001 C CNN 1 3600 4750 1 0 0 -1 $EndComp Wire Wire Line 3600 4750 3350 4750 Text Label 3950 4250 2 50 ~ 0 CLOCK Text Label 3950 4150 2 50 ~ 0 MOTOR_DATA Text Label 3950 4350 2 50 ~ 0 LATCH Text Label 3950 4050 2 50 ~ 0 SENSOR_DATA Text Label 1650 3850 0 50 ~ 0 SDA Text Label 1650 3950 0 50 ~ 0 SCL Text Label 3950 3750 2 50 ~ 0 RX Text Label 1650 4350 0 50 ~ 0 TX Wire Wire Line 3950 4050 3350 4050 Wire Wire Line 3350 4150 3950 4150 Wire Wire Line 3950 4250 3350 4250 Wire Wire Line 3350 4350 3950 4350 Wire Wire Line 1850 4600 1850 4650 Wire Wire Line 1850 4750 2350 4750 Text Label 1650 4150 0 50 ~ 0 RS485_DRIVE_EN Wire Wire Line 1650 4150 2350 4150 $Comp L power:+3.3V #PWR0122 U 1 1 60BD53B3 P 1850 4600 F 0 "#PWR0122" H 1850 4450 50 0001 C CNN F 1 "+3.3V" H 1865 4773 50 0000 C CNN F 2 "" H 1850 4600 50 0001 C CNN F 3 "" H 1850 4600 50 0001 C CNN 1 1850 4600 1 0 0 -1 $EndComp Text Label 3950 4450 2 50 ~ 0 MCP_RESET Wire Wire Line 3350 4450 3950 4450 Connection ~ 3700 7250 Wire Wire Line 1650 4350 2350 4350 Wire Wire Line 1650 3850 2350 3850 Wire Wire Line 1650 3950 2350 3950 $Comp L power:GND #PWR0114 U 1 1 6238771C P 9250 2450 F 0 "#PWR0114" H 9250 2200 50 0001 C CNN F 1 "GND" H 9255 2277 50 0000 C CNN F 2 "" H 9250 2450 50 0001 C CNN F 3 "" H 9250 2450 50 0001 C CNN 1 9250 2450 1 0 0 -1 $EndComp $Comp L power:+5V #PWR0139 U 1 1 6288546A P 4150 9050 F 0 "#PWR0139" H 4150 8900 50 0001 C CNN F 1 "+5V" H 4165 9223 50 0000 C CNN F 2 "" H 4150 9050 50 0001 C CNN F 3 "" H 4150 9050 50 0001 C CNN 1 4150 9050 1 0 0 -1 $EndComp Wire Wire Line 4150 9750 4150 9850 $Comp L power:GND #PWR0140 U 1 1 628DDFA6 P 4150 9850 F 0 "#PWR0140" H 4150 9600 50 0001 C CNN F 1 "GND" H 4155 9677 50 0000 C CNN F 2 "" H 4150 9850 50 0001 C CNN F 3 "" H 4150 9850 50 0001 C CNN 1 4150 9850 1 0 0 -1 $EndComp Text Label 3300 9450 0 50 ~ 0 RGB_LEDS Text Label 3950 4550 2 50 ~ 0 RGB_LEDS_3V3 Wire Wire Line 3350 4550 3950 4550 Wire Wire Line 3350 3750 3950 3750 $Comp L LED:WS2812B D101 U 1 1 62A2E5F2 P 4500 9450 F 0 "D101" H 4450 9900 50 0000 L CNN F 1 "WS2812B" H 4500 9800 50 0000 C CNN F 2 "LED_SMD:LED_WS2812B_PLCC4_5.0x5.0mm_P3.2mm" H 4550 9150 50 0001 L TNN F 3 "https://cdn-shop.adafruit.com/datasheets/WS2812B.pdf" H 4600 9075 50 0001 L TNN 1 4500 9450 1 0 0 -1 $EndComp $Comp L Device:C_Small C108 U 1 1 62A330C5 P 4150 9250 F 0 "C108" H 3950 9300 50 0000 L CNN F 1 "0.1uF" H 3900 9200 50 0000 L CNN F 2 "Capacitor_SMD:C_0805_2012Metric" H 4150 9250 50 0001 C CNN F 3 "~" H 4150 9250 50 0001 C CNN F 4 "1276-2449-1-ND" H 4150 9250 50 0001 C CNN "DK#" 1 4150 9250 1 0 0 -1 $EndComp Connection ~ 4150 9150 Wire Wire Line 4150 9150 4500 9150 Wire Wire Line 4500 9750 4150 9750 Wire Wire Line 4150 9350 4150 9750 Connection ~ 4150 9750 $Comp L Device:C_Small C109 U 1 1 62AEB5EB P 5100 9250 F 0 "C109" H 4900 9300 50 0000 L CNN F 1 "0.1uF" H 4850 9200 50 0000 L CNN F 2 "Capacitor_SMD:C_0805_2012Metric" H 5100 9250 50 0001 C CNN F 3 "~" H 5100 9250 50 0001 C CNN F 4 "1276-2449-1-ND" H 5100 9250 50 0001 C CNN "DK#" 1 5100 9250 1 0 0 -1 $EndComp Wire Wire Line 4500 9150 5100 9150 Connection ~ 5100 9150 Wire Wire Line 5100 9350 5100 9750 Connection ~ 5100 9750 Wire Wire Line 5100 9750 4500 9750 Wire Wire Line 5150 9450 4800 9450 $Comp L Device:C_Small C110 U 1 1 62B1BC67 P 6050 9250 F 0 "C110" H 5850 9300 50 0000 L CNN F 1 "0.1uF" H 5800 9200 50 0000 L CNN F 2 "Capacitor_SMD:C_0805_2012Metric" H 6050 9250 50 0001 C CNN F 3 "~" H 6050 9250 50 0001 C CNN F 4 "1276-2449-1-ND" H 6050 9250 50 0001 C CNN "DK#" 1 6050 9250 1 0 0 -1 $EndComp Connection ~ 6050 9150 Wire Wire Line 6050 9350 6050 9750 Connection ~ 6050 9750 Wire Wire Line 6100 9450 5750 9450 $Comp L Device:C_Small C111 U 1 1 62B81D9E P 7000 9250 F 0 "C111" H 6800 9300 50 0000 L CNN F 1 "0.1uF" H 6750 9200 50 0000 L CNN F 2 "Capacitor_SMD:C_0805_2012Metric" H 7000 9250 50 0001 C CNN F 3 "~" H 7000 9250 50 0001 C CNN F 4 "1276-2449-1-ND" H 7000 9250 50 0001 C CNN "DK#" 1 7000 9250 1 0 0 -1 $EndComp Connection ~ 7000 9150 Wire Wire Line 7000 9150 7350 9150 Wire Wire Line 7350 9750 7000 9750 Wire Wire Line 7000 9350 7000 9750 Connection ~ 7000 9750 Wire Wire Line 7050 9450 6700 9450 Connection ~ 4500 9150 Connection ~ 4500 9750 Wire Wire Line 5100 9150 5450 9150 Wire Wire Line 5100 9750 5450 9750 Wire Wire Line 6050 9150 6400 9150 Wire Wire Line 6050 9750 6400 9750 $Comp L LED:WS2812B D102 U 1 1 62C202EB P 5450 9450 F 0 "D102" H 5400 9900 50 0000 L CNN F 1 "WS2812B" H 5450 9800 50 0000 C CNN F 2 "LED_SMD:LED_WS2812B_PLCC4_5.0x5.0mm_P3.2mm" H 5500 9150 50 0001 L TNN F 3 "https://cdn-shop.adafruit.com/datasheets/WS2812B.pdf" H 5550 9075 50 0001 L TNN 1 5450 9450 1 0 0 -1 $EndComp Connection ~ 5450 9150 Wire Wire Line 5450 9150 6050 9150 Connection ~ 5450 9750 Wire Wire Line 5450 9750 6050 9750 $Comp L LED:WS2812B D103 U 1 1 62C20833 P 6400 9450 F 0 "D103" H 6350 9900 50 0000 L CNN F 1 "WS2812B" H 6400 9800 50 0000 C CNN F 2 "LED_SMD:LED_WS2812B_PLCC4_5.0x5.0mm_P3.2mm" H 6450 9150 50 0001 L TNN F 3 "https://cdn-shop.adafruit.com/datasheets/WS2812B.pdf" H 6500 9075 50 0001 L TNN 1 6400 9450 1 0 0 -1 $EndComp Connection ~ 6400 9150 Wire Wire Line 6400 9150 7000 9150 Connection ~ 6400 9750 Wire Wire Line 6400 9750 7000 9750 $Comp L LED:WS2812B D104 U 1 1 62C20D7C P 7350 9450 F 0 "D104" H 7300 9900 50 0000 L CNN F 1 "WS2812B" H 7350 9800 50 0000 C CNN F 2 "LED_SMD:LED_WS2812B_PLCC4_5.0x5.0mm_P3.2mm" H 7400 9150 50 0001 L TNN F 3 "https://cdn-shop.adafruit.com/datasheets/WS2812B.pdf" H 7450 9075 50 0001 L TNN 1 7350 9450 1 0 0 -1 $EndComp $Comp L Device:C_Small C112 U 1 1 62C248BF P 7950 9250 F 0 "C112" H 7750 9300 50 0000 L CNN F 1 "0.1uF" H 7700 9200 50 0000 L CNN F 2 "Capacitor_SMD:C_0805_2012Metric" H 7950 9250 50 0001 C CNN F 3 "~" H 7950 9250 50 0001 C CNN F 4 "1276-2449-1-ND" H 7950 9250 50 0001 C CNN "DK#" 1 7950 9250 1 0 0 -1 $EndComp Connection ~ 7950 9150 Wire Wire Line 7950 9150 8300 9150 Wire Wire Line 8300 9750 7950 9750 Wire Wire Line 7950 9350 7950 9750 Connection ~ 7950 9750 Wire Wire Line 8000 9450 7650 9450 Wire Wire Line 7350 9150 7950 9150 Wire Wire Line 7350 9750 7950 9750 $Comp L LED:WS2812B D105 U 1 1 62C248CE P 8300 9450 F 0 "D105" H 8250 9900 50 0000 L CNN F 1 "WS2812B" H 8300 9800 50 0000 C CNN F 2 "LED_SMD:LED_WS2812B_PLCC4_5.0x5.0mm_P3.2mm" H 8350 9150 50 0001 L TNN F 3 "https://cdn-shop.adafruit.com/datasheets/WS2812B.pdf" H 8400 9075 50 0001 L TNN 1 8300 9450 1 0 0 -1 $EndComp Connection ~ 7350 9150 Connection ~ 7350 9750 $Comp L Device:C_Small C107 U 1 1 62C5C329 P 1850 9250 F 0 "C107" H 1650 9300 50 0000 L CNN F 1 "0.1uF" H 1600 9200 50 0000 L CNN F 2 "Capacitor_SMD:C_0805_2012Metric" H 1850 9250 50 0001 C CNN F 3 "~" H 1850 9250 50 0001 C CNN F 4 "1276-2449-1-ND" H 1850 9250 50 0001 C CNN "DK#" 1 1850 9250 1 0 0 -1 $EndComp Wire Wire Line 8850 1550 8150 1550 Text Label 8150 1550 0 50 ~ 0 MASTER_EN $Comp L power:+5V #PWR0105 U 1 1 62FCE727 P 9750 1250 F 0 "#PWR0105" H 9750 1100 50 0001 C CNN F 1 "+5V" H 9765 1423 50 0000 C CNN F 2 "" H 9750 1250 50 0001 C CNN F 3 "" H 9750 1250 50 0001 C CNN 1 9750 1250 1 0 0 -1 $EndComp Wire Wire Line 9650 1350 9750 1350 Wire Wire Line 9750 1350 9750 1250 Wire Wire Line 2350 4050 1650 4050 Text Label 1650 4050 0 50 ~ 0 MASTER_EN Wire Wire Line 10350 1550 9650 1550 Text Label 10350 1550 2 50 ~ 0 RELAY_MASTER Wire Wire Line 1000 7250 3700 7250 $Comp L Regulator_Linear:AP7361C-33E U101 U 1 1 608B110C P 6150 1200 F 0 "U101" H 6150 1442 50 0000 C CNN F 1 "AP7361C-33E" H 6150 1351 50 0000 C CNN F 2 "Package_TO_SOT_SMD:SOT-223-3_TabPin2" H 6150 1425 50 0001 C CIN F 3 "https://www.diodes.com/assets/Datasheets/AP7361C.pdf" H 6150 1150 50 0001 C CNN F 4 "AP7361C-33E-13DICT-ND" H 6150 1200 50 0001 C CNN "DK#" 1 6150 1200 1 0 0 -1 $EndComp $Comp L power:+5V #PWR0101 U 1 1 60A0CA9C P 5200 1050 F 0 "#PWR0101" H 5200 900 50 0001 C CNN F 1 "+5V" H 5215 1223 50 0000 C CNN F 2 "" H 5200 1050 50 0001 C CNN F 3 "" H 5200 1050 50 0001 C CNN 1 5200 1050 1 0 0 -1 $EndComp $Comp L Device:C_Small C102 U 1 1 60A0D7E3 P 5600 1300 F 0 "C102" H 5692 1346 50 0000 L CNN F 1 "4.7uF" H 5692 1255 50 0000 L CNN F 2 "Capacitor_SMD:C_0805_2012Metric" H 5600 1300 50 0001 C CNN F 3 "~" H 5600 1300 50 0001 C CNN F 4 "1276-1244-1-ND" H 5600 1300 50 0001 C CNN "DK#" 1 5600 1300 1 0 0 -1 $EndComp $Comp L Device:CP_Small C101 U 1 1 60A0F855 P 5300 1300 F 0 "C101" H 5388 1346 50 0000 L CNN F 1 "47uF" H 5388 1255 50 0000 L CNN F 2 "Capacitor_SMD:CP_Elec_6.3x5.4" H 5300 1300 50 0001 C CNN F 3 "~" H 5300 1300 50 0001 C CNN F 4 "732-8508-1-ND" H 5300 1300 50 0001 C CNN "DK#" 1 5300 1300 1 0 0 -1 $EndComp $Comp L Device:C_Small C103 U 1 1 60A13ADA P 6550 1300 F 0 "C103" H 6642 1346 50 0000 L CNN F 1 "4.7uF" H 6642 1255 50 0000 L CNN F 2 "Capacitor_SMD:C_0805_2012Metric" H 6550 1300 50 0001 C CNN F 3 "~" H 6550 1300 50 0001 C CNN F 4 "1276-1244-1-ND" H 6550 1300 50 0001 C CNN "DK#" 1 6550 1300 1 0 0 -1 $EndComp $Comp L Device:CP_Small C104 U 1 1 60A13D5C P 6900 1300 F 0 "C104" H 6988 1346 50 0000 L CNN F 1 "47uF" H 6988 1255 50 0000 L CNN F 2 "Capacitor_SMD:CP_Elec_6.3x5.4" H 6900 1300 50 0001 C CNN F 3 "~" H 6900 1300 50 0001 C CNN F 4 "732-8508-1-ND" H 6900 1300 50 0001 C CNN "DK#" 1 6900 1300 1 0 0 -1 $EndComp Wire Wire Line 5200 1050 5200 1200 Wire Wire Line 5200 1200 5300 1200 Connection ~ 5300 1200 Wire Wire Line 5300 1200 5600 1200 Connection ~ 5600 1200 Wire Wire Line 5600 1200 5850 1200 Wire Wire Line 5300 1400 5300 1500 Wire Wire Line 5300 1500 5600 1500 $Comp L power:GND #PWR0107 U 1 1 60A641ED P 6150 1650 F 0 "#PWR0107" H 6150 1400 50 0001 C CNN F 1 "GND" H 6155 1477 50 0000 C CNN F 2 "" H 6150 1650 50 0001 C CNN F 3 "" H 6150 1650 50 0001 C CNN 1 6150 1650 1 0 0 -1 $EndComp Wire Wire Line 6150 1500 6150 1650 Connection ~ 6150 1500 Wire Wire Line 5600 1400 5600 1500 Connection ~ 5600 1500 Wire Wire Line 5600 1500 6150 1500 Wire Wire Line 6450 1200 6550 1200 Connection ~ 6550 1200 Wire Wire Line 6150 1500 6550 1500 Wire Wire Line 6900 1400 6900 1500 Wire Wire Line 6550 1400 6550 1500 Connection ~ 6550 1500 Wire Wire Line 6550 1500 6900 1500 Wire Wire Line 7600 7200 6750 7200 Text Label 6750 7200 0 50 ~ 0 CLOCK Wire Wire Line 7600 7300 6750 7300 Text Label 6750 7300 0 50 ~ 0 MOTOR_DATA Wire Wire Line 7600 7400 6750 7400 Text Label 6750 7400 0 50 ~ 0 SENSOR_DATA Wire Wire Line 7600 7500 6750 7500 Text Label 6750 7500 0 50 ~ 0 LATCH $Comp L power:GND #PWR0136 U 1 1 60BA0344 P 8100 7600 F 0 "#PWR0136" H 8100 7350 50 0001 C CNN F 1 "GND" H 8105 7427 50 0000 C CNN F 2 "" H 8100 7600 50 0001 C CNN F 3 "" H 8100 7600 50 0001 C CNN 1 8100 7600 1 0 0 -1 $EndComp Wire Wire Line 6550 1200 6900 1200 Connection ~ 6900 1200 $Comp L Connector:Screw_Terminal_01x02 J106 U 1 1 60C402B2 P 7800 6500 F 0 "J106" H 7880 6492 50 0000 L CNN F 1 "Logic Power Out" H 7880 6401 50 0000 L CNN F 2 "ScrewTerminals:Generic-5.08-2P" H 7800 6500 50 0001 C CNN F 3 "~" H 7800 6500 50 0001 C CNN F 4 "EB147A-02-D" H 7800 6500 50 0001 C CNN "DK#" 1 7800 6500 1 0 0 -1 $EndComp Wire Wire Line 6900 1200 7300 1200 Text Label 7300 1200 2 50 ~ 0 3V3_EXT Text Label 7150 6500 0 50 ~ 0 3V3_EXT Wire Wire Line 7150 6500 7600 6500 $Comp L power:GND #PWR0132 U 1 1 60C71313 P 7500 6700 F 0 "#PWR0132" H 7500 6450 50 0001 C CNN F 1 "GND" H 7505 6527 50 0000 C CNN F 2 "" H 7500 6700 50 0001 C CNN F 3 "" H 7500 6700 50 0001 C CNN 1 7500 6700 1 0 0 -1 $EndComp Wire Wire Line 7500 6700 7500 6600 Wire Wire Line 7500 6600 7600 6600 $Comp L power:+5V #PWR0137 U 1 1 60D6DF95 P 1850 9050 F 0 "#PWR0137" H 1850 8900 50 0001 C CNN F 1 "+5V" H 1865 9223 50 0000 C CNN F 2 "" H 1850 9050 50 0001 C CNN F 3 "" H 1850 9050 50 0001 C CNN 1 1850 9050 1 0 0 -1 $EndComp $Comp L power:GND #PWR0138 U 1 1 60D81643 P 1850 9850 F 0 "#PWR0138" H 1850 9600 50 0001 C CNN F 1 "GND" H 1855 9677 50 0000 C CNN F 2 "" H 1850 9850 50 0001 C CNN F 3 "" H 1850 9850 50 0001 C CNN 1 1850 9850 1 0 0 -1 $EndComp Text Label 900 9450 0 50 ~ 0 RGB_LEDS_3V3 Text Label 3050 9450 2 50 ~ 0 RGB_LEDS $Comp L Connector:Screw_Terminal_01x02 J101 U 1 1 60E26775 P 800 1200 F 0 "J101" H 718 1417 50 0000 C CNN F 1 "Power In" H 718 1326 50 0000 C CNN F 2 "ScrewTerminals:Generic-5.08-2P" H 800 1200 50 0001 C CNN F 3 "~" H 800 1200 50 0001 C CNN F 4 "EB147A-02-D" H 800 1200 50 0001 C CNN "DK#" 1 800 1200 -1 0 0 -1 $EndComp Wire Wire Line 1000 1300 1150 1300 Wire Wire Line 1150 1300 1150 1450 Wire Wire Line 1500 1200 1500 1050 Wire Wire Line 1500 1450 1500 1300 Wire Wire Line 1500 1300 1150 1300 Connection ~ 1150 1300 $Comp L Switch:SW_DIP_x04 SW101 U 1 1 60FDD1A2 P 9500 3900 F 0 "SW101" H 9500 4367 50 0000 C CNN F 1 "SW_DIP_x04" H 9500 4276 50 0000 C CNN F 2 "Button_Switch_SMD:SW_DIP_SPSTx04_Slide_Omron_A6S-410x_W8.9mm_P2.54mm" H 9500 3900 50 0001 C CNN F 3 "~" H 9500 3900 50 0001 C CNN F 4 "CT2194LPST-ND" H 9500 3900 50 0001 C CNN "DK#" 1 9500 3900 -1 0 0 1 $EndComp Text Notes 6100 5250 0 50 ~ 0 I2C ADDR: 0x27 Text Notes 14350 2000 0 50 ~ 0 I2C ADDR: 0x40 Wire Wire Line 900 9450 1950 9450 Wire Wire Line 1850 9050 2250 9050 Wire Wire Line 4150 9050 4150 9150 $Comp L Device:C_Small C113 U 1 1 6137E0BC P 8900 9250 F 0 "C113" H 8700 9300 50 0000 L CNN F 1 "0.1uF" H 8650 9200 50 0000 L CNN F 2 "Capacitor_SMD:C_0805_2012Metric" H 8900 9250 50 0001 C CNN F 3 "~" H 8900 9250 50 0001 C CNN F 4 "1276-2449-1-ND" H 8900 9250 50 0001 C CNN "DK#" 1 8900 9250 1 0 0 -1 $EndComp Connection ~ 8900 9150 Wire Wire Line 8900 9150 9250 9150 Wire Wire Line 9250 9750 8900 9750 Wire Wire Line 8900 9350 8900 9750 Connection ~ 8900 9750 Wire Wire Line 8950 9450 8600 9450 NoConn ~ 9550 9450 Wire Wire Line 8300 9150 8900 9150 Wire Wire Line 8300 9750 8900 9750 $Comp L LED:WS2812B D106 U 1 1 6137E505 P 9250 9450 F 0 "D106" H 9200 9900 50 0000 L CNN F 1 "WS2812B" H 9250 9800 50 0000 C CNN F 2 "LED_SMD:LED_WS2812B_PLCC4_5.0x5.0mm_P3.2mm" H 9300 9150 50 0001 L TNN F 3 "https://cdn-shop.adafruit.com/datasheets/WS2812B.pdf" H 9350 9075 50 0001 L TNN 1 9250 9450 1 0 0 -1 $EndComp Connection ~ 8300 9150 Connection ~ 8300 9750 Wire Wire Line 3300 9450 4200 9450 $Comp L power:GND #PWR0128 U 1 1 614DD771 P 9900 4200 F 0 "#PWR0128" H 9900 3950 50 0001 C CNN F 1 "GND" H 9905 4027 50 0000 C CNN F 2 "" H 9900 4200 50 0001 C CNN F 3 "" H 9900 4200 50 0001 C CNN 1 9900 4200 1 0 0 -1 $EndComp Wire Wire Line 9800 3800 9900 3800 Wire Wire Line 9900 3800 9900 3900 Wire Wire Line 9800 3900 9900 3900 Connection ~ 9900 3900 Wire Wire Line 9900 3900 9900 4000 Wire Wire Line 9900 4000 9800 4000 Connection ~ 9900 4000 Wire Wire Line 9900 4000 9900 4100 Wire Wire Line 9800 4100 9900 4100 Connection ~ 9900 4100 Wire Wire Line 9900 4100 9900 4200 Wire Wire Line 9200 3800 8550 3800 Wire Wire Line 8550 3900 9200 3900 Wire Wire Line 9200 4000 8550 4000 Wire Wire Line 8550 4100 9200 4100 Text Label 8550 3800 0 50 ~ 0 ADDR_0 Text Label 8550 3900 0 50 ~ 0 ADDR_1 Text Label 8550 4000 0 50 ~ 0 ADDR_2 Text Label 8550 4100 0 50 ~ 0 ADDR_3 Wire Wire Line 8250 4100 7600 4100 Wire Wire Line 7600 4000 8250 4000 Wire Wire Line 8250 3900 7600 3900 Wire Wire Line 7600 3800 8250 3800 Text Label 8250 4100 2 50 ~ 0 ADDR_0 Text Label 8250 4000 2 50 ~ 0 ADDR_1 Text Label 8250 3900 2 50 ~ 0 ADDR_2 Text Label 8250 3800 2 50 ~ 0 ADDR_3 $Comp L Logic_LevelTranslator:SN74LV1T34DBV U108 U 1 1 617D4DB9 P 2250 9450 F 0 "U108" H 2200 10000 50 0000 L CNN F 1 "SN74LV1T34DBV" H 2000 9900 50 0000 L CNN F 2 "Package_TO_SOT_SMD:SOT-23-5" H 2900 9200 50 0001 C CNN F 3 "https://www.ti.com/lit/ds/symlink/sn74lv1t34.pdf" H 1850 9250 50 0001 C CNN F 4 "296-37176-1-ND" H 2250 9450 50 0001 C CNN "DK#" 1 2250 9450 1 0 0 -1 $EndComp Wire Wire Line 2550 9450 3050 9450 Wire Wire Line 1850 9050 1850 9150 Connection ~ 1850 9050 Wire Wire Line 2250 9050 2250 9150 Wire Wire Line 1850 9350 1850 9750 Wire Wire Line 1850 9750 2250 9750 Wire Wire Line 1850 9750 1850 9850 Connection ~ 1850 9750 $Comp L Logic_LevelTranslator:SN74LV1T34DBV U106 U 1 1 61A44922 P 2700 6850 F 0 "U106" H 2650 7400 50 0000 L CNN F 1 "SN74LV1T34DBV" H 2450 7300 50 0000 L CNN F 2 "Package_TO_SOT_SMD:SOT-23-5" H 3350 6600 50 0001 C CNN F 3 "https://www.ti.com/lit/ds/symlink/sn74lv1t34.pdf" H 2300 6650 50 0001 C CNN F 4 "296-37176-1-ND" H 2700 6850 50 0001 C CNN "DK#" 1 2700 6850 -1 0 0 -1 $EndComp Wire Wire Line 3750 7150 3700 7150 Wire Wire Line 3700 7150 3700 6850 Wire Wire Line 3700 6850 3000 6850 Wire Wire Line 2700 7150 2700 7850 $Comp L power:GND #PWR0133 U 1 1 61B99D59 P 2700 7850 F 0 "#PWR0133" H 2700 7600 50 0001 C CNN F 1 "GND" H 2705 7677 50 0000 C CNN F 2 "" H 2700 7850 50 0001 C CNN F 3 "" H 2700 7850 50 0001 C CNN 1 2700 7850 1 0 0 -1 $EndComp $Comp L Device:C_Small C105 U 1 1 61B9C2C2 P 2250 6650 F 0 "C105" H 2050 6700 50 0000 L CNN F 1 "0.1uF" H 2000 6600 50 0000 L CNN F 2 "Capacitor_SMD:C_0805_2012Metric" H 2250 6650 50 0001 C CNN F 3 "~" H 2250 6650 50 0001 C CNN F 4 "1276-2449-1-ND" H 2250 6650 50 0001 C CNN "DK#" 1 2250 6650 1 0 0 -1 $EndComp Wire Wire Line 2250 6750 2250 7150 Wire Wire Line 2250 7150 2700 7150 Connection ~ 2700 7150 Wire Wire Line 2250 6550 2700 6550 Connection ~ 2250 6550 Wire Wire Line 1000 6850 1700 6850 Connection ~ 1700 6850 Wire Wire Line 1700 6850 2400 6850 Wire Wire Line 2250 6450 2250 6550 Text Label 5200 4100 0 50 ~ 0 MCP_INT Wire Wire Line 5200 4100 6200 4100 NoConn ~ 6200 4000 Text Label 3950 3850 2 50 ~ 0 MCP_INT Wire Wire Line 3950 3850 3350 3850 Text Notes 1000 8800 0 50 ~ 0 Level-shift 3.3V to 5V for WS2812b LEDs Text Notes 1200 6150 0 50 ~ 0 SP485 accepts 3.3v inputs (2v VIH), so level-shifter is only needed for receive 5v -> 3.3v Text Notes 5150 750 0 50 ~ 0 3.3V supply for Chainlink Driver logic.\nMax ~~20mA per Chainlink Driver when all 6 LEDs are on. $Comp L power:PWR_FLAG #FLG0104 U 1 1 61FD0285 P 1850 4650 F 0 "#FLG0104" H 1850 4725 50 0001 C CNN F 1 "PWR_FLAG" V 1850 4778 50 0000 L CNN F 2 "" H 1850 4650 50 0001 C CNN F 3 "~" H 1850 4650 50 0001 C CNN 1 1850 4650 0 -1 -1 0 $EndComp Text Label 10850 1200 0 50 ~ 0 RELAY_MASTER Wire Wire Line 11500 1200 10850 1200 $Comp L Connector:Screw_Terminal_01x02 J102 U 1 1 62F1BE81 P 11700 1100 F 0 "J102" H 11780 1092 50 0000 L CNN F 1 "RELAY" H 11780 1001 50 0000 L CNN F 2 "ScrewTerminals:Generic-5.08-2P" H 11700 1100 50 0001 C CNN F 3 "~" H 11700 1100 50 0001 C CNN F 4 "EB147A-02-D" H 11700 1100 50 0001 C CNN "DK#" 1 11700 1100 1 0 0 -1 $EndComp $Comp L power:+5V #PWR0106 U 1 1 62FC02C8 P 11450 1050 F 0 "#PWR0106" H 11450 900 50 0001 C CNN F 1 "+5V" H 11465 1223 50 0000 C CNN F 2 "" H 11450 1050 50 0001 C CNN F 3 "" H 11450 1050 50 0001 C CNN 1 11450 1050 1 0 0 -1 $EndComp Wire Wire Line 11450 1050 11450 1100 Wire Wire Line 11450 1100 11500 1100 Text Label 8300 4600 2 50 ~ 0 OUT2_EN Wire Wire Line 7600 4600 8300 4600 NoConn ~ 7600 4300 $Comp L BuckModule:Buck U103 U 1 1 607153AC P 2100 2350 F 0 "U103" H 2137 2675 50 0000 C CNN F 1 "Buck" H 2137 2584 50 0000 C CNN F 2 "Buck:BuckModuleBackSilk" H 2100 2350 50 0001 C CNN F 3 "" H 2100 2350 50 0001 C CNN 1 2100 2350 1 0 0 -1 $EndComp $Comp L power:GND #PWR0112 U 1 1 6071B6B4 P 1150 2550 F 0 "#PWR0112" H 1150 2300 50 0001 C CNN F 1 "GND" H 1155 2377 50 0000 C CNN F 2 "" H 1150 2550 50 0001 C CNN F 3 "" H 1150 2550 50 0001 C CNN 1 1150 2550 1 0 0 -1 $EndComp $Comp L Connector:Screw_Terminal_01x02 J103 U 1 1 6071BCFF P 800 2300 F 0 "J103" H 718 2517 50 0000 C CNN F 1 "Power In" H 718 2426 50 0000 C CNN F 2 "ScrewTerminals:Generic-5.08-2P" H 800 2300 50 0001 C CNN F 3 "~" H 800 2300 50 0001 C CNN F 4 "EB147A-02-D" H 800 2300 50 0001 C CNN "DK#" 1 800 2300 -1 0 0 -1 $EndComp Wire Wire Line 1000 2300 1150 2300 Wire Wire Line 1150 2300 1150 2150 Wire Wire Line 1000 2400 1150 2400 Wire Wire Line 1150 2400 1150 2550 Wire Wire Line 1500 2300 1500 2150 Connection ~ 1150 2300 Wire Wire Line 1150 2300 1500 2300 $Comp L power:PWR_FLAG #FLG0103 U 1 1 6071BCEA P 1500 2150 F 0 "#FLG0103" H 1500 2225 50 0001 C CNN F 1 "PWR_FLAG" H 1500 2300 50 0000 C CNN F 2 "" H 1500 2150 50 0001 C CNN F 3 "~" H 1500 2150 50 0001 C CNN 1 1500 2150 1 0 0 -1 $EndComp $Comp L power:+12V #PWR0108 U 1 1 607BA62E P 1150 2150 F 0 "#PWR0108" H 1150 2000 50 0001 C CNN F 1 "+12V" H 1165 2323 50 0000 C CNN F 2 "" H 1150 2150 50 0001 C CNN F 3 "" H 1150 2150 50 0001 C CNN 1 1150 2150 1 0 0 -1 $EndComp Wire Wire Line 1500 2300 1650 2300 Wire Wire Line 1650 2300 1650 2250 Connection ~ 1500 2300 Wire Wire Line 1150 2400 1650 2400 Wire Wire Line 1650 2400 1650 2450 Connection ~ 1150 2400 Wire Wire Line 2600 2450 2700 2450 Wire Wire Line 2700 2450 2700 2550 $Comp L power:GND #PWR0113 U 1 1 608581F9 P 2700 2550 F 0 "#PWR0113" H 2700 2300 50 0001 C CNN F 1 "GND" H 2705 2377 50 0000 C CNN F 2 "" H 2700 2550 50 0001 C CNN F 3 "" H 2700 2550 50 0001 C CNN 1 2700 2550 1 0 0 -1 $EndComp Wire Wire Line 1000 1200 1150 1200 Wire Wire Line 2600 2250 2700 2250 Text Notes 750 750 0 50 ~ 0 Use either 5V power in, or 12V input with buck module Wire Notes Line 700 600 3200 600 Wire Notes Line 3200 600 3200 2850 Wire Notes Line 3200 2850 700 2850 Wire Notes Line 700 2850 700 600 Wire Notes Line 700 800 3200 800 Wire Notes Line 700 1800 3200 1800 $Comp L power:+5V #PWR0102 U 1 1 609B6538 P 1150 1100 F 0 "#PWR0102" H 1150 950 50 0001 C CNN F 1 "+5V" H 1165 1273 50 0000 C CNN F 2 "" H 1150 1100 50 0001 C CNN F 3 "" H 1150 1100 50 0001 C CNN 1 1150 1100 1 0 0 -1 $EndComp Wire Wire Line 1150 1200 1150 1100 Connection ~ 1150 1200 Wire Wire Line 1150 1200 1500 1200 $Sheet S 14350 1050 1150 700 U 606FA86C F0 "PowerChannel0" 50 F1 "powerChannel.sch" 50 F2 "SDA" I L 14350 1150 50 F3 "SCL" I L 14350 1250 50 F4 "EN" I L 14350 1650 50 F5 "A0" I L 14350 1400 50 F6 "A1" I L 14350 1500 50 F7 "LED_GND" O R 15500 1650 50 $EndSheet Text Label 13650 1150 0 50 ~ 0 SDA Text Label 13650 1250 0 50 ~ 0 SCL Text Label 13650 1650 0 50 ~ 0 OUT0_EN Wire Wire Line 13650 1650 14350 1650 Wire Wire Line 13650 1250 14350 1250 Wire Wire Line 13650 1150 14350 1150 Text Notes 12400 2000 0 50 ~ 0 Table1. INA219 Address Pins and Slave Addresses\nA1 A0 SLAVE ADDRESS\nGND GND 1000000\nGND VS+ 1000001\nGND SDA 1000010\nGND SCL 1000011\nVS+ GND 1000100\nVS+ VS+ 1000101\nVS+ SDA 1000110\nVS+ SCL 1000111\nSDA GND 1001000\nSDA VS+ 1001001\nSDA SDA 1001010\nSDA SCL 1001011\nSCL GND 1001100\nSCL VS+ 1001101\nSCL SDA 1001110\nSCL SCL 1001111 $Comp L power:GND #PWR0110 U 1 1 60A24FAB P 14150 1850 F 0 "#PWR0110" H 14150 1600 50 0001 C CNN F 1 "GND" H 14155 1677 50 0000 C CNN F 2 "" H 14150 1850 50 0001 C CNN F 3 "" H 14150 1850 50 0001 C CNN 1 14150 1850 1 0 0 -1 $EndComp Wire Wire Line 14350 1400 14150 1400 Wire Wire Line 14150 1400 14150 1500 Wire Wire Line 14350 1500 14150 1500 Connection ~ 14150 1500 Wire Wire Line 14150 1500 14150 1850 Text Notes 14350 3450 0 50 ~ 0 I2C ADDR: 0x41 $Sheet S 14350 2500 1150 700 U 60AEE6BF F0 "PowerChannel1" 50 F1 "powerChannel.sch" 50 F2 "SDA" I L 14350 2600 50 F3 "SCL" I L 14350 2700 50 F4 "EN" I L 14350 3100 50 F5 "A0" I L 14350 2850 50 F6 "A1" I L 14350 2950 50 F7 "LED_GND" O R 15500 3100 50 $EndSheet Text Label 13650 2600 0 50 ~ 0 SDA Text Label 13650 2700 0 50 ~ 0 SCL Text Label 13650 3100 0 50 ~ 0 OUT1_EN Wire Wire Line 13650 3100 14350 3100 Wire Wire Line 13650 2700 14350 2700 Wire Wire Line 13650 2600 14350 2600 $Comp L power:GND #PWR0111 U 1 1 60AEE6CB P 14150 3300 F 0 "#PWR0111" H 14150 3050 50 0001 C CNN F 1 "GND" H 14155 3127 50 0000 C CNN F 2 "" H 14150 3300 50 0001 C CNN F 3 "" H 14150 3300 50 0001 C CNN 1 14150 3300 1 0 0 -1 $EndComp Wire Wire Line 14350 2950 14150 2950 Wire Wire Line 14150 2950 14150 3300 Text Notes 14350 4850 0 50 ~ 0 I2C ADDR: 0x42 $Sheet S 14350 3900 1150 700 U 60AFE278 F0 "PowerChannel2" 50 F1 "powerChannel.sch" 50 F2 "SDA" I L 14350 4000 50 F3 "SCL" I L 14350 4100 50 F4 "EN" I L 14350 4500 50 F5 "A0" I L 14350 4250 50 F6 "A1" I L 14350 4350 50 F7 "LED_GND" O R 15500 4500 50 $EndSheet Text Label 13650 4000 0 50 ~ 0 SDA Text Label 13650 4100 0 50 ~ 0 SCL Text Label 13650 4500 0 50 ~ 0 OUT2_EN Wire Wire Line 13650 4500 14350 4500 Wire Wire Line 13650 4100 14350 4100 Wire Wire Line 13650 4000 14250 4000 $Comp L power:GND #PWR0118 U 1 1 60AFE284 P 14150 4700 F 0 "#PWR0118" H 14150 4450 50 0001 C CNN F 1 "GND" H 14155 4527 50 0000 C CNN F 2 "" H 14150 4700 50 0001 C CNN F 3 "" H 14150 4700 50 0001 C CNN 1 14150 4700 1 0 0 -1 $EndComp Wire Wire Line 14350 4350 14150 4350 Wire Wire Line 14150 4350 14150 4700 Text Notes 14350 6150 0 50 ~ 0 I2C ADDR: 0x43 $Sheet S 14350 5200 1150 700 U 60B0E338 F0 "PowerChannel3" 50 F1 "powerChannel.sch" 50 F2 "SDA" I L 14350 5300 50 F3 "SCL" I L 14350 5400 50 F4 "EN" I L 14350 5800 50 F5 "A0" I L 14350 5550 50 F6 "A1" I L 14350 5650 50 F7 "LED_GND" O R 15500 5800 50 $EndSheet Text Label 13650 5300 0 50 ~ 0 SDA Text Label 13650 5400 0 50 ~ 0 SCL Text Label 13650 5800 0 50 ~ 0 OUT3_EN Wire Wire Line 13650 5800 14350 5800 Wire Wire Line 13650 5400 14250 5400 Wire Wire Line 13650 5300 14350 5300 $Comp L power:GND #PWR0119 U 1 1 60B0E344 P 14150 6000 F 0 "#PWR0119" H 14150 5750 50 0001 C CNN F 1 "GND" H 14155 5827 50 0000 C CNN F 2 "" H 14150 6000 50 0001 C CNN F 3 "" H 14150 6000 50 0001 C CNN 1 14150 6000 1 0 0 -1 $EndComp Wire Wire Line 14350 5650 14150 5650 Wire Wire Line 14150 5650 14150 6000 Text Notes 14350 7750 0 50 ~ 0 I2C ADDR: 0x44 $Sheet S 14350 6800 1150 700 U 60B1F5E9 F0 "PowerChannel4" 50 F1 "powerChannel.sch" 50 F2 "SDA" I L 14350 6900 50 F3 "SCL" I L 14350 7000 50 F4 "EN" I L 14350 7400 50 F5 "A0" I L 14350 7150 50 F6 "A1" I L 14350 7250 50 F7 "LED_GND" O R 15500 7400 50 $EndSheet Text Label 13650 6900 0 50 ~ 0 SDA Text Label 13650 7000 0 50 ~ 0 SCL Text Label 13650 7400 0 50 ~ 0 OUT4_EN Wire Wire Line 13650 7400 14350 7400 Wire Wire Line 13650 7000 14350 7000 Wire Wire Line 13650 6900 14350 6900 $Comp L power:GND #PWR0127 U 1 1 60B1F5F5 P 14250 7600 F 0 "#PWR0127" H 14250 7350 50 0001 C CNN F 1 "GND" H 14255 7427 50 0000 C CNN F 2 "" H 14250 7600 50 0001 C CNN F 3 "" H 14250 7600 50 0001 C CNN 1 14250 7600 1 0 0 -1 $EndComp Wire Wire Line 14350 2850 14150 2850 Wire Wire Line 14150 2850 14150 2400 $Comp L power:+3.3V #PWR0103 U 1 1 60B46375 P 14150 2400 F 0 "#PWR0103" H 14150 2250 50 0001 C CNN F 1 "+3.3V" H 14165 2573 50 0000 C CNN F 2 "" H 14150 2400 50 0001 C CNN F 3 "" H 14150 2400 50 0001 C CNN 1 14150 2400 1 0 0 -1 $EndComp Wire Wire Line 14350 4250 14250 4250 Wire Wire Line 14250 4250 14250 4000 Connection ~ 14250 4000 Wire Wire Line 14250 4000 14350 4000 Wire Wire Line 14350 5550 14250 5550 Wire Wire Line 14250 5550 14250 5400 Connection ~ 14250 5400 Wire Wire Line 14250 5400 14350 5400 Wire Wire Line 14350 7150 14250 7150 $Comp L power:+3.3V #PWR0121 U 1 1 60B6940C P 14150 6700 F 0 "#PWR0121" H 14150 6550 50 0001 C CNN F 1 "+3.3V" H 14165 6873 50 0000 C CNN F 2 "" H 14150 6700 50 0001 C CNN F 3 "" H 14150 6700 50 0001 C CNN 1 14150 6700 1 0 0 -1 $EndComp Wire Wire Line 14150 7250 14350 7250 Wire Wire Line 14250 7150 14250 7600 Wire Wire Line 14150 6700 14150 7250 $Comp L Mechanical:MountingHole_Pad H101 U 1 1 606EB095 P 10650 9600 F 0 "H101" H 10750 9649 50 0000 L CNN F 1 "MountingHole_Pad" H 10750 9558 50 0000 L CNN F 2 "MountingHole:MountingHole_3.2mm_M3_ISO7380_Pad" H 10650 9600 50 0001 C CNN F 3 "~" H 10650 9600 50 0001 C CNN 1 10650 9600 1 0 0 -1 $EndComp $Comp L Mechanical:MountingHole_Pad H103 U 1 1 60731A69 P 11050 9600 F 0 "H103" H 11150 9649 50 0000 L CNN F 1 "MountingHole_Pad" H 11150 9558 50 0000 L CNN F 2 "MountingHole:MountingHole_3.2mm_M3_ISO7380_Pad" H 11050 9600 50 0001 C CNN F 3 "~" H 11050 9600 50 0001 C CNN 1 11050 9600 1 0 0 -1 $EndComp $Comp L Mechanical:MountingHole_Pad H104 U 1 1 60742CE7 P 11250 9600 F 0 "H104" H 11350 9649 50 0000 L CNN F 1 "MountingHole_Pad" H 11350 9558 50 0000 L CNN F 2 "MountingHole:MountingHole_3.2mm_M3_ISO7380_Pad" H 11250 9600 50 0001 C CNN F 3 "~" H 11250 9600 50 0001 C CNN 1 11250 9600 1 0 0 -1 $EndComp $Comp L Device:D_Schottky_Small D107 U 1 1 6079E20C P 2800 2250 F 0 "D107" H 2800 2043 50 0000 C CNN F 1 "2A 500mV" H 2800 2134 50 0000 C CNN F 2 "Diode_SMD:D_SOD-128" V 2800 2250 50 0001 C CNN F 3 "~" V 2800 2250 50 0001 C CNN F 4 "1727-1730-1-ND" H 2800 2250 50 0001 C CNN "DK#" 1 2800 2250 -1 0 0 1 $EndComp Wire Wire Line 2900 2250 3050 2250 Wire Wire Line 3050 2250 3050 2150 Text Label 15950 1650 2 50 ~ 0 LED_GND Wire Wire Line 15950 1650 15500 1650 Text Label 15950 3100 2 50 ~ 0 LED_GND Wire Wire Line 15950 3100 15500 3100 Text Label 15950 5800 2 50 ~ 0 LED_GND Wire Wire Line 15950 5800 15500 5800 Text Label 15950 4500 2 50 ~ 0 LED_GND Wire Wire Line 15950 4500 15500 4500 Text Label 15950 7400 2 50 ~ 0 LED_GND Wire Wire Line 15950 7400 15500 7400 Text Label 14050 8550 0 50 ~ 0 LED_GND $Comp L power:GND #PWR0141 U 1 1 608A06A5 P 15000 8800 F 0 "#PWR0141" H 15000 8550 50 0001 C CNN F 1 "GND" H 15005 8627 50 0000 C CNN F 2 "" H 15000 8800 50 0001 C CNN F 3 "" H 15000 8800 50 0001 C CNN 1 15000 8800 1 0 0 -1 $EndComp $Comp L Jumper:Jumper_3_Bridged12 JP101 U 1 1 608A0DD3 P 15000 8550 F 0 "JP101" H 15000 8735 50 0000 C CNN F 1 "LEDs" H 15000 8644 50 0000 C CNN F 2 "ModifiedSymbols:PinHeader_1x03_P2.54mm_Vertical_SolderJumper" H 15000 8550 50 0001 C CNN F 3 "~" H 15000 8550 50 0001 C CNN 1 15000 8550 1 0 0 -1 $EndComp Wire Wire Line 14050 8550 14750 8550 Wire Wire Line 15000 8700 15000 8800 $Comp L power:GND #PWR0142 U 1 1 606F96E9 P 10950 9800 F 0 "#PWR0142" H 10950 9550 50 0001 C CNN F 1 "GND" H 10955 9627 50 0000 C CNN F 2 "" H 10950 9800 50 0001 C CNN F 3 "" H 10950 9800 50 0001 C CNN 1 10950 9800 1 0 0 -1 $EndComp $Comp L Mechanical:MountingHole_Pad H102 U 1 1 60720669 P 10850 9600 F 0 "H102" H 10950 9649 50 0000 L CNN F 1 "MountingHole_Pad" H 10950 9558 50 0000 L CNN F 2 "MountingHole:MountingHole_3.2mm_M3_ISO7380_Pad" H 10850 9600 50 0001 C CNN F 3 "~" H 10850 9600 50 0001 C CNN 1 10850 9600 1 0 0 -1 $EndComp Wire Wire Line 10650 9700 10850 9700 Connection ~ 10850 9700 Wire Wire Line 10850 9700 10950 9700 Connection ~ 11050 9700 Wire Wire Line 11050 9700 11250 9700 Wire Wire Line 10950 9800 10950 9700 Connection ~ 10950 9700 Wire Wire Line 10950 9700 11050 9700 $Comp L Connector:Conn_01x06_Male J111 U 1 1 607902DC P 10350 1950 F 0 "J111" H 10322 1832 50 0000 R CNN F 1 "Conn_01x06_Male" H 10322 1923 50 0000 R CNN F 2 "Connector_PinHeader_2.54mm:PinHeader_1x06_P2.54mm_Vertical" H 10350 1950 50 0001 C CNN F 3 "~" H 10350 1950 50 0001 C CNN 1 10350 1950 -1 0 0 1 $EndComp Wire Wire Line 9650 1650 10150 1650 Wire Wire Line 9650 1750 10150 1750 Wire Wire Line 9650 1850 10150 1850 Wire Wire Line 9650 1950 10150 1950 Wire Wire Line 9650 2050 10150 2050 Wire Wire Line 9650 2150 10150 2150 $Comp L Connector:Conn_01x06_Male J112 U 1 1 6082E04D P 10750 1950 F 0 "J112" H 10722 1832 50 0000 R CNN F 1 "Conn_01x06_Male" H 10722 1923 50 0000 R CNN F 2 "Connector_PinHeader_2.54mm:PinHeader_1x06_P2.54mm_Vertical" H 10750 1950 50 0001 C CNN F 3 "~" H 10750 1950 50 0001 C CNN 1 10750 1950 -1 0 0 1 $EndComp $Comp L power:+5V #PWR0143 U 1 1 6082EB4F P 10550 1250 F 0 "#PWR0143" H 10550 1100 50 0001 C CNN F 1 "+5V" H 10565 1423 50 0000 C CNN F 2 "" H 10550 1250 50 0001 C CNN F 3 "" H 10550 1250 50 0001 C CNN 1 10550 1250 1 0 0 -1 $EndComp Wire Wire Line 10550 1250 10550 1650 Connection ~ 10550 1650 Wire Wire Line 10550 1650 10550 1750 Connection ~ 10550 1750 Wire Wire Line 10550 1750 10550 1850 Connection ~ 10550 1850 Wire Wire Line 10550 1850 10550 1950 Connection ~ 10550 1950 Wire Wire Line 10550 1950 10550 2050 Connection ~ 10550 2050 Wire Wire Line 10550 2050 10550 2150 Wire Wire Line 9250 2350 9250 2450 Wire Wire Line 8850 2150 8150 2150 Text Label 8150 2150 0 50 ~ 0 MISC5 Wire Wire Line 8850 2050 8150 2050 Text Label 8150 2050 0 50 ~ 0 MISC4 Wire Wire Line 8850 1950 8150 1950 Text Label 8150 1950 0 50 ~ 0 MISC3 Wire Wire Line 8850 1850 8150 1850 Text Label 8150 1850 0 50 ~ 0 MISC2 Wire Wire Line 8850 1750 8150 1750 Text Label 8150 1750 0 50 ~ 0 MISC1 Wire Wire Line 8850 1650 8150 1650 Text Label 8150 1650 0 50 ~ 0 MISC0 Wire Wire Line 8300 3400 7600 3400 Text Label 8300 3400 2 50 ~ 0 MISC5 Wire Wire Line 8300 3500 7600 3500 Text Label 8300 3500 2 50 ~ 0 MISC4 Wire Wire Line 8300 3600 7600 3600 Text Label 8300 3600 2 50 ~ 0 MISC3 Wire Wire Line 8300 3700 7600 3700 Text Label 8300 3700 2 50 ~ 0 MISC2 Wire Wire Line 8300 4900 7600 4900 Text Label 8300 4900 2 50 ~ 0 MISC1 Wire Wire Line 8300 5000 7600 5000 Text Label 8300 5000 2 50 ~ 0 MISC0 $Comp L Transistor_Array:ULN2003A U102 U 1 1 60BF5C71 P 9250 1750 F 0 "U102" H 9250 2417 50 0000 C CNN F 1 "TPL7407L" H 9250 2326 50 0000 C CNN F 2 "ModifiedSymbols:SOIC-16_3.9x9.9mm_P1.27mm_silk" H 9300 1200 50 0001 L CNN F 3 "" H 9350 1550 50 0001 C CNN F 4 "296-51862-1-ND" H 9250 1750 50 0001 C CNN "DK#" 1 9250 1750 1 0 0 -1 $EndComp $Comp L Device:C_Small C114 U 1 1 60A2AB1E P 7200 3000 F 0 "C114" V 6971 3000 50 0000 C CNN F 1 "0.1uF" V 7062 3000 50 0000 C CNN F 2 "Capacitor_SMD:C_0805_2012Metric" H 7200 3000 50 0001 C CNN F 3 "~" H 7200 3000 50 0001 C CNN F 4 "1276-2449-1-ND" H 7200 3000 50 0001 C CNN "DK#" 1 7200 3000 0 1 1 0 $EndComp $Comp L power:GND #PWR0144 U 1 1 60A2C0EA P 7450 3050 F 0 "#PWR0144" H 7450 2800 50 0001 C CNN F 1 "GND" H 7455 2877 50 0000 C CNN F 2 "" H 7450 3050 50 0001 C CNN F 3 "" H 7450 3050 50 0001 C CNN 1 7450 3050 1 0 0 -1 $EndComp Wire Wire Line 7300 3000 7450 3000 Wire Wire Line 7450 3000 7450 3050 Wire Wire Line 7100 3000 6900 3000 Connection ~ 6900 3000 Wire Wire Line 6900 3000 6900 2950 Connection ~ 1850 4650 Wire Wire Line 1850 4650 1850 4750 Wire Wire Line 1000 7450 1750 7450 Wire Wire Line 1700 7650 1800 7650 Wire Wire Line 1700 7650 1700 6850 Wire Wire Line 1750 7450 1750 7750 Wire Wire Line 1750 7750 1800 7750 Connection ~ 1750 7450 Wire Wire Line 1750 7450 3750 7450 Wire Notes Line 12350 500 12350 9250 NoConn ~ 15250 8550 NoConn ~ 3350 3950 NoConn ~ 2350 4250 NoConn ~ 2350 4450 Wire Wire Line 5000 2700 5150 2700 Wire Wire Line 4850 2700 5000 2700 Connection ~ 5000 2700 $Comp L power:+3.3V #PWR0115 U 1 1 60E226B9 P 5000 2700 F 0 "#PWR0115" H 5000 2550 50 0001 C CNN F 1 "+3.3V" H 5015 2873 50 0000 C CNN F 2 "" H 5000 2700 50 0001 C CNN F 3 "" H 5000 2700 50 0001 C CNN 1 5000 2700 1 0 0 -1 $EndComp NoConn ~ 3350 3650 $Comp L Connector_Generic:Conn_02x04_Odd_Even J108 U 1 1 61826671 P 7800 7300 F 0 "J108" H 7850 7617 50 0000 C CNN F 1 "Conn_02x04_Odd_Even" H 7850 7526 50 0000 C CNN F 2 "ModifiedSymbols:IDC-Header_2x04_P2.54mm_Vertical" H 7800 7300 50 0001 C CNN F 3 "~" H 7800 7300 50 0001 C CNN 1 7800 7300 1 0 0 -1 $EndComp Wire Wire Line 8100 7600 8100 7500 Connection ~ 8100 7300 Wire Wire Line 8100 7300 8100 7200 Connection ~ 8100 7400 Wire Wire Line 8100 7400 8100 7300 Connection ~ 8100 7500 Wire Wire Line 8100 7500 8100 7400 $EndSCHEMATC ================================================ FILE: electronics/chainlinkBase/fp-lib-table ================================================ (fp_lib_table (lib (name INA219)(type KiCad)(uri ${KIPRJMOD}/../lib/INA219.pretty)(options "")(descr "")) (lib (name ESP32)(type KiCad)(uri ${KIPRJMOD}/../lib/ESP32.pretty)(options "")(descr "")) (lib (name ModifiedSymbols)(type KiCad)(uri ${KIPRJMOD}/../lib/ModifiedSymbols.pretty)(options "")(descr "")) (lib (name VN7007ALHTR)(type KiCad)(uri ${KIPRJMOD}/../lib/VN7007ALHTR.pretty)(options "")(descr "")) (lib (name BK-6013)(type KiCad)(uri ${KIPRJMOD}/../lib/BK-6013.pretty)(options "")(descr "")) (lib (name ScrewTerminals)(type KiCad)(uri ${KIPRJMOD}/../lib/ScrewTerminals.pretty)(options "")(descr "")) (lib (name Buck)(type KiCad)(uri ${KIPRJMOD}/../lib/Buck.pretty)(options "")(descr "")) (lib (name Dummy)(type KiCad)(uri ${KIPRJMOD}/../lib/Dummy.pretty)(options "")(descr "")) ) ================================================ FILE: electronics/chainlinkBase/powerChannel.sch ================================================ EESchema Schematic File Version 4 EELAYER 30 0 EELAYER END $Descr A4 11693 8268 encoding utf-8 Sheet 3 6 Title "" Date "" Rev "" Comp "" Comment1 "" Comment2 "" Comment3 "" Comment4 "" $EndDescr $Comp L Device:C_Small C? U 1 1 60718742 P 2300 1850 AR Path="/60718742" Ref="C?" Part="1" AR Path="/606FA86C/60718742" Ref="C201" Part="1" AR Path="/6077A779/60718742" Ref="C?" Part="1" AR Path="/60AEE6BF/60718742" Ref="C301" Part="1" AR Path="/60AFE278/60718742" Ref="C401" Part="1" AR Path="/60B0E338/60718742" Ref="C501" Part="1" AR Path="/60B1F5E9/60718742" Ref="C601" Part="1" F 0 "C601" H 2208 1804 50 0000 R CNN F 1 "0.1uF" H 2208 1895 50 0000 R CNN F 2 "Capacitor_SMD:C_0805_2012Metric" H 2300 1850 50 0001 C CNN F 3 "~" H 2300 1850 50 0001 C CNN F 4 "1276-2449-1-ND" H 2300 1850 50 0001 C CNN "DK#" 1 2300 1850 -1 0 0 1 $EndComp $Comp L Device:LED_Small D? U 1 1 6071874C P 4650 4650 AR Path="/6071874C" Ref="D?" Part="1" AR Path="/606FA86C/6071874C" Ref="D202" Part="1" AR Path="/6077A779/6071874C" Ref="D?" Part="1" AR Path="/60AEE6BF/6071874C" Ref="D302" Part="1" AR Path="/60AFE278/6071874C" Ref="D402" Part="1" AR Path="/60B0E338/6071874C" Ref="D502" Part="1" AR Path="/60B1F5E9/6071874C" Ref="D602" Part="1" F 0 "D602" V 4700 4800 50 0000 R CNN F 1 "Red" V 4600 4850 50 0000 R CNN F 2 "ModifiedSymbols:LED_0805_2012Metric_Silkscreen" V 4650 4650 50 0001 C CNN F 3 "~" V 4650 4650 50 0001 C CNN F 4 "475-1278-1-ND" H 4650 4650 50 0001 C CNN "DK#" 1 4650 4650 0 -1 -1 0 $EndComp $Comp L power:GND #PWR? U 1 1 60718752 P 2400 5100 AR Path="/60718752" Ref="#PWR?" Part="1" AR Path="/606FA86C/60718752" Ref="#PWR0205" Part="1" AR Path="/6077A779/60718752" Ref="#PWR?" Part="1" AR Path="/60AEE6BF/60718752" Ref="#PWR0305" Part="1" AR Path="/60AFE278/60718752" Ref="#PWR0405" Part="1" AR Path="/60B0E338/60718752" Ref="#PWR0505" Part="1" AR Path="/60B1F5E9/60718752" Ref="#PWR0605" Part="1" F 0 "#PWR0605" H 2400 4850 50 0001 C CNN F 1 "GND" H 2405 4927 50 0000 C CNN F 2 "" H 2400 5100 50 0001 C CNN F 3 "" H 2400 5100 50 0001 C CNN 1 2400 5100 1 0 0 -1 $EndComp $Comp L Device:R_Small R? U 1 1 60718758 P 4650 4900 AR Path="/60718758" Ref="R?" Part="1" AR Path="/606FA86C/60718758" Ref="R205" Part="1" AR Path="/6077A779/60718758" Ref="R?" Part="1" AR Path="/60AEE6BF/60718758" Ref="R305" Part="1" AR Path="/60AFE278/60718758" Ref="R405" Part="1" AR Path="/60B0E338/60718758" Ref="R505" Part="1" AR Path="/60B1F5E9/60718758" Ref="R605" Part="1" F 0 "R605" H 4750 4850 50 0000 C CNN F 1 "2k" H 4750 4950 50 0000 C CNN F 2 "Resistor_SMD:R_0805_2012Metric" H 4650 4900 50 0001 C CNN F 3 "~" H 4650 4900 50 0001 C CNN F 4 "RMCF0805JT2K00CT-ND" H 4650 4900 50 0001 C CNN "DK#" 1 4650 4900 -1 0 0 1 $EndComp Wire Wire Line 4650 4750 4650 4800 $Comp L Device:C_Small C? U 1 1 6071875F P 3550 3900 AR Path="/6071875F" Ref="C?" Part="1" AR Path="/606FA86C/6071875F" Ref="C202" Part="1" AR Path="/6077A779/6071875F" Ref="C?" Part="1" AR Path="/60AEE6BF/6071875F" Ref="C302" Part="1" AR Path="/60AFE278/6071875F" Ref="C402" Part="1" AR Path="/60B0E338/6071875F" Ref="C502" Part="1" AR Path="/60B1F5E9/6071875F" Ref="C602" Part="1" F 0 "C602" V 3350 3800 50 0000 L CNN F 1 "0.1uF" V 3450 3800 50 0000 L CNN F 2 "Capacitor_SMD:C_0805_2012Metric" H 3550 3900 50 0001 C CNN F 3 "~" H 3550 3900 50 0001 C CNN F 4 "1276-2449-1-ND" H 3550 3900 50 0001 C CNN "DK#" 1 3550 3900 0 1 1 0 $EndComp Connection ~ 2400 5050 Wire Wire Line 2400 5050 2400 5100 Text Notes 3650 2100 0 50 ~ 0 e.g. CFG0612-FX-R010ELF $Comp L power:+3.3V #PWR? U 1 1 6071876B P 3000 1550 AR Path="/6071876B" Ref="#PWR?" Part="1" AR Path="/606FA86C/6071876B" Ref="#PWR0201" Part="1" AR Path="/6077A779/6071876B" Ref="#PWR?" Part="1" AR Path="/60AEE6BF/6071876B" Ref="#PWR0301" Part="1" AR Path="/60AFE278/6071876B" Ref="#PWR0401" Part="1" AR Path="/60B0E338/6071876B" Ref="#PWR0501" Part="1" AR Path="/60B1F5E9/6071876B" Ref="#PWR0601" Part="1" F 0 "#PWR0601" H 3000 1400 50 0001 C CNN F 1 "+3.3V" H 3015 1723 50 0000 C CNN F 2 "" H 3000 1550 50 0001 C CNN F 3 "" H 3000 1550 50 0001 C CNN 1 3000 1550 1 0 0 -1 $EndComp Wire Wire Line 3000 1550 3000 1650 $Comp L power:GND #PWR? U 1 1 60718772 P 3000 2700 AR Path="/60718772" Ref="#PWR?" Part="1" AR Path="/606FA86C/60718772" Ref="#PWR0202" Part="1" AR Path="/6077A779/60718772" Ref="#PWR?" Part="1" AR Path="/60AEE6BF/60718772" Ref="#PWR0302" Part="1" AR Path="/60AFE278/60718772" Ref="#PWR0402" Part="1" AR Path="/60B0E338/60718772" Ref="#PWR0502" Part="1" AR Path="/60B1F5E9/60718772" Ref="#PWR0602" Part="1" F 0 "#PWR0602" H 3000 2450 50 0001 C CNN F 1 "GND" H 3005 2527 50 0000 C CNN F 2 "" H 3000 2700 50 0001 C CNN F 3 "" H 3000 2700 50 0001 C CNN 1 3000 2700 1 0 0 -1 $EndComp Wire Wire Line 3000 2650 3000 2700 Wire Wire Line 2600 2050 1500 2050 Wire Wire Line 2600 2150 1500 2150 $Comp L Device:R_Small R? U 1 1 6071877C P 3700 2250 AR Path="/6071877C" Ref="R?" Part="1" AR Path="/606FA86C/6071877C" Ref="R201" Part="1" AR Path="/6077A779/6071877C" Ref="R?" Part="1" AR Path="/60AEE6BF/6071877C" Ref="R301" Part="1" AR Path="/60AFE278/6071877C" Ref="R401" Part="1" AR Path="/60B0E338/6071877C" Ref="R501" Part="1" AR Path="/60B1F5E9/6071877C" Ref="R601" Part="1" F 0 "R601" H 3650 2600 50 0000 L CNN F 1 "0.01R 1% 1W" H 3650 2500 50 0000 L CNN F 2 "Resistor_SMD:R_0612_1632Metric" H 3700 2250 50 0001 C CNN F 3 "~" H 3700 2250 50 0001 C CNN F 4 "CFG0612-FX-R010ELFCT-ND" H 3700 2250 50 0001 C CNN "DK#" 1 3700 2250 1 0 0 -1 $EndComp Text Notes 4850 2100 0 50 ~ 0 Red, 10A, 0.008 Ohm typ\ne.g. 0297010.WXNV $Comp L Device:Fuse F? U 1 1 60718784 P 5000 2150 AR Path="/60718784" Ref="F?" Part="1" AR Path="/606FA86C/60718784" Ref="F201" Part="1" AR Path="/6077A779/60718784" Ref="F?" Part="1" AR Path="/60AEE6BF/60718784" Ref="F301" Part="1" AR Path="/60AFE278/60718784" Ref="F401" Part="1" AR Path="/60B0E338/60718784" Ref="F501" Part="1" AR Path="/60B1F5E9/60718784" Ref="F601" Part="1" F 0 "F601" V 5350 2150 50 0000 L CNN F 1 "Fuse Holder BK-6013" V 5250 1400 50 0000 L CNN F 2 "BK-6013:BK-6013" V 4930 2150 50 0001 C CNN F 3 "~" H 5000 2150 50 0001 C CNN F 4 "BK-6013-ND" H 5000 2150 50 0001 C CNN "DK#" 1 5000 2150 0 -1 -1 0 $EndComp Wire Wire Line 3000 1650 2300 1650 Wire Wire Line 2300 1650 2300 1750 Connection ~ 3000 1650 Wire Wire Line 3000 1650 3000 1850 Wire Wire Line 2300 1950 2300 2650 $Comp L Device:R_Small R? U 1 1 6071879D P 2150 4450 AR Path="/6071879D" Ref="R?" Part="1" AR Path="/606FA86C/6071879D" Ref="R203" Part="1" AR Path="/6077A779/6071879D" Ref="R?" Part="1" AR Path="/60AEE6BF/6071879D" Ref="R303" Part="1" AR Path="/60AFE278/6071879D" Ref="R403" Part="1" AR Path="/60B0E338/6071879D" Ref="R503" Part="1" AR Path="/60B1F5E9/6071879D" Ref="R603" Part="1" F 0 "R603" V 2050 4450 50 0000 R CNN F 1 "15k" V 2050 4600 50 0000 R CNN F 2 "Resistor_SMD:R_0805_2012Metric" H 2150 4450 50 0001 C CNN F 3 "~" H 2150 4450 50 0001 C CNN F 4 "RMCF0805JT15K0CT-ND" H 2150 4450 50 0001 C CNN "DK#" 1 2150 4450 0 1 1 0 $EndComp $Comp L Connector:Screw_Terminal_01x02 J? U 1 1 607187A4 P 1900 750 AR Path="/607187A4" Ref="J?" Part="1" AR Path="/606FA86C/607187A4" Ref="J201" Part="1" AR Path="/6077A779/607187A4" Ref="J?" Part="1" AR Path="/60AEE6BF/607187A4" Ref="J301" Part="1" AR Path="/60AFE278/607187A4" Ref="J401" Part="1" AR Path="/60B0E338/607187A4" Ref="J501" Part="1" AR Path="/60B1F5E9/607187A4" Ref="J601" Part="1" F 0 "J601" H 1800 550 50 0000 L CNN F 1 "CHANNEL" H 1950 550 50 0000 L CNN F 2 "ScrewTerminals:Generic-5.08-2P" H 1900 750 50 0001 C CNN F 3 "~" H 1900 750 50 0001 C CNN F 4 "EB147A-02-D" H 1900 750 50 0001 C CNN "DK#" 1 1900 750 1 0 0 -1 $EndComp $Comp L power:PWR_FLAG #FLG? U 1 1 607187AC P 3450 2350 AR Path="/607187AC" Ref="#FLG?" Part="1" AR Path="/606FA86C/607187AC" Ref="#FLG0201" Part="1" AR Path="/6077A779/607187AC" Ref="#FLG?" Part="1" AR Path="/60AEE6BF/607187AC" Ref="#FLG0301" Part="1" AR Path="/60AFE278/607187AC" Ref="#FLG0401" Part="1" AR Path="/60B0E338/607187AC" Ref="#FLG0501" Part="1" AR Path="/60B1F5E9/607187AC" Ref="#FLG0601" Part="1" F 0 "#FLG0601" H 3450 2425 50 0001 C CNN F 1 "PWR_FLAG" H 3300 2500 50 0000 C CNN F 2 "" H 3450 2350 50 0001 C CNN F 3 "~" H 3450 2350 50 0001 C CNN 1 3450 2350 -1 0 0 1 $EndComp $Comp L VN7007ALHTR:VN7007ALH U? U 1 1 607187B2 P 3200 4550 AR Path="/607187B2" Ref="U?" Part="1" AR Path="/606FA86C/607187B2" Ref="U202" Part="1" AR Path="/6077A779/607187B2" Ref="U?" Part="1" AR Path="/60AEE6BF/607187B2" Ref="U302" Part="1" AR Path="/60AFE278/607187B2" Ref="U402" Part="1" AR Path="/60B0E338/607187B2" Ref="U502" Part="1" AR Path="/60B1F5E9/607187B2" Ref="U602" Part="1" F 0 "U602" H 2800 4950 50 0000 C CNN F 1 "VN7007ALH" H 2850 4850 50 0000 C CNN F 2 "VN7007ALHTR:VN7007ALHTR" H 3200 4550 50 0001 C CNN F 3 "" H 3200 4550 50 0001 C CNN F 4 "497-16868-1-ND" H 3200 4550 50 0001 C CNN "DK#" 1 3200 4550 1 0 0 -1 $EndComp Wire Wire Line 2400 5050 2600 5050 Wire Wire Line 3800 4650 3800 4550 Connection ~ 3800 4450 Connection ~ 3800 4550 Wire Wire Line 3800 4550 3800 4450 $Comp L Device:R_Small R? U 1 1 607187BF P 2600 4900 AR Path="/607187BF" Ref="R?" Part="1" AR Path="/606FA86C/607187BF" Ref="R206" Part="1" AR Path="/6077A779/607187BF" Ref="R?" Part="1" AR Path="/60AEE6BF/607187BF" Ref="R306" Part="1" AR Path="/60AFE278/607187BF" Ref="R406" Part="1" AR Path="/60B0E338/607187BF" Ref="R506" Part="1" AR Path="/60B1F5E9/607187BF" Ref="R606" Part="1" F 0 "R606" H 2750 4850 50 0000 R CNN F 1 "1k" H 2750 4950 50 0000 R CNN F 2 "Resistor_SMD:R_0805_2012Metric" H 2600 4900 50 0001 C CNN F 3 "~" H 2600 4900 50 0001 C CNN F 4 "RMCF0805JT1K00CT-ND" H 2600 4900 50 0001 C CNN "DK#" 1 2600 4900 -1 0 0 1 $EndComp Wire Wire Line 2600 4750 2600 4800 Wire Wire Line 2600 5000 2600 5050 Connection ~ 2600 5050 Wire Wire Line 2600 5050 3200 5050 $Comp L Device:R_Small R? U 1 1 607187C9 P 2400 4700 AR Path="/607187C9" Ref="R?" Part="1" AR Path="/606FA86C/607187C9" Ref="R204" Part="1" AR Path="/6077A779/607187C9" Ref="R?" Part="1" AR Path="/60AEE6BF/607187C9" Ref="R304" Part="1" AR Path="/60AFE278/607187C9" Ref="R404" Part="1" AR Path="/60B0E338/607187C9" Ref="R504" Part="1" AR Path="/60B1F5E9/607187C9" Ref="R604" Part="1" F 0 "R604" H 2600 4650 50 0000 R CNN F 1 "15k" H 2600 4750 50 0000 R CNN F 2 "Resistor_SMD:R_0805_2012Metric" H 2400 4700 50 0001 C CNN F 3 "~" H 2400 4700 50 0001 C CNN F 4 "RMCF0805JT15K0CT-ND" H 2400 4700 50 0001 C CNN "DK#" 1 2400 4700 -1 0 0 1 $EndComp Wire Wire Line 2400 4600 2400 4550 Wire Wire Line 2400 4550 2600 4550 Wire Wire Line 2400 4800 2400 5050 Wire Wire Line 2250 4450 2600 4450 Wire Wire Line 4650 5000 4650 5100 $Comp L Device:LED_Small D? U 1 1 607187E7 P 4650 2500 AR Path="/607187E7" Ref="D?" Part="1" AR Path="/606FA86C/607187E7" Ref="D201" Part="1" AR Path="/6077A779/607187E7" Ref="D?" Part="1" AR Path="/60AEE6BF/607187E7" Ref="D301" Part="1" AR Path="/60AFE278/607187E7" Ref="D401" Part="1" AR Path="/60B0E338/607187E7" Ref="D501" Part="1" AR Path="/60B1F5E9/607187E7" Ref="D601" Part="1" F 0 "D601" V 4700 2650 50 0000 R CNN F 1 "Red" V 4600 2700 50 0000 R CNN F 2 "ModifiedSymbols:LED_0805_2012Metric_Silkscreen" V 4650 2500 50 0001 C CNN F 3 "~" V 4650 2500 50 0001 C CNN F 4 "475-1278-1-ND" H 4650 2500 50 0001 C CNN "DK#" 1 4650 2500 0 -1 -1 0 $EndComp $Comp L Device:R_Small R? U 1 1 607187ED P 4650 2750 AR Path="/607187ED" Ref="R?" Part="1" AR Path="/606FA86C/607187ED" Ref="R202" Part="1" AR Path="/6077A779/607187ED" Ref="R?" Part="1" AR Path="/60AEE6BF/607187ED" Ref="R302" Part="1" AR Path="/60AFE278/607187ED" Ref="R402" Part="1" AR Path="/60B0E338/607187ED" Ref="R502" Part="1" AR Path="/60B1F5E9/607187ED" Ref="R602" Part="1" F 0 "R602" H 4750 2700 50 0000 C CNN F 1 "2k" H 4750 2800 50 0000 C CNN F 2 "Resistor_SMD:R_0805_2012Metric" H 4650 2750 50 0001 C CNN F 3 "~" H 4650 2750 50 0001 C CNN F 4 "RMCF0805JT2K00CT-ND" H 4650 2750 50 0001 C CNN "DK#" 1 4650 2750 -1 0 0 1 $EndComp Wire Wire Line 4650 2600 4650 2650 Wire Wire Line 4650 2850 4650 2950 Wire Wire Line 4650 2400 4650 2150 Text HLabel 1500 2050 0 50 Input ~ 0 SDA Text HLabel 1500 2150 0 50 Input ~ 0 SCL Text HLabel 1500 2350 0 50 Input ~ 0 A1 Text HLabel 1500 2450 0 50 Input ~ 0 A0 Wire Wire Line 1500 2450 2600 2450 Wire Wire Line 1500 2350 2600 2350 Wire Wire Line 2300 2650 3000 2650 Text Label 1150 750 0 50 ~ 0 POWER_IN Text Label 1150 850 0 50 ~ 0 POWER_OUT Wire Wire Line 1150 750 1700 750 Wire Wire Line 1700 850 1150 850 Connection ~ 4650 2150 Wire Wire Line 4650 2150 4850 2150 Connection ~ 3000 2650 $Comp L Analog_ADC:INA219BxD U? U 1 1 6071873C P 3000 2250 AR Path="/6071873C" Ref="U?" Part="1" AR Path="/606FA86C/6071873C" Ref="U201" Part="1" AR Path="/6077A779/6071873C" Ref="U?" Part="1" AR Path="/60AEE6BF/6071873C" Ref="U301" Part="1" AR Path="/60AFE278/6071873C" Ref="U401" Part="1" AR Path="/60B0E338/6071873C" Ref="U501" Part="1" AR Path="/60B1F5E9/6071873C" Ref="U601" Part="1" F 0 "U601" H 2900 2800 50 0000 C CNN F 1 "INA219BxD" H 2800 2700 50 0000 C CNN F 2 "Package_SO:SOIC-8_3.9x4.9mm_P1.27mm" H 3800 1900 50 0001 C CNN F 3 "http://www.ti.com/lit/ds/symlink/ina219.pdf" H 3350 2150 50 0001 C CNN F 4 "296-27899-1-ND" H 3000 2250 50 0001 C CNN "DK#" 1 3000 2250 -1 0 0 -1 $EndComp Text Label 3400 3200 0 50 ~ 0 POWER_MONITORED Connection ~ 3450 2350 Wire Wire Line 3450 2350 3400 2350 Text Label 6450 2150 2 50 ~ 0 POWER_IN Wire Wire Line 6450 2150 5150 2150 Connection ~ 3700 2150 Wire Wire Line 3700 2150 4650 2150 Connection ~ 3700 2350 Wire Wire Line 3700 2350 4150 2350 Wire Wire Line 3400 2150 3700 2150 Wire Wire Line 3450 2350 3700 2350 Wire Wire Line 3800 4450 4650 4450 Text Label 6450 4450 2 50 ~ 0 POWER_OUT $Comp L power:GND #PWR0204 U 1 1 60762DAE P 3800 4000 AR Path="/606FA86C/60762DAE" Ref="#PWR0204" Part="1" AR Path="/6077A779/60762DAE" Ref="#PWR?" Part="1" AR Path="/60AEE6BF/60762DAE" Ref="#PWR0304" Part="1" AR Path="/60AFE278/60762DAE" Ref="#PWR0404" Part="1" AR Path="/60B0E338/60762DAE" Ref="#PWR0504" Part="1" AR Path="/60B1F5E9/60762DAE" Ref="#PWR0604" Part="1" F 0 "#PWR0604" H 3800 3750 50 0001 C CNN F 1 "GND" H 3805 3827 50 0000 C CNN F 2 "" H 3800 4000 50 0001 C CNN F 3 "" H 3800 4000 50 0001 C CNN 1 3800 4000 1 0 0 -1 $EndComp Wire Wire Line 3200 3900 3450 3900 Connection ~ 3200 3900 Wire Wire Line 3200 3900 3200 4200 Wire Wire Line 3650 3900 3800 3900 Wire Wire Line 3800 3900 3800 4000 Text Notes 1750 5550 0 50 ~ 0 CURSENSE unused - 1k to ground, per datasheet (pg 6)\nFR_DIAG unused - 15k to ground, per datasheet (pg 6) Text HLabel 1500 4450 0 50 Input ~ 0 EN Wire Wire Line 4150 2350 4150 3200 Wire Wire Line 4150 3200 3200 3200 Wire Wire Line 3200 3200 3200 3900 Wire Wire Line 1500 4450 1900 4450 Wire Wire Line 4650 4550 4650 4450 Connection ~ 4650 4450 Wire Wire Line 4650 2950 4800 2950 Text HLabel 4800 2950 2 50 Output ~ 0 LED_GND Wire Wire Line 4650 5100 4800 5100 Text HLabel 4800 5100 2 50 Output ~ 0 LED_GND Wire Wire Line 4650 4450 6450 4450 $Comp L no_pin:no_pin Z201 U 1 1 6078F8EB P 5000 1550 AR Path="/606FA86C/6078F8EB" Ref="Z201" Part="1" AR Path="/60AEE6BF/6078F8EB" Ref="Z301" Part="1" AR Path="/60AFE278/6078F8EB" Ref="Z401" Part="1" AR Path="/60B0E338/6078F8EB" Ref="Z501" Part="1" AR Path="/60B1F5E9/6078F8EB" Ref="Z601" Part="1" F 0 "Z601" H 5000 1837 60 0000 C CNN F 1 "Fuse" H 5000 1731 60 0000 C CNN F 2 "Dummy:Dummy" H 5000 1550 60 0001 C CNN F 3 "" H 5000 1550 60 0001 C CNN F 4 "0297010.WXNV" H 5000 1550 50 0001 C CNN "DK#" 1 5000 1550 1 0 0 -1 $EndComp $Comp L Device:R_Small R? U 1 1 607F8CFF P 1900 4700 AR Path="/607F8CFF" Ref="R?" Part="1" AR Path="/606FA86C/607F8CFF" Ref="R207" Part="1" AR Path="/6077A779/607F8CFF" Ref="R?" Part="1" AR Path="/60AEE6BF/607F8CFF" Ref="R307" Part="1" AR Path="/60AFE278/607F8CFF" Ref="R407" Part="1" AR Path="/60B0E338/607F8CFF" Ref="R507" Part="1" AR Path="/60B1F5E9/607F8CFF" Ref="R607" Part="1" F 0 "R607" H 2100 4650 50 0000 R CNN F 1 "15k" H 2100 4750 50 0000 R CNN F 2 "Resistor_SMD:R_0805_2012Metric" H 1900 4700 50 0001 C CNN F 3 "~" H 1900 4700 50 0001 C CNN F 4 "RMCF0805JT15K0CT-ND" H 1900 4700 50 0001 C CNN "DK#" 1 1900 4700 -1 0 0 1 $EndComp Wire Wire Line 1900 4450 1900 4600 Connection ~ 1900 4450 Wire Wire Line 1900 4450 2050 4450 Wire Wire Line 1900 4800 1900 5050 Wire Wire Line 1900 5050 2400 5050 $EndSCHEMATC ================================================ FILE: electronics/chainlinkBase/sym-lib-table ================================================ (sym_lib_table (lib (name INA219_Breakout)(type Legacy)(uri ${KIPRJMOD}/../lib/INA219_Breakout.lib)(options "")(descr "")) (lib (name CustomPower)(type Legacy)(uri ${KIPRJMOD}/../lib/CustomPower.lib)(options "")(descr "")) (lib (name ESP32Modules)(type Legacy)(uri ${KIPRJMOD}/../lib/ESP32Modules.lib)(options "")(descr "")) (lib (name NCP45560)(type Legacy)(uri ${KIPRJMOD}/../lib/NCP45560.lib)(options "")(descr "")) (lib (name VN7007ALHTR)(type Legacy)(uri ${KIPRJMOD}/../lib/VN7007ALHTR.lib)(options "")(descr "")) (lib (name BuckModule)(type Legacy)(uri ${KIPRJMOD}/../lib/BuckModule.lib)(options "")(descr "")) (lib (name no_pin)(type Legacy)(uri ${KIPRJMOD}/../lib/no_pin.lib)(options "")(descr "")) ) ================================================ FILE: electronics/chainlinkBuddyBreadboard/chainlinkBuddyBreadboard-cache.lib ================================================ EESchema-LIBRARY Version 2.4 #encoding utf-8 # # Connector_Conn_01x05_Male # DEF Connector_Conn_01x05_Male J 0 40 Y N 1 F N F0 "J" 0 300 50 H V C CNN F1 "Connector_Conn_01x05_Male" 0 -300 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST Connector*:*_1x??_* $ENDFPLIST DRAW S 34 -195 0 -205 1 1 6 F S 34 -95 0 -105 1 1 6 F S 34 5 0 -5 1 1 6 F S 34 105 0 95 1 1 6 F S 34 205 0 195 1 1 6 F P 2 1 1 6 50 -200 34 -200 N P 2 1 1 6 50 -100 34 -100 N P 2 1 1 6 50 0 34 0 N P 2 1 1 6 50 100 34 100 N P 2 1 1 6 50 200 34 200 N X Pin_1 1 200 200 150 L 50 50 1 1 P X Pin_2 2 200 100 150 L 50 50 1 1 P X Pin_3 3 200 0 150 L 50 50 1 1 P X Pin_4 4 200 -100 150 L 50 50 1 1 P X Pin_5 5 200 -200 150 L 50 50 1 1 P ENDDRAW ENDDEF # # Connector_Generic_Conn_02x04_Odd_Even # DEF Connector_Generic_Conn_02x04_Odd_Even J 0 40 Y N 1 F N F0 "J" 50 200 50 H V C CNN F1 "Connector_Generic_Conn_02x04_Odd_Even" 50 -300 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST Connector*:*_2x??_* $ENDFPLIST DRAW S -50 -195 0 -205 1 1 6 N S -50 -95 0 -105 1 1 6 N S -50 5 0 -5 1 1 6 N S -50 105 0 95 1 1 6 N S -50 150 150 -250 1 1 10 f S 150 -195 100 -205 1 1 6 N S 150 -95 100 -105 1 1 6 N S 150 5 100 -5 1 1 6 N S 150 105 100 95 1 1 6 N X Pin_1 1 -200 100 150 R 50 50 1 1 P X Pin_2 2 300 100 150 L 50 50 1 1 P X Pin_3 3 -200 0 150 R 50 50 1 1 P X Pin_4 4 300 0 150 L 50 50 1 1 P X Pin_5 5 -200 -100 150 R 50 50 1 1 P X Pin_6 6 300 -100 150 L 50 50 1 1 P X Pin_7 7 -200 -200 150 R 50 50 1 1 P X Pin_8 8 300 -200 150 L 50 50 1 1 P ENDDRAW ENDDEF # # power_GND # DEF power_GND #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -250 50 H I C CNN F1 "power_GND" 0 -150 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 6 0 1 0 0 0 0 -50 50 -50 0 -100 -50 -50 0 -50 N X GND 1 0 0 0 D 50 50 1 1 W N ENDDRAW ENDDEF # #End Library ================================================ FILE: electronics/chainlinkBuddyBreadboard/chainlinkBuddyBreadboard.kibot.yml ================================================ kibot: version: 1 preflight: check_zone_fills: true run_drc: true run_erc: true update_xml: true outputs: - name: ibom comment: 'Interactive BOM' type: ibom dir: bom options: layer_view: FB dark_mode: true netlist_file: '%F.xml' extra_fields: 'DK#' ================================================ FILE: electronics/chainlinkBuddyBreadboard/chainlinkBuddyBreadboard.kicad_pcb ================================================ (kicad_pcb (version 20171130) (host pcbnew 5.1.10-88a1d61d58~90~ubuntu20.04.1) (general (thickness 1.6) (drawings 28) (tracks 18) (zones 0) (modules 2) (nets 6) ) (page A4) (layers (0 F.Cu signal) (31 B.Cu signal) (32 B.Adhes user) (33 F.Adhes user) (34 B.Paste user) (35 F.Paste user) (36 B.SilkS user) (37 F.SilkS user) (38 B.Mask user) (39 F.Mask user) (40 Dwgs.User user) (41 Cmts.User user) (42 Eco1.User user) (43 Eco2.User user) (44 Edge.Cuts user) (45 Margin user) (46 B.CrtYd user) (47 F.CrtYd user) (48 B.Fab user) (49 F.Fab user) ) (setup (last_trace_width 0.25) (user_trace_width 0.25) (user_trace_width 0.5) (trace_clearance 0.2) (zone_clearance 0.508) (zone_45_only no) (trace_min 0.2) (via_size 0.8) (via_drill 0.4) (via_min_size 0.4) (via_min_drill 0.3) (uvia_size 0.3) (uvia_drill 0.1) (uvias_allowed no) (uvia_min_size 0.2) (uvia_min_drill 0.1) (edge_width 0.05) (segment_width 0.2) (pcb_text_width 0.3) (pcb_text_size 1.5 1.5) (mod_edge_width 0.12) (mod_text_size 1 1) (mod_text_width 0.15) (pad_size 1.524 1.524) (pad_drill 0.762) (pad_to_mask_clearance 0) (aux_axis_origin 0 0) (visible_elements FFFFFF7F) (pcbplotparams (layerselection 0x010fc_ffffffff) (usegerberextensions false) (usegerberattributes true) (usegerberadvancedattributes true) (creategerberjobfile true) (excludeedgelayer true) (linewidth 0.100000) (plotframeref false) (viasonmask false) (mode 1) (useauxorigin false) (hpglpennumber 1) (hpglpenspeed 20) (hpglpendiameter 15.000000) (psnegative false) (psa4output false) (plotreference true) (plotvalue true) (plotinvisibletext false) (padsonsilk false) (subtractmaskfromsilk false) (outputformat 1) (mirror false) (drillshape 1) (scaleselection 1) (outputdirectory "")) ) (net 0 "") (net 1 GND) (net 2 /LATCH) (net 3 /SENSOR_DATA) (net 4 /MOTOR_DATA) (net 5 /CLOCK) (net_class Default "This is the default net class." (clearance 0.2) (trace_width 0.25) (via_dia 0.8) (via_drill 0.4) (uvia_dia 0.3) (uvia_drill 0.1) (add_net /CLOCK) (add_net /LATCH) (add_net /MOTOR_DATA) (add_net /SENSOR_DATA) (add_net GND) ) (module ModifiedSymbols:PinHeader_1x05_P2.54mm_Vertical_NoSilk (layer B.Cu) (tedit 617F0396) (tstamp 617EFFD4) (at 95.25 78.105) (descr "Through hole straight pin header, 1x05, 2.54mm pitch, single row") (tags "Through hole pin header THT 1x05 2.54mm single row") (path /617FD64C) (fp_text reference J2 (at 0 2.33) (layer B.SilkS) hide (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) (fp_text value Conn_01x05_Male (at 0 -12.49) (layer B.Fab) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) (fp_line (start -0.635 1.27) (end 1.27 1.27) (layer B.Fab) (width 0.1)) (fp_line (start 1.27 1.27) (end 1.27 -11.43) (layer B.Fab) (width 0.1)) (fp_line (start 1.27 -11.43) (end -1.27 -11.43) (layer B.Fab) (width 0.1)) (fp_line (start -1.27 -11.43) (end -1.27 0.635) (layer B.Fab) (width 0.1)) (fp_line (start -1.27 0.635) (end -0.635 1.27) (layer B.Fab) (width 0.1)) (fp_line (start -1.8 1.8) (end -1.8 -11.95) (layer B.CrtYd) (width 0.05)) (fp_line (start -1.8 -11.95) (end 1.8 -11.95) (layer B.CrtYd) (width 0.05)) (fp_line (start 1.8 -11.95) (end 1.8 1.8) (layer B.CrtYd) (width 0.05)) (fp_line (start 1.8 1.8) (end -1.8 1.8) (layer B.CrtYd) (width 0.05)) (fp_text user %R (at 0 -5.08 -90) (layer B.Fab) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) (pad 5 thru_hole oval (at 0 -10.16) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 5 /CLOCK)) (pad 4 thru_hole oval (at 0 -7.62) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 4 /MOTOR_DATA)) (pad 3 thru_hole oval (at 0 -5.08) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 3 /SENSOR_DATA)) (pad 2 thru_hole oval (at 0 -2.54) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 2 /LATCH)) (pad 1 thru_hole rect (at 0 0) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 1 GND)) (model ${KISYS3DMOD}/Connector_PinHeader_2.54mm.3dshapes/PinHeader_1x05_P2.54mm_Vertical.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module ModifiedSymbols:IDC-Header_2x04_P2.54mm_Vertical (layer F.Cu) (tedit 617B5015) (tstamp 617D3F45) (at 67.31 69.215) (descr "Through hole IDC box header, 2x04, 2.54mm pitch, DIN 41651 / IEC 60603-13, double rows, https://docs.google.com/spreadsheets/d/16SsEcesNF15N3Lb4niX7dcUr-NY5_MFPQhobNuNppn4/edit#gid=0") (tags "Through hole vertical IDC box header THT 2x04 2.54mm double row") (path /61A3A5EC) (fp_text reference J1 (at 1.27 -2.921) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value Output (at 1.27 13.72) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -3.18 -4.1) (end -2.18 -5.1) (layer F.Fab) (width 0.1)) (fp_line (start -2.18 -5.1) (end 5.72 -5.1) (layer F.Fab) (width 0.1)) (fp_line (start 5.72 -5.1) (end 5.72 12.72) (layer F.Fab) (width 0.1)) (fp_line (start 5.72 12.72) (end -3.18 12.72) (layer F.Fab) (width 0.1)) (fp_line (start -3.18 12.72) (end -3.18 -4.1) (layer F.Fab) (width 0.1)) (fp_line (start -3.18 1.76) (end -1.98 1.76) (layer F.Fab) (width 0.1)) (fp_line (start -1.98 1.76) (end -1.98 -3.91) (layer F.Fab) (width 0.1)) (fp_line (start -1.98 -3.91) (end 4.52 -3.91) (layer F.Fab) (width 0.1)) (fp_line (start 4.52 -3.91) (end 4.52 11.53) (layer F.Fab) (width 0.1)) (fp_line (start 4.52 11.53) (end -1.98 11.53) (layer F.Fab) (width 0.1)) (fp_line (start -1.98 11.53) (end -1.98 5.86) (layer F.Fab) (width 0.1)) (fp_line (start -1.98 5.86) (end -1.98 5.86) (layer F.Fab) (width 0.1)) (fp_line (start -1.98 5.86) (end -3.18 5.86) (layer F.Fab) (width 0.1)) (fp_line (start -3.29 -5.21) (end 5.83 -5.21) (layer F.SilkS) (width 0.12)) (fp_line (start 5.83 -5.21) (end 5.83 12.83) (layer F.SilkS) (width 0.12)) (fp_line (start 5.83 12.83) (end -3.29 12.83) (layer F.SilkS) (width 0.12)) (fp_line (start -3.29 12.83) (end -3.29 -5.21) (layer F.SilkS) (width 0.12)) (fp_line (start -3.29 1.76) (end -1.98 1.76) (layer F.SilkS) (width 0.12)) (fp_line (start -1.98 1.76) (end -1.98 -3.91) (layer F.SilkS) (width 0.12)) (fp_line (start -1.98 -3.91) (end 4.52 -3.91) (layer F.SilkS) (width 0.12)) (fp_line (start 4.52 -3.91) (end 4.52 11.53) (layer F.SilkS) (width 0.12)) (fp_line (start 4.52 11.53) (end -1.98 11.53) (layer F.SilkS) (width 0.12)) (fp_line (start -1.98 11.53) (end -1.98 5.86) (layer F.SilkS) (width 0.12)) (fp_line (start -1.98 5.86) (end -1.98 5.86) (layer F.SilkS) (width 0.12)) (fp_line (start -1.98 5.86) (end -3.29 5.86) (layer F.SilkS) (width 0.12)) (fp_line (start -3.68 -5.6) (end -3.68 13.22) (layer F.CrtYd) (width 0.05)) (fp_line (start -3.68 13.22) (end 6.22 13.22) (layer F.CrtYd) (width 0.05)) (fp_line (start 6.22 13.22) (end 6.22 -5.6) (layer F.CrtYd) (width 0.05)) (fp_line (start 6.22 -5.6) (end -3.68 -5.6) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 1.27 3.81 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 8 thru_hole circle (at 2.54 7.62) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 1 GND)) (pad 6 thru_hole circle (at 2.54 5.08) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 1 GND)) (pad 4 thru_hole circle (at 2.54 2.54) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 1 GND)) (pad 2 thru_hole circle (at 2.54 0) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 1 GND)) (pad 7 thru_hole circle (at 0 7.62) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 2 /LATCH)) (pad 5 thru_hole circle (at 0 5.08) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 3 /SENSOR_DATA)) (pad 3 thru_hole circle (at 0 2.54) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 4 /MOTOR_DATA)) (pad 1 thru_hole roundrect (at 0 0) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (roundrect_rratio 0.147059) (net 5 /CLOCK)) (model ${KISYS3DMOD}/Connector_IDC.3dshapes/IDC-Header_2x04_P2.54mm_Vertical.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (gr_text v1.0 (at 95.885 81.28) (layer F.SilkS) (tstamp 61813620) (effects (font (size 0.8 0.8) (thickness 0.09) italic) (justify right)) ) (dimension 19.05 (width 0.15) (layer Cmts.User) (gr_text "19.050 mm" (at 59.660001 73.025 270) (layer Cmts.User) (effects (font (size 1 1) (thickness 0.15))) ) (feature1 (pts (xy 63.5 82.55) (xy 60.37358 82.55))) (feature2 (pts (xy 63.5 63.5) (xy 60.37358 63.5))) (crossbar (pts (xy 60.960001 63.5) (xy 60.960001 82.55))) (arrow1a (pts (xy 60.960001 82.55) (xy 60.37358 81.423496))) (arrow1b (pts (xy 60.960001 82.55) (xy 61.546422 81.423496))) (arrow2a (pts (xy 60.960001 63.5) (xy 60.37358 64.626504))) (arrow2b (pts (xy 60.960001 63.5) (xy 61.546422 64.626504))) ) (dimension 33.02 (width 0.15) (layer Cmts.User) (gr_text "33.020 mm" (at 80.01 56.485) (layer Cmts.User) (effects (font (size 1 1) (thickness 0.15))) ) (feature1 (pts (xy 63.5 63.5) (xy 63.5 57.198579))) (feature2 (pts (xy 96.52 63.5) (xy 96.52 57.198579))) (crossbar (pts (xy 96.52 57.785) (xy 63.5 57.785))) (arrow1a (pts (xy 63.5 57.785) (xy 64.626504 57.198579))) (arrow1b (pts (xy 63.5 57.785) (xy 64.626504 58.371421))) (arrow2a (pts (xy 96.52 57.785) (xy 95.393496 57.198579))) (arrow2b (pts (xy 96.52 57.785) (xy 95.393496 58.371421))) ) (gr_text Output (at 76.2 73.025 -90) (layer F.SilkS) (tstamp 617CEBDD) (effects (font (size 2.5 2.5) (thickness 0.35))) ) (gr_poly (pts (xy 93.98 76.2) (xy 93.345 75.565) (xy 93.98 74.93)) (layer F.SilkS) (width 0.1)) (gr_poly (pts (xy 93.98 73.025) (xy 93.345 73.66) (xy 93.345 72.39)) (layer F.SilkS) (width 0.1)) (gr_poly (pts (xy 93.98 71.12) (xy 93.345 70.485) (xy 93.98 69.85)) (layer F.SilkS) (width 0.1)) (gr_poly (pts (xy 93.98 68.58) (xy 93.345 67.945) (xy 93.98 67.31)) (layer F.SilkS) (width 0.1)) (gr_text GND (at 92.71 78.105) (layer F.SilkS) (tstamp 617F02AF) (effects (font (size 1 1) (thickness 0.12)) (justify right)) ) (gr_text Latch (at 92.71 75.565) (layer F.SilkS) (tstamp 617F02AC) (effects (font (size 1 1) (thickness 0.12)) (justify right)) ) (gr_text "Sensor Data" (at 92.71 73.025) (layer F.SilkS) (tstamp 617F02A9) (effects (font (size 1 1) (thickness 0.12)) (justify right)) ) (gr_text "Motor Data" (at 92.71 70.485) (layer F.SilkS) (tstamp 617F02A6) (effects (font (size 1 1) (thickness 0.12)) (justify right)) ) (gr_text Clock (at 92.71 67.945) (layer F.SilkS) (tstamp 617F029E) (effects (font (size 1 1) (thickness 0.12)) (justify right)) ) (dimension 25.4 (width 0.15) (layer Cmts.User) (gr_text "25.400 mm" (at 82.55 59.66) (layer Cmts.User) (effects (font (size 1 1) (thickness 0.15))) ) (feature1 (pts (xy 95.25 69.215) (xy 95.25 60.373579))) (feature2 (pts (xy 69.85 69.215) (xy 69.85 60.373579))) (crossbar (pts (xy 69.85 60.96) (xy 95.25 60.96))) (arrow1a (pts (xy 95.25 60.96) (xy 94.123496 61.546421))) (arrow1b (pts (xy 95.25 60.96) (xy 94.123496 60.373579))) (arrow2a (pts (xy 69.85 60.96) (xy 70.976504 61.546421))) (arrow2b (pts (xy 69.85 60.96) (xy 70.976504 60.373579))) ) (gr_text "DATE: YYYY-MM-DD\nCOMMIT: deadbeef" (at 92.075 80.645) (layer B.SilkS) (tstamp 617ECFA6) (effects (font (size 0.8 0.8) (thickness 0.09)) (justify left mirror)) ) (gr_text L (at 66.04 76.835) (layer B.SilkS) (tstamp 617D9412) (effects (font (size 1 1) (thickness 0.12)) (justify left mirror)) ) (gr_text SD (at 66.04 74.295) (layer B.SilkS) (tstamp 617D940F) (effects (font (size 1 1) (thickness 0.12)) (justify left mirror)) ) (gr_text MD (at 66.04 71.755) (layer B.SilkS) (tstamp 617D940C) (effects (font (size 1 1) (thickness 0.12)) (justify left mirror)) ) (gr_text CL (at 66.04 69.215) (layer B.SilkS) (tstamp 617D938B) (effects (font (size 1 1) (thickness 0.12)) (justify left mirror)) ) (gr_text GND (at 71.12 76.835) (layer B.SilkS) (tstamp 617D9389) (effects (font (size 1 1) (thickness 0.12)) (justify right mirror)) ) (gr_text GND (at 71.12 74.295) (layer B.SilkS) (tstamp 617D9387) (effects (font (size 1 1) (thickness 0.12)) (justify right mirror)) ) (gr_text GND (at 71.12 71.755) (layer B.SilkS) (tstamp 617D9385) (effects (font (size 1 1) (thickness 0.12)) (justify right mirror)) ) (gr_text GND (at 71.12 69.215) (layer B.SilkS) (tstamp 617D937F) (effects (font (size 1 1) (thickness 0.12)) (justify right mirror)) ) (gr_text "Splitflap Chainlink Buddy\n[Breadboard]" (at 83.82 65.405) (layer F.SilkS) (tstamp 61813BD6) (effects (font (size 1 1) (thickness 0.12))) ) (gr_line (start 63.5 82.55) (end 63.5 63.5) (layer Edge.Cuts) (width 0.05) (tstamp 617D3FFE)) (gr_line (start 96.52 82.55) (end 63.5 82.55) (layer Edge.Cuts) (width 0.05) (tstamp 617D599A)) (gr_line (start 96.52 63.5) (end 96.52 82.55) (layer Edge.Cuts) (width 0.05) (tstamp 617D513F)) (gr_line (start 63.5 63.5) (end 96.52 63.5) (layer Edge.Cuts) (width 0.05) (tstamp 617D4058)) (via (at 93.345 69.215) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 1)) (via (at 93.345 71.755) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 1) (tstamp 617F63F3)) (via (at 93.345 74.295) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 1) (tstamp 617F63F5)) (segment (start 69.85 69.215) (end 93.345 69.215) (width 0.5) (layer F.Cu) (net 1)) (segment (start 93.345 71.755) (end 69.85 71.755) (width 0.5) (layer F.Cu) (net 1)) (segment (start 69.85 74.295) (end 93.345 74.295) (width 0.5) (layer F.Cu) (net 1)) (via (at 67.31 66.675) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 1) (tstamp 6181BD9C)) (via (at 93.345 66.675) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 1) (tstamp 6181BD41)) (segment (start 95.155001 75.659999) (end 95.25 75.565) (width 0.25) (layer F.Cu) (net 2)) (segment (start 68.485001 75.659999) (end 95.155001 75.659999) (width 0.25) (layer F.Cu) (net 2)) (segment (start 67.31 76.835) (end 68.485001 75.659999) (width 0.25) (layer F.Cu) (net 2)) (segment (start 68.58 73.025) (end 95.25 73.025) (width 0.25) (layer F.Cu) (net 3)) (segment (start 67.31 74.295) (end 68.58 73.025) (width 0.25) (layer F.Cu) (net 3)) (segment (start 68.58 70.485) (end 95.25 70.485) (width 0.25) (layer F.Cu) (net 4)) (segment (start 67.31 71.755) (end 68.58 70.485) (width 0.25) (layer F.Cu) (net 4)) (segment (start 67.73 67.945) (end 95.25 67.945) (width 0.25) (layer F.Cu) (net 5)) (segment (start 67.31 68.365) (end 67.73 67.945) (width 0.25) (layer F.Cu) (net 5)) (segment (start 67.31 69.215) (end 67.31 68.365) (width 0.25) (layer F.Cu) (net 5)) (zone (net 1) (net_name GND) (layer B.Cu) (tstamp 0) (hatch edge 0.508) (connect_pads (clearance 0.508)) (min_thickness 0.254) (fill yes (arc_segments 32) (thermal_gap 0.508) (thermal_bridge_width 0.508)) (polygon (pts (xy 96.52 82.55) (xy 63.5 82.55) (xy 63.5 63.5) (xy 96.52 63.5) ) ) (filled_polygon (pts (xy 95.86 66.590318) (xy 95.683158 66.517068) (xy 95.39626 66.46) (xy 95.10374 66.46) (xy 94.816842 66.517068) (xy 94.546589 66.62901) (xy 94.303368 66.791525) (xy 94.096525 66.998368) (xy 93.93401 67.241589) (xy 93.822068 67.511842) (xy 93.765 67.79874) (xy 93.765 68.09126) (xy 93.822068 68.378158) (xy 93.93401 68.648411) (xy 94.096525 68.891632) (xy 94.303368 69.098475) (xy 94.47776 69.215) (xy 94.303368 69.331525) (xy 94.096525 69.538368) (xy 93.93401 69.781589) (xy 93.822068 70.051842) (xy 93.765 70.33874) (xy 93.765 70.63126) (xy 93.822068 70.918158) (xy 93.93401 71.188411) (xy 94.096525 71.431632) (xy 94.303368 71.638475) (xy 94.47776 71.755) (xy 94.303368 71.871525) (xy 94.096525 72.078368) (xy 93.93401 72.321589) (xy 93.822068 72.591842) (xy 93.765 72.87874) (xy 93.765 73.17126) (xy 93.822068 73.458158) (xy 93.93401 73.728411) (xy 94.096525 73.971632) (xy 94.303368 74.178475) (xy 94.47776 74.295) (xy 94.303368 74.411525) (xy 94.096525 74.618368) (xy 93.93401 74.861589) (xy 93.822068 75.131842) (xy 93.765 75.41874) (xy 93.765 75.71126) (xy 93.822068 75.998158) (xy 93.93401 76.268411) (xy 94.096525 76.511632) (xy 94.22838 76.643487) (xy 94.15582 76.665498) (xy 94.045506 76.724463) (xy 93.948815 76.803815) (xy 93.869463 76.900506) (xy 93.810498 77.01082) (xy 93.774188 77.130518) (xy 93.761928 77.255) (xy 93.765 77.81925) (xy 93.92375 77.978) (xy 95.123 77.978) (xy 95.123 77.958) (xy 95.377 77.958) (xy 95.377 77.978) (xy 95.397 77.978) (xy 95.397 78.232) (xy 95.377 78.232) (xy 95.377 79.43125) (xy 95.53575 79.59) (xy 95.860001 79.591765) (xy 95.860001 81.89) (xy 64.16 81.89) (xy 64.16 78.955) (xy 93.761928 78.955) (xy 93.774188 79.079482) (xy 93.810498 79.19918) (xy 93.869463 79.309494) (xy 93.948815 79.406185) (xy 94.045506 79.485537) (xy 94.15582 79.544502) (xy 94.275518 79.580812) (xy 94.4 79.593072) (xy 94.96425 79.59) (xy 95.123 79.43125) (xy 95.123 78.232) (xy 93.92375 78.232) (xy 93.765 78.39075) (xy 93.761928 78.955) (xy 64.16 78.955) (xy 64.16 68.615) (xy 65.821928 68.615) (xy 65.821928 69.815) (xy 65.838992 69.988254) (xy 65.889528 70.15485) (xy 65.971595 70.308386) (xy 66.082038 70.442962) (xy 66.216614 70.553405) (xy 66.343608 70.621285) (xy 66.156525 70.808368) (xy 65.99401 71.051589) (xy 65.882068 71.321842) (xy 65.825 71.60874) (xy 65.825 71.90126) (xy 65.882068 72.188158) (xy 65.99401 72.458411) (xy 66.156525 72.701632) (xy 66.363368 72.908475) (xy 66.53776 73.025) (xy 66.363368 73.141525) (xy 66.156525 73.348368) (xy 65.99401 73.591589) (xy 65.882068 73.861842) (xy 65.825 74.14874) (xy 65.825 74.44126) (xy 65.882068 74.728158) (xy 65.99401 74.998411) (xy 66.156525 75.241632) (xy 66.363368 75.448475) (xy 66.53776 75.565) (xy 66.363368 75.681525) (xy 66.156525 75.888368) (xy 65.99401 76.131589) (xy 65.882068 76.401842) (xy 65.825 76.68874) (xy 65.825 76.98126) (xy 65.882068 77.268158) (xy 65.99401 77.538411) (xy 66.156525 77.781632) (xy 66.363368 77.988475) (xy 66.606589 78.15099) (xy 66.876842 78.262932) (xy 67.16374 78.32) (xy 67.45626 78.32) (xy 67.743158 78.262932) (xy 68.013411 78.15099) (xy 68.256632 77.988475) (xy 68.38171 77.863397) (xy 69.001208 77.863397) (xy 69.078843 78.112472) (xy 69.342883 78.238371) (xy 69.626411 78.310339) (xy 69.918531 78.325611) (xy 70.208019 78.283599) (xy 70.483747 78.185919) (xy 70.621157 78.112472) (xy 70.698792 77.863397) (xy 69.85 77.014605) (xy 69.001208 77.863397) (xy 68.38171 77.863397) (xy 68.463475 77.781632) (xy 68.579311 77.608271) (xy 68.821603 77.683792) (xy 69.670395 76.835) (xy 70.029605 76.835) (xy 70.878397 77.683792) (xy 71.127472 77.606157) (xy 71.253371 77.342117) (xy 71.325339 77.058589) (xy 71.340611 76.766469) (xy 71.298599 76.476981) (xy 71.200919 76.201253) (xy 71.127472 76.063843) (xy 70.878397 75.986208) (xy 70.029605 76.835) (xy 69.670395 76.835) (xy 68.821603 75.986208) (xy 68.579311 76.061729) (xy 68.463475 75.888368) (xy 68.256632 75.681525) (xy 68.08224 75.565) (xy 68.256632 75.448475) (xy 68.38171 75.323397) (xy 69.001208 75.323397) (xy 69.076514 75.565) (xy 69.001208 75.806603) (xy 69.85 76.655395) (xy 70.698792 75.806603) (xy 70.623486 75.565) (xy 70.698792 75.323397) (xy 69.85 74.474605) (xy 69.001208 75.323397) (xy 68.38171 75.323397) (xy 68.463475 75.241632) (xy 68.579311 75.068271) (xy 68.821603 75.143792) (xy 69.670395 74.295) (xy 70.029605 74.295) (xy 70.878397 75.143792) (xy 71.127472 75.066157) (xy 71.253371 74.802117) (xy 71.325339 74.518589) (xy 71.340611 74.226469) (xy 71.298599 73.936981) (xy 71.200919 73.661253) (xy 71.127472 73.523843) (xy 70.878397 73.446208) (xy 70.029605 74.295) (xy 69.670395 74.295) (xy 68.821603 73.446208) (xy 68.579311 73.521729) (xy 68.463475 73.348368) (xy 68.256632 73.141525) (xy 68.08224 73.025) (xy 68.256632 72.908475) (xy 68.38171 72.783397) (xy 69.001208 72.783397) (xy 69.076514 73.025) (xy 69.001208 73.266603) (xy 69.85 74.115395) (xy 70.698792 73.266603) (xy 70.623486 73.025) (xy 70.698792 72.783397) (xy 69.85 71.934605) (xy 69.001208 72.783397) (xy 68.38171 72.783397) (xy 68.463475 72.701632) (xy 68.579311 72.528271) (xy 68.821603 72.603792) (xy 69.670395 71.755) (xy 70.029605 71.755) (xy 70.878397 72.603792) (xy 71.127472 72.526157) (xy 71.253371 72.262117) (xy 71.325339 71.978589) (xy 71.340611 71.686469) (xy 71.298599 71.396981) (xy 71.200919 71.121253) (xy 71.127472 70.983843) (xy 70.878397 70.906208) (xy 70.029605 71.755) (xy 69.670395 71.755) (xy 68.821603 70.906208) (xy 68.579311 70.981729) (xy 68.463475 70.808368) (xy 68.276392 70.621285) (xy 68.403386 70.553405) (xy 68.537962 70.442962) (xy 68.648405 70.308386) (xy 68.683142 70.243397) (xy 69.001208 70.243397) (xy 69.076514 70.485) (xy 69.001208 70.726603) (xy 69.85 71.575395) (xy 70.698792 70.726603) (xy 70.623486 70.485) (xy 70.698792 70.243397) (xy 69.85 69.394605) (xy 69.001208 70.243397) (xy 68.683142 70.243397) (xy 68.730472 70.15485) (xy 68.76358 70.045707) (xy 68.821603 70.063792) (xy 69.670395 69.215) (xy 70.029605 69.215) (xy 70.878397 70.063792) (xy 71.127472 69.986157) (xy 71.253371 69.722117) (xy 71.325339 69.438589) (xy 71.340611 69.146469) (xy 71.298599 68.856981) (xy 71.200919 68.581253) (xy 71.127472 68.443843) (xy 70.878397 68.366208) (xy 70.029605 69.215) (xy 69.670395 69.215) (xy 68.821603 68.366208) (xy 68.76358 68.384293) (xy 68.730472 68.27515) (xy 68.683143 68.186603) (xy 69.001208 68.186603) (xy 69.85 69.035395) (xy 70.698792 68.186603) (xy 70.621157 67.937528) (xy 70.357117 67.811629) (xy 70.073589 67.739661) (xy 69.781469 67.724389) (xy 69.491981 67.766401) (xy 69.216253 67.864081) (xy 69.078843 67.937528) (xy 69.001208 68.186603) (xy 68.683143 68.186603) (xy 68.648405 68.121614) (xy 68.537962 67.987038) (xy 68.403386 67.876595) (xy 68.24985 67.794528) (xy 68.083254 67.743992) (xy 67.91 67.726928) (xy 66.71 67.726928) (xy 66.536746 67.743992) (xy 66.37015 67.794528) (xy 66.216614 67.876595) (xy 66.082038 67.987038) (xy 65.971595 68.121614) (xy 65.889528 68.27515) (xy 65.838992 68.441746) (xy 65.821928 68.615) (xy 64.16 68.615) (xy 64.16 64.16) (xy 95.86 64.16) ) ) ) (zone (net 1) (net_name GND) (layer F.Cu) (tstamp 617F63B8) (hatch edge 0.508) (connect_pads (clearance 0.508)) (min_thickness 0.254) (fill yes (arc_segments 32) (thermal_gap 0.508) (thermal_bridge_width 0.508)) (polygon (pts (xy 96.52 82.55) (xy 63.5 82.55) (xy 63.5 63.5) (xy 96.52 63.5) ) ) (filled_polygon (pts (xy 95.86 66.590318) (xy 95.683158 66.517068) (xy 95.39626 66.46) (xy 95.10374 66.46) (xy 94.816842 66.517068) (xy 94.546589 66.62901) (xy 94.303368 66.791525) (xy 94.096525 66.998368) (xy 93.971822 67.185) (xy 67.767325 67.185) (xy 67.73 67.181324) (xy 67.692675 67.185) (xy 67.692667 67.185) (xy 67.581014 67.195997) (xy 67.437753 67.239454) (xy 67.305724 67.310026) (xy 67.189999 67.404999) (xy 67.166196 67.434003) (xy 66.873271 67.726928) (xy 66.71 67.726928) (xy 66.536746 67.743992) (xy 66.37015 67.794528) (xy 66.216614 67.876595) (xy 66.082038 67.987038) (xy 65.971595 68.121614) (xy 65.889528 68.27515) (xy 65.838992 68.441746) (xy 65.821928 68.615) (xy 65.821928 69.815) (xy 65.838992 69.988254) (xy 65.889528 70.15485) (xy 65.971595 70.308386) (xy 66.082038 70.442962) (xy 66.216614 70.553405) (xy 66.343608 70.621285) (xy 66.156525 70.808368) (xy 65.99401 71.051589) (xy 65.882068 71.321842) (xy 65.825 71.60874) (xy 65.825 71.90126) (xy 65.882068 72.188158) (xy 65.99401 72.458411) (xy 66.156525 72.701632) (xy 66.363368 72.908475) (xy 66.53776 73.025) (xy 66.363368 73.141525) (xy 66.156525 73.348368) (xy 65.99401 73.591589) (xy 65.882068 73.861842) (xy 65.825 74.14874) (xy 65.825 74.44126) (xy 65.882068 74.728158) (xy 65.99401 74.998411) (xy 66.156525 75.241632) (xy 66.363368 75.448475) (xy 66.53776 75.565) (xy 66.363368 75.681525) (xy 66.156525 75.888368) (xy 65.99401 76.131589) (xy 65.882068 76.401842) (xy 65.825 76.68874) (xy 65.825 76.98126) (xy 65.882068 77.268158) (xy 65.99401 77.538411) (xy 66.156525 77.781632) (xy 66.363368 77.988475) (xy 66.606589 78.15099) (xy 66.876842 78.262932) (xy 67.16374 78.32) (xy 67.45626 78.32) (xy 67.743158 78.262932) (xy 68.013411 78.15099) (xy 68.256632 77.988475) (xy 68.38171 77.863397) (xy 69.001208 77.863397) (xy 69.078843 78.112472) (xy 69.342883 78.238371) (xy 69.626411 78.310339) (xy 69.918531 78.325611) (xy 70.208019 78.283599) (xy 70.483747 78.185919) (xy 70.621157 78.112472) (xy 70.698792 77.863397) (xy 69.85 77.014605) (xy 69.001208 77.863397) (xy 68.38171 77.863397) (xy 68.463475 77.781632) (xy 68.579311 77.608271) (xy 68.821603 77.683792) (xy 69.670395 76.835) (xy 69.656253 76.820858) (xy 69.835858 76.641253) (xy 69.85 76.655395) (xy 69.864143 76.641253) (xy 70.043748 76.820858) (xy 70.029605 76.835) (xy 70.878397 77.683792) (xy 71.127472 77.606157) (xy 71.253371 77.342117) (xy 71.325339 77.058589) (xy 71.340611 76.766469) (xy 71.298599 76.476981) (xy 71.278412 76.419999) (xy 94.035298 76.419999) (xy 94.096525 76.511632) (xy 94.22838 76.643487) (xy 94.15582 76.665498) (xy 94.045506 76.724463) (xy 93.948815 76.803815) (xy 93.869463 76.900506) (xy 93.810498 77.01082) (xy 93.774188 77.130518) (xy 93.761928 77.255) (xy 93.765 77.81925) (xy 93.92375 77.978) (xy 95.123 77.978) (xy 95.123 77.958) (xy 95.377 77.958) (xy 95.377 77.978) (xy 95.397 77.978) (xy 95.397 78.232) (xy 95.377 78.232) (xy 95.377 79.43125) (xy 95.53575 79.59) (xy 95.860001 79.591765) (xy 95.860001 81.89) (xy 64.16 81.89) (xy 64.16 78.955) (xy 93.761928 78.955) (xy 93.774188 79.079482) (xy 93.810498 79.19918) (xy 93.869463 79.309494) (xy 93.948815 79.406185) (xy 94.045506 79.485537) (xy 94.15582 79.544502) (xy 94.275518 79.580812) (xy 94.4 79.593072) (xy 94.96425 79.59) (xy 95.123 79.43125) (xy 95.123 78.232) (xy 93.92375 78.232) (xy 93.765 78.39075) (xy 93.761928 78.955) (xy 64.16 78.955) (xy 64.16 64.16) (xy 95.86 64.16) ) ) (filled_polygon (pts (xy 94.096525 73.971632) (xy 94.303368 74.178475) (xy 94.47776 74.295) (xy 94.303368 74.411525) (xy 94.096525 74.618368) (xy 93.93401 74.861589) (xy 93.9181 74.899999) (xy 71.206699 74.899999) (xy 71.253371 74.802117) (xy 71.325339 74.518589) (xy 71.340611 74.226469) (xy 71.298599 73.936981) (xy 71.244758 73.785) (xy 93.971822 73.785) ) ) (filled_polygon (pts (xy 70.043748 74.280858) (xy 70.029605 74.295) (xy 70.043748 74.309143) (xy 69.864143 74.488748) (xy 69.85 74.474605) (xy 69.835858 74.488748) (xy 69.656253 74.309143) (xy 69.670395 74.295) (xy 69.656253 74.280858) (xy 69.835858 74.101253) (xy 69.85 74.115395) (xy 69.864143 74.101253) ) ) (filled_polygon (pts (xy 94.096525 71.431632) (xy 94.303368 71.638475) (xy 94.47776 71.755) (xy 94.303368 71.871525) (xy 94.096525 72.078368) (xy 93.971822 72.265) (xy 71.251996 72.265) (xy 71.253371 72.262117) (xy 71.325339 71.978589) (xy 71.340611 71.686469) (xy 71.298599 71.396981) (xy 71.244758 71.245) (xy 93.971822 71.245) ) ) (filled_polygon (pts (xy 70.043748 71.740858) (xy 70.029605 71.755) (xy 70.043748 71.769143) (xy 69.864143 71.948748) (xy 69.85 71.934605) (xy 69.835858 71.948748) (xy 69.656253 71.769143) (xy 69.670395 71.755) (xy 69.656253 71.740858) (xy 69.835858 71.561253) (xy 69.85 71.575395) (xy 69.864143 71.561253) ) ) (filled_polygon (pts (xy 94.096525 68.891632) (xy 94.303368 69.098475) (xy 94.47776 69.215) (xy 94.303368 69.331525) (xy 94.096525 69.538368) (xy 93.971822 69.725) (xy 71.251996 69.725) (xy 71.253371 69.722117) (xy 71.325339 69.438589) (xy 71.340611 69.146469) (xy 71.298599 68.856981) (xy 71.244758 68.705) (xy 93.971822 68.705) ) ) (filled_polygon (pts (xy 70.043748 69.200858) (xy 70.029605 69.215) (xy 70.043748 69.229143) (xy 69.864143 69.408748) (xy 69.85 69.394605) (xy 69.835858 69.408748) (xy 69.656253 69.229143) (xy 69.670395 69.215) (xy 69.656253 69.200858) (xy 69.835858 69.021253) (xy 69.85 69.035395) (xy 69.864143 69.021253) ) ) ) ) ================================================ FILE: electronics/chainlinkBuddyBreadboard/chainlinkBuddyBreadboard.pro ================================================ update=Thu 28 Oct 2021 09:45:46 PM PDT version=1 last_client=kicad [general] version=1 RootSch= BoardNm= [cvpcb] version=1 NetIExt=net [eeschema] version=1 LibDir= [eeschema/libraries] [pcbnew] version=1 PageLayoutDescrFile= LastNetListRead= CopperLayerCount=2 BoardThickness=1.6 AllowMicroVias=0 AllowBlindVias=0 RequireCourtyardDefinitions=0 ProhibitOverlappingCourtyards=1 MinTrackWidth=0.2 MinViaDiameter=0.4 MinViaDrill=0.3 MinMicroViaDiameter=0.2 MinMicroViaDrill=0.09999999999999999 MinHoleToHole=0.25 TrackWidth1=0.25 TrackWidth2=0.25 TrackWidth3=0.5 ViaDiameter1=0.8 ViaDrill1=0.4 dPairWidth1=0.2 dPairGap1=0.25 dPairViaGap1=0.25 SilkLineWidth=0.12 SilkTextSizeV=1 SilkTextSizeH=1 SilkTextSizeThickness=0.15 SilkTextItalic=0 SilkTextUpright=1 CopperLineWidth=0.2 CopperTextSizeV=1.5 CopperTextSizeH=1.5 CopperTextThickness=0.3 CopperTextItalic=0 CopperTextUpright=1 EdgeCutLineWidth=0.05 CourtyardLineWidth=0.05 OthersLineWidth=0.15 OthersTextSizeV=1 OthersTextSizeH=1 OthersTextSizeThickness=0.15 OthersTextItalic=0 OthersTextUpright=1 SolderMaskClearance=0 SolderMaskMinWidth=0 SolderPasteClearance=0 SolderPasteRatio=-0 [pcbnew/Layer.F.Cu] Name=F.Cu Type=0 Enabled=1 [pcbnew/Layer.In1.Cu] Name=In1.Cu Type=0 Enabled=0 [pcbnew/Layer.In2.Cu] Name=In2.Cu Type=0 Enabled=0 [pcbnew/Layer.In3.Cu] Name=In3.Cu Type=0 Enabled=0 [pcbnew/Layer.In4.Cu] Name=In4.Cu Type=0 Enabled=0 [pcbnew/Layer.In5.Cu] Name=In5.Cu Type=0 Enabled=0 [pcbnew/Layer.In6.Cu] Name=In6.Cu Type=0 Enabled=0 [pcbnew/Layer.In7.Cu] Name=In7.Cu Type=0 Enabled=0 [pcbnew/Layer.In8.Cu] Name=In8.Cu Type=0 Enabled=0 [pcbnew/Layer.In9.Cu] Name=In9.Cu Type=0 Enabled=0 [pcbnew/Layer.In10.Cu] Name=In10.Cu Type=0 Enabled=0 [pcbnew/Layer.In11.Cu] Name=In11.Cu Type=0 Enabled=0 [pcbnew/Layer.In12.Cu] Name=In12.Cu Type=0 Enabled=0 [pcbnew/Layer.In13.Cu] Name=In13.Cu Type=0 Enabled=0 [pcbnew/Layer.In14.Cu] Name=In14.Cu Type=0 Enabled=0 [pcbnew/Layer.In15.Cu] Name=In15.Cu Type=0 Enabled=0 [pcbnew/Layer.In16.Cu] Name=In16.Cu Type=0 Enabled=0 [pcbnew/Layer.In17.Cu] Name=In17.Cu Type=0 Enabled=0 [pcbnew/Layer.In18.Cu] Name=In18.Cu Type=0 Enabled=0 [pcbnew/Layer.In19.Cu] Name=In19.Cu Type=0 Enabled=0 [pcbnew/Layer.In20.Cu] Name=In20.Cu Type=0 Enabled=0 [pcbnew/Layer.In21.Cu] Name=In21.Cu Type=0 Enabled=0 [pcbnew/Layer.In22.Cu] Name=In22.Cu Type=0 Enabled=0 [pcbnew/Layer.In23.Cu] Name=In23.Cu Type=0 Enabled=0 [pcbnew/Layer.In24.Cu] Name=In24.Cu Type=0 Enabled=0 [pcbnew/Layer.In25.Cu] Name=In25.Cu Type=0 Enabled=0 [pcbnew/Layer.In26.Cu] Name=In26.Cu Type=0 Enabled=0 [pcbnew/Layer.In27.Cu] Name=In27.Cu Type=0 Enabled=0 [pcbnew/Layer.In28.Cu] Name=In28.Cu Type=0 Enabled=0 [pcbnew/Layer.In29.Cu] Name=In29.Cu Type=0 Enabled=0 [pcbnew/Layer.In30.Cu] Name=In30.Cu Type=0 Enabled=0 [pcbnew/Layer.B.Cu] Name=B.Cu Type=0 Enabled=1 [pcbnew/Layer.B.Adhes] Enabled=1 [pcbnew/Layer.F.Adhes] Enabled=1 [pcbnew/Layer.B.Paste] Enabled=1 [pcbnew/Layer.F.Paste] Enabled=1 [pcbnew/Layer.B.SilkS] Enabled=1 [pcbnew/Layer.F.SilkS] Enabled=1 [pcbnew/Layer.B.Mask] Enabled=1 [pcbnew/Layer.F.Mask] Enabled=1 [pcbnew/Layer.Dwgs.User] Enabled=1 [pcbnew/Layer.Cmts.User] Enabled=1 [pcbnew/Layer.Eco1.User] Enabled=1 [pcbnew/Layer.Eco2.User] Enabled=1 [pcbnew/Layer.Edge.Cuts] Enabled=1 [pcbnew/Layer.Margin] Enabled=1 [pcbnew/Layer.B.CrtYd] Enabled=1 [pcbnew/Layer.F.CrtYd] Enabled=1 [pcbnew/Layer.B.Fab] Enabled=1 [pcbnew/Layer.F.Fab] Enabled=1 [pcbnew/Layer.Rescue] Enabled=0 [pcbnew/Netclasses] [pcbnew/Netclasses/Default] Name=Default Clearance=0.2 TrackWidth=0.25 ViaDiameter=0.8 ViaDrill=0.4 uViaDiameter=0.3 uViaDrill=0.1 dPairWidth=0.2 dPairGap=0.25 dPairViaGap=0.25 ================================================ FILE: electronics/chainlinkBuddyBreadboard/chainlinkBuddyBreadboard.sch ================================================ EESchema Schematic File Version 4 EELAYER 30 0 EELAYER END $Descr USLetter 11000 8500 encoding utf-8 Sheet 1 1 Title "Splitflap Chainlink Buddy - Breadboard" Date "" Rev "" Comp "" Comment1 "" Comment2 "" Comment3 "" Comment4 "" $EndDescr $Comp L Connector_Generic:Conn_02x04_Odd_Even J1 U 1 1 61A3A5EC P 2400 1900 F 0 "J1" H 2450 2217 50 0000 C CNN F 1 "Output" H 2450 2126 50 0000 C CNN F 2 "ModifiedSymbols:IDC-Header_2x04_P2.54mm_Vertical" H 2400 1900 50 0001 C CNN F 3 "~" H 2400 1900 50 0001 C CNN 1 2400 1900 1 0 0 -1 $EndComp $Comp L power:GND #PWR01 U 1 1 61A3AEE0 P 2700 2250 F 0 "#PWR01" H 2700 2000 50 0001 C CNN F 1 "GND" H 2705 2077 50 0000 C CNN F 2 "" H 2700 2250 50 0001 C CNN F 3 "" H 2700 2250 50 0001 C CNN 1 2700 2250 1 0 0 -1 $EndComp Wire Wire Line 2700 2100 2700 2250 Wire Wire Line 2700 1800 2700 1900 Connection ~ 2700 2100 Connection ~ 2700 1900 Wire Wire Line 2700 1900 2700 2000 Connection ~ 2700 2000 Wire Wire Line 2700 2000 2700 2100 Text Label 1600 1800 0 50 ~ 0 CLOCK Text Label 1600 1900 0 50 ~ 0 MOTOR_DATA Text Label 1600 2000 0 50 ~ 0 SENSOR_DATA Text Label 1600 2100 0 50 ~ 0 LATCH Wire Wire Line 1600 1800 2200 1800 Wire Wire Line 2200 1900 1600 1900 Wire Wire Line 1600 2000 2200 2000 Wire Wire Line 2200 2100 1600 2100 $Comp L Connector:Conn_01x05_Male J2 U 1 1 617FD64C P 4300 2000 F 0 "J2" H 4408 2381 50 0000 C CNN F 1 "Conn_01x05_Male" H 4408 2290 50 0000 C CNN F 2 "ModifiedSymbols:PinHeader_1x05_P2.54mm_Vertical_NoSilk" H 4300 2000 50 0001 C CNN F 3 "~" H 4300 2000 50 0001 C CNN 1 4300 2000 -1 0 0 1 $EndComp Text Label 3500 1800 0 50 ~ 0 CLOCK Text Label 3500 1900 0 50 ~ 0 MOTOR_DATA Text Label 3500 2000 0 50 ~ 0 SENSOR_DATA Text Label 3500 2100 0 50 ~ 0 LATCH Wire Wire Line 3500 1800 4100 1800 Wire Wire Line 4100 1900 3500 1900 Wire Wire Line 3500 2000 4100 2000 Wire Wire Line 4100 2100 3500 2100 $Comp L power:GND #PWR0101 U 1 1 618021FD P 3750 2200 F 0 "#PWR0101" H 3750 1950 50 0001 C CNN F 1 "GND" H 3755 2027 50 0000 C CNN F 2 "" H 3750 2200 50 0001 C CNN F 3 "" H 3750 2200 50 0001 C CNN 1 3750 2200 1 0 0 -1 $EndComp Wire Wire Line 4100 2200 3750 2200 $EndSCHEMATC ================================================ FILE: electronics/chainlinkBuddyBreadboard/fp-lib-table ================================================ (fp_lib_table (lib (name ModifiedSymbols)(type KiCad)(uri ${KIPRJMOD}/../lib/ModifiedSymbols.pretty)(options "")(descr "")) (lib (name ESP32)(type KiCad)(uri ${KIPRJMOD}/../lib/ESP32.pretty)(options "")(descr "")) (lib (name ScrewTerminals)(type KiCad)(uri ${KIPRJMOD}/../lib/ScrewTerminals.pretty)(options "")(descr "")) (lib (name Buck)(type KiCad)(uri ${KIPRJMOD}/../lib/Buck.pretty)(options "")(descr "")) (lib (name PJ-202A)(type KiCad)(uri ${KIPRJMOD}/../lib/PJ-202A.pretty)(options "")(descr "")) ) ================================================ FILE: electronics/chainlinkBuddyBreadboard/kikit_panelize.json ================================================ { "layout": { "type": "grid", "rows": 5, "cols": 3, "hspace": "0mm", "vspace": "0mm", "rotation": "0deg", "alternation": "none" }, "source": { "type": "auto", // Large tolerance for footprints to be included "tolerance": "100mm" }, "cuts": { "type": "vcuts", "layer": "Edge.Cuts" }, "framing": { "type": "none" } } ================================================ FILE: electronics/chainlinkBuddyBreadboard/sym-lib-table ================================================ (sym_lib_table (lib (name no_pin)(type Legacy)(uri ${KIPRJMOD}/../lib/no_pin.lib)(options "")(descr "")) ) ================================================ FILE: electronics/chainlinkBuddyTDisplay/chainlinkBuddyTDisplay-cache.lib ================================================ EESchema-LIBRARY Version 2.4 #encoding utf-8 # # Connector_Barrel_Jack_Switch # DEF Connector_Barrel_Jack_Switch J 0 20 Y N 1 F N F0 "J" 0 210 50 H V C CNN F1 "Connector_Barrel_Jack_Switch" 0 -200 50 H V C CNN F2 "" 50 -40 50 H I C CNN F3 "" 50 -40 50 H I C CNN $FPLIST BarrelJack* $ENDFPLIST DRAW A -130 100 25 901 -901 0 1 10 F -130 125 -130 75 A -130 100 25 901 -901 0 1 10 N -130 125 -130 75 S -200 150 200 -150 0 1 10 f S 145 125 -130 75 0 1 10 F P 2 0 1 10 50 -90 75 -65 N P 2 0 1 10 200 100 150 100 N P 4 0 1 10 200 0 50 0 50 -90 25 -65 N P 6 0 1 10 -150 -100 -100 -100 -50 -50 0 -100 100 -100 200 -100 N X ~ 1 300 100 100 L 50 50 1 1 P X ~ 2 300 -100 100 L 50 50 1 1 P X ~ 3 300 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # Connector_Generic_Conn_01x04 # DEF Connector_Generic_Conn_01x04 J 0 40 Y N 1 F N F0 "J" 0 200 50 H V C CNN F1 "Connector_Generic_Conn_01x04" 0 -300 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST Connector*:*_1x??_* $ENDFPLIST DRAW S -50 -195 0 -205 1 1 6 N S -50 -95 0 -105 1 1 6 N S -50 5 0 -5 1 1 6 N S -50 105 0 95 1 1 6 N S -50 150 50 -250 1 1 10 f X Pin_1 1 -200 100 150 R 50 50 1 1 P X Pin_2 2 -200 0 150 R 50 50 1 1 P X Pin_3 3 -200 -100 150 R 50 50 1 1 P X Pin_4 4 -200 -200 150 R 50 50 1 1 P ENDDRAW ENDDEF # # Connector_Generic_Conn_02x04_Odd_Even # DEF Connector_Generic_Conn_02x04_Odd_Even J 0 40 Y N 1 F N F0 "J" 50 200 50 H V C CNN F1 "Connector_Generic_Conn_02x04_Odd_Even" 50 -300 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST Connector*:*_2x??_* $ENDFPLIST DRAW S -50 -195 0 -205 1 1 6 N S -50 -95 0 -105 1 1 6 N S -50 5 0 -5 1 1 6 N S -50 105 0 95 1 1 6 N S -50 150 150 -250 1 1 10 f S 150 -195 100 -205 1 1 6 N S 150 -95 100 -105 1 1 6 N S 150 5 100 -5 1 1 6 N S 150 105 100 95 1 1 6 N X Pin_1 1 -200 100 150 R 50 50 1 1 P X Pin_2 2 300 100 150 L 50 50 1 1 P X Pin_3 3 -200 0 150 R 50 50 1 1 P X Pin_4 4 300 0 150 L 50 50 1 1 P X Pin_5 5 -200 -100 150 R 50 50 1 1 P X Pin_6 6 300 -100 150 L 50 50 1 1 P X Pin_7 7 -200 -200 150 R 50 50 1 1 P X Pin_8 8 300 -200 150 L 50 50 1 1 P ENDDRAW ENDDEF # # Connector_Screw_Terminal_01x03 # DEF Connector_Screw_Terminal_01x03 J 0 40 Y N 1 F N F0 "J" 0 200 50 H V C CNN F1 "Connector_Screw_Terminal_01x03" 0 -200 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST TerminalBlock*:* $ENDFPLIST DRAW C 0 -100 25 1 1 6 N C 0 0 25 1 1 6 N C 0 100 25 1 1 6 N S -50 150 50 -150 1 1 10 f P 2 1 1 6 -21 -87 13 -120 N P 2 1 1 6 -21 13 13 -20 N P 2 1 1 6 -21 113 13 80 N P 2 1 1 6 -14 -80 20 -113 N P 2 1 1 6 -14 20 20 -13 N P 2 1 1 6 -14 120 20 87 N X Pin_1 1 -200 100 150 R 50 50 1 1 P X Pin_2 2 -200 0 150 R 50 50 1 1 P X Pin_3 3 -200 -100 150 R 50 50 1 1 P ENDDRAW ENDDEF # # Device_C_Small # DEF Device_C_Small C 0 10 N N 1 F N F0 "C" 10 70 50 H V L CNN F1 "Device_C_Small" 10 -80 50 H V L CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST C_* $ENDFPLIST DRAW P 2 0 1 13 -60 -20 60 -20 N P 2 0 1 12 -60 20 60 20 N X ~ 1 0 100 80 D 50 50 1 1 P X ~ 2 0 -100 80 U 50 50 1 1 P ENDDRAW ENDDEF # # ESP32Modules_TTGO_TDisplay # DEF ESP32Modules_TTGO_TDisplay U 0 40 Y Y 1 F N F0 "U" -200 750 50 H V C CNN F1 "ESP32Modules_TTGO_TDisplay" 0 650 50 H V C CNN F2 "" -200 50 50 H I C CNN F3 "" -200 50 50 H I C CNN DRAW C -110 -10 0 0 1 0 N C -60 -310 0 0 1 0 N C -60 -110 0 0 1 0 N S -400 700 400 -700 0 1 0 f P 2 0 1 0 -110 10 -110 0 N P 2 0 1 0 -60 -290 -60 -300 N P 2 0 1 0 -60 -90 -60 -100 N P 4 0 1 0 -110 30 -140 -20 -80 -20 -110 30 N P 4 0 1 0 -60 -270 -90 -320 -30 -320 -60 -270 N P 4 0 1 0 -60 -70 -90 -120 -30 -120 -60 -70 N P 4 0 1 0 370 100 400 130 400 70 370 100 F P 4 0 1 0 370 200 400 230 400 170 370 200 F P 4 0 1 0 370 300 400 330 400 270 370 300 F P 4 0 1 0 370 400 400 430 400 370 370 400 F X GND 1 -500 500 100 R 50 50 1 1 P X GND 10 -500 -400 100 R 50 50 1 1 P X GND 11 -500 -500 100 R 50 50 1 1 P X 3V3 12 -500 -600 100 R 50 50 1 1 P X 5V 13 500 -600 100 L 50 50 1 1 P X GND 14 500 -500 100 L 50 50 1 1 P X GPIO27 15 500 -400 100 L 50 50 1 1 P X GPIO26 16 500 -300 100 L 50 50 1 1 P X GPIO25 17 500 -200 100 L 50 50 1 1 P X GPIO33 18 500 -100 100 L 50 50 1 1 P X GPIO32 19 500 0 100 L 50 50 1 1 P X GND 2 -500 400 100 R 50 50 1 1 P X GPIO39 20 500 100 100 L 50 50 1 1 P X GPIO38 21 500 200 100 L 50 50 1 1 P X GPIO37 22 500 300 100 L 50 50 1 1 P X GPIO36 23 500 400 100 L 50 50 1 1 P X 3V3 24 500 500 100 L 50 50 1 1 P X GPIO21 3 -500 300 100 R 50 50 1 1 P X GPIO22 4 -500 200 100 R 50 50 1 1 P X GPIO17 5 -500 100 100 R 50 50 1 1 P X GPIO2 6 -500 0 100 R 50 50 1 1 P X GPIO15 7 -500 -100 100 R 50 50 1 1 P X GPIO13 8 -500 -200 100 R 50 50 1 1 P X GPIO12 9 -500 -300 100 R 50 50 1 1 P ENDDRAW ENDDEF # # Mechanical_MountingHole_Pad # DEF Mechanical_MountingHole_Pad H 0 40 N N 1 F N F0 "H" 0 250 50 H V C CNN F1 "Mechanical_MountingHole_Pad" 0 175 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST MountingHole*Pad* $ENDFPLIST DRAW C 0 50 50 0 1 50 N X 1 1 0 -100 100 U 50 50 1 1 I ENDDRAW ENDDEF # # Regulator_Linear_LM7805_TO220 # DEF Regulator_Linear_LM7805_TO220 U 0 10 Y Y 1 F N F0 "U" -150 125 50 H V C CNN F1 "Regulator_Linear_LM7805_TO220" 0 125 50 H V L CNN F2 "Package_TO_SOT_THT:TO-220-3_Vertical" 0 225 50 H I C CIN F3 "" 0 -50 50 H I C CNN ALIAS LM7806_TO220 LM7808_TO220 LM7809_TO220 LM7810_TO220 LM7812_TO220 LM7815_TO220 LM7818_TO220 LM7824_TO220 LM78M05_TO220 SPX2920U-3.3_TO220 SPX2920U-5.0_TO220 LF15_TO220 LF18_TO220 LF25_TO220 LF33_TO220 LF50_TO220 LF60_TO220 LF80_TO220 LF85_TO220 LF120_TO220 LF47_TO220 LF90_TO220 LM341T-05_TO220 LM341T-12_TO220 LM341T-15_TO220 LM2937xT LM2931-3.3_TO220 LM2931-5.0_TO220 $FPLIST TO?220* $ENDFPLIST DRAW S -200 75 200 -200 0 1 10 f X VI 1 -300 0 100 R 50 50 1 1 W X GND 2 0 -300 100 U 50 50 1 1 W X VO 3 300 0 100 L 50 50 1 1 w ENDDRAW ENDDEF # # no_pin_no_pin # DEF no_pin_no_pin Z 0 40 Y Y 1 F N F0 "Z" -350 150 60 H V C CNN F1 "no_pin_no_pin" 0 0 60 H V C CNN F2 "" 0 0 60 H I C CNN F3 "" 0 0 60 H I C CNN DRAW S -400 100 400 -100 0 1 0 N ENDDRAW ENDDEF # # power_+12V # DEF power_+12V #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -150 50 H I C CNN F1 "power_+12V" 0 140 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 2 0 1 0 -30 50 0 100 N P 2 0 1 0 0 0 0 100 N P 2 0 1 0 0 100 30 50 N X +12V 1 0 0 0 U 50 50 1 1 W N ENDDRAW ENDDEF # # power_+3.3V # DEF power_+3.3V #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -150 50 H I C CNN F1 "power_+3.3V" 0 140 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN ALIAS +3.3V DRAW P 2 0 1 0 -30 50 0 100 N P 2 0 1 0 0 0 0 100 N P 2 0 1 0 0 100 30 50 N X +3V3 1 0 0 0 U 50 50 1 1 W N ENDDRAW ENDDEF # # power_+5V # DEF power_+5V #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -150 50 H I C CNN F1 "power_+5V" 0 140 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 2 0 1 0 -30 50 0 100 N P 2 0 1 0 0 0 0 100 N P 2 0 1 0 0 100 30 50 N X +5V 1 0 0 0 U 50 50 1 1 W N ENDDRAW ENDDEF # # power_GND # DEF power_GND #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -250 50 H I C CNN F1 "power_GND" 0 -150 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 6 0 1 0 0 0 0 -50 50 -50 0 -100 -50 -50 0 -50 N X GND 1 0 0 0 D 50 50 1 1 W N ENDDRAW ENDDEF # # power_PWR_FLAG # DEF power_PWR_FLAG #FLG 0 0 N N 1 F P F0 "#FLG" 0 75 50 H I C CNN F1 "power_PWR_FLAG" 0 150 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 6 0 1 0 0 0 0 50 -40 75 0 100 40 75 0 50 N X pwr 1 0 0 0 U 50 50 0 0 w ENDDRAW ENDDEF # #End Library ================================================ FILE: electronics/chainlinkBuddyTDisplay/chainlinkBuddyTDisplay.kibot.yml ================================================ kibot: version: 1 preflight: check_zone_fills: true run_drc: true run_erc: true update_xml: true outputs: - name: ibom comment: 'Interactive BOM' type: ibom dir: bom options: layer_view: F dark_mode: true netlist_file: '%F.xml' extra_fields: 'DK#' ================================================ FILE: electronics/chainlinkBuddyTDisplay/chainlinkBuddyTDisplay.kicad_pcb ================================================ (kicad_pcb (version 20171130) (host pcbnew 5.1.10-88a1d61d58~90~ubuntu20.04.1) (general (thickness 1.6) (drawings 49) (tracks 64) (zones 0) (modules 13) (nets 22) ) (page A4) (layers (0 F.Cu signal) (31 B.Cu signal) (32 B.Adhes user) (33 F.Adhes user) (34 B.Paste user) (35 F.Paste user) (36 B.SilkS user) (37 F.SilkS user) (38 B.Mask user) (39 F.Mask user) (40 Dwgs.User user) (41 Cmts.User user) (42 Eco1.User user) (43 Eco2.User user) (44 Edge.Cuts user) (45 Margin user) (46 B.CrtYd user) (47 F.CrtYd user) (48 B.Fab user) (49 F.Fab user) ) (setup (last_trace_width 0.25) (user_trace_width 0.25) (user_trace_width 0.5) (trace_clearance 0.2) (zone_clearance 0.508) (zone_45_only no) (trace_min 0.2) (via_size 0.8) (via_drill 0.4) (via_min_size 0.4) (via_min_drill 0.3) (uvia_size 0.3) (uvia_drill 0.1) (uvias_allowed no) (uvia_min_size 0.2) (uvia_min_drill 0.1) (edge_width 0.05) (segment_width 0.2) (pcb_text_width 0.3) (pcb_text_size 1.5 1.5) (mod_edge_width 0.12) (mod_text_size 1 1) (mod_text_width 0.15) (pad_size 1.524 1.524) (pad_drill 0.762) (pad_to_mask_clearance 0) (aux_axis_origin 0 0) (visible_elements FFFFFF7F) (pcbplotparams (layerselection 0x010fc_ffffffff) (usegerberextensions false) (usegerberattributes true) (usegerberadvancedattributes true) (creategerberjobfile true) (excludeedgelayer true) (linewidth 0.100000) (plotframeref false) (viasonmask false) (mode 1) (useauxorigin false) (hpglpennumber 1) (hpglpenspeed 20) (hpglpendiameter 15.000000) (psnegative false) (psa4output false) (plotreference true) (plotvalue true) (plotinvisibletext false) (padsonsilk false) (subtractmaskfromsilk false) (outputformat 1) (mirror false) (drillshape 1) (scaleselection 1) (outputdirectory "")) ) (net 0 "") (net 1 GND) (net 2 /LATCH) (net 3 /SENSOR_DATA) (net 4 /MOTOR_DATA) (net 5 /CLOCK) (net 6 "Net-(U1-Pad22)") (net 7 "Net-(U1-Pad21)") (net 8 "Net-(U1-Pad16)") (net 9 "Net-(U1-Pad24)") (net 10 "Net-(U1-Pad15)") (net 11 "Net-(U1-Pad23)") (net 12 "Net-(U1-Pad8)") (net 13 "Net-(U1-Pad6)") (net 14 "Net-(U1-Pad3)") (net 15 "Net-(U1-Pad4)") (net 16 "Net-(U1-Pad5)") (net 17 "Net-(U1-Pad9)") (net 18 "Net-(U1-Pad7)") (net 19 +5V) (net 20 +3V3) (net 21 +12V) (net_class Default "This is the default net class." (clearance 0.2) (trace_width 0.25) (via_dia 0.8) (via_drill 0.4) (uvia_dia 0.3) (uvia_drill 0.1) (add_net +12V) (add_net +3V3) (add_net +5V) (add_net /CLOCK) (add_net /LATCH) (add_net /MOTOR_DATA) (add_net /SENSOR_DATA) (add_net GND) (add_net "Net-(U1-Pad15)") (add_net "Net-(U1-Pad16)") (add_net "Net-(U1-Pad21)") (add_net "Net-(U1-Pad22)") (add_net "Net-(U1-Pad23)") (add_net "Net-(U1-Pad24)") (add_net "Net-(U1-Pad3)") (add_net "Net-(U1-Pad4)") (add_net "Net-(U1-Pad5)") (add_net "Net-(U1-Pad6)") (add_net "Net-(U1-Pad7)") (add_net "Net-(U1-Pad8)") (add_net "Net-(U1-Pad9)") ) (module ModifiedSymbols:PinHoles_1x04_P2.54mm_NoSilk (layer F.Cu) (tedit 6180B6F8) (tstamp 61819D20) (at 83.82 93.98) (descr "Through hole straight socket strip, 1x04, 2.54mm pitch, single row (from Kicad 4.0.7), script generated") (tags "Through hole socket strip THT 1x04 2.54mm single row") (path /61C9DDB1) (fp_text reference J7 (at 0 -2.77) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value Conn_01x04 (at 0 10.39) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -1.27 -1.27) (end 0.635 -1.27) (layer F.Fab) (width 0.1)) (fp_line (start 0.635 -1.27) (end 1.27 -0.635) (layer F.Fab) (width 0.1)) (fp_line (start 1.27 -0.635) (end 1.27 8.89) (layer F.Fab) (width 0.1)) (fp_line (start 1.27 8.89) (end -1.27 8.89) (layer F.Fab) (width 0.1)) (fp_line (start -1.27 8.89) (end -1.27 -1.27) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 3.81 270) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 1 thru_hole rect (at 0 0) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 21 +12V)) (pad 2 thru_hole oval (at 0 2.54) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 21 +12V)) (pad 3 thru_hole oval (at 0 5.08) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 21 +12V)) (pad 4 thru_hole oval (at 0 7.62) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 21 +12V)) ) (module ModifiedSymbols:TO-220-3_Vertical (layer F.Cu) (tedit 617DDCF3) (tstamp 617D2F10) (at 80.01 110.49 180) (descr "TO-220-3, Vertical, RM 2.54mm, see https://www.vishay.com/docs/66542/to-220-1.pdf") (tags "TO-220-3 Vertical RM 2.54mm") (path /617DC13F) (fp_text reference U2 (at 2.54 -4.27) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value LM7805_TO220 (at 2.54 2.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 7.79 -3.4) (end -2.71 -3.4) (layer F.CrtYd) (width 0.05)) (fp_line (start 7.79 1.51) (end 7.79 -3.4) (layer F.CrtYd) (width 0.05)) (fp_line (start -2.71 1.51) (end 7.79 1.51) (layer F.CrtYd) (width 0.05)) (fp_line (start -2.71 -3.4) (end -2.71 1.51) (layer F.CrtYd) (width 0.05)) (fp_line (start 4.39 -3.15) (end 4.39 -1.88) (layer F.Fab) (width 0.1)) (fp_line (start 0.69 -3.15) (end 0.69 -1.88) (layer F.Fab) (width 0.1)) (fp_line (start -2.46 -1.88) (end 7.54 -1.88) (layer F.Fab) (width 0.1)) (fp_line (start 7.54 -3.15) (end -2.46 -3.15) (layer F.Fab) (width 0.1)) (fp_line (start 7.54 1.25) (end 7.54 -3.15) (layer F.Fab) (width 0.1)) (fp_line (start -2.46 1.25) (end 7.54 1.25) (layer F.Fab) (width 0.1)) (fp_line (start -2.46 -3.15) (end -2.46 1.25) (layer F.Fab) (width 0.1)) (fp_text user %R (at 2.54 -4.27) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 3 thru_hole oval (at 5.08 0 180) (size 1.905 2) (drill 1.1) (layers *.Cu *.Mask) (net 19 +5V)) (pad 2 thru_hole oval (at 2.54 0 180) (size 1.905 2) (drill 1.1) (layers *.Cu *.Mask) (net 1 GND)) (pad 1 thru_hole rect (at 0 0 180) (size 1.905 2) (drill 1.1) (layers *.Cu *.Mask) (net 21 +12V)) (model ${KISYS3DMOD}/Package_TO_SOT_THT.3dshapes/TO-220-3_Vertical.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Symbol:Symbol_Barrel_Polarity (layer B.Cu) (tedit 5765E9A7) (tstamp 617E3EDF) (at 89.535 110.49 180) (descr "Barrel connector polarity indicator") (tags "barrel polarity") (path /617F16BD) (attr virtual) (fp_text reference Z1 (at 0 2) (layer B.SilkS) hide (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) (fp_text value "polarity label" (at 0 -2) (layer B.Fab) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) (fp_line (start 0 -0.075) (end 2 -0.075) (layer B.SilkS) (width 0.15)) (fp_line (start -2 -0.075) (end -1.1 -0.075) (layer B.SilkS) (width 0.15)) (fp_circle (center -3 -0.075) (end -3 -1) (layer B.SilkS) (width 0.15)) (fp_circle (center 3 -0.075) (end 3 -1) (layer B.SilkS) (width 0.15)) (fp_circle (center 0 -0.075) (end 0 -0.25) (layer B.SilkS) (width 0.5)) (fp_arc (start 0 -0.075) (end 0.75 -0.75) (angle -270) (layer B.SilkS) (width 0.15)) ) (module PJ-202A:PJ-202A (layer F.Cu) (tedit 617CDF26) (tstamp 617D3533) (at 89.535 102.87 270) (descr "CONN POWER JACK 2.1MM PCB") (tags "CONN POWER JACK 2.1MM PCB BARREL JACK") (path /617CEDE5) (fp_text reference J3 (at 0 -2.54 90) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value Barrel_Jack_Switch (at 0.7 3.5 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -3.7 4.5) (end -3.7 2.3) (layer F.Fab) (width 0.15)) (fp_line (start 10.7 4.5) (end -3.7 4.5) (layer F.Fab) (width 0.15)) (fp_line (start 10.7 -4.5) (end 10.7 4.5) (layer F.Fab) (width 0.15)) (fp_line (start 2 -4.5) (end 10.7 -4.5) (layer F.Fab) (width 0.15)) (fp_line (start -3.7 -4.5) (end -2 -4.5) (layer F.Fab) (width 0.15)) (fp_line (start -3.7 -2.3) (end -3.7 -4.5) (layer F.Fab) (width 0.15)) (fp_line (start 7.2 -4.5) (end 7.2 4.5) (layer F.Fab) (width 0.15)) (pad 3 thru_hole oval (at 0 -4.7 270) (size 4 2) (drill oval 3 1) (layers *.Cu *.Mask)) (pad 2 thru_hole oval (at 3 0 270) (size 2 4) (drill oval 1 3) (layers *.Cu *.Mask) (net 1 GND)) (pad 1 thru_hole oval (at -3 0 270) (size 2 4.5) (drill oval 1 3.5) (layers *.Cu *.Mask) (net 21 +12V)) (model ${KIPRJMOD}/../lib/54-00131.STEP (offset (xyz 10.5 0 6.5)) (scale (xyz 1 1 1)) (rotate (xyz -90 0 -90)) ) ) (module Capacitor_SMD:C_1206_3216Metric_Pad1.33x1.80mm_HandSolder (layer F.Cu) (tedit 5F68FEEF) (tstamp 617CFCA5) (at 74.93 107.315) (descr "Capacitor SMD 1206 (3216 Metric), square (rectangular) end terminal, IPC_7351 nominal with elongated pad for handsoldering. (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") (tags "capacitor handsolder") (path /617E09DF) (attr smd) (fp_text reference C2 (at -3.175 0) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value 22uF (at 0 1.85) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -1.6 0.8) (end -1.6 -0.8) (layer F.Fab) (width 0.1)) (fp_line (start -1.6 -0.8) (end 1.6 -0.8) (layer F.Fab) (width 0.1)) (fp_line (start 1.6 -0.8) (end 1.6 0.8) (layer F.Fab) (width 0.1)) (fp_line (start 1.6 0.8) (end -1.6 0.8) (layer F.Fab) (width 0.1)) (fp_line (start -0.711252 -0.91) (end 0.711252 -0.91) (layer F.SilkS) (width 0.12)) (fp_line (start -0.711252 0.91) (end 0.711252 0.91) (layer F.SilkS) (width 0.12)) (fp_line (start -2.48 1.15) (end -2.48 -1.15) (layer F.CrtYd) (width 0.05)) (fp_line (start -2.48 -1.15) (end 2.48 -1.15) (layer F.CrtYd) (width 0.05)) (fp_line (start 2.48 -1.15) (end 2.48 1.15) (layer F.CrtYd) (width 0.05)) (fp_line (start 2.48 1.15) (end -2.48 1.15) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.8 0.8) (thickness 0.12))) ) (pad 2 smd roundrect (at 1.5625 0) (size 1.325 1.8) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.188679) (net 1 GND)) (pad 1 smd roundrect (at -1.5625 0) (size 1.325 1.8) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.188679) (net 19 +5V)) (model ${KISYS3DMOD}/Capacitor_SMD.3dshapes/C_1206_3216Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Capacitor_SMD:C_1206_3216Metric_Pad1.33x1.80mm_HandSolder (layer F.Cu) (tedit 5F68FEEF) (tstamp 617CEFC8) (at 80.01 107.315 180) (descr "Capacitor SMD 1206 (3216 Metric), square (rectangular) end terminal, IPC_7351 nominal with elongated pad for handsoldering. (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") (tags "capacitor handsolder") (path /617DDA1A) (attr smd) (fp_text reference C1 (at -3.175 0) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value 10uF (at 0 1.85) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 2.48 1.15) (end -2.48 1.15) (layer F.CrtYd) (width 0.05)) (fp_line (start 2.48 -1.15) (end 2.48 1.15) (layer F.CrtYd) (width 0.05)) (fp_line (start -2.48 -1.15) (end 2.48 -1.15) (layer F.CrtYd) (width 0.05)) (fp_line (start -2.48 1.15) (end -2.48 -1.15) (layer F.CrtYd) (width 0.05)) (fp_line (start -0.711252 0.91) (end 0.711252 0.91) (layer F.SilkS) (width 0.12)) (fp_line (start -0.711252 -0.91) (end 0.711252 -0.91) (layer F.SilkS) (width 0.12)) (fp_line (start 1.6 0.8) (end -1.6 0.8) (layer F.Fab) (width 0.1)) (fp_line (start 1.6 -0.8) (end 1.6 0.8) (layer F.Fab) (width 0.1)) (fp_line (start -1.6 -0.8) (end 1.6 -0.8) (layer F.Fab) (width 0.1)) (fp_line (start -1.6 0.8) (end -1.6 -0.8) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.8 0.8) (thickness 0.12))) ) (pad 1 smd roundrect (at -1.5625 0 180) (size 1.325 1.8) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.188679) (net 21 +12V)) (pad 2 smd roundrect (at 1.5625 0 180) (size 1.325 1.8) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.188679) (net 1 GND)) (model ${KISYS3DMOD}/Capacitor_SMD.3dshapes/C_1206_3216Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module ScrewTerminals:Generic-5.08-3P (layer F.Cu) (tedit 606BBBA9) (tstamp 617D51CF) (at 76.2 92.71 270) (path /61A7AAE2) (fp_text reference J2 (at -1.27 -3.175 180) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value Screw_Terminal_01x03 (at 0 -0.5 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 4.445 3.04) (end 5.715 3.04) (layer F.SilkS) (width 0.15)) (fp_line (start 3.81 4.23) (end 4.445 3.04) (layer F.SilkS) (width 0.15)) (fp_line (start 5.715 3.04) (end 6.35 4.23) (layer F.SilkS) (width 0.15)) (fp_line (start 0.635 3.04) (end 1.27 4.23) (layer F.SilkS) (width 0.15)) (fp_line (start -0.635 3.04) (end 0.635 3.04) (layer F.SilkS) (width 0.15)) (fp_line (start -1.27 4.23) (end -0.635 3.04) (layer F.SilkS) (width 0.15)) (fp_line (start 12.7 -4.3) (end 12.7 4.3) (layer F.SilkS) (width 0.12)) (fp_line (start -2.54 -4.3) (end 12.7 -4.3) (layer F.SilkS) (width 0.12)) (fp_line (start 12.7 4.3) (end -2.54 4.3) (layer F.SilkS) (width 0.12)) (fp_line (start -2.54 4.3) (end -2.54 -4.3) (layer F.SilkS) (width 0.12)) (fp_line (start -2.54 6.2) (end -2.54 -6.2) (layer F.CrtYd) (width 0.12)) (fp_line (start 12.7 6.2) (end -2.54 6.2) (layer F.CrtYd) (width 0.12)) (fp_line (start 12.7 -6.2) (end 12.7 6.2) (layer F.CrtYd) (width 0.12)) (fp_line (start -2.54 -6.2) (end 12.7 -6.2) (layer F.CrtYd) (width 0.12)) (fp_line (start 9.525 3.04) (end 10.795 3.04) (layer F.SilkS) (width 0.15)) (fp_line (start 10.795 3.04) (end 11.43 4.23) (layer F.SilkS) (width 0.15)) (fp_line (start 8.89 4.23) (end 9.525 3.04) (layer F.SilkS) (width 0.15)) (fp_text user "Generic screw terminal keep out region" (at 5.08 -5.08 90) (layer F.Fab) (effects (font (size 0.5 0.3) (thickness 0.05))) ) (fp_text user "Generic screw terminal keep out region" (at 5.08 5.08 90) (layer F.Fab) (effects (font (size 0.5 0.3) (thickness 0.05))) ) (pad 1 thru_hole rect (at 0 0 270) (size 2 2) (drill 1.2) (layers *.Cu *.Mask) (net 20 +3V3)) (pad 2 thru_hole circle (at 5.08 0 270) (size 2 2) (drill 1.2) (layers *.Cu *.Mask) (net 1 GND)) (pad 3 thru_hole circle (at 10.16 0 270) (size 2 2) (drill 1.2) (layers *.Cu *.Mask) (net 21 +12V)) (model ${KISYS3DMOD}/TerminalBlock_Phoenix.3dshapes/TerminalBlock_Phoenix_MKDS-1,5-3-5.08_1x03_P5.08mm_Horizontal.step (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module ESP32:T-DISPLAY_extra_pins_labeled_double (layer F.Cu) (tedit 617B751D) (tstamp 617D4FBE) (at 93.98 95.25 90) (path /61A38EB2) (fp_text reference U1 (at 11.43 -1.27 90) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value TTGO_TDisplay (at 11.43 -5.08 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 22.86 0) (end 26.67 -3.81) (layer F.Fab) (width 0.12)) (fp_line (start 19.05 0) (end 26.67 -7.62) (layer F.Fab) (width 0.12)) (fp_line (start 15.24 0) (end 26.67 -11.43) (layer F.Fab) (width 0.12)) (fp_line (start 22.86 -11.43) (end 11.43 0) (layer F.Fab) (width 0.12)) (fp_line (start 7.62 0) (end 19.05 -11.43) (layer F.Fab) (width 0.12)) (fp_line (start 3.81 0) (end 15.24 -11.43) (layer F.Fab) (width 0.12)) (fp_line (start 0 0) (end 11.43 -11.43) (layer F.Fab) (width 0.12)) (fp_line (start -3.81 0) (end 7.62 -11.43) (layer F.Fab) (width 0.12)) (fp_line (start -3.81 -3.81) (end 3.81 -11.43) (layer F.Fab) (width 0.12)) (fp_line (start -3.81 -7.62) (end 0 -11.43) (layer F.Fab) (width 0.12)) (fp_line (start 26.67 0) (end -3.81 0) (layer F.Fab) (width 0.12)) (fp_line (start 26.67 -11.43) (end 26.67 0) (layer F.Fab) (width 0.12)) (fp_line (start -3.81 -11.43) (end 26.67 -11.43) (layer F.Fab) (width 0.12)) (fp_line (start -3.81 0) (end -3.81 -11.43) (layer F.Fab) (width 0.12)) (fp_line (start -1.11 -7.54) (end 23.98 -7.54) (layer F.SilkS) (width 0.15)) (fp_line (start -1.11 -3.15) (end 23.98 -3.15) (layer F.SilkS) (width 0.15)) (fp_line (start -1.11 -7.54) (end -1.11 43.95) (layer F.SilkS) (width 0.15)) (fp_line (start 23.98 -7.54) (end 23.98 43.95) (layer F.SilkS) (width 0.15)) (fp_line (start -1.11 43.95) (end 23.98 43.95) (layer F.SilkS) (width 0.15)) (fp_line (start 3.935 83.95) (end 18.935 83.95) (layer F.Fab) (width 0.12)) (fp_text user 5V (at 26.67 27.94 90) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right mirror)) ) (fp_text user G (at 26.67 25.4 90) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right mirror)) ) (fp_text user 27 (at 26.67 22.86 90) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right mirror)) ) (fp_text user 26 (at 26.67 20.32 90) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right mirror)) ) (fp_text user 25 (at 26.67 17.78 90) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right mirror)) ) (fp_text user 33 (at 26.67 15.24 90) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right mirror)) ) (fp_text user 32 (at 26.67 12.7 90) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right mirror)) ) (fp_text user 39 (at 26.67 10.16 90) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right mirror)) ) (fp_text user 38 (at 26.67 7.62 90) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right mirror)) ) (fp_text user 37 (at 26.67 5.08 90) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right mirror)) ) (fp_text user 36 (at 26.67 2.54 90) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right mirror)) ) (fp_text user 3V (at 26.67 0 90) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right mirror)) ) (fp_text user 5V (at 26.67 27.94 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left)) ) (fp_text user G (at 26.67 25.4 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left)) ) (fp_text user 27 (at 26.67 22.86 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left)) ) (fp_text user 26 (at 26.67 20.32 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left)) ) (fp_text user 25 (at 26.67 17.78 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left)) ) (fp_text user 33 (at 26.67 15.24 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left)) ) (fp_text user 32 (at 26.67 12.7 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left)) ) (fp_text user 39 (at 26.67 10.16 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left)) ) (fp_text user 38 (at 26.67 7.62 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left)) ) (fp_text user 37 (at 26.67 5.08 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left)) ) (fp_text user 36 (at 26.67 2.54 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left)) ) (fp_text user 3V (at 26.67 0 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left)) ) (fp_text user 3V (at -3.81 27.94 90) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left mirror)) ) (fp_text user G (at -3.81 25.4 90) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left mirror)) ) (fp_text user G (at -3.81 22.86 90) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left mirror)) ) (fp_text user 12 (at -3.81 20.32 90) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left mirror)) ) (fp_text user 13 (at -3.81 17.78 90) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left mirror)) ) (fp_text user 15 (at -3.81 15.24 90) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left mirror)) ) (fp_text user 2 (at -3.81 12.7 90) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left mirror)) ) (fp_text user 17 (at -3.81 10.16 90) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left mirror)) ) (fp_text user 22 (at -3.81 7.62 90) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left mirror)) ) (fp_text user 21 (at -3.81 5.08 90) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left mirror)) ) (fp_text user G (at -3.81 2.54 90) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left mirror)) ) (fp_text user G (at -3.81 0 90) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left mirror)) ) (fp_text user 3V (at -3.81 27.94 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right)) ) (fp_text user G (at -3.81 25.4 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right)) ) (fp_text user G (at -3.81 22.86 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right)) ) (fp_text user 12 (at -3.81 20.32 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right)) ) (fp_text user 13 (at -3.81 17.78 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right)) ) (fp_text user 15 (at -3.81 15.24 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right)) ) (fp_text user 2 (at -3.81 12.7 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right)) ) (fp_text user 17 (at -3.81 10.16 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right)) ) (fp_text user 22 (at -3.81 7.62 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right)) ) (fp_text user 21 (at -3.81 5.08 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right)) ) (fp_text user G (at -3.81 2.54 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right)) ) (fp_text user G (at -3.81 0 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right)) ) (fp_text user 38 (at 19.05 7.62 90) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left mirror)) ) (fp_text user 25 (at 19.05 17.78 90) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left mirror)) ) (fp_text user G (at 19.05 25.4 90) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left mirror)) ) (fp_text user 5V (at 19.05 27.94 90) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left mirror)) ) (fp_text user 36 (at 19.05 2.54 90) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left mirror)) ) (fp_text user 26 (at 19.05 20.32 90) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left mirror)) ) (fp_text user 37 (at 19.05 5.08 90) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left mirror)) ) (fp_text user 33 (at 19.05 15.24 90) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left mirror)) ) (fp_text user 39 (at 19.05 10.16 90) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left mirror)) ) (fp_text user 32 (at 19.05 12.7 90) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left mirror)) ) (fp_text user 27 (at 19.05 22.86 90) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left mirror)) ) (fp_text user 3V (at 19.05 0 90) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left mirror)) ) (fp_text user 2 (at 3.81 12.7 90) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right mirror)) ) (fp_text user G (at 3.81 22.86 90) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right mirror)) ) (fp_text user 22 (at 3.81 7.62 90) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right mirror)) ) (fp_text user 17 (at 3.81 10.16 90) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right mirror)) ) (fp_text user 21 (at 3.81 5.08 90) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right mirror)) ) (fp_text user G (at 3.81 25.4 90) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right mirror)) ) (fp_text user G (at 3.81 2.54 90) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right mirror)) ) (fp_text user 12 (at 3.81 20.32 90) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right mirror)) ) (fp_text user 3V (at 3.81 27.94 90) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right mirror)) ) (fp_text user 15 (at 3.81 15.24 90) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right mirror)) ) (fp_text user 13 (at 3.81 17.78 90) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right mirror)) ) (fp_text user G (at 3.81 0 90) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right mirror)) ) (fp_text user 5V (at 19.05 27.94 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right)) ) (fp_text user G (at 19.05 25.4 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right)) ) (fp_text user 27 (at 19.05 22.86 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right)) ) (fp_text user 26 (at 19.05 20.32 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right)) ) (fp_text user 25 (at 19.05 17.78 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right)) ) (fp_text user 33 (at 19.05 15.24 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right)) ) (fp_text user 32 (at 19.05 12.7 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right)) ) (fp_text user 39 (at 19.05 10.16 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right)) ) (fp_text user 38 (at 19.05 7.62 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right)) ) (fp_text user 37 (at 19.05 5.08 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right)) ) (fp_text user 36 (at 19.05 2.54 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right)) ) (fp_text user 3V (at 19.05 0 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right)) ) (fp_text user 3V (at 3.81 27.94 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left)) ) (fp_text user G (at 3.81 25.4 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left)) ) (fp_text user G (at 3.81 22.86 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left)) ) (fp_text user 12 (at 3.81 20.32 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left)) ) (fp_text user 13 (at 3.81 17.78 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left)) ) (fp_text user 15 (at 3.81 15.24 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left)) ) (fp_text user 2 (at 3.81 12.7 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left)) ) (fp_text user 17 (at 3.81 10.16 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left)) ) (fp_text user 22 (at 3.81 7.62 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left)) ) (fp_text user 21 (at 3.81 5.08 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left)) ) (fp_text user G (at 3.81 2.54 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left)) ) (fp_text user G (at 3.81 0 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left)) ) (fp_text user CABLE (at 10.795 63.754 180) (layer F.Fab) (effects (font (size 10 8) (thickness 0.15))) ) (pad 22 thru_hole circle (at 25.4 5.08 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 6 "Net-(U1-Pad22)")) (pad 20 thru_hole circle (at 25.4 10.16 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 3 /SENSOR_DATA)) (pad 23 thru_hole circle (at 25.4 2.54 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 11 "Net-(U1-Pad23)")) (pad 18 thru_hole circle (at 25.4 15.24 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 5 /CLOCK)) (pad 14 thru_hole circle (at 25.4 25.4 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 1 GND)) (pad 19 thru_hole circle (at 25.4 12.7 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 4 /MOTOR_DATA)) (pad 21 thru_hole circle (at 25.4 7.62 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 7 "Net-(U1-Pad21)")) (pad 24 thru_hole circle (at 25.4 0 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 9 "Net-(U1-Pad24)")) (pad 17 thru_hole circle (at 25.4 17.78 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 2 /LATCH)) (pad 13 thru_hole circle (at 25.4 27.94 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 19 +5V)) (pad 15 thru_hole circle (at 25.4 22.86 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 10 "Net-(U1-Pad15)")) (pad 16 thru_hole circle (at 25.4 20.32 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 8 "Net-(U1-Pad16)")) (pad 10 thru_hole circle (at -2.54 22.86 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 1 GND)) (pad 11 thru_hole circle (at -2.54 25.4 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 1 GND)) (pad 4 thru_hole circle (at -2.54 7.62 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 15 "Net-(U1-Pad4)")) (pad 2 thru_hole circle (at -2.54 2.54 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 1 GND)) (pad 8 thru_hole circle (at -2.54 17.78 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 12 "Net-(U1-Pad8)")) (pad 3 thru_hole circle (at -2.54 5.08 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 14 "Net-(U1-Pad3)")) (pad 6 thru_hole circle (at -2.54 12.7 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 13 "Net-(U1-Pad6)")) (pad 5 thru_hole circle (at -2.54 10.16 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 16 "Net-(U1-Pad5)")) (pad 9 thru_hole circle (at -2.54 20.32 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 17 "Net-(U1-Pad9)")) (pad 12 thru_hole circle (at -2.54 27.94 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 20 +3V3)) (pad 7 thru_hole circle (at -2.54 15.24 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 18 "Net-(U1-Pad7)")) (pad 1 thru_hole circle (at -2.54 0 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 1 GND)) (pad 22 thru_hole circle (at 20.32 5.08 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 6 "Net-(U1-Pad22)")) (pad 21 thru_hole circle (at 20.32 7.62 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 7 "Net-(U1-Pad21)")) (pad 19 thru_hole circle (at 20.32 12.7 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 4 /MOTOR_DATA)) (pad 20 thru_hole circle (at 20.32 10.16 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 3 /SENSOR_DATA)) (pad 17 thru_hole circle (at 20.32 17.78 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 2 /LATCH)) (pad 16 thru_hole circle (at 20.32 20.32 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 8 "Net-(U1-Pad16)")) (pad 14 thru_hole circle (at 20.32 25.4 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 1 GND)) (pad 24 thru_hole circle (at 20.32 0 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 9 "Net-(U1-Pad24)")) (pad 18 thru_hole circle (at 20.32 15.24 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 5 /CLOCK)) (pad 15 thru_hole circle (at 20.32 22.86 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 10 "Net-(U1-Pad15)")) (pad 13 thru_hole circle (at 20.32 27.94 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 19 +5V)) (pad 23 thru_hole circle (at 20.32 2.54 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 11 "Net-(U1-Pad23)")) (pad 8 thru_hole circle (at 2.54 17.78 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 12 "Net-(U1-Pad8)")) (pad 10 thru_hole circle (at 2.54 22.86 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 1 GND)) (pad 6 thru_hole circle (at 2.54 12.7 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 13 "Net-(U1-Pad6)")) (pad 1 thru_hole circle (at 2.54 0 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 1 GND)) (pad 2 thru_hole circle (at 2.54 2.54 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 1 GND)) (pad 3 thru_hole circle (at 2.54 5.08 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 14 "Net-(U1-Pad3)")) (pad 4 thru_hole circle (at 2.54 7.62 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 15 "Net-(U1-Pad4)")) (pad 5 thru_hole circle (at 2.54 10.16 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 16 "Net-(U1-Pad5)")) (pad 12 thru_hole circle (at 2.54 27.94 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 20 +3V3)) (pad 9 thru_hole circle (at 2.54 20.32 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 17 "Net-(U1-Pad9)")) (pad 11 thru_hole circle (at 2.54 25.4 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 1 GND)) (pad 7 thru_hole circle (at 2.54 15.24 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 18 "Net-(U1-Pad7)")) (pad 24 thru_hole circle (at 22.86 0 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 9 "Net-(U1-Pad24)")) (pad 23 thru_hole circle (at 22.86 2.54 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 11 "Net-(U1-Pad23)")) (pad 22 thru_hole circle (at 22.86 5.08 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 6 "Net-(U1-Pad22)")) (pad 21 thru_hole circle (at 22.86 7.62 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 7 "Net-(U1-Pad21)")) (pad 20 thru_hole circle (at 22.86 10.16 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 3 /SENSOR_DATA)) (pad 19 thru_hole circle (at 22.86 12.7 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 4 /MOTOR_DATA)) (pad 18 thru_hole circle (at 22.86 15.24 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 5 /CLOCK)) (pad 17 thru_hole circle (at 22.86 17.78 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 2 /LATCH)) (pad 16 thru_hole circle (at 22.86 20.32 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 8 "Net-(U1-Pad16)")) (pad 15 thru_hole circle (at 22.86 22.86 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 10 "Net-(U1-Pad15)")) (pad 14 thru_hole circle (at 22.86 25.4 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 1 GND)) (pad 13 thru_hole circle (at 22.86 27.94 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 19 +5V)) (pad 12 thru_hole circle (at 0 27.94 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 20 +3V3)) (pad 11 thru_hole circle (at 0 25.4 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 1 GND)) (pad 10 thru_hole circle (at 0 22.86 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 1 GND)) (pad 9 thru_hole circle (at 0 20.32 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 17 "Net-(U1-Pad9)")) (pad 8 thru_hole circle (at 0 17.78 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 12 "Net-(U1-Pad8)")) (pad 7 thru_hole circle (at 0 15.24 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 18 "Net-(U1-Pad7)")) (pad 6 thru_hole circle (at 0 12.7 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 13 "Net-(U1-Pad6)")) (pad 5 thru_hole circle (at 0 10.16 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 16 "Net-(U1-Pad5)")) (pad 4 thru_hole circle (at 0 7.62 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 15 "Net-(U1-Pad4)")) (pad 3 thru_hole circle (at 0 5.08 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 14 "Net-(U1-Pad3)")) (pad 2 thru_hole circle (at 0 2.54 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 1 GND)) (pad 1 thru_hole circle (at 0 0 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 1 GND)) (model ../lib/TTGO.models/TTGO_TDisplay.step (offset (xyz 0 0 10.5)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) (model ${KISYS3DMOD}/Connector_PinSocket_2.54mm.3dshapes/PinSocket_1x12_P2.54mm_Vertical.step (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) (model ${KISYS3DMOD}/Connector_PinSocket_2.54mm.3dshapes/PinSocket_1x12_P2.54mm_Vertical.step (offset (xyz 22.86 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) (model ${KISYS3DMOD}/Connector_PinHeader_2.54mm.3dshapes/PinHeader_1x12_P2.54mm_Vertical.step (offset (xyz 0 0 10)) (scale (xyz 1 1 1)) (rotate (xyz 0 180 0)) ) (model ${KISYS3DMOD}/Connector_PinHeader_2.54mm.3dshapes/PinHeader_1x12_P2.54mm_Vertical.step (offset (xyz 22.86 0 10)) (scale (xyz 1 1 1)) (rotate (xyz 0 180 0)) ) ) (module MountingHole:MountingHole_3.2mm_M3_ISO7380_Pad (layer F.Cu) (tedit 56D1B4CB) (tstamp 617D3FD4) (at 67.31 109.22) (descr "Mounting Hole 3.2mm, M3, ISO7380") (tags "mounting hole 3.2mm m3 iso7380") (path /61A7316A) (attr virtual) (fp_text reference H4 (at 0 -3.85) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value MountingHole_Pad (at 0 3.85) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_circle (center 0 0) (end 2.85 0) (layer Cmts.User) (width 0.15)) (fp_circle (center 0 0) (end 3.1 0) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0.3 0) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 1 thru_hole circle (at 0 0) (size 5.7 5.7) (drill 3.2) (layers *.Cu *.Mask) (net 1 GND)) ) (module MountingHole:MountingHole_3.2mm_M3_ISO7380_Pad (layer F.Cu) (tedit 56D1B4CB) (tstamp 617D4EDB) (at 134.62 109.22) (descr "Mounting Hole 3.2mm, M3, ISO7380") (tags "mounting hole 3.2mm m3 iso7380") (path /61A72DCF) (attr virtual) (fp_text reference H3 (at 0 -3.85) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value MountingHole_Pad (at 0 3.85) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_circle (center 0 0) (end 2.85 0) (layer Cmts.User) (width 0.15)) (fp_circle (center 0 0) (end 3.1 0) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0.3 0) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 1 thru_hole circle (at 0 0) (size 5.7 5.7) (drill 3.2) (layers *.Cu *.Mask) (net 1 GND)) ) (module MountingHole:MountingHole_3.2mm_M3_ISO7380_Pad (layer F.Cu) (tedit 56D1B4CB) (tstamp 617D4EF0) (at 134.62 67.31) (descr "Mounting Hole 3.2mm, M3, ISO7380") (tags "mounting hole 3.2mm m3 iso7380") (path /61A72B0C) (attr virtual) (fp_text reference H2 (at 0 -3.85) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value MountingHole_Pad (at 0 3.85) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_circle (center 0 0) (end 2.85 0) (layer Cmts.User) (width 0.15)) (fp_circle (center 0 0) (end 3.1 0) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0.3 0) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 1 thru_hole circle (at 0 0) (size 5.7 5.7) (drill 3.2) (layers *.Cu *.Mask) (net 1 GND)) ) (module MountingHole:MountingHole_3.2mm_M3_ISO7380_Pad (layer F.Cu) (tedit 56D1B4CB) (tstamp 617D3F9E) (at 67.31 67.31) (descr "Mounting Hole 3.2mm, M3, ISO7380") (tags "mounting hole 3.2mm m3 iso7380") (path /61A7210A) (attr virtual) (fp_text reference H1 (at 0 -3.85) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value MountingHole_Pad (at 0 3.85) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_circle (center 0 0) (end 2.85 0) (layer Cmts.User) (width 0.15)) (fp_circle (center 0 0) (end 3.1 0) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0.3 0) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 1 thru_hole circle (at 0 0) (size 5.7 5.7) (drill 3.2) (layers *.Cu *.Mask) (net 1 GND)) ) (module ModifiedSymbols:IDC-Header_2x04_P2.54mm_Vertical (layer F.Cu) (tedit 617B5015) (tstamp 617D3F45) (at 74.93 76.2) (descr "Through hole IDC box header, 2x04, 2.54mm pitch, DIN 41651 / IEC 60603-13, double rows, https://docs.google.com/spreadsheets/d/16SsEcesNF15N3Lb4niX7dcUr-NY5_MFPQhobNuNppn4/edit#gid=0") (tags "Through hole vertical IDC box header THT 2x04 2.54mm double row") (path /61A3A5EC) (fp_text reference J1 (at 3.175 -2.921) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value Output (at 1.27 13.72) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -3.18 -4.1) (end -2.18 -5.1) (layer F.Fab) (width 0.1)) (fp_line (start -2.18 -5.1) (end 5.72 -5.1) (layer F.Fab) (width 0.1)) (fp_line (start 5.72 -5.1) (end 5.72 12.72) (layer F.Fab) (width 0.1)) (fp_line (start 5.72 12.72) (end -3.18 12.72) (layer F.Fab) (width 0.1)) (fp_line (start -3.18 12.72) (end -3.18 -4.1) (layer F.Fab) (width 0.1)) (fp_line (start -3.18 1.76) (end -1.98 1.76) (layer F.Fab) (width 0.1)) (fp_line (start -1.98 1.76) (end -1.98 -3.91) (layer F.Fab) (width 0.1)) (fp_line (start -1.98 -3.91) (end 4.52 -3.91) (layer F.Fab) (width 0.1)) (fp_line (start 4.52 -3.91) (end 4.52 11.53) (layer F.Fab) (width 0.1)) (fp_line (start 4.52 11.53) (end -1.98 11.53) (layer F.Fab) (width 0.1)) (fp_line (start -1.98 11.53) (end -1.98 5.86) (layer F.Fab) (width 0.1)) (fp_line (start -1.98 5.86) (end -1.98 5.86) (layer F.Fab) (width 0.1)) (fp_line (start -1.98 5.86) (end -3.18 5.86) (layer F.Fab) (width 0.1)) (fp_line (start -3.29 -5.21) (end 5.83 -5.21) (layer F.SilkS) (width 0.12)) (fp_line (start 5.83 -5.21) (end 5.83 12.83) (layer F.SilkS) (width 0.12)) (fp_line (start 5.83 12.83) (end -3.29 12.83) (layer F.SilkS) (width 0.12)) (fp_line (start -3.29 12.83) (end -3.29 -5.21) (layer F.SilkS) (width 0.12)) (fp_line (start -3.29 1.76) (end -1.98 1.76) (layer F.SilkS) (width 0.12)) (fp_line (start -1.98 1.76) (end -1.98 -3.91) (layer F.SilkS) (width 0.12)) (fp_line (start -1.98 -3.91) (end 4.52 -3.91) (layer F.SilkS) (width 0.12)) (fp_line (start 4.52 -3.91) (end 4.52 11.53) (layer F.SilkS) (width 0.12)) (fp_line (start 4.52 11.53) (end -1.98 11.53) (layer F.SilkS) (width 0.12)) (fp_line (start -1.98 11.53) (end -1.98 5.86) (layer F.SilkS) (width 0.12)) (fp_line (start -1.98 5.86) (end -1.98 5.86) (layer F.SilkS) (width 0.12)) (fp_line (start -1.98 5.86) (end -3.29 5.86) (layer F.SilkS) (width 0.12)) (fp_line (start -3.68 -5.6) (end -3.68 13.22) (layer F.CrtYd) (width 0.05)) (fp_line (start -3.68 13.22) (end 6.22 13.22) (layer F.CrtYd) (width 0.05)) (fp_line (start 6.22 13.22) (end 6.22 -5.6) (layer F.CrtYd) (width 0.05)) (fp_line (start 6.22 -5.6) (end -3.68 -5.6) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 1.27 3.81 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 8 thru_hole circle (at 2.54 7.62) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 1 GND)) (pad 6 thru_hole circle (at 2.54 5.08) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 1 GND)) (pad 4 thru_hole circle (at 2.54 2.54) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 1 GND)) (pad 2 thru_hole circle (at 2.54 0) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 1 GND)) (pad 7 thru_hole circle (at 0 7.62) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 2 /LATCH)) (pad 5 thru_hole circle (at 0 5.08) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 3 /SENSOR_DATA)) (pad 3 thru_hole circle (at 0 2.54) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 4 /MOTOR_DATA)) (pad 1 thru_hole roundrect (at 0 0) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (roundrect_rratio 0.147059) (net 5 /CLOCK)) (model ${KISYS3DMOD}/Connector_IDC.3dshapes/IDC-Header_2x04_P2.54mm_Vertical.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (dimension 49.53 (width 0.15) (layer Cmts.User) (gr_text "49.530 mm" (at 55.215001 88.265 270) (layer Cmts.User) (effects (font (size 1 1) (thickness 0.15))) ) (feature1 (pts (xy 67.31 113.03) (xy 55.92858 113.03))) (feature2 (pts (xy 67.31 63.5) (xy 55.92858 63.5))) (crossbar (pts (xy 56.515001 63.5) (xy 56.515001 113.03))) (arrow1a (pts (xy 56.515001 113.03) (xy 55.92858 111.903496))) (arrow1b (pts (xy 56.515001 113.03) (xy 57.101422 111.903496))) (arrow2a (pts (xy 56.515001 63.5) (xy 55.92858 64.626504))) (arrow2b (pts (xy 56.515001 63.5) (xy 57.101422 64.626504))) ) (dimension 41.91 (width 0.15) (layer Cmts.User) (gr_text "41.910 mm" (at 59.025001 88.265 270) (layer Cmts.User) (effects (font (size 1 1) (thickness 0.15))) ) (feature1 (pts (xy 67.31 109.22) (xy 59.73858 109.22))) (feature2 (pts (xy 67.31 67.31) (xy 59.73858 67.31))) (crossbar (pts (xy 60.325001 67.31) (xy 60.325001 109.22))) (arrow1a (pts (xy 60.325001 109.22) (xy 59.73858 108.093496))) (arrow1b (pts (xy 60.325001 109.22) (xy 60.911422 108.093496))) (arrow2a (pts (xy 60.325001 67.31) (xy 59.73858 68.436504))) (arrow2b (pts (xy 60.325001 67.31) (xy 60.911422 68.436504))) ) (dimension 74.93 (width 0.15) (layer Cmts.User) (gr_text "74.930 mm" (at 100.965 55.850001) (layer Cmts.User) (effects (font (size 1 1) (thickness 0.15))) ) (feature1 (pts (xy 63.5 67.31) (xy 63.5 56.56358))) (feature2 (pts (xy 138.43 67.31) (xy 138.43 56.56358))) (crossbar (pts (xy 138.43 57.150001) (xy 63.5 57.150001))) (arrow1a (pts (xy 63.5 57.150001) (xy 64.626504 56.56358))) (arrow1b (pts (xy 63.5 57.150001) (xy 64.626504 57.736422))) (arrow2a (pts (xy 138.43 57.150001) (xy 137.303496 56.56358))) (arrow2b (pts (xy 138.43 57.150001) (xy 137.303496 57.736422))) ) (dimension 67.31 (width 0.15) (layer Cmts.User) (gr_text "67.310 mm" (at 100.965 59.025) (layer Cmts.User) (effects (font (size 1 1) (thickness 0.15))) ) (feature1 (pts (xy 67.31 67.31) (xy 67.31 59.738579))) (feature2 (pts (xy 134.62 67.31) (xy 134.62 59.738579))) (crossbar (pts (xy 134.62 60.325) (xy 67.31 60.325))) (arrow1a (pts (xy 67.31 60.325) (xy 68.436504 59.738579))) (arrow1b (pts (xy 67.31 60.325) (xy 68.436504 60.911421))) (arrow2a (pts (xy 134.62 60.325) (xy 133.493496 59.738579))) (arrow2b (pts (xy 134.62 60.325) (xy 133.493496 60.911421))) ) (gr_text 12V (at 83.82 90.805 90) (layer B.SilkS) (tstamp 6181B580) (effects (font (size 1 1) (thickness 0.12)) (justify mirror)) ) (gr_text v1.0 (at 118.745 109.855) (layer F.SilkS) (tstamp 61805540) (effects (font (size 0.8 0.8) (thickness 0.09) italic) (justify left)) ) (gr_text "DATE: YYYY-MM-DD\nCOMMIT: deadbeef" (at 86.36 66.675) (layer B.SilkS) (tstamp 617ECFA6) (effects (font (size 0.8 0.8) (thickness 0.09)) (justify left mirror)) ) (gr_text + (at 86.535 110.565) (layer B.SilkS) (tstamp 617E4D44) (effects (font (size 1.2 1.2) (thickness 0.12)) (justify mirror)) ) (gr_text - (at 92.535 110.565) (layer B.SilkS) (tstamp 617E4F01) (effects (font (size 1.2 1.2) (thickness 0.12)) (justify mirror)) ) (gr_text "5V\nOut" (at 74.93 107.95) (layer B.SilkS) (tstamp 617E34BF) (effects (font (size 0.8 0.8) (thickness 0.09)) (justify mirror)) ) (gr_text GND (at 77.47 107.95) (layer B.SilkS) (tstamp 617E34BC) (effects (font (size 0.8 0.8) (thickness 0.09)) (justify mirror)) ) (gr_text "12V\nIn" (at 80.01 107.95) (layer B.SilkS) (tstamp 617E31C4) (effects (font (size 0.8 0.8) (thickness 0.09)) (justify mirror)) ) (gr_text "Optional:\n- Install barrel jack to provide 12V motor power.\n- Install regulator + C1 + C2 to power ESP32\n from 12V motor power." (at 124.46 107.95) (layer B.SilkS) (tstamp 617E37C4) (effects (font (size 0.8 0.8) (thickness 0.09) italic) (justify left mirror)) ) (gr_arc (start 67.31 109.22) (end 63.5 109.22) (angle -90) (layer Edge.Cuts) (width 0.05)) (gr_arc (start 134.62 109.22) (end 134.62 113.03) (angle -90) (layer Edge.Cuts) (width 0.05)) (gr_arc (start 134.62 67.31) (end 138.43 67.31) (angle -90) (layer Edge.Cuts) (width 0.05)) (gr_text Latch (at 73.66 83.82) (layer B.SilkS) (tstamp 617D9412) (effects (font (size 1 1) (thickness 0.12)) (justify left mirror)) ) (gr_text "Sensor data" (at 73.66 81.28) (layer B.SilkS) (tstamp 617D940F) (effects (font (size 1 1) (thickness 0.12)) (justify left mirror)) ) (gr_text "Motor data" (at 73.66 78.74) (layer B.SilkS) (tstamp 617D940C) (effects (font (size 1 1) (thickness 0.12)) (justify left mirror)) ) (gr_text Clock (at 73.66 76.2) (layer B.SilkS) (tstamp 617D938B) (effects (font (size 1 1) (thickness 0.12)) (justify left mirror)) ) (gr_text GND (at 78.74 83.82) (layer B.SilkS) (tstamp 617D9389) (effects (font (size 1 1) (thickness 0.12)) (justify right mirror)) ) (gr_text GND (at 78.74 81.28) (layer B.SilkS) (tstamp 617D9387) (effects (font (size 1 1) (thickness 0.12)) (justify right mirror)) ) (gr_text GND (at 78.74 78.74) (layer B.SilkS) (tstamp 617D9385) (effects (font (size 1 1) (thickness 0.12)) (justify right mirror)) ) (gr_text GND (at 78.74 76.2) (layer B.SilkS) (tstamp 617D937F) (effects (font (size 1 1) (thickness 0.12)) (justify right mirror)) ) (gr_text DATA (at 69.215 80.01 -90) (layer F.SilkS) (tstamp 617D9087) (effects (font (size 1 1) (thickness 0.12))) ) (gr_line (start 63.5 70.485) (end 71.12 70.485) (layer F.SilkS) (width 0.4) (tstamp 617D8F0B)) (gr_line (start 63.5 106.045) (end 71.12 106.045) (layer F.SilkS) (width 0.4) (tstamp 617D8D91)) (gr_line (start 63.5 89.535) (end 71.12 89.535) (layer F.SilkS) (width 0.4)) (gr_arc (start 67.31 67.31) (end 67.31 63.5) (angle -90) (layer Edge.Cuts) (width 0.05)) (gr_text Power (at 66.04 97.79 270) (layer F.SilkS) (tstamp 617CEBDF) (effects (font (size 2.5 2.5) (thickness 0.35))) ) (gr_text Output (at 66.04 80.01 -90) (layer F.SilkS) (tstamp 617CEBDD) (effects (font (size 2.5 2.5) (thickness 0.35))) ) (gr_text 12V (at 69.215 102.87 -90) (layer F.SilkS) (tstamp 617D5160) (effects (font (size 1 1) (thickness 0.12))) ) (gr_text GND (at 69.215 97.79 -90) (layer F.SilkS) (tstamp 617D515D) (effects (font (size 1 1) (thickness 0.12))) ) (gr_text 3.3V (at 69.215 92.71 -90) (layer F.SilkS) (tstamp 617D515A) (effects (font (size 1 1) (thickness 0.12))) ) (gr_line (start 113.03 64.135) (end 113.03 78.74) (layer B.SilkS) (width 0.12) (tstamp 617D51B1)) (gr_line (start 113.03 78.74) (end 102.87 78.74) (layer B.SilkS) (width 0.12) (tstamp 617D5151)) (gr_line (start 113.03 64.135) (end 102.87 64.135) (layer B.SilkS) (width 0.12) (tstamp 617D40E2)) (gr_text Splitflap (at 107.95 65.405) (layer B.SilkS) (tstamp 617D514E) (effects (font (size 1 1) (thickness 0.12) italic) (justify mirror)) ) (gr_line (start 102.87 78.74) (end 102.87 64.135) (layer B.SilkS) (width 0.12) (tstamp 617D5163)) (gr_line (start 102.87 64.135) (end 102.87 78.74) (layer F.SilkS) (width 0.12) (tstamp 617D514B)) (gr_line (start 113.03 78.74) (end 113.03 64.135) (layer F.SilkS) (width 0.12) (tstamp 617D5148)) (gr_text Splitflap (at 107.95 65.405) (layer F.SilkS) (tstamp 617D5145) (effects (font (size 1 1) (thickness 0.12) italic)) ) (gr_line (start 102.87 78.74) (end 113.03 78.74) (layer F.SilkS) (width 0.12) (tstamp 617D518A)) (gr_line (start 102.87 64.135) (end 113.03 64.135) (layer F.SilkS) (width 0.12) (tstamp 617D404F)) (gr_text "Splitflap Chainlink Buddy\n[T-Display]" (at 113.03 108.585) (layer F.SilkS) (tstamp 617D5187) (effects (font (size 1.2 1.2) (thickness 0.12))) ) (gr_line (start 63.5 109.22) (end 63.5 67.31) (layer Edge.Cuts) (width 0.05) (tstamp 617D3FFE)) (gr_line (start 134.62 113.03) (end 67.31 113.03) (layer Edge.Cuts) (width 0.05) (tstamp 617D599A)) (gr_line (start 138.43 67.31) (end 138.43 109.22) (layer Edge.Cuts) (width 0.05) (tstamp 617D513F)) (gr_line (start 67.31 63.5) (end 134.62 63.5) (layer Edge.Cuts) (width 0.05) (tstamp 617D4058)) (segment (start 119.38 69.85) (end 119.38 74.93) (width 0.5) (layer F.Cu) (net 1) (tstamp 617D51AB) (status 30)) (segment (start 93.98 92.71) (end 93.98 97.79) (width 0.5) (layer F.Cu) (net 1) (tstamp 617D5172) (status 30)) (segment (start 96.52 92.71) (end 96.52 97.79) (width 0.5) (layer F.Cu) (net 1) (tstamp 617D518D) (status 30)) (segment (start 116.84 92.71) (end 116.84 97.79) (width 0.5) (layer F.Cu) (net 1) (tstamp 617D5193) (status 30)) (segment (start 119.38 92.71) (end 119.38 97.79) (width 0.5) (layer F.Cu) (net 1) (tstamp 617D51AE) (status 30)) (segment (start 78.4475 107.315) (end 76.4925 107.315) (width 0.25) (layer F.Cu) (net 1)) (segment (start 78.4475 109.5125) (end 77.47 110.49) (width 0.25) (layer F.Cu) (net 1)) (segment (start 78.4475 107.315) (end 78.4475 109.5125) (width 0.25) (layer F.Cu) (net 1)) (segment (start 76.4925 109.5125) (end 77.47 110.49) (width 0.25) (layer F.Cu) (net 1)) (segment (start 76.4925 107.315) (end 76.4925 109.5125) (width 0.25) (layer F.Cu) (net 1)) (segment (start 111.76 69.85) (end 111.76 74.93) (width 0.5) (layer F.Cu) (net 2) (tstamp 617D5178) (status 30)) (segment (start 104.045001 82.644999) (end 111.76 74.93) (width 0.25) (layer F.Cu) (net 2) (status 20)) (segment (start 76.105001 82.644999) (end 104.045001 82.644999) (width 0.25) (layer F.Cu) (net 2)) (segment (start 74.93 83.82) (end 76.105001 82.644999) (width 0.25) (layer F.Cu) (net 2) (status 10)) (segment (start 104.14 69.85) (end 104.14 74.93) (width 0.5) (layer F.Cu) (net 3) (tstamp 617D4EC0) (status 30)) (segment (start 74.93 81.28) (end 76.2 80.01) (width 0.25) (layer F.Cu) (net 3) (status 10)) (segment (start 76.2 80.01) (end 99.06 80.01) (width 0.25) (layer F.Cu) (net 3)) (segment (start 99.06 80.01) (end 104.14 74.93) (width 0.25) (layer F.Cu) (net 3) (status 20)) (segment (start 106.68 69.85) (end 106.68 74.93) (width 0.5) (layer F.Cu) (net 4) (tstamp 617D4EBD) (status 30)) (segment (start 104.775 67.945) (end 106.68 69.85) (width 0.25) (layer F.Cu) (net 4) (tstamp 617D5169) (status 20)) (segment (start 74.93 78.74) (end 76.2 77.47) (width 0.25) (layer F.Cu) (net 4) (status 10)) (segment (start 87.464002 67.945) (end 104.775 67.945) (width 0.25) (layer F.Cu) (net 4)) (segment (start 77.939002 77.47) (end 87.464002 67.945) (width 0.25) (layer F.Cu) (net 4)) (segment (start 76.2 77.47) (end 77.939002 77.47) (width 0.25) (layer F.Cu) (net 4)) (segment (start 109.22 69.85) (end 109.22 74.93) (width 0.5) (layer F.Cu) (net 5) (tstamp 617D5196) (status 30)) (segment (start 105.41 66.04) (end 109.22 69.85) (width 0.25) (layer F.Cu) (net 5) (tstamp 617D51A8) (status 20)) (segment (start 74.93 76.2) (end 74.93 75.35) (width 0.25) (layer F.Cu) (net 5) (tstamp 617D405B) (status 30)) (segment (start 85.09 66.04) (end 105.41 66.04) (width 0.25) (layer F.Cu) (net 5)) (segment (start 74.93 76.2) (end 85.09 66.04) (width 0.25) (layer F.Cu) (net 5) (status 10)) (segment (start 99.06 69.85) (end 99.06 74.93) (width 0.5) (layer F.Cu) (net 6) (tstamp 617D51B4) (status 30)) (segment (start 101.6 69.85) (end 101.6 74.93) (width 0.5) (layer F.Cu) (net 7) (tstamp 617D5205) (status 30)) (segment (start 114.3 69.85) (end 114.3 74.93) (width 0.5) (layer F.Cu) (net 8) (tstamp 617D517E) (status 30)) (segment (start 93.98 69.85) (end 93.98 74.93) (width 0.5) (layer F.Cu) (net 9) (tstamp 617D517B) (status 30)) (segment (start 116.84 69.85) (end 116.84 74.93) (width 0.5) (layer F.Cu) (net 10) (tstamp 617D516F) (status 30)) (segment (start 96.52 69.85) (end 96.52 74.93) (width 0.5) (layer F.Cu) (net 11) (tstamp 617D516C) (status 30)) (segment (start 111.76 92.71) (end 111.76 97.79) (width 0.5) (layer F.Cu) (net 12) (tstamp 617D51A2) (status 30)) (segment (start 106.68 92.71) (end 106.68 97.79) (width 0.5) (layer F.Cu) (net 13) (tstamp 617D4ECF) (status 30)) (segment (start 99.06 92.71) (end 99.06 97.79) (width 0.5) (layer F.Cu) (net 14) (tstamp 617D4ECC) (status 30)) (segment (start 101.6 92.71) (end 101.6 97.79) (width 0.5) (layer F.Cu) (net 15) (tstamp 617D4EC9) (status 30)) (segment (start 104.14 92.71) (end 104.14 97.79) (width 0.5) (layer F.Cu) (net 16) (tstamp 617D5184) (status 30)) (segment (start 114.3 92.71) (end 114.3 97.79) (width 0.5) (layer F.Cu) (net 17) (tstamp 617D5181) (status 30)) (segment (start 109.22 92.71) (end 109.22 97.79) (width 0.5) (layer F.Cu) (net 18) (tstamp 617D520B) (status 30)) (segment (start 121.92 69.85) (end 121.92 74.93) (width 0.5) (layer F.Cu) (net 19) (tstamp 617D5208) (status 30)) (segment (start 73.3675 108.9275) (end 73.3675 107.315) (width 0.5) (layer F.Cu) (net 19)) (segment (start 74.93 110.49) (end 73.3675 108.9275) (width 0.5) (layer F.Cu) (net 19)) (segment (start 73.3675 92.732498) (end 79.739998 86.36) (width 0.5) (layer F.Cu) (net 19)) (segment (start 73.3675 107.315) (end 73.3675 92.732498) (width 0.5) (layer F.Cu) (net 19)) (segment (start 110.49 86.36) (end 121.92 74.93) (width 0.5) (layer F.Cu) (net 19)) (segment (start 79.739998 86.36) (end 110.49 86.36) (width 0.5) (layer F.Cu) (net 19)) (segment (start 118.11 88.9) (end 121.92 92.71) (width 0.5) (layer F.Cu) (net 20) (tstamp 617D4ED2) (status 20)) (segment (start 121.92 92.71) (end 121.92 97.79) (width 0.5) (layer F.Cu) (net 20) (tstamp 617D5154) (status 30)) (segment (start 76.2 92.71) (end 80.01 88.9) (width 0.5) (layer F.Cu) (net 20)) (segment (start 80.01 88.9) (end 118.11 88.9) (width 0.5) (layer F.Cu) (net 20)) (segment (start 81.5725 108.9275) (end 81.5725 107.315) (width 0.5) (layer F.Cu) (net 21)) (segment (start 80.01 110.49) (end 81.5725 108.9275) (width 0.5) (layer F.Cu) (net 21)) (segment (start 77.1275 102.87) (end 81.5725 107.315) (width 0.5) (layer F.Cu) (net 21)) (segment (start 76.2 102.87) (end 77.1275 102.87) (width 0.5) (layer F.Cu) (net 21)) (segment (start 89.0175 99.87) (end 86.18875 102.69875) (width 0.5) (layer F.Cu) (net 21)) (segment (start 89.535 99.87) (end 89.0175 99.87) (width 0.5) (layer F.Cu) (net 21)) (segment (start 84.91875 103.96875) (end 81.5725 107.315) (width 0.5) (layer F.Cu) (net 21)) (segment (start 83.82 93.98) (end 83.82 101.6) (width 0.5) (layer F.Cu) (net 21)) (segment (start 83.82 101.6) (end 85.55375 103.33375) (width 0.5) (layer F.Cu) (net 21)) (segment (start 85.55375 103.33375) (end 84.91875 103.96875) (width 0.5) (layer F.Cu) (net 21)) (segment (start 86.18875 102.69875) (end 85.55375 103.33375) (width 0.5) (layer F.Cu) (net 21)) (zone (net 1) (net_name GND) (layer B.Cu) (tstamp 0) (hatch edge 0.508) (connect_pads (clearance 0.508)) (min_thickness 0.254) (fill yes (arc_segments 32) (thermal_gap 0.508) (thermal_bridge_width 0.508)) (polygon (pts (xy 138.43 113.03) (xy 63.5 113.03) (xy 63.5 63.5) (xy 138.43 63.5) ) ) (filled_polygon (pts (xy 132.683201 64.392494) (xy 132.665757 64.40415) (xy 132.347572 64.857967) (xy 134.62 67.130395) (xy 134.634143 67.116253) (xy 134.813748 67.295858) (xy 134.799605 67.31) (xy 137.072033 69.582428) (xy 137.52585 69.264243) (xy 137.77 68.810744) (xy 137.770001 107.72132) (xy 137.537506 107.283201) (xy 137.52585 107.265757) (xy 137.072033 106.947572) (xy 134.799605 109.22) (xy 134.813748 109.234143) (xy 134.634143 109.413748) (xy 134.62 109.399605) (xy 132.347572 111.672033) (xy 132.665757 112.12585) (xy 133.119256 112.37) (xy 68.808682 112.37) (xy 69.246799 112.137506) (xy 69.264243 112.12585) (xy 69.582428 111.672033) (xy 67.31 109.399605) (xy 67.295858 109.413748) (xy 67.116253 109.234143) (xy 67.130395 109.22) (xy 67.489605 109.22) (xy 69.762033 111.492428) (xy 70.21585 111.174243) (xy 70.541269 110.56979) (xy 70.60421 110.364514) (xy 73.3425 110.364514) (xy 73.3425 110.615485) (xy 73.36547 110.848703) (xy 73.456245 111.147948) (xy 73.603655 111.423734) (xy 73.802037 111.665463) (xy 74.043765 111.863845) (xy 74.319551 112.011255) (xy 74.618796 112.10203) (xy 74.93 112.132681) (xy 75.241203 112.10203) (xy 75.540448 112.011255) (xy 75.816234 111.863845) (xy 76.057963 111.665463) (xy 76.205163 111.486101) (xy 76.360563 111.671315) (xy 76.603077 111.865969) (xy 76.878906 112.009571) (xy 77.09702 112.080563) (xy 77.343 111.960594) (xy 77.343 110.617) (xy 77.323 110.617) (xy 77.323 110.363) (xy 77.343 110.363) (xy 77.343 109.019406) (xy 77.597 109.019406) (xy 77.597 110.363) (xy 77.617 110.363) (xy 77.617 110.617) (xy 77.597 110.617) (xy 77.597 111.960594) (xy 77.84298 112.080563) (xy 78.061094 112.009571) (xy 78.336923 111.865969) (xy 78.477941 111.752781) (xy 78.526963 111.844494) (xy 78.606315 111.941185) (xy 78.703006 112.020537) (xy 78.81332 112.079502) (xy 78.933018 112.115812) (xy 79.0575 112.128072) (xy 80.9625 112.128072) (xy 81.086982 112.115812) (xy 81.20668 112.079502) (xy 81.316994 112.020537) (xy 81.413685 111.941185) (xy 81.493037 111.844494) (xy 81.552002 111.73418) (xy 81.588312 111.614482) (xy 81.600572 111.49) (xy 81.600572 109.49) (xy 81.588312 109.365518) (xy 81.552002 109.24582) (xy 81.532594 109.20951) (xy 131.118155 109.20951) (xy 131.183395 109.892888) (xy 131.380702 110.550407) (xy 131.702494 111.156799) (xy 131.71415 111.174243) (xy 132.167967 111.492428) (xy 134.440395 109.22) (xy 132.167967 106.947572) (xy 131.71415 107.265757) (xy 131.388731 107.87021) (xy 131.187488 108.526535) (xy 131.118155 109.20951) (xy 81.532594 109.20951) (xy 81.493037 109.135506) (xy 81.413685 109.038815) (xy 81.316994 108.959463) (xy 81.20668 108.900498) (xy 81.086982 108.864188) (xy 80.9625 108.851928) (xy 79.0575 108.851928) (xy 78.933018 108.864188) (xy 78.81332 108.900498) (xy 78.703006 108.959463) (xy 78.606315 109.038815) (xy 78.526963 109.135506) (xy 78.477941 109.227219) (xy 78.336923 109.114031) (xy 78.061094 108.970429) (xy 77.84298 108.899437) (xy 77.597 109.019406) (xy 77.343 109.019406) (xy 77.09702 108.899437) (xy 76.878906 108.970429) (xy 76.603077 109.114031) (xy 76.360563 109.308685) (xy 76.205162 109.4939) (xy 76.057963 109.314537) (xy 75.816235 109.116155) (xy 75.540449 108.968745) (xy 75.241204 108.87797) (xy 74.93 108.847319) (xy 74.618797 108.87797) (xy 74.319552 108.968745) (xy 74.043766 109.116155) (xy 73.802037 109.314537) (xy 73.603655 109.556265) (xy 73.456245 109.832051) (xy 73.36547 110.131296) (xy 73.3425 110.364514) (xy 70.60421 110.364514) (xy 70.742512 109.913465) (xy 70.811845 109.23049) (xy 70.746605 108.547112) (xy 70.549298 107.889593) (xy 70.227506 107.283201) (xy 70.21585 107.265757) (xy 69.762033 106.947572) (xy 67.489605 109.22) (xy 67.130395 109.22) (xy 64.857967 106.947572) (xy 64.40415 107.265757) (xy 64.16 107.719256) (xy 64.16 106.767967) (xy 65.037572 106.767967) (xy 67.31 109.040395) (xy 69.582428 106.767967) (xy 69.264243 106.31415) (xy 69.145894 106.250434) (xy 86.944876 106.250434) (xy 86.975856 106.378355) (xy 87.10499 106.672761) (xy 87.289078 106.936317) (xy 87.521046 107.158895) (xy 87.79198 107.331942) (xy 88.091468 107.448807) (xy 88.408 107.505) (xy 89.408 107.505) (xy 89.408 105.997) (xy 89.662 105.997) (xy 89.662 107.505) (xy 90.662 107.505) (xy 90.978532 107.448807) (xy 91.27802 107.331942) (xy 91.548954 107.158895) (xy 91.780922 106.936317) (xy 91.89851 106.767967) (xy 132.347572 106.767967) (xy 134.62 109.040395) (xy 136.892428 106.767967) (xy 136.574243 106.31415) (xy 135.96979 105.988731) (xy 135.313465 105.787488) (xy 134.63049 105.718155) (xy 133.947112 105.783395) (xy 133.289593 105.980702) (xy 132.683201 106.302494) (xy 132.665757 106.31415) (xy 132.347572 106.767967) (xy 91.89851 106.767967) (xy 91.96501 106.672761) (xy 92.094144 106.378355) (xy 92.125124 106.250434) (xy 92.005777 105.997) (xy 89.662 105.997) (xy 89.408 105.997) (xy 87.064223 105.997) (xy 86.944876 106.250434) (xy 69.145894 106.250434) (xy 68.65979 105.988731) (xy 68.003465 105.787488) (xy 67.32049 105.718155) (xy 66.637112 105.783395) (xy 65.979593 105.980702) (xy 65.373201 106.302494) (xy 65.355757 106.31415) (xy 65.037572 106.767967) (xy 64.16 106.767967) (xy 64.16 105.489566) (xy 86.944876 105.489566) (xy 87.064223 105.743) (xy 89.408 105.743) (xy 89.408 104.235) (xy 89.662 104.235) (xy 89.662 105.743) (xy 92.005777 105.743) (xy 92.125124 105.489566) (xy 92.094144 105.361645) (xy 91.96501 105.067239) (xy 91.780922 104.803683) (xy 91.548954 104.581105) (xy 91.27802 104.408058) (xy 90.978532 104.291193) (xy 90.662 104.235) (xy 89.662 104.235) (xy 89.408 104.235) (xy 88.408 104.235) (xy 88.091468 104.291193) (xy 87.79198 104.408058) (xy 87.521046 104.581105) (xy 87.289078 104.803683) (xy 87.10499 105.067239) (xy 86.975856 105.361645) (xy 86.944876 105.489566) (xy 64.16 105.489566) (xy 64.16 102.708967) (xy 74.565 102.708967) (xy 74.565 103.031033) (xy 74.627832 103.346912) (xy 74.751082 103.644463) (xy 74.930013 103.912252) (xy 75.157748 104.139987) (xy 75.425537 104.318918) (xy 75.723088 104.442168) (xy 76.038967 104.505) (xy 76.361033 104.505) (xy 76.676912 104.442168) (xy 76.974463 104.318918) (xy 77.242252 104.139987) (xy 77.431918 103.950321) (xy 92.6 103.950321) (xy 92.623657 104.190515) (xy 92.717148 104.498714) (xy 92.868969 104.782751) (xy 93.073286 105.031714) (xy 93.322248 105.236031) (xy 93.606285 105.387852) (xy 93.914484 105.481343) (xy 94.235 105.512911) (xy 94.555515 105.481343) (xy 94.863714 105.387852) (xy 95.147751 105.236031) (xy 95.396714 105.031714) (xy 95.601031 104.782752) (xy 95.752852 104.498715) (xy 95.846343 104.190516) (xy 95.87 103.950322) (xy 95.87 101.789678) (xy 95.846343 101.549484) (xy 95.752852 101.241285) (xy 95.601031 100.957248) (xy 95.396714 100.708286) (xy 95.147752 100.503969) (xy 94.863715 100.352148) (xy 94.555516 100.258657) (xy 94.235 100.227089) (xy 93.914485 100.258657) (xy 93.606286 100.352148) (xy 93.322249 100.503969) (xy 93.073287 100.708286) (xy 92.86897 100.957248) (xy 92.717149 101.241285) (xy 92.623658 101.549484) (xy 92.600001 101.789678) (xy 92.6 103.950321) (xy 77.431918 103.950321) (xy 77.469987 103.912252) (xy 77.648918 103.644463) (xy 77.772168 103.346912) (xy 77.835 103.031033) (xy 77.835 102.708967) (xy 77.772168 102.393088) (xy 77.648918 102.095537) (xy 77.469987 101.827748) (xy 77.242252 101.600013) (xy 76.974463 101.421082) (xy 76.676912 101.297832) (xy 76.361033 101.235) (xy 76.038967 101.235) (xy 75.723088 101.297832) (xy 75.425537 101.421082) (xy 75.157748 101.600013) (xy 74.930013 101.827748) (xy 74.751082 102.095537) (xy 74.627832 102.393088) (xy 74.565 102.708967) (xy 64.16 102.708967) (xy 64.16 98.925413) (xy 75.244192 98.925413) (xy 75.339956 99.189814) (xy 75.629571 99.330704) (xy 75.941108 99.412384) (xy 76.262595 99.431718) (xy 76.581675 99.387961) (xy 76.886088 99.282795) (xy 77.060044 99.189814) (xy 77.155808 98.925413) (xy 76.2 97.969605) (xy 75.244192 98.925413) (xy 64.16 98.925413) (xy 64.16 97.852595) (xy 74.558282 97.852595) (xy 74.602039 98.171675) (xy 74.707205 98.476088) (xy 74.800186 98.650044) (xy 75.064587 98.745808) (xy 76.020395 97.79) (xy 76.379605 97.79) (xy 77.335413 98.745808) (xy 77.599814 98.650044) (xy 77.740704 98.360429) (xy 77.822384 98.048892) (xy 77.841718 97.727405) (xy 77.797961 97.408325) (xy 77.692795 97.103912) (xy 77.599814 96.929956) (xy 77.335413 96.834192) (xy 76.379605 97.79) (xy 76.020395 97.79) (xy 75.064587 96.834192) (xy 74.800186 96.929956) (xy 74.659296 97.219571) (xy 74.577616 97.531108) (xy 74.558282 97.852595) (xy 64.16 97.852595) (xy 64.16 96.654587) (xy 75.244192 96.654587) (xy 76.2 97.610395) (xy 77.155808 96.654587) (xy 77.060044 96.390186) (xy 76.770429 96.249296) (xy 76.458892 96.167616) (xy 76.137405 96.148282) (xy 75.818325 96.192039) (xy 75.513912 96.297205) (xy 75.339956 96.390186) (xy 75.244192 96.654587) (xy 64.16 96.654587) (xy 64.16 91.71) (xy 74.561928 91.71) (xy 74.561928 93.71) (xy 74.574188 93.834482) (xy 74.610498 93.95418) (xy 74.669463 94.064494) (xy 74.748815 94.161185) (xy 74.845506 94.240537) (xy 74.95582 94.299502) (xy 75.075518 94.335812) (xy 75.2 94.348072) (xy 77.2 94.348072) (xy 77.324482 94.335812) (xy 77.44418 94.299502) (xy 77.554494 94.240537) (xy 77.651185 94.161185) (xy 77.730537 94.064494) (xy 77.789502 93.95418) (xy 77.825812 93.834482) (xy 77.838072 93.71) (xy 77.838072 93.13) (xy 82.331928 93.13) (xy 82.331928 94.83) (xy 82.344188 94.954482) (xy 82.380498 95.07418) (xy 82.439463 95.184494) (xy 82.518815 95.281185) (xy 82.615506 95.360537) (xy 82.72582 95.419502) (xy 82.79838 95.441513) (xy 82.666525 95.573368) (xy 82.50401 95.816589) (xy 82.392068 96.086842) (xy 82.335 96.37374) (xy 82.335 96.66626) (xy 82.392068 96.953158) (xy 82.50401 97.223411) (xy 82.666525 97.466632) (xy 82.873368 97.673475) (xy 83.04776 97.79) (xy 82.873368 97.906525) (xy 82.666525 98.113368) (xy 82.50401 98.356589) (xy 82.392068 98.626842) (xy 82.335 98.91374) (xy 82.335 99.20626) (xy 82.392068 99.493158) (xy 82.50401 99.763411) (xy 82.666525 100.006632) (xy 82.873368 100.213475) (xy 83.04776 100.33) (xy 82.873368 100.446525) (xy 82.666525 100.653368) (xy 82.50401 100.896589) (xy 82.392068 101.166842) (xy 82.335 101.45374) (xy 82.335 101.74626) (xy 82.392068 102.033158) (xy 82.50401 102.303411) (xy 82.666525 102.546632) (xy 82.873368 102.753475) (xy 83.116589 102.91599) (xy 83.386842 103.027932) (xy 83.67374 103.085) (xy 83.96626 103.085) (xy 84.253158 103.027932) (xy 84.523411 102.91599) (xy 84.766632 102.753475) (xy 84.973475 102.546632) (xy 85.13599 102.303411) (xy 85.247932 102.033158) (xy 85.305 101.74626) (xy 85.305 101.45374) (xy 85.247932 101.166842) (xy 85.13599 100.896589) (xy 84.973475 100.653368) (xy 84.766632 100.446525) (xy 84.59224 100.33) (xy 84.766632 100.213475) (xy 84.973475 100.006632) (xy 85.064769 99.87) (xy 86.642089 99.87) (xy 86.673657 100.190516) (xy 86.767148 100.498715) (xy 86.918969 100.782752) (xy 87.123286 101.031714) (xy 87.372248 101.236031) (xy 87.656285 101.387852) (xy 87.964484 101.481343) (xy 88.204678 101.505) (xy 90.865322 101.505) (xy 91.105516 101.481343) (xy 91.413715 101.387852) (xy 91.697752 101.236031) (xy 91.946714 101.031714) (xy 92.151031 100.782752) (xy 92.302852 100.498715) (xy 92.396343 100.190516) (xy 92.427911 99.87) (xy 92.396343 99.549484) (xy 92.302852 99.241285) (xy 92.151031 98.957248) (xy 92.066364 98.85408) (xy 93.095525 98.85408) (xy 93.179208 99.108261) (xy 93.451775 99.239158) (xy 93.744642 99.314365) (xy 94.046553 99.330991) (xy 94.345907 99.288397) (xy 94.631199 99.188222) (xy 94.780792 99.108261) (xy 94.864475 98.85408) (xy 95.635525 98.85408) (xy 95.719208 99.108261) (xy 95.991775 99.239158) (xy 96.284642 99.314365) (xy 96.586553 99.330991) (xy 96.885907 99.288397) (xy 97.171199 99.188222) (xy 97.320792 99.108261) (xy 97.404475 98.85408) (xy 96.52 97.969605) (xy 95.635525 98.85408) (xy 94.864475 98.85408) (xy 93.98 97.969605) (xy 93.095525 98.85408) (xy 92.066364 98.85408) (xy 91.946714 98.708286) (xy 91.697752 98.503969) (xy 91.413715 98.352148) (xy 91.105516 98.258657) (xy 90.865322 98.235) (xy 88.204678 98.235) (xy 87.964484 98.258657) (xy 87.656285 98.352148) (xy 87.372248 98.503969) (xy 87.123286 98.708286) (xy 86.918969 98.957248) (xy 86.767148 99.241285) (xy 86.673657 99.549484) (xy 86.642089 99.87) (xy 85.064769 99.87) (xy 85.13599 99.763411) (xy 85.247932 99.493158) (xy 85.305 99.20626) (xy 85.305 98.91374) (xy 85.247932 98.626842) (xy 85.13599 98.356589) (xy 84.973475 98.113368) (xy 84.766632 97.906525) (xy 84.691844 97.856553) (xy 92.439009 97.856553) (xy 92.481603 98.155907) (xy 92.581778 98.441199) (xy 92.661739 98.590792) (xy 92.91592 98.674475) (xy 93.800395 97.79) (xy 94.159605 97.79) (xy 95.04408 98.674475) (xy 95.25 98.606681) (xy 95.45592 98.674475) (xy 96.340395 97.79) (xy 95.45592 96.905525) (xy 95.25 96.973319) (xy 95.04408 96.905525) (xy 94.159605 97.79) (xy 93.800395 97.79) (xy 92.91592 96.905525) (xy 92.661739 96.989208) (xy 92.530842 97.261775) (xy 92.455635 97.554642) (xy 92.439009 97.856553) (xy 84.691844 97.856553) (xy 84.59224 97.79) (xy 84.766632 97.673475) (xy 84.973475 97.466632) (xy 85.13599 97.223411) (xy 85.247932 96.953158) (xy 85.305 96.66626) (xy 85.305 96.37374) (xy 85.293133 96.31408) (xy 93.095525 96.31408) (xy 93.163319 96.52) (xy 93.095525 96.72592) (xy 93.98 97.610395) (xy 94.864475 96.72592) (xy 94.796681 96.52) (xy 94.864475 96.31408) (xy 95.635525 96.31408) (xy 95.703319 96.52) (xy 95.635525 96.72592) (xy 96.52 97.610395) (xy 97.404475 96.72592) (xy 97.336681 96.52) (xy 97.404475 96.31408) (xy 96.52 95.429605) (xy 95.635525 96.31408) (xy 94.864475 96.31408) (xy 93.98 95.429605) (xy 93.095525 96.31408) (xy 85.293133 96.31408) (xy 85.247932 96.086842) (xy 85.13599 95.816589) (xy 84.973475 95.573368) (xy 84.84162 95.441513) (xy 84.91418 95.419502) (xy 85.024494 95.360537) (xy 85.078088 95.316553) (xy 92.439009 95.316553) (xy 92.481603 95.615907) (xy 92.581778 95.901199) (xy 92.661739 96.050792) (xy 92.91592 96.134475) (xy 93.800395 95.25) (xy 94.159605 95.25) (xy 95.04408 96.134475) (xy 95.25 96.066681) (xy 95.45592 96.134475) (xy 96.340395 95.25) (xy 95.45592 94.365525) (xy 95.25 94.433319) (xy 95.04408 94.365525) (xy 94.159605 95.25) (xy 93.800395 95.25) (xy 92.91592 94.365525) (xy 92.661739 94.449208) (xy 92.530842 94.721775) (xy 92.455635 95.014642) (xy 92.439009 95.316553) (xy 85.078088 95.316553) (xy 85.121185 95.281185) (xy 85.200537 95.184494) (xy 85.259502 95.07418) (xy 85.295812 94.954482) (xy 85.308072 94.83) (xy 85.308072 93.77408) (xy 93.095525 93.77408) (xy 93.163319 93.98) (xy 93.095525 94.18592) (xy 93.98 95.070395) (xy 94.864475 94.18592) (xy 94.796681 93.98) (xy 94.864475 93.77408) (xy 95.635525 93.77408) (xy 95.703319 93.98) (xy 95.635525 94.18592) (xy 96.52 95.070395) (xy 97.404475 94.18592) (xy 97.336681 93.98) (xy 97.404475 93.77408) (xy 96.52 92.889605) (xy 95.635525 93.77408) (xy 94.864475 93.77408) (xy 93.98 92.889605) (xy 93.095525 93.77408) (xy 85.308072 93.77408) (xy 85.308072 93.13) (xy 85.295812 93.005518) (xy 85.259502 92.88582) (xy 85.201097 92.776553) (xy 92.439009 92.776553) (xy 92.481603 93.075907) (xy 92.581778 93.361199) (xy 92.661739 93.510792) (xy 92.91592 93.594475) (xy 93.800395 92.71) (xy 94.159605 92.71) (xy 95.04408 93.594475) (xy 95.25 93.526681) (xy 95.45592 93.594475) (xy 96.340395 92.71) (xy 96.699605 92.71) (xy 97.58408 93.594475) (xy 97.765049 93.534895) (xy 97.867688 93.688505) (xy 98.081495 93.902312) (xy 98.197763 93.98) (xy 98.081495 94.057688) (xy 97.867688 94.271495) (xy 97.765049 94.425105) (xy 97.58408 94.365525) (xy 96.699605 95.25) (xy 97.58408 96.134475) (xy 97.765049 96.074895) (xy 97.867688 96.228505) (xy 98.081495 96.442312) (xy 98.197763 96.52) (xy 98.081495 96.597688) (xy 97.867688 96.811495) (xy 97.765049 96.965105) (xy 97.58408 96.905525) (xy 96.699605 97.79) (xy 97.58408 98.674475) (xy 97.765049 98.614895) (xy 97.867688 98.768505) (xy 98.081495 98.982312) (xy 98.332905 99.150299) (xy 98.612257 99.266011) (xy 98.908816 99.325) (xy 99.211184 99.325) (xy 99.507743 99.266011) (xy 99.787095 99.150299) (xy 100.038505 98.982312) (xy 100.252312 98.768505) (xy 100.33 98.652237) (xy 100.407688 98.768505) (xy 100.621495 98.982312) (xy 100.872905 99.150299) (xy 101.152257 99.266011) (xy 101.448816 99.325) (xy 101.751184 99.325) (xy 102.047743 99.266011) (xy 102.327095 99.150299) (xy 102.578505 98.982312) (xy 102.792312 98.768505) (xy 102.87 98.652237) (xy 102.947688 98.768505) (xy 103.161495 98.982312) (xy 103.412905 99.150299) (xy 103.692257 99.266011) (xy 103.988816 99.325) (xy 104.291184 99.325) (xy 104.587743 99.266011) (xy 104.867095 99.150299) (xy 105.118505 98.982312) (xy 105.332312 98.768505) (xy 105.41 98.652237) (xy 105.487688 98.768505) (xy 105.701495 98.982312) (xy 105.952905 99.150299) (xy 106.232257 99.266011) (xy 106.528816 99.325) (xy 106.831184 99.325) (xy 107.127743 99.266011) (xy 107.407095 99.150299) (xy 107.658505 98.982312) (xy 107.872312 98.768505) (xy 107.95 98.652237) (xy 108.027688 98.768505) (xy 108.241495 98.982312) (xy 108.492905 99.150299) (xy 108.772257 99.266011) (xy 109.068816 99.325) (xy 109.371184 99.325) (xy 109.667743 99.266011) (xy 109.947095 99.150299) (xy 110.198505 98.982312) (xy 110.412312 98.768505) (xy 110.49 98.652237) (xy 110.567688 98.768505) (xy 110.781495 98.982312) (xy 111.032905 99.150299) (xy 111.312257 99.266011) (xy 111.608816 99.325) (xy 111.911184 99.325) (xy 112.207743 99.266011) (xy 112.487095 99.150299) (xy 112.738505 98.982312) (xy 112.952312 98.768505) (xy 113.03 98.652237) (xy 113.107688 98.768505) (xy 113.321495 98.982312) (xy 113.572905 99.150299) (xy 113.852257 99.266011) (xy 114.148816 99.325) (xy 114.451184 99.325) (xy 114.747743 99.266011) (xy 115.027095 99.150299) (xy 115.278505 98.982312) (xy 115.406737 98.85408) (xy 115.955525 98.85408) (xy 116.039208 99.108261) (xy 116.311775 99.239158) (xy 116.604642 99.314365) (xy 116.906553 99.330991) (xy 117.205907 99.288397) (xy 117.491199 99.188222) (xy 117.640792 99.108261) (xy 117.724475 98.85408) (xy 118.495525 98.85408) (xy 118.579208 99.108261) (xy 118.851775 99.239158) (xy 119.144642 99.314365) (xy 119.446553 99.330991) (xy 119.745907 99.288397) (xy 120.031199 99.188222) (xy 120.180792 99.108261) (xy 120.264475 98.85408) (xy 119.38 97.969605) (xy 118.495525 98.85408) (xy 117.724475 98.85408) (xy 116.84 97.969605) (xy 115.955525 98.85408) (xy 115.406737 98.85408) (xy 115.492312 98.768505) (xy 115.594951 98.614895) (xy 115.77592 98.674475) (xy 116.660395 97.79) (xy 117.019605 97.79) (xy 117.90408 98.674475) (xy 118.11 98.606681) (xy 118.31592 98.674475) (xy 119.200395 97.79) (xy 118.31592 96.905525) (xy 118.11 96.973319) (xy 117.90408 96.905525) (xy 117.019605 97.79) (xy 116.660395 97.79) (xy 115.77592 96.905525) (xy 115.594951 96.965105) (xy 115.492312 96.811495) (xy 115.278505 96.597688) (xy 115.162237 96.52) (xy 115.278505 96.442312) (xy 115.406737 96.31408) (xy 115.955525 96.31408) (xy 116.023319 96.52) (xy 115.955525 96.72592) (xy 116.84 97.610395) (xy 117.724475 96.72592) (xy 117.656681 96.52) (xy 117.724475 96.31408) (xy 118.495525 96.31408) (xy 118.563319 96.52) (xy 118.495525 96.72592) (xy 119.38 97.610395) (xy 120.264475 96.72592) (xy 120.196681 96.52) (xy 120.264475 96.31408) (xy 119.38 95.429605) (xy 118.495525 96.31408) (xy 117.724475 96.31408) (xy 116.84 95.429605) (xy 115.955525 96.31408) (xy 115.406737 96.31408) (xy 115.492312 96.228505) (xy 115.594951 96.074895) (xy 115.77592 96.134475) (xy 116.660395 95.25) (xy 117.019605 95.25) (xy 117.90408 96.134475) (xy 118.11 96.066681) (xy 118.31592 96.134475) (xy 119.200395 95.25) (xy 118.31592 94.365525) (xy 118.11 94.433319) (xy 117.90408 94.365525) (xy 117.019605 95.25) (xy 116.660395 95.25) (xy 115.77592 94.365525) (xy 115.594951 94.425105) (xy 115.492312 94.271495) (xy 115.278505 94.057688) (xy 115.162237 93.98) (xy 115.278505 93.902312) (xy 115.406737 93.77408) (xy 115.955525 93.77408) (xy 116.023319 93.98) (xy 115.955525 94.18592) (xy 116.84 95.070395) (xy 117.724475 94.18592) (xy 117.656681 93.98) (xy 117.724475 93.77408) (xy 118.495525 93.77408) (xy 118.563319 93.98) (xy 118.495525 94.18592) (xy 119.38 95.070395) (xy 120.264475 94.18592) (xy 120.196681 93.98) (xy 120.264475 93.77408) (xy 119.38 92.889605) (xy 118.495525 93.77408) (xy 117.724475 93.77408) (xy 116.84 92.889605) (xy 115.955525 93.77408) (xy 115.406737 93.77408) (xy 115.492312 93.688505) (xy 115.594951 93.534895) (xy 115.77592 93.594475) (xy 116.660395 92.71) (xy 117.019605 92.71) (xy 117.90408 93.594475) (xy 118.11 93.526681) (xy 118.31592 93.594475) (xy 119.200395 92.71) (xy 119.559605 92.71) (xy 120.44408 93.594475) (xy 120.625049 93.534895) (xy 120.727688 93.688505) (xy 120.941495 93.902312) (xy 121.057763 93.98) (xy 120.941495 94.057688) (xy 120.727688 94.271495) (xy 120.625049 94.425105) (xy 120.44408 94.365525) (xy 119.559605 95.25) (xy 120.44408 96.134475) (xy 120.625049 96.074895) (xy 120.727688 96.228505) (xy 120.941495 96.442312) (xy 121.057763 96.52) (xy 120.941495 96.597688) (xy 120.727688 96.811495) (xy 120.625049 96.965105) (xy 120.44408 96.905525) (xy 119.559605 97.79) (xy 120.44408 98.674475) (xy 120.625049 98.614895) (xy 120.727688 98.768505) (xy 120.941495 98.982312) (xy 121.192905 99.150299) (xy 121.472257 99.266011) (xy 121.768816 99.325) (xy 122.071184 99.325) (xy 122.367743 99.266011) (xy 122.647095 99.150299) (xy 122.898505 98.982312) (xy 123.112312 98.768505) (xy 123.280299 98.517095) (xy 123.396011 98.237743) (xy 123.455 97.941184) (xy 123.455 97.638816) (xy 123.396011 97.342257) (xy 123.280299 97.062905) (xy 123.112312 96.811495) (xy 122.898505 96.597688) (xy 122.782237 96.52) (xy 122.898505 96.442312) (xy 123.112312 96.228505) (xy 123.280299 95.977095) (xy 123.396011 95.697743) (xy 123.455 95.401184) (xy 123.455 95.098816) (xy 123.396011 94.802257) (xy 123.280299 94.522905) (xy 123.112312 94.271495) (xy 122.898505 94.057688) (xy 122.782237 93.98) (xy 122.898505 93.902312) (xy 123.112312 93.688505) (xy 123.280299 93.437095) (xy 123.396011 93.157743) (xy 123.455 92.861184) (xy 123.455 92.558816) (xy 123.396011 92.262257) (xy 123.280299 91.982905) (xy 123.112312 91.731495) (xy 122.898505 91.517688) (xy 122.647095 91.349701) (xy 122.367743 91.233989) (xy 122.071184 91.175) (xy 121.768816 91.175) (xy 121.472257 91.233989) (xy 121.192905 91.349701) (xy 120.941495 91.517688) (xy 120.727688 91.731495) (xy 120.625049 91.885105) (xy 120.44408 91.825525) (xy 119.559605 92.71) (xy 119.200395 92.71) (xy 118.31592 91.825525) (xy 118.11 91.893319) (xy 117.90408 91.825525) (xy 117.019605 92.71) (xy 116.660395 92.71) (xy 115.77592 91.825525) (xy 115.594951 91.885105) (xy 115.492312 91.731495) (xy 115.406737 91.64592) (xy 115.955525 91.64592) (xy 116.84 92.530395) (xy 117.724475 91.64592) (xy 118.495525 91.64592) (xy 119.38 92.530395) (xy 120.264475 91.64592) (xy 120.180792 91.391739) (xy 119.908225 91.260842) (xy 119.615358 91.185635) (xy 119.313447 91.169009) (xy 119.014093 91.211603) (xy 118.728801 91.311778) (xy 118.579208 91.391739) (xy 118.495525 91.64592) (xy 117.724475 91.64592) (xy 117.640792 91.391739) (xy 117.368225 91.260842) (xy 117.075358 91.185635) (xy 116.773447 91.169009) (xy 116.474093 91.211603) (xy 116.188801 91.311778) (xy 116.039208 91.391739) (xy 115.955525 91.64592) (xy 115.406737 91.64592) (xy 115.278505 91.517688) (xy 115.027095 91.349701) (xy 114.747743 91.233989) (xy 114.451184 91.175) (xy 114.148816 91.175) (xy 113.852257 91.233989) (xy 113.572905 91.349701) (xy 113.321495 91.517688) (xy 113.107688 91.731495) (xy 113.03 91.847763) (xy 112.952312 91.731495) (xy 112.738505 91.517688) (xy 112.487095 91.349701) (xy 112.207743 91.233989) (xy 111.911184 91.175) (xy 111.608816 91.175) (xy 111.312257 91.233989) (xy 111.032905 91.349701) (xy 110.781495 91.517688) (xy 110.567688 91.731495) (xy 110.49 91.847763) (xy 110.412312 91.731495) (xy 110.198505 91.517688) (xy 109.947095 91.349701) (xy 109.667743 91.233989) (xy 109.371184 91.175) (xy 109.068816 91.175) (xy 108.772257 91.233989) (xy 108.492905 91.349701) (xy 108.241495 91.517688) (xy 108.027688 91.731495) (xy 107.95 91.847763) (xy 107.872312 91.731495) (xy 107.658505 91.517688) (xy 107.407095 91.349701) (xy 107.127743 91.233989) (xy 106.831184 91.175) (xy 106.528816 91.175) (xy 106.232257 91.233989) (xy 105.952905 91.349701) (xy 105.701495 91.517688) (xy 105.487688 91.731495) (xy 105.41 91.847763) (xy 105.332312 91.731495) (xy 105.118505 91.517688) (xy 104.867095 91.349701) (xy 104.587743 91.233989) (xy 104.291184 91.175) (xy 103.988816 91.175) (xy 103.692257 91.233989) (xy 103.412905 91.349701) (xy 103.161495 91.517688) (xy 102.947688 91.731495) (xy 102.87 91.847763) (xy 102.792312 91.731495) (xy 102.578505 91.517688) (xy 102.327095 91.349701) (xy 102.047743 91.233989) (xy 101.751184 91.175) (xy 101.448816 91.175) (xy 101.152257 91.233989) (xy 100.872905 91.349701) (xy 100.621495 91.517688) (xy 100.407688 91.731495) (xy 100.33 91.847763) (xy 100.252312 91.731495) (xy 100.038505 91.517688) (xy 99.787095 91.349701) (xy 99.507743 91.233989) (xy 99.211184 91.175) (xy 98.908816 91.175) (xy 98.612257 91.233989) (xy 98.332905 91.349701) (xy 98.081495 91.517688) (xy 97.867688 91.731495) (xy 97.765049 91.885105) (xy 97.58408 91.825525) (xy 96.699605 92.71) (xy 96.340395 92.71) (xy 95.45592 91.825525) (xy 95.25 91.893319) (xy 95.04408 91.825525) (xy 94.159605 92.71) (xy 93.800395 92.71) (xy 92.91592 91.825525) (xy 92.661739 91.909208) (xy 92.530842 92.181775) (xy 92.455635 92.474642) (xy 92.439009 92.776553) (xy 85.201097 92.776553) (xy 85.200537 92.775506) (xy 85.121185 92.678815) (xy 85.024494 92.599463) (xy 84.91418 92.540498) (xy 84.794482 92.504188) (xy 84.67 92.491928) (xy 82.97 92.491928) (xy 82.845518 92.504188) (xy 82.72582 92.540498) (xy 82.615506 92.599463) (xy 82.518815 92.678815) (xy 82.439463 92.775506) (xy 82.380498 92.88582) (xy 82.344188 93.005518) (xy 82.331928 93.13) (xy 77.838072 93.13) (xy 77.838072 91.71) (xy 77.831761 91.64592) (xy 93.095525 91.64592) (xy 93.98 92.530395) (xy 94.864475 91.64592) (xy 95.635525 91.64592) (xy 96.52 92.530395) (xy 97.404475 91.64592) (xy 97.320792 91.391739) (xy 97.048225 91.260842) (xy 96.755358 91.185635) (xy 96.453447 91.169009) (xy 96.154093 91.211603) (xy 95.868801 91.311778) (xy 95.719208 91.391739) (xy 95.635525 91.64592) (xy 94.864475 91.64592) (xy 94.780792 91.391739) (xy 94.508225 91.260842) (xy 94.215358 91.185635) (xy 93.913447 91.169009) (xy 93.614093 91.211603) (xy 93.328801 91.311778) (xy 93.179208 91.391739) (xy 93.095525 91.64592) (xy 77.831761 91.64592) (xy 77.825812 91.585518) (xy 77.789502 91.46582) (xy 77.730537 91.355506) (xy 77.651185 91.258815) (xy 77.554494 91.179463) (xy 77.44418 91.120498) (xy 77.324482 91.084188) (xy 77.2 91.071928) (xy 75.2 91.071928) (xy 75.075518 91.084188) (xy 74.95582 91.120498) (xy 74.845506 91.179463) (xy 74.748815 91.258815) (xy 74.669463 91.355506) (xy 74.610498 91.46582) (xy 74.574188 91.585518) (xy 74.561928 91.71) (xy 64.16 91.71) (xy 64.16 75.6) (xy 73.441928 75.6) (xy 73.441928 76.8) (xy 73.458992 76.973254) (xy 73.509528 77.13985) (xy 73.591595 77.293386) (xy 73.702038 77.427962) (xy 73.836614 77.538405) (xy 73.963608 77.606285) (xy 73.776525 77.793368) (xy 73.61401 78.036589) (xy 73.502068 78.306842) (xy 73.445 78.59374) (xy 73.445 78.88626) (xy 73.502068 79.173158) (xy 73.61401 79.443411) (xy 73.776525 79.686632) (xy 73.983368 79.893475) (xy 74.15776 80.01) (xy 73.983368 80.126525) (xy 73.776525 80.333368) (xy 73.61401 80.576589) (xy 73.502068 80.846842) (xy 73.445 81.13374) (xy 73.445 81.42626) (xy 73.502068 81.713158) (xy 73.61401 81.983411) (xy 73.776525 82.226632) (xy 73.983368 82.433475) (xy 74.15776 82.55) (xy 73.983368 82.666525) (xy 73.776525 82.873368) (xy 73.61401 83.116589) (xy 73.502068 83.386842) (xy 73.445 83.67374) (xy 73.445 83.96626) (xy 73.502068 84.253158) (xy 73.61401 84.523411) (xy 73.776525 84.766632) (xy 73.983368 84.973475) (xy 74.226589 85.13599) (xy 74.496842 85.247932) (xy 74.78374 85.305) (xy 75.07626 85.305) (xy 75.363158 85.247932) (xy 75.633411 85.13599) (xy 75.876632 84.973475) (xy 76.00171 84.848397) (xy 76.621208 84.848397) (xy 76.698843 85.097472) (xy 76.962883 85.223371) (xy 77.246411 85.295339) (xy 77.538531 85.310611) (xy 77.828019 85.268599) (xy 78.103747 85.170919) (xy 78.241157 85.097472) (xy 78.318792 84.848397) (xy 77.47 83.999605) (xy 76.621208 84.848397) (xy 76.00171 84.848397) (xy 76.083475 84.766632) (xy 76.199311 84.593271) (xy 76.441603 84.668792) (xy 77.290395 83.82) (xy 77.649605 83.82) (xy 78.498397 84.668792) (xy 78.747472 84.591157) (xy 78.873371 84.327117) (xy 78.945339 84.043589) (xy 78.960611 83.751469) (xy 78.918599 83.461981) (xy 78.820919 83.186253) (xy 78.747472 83.048843) (xy 78.498397 82.971208) (xy 77.649605 83.82) (xy 77.290395 83.82) (xy 76.441603 82.971208) (xy 76.199311 83.046729) (xy 76.083475 82.873368) (xy 75.876632 82.666525) (xy 75.70224 82.55) (xy 75.876632 82.433475) (xy 76.00171 82.308397) (xy 76.621208 82.308397) (xy 76.696514 82.55) (xy 76.621208 82.791603) (xy 77.47 83.640395) (xy 78.318792 82.791603) (xy 78.243486 82.55) (xy 78.318792 82.308397) (xy 77.47 81.459605) (xy 76.621208 82.308397) (xy 76.00171 82.308397) (xy 76.083475 82.226632) (xy 76.199311 82.053271) (xy 76.441603 82.128792) (xy 77.290395 81.28) (xy 77.649605 81.28) (xy 78.498397 82.128792) (xy 78.747472 82.051157) (xy 78.873371 81.787117) (xy 78.945339 81.503589) (xy 78.960611 81.211469) (xy 78.918599 80.921981) (xy 78.820919 80.646253) (xy 78.747472 80.508843) (xy 78.498397 80.431208) (xy 77.649605 81.28) (xy 77.290395 81.28) (xy 76.441603 80.431208) (xy 76.199311 80.506729) (xy 76.083475 80.333368) (xy 75.876632 80.126525) (xy 75.70224 80.01) (xy 75.876632 79.893475) (xy 76.00171 79.768397) (xy 76.621208 79.768397) (xy 76.696514 80.01) (xy 76.621208 80.251603) (xy 77.47 81.100395) (xy 78.318792 80.251603) (xy 78.243486 80.01) (xy 78.318792 79.768397) (xy 77.47 78.919605) (xy 76.621208 79.768397) (xy 76.00171 79.768397) (xy 76.083475 79.686632) (xy 76.199311 79.513271) (xy 76.441603 79.588792) (xy 77.290395 78.74) (xy 77.649605 78.74) (xy 78.498397 79.588792) (xy 78.747472 79.511157) (xy 78.873371 79.247117) (xy 78.945339 78.963589) (xy 78.960611 78.671469) (xy 78.918599 78.381981) (xy 78.820919 78.106253) (xy 78.747472 77.968843) (xy 78.498397 77.891208) (xy 77.649605 78.74) (xy 77.290395 78.74) (xy 76.441603 77.891208) (xy 76.199311 77.966729) (xy 76.083475 77.793368) (xy 75.896392 77.606285) (xy 76.023386 77.538405) (xy 76.157962 77.427962) (xy 76.268405 77.293386) (xy 76.303142 77.228397) (xy 76.621208 77.228397) (xy 76.696514 77.47) (xy 76.621208 77.711603) (xy 77.47 78.560395) (xy 78.318792 77.711603) (xy 78.243486 77.47) (xy 78.318792 77.228397) (xy 77.47 76.379605) (xy 76.621208 77.228397) (xy 76.303142 77.228397) (xy 76.350472 77.13985) (xy 76.38358 77.030707) (xy 76.441603 77.048792) (xy 77.290395 76.2) (xy 77.649605 76.2) (xy 78.498397 77.048792) (xy 78.747472 76.971157) (xy 78.873371 76.707117) (xy 78.945339 76.423589) (xy 78.960611 76.131469) (xy 78.918599 75.841981) (xy 78.820919 75.566253) (xy 78.747472 75.428843) (xy 78.498397 75.351208) (xy 77.649605 76.2) (xy 77.290395 76.2) (xy 76.441603 75.351208) (xy 76.38358 75.369293) (xy 76.350472 75.26015) (xy 76.303143 75.171603) (xy 76.621208 75.171603) (xy 77.47 76.020395) (xy 78.318792 75.171603) (xy 78.241157 74.922528) (xy 77.977117 74.796629) (xy 77.693589 74.724661) (xy 77.401469 74.709389) (xy 77.111981 74.751401) (xy 76.836253 74.849081) (xy 76.698843 74.922528) (xy 76.621208 75.171603) (xy 76.303143 75.171603) (xy 76.268405 75.106614) (xy 76.157962 74.972038) (xy 76.023386 74.861595) (xy 75.86985 74.779528) (xy 75.703254 74.728992) (xy 75.53 74.711928) (xy 74.33 74.711928) (xy 74.156746 74.728992) (xy 73.99015 74.779528) (xy 73.836614 74.861595) (xy 73.702038 74.972038) (xy 73.591595 75.106614) (xy 73.509528 75.26015) (xy 73.458992 75.426746) (xy 73.441928 75.6) (xy 64.16 75.6) (xy 64.16 69.762033) (xy 65.037572 69.762033) (xy 65.355757 70.21585) (xy 65.96021 70.541269) (xy 66.616535 70.742512) (xy 67.29951 70.811845) (xy 67.982888 70.746605) (xy 68.640407 70.549298) (xy 69.246799 70.227506) (xy 69.264243 70.21585) (xy 69.582428 69.762033) (xy 69.519211 69.698816) (xy 92.445 69.698816) (xy 92.445 70.001184) (xy 92.503989 70.297743) (xy 92.619701 70.577095) (xy 92.787688 70.828505) (xy 93.001495 71.042312) (xy 93.117763 71.12) (xy 93.001495 71.197688) (xy 92.787688 71.411495) (xy 92.619701 71.662905) (xy 92.503989 71.942257) (xy 92.445 72.238816) (xy 92.445 72.541184) (xy 92.503989 72.837743) (xy 92.619701 73.117095) (xy 92.787688 73.368505) (xy 93.001495 73.582312) (xy 93.117763 73.66) (xy 93.001495 73.737688) (xy 92.787688 73.951495) (xy 92.619701 74.202905) (xy 92.503989 74.482257) (xy 92.445 74.778816) (xy 92.445 75.081184) (xy 92.503989 75.377743) (xy 92.619701 75.657095) (xy 92.787688 75.908505) (xy 93.001495 76.122312) (xy 93.252905 76.290299) (xy 93.532257 76.406011) (xy 93.828816 76.465) (xy 94.131184 76.465) (xy 94.427743 76.406011) (xy 94.707095 76.290299) (xy 94.958505 76.122312) (xy 95.172312 75.908505) (xy 95.25 75.792237) (xy 95.327688 75.908505) (xy 95.541495 76.122312) (xy 95.792905 76.290299) (xy 96.072257 76.406011) (xy 96.368816 76.465) (xy 96.671184 76.465) (xy 96.967743 76.406011) (xy 97.247095 76.290299) (xy 97.498505 76.122312) (xy 97.712312 75.908505) (xy 97.79 75.792237) (xy 97.867688 75.908505) (xy 98.081495 76.122312) (xy 98.332905 76.290299) (xy 98.612257 76.406011) (xy 98.908816 76.465) (xy 99.211184 76.465) (xy 99.507743 76.406011) (xy 99.787095 76.290299) (xy 100.038505 76.122312) (xy 100.252312 75.908505) (xy 100.33 75.792237) (xy 100.407688 75.908505) (xy 100.621495 76.122312) (xy 100.872905 76.290299) (xy 101.152257 76.406011) (xy 101.448816 76.465) (xy 101.751184 76.465) (xy 102.047743 76.406011) (xy 102.327095 76.290299) (xy 102.578505 76.122312) (xy 102.792312 75.908505) (xy 102.87 75.792237) (xy 102.947688 75.908505) (xy 103.161495 76.122312) (xy 103.412905 76.290299) (xy 103.692257 76.406011) (xy 103.988816 76.465) (xy 104.291184 76.465) (xy 104.587743 76.406011) (xy 104.867095 76.290299) (xy 105.118505 76.122312) (xy 105.332312 75.908505) (xy 105.41 75.792237) (xy 105.487688 75.908505) (xy 105.701495 76.122312) (xy 105.952905 76.290299) (xy 106.232257 76.406011) (xy 106.528816 76.465) (xy 106.831184 76.465) (xy 107.127743 76.406011) (xy 107.407095 76.290299) (xy 107.658505 76.122312) (xy 107.872312 75.908505) (xy 107.95 75.792237) (xy 108.027688 75.908505) (xy 108.241495 76.122312) (xy 108.492905 76.290299) (xy 108.772257 76.406011) (xy 109.068816 76.465) (xy 109.371184 76.465) (xy 109.667743 76.406011) (xy 109.947095 76.290299) (xy 110.198505 76.122312) (xy 110.412312 75.908505) (xy 110.49 75.792237) (xy 110.567688 75.908505) (xy 110.781495 76.122312) (xy 111.032905 76.290299) (xy 111.312257 76.406011) (xy 111.608816 76.465) (xy 111.911184 76.465) (xy 112.207743 76.406011) (xy 112.487095 76.290299) (xy 112.738505 76.122312) (xy 112.952312 75.908505) (xy 113.03 75.792237) (xy 113.107688 75.908505) (xy 113.321495 76.122312) (xy 113.572905 76.290299) (xy 113.852257 76.406011) (xy 114.148816 76.465) (xy 114.451184 76.465) (xy 114.747743 76.406011) (xy 115.027095 76.290299) (xy 115.278505 76.122312) (xy 115.492312 75.908505) (xy 115.57 75.792237) (xy 115.647688 75.908505) (xy 115.861495 76.122312) (xy 116.112905 76.290299) (xy 116.392257 76.406011) (xy 116.688816 76.465) (xy 116.991184 76.465) (xy 117.287743 76.406011) (xy 117.567095 76.290299) (xy 117.818505 76.122312) (xy 117.946737 75.99408) (xy 118.495525 75.99408) (xy 118.579208 76.248261) (xy 118.851775 76.379158) (xy 119.144642 76.454365) (xy 119.446553 76.470991) (xy 119.745907 76.428397) (xy 120.031199 76.328222) (xy 120.180792 76.248261) (xy 120.264475 75.99408) (xy 119.38 75.109605) (xy 118.495525 75.99408) (xy 117.946737 75.99408) (xy 118.032312 75.908505) (xy 118.134951 75.754895) (xy 118.31592 75.814475) (xy 119.200395 74.93) (xy 118.31592 74.045525) (xy 118.134951 74.105105) (xy 118.032312 73.951495) (xy 117.818505 73.737688) (xy 117.702237 73.66) (xy 117.818505 73.582312) (xy 117.946737 73.45408) (xy 118.495525 73.45408) (xy 118.563319 73.66) (xy 118.495525 73.86592) (xy 119.38 74.750395) (xy 120.264475 73.86592) (xy 120.196681 73.66) (xy 120.264475 73.45408) (xy 119.38 72.569605) (xy 118.495525 73.45408) (xy 117.946737 73.45408) (xy 118.032312 73.368505) (xy 118.134951 73.214895) (xy 118.31592 73.274475) (xy 119.200395 72.39) (xy 118.31592 71.505525) (xy 118.134951 71.565105) (xy 118.032312 71.411495) (xy 117.818505 71.197688) (xy 117.702237 71.12) (xy 117.818505 71.042312) (xy 117.946737 70.91408) (xy 118.495525 70.91408) (xy 118.563319 71.12) (xy 118.495525 71.32592) (xy 119.38 72.210395) (xy 120.264475 71.32592) (xy 120.196681 71.12) (xy 120.264475 70.91408) (xy 119.38 70.029605) (xy 118.495525 70.91408) (xy 117.946737 70.91408) (xy 118.032312 70.828505) (xy 118.134951 70.674895) (xy 118.31592 70.734475) (xy 119.200395 69.85) (xy 119.559605 69.85) (xy 120.44408 70.734475) (xy 120.625049 70.674895) (xy 120.727688 70.828505) (xy 120.941495 71.042312) (xy 121.057763 71.12) (xy 120.941495 71.197688) (xy 120.727688 71.411495) (xy 120.625049 71.565105) (xy 120.44408 71.505525) (xy 119.559605 72.39) (xy 120.44408 73.274475) (xy 120.625049 73.214895) (xy 120.727688 73.368505) (xy 120.941495 73.582312) (xy 121.057763 73.66) (xy 120.941495 73.737688) (xy 120.727688 73.951495) (xy 120.625049 74.105105) (xy 120.44408 74.045525) (xy 119.559605 74.93) (xy 120.44408 75.814475) (xy 120.625049 75.754895) (xy 120.727688 75.908505) (xy 120.941495 76.122312) (xy 121.192905 76.290299) (xy 121.472257 76.406011) (xy 121.768816 76.465) (xy 122.071184 76.465) (xy 122.367743 76.406011) (xy 122.647095 76.290299) (xy 122.898505 76.122312) (xy 123.112312 75.908505) (xy 123.280299 75.657095) (xy 123.396011 75.377743) (xy 123.455 75.081184) (xy 123.455 74.778816) (xy 123.396011 74.482257) (xy 123.280299 74.202905) (xy 123.112312 73.951495) (xy 122.898505 73.737688) (xy 122.782237 73.66) (xy 122.898505 73.582312) (xy 123.112312 73.368505) (xy 123.280299 73.117095) (xy 123.396011 72.837743) (xy 123.455 72.541184) (xy 123.455 72.238816) (xy 123.396011 71.942257) (xy 123.280299 71.662905) (xy 123.112312 71.411495) (xy 122.898505 71.197688) (xy 122.782237 71.12) (xy 122.898505 71.042312) (xy 123.112312 70.828505) (xy 123.280299 70.577095) (xy 123.396011 70.297743) (xy 123.455 70.001184) (xy 123.455 69.762033) (xy 132.347572 69.762033) (xy 132.665757 70.21585) (xy 133.27021 70.541269) (xy 133.926535 70.742512) (xy 134.60951 70.811845) (xy 135.292888 70.746605) (xy 135.950407 70.549298) (xy 136.556799 70.227506) (xy 136.574243 70.21585) (xy 136.892428 69.762033) (xy 134.62 67.489605) (xy 132.347572 69.762033) (xy 123.455 69.762033) (xy 123.455 69.698816) (xy 123.396011 69.402257) (xy 123.280299 69.122905) (xy 123.112312 68.871495) (xy 122.898505 68.657688) (xy 122.647095 68.489701) (xy 122.367743 68.373989) (xy 122.071184 68.315) (xy 121.768816 68.315) (xy 121.472257 68.373989) (xy 121.192905 68.489701) (xy 120.941495 68.657688) (xy 120.727688 68.871495) (xy 120.625049 69.025105) (xy 120.44408 68.965525) (xy 119.559605 69.85) (xy 119.200395 69.85) (xy 118.31592 68.965525) (xy 118.134951 69.025105) (xy 118.032312 68.871495) (xy 117.946737 68.78592) (xy 118.495525 68.78592) (xy 119.38 69.670395) (xy 120.264475 68.78592) (xy 120.180792 68.531739) (xy 119.908225 68.400842) (xy 119.615358 68.325635) (xy 119.313447 68.309009) (xy 119.014093 68.351603) (xy 118.728801 68.451778) (xy 118.579208 68.531739) (xy 118.495525 68.78592) (xy 117.946737 68.78592) (xy 117.818505 68.657688) (xy 117.567095 68.489701) (xy 117.287743 68.373989) (xy 116.991184 68.315) (xy 116.688816 68.315) (xy 116.392257 68.373989) (xy 116.112905 68.489701) (xy 115.861495 68.657688) (xy 115.647688 68.871495) (xy 115.57 68.987763) (xy 115.492312 68.871495) (xy 115.278505 68.657688) (xy 115.027095 68.489701) (xy 114.747743 68.373989) (xy 114.451184 68.315) (xy 114.148816 68.315) (xy 113.852257 68.373989) (xy 113.572905 68.489701) (xy 113.321495 68.657688) (xy 113.107688 68.871495) (xy 113.03 68.987763) (xy 112.952312 68.871495) (xy 112.738505 68.657688) (xy 112.487095 68.489701) (xy 112.207743 68.373989) (xy 111.911184 68.315) (xy 111.608816 68.315) (xy 111.312257 68.373989) (xy 111.032905 68.489701) (xy 110.781495 68.657688) (xy 110.567688 68.871495) (xy 110.49 68.987763) (xy 110.412312 68.871495) (xy 110.198505 68.657688) (xy 109.947095 68.489701) (xy 109.667743 68.373989) (xy 109.371184 68.315) (xy 109.068816 68.315) (xy 108.772257 68.373989) (xy 108.492905 68.489701) (xy 108.241495 68.657688) (xy 108.027688 68.871495) (xy 107.95 68.987763) (xy 107.872312 68.871495) (xy 107.658505 68.657688) (xy 107.407095 68.489701) (xy 107.127743 68.373989) (xy 106.831184 68.315) (xy 106.528816 68.315) (xy 106.232257 68.373989) (xy 105.952905 68.489701) (xy 105.701495 68.657688) (xy 105.487688 68.871495) (xy 105.41 68.987763) (xy 105.332312 68.871495) (xy 105.118505 68.657688) (xy 104.867095 68.489701) (xy 104.587743 68.373989) (xy 104.291184 68.315) (xy 103.988816 68.315) (xy 103.692257 68.373989) (xy 103.412905 68.489701) (xy 103.161495 68.657688) (xy 102.947688 68.871495) (xy 102.87 68.987763) (xy 102.792312 68.871495) (xy 102.578505 68.657688) (xy 102.327095 68.489701) (xy 102.047743 68.373989) (xy 101.751184 68.315) (xy 101.448816 68.315) (xy 101.152257 68.373989) (xy 100.872905 68.489701) (xy 100.621495 68.657688) (xy 100.407688 68.871495) (xy 100.33 68.987763) (xy 100.252312 68.871495) (xy 100.038505 68.657688) (xy 99.787095 68.489701) (xy 99.507743 68.373989) (xy 99.211184 68.315) (xy 98.908816 68.315) (xy 98.612257 68.373989) (xy 98.332905 68.489701) (xy 98.081495 68.657688) (xy 97.867688 68.871495) (xy 97.79 68.987763) (xy 97.712312 68.871495) (xy 97.498505 68.657688) (xy 97.247095 68.489701) (xy 96.967743 68.373989) (xy 96.671184 68.315) (xy 96.368816 68.315) (xy 96.072257 68.373989) (xy 95.792905 68.489701) (xy 95.541495 68.657688) (xy 95.327688 68.871495) (xy 95.25 68.987763) (xy 95.172312 68.871495) (xy 94.958505 68.657688) (xy 94.707095 68.489701) (xy 94.427743 68.373989) (xy 94.131184 68.315) (xy 93.828816 68.315) (xy 93.532257 68.373989) (xy 93.252905 68.489701) (xy 93.001495 68.657688) (xy 92.787688 68.871495) (xy 92.619701 69.122905) (xy 92.503989 69.402257) (xy 92.445 69.698816) (xy 69.519211 69.698816) (xy 67.31 67.489605) (xy 65.037572 69.762033) (xy 64.16 69.762033) (xy 64.16 68.808682) (xy 64.392494 69.246799) (xy 64.40415 69.264243) (xy 64.857967 69.582428) (xy 67.130395 67.31) (xy 67.489605 67.31) (xy 69.762033 69.582428) (xy 70.21585 69.264243) (xy 70.541269 68.65979) (xy 70.742512 68.003465) (xy 70.811845 67.32049) (xy 70.809843 67.29951) (xy 131.118155 67.29951) (xy 131.183395 67.982888) (xy 131.380702 68.640407) (xy 131.702494 69.246799) (xy 131.71415 69.264243) (xy 132.167967 69.582428) (xy 134.440395 67.31) (xy 132.167967 65.037572) (xy 131.71415 65.355757) (xy 131.388731 65.96021) (xy 131.187488 66.616535) (xy 131.118155 67.29951) (xy 70.809843 67.29951) (xy 70.746605 66.637112) (xy 70.549298 65.979593) (xy 70.227506 65.373201) (xy 70.21585 65.355757) (xy 69.762033 65.037572) (xy 67.489605 67.31) (xy 67.130395 67.31) (xy 67.116253 67.295858) (xy 67.295858 67.116253) (xy 67.31 67.130395) (xy 69.582428 64.857967) (xy 69.264243 64.40415) (xy 68.810744 64.16) (xy 133.121318 64.16) ) ) ) ) ================================================ FILE: electronics/chainlinkBuddyTDisplay/chainlinkBuddyTDisplay.pro ================================================ update=Thu 28 Oct 2021 09:45:46 PM PDT version=1 last_client=kicad [general] version=1 RootSch= BoardNm= [cvpcb] version=1 NetIExt=net [eeschema] version=1 LibDir= [eeschema/libraries] [pcbnew] version=1 PageLayoutDescrFile= LastNetListRead= CopperLayerCount=2 BoardThickness=1.6 AllowMicroVias=0 AllowBlindVias=0 RequireCourtyardDefinitions=0 ProhibitOverlappingCourtyards=1 MinTrackWidth=0.2 MinViaDiameter=0.4 MinViaDrill=0.3 MinMicroViaDiameter=0.2 MinMicroViaDrill=0.09999999999999999 MinHoleToHole=0.25 TrackWidth1=0.25 TrackWidth2=0.25 TrackWidth3=0.5 ViaDiameter1=0.8 ViaDrill1=0.4 dPairWidth1=0.2 dPairGap1=0.25 dPairViaGap1=0.25 SilkLineWidth=0.12 SilkTextSizeV=1 SilkTextSizeH=1 SilkTextSizeThickness=0.15 SilkTextItalic=0 SilkTextUpright=1 CopperLineWidth=0.2 CopperTextSizeV=1.5 CopperTextSizeH=1.5 CopperTextThickness=0.3 CopperTextItalic=0 CopperTextUpright=1 EdgeCutLineWidth=0.05 CourtyardLineWidth=0.05 OthersLineWidth=0.15 OthersTextSizeV=1 OthersTextSizeH=1 OthersTextSizeThickness=0.15 OthersTextItalic=0 OthersTextUpright=1 SolderMaskClearance=0 SolderMaskMinWidth=0 SolderPasteClearance=0 SolderPasteRatio=-0 [pcbnew/Layer.F.Cu] Name=F.Cu Type=0 Enabled=1 [pcbnew/Layer.In1.Cu] Name=In1.Cu Type=0 Enabled=0 [pcbnew/Layer.In2.Cu] Name=In2.Cu Type=0 Enabled=0 [pcbnew/Layer.In3.Cu] Name=In3.Cu Type=0 Enabled=0 [pcbnew/Layer.In4.Cu] Name=In4.Cu Type=0 Enabled=0 [pcbnew/Layer.In5.Cu] Name=In5.Cu Type=0 Enabled=0 [pcbnew/Layer.In6.Cu] Name=In6.Cu Type=0 Enabled=0 [pcbnew/Layer.In7.Cu] Name=In7.Cu Type=0 Enabled=0 [pcbnew/Layer.In8.Cu] Name=In8.Cu Type=0 Enabled=0 [pcbnew/Layer.In9.Cu] Name=In9.Cu Type=0 Enabled=0 [pcbnew/Layer.In10.Cu] Name=In10.Cu Type=0 Enabled=0 [pcbnew/Layer.In11.Cu] Name=In11.Cu Type=0 Enabled=0 [pcbnew/Layer.In12.Cu] Name=In12.Cu Type=0 Enabled=0 [pcbnew/Layer.In13.Cu] Name=In13.Cu Type=0 Enabled=0 [pcbnew/Layer.In14.Cu] Name=In14.Cu Type=0 Enabled=0 [pcbnew/Layer.In15.Cu] Name=In15.Cu Type=0 Enabled=0 [pcbnew/Layer.In16.Cu] Name=In16.Cu Type=0 Enabled=0 [pcbnew/Layer.In17.Cu] Name=In17.Cu Type=0 Enabled=0 [pcbnew/Layer.In18.Cu] Name=In18.Cu Type=0 Enabled=0 [pcbnew/Layer.In19.Cu] Name=In19.Cu Type=0 Enabled=0 [pcbnew/Layer.In20.Cu] Name=In20.Cu Type=0 Enabled=0 [pcbnew/Layer.In21.Cu] Name=In21.Cu Type=0 Enabled=0 [pcbnew/Layer.In22.Cu] Name=In22.Cu Type=0 Enabled=0 [pcbnew/Layer.In23.Cu] Name=In23.Cu Type=0 Enabled=0 [pcbnew/Layer.In24.Cu] Name=In24.Cu Type=0 Enabled=0 [pcbnew/Layer.In25.Cu] Name=In25.Cu Type=0 Enabled=0 [pcbnew/Layer.In26.Cu] Name=In26.Cu Type=0 Enabled=0 [pcbnew/Layer.In27.Cu] Name=In27.Cu Type=0 Enabled=0 [pcbnew/Layer.In28.Cu] Name=In28.Cu Type=0 Enabled=0 [pcbnew/Layer.In29.Cu] Name=In29.Cu Type=0 Enabled=0 [pcbnew/Layer.In30.Cu] Name=In30.Cu Type=0 Enabled=0 [pcbnew/Layer.B.Cu] Name=B.Cu Type=0 Enabled=1 [pcbnew/Layer.B.Adhes] Enabled=1 [pcbnew/Layer.F.Adhes] Enabled=1 [pcbnew/Layer.B.Paste] Enabled=1 [pcbnew/Layer.F.Paste] Enabled=1 [pcbnew/Layer.B.SilkS] Enabled=1 [pcbnew/Layer.F.SilkS] Enabled=1 [pcbnew/Layer.B.Mask] Enabled=1 [pcbnew/Layer.F.Mask] Enabled=1 [pcbnew/Layer.Dwgs.User] Enabled=1 [pcbnew/Layer.Cmts.User] Enabled=1 [pcbnew/Layer.Eco1.User] Enabled=1 [pcbnew/Layer.Eco2.User] Enabled=1 [pcbnew/Layer.Edge.Cuts] Enabled=1 [pcbnew/Layer.Margin] Enabled=1 [pcbnew/Layer.B.CrtYd] Enabled=1 [pcbnew/Layer.F.CrtYd] Enabled=1 [pcbnew/Layer.B.Fab] Enabled=1 [pcbnew/Layer.F.Fab] Enabled=1 [pcbnew/Layer.Rescue] Enabled=0 [pcbnew/Netclasses] [pcbnew/Netclasses/Default] Name=Default Clearance=0.2 TrackWidth=0.25 ViaDiameter=0.8 ViaDrill=0.4 uViaDiameter=0.3 uViaDrill=0.1 dPairWidth=0.2 dPairGap=0.25 dPairViaGap=0.25 ================================================ FILE: electronics/chainlinkBuddyTDisplay/chainlinkBuddyTDisplay.sch ================================================ EESchema Schematic File Version 4 EELAYER 30 0 EELAYER END $Descr USLetter 11000 8500 encoding utf-8 Sheet 1 1 Title "Splitflap Chainlink Buddy - T-Display" Date "" Rev "" Comp "" Comment1 "" Comment2 "" Comment3 "" Comment4 "" $EndDescr $Comp L ESP32Modules:TTGO_TDisplay U1 U 1 1 61A38EB2 P 3150 3500 F 0 "U1" H 3150 4365 50 0000 C CNN F 1 "TTGO_TDisplay" H 3150 4274 50 0000 C CNN F 2 "ESP32:T-DISPLAY_extra_pins_labeled_double" H 2950 3550 50 0001 C CNN F 3 "" H 2950 3550 50 0001 C CNN 1 3150 3500 1 0 0 -1 $EndComp $Comp L Connector_Generic:Conn_02x04_Odd_Even J1 U 1 1 61A3A5EC P 6700 3400 F 0 "J1" H 6750 3717 50 0000 C CNN F 1 "Output" H 6750 3626 50 0000 C CNN F 2 "ModifiedSymbols:IDC-Header_2x04_P2.54mm_Vertical" H 6700 3400 50 0001 C CNN F 3 "~" H 6700 3400 50 0001 C CNN 1 6700 3400 1 0 0 -1 $EndComp $Comp L power:GND #PWR01 U 1 1 61A3AEE0 P 7000 3750 F 0 "#PWR01" H 7000 3500 50 0001 C CNN F 1 "GND" H 7005 3577 50 0000 C CNN F 2 "" H 7000 3750 50 0001 C CNN F 3 "" H 7000 3750 50 0001 C CNN 1 7000 3750 1 0 0 -1 $EndComp Wire Wire Line 7000 3600 7000 3750 Wire Wire Line 7000 3300 7000 3400 Connection ~ 7000 3600 Connection ~ 7000 3400 Wire Wire Line 7000 3400 7000 3500 Connection ~ 7000 3500 Wire Wire Line 7000 3500 7000 3600 Text Label 5900 3300 0 50 ~ 0 CLOCK Text Label 5900 3400 0 50 ~ 0 MOTOR_DATA Text Label 5900 3500 0 50 ~ 0 SENSOR_DATA Text Label 5900 3600 0 50 ~ 0 LATCH Wire Wire Line 3650 3400 4400 3400 Wire Wire Line 3650 3500 4400 3500 Wire Wire Line 3650 3600 4400 3600 Wire Wire Line 3650 3700 4400 3700 Text Label 4400 3600 2 50 ~ 0 CLOCK Text Label 4400 3500 2 50 ~ 0 MOTOR_DATA Text Label 4400 3400 2 50 ~ 0 SENSOR_DATA Text Label 4400 3700 2 50 ~ 0 LATCH Wire Wire Line 5900 3300 6500 3300 Wire Wire Line 6500 3400 5900 3400 Wire Wire Line 5900 3500 6500 3500 Wire Wire Line 6500 3600 5900 3600 $Comp L Mechanical:MountingHole_Pad H1 U 1 1 61A7210A P 5150 1300 F 0 "H1" H 5250 1349 50 0000 L CNN F 1 "MountingHole_Pad" H 5250 1258 50 0000 L CNN F 2 "MountingHole:MountingHole_3.2mm_M3_ISO7380_Pad" H 5150 1300 50 0001 C CNN F 3 "~" H 5150 1300 50 0001 C CNN 1 5150 1300 1 0 0 -1 $EndComp $Comp L Mechanical:MountingHole_Pad H2 U 1 1 61A72B0C P 5350 1300 F 0 "H2" H 5450 1349 50 0000 L CNN F 1 "MountingHole_Pad" H 5450 1258 50 0000 L CNN F 2 "MountingHole:MountingHole_3.2mm_M3_ISO7380_Pad" H 5350 1300 50 0001 C CNN F 3 "~" H 5350 1300 50 0001 C CNN 1 5350 1300 1 0 0 -1 $EndComp $Comp L Mechanical:MountingHole_Pad H3 U 1 1 61A72DCF P 5550 1300 F 0 "H3" H 5650 1349 50 0000 L CNN F 1 "MountingHole_Pad" H 5650 1258 50 0000 L CNN F 2 "MountingHole:MountingHole_3.2mm_M3_ISO7380_Pad" H 5550 1300 50 0001 C CNN F 3 "~" H 5550 1300 50 0001 C CNN 1 5550 1300 1 0 0 -1 $EndComp $Comp L Mechanical:MountingHole_Pad H4 U 1 1 61A7316A P 5750 1300 F 0 "H4" H 5850 1349 50 0000 L CNN F 1 "MountingHole_Pad" H 5850 1258 50 0000 L CNN F 2 "MountingHole:MountingHole_3.2mm_M3_ISO7380_Pad" H 5750 1300 50 0001 C CNN F 3 "~" H 5750 1300 50 0001 C CNN 1 5750 1300 1 0 0 -1 $EndComp $Comp L power:GND #PWR0101 U 1 1 61A736A5 P 5450 1500 F 0 "#PWR0101" H 5450 1250 50 0001 C CNN F 1 "GND" H 5455 1327 50 0000 C CNN F 2 "" H 5450 1500 50 0001 C CNN F 3 "" H 5450 1500 50 0001 C CNN 1 5450 1500 1 0 0 -1 $EndComp Wire Wire Line 5150 1400 5350 1400 Connection ~ 5350 1400 Wire Wire Line 5350 1400 5450 1400 Connection ~ 5550 1400 Wire Wire Line 5550 1400 5750 1400 Wire Wire Line 5450 1500 5450 1400 Connection ~ 5450 1400 Wire Wire Line 5450 1400 5550 1400 $Comp L Connector:Screw_Terminal_01x03 J2 U 1 1 61A7AAE2 P 5050 4750 F 0 "J2" H 5130 4792 50 0000 L CNN F 1 "Screw_Terminal_01x03" H 5130 4701 50 0000 L CNN F 2 "ScrewTerminals:Generic-5.08-3P" H 5050 4750 50 0001 C CNN F 3 "~" H 5050 4750 50 0001 C CNN 1 5050 4750 1 0 0 -1 $EndComp Wire Wire Line 2250 4100 2250 3850 $Comp L power:+3.3V #PWR0102 U 1 1 61A7C7D9 P 2250 3850 F 0 "#PWR0102" H 2250 3700 50 0001 C CNN F 1 "+3.3V" H 2265 4023 50 0000 C CNN F 2 "" H 2250 3850 50 0001 C CNN F 3 "" H 2250 3850 50 0001 C CNN 1 2250 3850 1 0 0 -1 $EndComp $Comp L power:GND #PWR0103 U 1 1 61A7D8BF P 3800 4200 F 0 "#PWR0103" H 3800 3950 50 0001 C CNN F 1 "GND" H 3805 4027 50 0000 C CNN F 2 "" H 3800 4200 50 0001 C CNN F 3 "" H 3800 4200 50 0001 C CNN 1 3800 4200 1 0 0 -1 $EndComp Wire Wire Line 3650 4000 3800 4000 Wire Wire Line 3800 4000 3800 4200 $Comp L power:GND #PWR0104 U 1 1 61A7E4E6 P 2500 4250 F 0 "#PWR0104" H 2500 4000 50 0001 C CNN F 1 "GND" H 2505 4077 50 0000 C CNN F 2 "" H 2500 4250 50 0001 C CNN F 3 "" H 2500 4250 50 0001 C CNN 1 2500 4250 1 0 0 -1 $EndComp Wire Wire Line 2500 4250 2500 4000 Wire Wire Line 2500 3900 2650 3900 Wire Wire Line 2650 4000 2500 4000 Connection ~ 2500 4000 Wire Wire Line 2500 4000 2500 3900 Wire Wire Line 2650 3000 2500 3000 Wire Wire Line 2500 3000 2500 3100 Connection ~ 2500 3900 Wire Wire Line 2650 3100 2500 3100 Connection ~ 2500 3100 Wire Wire Line 2500 3100 2500 3900 $Comp L power:+5V #PWR0106 U 1 1 61A82D03 P 3950 4000 F 0 "#PWR0106" H 3950 3850 50 0001 C CNN F 1 "+5V" H 3965 4173 50 0000 C CNN F 2 "" H 3950 4000 50 0001 C CNN F 3 "" H 3950 4000 50 0001 C CNN 1 3950 4000 1 0 0 -1 $EndComp $Comp L power:GND #PWR0107 U 1 1 61A832D6 P 4750 4950 F 0 "#PWR0107" H 4750 4700 50 0001 C CNN F 1 "GND" H 4755 4777 50 0000 C CNN F 2 "" H 4750 4950 50 0001 C CNN F 3 "" H 4750 4950 50 0001 C CNN 1 4750 4950 1 0 0 -1 $EndComp $Comp L power:+3.3V #PWR0108 U 1 1 61A8381B P 4750 4550 F 0 "#PWR0108" H 4750 4400 50 0001 C CNN F 1 "+3.3V" H 4765 4723 50 0000 C CNN F 2 "" H 4750 4550 50 0001 C CNN F 3 "" H 4750 4550 50 0001 C CNN 1 4750 4550 1 0 0 -1 $EndComp Wire Wire Line 4750 4550 4750 4650 Wire Wire Line 4750 4650 4850 4650 Wire Wire Line 4850 4750 4750 4750 Wire Wire Line 4750 4750 4750 4950 Wire Wire Line 4500 4550 4500 4850 Wire Wire Line 4500 4850 4850 4850 Wire Wire Line 2250 4100 2650 4100 NoConn ~ 2650 3200 NoConn ~ 2650 3300 NoConn ~ 2650 3400 NoConn ~ 2650 3500 NoConn ~ 2650 3600 NoConn ~ 2650 3700 NoConn ~ 2650 3800 NoConn ~ 3650 3900 NoConn ~ 3650 3800 NoConn ~ 3650 3300 NoConn ~ 3650 3200 NoConn ~ 3650 3100 NoConn ~ 3650 3000 $Comp L Connector:Barrel_Jack_Switch J3 U 1 1 617CEDE5 P 1500 1750 F 0 "J3" H 1557 2067 50 0000 C CNN F 1 "Barrel_Jack_Switch" H 1557 1976 50 0000 C CNN F 2 "PJ-202A:PJ-202A" H 1550 1710 50 0001 C CNN F 3 "~" H 1550 1710 50 0001 C CNN 1 1500 1750 1 0 0 -1 $EndComp $Comp L power:+12V #PWR02 U 1 1 617D49A3 P 1950 1550 F 0 "#PWR02" H 1950 1400 50 0001 C CNN F 1 "+12V" H 1965 1723 50 0000 C CNN F 2 "" H 1950 1550 50 0001 C CNN F 3 "" H 1950 1550 50 0001 C CNN 1 1950 1550 1 0 0 -1 $EndComp Wire Wire Line 1800 1650 1950 1650 Wire Wire Line 1950 1650 1950 1550 $Comp L power:GND #PWR05 U 1 1 617D5F7C P 1950 2000 F 0 "#PWR05" H 1950 1750 50 0001 C CNN F 1 "GND" H 1955 1827 50 0000 C CNN F 2 "" H 1950 2000 50 0001 C CNN F 3 "" H 1950 2000 50 0001 C CNN 1 1950 2000 1 0 0 -1 $EndComp Wire Wire Line 1800 1850 1950 1850 Wire Wire Line 1950 1850 1950 2000 NoConn ~ 1800 1750 $Comp L Regulator_Linear:LM7805_TO220 U2 U 1 1 617DC13F P 3750 1650 F 0 "U2" H 3750 1892 50 0000 C CNN F 1 "LM7805_TO220" H 3750 1801 50 0000 C CNN F 2 "ModifiedSymbols:TO-220-3_Vertical" H 3750 1875 50 0001 C CIN F 3 "https://www.onsemi.cn/PowerSolutions/document/MC7800-D.PDF" H 3750 1600 50 0001 C CNN 1 3750 1650 1 0 0 -1 $EndComp $Comp L Device:C_Small C1 U 1 1 617DDA1A P 3300 1750 F 0 "C1" H 3250 2000 50 0000 L CNN F 1 "10uF" H 3150 1950 50 0000 L CNN F 2 "Capacitor_SMD:C_1206_3216Metric_Pad1.33x1.80mm_HandSolder" H 3300 1750 50 0001 C CNN F 3 "~" H 3300 1750 50 0001 C CNN 1 3300 1750 1 0 0 -1 $EndComp Wire Wire Line 3300 1650 3450 1650 Wire Wire Line 3300 1850 3300 1950 Wire Wire Line 3300 1950 3750 1950 $Comp L Device:C_Small C2 U 1 1 617E09DF P 4250 1750 F 0 "C2" H 4200 2000 50 0000 L CNN F 1 "22uF" H 4100 1950 50 0000 L CNN F 2 "Capacitor_SMD:C_1206_3216Metric_Pad1.33x1.80mm_HandSolder" H 4250 1750 50 0001 C CNN F 3 "~" H 4250 1750 50 0001 C CNN 1 4250 1750 1 0 0 -1 $EndComp Wire Wire Line 4250 1850 4250 1950 Wire Wire Line 4250 1950 3750 1950 Connection ~ 3750 1950 Wire Wire Line 4050 1650 4250 1650 $Comp L power:+12V #PWR03 U 1 1 617E2C4F P 3000 1650 F 0 "#PWR03" H 3000 1500 50 0001 C CNN F 1 "+12V" H 3015 1823 50 0000 C CNN F 2 "" H 3000 1650 50 0001 C CNN F 3 "" H 3000 1650 50 0001 C CNN 1 3000 1650 1 0 0 -1 $EndComp Wire Wire Line 3000 1650 3300 1650 Connection ~ 3300 1650 $Comp L power:+5V #PWR04 U 1 1 617E4049 P 4550 1650 F 0 "#PWR04" H 4550 1500 50 0001 C CNN F 1 "+5V" H 4565 1823 50 0000 C CNN F 2 "" H 4550 1650 50 0001 C CNN F 3 "" H 4550 1650 50 0001 C CNN 1 4550 1650 1 0 0 -1 $EndComp Wire Wire Line 4550 1650 4250 1650 Connection ~ 4250 1650 $Comp L power:GND #PWR06 U 1 1 617E548E P 3750 2050 F 0 "#PWR06" H 3750 1800 50 0001 C CNN F 1 "GND" H 3755 1877 50 0000 C CNN F 2 "" H 3750 2050 50 0001 C CNN F 3 "" H 3750 2050 50 0001 C CNN 1 3750 2050 1 0 0 -1 $EndComp Wire Wire Line 3750 2050 3750 1950 Wire Wire Line 3950 4000 3950 4100 Wire Wire Line 3950 4100 3650 4100 $Comp L power:+12V #PWR07 U 1 1 617EBE63 P 4500 4550 F 0 "#PWR07" H 4500 4400 50 0001 C CNN F 1 "+12V" H 4515 4723 50 0000 C CNN F 2 "" H 4500 4550 50 0001 C CNN F 3 "" H 4500 4550 50 0001 C CNN 1 4500 4550 1 0 0 -1 $EndComp $Comp L no_pin:no_pin Z1 U 1 1 617F16BD P 1550 1150 F 0 "Z1" H 1550 1437 60 0000 C CNN F 1 "polarity label" H 1550 1331 60 0000 C CNN F 2 "Symbol:Symbol_Barrel_Polarity" H 1550 1150 60 0001 C CNN F 3 "" H 1550 1150 60 0001 C CNN 1 1550 1150 1 0 0 -1 $EndComp $Comp L power:PWR_FLAG #FLG0101 U 1 1 617F3266 P 2250 1650 F 0 "#FLG0101" H 2250 1725 50 0001 C CNN F 1 "PWR_FLAG" H 2250 1823 50 0000 C CNN F 2 "" H 2250 1650 50 0001 C CNN F 3 "~" H 2250 1650 50 0001 C CNN 1 2250 1650 1 0 0 -1 $EndComp $Comp L power:PWR_FLAG #FLG0102 U 1 1 617F36A9 P 2250 1850 F 0 "#FLG0102" H 2250 1925 50 0001 C CNN F 1 "PWR_FLAG" H 2250 2023 50 0000 C CNN F 2 "" H 2250 1850 50 0001 C CNN F 3 "~" H 2250 1850 50 0001 C CNN 1 2250 1850 1 0 0 -1 $EndComp Wire Wire Line 1950 1850 2250 1850 Connection ~ 1950 1850 Wire Wire Line 1950 1650 2250 1650 Connection ~ 1950 1650 $Comp L power:PWR_FLAG #FLG0103 U 1 1 617F6261 P 2000 4100 F 0 "#FLG0103" H 2000 4175 50 0001 C CNN F 1 "PWR_FLAG" H 2000 4273 50 0000 C CNN F 2 "" H 2000 4100 50 0001 C CNN F 3 "~" H 2000 4100 50 0001 C CNN 1 2000 4100 1 0 0 -1 $EndComp Wire Wire Line 2000 4100 2250 4100 Connection ~ 2250 4100 $Comp L Connector_Generic:Conn_01x04 J7 U 1 1 61C9DDB1 P 3300 5750 F 0 "J7" H 3380 5742 50 0000 L CNN F 1 "Conn_01x04" H 3380 5651 50 0000 L CNN F 2 "ModifiedSymbols:PinHoles_1x04_P2.54mm_NoSilk" H 3300 5750 50 0001 C CNN F 3 "~" H 3300 5750 50 0001 C CNN 1 3300 5750 1 0 0 -1 $EndComp Wire Wire Line 3100 5450 3100 5650 Connection ~ 3100 5650 Wire Wire Line 3100 5650 3100 5750 Connection ~ 3100 5750 Wire Wire Line 3100 5750 3100 5850 Connection ~ 3100 5850 Wire Wire Line 3100 5850 3100 5950 $Comp L power:+12V #PWR0111 U 1 1 61CA0D35 P 3100 5450 F 0 "#PWR0111" H 3100 5300 50 0001 C CNN F 1 "+12V" H 3115 5623 50 0000 C CNN F 2 "" H 3100 5450 50 0001 C CNN F 3 "" H 3100 5450 50 0001 C CNN 1 3100 5450 1 0 0 -1 $EndComp $EndSCHEMATC ================================================ FILE: electronics/chainlinkBuddyTDisplay/fp-lib-table ================================================ (fp_lib_table (lib (name ModifiedSymbols)(type KiCad)(uri ${KIPRJMOD}/../lib/ModifiedSymbols.pretty)(options "")(descr "")) (lib (name ESP32)(type KiCad)(uri ${KIPRJMOD}/../lib/ESP32.pretty)(options "")(descr "")) (lib (name ScrewTerminals)(type KiCad)(uri ${KIPRJMOD}/../lib/ScrewTerminals.pretty)(options "")(descr "")) (lib (name Buck)(type KiCad)(uri ${KIPRJMOD}/../lib/Buck.pretty)(options "")(descr "")) (lib (name PJ-202A)(type KiCad)(uri ${KIPRJMOD}/../lib/PJ-202A.pretty)(options "")(descr "")) ) ================================================ FILE: electronics/chainlinkBuddyTDisplay/kikit_panelize.json ================================================ { "layout": { "type": "grid", "rows": 2, "cols": 1, "hspace": "0mm", "vspace": "0mm", "rotation": "0deg", "alternation": "none" }, "source": { "type": "auto", // Large tolerance for footprints to be included "tolerance": "100mm" }, "cuts": { "type": "vcuts", "layer": "Edge.Cuts" }, "framing": { "type": "none" } } ================================================ FILE: electronics/chainlinkBuddyTDisplay/sym-lib-table ================================================ (sym_lib_table (lib (name ESP32Modules)(type Legacy)(uri ${KIPRJMOD}/../lib/ESP32Modules.lib)(options "")(descr "")) (lib (name no_pin)(type Legacy)(uri ${KIPRJMOD}/../lib/no_pin.lib)(options "")(descr "")) ) ================================================ FILE: electronics/chainlinkDriver/.gitignore ================================================ *.xml ================================================ FILE: electronics/chainlinkDriver/chainlinkDriver-cache.lib ================================================ EESchema-LIBRARY Version 2.4 #encoding utf-8 # # 74HC125_74HC125 # DEF 74HC125_74HC125 U 0 40 Y Y 1 F N F0 "U" -300 650 50 H V C CNN F1 "74HC125_74HC125" 250 650 50 H V C CNN F2 "" 0 100 50 H I C CNN F3 "" 0 100 50 H I C CNN DRAW S -300 600 300 -600 0 1 0 f P 4 0 1 0 -50 350 -50 250 50 300 -50 350 N P 4 1 1 0 -50 -250 -50 -350 50 -300 -50 -250 N P 4 1 1 0 -50 -50 -50 -150 50 -100 -50 -50 N P 4 1 1 0 -50 150 -50 50 50 100 -50 150 N X 1nOE 1 -400 250 100 R 50 50 1 1 I X 3nOE 10 -400 -150 100 R 50 50 1 1 I X 4Y 11 400 -300 100 L 50 50 1 1 T X 4A 12 -400 -250 100 R 50 50 1 1 I X 4nOE 13 -400 -350 100 R 50 50 1 1 I X VCC 14 0 700 100 D 50 50 1 1 W X 1A 2 -400 350 100 R 50 50 1 1 I X 1Y 3 400 300 100 L 50 50 1 1 T X 2nOE 4 -400 50 100 R 50 50 1 1 I X 2A 5 -400 150 100 R 50 50 1 1 I X 2Y 6 400 100 100 L 50 50 1 1 T X GND 7 0 -700 100 U 50 50 1 1 W X 3Y 8 400 -100 100 L 50 50 1 1 T X 3A 9 -400 -50 100 R 50 50 1 1 I ENDDRAW ENDDEF # # 74HC165_2_74HC165 # DEF 74HC165_2_74HC165 U 0 40 Y Y 1 F N F0 "U" 150 700 50 H V C CNN F1 "74HC165_2_74HC165" 250 600 50 H V C CNN F2 "MODULE" 600 1200 50 H I C CNN F3 "DOCUMENTATION" 750 1100 50 H I C CNN DRAW S 300 550 -300 -550 0 1 0 f X ~LD 1 -600 350 300 R 50 50 1 1 I X SER 10 -600 -400 300 R 50 50 1 1 I X A 11 600 500 300 L 50 50 1 1 I X B 12 600 400 300 L 50 50 1 1 I X C 13 600 300 300 L 50 50 1 1 I X D 14 600 200 300 L 50 50 1 1 I X CLKIN 15 -600 50 300 R 50 50 1 1 I X VCC 16 0 850 300 D 50 50 1 1 W X CLK 2 -600 150 300 R 50 50 1 1 I X E 3 600 100 300 L 50 50 1 1 I X F 4 600 0 300 L 50 50 1 1 I X G 5 600 -100 300 L 50 50 1 1 I X H 6 600 -200 300 L 50 50 1 1 I X ~QH 7 600 -500 300 L 50 50 1 1 O X GND 8 0 -850 300 U 50 50 1 1 W X QH 9 600 -400 300 L 50 50 1 1 O ENDDRAW ENDDEF # # 74xx_74HC595 # DEF 74xx_74HC595 U 0 20 Y Y 1 F N F0 "U" -300 550 50 H V C CNN F1 "74xx_74HC595" -300 -650 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN ALIAS 74LS595 74HCT595 74AHC595 74AHCT595 $FPLIST DIP*W7.62mm* SOIC*3.9x9.9mm*P1.27mm* TSSOP*4.4x5mm*P0.65mm* SOIC*5.3x10.2mm*P1.27mm* SOIC*7.5x10.3mm*P1.27mm* $ENDFPLIST DRAW S -300 500 300 -600 1 1 10 f X QB 1 400 300 100 L 50 50 1 0 T X ~SRCLR 10 -400 100 100 R 50 50 1 0 I X SRCLK 11 -400 200 100 R 50 50 1 0 I X RCLK 12 -400 -100 100 R 50 50 1 0 I X ~OE 13 -400 -200 100 R 50 50 1 0 I X SER 14 -400 400 100 R 50 50 1 0 I X QA 15 400 400 100 L 50 50 1 0 T X VCC 16 0 600 100 D 50 50 1 0 W X QC 2 400 200 100 L 50 50 1 0 T X QD 3 400 100 100 L 50 50 1 0 T X QE 4 400 0 100 L 50 50 1 0 T X QF 5 400 -100 100 L 50 50 1 0 T X QG 6 400 -200 100 L 50 50 1 0 T X QH 7 400 -300 100 L 50 50 1 0 T X GND 8 0 -700 100 U 50 50 1 0 W X QH' 9 400 -500 100 L 50 50 1 0 O ENDDRAW ENDDEF # # Connector_Conn_01x03_Male # DEF Connector_Conn_01x03_Male J 0 40 Y N 1 F N F0 "J" 0 200 50 H V C CNN F1 "Connector_Conn_01x03_Male" 0 -200 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST Connector*:*_1x??_* $ENDFPLIST DRAW S 34 -95 0 -105 1 1 6 F S 34 5 0 -5 1 1 6 F S 34 105 0 95 1 1 6 F P 2 1 1 6 50 -100 34 -100 N P 2 1 1 6 50 0 34 0 N P 2 1 1 6 50 100 34 100 N X Pin_1 1 200 100 150 L 50 50 1 1 P X Pin_2 2 200 0 150 L 50 50 1 1 P X Pin_3 3 200 -100 150 L 50 50 1 1 P ENDDRAW ENDDEF # # Connector_Conn_01x05_Male # DEF Connector_Conn_01x05_Male J 0 40 Y N 1 F N F0 "J" 0 300 50 H V C CNN F1 "Connector_Conn_01x05_Male" 0 -300 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST Connector*:*_1x??_* $ENDFPLIST DRAW S 34 -195 0 -205 1 1 6 F S 34 -95 0 -105 1 1 6 F S 34 5 0 -5 1 1 6 F S 34 105 0 95 1 1 6 F S 34 205 0 195 1 1 6 F P 2 1 1 6 50 -200 34 -200 N P 2 1 1 6 50 -100 34 -100 N P 2 1 1 6 50 0 34 0 N P 2 1 1 6 50 100 34 100 N P 2 1 1 6 50 200 34 200 N X Pin_1 1 200 200 150 L 50 50 1 1 P X Pin_2 2 200 100 150 L 50 50 1 1 P X Pin_3 3 200 0 150 L 50 50 1 1 P X Pin_4 4 200 -100 150 L 50 50 1 1 P X Pin_5 5 200 -200 150 L 50 50 1 1 P ENDDRAW ENDDEF # # Connector_Generic_Conn_02x04_Odd_Even # DEF Connector_Generic_Conn_02x04_Odd_Even J 0 40 Y N 1 F N F0 "J" 50 200 50 H V C CNN F1 "Connector_Generic_Conn_02x04_Odd_Even" 50 -300 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST Connector*:*_2x??_* $ENDFPLIST DRAW S -50 -195 0 -205 1 1 6 N S -50 -95 0 -105 1 1 6 N S -50 5 0 -5 1 1 6 N S -50 105 0 95 1 1 6 N S -50 150 150 -250 1 1 10 f S 150 -195 100 -205 1 1 6 N S 150 -95 100 -105 1 1 6 N S 150 5 100 -5 1 1 6 N S 150 105 100 95 1 1 6 N X Pin_1 1 -200 100 150 R 50 50 1 1 P X Pin_2 2 300 100 150 L 50 50 1 1 P X Pin_3 3 -200 0 150 R 50 50 1 1 P X Pin_4 4 300 0 150 L 50 50 1 1 P X Pin_5 5 -200 -100 150 R 50 50 1 1 P X Pin_6 6 300 -100 150 L 50 50 1 1 P X Pin_7 7 -200 -200 150 R 50 50 1 1 P X Pin_8 8 300 -200 150 L 50 50 1 1 P ENDDRAW ENDDEF # # Connector_Screw_Terminal_01x02 # DEF Connector_Screw_Terminal_01x02 J 0 40 Y N 1 F N F0 "J" 0 100 50 H V C CNN F1 "Connector_Screw_Terminal_01x02" 0 -200 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST TerminalBlock*:* $ENDFPLIST DRAW C 0 -100 25 1 1 6 N C 0 0 25 1 1 6 N S -50 50 50 -150 1 1 10 f P 2 1 1 6 -21 -87 13 -120 N P 2 1 1 6 -21 13 13 -20 N P 2 1 1 6 -14 -80 20 -113 N P 2 1 1 6 -14 20 20 -13 N X Pin_1 1 -200 0 150 R 50 50 1 1 P X Pin_2 2 -200 -100 150 R 50 50 1 1 P ENDDRAW ENDDEF # # Device_CP_Small # DEF Device_CP_Small C 0 10 N N 1 F N F0 "C" 10 70 50 H V L CNN F1 "Device_CP_Small" 10 -80 50 H V L CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST CP_* $ENDFPLIST DRAW S -60 -12 60 -27 0 1 0 F S -60 27 60 12 0 1 0 N P 2 0 1 0 -50 60 -30 60 N P 2 0 1 0 -40 50 -40 70 N X ~ 1 0 100 73 D 50 50 1 1 P X ~ 2 0 -100 73 U 50 50 1 1 P ENDDRAW ENDDEF # # Device_C_Small # DEF Device_C_Small C 0 10 N N 1 F N F0 "C" 10 70 50 H V L CNN F1 "Device_C_Small" 10 -80 50 H V L CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST C_* $ENDFPLIST DRAW P 2 0 1 13 -60 -20 60 -20 N P 2 0 1 12 -60 20 60 20 N X ~ 1 0 100 80 D 50 50 1 1 P X ~ 2 0 -100 80 U 50 50 1 1 P ENDDRAW ENDDEF # # Device_LED_Small # DEF Device_LED_Small D 0 10 N N 1 F N F0 "D" -50 125 50 H V L CNN F1 "Device_LED_Small" -175 -100 50 H V L CNN F2 "" 0 0 50 V I C CNN F3 "" 0 0 50 V I C CNN $FPLIST LED* LED_SMD:* LED_THT:* $ENDFPLIST DRAW P 2 0 1 10 -30 -40 -30 40 N P 2 0 1 0 40 0 -30 0 N P 4 0 1 10 30 -40 -30 0 30 40 30 -40 N P 5 0 1 0 0 30 -20 50 -10 50 -20 50 -20 40 N P 5 0 1 0 20 50 0 70 10 70 0 70 0 60 N X K 1 -100 0 70 R 50 50 1 1 P X A 2 100 0 70 L 50 50 1 1 P ENDDRAW ENDDEF # # Device_R_Small # DEF Device_R_Small R 0 10 N N 1 F N F0 "R" 30 20 50 H V L CNN F1 "Device_R_Small" 30 -40 50 H V L CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST R_* $ENDFPLIST DRAW S -30 70 30 -70 0 1 8 N X ~ 1 0 100 30 D 50 50 1 1 P X ~ 2 0 -100 30 U 50 50 1 1 P ENDDRAW ENDDEF # # Mechanical_MountingHole # DEF Mechanical_MountingHole H 0 40 Y Y 1 F N F0 "H" 0 200 50 H V C CNN F1 "Mechanical_MountingHole" 0 125 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST MountingHole* $ENDFPLIST DRAW C 0 0 50 0 1 50 N ENDDRAW ENDDEF # # Mechanical_MountingHole_Pad # DEF Mechanical_MountingHole_Pad H 0 40 N N 1 F N F0 "H" 0 250 50 H V C CNN F1 "Mechanical_MountingHole_Pad" 0 175 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST MountingHole*Pad* $ENDFPLIST DRAW C 0 50 50 0 1 50 N X 1 1 0 -100 100 U 50 50 1 1 I ENDDRAW ENDDEF # # Transistor_Array_ULN2003A # DEF Transistor_Array_ULN2003A U 0 20 Y Y 1 F N F0 "U" 0 625 50 H V C CNN F1 "Transistor_Array_ULN2003A" 0 550 50 H V C CNN F2 "" 50 -550 50 H I L CNN F3 "" 100 -200 50 H I C CNN ALIAS ULN2003A ULN2002 ULN2002A ULN2004 ULN2004A $FPLIST DIP*W7.62mm* SOIC*3.9x9.9mm*P1.27mm* SSOP*4.4x5.2mm*P0.65mm* TSSOP*4.4x5mm*P0.65mm* SOIC*W*5.3x10.2mm*P1.27mm* $ENDFPLIST DRAW C -70 200 10 0 1 0 N C -50 -90 10 0 1 0 F C -50 0 10 0 1 0 F C -50 100 10 0 1 0 F C -20 200 10 0 1 0 F S -300 -500 300 500 0 1 10 f P 2 0 1 0 -180 200 -140 200 N P 2 0 1 0 -60 200 160 200 N P 2 0 1 0 0 265 -40 265 N P 3 0 1 0 -20 200 -20 400 115 400 N P 4 0 1 0 -140 240 -140 160 -80 200 -140 240 N P 4 0 1 0 0 235 -40 235 -20 265 0 235 N X I1 1 -400 200 100 R 50 50 1 1 I X O7 10 400 -400 100 L 50 50 1 1 C X O6 11 400 -300 100 L 50 50 1 1 C X O5 12 400 -200 100 L 50 50 1 1 C X O4 13 400 -100 100 L 50 50 1 1 C X O3 14 400 0 100 L 50 50 1 1 C X O2 15 400 100 100 L 50 50 1 1 C X O1 16 400 200 100 L 50 50 1 1 C X I2 2 -400 100 100 R 50 50 1 1 I X I3 3 -400 0 100 R 50 50 1 1 I X I4 4 -400 -100 100 R 50 50 1 1 I X I5 5 -400 -200 100 R 50 50 1 1 I X I6 6 -400 -300 100 R 50 50 1 1 I X I7 7 -400 -400 100 R 50 50 1 1 I X GND 8 0 -600 100 U 50 50 1 1 W X COM 9 400 400 100 L 50 50 1 1 P ENDDRAW ENDDEF # # power_+12V # DEF power_+12V #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -150 50 H I C CNN F1 "power_+12V" 0 140 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 2 0 1 0 -30 50 0 100 N P 2 0 1 0 0 0 0 100 N P 2 0 1 0 0 100 30 50 N X +12V 1 0 0 0 U 50 50 1 1 W N ENDDRAW ENDDEF # # power_+3.3V # DEF power_+3.3V #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -150 50 H I C CNN F1 "power_+3.3V" 0 140 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN ALIAS +3.3V DRAW P 2 0 1 0 -30 50 0 100 N P 2 0 1 0 0 0 0 100 N P 2 0 1 0 0 100 30 50 N X +3V3 1 0 0 0 U 50 50 1 1 W N ENDDRAW ENDDEF # # power_GND # DEF power_GND #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -250 50 H I C CNN F1 "power_GND" 0 -150 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 6 0 1 0 0 0 0 -50 50 -50 0 -100 -50 -50 0 -50 N X GND 1 0 0 0 D 50 50 1 1 W N ENDDRAW ENDDEF # # power_PWR_FLAG # DEF power_PWR_FLAG #FLG 0 0 N N 1 F P F0 "#FLG" 0 75 50 H I C CNN F1 "power_PWR_FLAG" 0 150 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 6 0 1 0 0 0 0 50 -40 75 0 100 40 75 0 50 N X pwr 1 0 0 0 U 50 50 0 0 w ENDDRAW ENDDEF # #End Library ================================================ FILE: electronics/chainlinkDriver/chainlinkDriver.kibot.yml ================================================ kibot: version: 1 preflight: check_zone_fills: true run_drc: true run_erc: true update_xml: true outputs: - name: ibom comment: 'Interactive BOM' type: ibom dir: bom options: layer_view: F dark_mode: true netlist_file: '%F.xml' extra_fields: 'LCSC' ================================================ FILE: electronics/chainlinkDriver/chainlinkDriver.kicad_pcb ================================================ (kicad_pcb (version 20171130) (host pcbnew 5.1.10-88a1d61d58~90~ubuntu20.04.1) (general (thickness 1.6) (drawings 53) (tracks 798) (zones 0) (modules 65) (nets 84) ) (page A4) (layers (0 F.Cu signal) (31 B.Cu signal) (32 B.Adhes user) (33 F.Adhes user) (34 B.Paste user) (35 F.Paste user) (36 B.SilkS user) (37 F.SilkS user) (38 B.Mask user) (39 F.Mask user) (40 Dwgs.User user) (41 Cmts.User user) (42 Eco1.User user) (43 Eco2.User user) (44 Edge.Cuts user) (45 Margin user) (46 B.CrtYd user) (47 F.CrtYd user) (48 B.Fab user) (49 F.Fab user) ) (setup (last_trace_width 0.2) (user_trace_width 0.15) (user_trace_width 0.35) (user_trace_width 0.55) (user_trace_width 2) (trace_clearance 0.15) (zone_clearance 0.508) (zone_45_only no) (trace_min 0.127) (via_size 0.5) (via_drill 0.3) (via_min_size 0.45) (via_min_drill 0.2) (uvia_size 0.3) (uvia_drill 0.1) (uvias_allowed no) (uvia_min_size 0.2) (uvia_min_drill 0.1) (edge_width 0.05) (segment_width 0.2) (pcb_text_width 0.3) (pcb_text_size 1.5 1.5) (mod_edge_width 0.12) (mod_text_size 1 1) (mod_text_width 0.15) (pad_size 1.524 1.524) (pad_drill 0.762) (pad_to_mask_clearance 0) (aux_axis_origin 0 0) (visible_elements FFFFFF7F) (pcbplotparams (layerselection 0x010fc_ffffffff) (usegerberextensions false) (usegerberattributes false) (usegerberadvancedattributes false) (creategerberjobfile false) (excludeedgelayer true) (linewidth 0.100000) (plotframeref false) (viasonmask false) (mode 1) (useauxorigin false) (hpglpennumber 1) (hpglpenspeed 20) (hpglpendiameter 15.000000) (psnegative false) (psa4output false) (plotreference true) (plotvalue true) (plotinvisibletext false) (padsonsilk false) (subtractmaskfromsilk false) (outputformat 1) (mirror false) (drillshape 0) (scaleselection 1) (outputdirectory "build")) ) (net 0 "") (net 1 GND) (net 2 +12V) (net 3 /SENSOR_D) (net 4 /SENSOR_C) (net 5 /SENSOR_B) (net 6 /SENSOR_A) (net 7 /CLOCK_IN) (net 8 /OUT_A_PHASE_D) (net 9 /OUT_A_PHASE_C) (net 10 /OUT_A_PHASE_B) (net 11 /OUT_A_PHASE_A) (net 12 /OUT_B_PHASE_D) (net 13 /OUT_B_PHASE_C) (net 14 /OUT_B_PHASE_B) (net 15 /OUT_B_PHASE_A) (net 16 /OUT_C_PHASE_D) (net 17 /OUT_C_PHASE_C) (net 18 /OUT_C_PHASE_B) (net 19 /OUT_C_PHASE_A) (net 20 /OUT_D_PHASE_D) (net 21 /OUT_D_PHASE_C) (net 22 /OUT_D_PHASE_B) (net 23 /OUT_D_PHASE_A) (net 24 /MOTOR_D_PHASE_D) (net 25 /MOTOR_D_PHASE_C) (net 26 /MOTOR_D_PHASE_B) (net 27 /MOTOR_D_PHASE_A) (net 28 /MOTOR_C_PHASE_D) (net 29 /MOTOR_C_PHASE_C) (net 30 /MOTOR_C_PHASE_B) (net 31 /MOTOR_C_PHASE_A) (net 32 /MOTOR_B_PHASE_D) (net 33 /MOTOR_B_PHASE_C) (net 34 /MOTOR_B_PHASE_B) (net 35 /MOTOR_B_PHASE_A) (net 36 /MOTOR_A_PHASE_D) (net 37 /MOTOR_A_PHASE_C) (net 38 /MOTOR_A_PHASE_B) (net 39 /MOTOR_A_PHASE_A) (net 40 +3V3) (net 41 "Net-(D1-Pad2)") (net 42 "Net-(D2-Pad2)") (net 43 "Net-(D3-Pad2)") (net 44 "Net-(D4-Pad2)") (net 45 /MOTOR_IN) (net 46 /LED_A) (net 47 /LED_B) (net 48 /LED_C) (net 49 /LED_D) (net 50 "Net-(U1-Pad9)") (net 51 /LOOPBACK_B) (net 52 /LOOPBACK_A) (net 53 "Net-(U5-Pad9)") (net 54 /CLOCK_OUT) (net 55 /MOTOR_OUT) (net 56 /MOTOR_OUT_PRE_BUFFER) (net 57 "Net-(D5-Pad2)") (net 58 "Net-(D6-Pad2)") (net 59 /OUT_E_PHASE_D) (net 60 /OUT_E_PHASE_C) (net 61 /OUT_E_PHASE_B) (net 62 /OUT_E_PHASE_A) (net 63 /OUT_F_PHASE_D) (net 64 /OUT_F_PHASE_C) (net 65 /OUT_F_PHASE_B) (net 66 /OUT_F_PHASE_A) (net 67 /SENSOR_E) (net 68 /SENSOR_F) (net 69 /LED_E) (net 70 /LED_F) (net 71 "Net-(U7-Pad14)") (net 72 /MOTOR_E_PHASE_A) (net 73 /MOTOR_E_PHASE_B) (net 74 /MOTOR_F_PHASE_D) (net 75 /MOTOR_F_PHASE_C) (net 76 /MOTOR_F_PHASE_B) (net 77 /MOTOR_F_PHASE_A) (net 78 /MOTOR_E_PHASE_D) (net 79 /MOTOR_E_PHASE_C) (net 80 /SENSOR_OUT) (net 81 /SENSOR_IN) (net 82 /LATCH_IN) (net 83 /LATCH_OUT) (net_class Default "This is the default net class." (clearance 0.15) (trace_width 0.2) (via_dia 0.5) (via_drill 0.3) (uvia_dia 0.3) (uvia_drill 0.1) (add_net /CLOCK_IN) (add_net /CLOCK_OUT) (add_net /LATCH_IN) (add_net /LATCH_OUT) (add_net /LED_A) (add_net /LED_B) (add_net /LED_C) (add_net /LED_D) (add_net /LED_E) (add_net /LED_F) (add_net /LOOPBACK_A) (add_net /LOOPBACK_B) (add_net /MOTOR_A_PHASE_A) (add_net /MOTOR_A_PHASE_B) (add_net /MOTOR_A_PHASE_C) (add_net /MOTOR_A_PHASE_D) (add_net /MOTOR_B_PHASE_A) (add_net /MOTOR_B_PHASE_B) (add_net /MOTOR_B_PHASE_C) (add_net /MOTOR_B_PHASE_D) (add_net /MOTOR_C_PHASE_A) (add_net /MOTOR_C_PHASE_B) (add_net /MOTOR_C_PHASE_C) (add_net /MOTOR_C_PHASE_D) (add_net /MOTOR_D_PHASE_A) (add_net /MOTOR_D_PHASE_B) (add_net /MOTOR_D_PHASE_C) (add_net /MOTOR_D_PHASE_D) (add_net /MOTOR_E_PHASE_A) (add_net /MOTOR_E_PHASE_B) (add_net /MOTOR_E_PHASE_C) (add_net /MOTOR_E_PHASE_D) (add_net /MOTOR_F_PHASE_A) (add_net /MOTOR_F_PHASE_B) (add_net /MOTOR_F_PHASE_C) (add_net /MOTOR_F_PHASE_D) (add_net /MOTOR_IN) (add_net /MOTOR_OUT) (add_net /MOTOR_OUT_PRE_BUFFER) (add_net /SENSOR_A) (add_net /SENSOR_B) (add_net /SENSOR_C) (add_net /SENSOR_D) (add_net /SENSOR_E) (add_net /SENSOR_F) (add_net /SENSOR_IN) (add_net /SENSOR_OUT) (add_net GND) (add_net "Net-(D1-Pad2)") (add_net "Net-(D2-Pad2)") (add_net "Net-(D3-Pad2)") (add_net "Net-(D4-Pad2)") (add_net "Net-(D5-Pad2)") (add_net "Net-(D6-Pad2)") (add_net "Net-(H1-Pad1)") (add_net "Net-(H2-Pad1)") (add_net "Net-(H3-Pad1)") (add_net "Net-(H4-Pad1)") (add_net "Net-(H5-Pad1)") (add_net "Net-(U1-Pad9)") (add_net "Net-(U10-Pad10)") (add_net "Net-(U2-Pad10)") (add_net "Net-(U3-Pad8)") (add_net "Net-(U4-Pad7)") (add_net "Net-(U5-Pad9)") (add_net "Net-(U6-Pad10)") (add_net "Net-(U7-Pad14)") (add_net "Net-(U8-Pad10)") ) (net_class save "" (clearance 0.2) (trace_width 0.25) (via_dia 0.8) (via_drill 0.4) (uvia_dia 0.3) (uvia_drill 0.1) (add_net +12V) (add_net +3V3) (add_net /OUT_A_PHASE_A) (add_net /OUT_A_PHASE_B) (add_net /OUT_A_PHASE_C) (add_net /OUT_A_PHASE_D) (add_net /OUT_B_PHASE_A) (add_net /OUT_B_PHASE_B) (add_net /OUT_B_PHASE_C) (add_net /OUT_B_PHASE_D) (add_net /OUT_C_PHASE_A) (add_net /OUT_C_PHASE_B) (add_net /OUT_C_PHASE_C) (add_net /OUT_C_PHASE_D) (add_net /OUT_D_PHASE_A) (add_net /OUT_D_PHASE_B) (add_net /OUT_D_PHASE_C) (add_net /OUT_D_PHASE_D) (add_net /OUT_E_PHASE_A) (add_net /OUT_E_PHASE_B) (add_net /OUT_E_PHASE_C) (add_net /OUT_E_PHASE_D) (add_net /OUT_F_PHASE_A) (add_net /OUT_F_PHASE_B) (add_net /OUT_F_PHASE_C) (add_net /OUT_F_PHASE_D) ) (module JLCPCB:AssemblyToolingHole (layer F.Cu) (tedit 61803CCC) (tstamp 601AD9A3) (at 215.9 54.61) (path /611C9E09) (attr virtual) (fp_text reference H7 (at 0 0.5) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value MountingHole (at 0 -0.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad "" np_thru_hole circle (at 0 0) (size 1.152 1.152) (drill 1.152) (layers *.Cu *.Mask) (solder_mask_margin 0.148)) ) (module JLCPCB:AssemblyToolingHole (layer F.Cu) (tedit 61803CCC) (tstamp 601AD99E) (at 33.02 26.67) (path /611C9319) (attr virtual) (fp_text reference H6 (at 0 0.5) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value MountingHole (at 0 -0.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad "" np_thru_hole circle (at 0 0) (size 1.152 1.152) (drill 1.152) (layers *.Cu *.Mask) (solder_mask_margin 0.148)) ) (module ScrewTerminals:Generic-5.08-2P (layer F.Cu) (tedit 618039E9) (tstamp 6049FF6B) (at 132.08 31.75) (path /604FD827) (fp_text reference J18 (at 2.54 -2.921) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value Power (at 0 -0.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -2.54 -6.2) (end 7.62 -6.2) (layer F.CrtYd) (width 0.12)) (fp_line (start 7.62 -6.2) (end 7.62 6.2) (layer F.CrtYd) (width 0.12)) (fp_line (start 7.62 6.2) (end -2.54 6.2) (layer F.CrtYd) (width 0.12)) (fp_line (start -2.54 6.2) (end -2.54 -6.2) (layer F.CrtYd) (width 0.12)) (fp_line (start -2.54 4.3) (end -2.54 -4.3) (layer F.SilkS) (width 0.12)) (fp_line (start 7.62 4.3) (end -2.54 4.3) (layer F.SilkS) (width 0.12)) (fp_line (start -2.54 -4.3) (end 7.62 -4.3) (layer F.SilkS) (width 0.12)) (fp_line (start 7.62 -4.3) (end 7.62 4.3) (layer F.SilkS) (width 0.12)) (fp_line (start -1.27 4.23) (end -0.635 3.04) (layer F.SilkS) (width 0.15)) (fp_line (start -0.635 3.04) (end 0.635 3.04) (layer F.SilkS) (width 0.15)) (fp_line (start 0.635 3.04) (end 1.27 4.23) (layer F.SilkS) (width 0.15)) (fp_line (start 5.715 3.04) (end 6.35 4.23) (layer F.SilkS) (width 0.15)) (fp_line (start 3.81 4.23) (end 4.445 3.04) (layer F.SilkS) (width 0.15)) (fp_line (start 4.445 3.04) (end 5.715 3.04) (layer F.SilkS) (width 0.15)) (fp_text user "Generic screw terminal keep out region" (at 2.54 5.08) (layer F.Fab) (effects (font (size 0.5 0.3) (thickness 0.05))) ) (fp_text user "Generic screw terminal keep out region" (at 2.54 -5.08) (layer F.Fab) (effects (font (size 0.5 0.3) (thickness 0.05))) ) (pad 2 thru_hole circle (at 5.08 0) (size 2.5 2.5) (drill 1.5) (layers *.Cu *.Mask) (net 2 +12V)) (pad 1 thru_hole rect (at 0 0) (size 2.5 2.5) (drill 1.5) (layers *.Cu *.Mask) (net 2 +12V)) (model ${KISYS3DMOD}/TerminalBlock_Phoenix.3dshapes/TerminalBlock_Phoenix_MKDS-1,5-2-5.08_1x02_P5.08mm_Horizontal.step (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module ScrewTerminals:Generic-5.08-2P (layer F.Cu) (tedit 618039E9) (tstamp 6049FF57) (at 121.92 31.75) (path /604FD568) (fp_text reference J17 (at 2.54 -2.921) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value Power (at 0 -0.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -2.54 -6.2) (end 7.62 -6.2) (layer F.CrtYd) (width 0.12)) (fp_line (start 7.62 -6.2) (end 7.62 6.2) (layer F.CrtYd) (width 0.12)) (fp_line (start 7.62 6.2) (end -2.54 6.2) (layer F.CrtYd) (width 0.12)) (fp_line (start -2.54 6.2) (end -2.54 -6.2) (layer F.CrtYd) (width 0.12)) (fp_line (start -2.54 4.3) (end -2.54 -4.3) (layer F.SilkS) (width 0.12)) (fp_line (start 7.62 4.3) (end -2.54 4.3) (layer F.SilkS) (width 0.12)) (fp_line (start -2.54 -4.3) (end 7.62 -4.3) (layer F.SilkS) (width 0.12)) (fp_line (start 7.62 -4.3) (end 7.62 4.3) (layer F.SilkS) (width 0.12)) (fp_line (start -1.27 4.23) (end -0.635 3.04) (layer F.SilkS) (width 0.15)) (fp_line (start -0.635 3.04) (end 0.635 3.04) (layer F.SilkS) (width 0.15)) (fp_line (start 0.635 3.04) (end 1.27 4.23) (layer F.SilkS) (width 0.15)) (fp_line (start 5.715 3.04) (end 6.35 4.23) (layer F.SilkS) (width 0.15)) (fp_line (start 3.81 4.23) (end 4.445 3.04) (layer F.SilkS) (width 0.15)) (fp_line (start 4.445 3.04) (end 5.715 3.04) (layer F.SilkS) (width 0.15)) (fp_text user "Generic screw terminal keep out region" (at 2.54 5.08) (layer F.Fab) (effects (font (size 0.5 0.3) (thickness 0.05))) ) (fp_text user "Generic screw terminal keep out region" (at 2.54 -5.08) (layer F.Fab) (effects (font (size 0.5 0.3) (thickness 0.05))) ) (pad 2 thru_hole circle (at 5.08 0) (size 2.5 2.5) (drill 1.5) (layers *.Cu *.Mask) (net 1 GND)) (pad 1 thru_hole rect (at 0 0) (size 2.5 2.5) (drill 1.5) (layers *.Cu *.Mask) (net 1 GND)) (model ${KISYS3DMOD}/TerminalBlock_Phoenix.3dshapes/TerminalBlock_Phoenix_MKDS-1,5-2-5.08_1x02_P5.08mm_Horizontal.step (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module ScrewTerminals:Generic-5.08-2P (layer F.Cu) (tedit 618039E9) (tstamp 6049FF43) (at 111.76 31.75) (path /604CA397) (fp_text reference J16 (at 2.54 -2.921) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value Power (at 0 -0.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -2.54 -6.2) (end 7.62 -6.2) (layer F.CrtYd) (width 0.12)) (fp_line (start 7.62 -6.2) (end 7.62 6.2) (layer F.CrtYd) (width 0.12)) (fp_line (start 7.62 6.2) (end -2.54 6.2) (layer F.CrtYd) (width 0.12)) (fp_line (start -2.54 6.2) (end -2.54 -6.2) (layer F.CrtYd) (width 0.12)) (fp_line (start -2.54 4.3) (end -2.54 -4.3) (layer F.SilkS) (width 0.12)) (fp_line (start 7.62 4.3) (end -2.54 4.3) (layer F.SilkS) (width 0.12)) (fp_line (start -2.54 -4.3) (end 7.62 -4.3) (layer F.SilkS) (width 0.12)) (fp_line (start 7.62 -4.3) (end 7.62 4.3) (layer F.SilkS) (width 0.12)) (fp_line (start -1.27 4.23) (end -0.635 3.04) (layer F.SilkS) (width 0.15)) (fp_line (start -0.635 3.04) (end 0.635 3.04) (layer F.SilkS) (width 0.15)) (fp_line (start 0.635 3.04) (end 1.27 4.23) (layer F.SilkS) (width 0.15)) (fp_line (start 5.715 3.04) (end 6.35 4.23) (layer F.SilkS) (width 0.15)) (fp_line (start 3.81 4.23) (end 4.445 3.04) (layer F.SilkS) (width 0.15)) (fp_line (start 4.445 3.04) (end 5.715 3.04) (layer F.SilkS) (width 0.15)) (fp_text user "Generic screw terminal keep out region" (at 2.54 5.08) (layer F.Fab) (effects (font (size 0.5 0.3) (thickness 0.05))) ) (fp_text user "Generic screw terminal keep out region" (at 2.54 -5.08) (layer F.Fab) (effects (font (size 0.5 0.3) (thickness 0.05))) ) (pad 2 thru_hole circle (at 5.08 0) (size 2.5 2.5) (drill 1.5) (layers *.Cu *.Mask) (net 40 +3V3)) (pad 1 thru_hole rect (at 0 0) (size 2.5 2.5) (drill 1.5) (layers *.Cu *.Mask) (net 40 +3V3)) (model ${KISYS3DMOD}/TerminalBlock_Phoenix.3dshapes/TerminalBlock_Phoenix_MKDS-1,5-2-5.08_1x02_P5.08mm_Horizontal.step (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module ModifiedSymbols:IDC-Header_2x04_P2.54mm_Vertical (layer F.Cu) (tedit 617B5015) (tstamp 617B33A3) (at 35.56 36.83) (descr "Through hole IDC box header, 2x04, 2.54mm pitch, DIN 41651 / IEC 60603-13, double rows, https://docs.google.com/spreadsheets/d/16SsEcesNF15N3Lb4niX7dcUr-NY5_MFPQhobNuNppn4/edit#gid=0") (tags "Through hole vertical IDC box header THT 2x04 2.54mm double row") (path /618D5E87) (fp_text reference J20 (at 1.27 -2.921) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value IDC (at 1.27 13.72) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -3.18 -4.1) (end -2.18 -5.1) (layer F.Fab) (width 0.1)) (fp_line (start -2.18 -5.1) (end 5.72 -5.1) (layer F.Fab) (width 0.1)) (fp_line (start 5.72 -5.1) (end 5.72 12.72) (layer F.Fab) (width 0.1)) (fp_line (start 5.72 12.72) (end -3.18 12.72) (layer F.Fab) (width 0.1)) (fp_line (start -3.18 12.72) (end -3.18 -4.1) (layer F.Fab) (width 0.1)) (fp_line (start -3.18 1.76) (end -1.98 1.76) (layer F.Fab) (width 0.1)) (fp_line (start -1.98 1.76) (end -1.98 -3.91) (layer F.Fab) (width 0.1)) (fp_line (start -1.98 -3.91) (end 4.52 -3.91) (layer F.Fab) (width 0.1)) (fp_line (start 4.52 -3.91) (end 4.52 11.53) (layer F.Fab) (width 0.1)) (fp_line (start 4.52 11.53) (end -1.98 11.53) (layer F.Fab) (width 0.1)) (fp_line (start -1.98 11.53) (end -1.98 5.86) (layer F.Fab) (width 0.1)) (fp_line (start -1.98 5.86) (end -1.98 5.86) (layer F.Fab) (width 0.1)) (fp_line (start -1.98 5.86) (end -3.18 5.86) (layer F.Fab) (width 0.1)) (fp_line (start -3.29 -5.21) (end 5.83 -5.21) (layer F.SilkS) (width 0.12)) (fp_line (start 5.83 -5.21) (end 5.83 12.83) (layer F.SilkS) (width 0.12)) (fp_line (start 5.83 12.83) (end -3.29 12.83) (layer F.SilkS) (width 0.12)) (fp_line (start -3.29 12.83) (end -3.29 -5.21) (layer F.SilkS) (width 0.12)) (fp_line (start -3.29 1.76) (end -1.98 1.76) (layer F.SilkS) (width 0.12)) (fp_line (start -1.98 1.76) (end -1.98 -3.91) (layer F.SilkS) (width 0.12)) (fp_line (start -1.98 -3.91) (end 4.52 -3.91) (layer F.SilkS) (width 0.12)) (fp_line (start 4.52 -3.91) (end 4.52 11.53) (layer F.SilkS) (width 0.12)) (fp_line (start 4.52 11.53) (end -1.98 11.53) (layer F.SilkS) (width 0.12)) (fp_line (start -1.98 11.53) (end -1.98 5.86) (layer F.SilkS) (width 0.12)) (fp_line (start -1.98 5.86) (end -1.98 5.86) (layer F.SilkS) (width 0.12)) (fp_line (start -1.98 5.86) (end -3.29 5.86) (layer F.SilkS) (width 0.12)) (fp_line (start -3.68 -5.6) (end -3.68 13.22) (layer F.CrtYd) (width 0.05)) (fp_line (start -3.68 13.22) (end 6.22 13.22) (layer F.CrtYd) (width 0.05)) (fp_line (start 6.22 13.22) (end 6.22 -5.6) (layer F.CrtYd) (width 0.05)) (fp_line (start 6.22 -5.6) (end -3.68 -5.6) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 1.27 3.81 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 1 thru_hole roundrect (at 0 0) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (roundrect_rratio 0.147059) (net 54 /CLOCK_OUT)) (pad 3 thru_hole circle (at 0 2.54) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 55 /MOTOR_OUT)) (pad 5 thru_hole circle (at 0 5.08) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 81 /SENSOR_IN)) (pad 7 thru_hole circle (at 0 7.62) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 83 /LATCH_OUT)) (pad 2 thru_hole circle (at 2.54 0) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 1 GND)) (pad 4 thru_hole circle (at 2.54 2.54) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 1 GND)) (pad 6 thru_hole circle (at 2.54 5.08) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 1 GND)) (pad 8 thru_hole circle (at 2.54 7.62) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 1 GND)) (model ${KISYS3DMOD}/Connector_IDC.3dshapes/IDC-Header_2x04_P2.54mm_Vertical.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module ModifiedSymbols:IDC-Header_2x04_P2.54mm_Vertical (layer F.Cu) (tedit 617B5015) (tstamp 617B3376) (at 210.82 36.83) (descr "Through hole IDC box header, 2x04, 2.54mm pitch, DIN 41651 / IEC 60603-13, double rows, https://docs.google.com/spreadsheets/d/16SsEcesNF15N3Lb4niX7dcUr-NY5_MFPQhobNuNppn4/edit#gid=0") (tags "Through hole vertical IDC box header THT 2x04 2.54mm double row") (path /61861E9F) (fp_text reference J19 (at 1.27 -2.921) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value IDC (at 1.27 13.72) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -3.18 -4.1) (end -2.18 -5.1) (layer F.Fab) (width 0.1)) (fp_line (start -2.18 -5.1) (end 5.72 -5.1) (layer F.Fab) (width 0.1)) (fp_line (start 5.72 -5.1) (end 5.72 12.72) (layer F.Fab) (width 0.1)) (fp_line (start 5.72 12.72) (end -3.18 12.72) (layer F.Fab) (width 0.1)) (fp_line (start -3.18 12.72) (end -3.18 -4.1) (layer F.Fab) (width 0.1)) (fp_line (start -3.18 1.76) (end -1.98 1.76) (layer F.Fab) (width 0.1)) (fp_line (start -1.98 1.76) (end -1.98 -3.91) (layer F.Fab) (width 0.1)) (fp_line (start -1.98 -3.91) (end 4.52 -3.91) (layer F.Fab) (width 0.1)) (fp_line (start 4.52 -3.91) (end 4.52 11.53) (layer F.Fab) (width 0.1)) (fp_line (start 4.52 11.53) (end -1.98 11.53) (layer F.Fab) (width 0.1)) (fp_line (start -1.98 11.53) (end -1.98 5.86) (layer F.Fab) (width 0.1)) (fp_line (start -1.98 5.86) (end -1.98 5.86) (layer F.Fab) (width 0.1)) (fp_line (start -1.98 5.86) (end -3.18 5.86) (layer F.Fab) (width 0.1)) (fp_line (start -3.29 -5.21) (end 5.83 -5.21) (layer F.SilkS) (width 0.12)) (fp_line (start 5.83 -5.21) (end 5.83 12.83) (layer F.SilkS) (width 0.12)) (fp_line (start 5.83 12.83) (end -3.29 12.83) (layer F.SilkS) (width 0.12)) (fp_line (start -3.29 12.83) (end -3.29 -5.21) (layer F.SilkS) (width 0.12)) (fp_line (start -3.29 1.76) (end -1.98 1.76) (layer F.SilkS) (width 0.12)) (fp_line (start -1.98 1.76) (end -1.98 -3.91) (layer F.SilkS) (width 0.12)) (fp_line (start -1.98 -3.91) (end 4.52 -3.91) (layer F.SilkS) (width 0.12)) (fp_line (start 4.52 -3.91) (end 4.52 11.53) (layer F.SilkS) (width 0.12)) (fp_line (start 4.52 11.53) (end -1.98 11.53) (layer F.SilkS) (width 0.12)) (fp_line (start -1.98 11.53) (end -1.98 5.86) (layer F.SilkS) (width 0.12)) (fp_line (start -1.98 5.86) (end -1.98 5.86) (layer F.SilkS) (width 0.12)) (fp_line (start -1.98 5.86) (end -3.29 5.86) (layer F.SilkS) (width 0.12)) (fp_line (start -3.68 -5.6) (end -3.68 13.22) (layer F.CrtYd) (width 0.05)) (fp_line (start -3.68 13.22) (end 6.22 13.22) (layer F.CrtYd) (width 0.05)) (fp_line (start 6.22 13.22) (end 6.22 -5.6) (layer F.CrtYd) (width 0.05)) (fp_line (start 6.22 -5.6) (end -3.68 -5.6) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 1.27 3.81 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 1 thru_hole roundrect (at 0 0) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (roundrect_rratio 0.147059) (net 7 /CLOCK_IN)) (pad 3 thru_hole circle (at 0 2.54) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 45 /MOTOR_IN)) (pad 5 thru_hole circle (at 0 5.08) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 80 /SENSOR_OUT)) (pad 7 thru_hole circle (at 0 7.62) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 82 /LATCH_IN)) (pad 2 thru_hole circle (at 2.54 0) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 1 GND)) (pad 4 thru_hole circle (at 2.54 2.54) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 1 GND)) (pad 6 thru_hole circle (at 2.54 5.08) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 1 GND)) (pad 8 thru_hole circle (at 2.54 7.62) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 1 GND)) (model ${KISYS3DMOD}/Connector_IDC.3dshapes/IDC-Header_2x04_P2.54mm_Vertical.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Resistor_SMD:R_0603_1608Metric (layer F.Cu) (tedit 5F68FEEE) (tstamp 6074BE20) (at 105.41 48.895 270) (descr "Resistor SMD 0603 (1608 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") (tags resistor) (path /60866A83) (attr smd) (fp_text reference R14 (at 2.159 0 180) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value 47k (at 0 1.43 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 1.48 0.73) (end -1.48 0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.48 -0.73) (end 1.48 0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.48 -0.73) (end 1.48 -0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.48 0.73) (end -1.48 -0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start -0.237258 0.5225) (end 0.237258 0.5225) (layer F.SilkS) (width 0.12)) (fp_line (start -0.237258 -0.5225) (end 0.237258 -0.5225) (layer F.SilkS) (width 0.12)) (fp_line (start 0.8 0.4125) (end -0.8 0.4125) (layer F.Fab) (width 0.1)) (fp_line (start 0.8 -0.4125) (end 0.8 0.4125) (layer F.Fab) (width 0.1)) (fp_line (start -0.8 -0.4125) (end 0.8 -0.4125) (layer F.Fab) (width 0.1)) (fp_line (start -0.8 0.4125) (end -0.8 -0.4125) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 0 90) (layer F.Fab) (effects (font (size 0.4 0.4) (thickness 0.06))) ) (pad 2 smd roundrect (at 0.825 0 270) (size 0.8 0.95) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 1 GND)) (pad 1 smd roundrect (at -0.825 0 270) (size 0.8 0.95) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 81 /SENSOR_IN)) (model ${KISYS3DMOD}/Resistor_SMD.3dshapes/R_0603_1608Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module MountingHole:MountingHole_3.2mm_M3_ISO7380_Pad (layer F.Cu) (tedit 56D1B4CB) (tstamp 60175811) (at 124.46 52.578) (descr "Mounting Hole 3.2mm, M3, ISO7380") (tags "mounting hole 3.2mm m3 iso7380") (path /60AEF190) (attr virtual) (fp_text reference H5 (at 0 -3.85) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value MountingHole (at 0 3.85) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_circle (center 0 0) (end 2.85 0) (layer Cmts.User) (width 0.15)) (fp_circle (center 0 0) (end 3.1 0) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0.3 0) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 1 thru_hole circle (at 0 0) (size 5.7 5.7) (drill 3.2) (layers *.Cu *.Mask)) ) (module MountingHole:MountingHole_3.2mm_M3_ISO7380_Pad (layer F.Cu) (tedit 56D1B4CB) (tstamp 60167B0C) (at 220.218 52.578) (descr "Mounting Hole 3.2mm, M3, ISO7380") (tags "mounting hole 3.2mm m3 iso7380") (path /61914268) (attr virtual) (fp_text reference H4 (at 0 -3.85) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value MountingHole (at 0 3.85) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_circle (center 0 0) (end 2.85 0) (layer Cmts.User) (width 0.15)) (fp_circle (center 0 0) (end 3.1 0) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0.3 0) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 1 thru_hole circle (at 0 0) (size 5.7 5.7) (drill 3.2) (layers *.Cu *.Mask)) ) (module MountingHole:MountingHole_3.2mm_M3_ISO7380_Pad (layer F.Cu) (tedit 56D1B4CB) (tstamp 60167B04) (at 28.702 52.578) (descr "Mounting Hole 3.2mm, M3, ISO7380") (tags "mounting hole 3.2mm m3 iso7380") (path /61913E82) (attr virtual) (fp_text reference H3 (at 0 -3.85) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value MountingHole (at 0 3.85) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_circle (center 0 0) (end 2.85 0) (layer Cmts.User) (width 0.15)) (fp_circle (center 0 0) (end 3.1 0) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0.3 0) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 1 thru_hole circle (at 0 0) (size 5.7 5.7) (drill 3.2) (layers *.Cu *.Mask)) ) (module MountingHole:MountingHole_3.2mm_M3_ISO7380_Pad (layer F.Cu) (tedit 56D1B4CB) (tstamp 601AE70D) (at 220.218 28.702) (descr "Mounting Hole 3.2mm, M3, ISO7380") (tags "mounting hole 3.2mm m3 iso7380") (path /619139E1) (attr virtual) (fp_text reference H2 (at 0 -3.85) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value MountingHole (at 0 3.85) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_circle (center 0 0) (end 2.85 0) (layer Cmts.User) (width 0.15)) (fp_circle (center 0 0) (end 3.1 0) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0.3 0) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 1 thru_hole circle (at 0 0) (size 5.7 5.7) (drill 3.2) (layers *.Cu *.Mask)) ) (module MountingHole:MountingHole_3.2mm_M3_ISO7380_Pad (layer F.Cu) (tedit 56D1B4CB) (tstamp 6017AF9D) (at 28.702 28.702) (descr "Mounting Hole 3.2mm, M3, ISO7380") (tags "mounting hole 3.2mm m3 iso7380") (path /61902623) (attr virtual) (fp_text reference H1 (at 0 -3.85) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value MountingHole (at 0 3.85) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_circle (center 0 0) (end 2.85 0) (layer Cmts.User) (width 0.15)) (fp_circle (center 0 0) (end 3.1 0) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0.3 0) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 1 thru_hole circle (at 0 0) (size 5.7 5.7) (drill 3.2) (layers *.Cu *.Mask)) ) (module Connector_JST:JST_XH_B5B-XH-A_1x05_P2.50mm_Vertical (layer F.Cu) (tedit 5C28146C) (tstamp 601759DB) (at 58.42 29.21 180) (descr "JST XH series connector, B5B-XH-A (http://www.jst-mfg.com/product/pdf/eng/eXH.pdf), generated with kicad-footprint-generator") (tags "connector JST XH vertical") (path /606B9929) (fp_text reference J13 (at 5 -3.55) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value Motor (at 5 4.6) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -2.45 -2.35) (end -2.45 3.4) (layer F.Fab) (width 0.1)) (fp_line (start -2.45 3.4) (end 12.45 3.4) (layer F.Fab) (width 0.1)) (fp_line (start 12.45 3.4) (end 12.45 -2.35) (layer F.Fab) (width 0.1)) (fp_line (start 12.45 -2.35) (end -2.45 -2.35) (layer F.Fab) (width 0.1)) (fp_line (start -2.56 -2.46) (end -2.56 3.51) (layer F.SilkS) (width 0.12)) (fp_line (start -2.56 3.51) (end 12.56 3.51) (layer F.SilkS) (width 0.12)) (fp_line (start 12.56 3.51) (end 12.56 -2.46) (layer F.SilkS) (width 0.12)) (fp_line (start 12.56 -2.46) (end -2.56 -2.46) (layer F.SilkS) (width 0.12)) (fp_line (start -2.95 -2.85) (end -2.95 3.9) (layer F.CrtYd) (width 0.05)) (fp_line (start -2.95 3.9) (end 12.95 3.9) (layer F.CrtYd) (width 0.05)) (fp_line (start 12.95 3.9) (end 12.95 -2.85) (layer F.CrtYd) (width 0.05)) (fp_line (start 12.95 -2.85) (end -2.95 -2.85) (layer F.CrtYd) (width 0.05)) (fp_line (start -0.625 -2.35) (end 0 -1.35) (layer F.Fab) (width 0.1)) (fp_line (start 0 -1.35) (end 0.625 -2.35) (layer F.Fab) (width 0.1)) (fp_line (start 0.75 -2.45) (end 0.75 -1.7) (layer F.SilkS) (width 0.12)) (fp_line (start 0.75 -1.7) (end 9.25 -1.7) (layer F.SilkS) (width 0.12)) (fp_line (start 9.25 -1.7) (end 9.25 -2.45) (layer F.SilkS) (width 0.12)) (fp_line (start 9.25 -2.45) (end 0.75 -2.45) (layer F.SilkS) (width 0.12)) (fp_line (start -2.55 -2.45) (end -2.55 -1.7) (layer F.SilkS) (width 0.12)) (fp_line (start -2.55 -1.7) (end -0.75 -1.7) (layer F.SilkS) (width 0.12)) (fp_line (start -0.75 -1.7) (end -0.75 -2.45) (layer F.SilkS) (width 0.12)) (fp_line (start -0.75 -2.45) (end -2.55 -2.45) (layer F.SilkS) (width 0.12)) (fp_line (start 10.75 -2.45) (end 10.75 -1.7) (layer F.SilkS) (width 0.12)) (fp_line (start 10.75 -1.7) (end 12.55 -1.7) (layer F.SilkS) (width 0.12)) (fp_line (start 12.55 -1.7) (end 12.55 -2.45) (layer F.SilkS) (width 0.12)) (fp_line (start 12.55 -2.45) (end 10.75 -2.45) (layer F.SilkS) (width 0.12)) (fp_line (start -2.55 -0.2) (end -1.8 -0.2) (layer F.SilkS) (width 0.12)) (fp_line (start -1.8 -0.2) (end -1.8 2.75) (layer F.SilkS) (width 0.12)) (fp_line (start -1.8 2.75) (end 5 2.75) (layer F.SilkS) (width 0.12)) (fp_line (start 12.55 -0.2) (end 11.8 -0.2) (layer F.SilkS) (width 0.12)) (fp_line (start 11.8 -0.2) (end 11.8 2.75) (layer F.SilkS) (width 0.12)) (fp_line (start 11.8 2.75) (end 5 2.75) (layer F.SilkS) (width 0.12)) (fp_line (start -1.6 -2.75) (end -2.85 -2.75) (layer F.SilkS) (width 0.12)) (fp_line (start -2.85 -2.75) (end -2.85 -1.5) (layer F.SilkS) (width 0.12)) (fp_text user %R (at 5 2.7) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 5 thru_hole oval (at 10 0 180) (size 1.7 1.95) (drill 0.95) (layers *.Cu *.Mask) (net 2 +12V)) (pad 4 thru_hole oval (at 7.5 0 180) (size 1.7 1.95) (drill 0.95) (layers *.Cu *.Mask) (net 63 /OUT_F_PHASE_D)) (pad 3 thru_hole oval (at 5 0 180) (size 1.7 1.95) (drill 0.95) (layers *.Cu *.Mask) (net 64 /OUT_F_PHASE_C)) (pad 2 thru_hole oval (at 2.5 0 180) (size 1.7 1.95) (drill 0.95) (layers *.Cu *.Mask) (net 65 /OUT_F_PHASE_B)) (pad 1 thru_hole roundrect (at 0 0 180) (size 1.7 1.95) (drill 0.95) (layers *.Cu *.Mask) (roundrect_rratio 0.1470588235294118) (net 66 /OUT_F_PHASE_A)) (model ${KISYS3DMOD}/Connector_JST.3dshapes/JST_XH_B5B-XH-A_1x05_P2.50mm_Vertical.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Connector_JST:JST_XH_B5B-XH-A_1x05_P2.50mm_Vertical (layer F.Cu) (tedit 5C28146C) (tstamp 601759CC) (at 77.47 29.21 180) (descr "JST XH series connector, B5B-XH-A (http://www.jst-mfg.com/product/pdf/eng/eXH.pdf), generated with kicad-footprint-generator") (tags "connector JST XH vertical") (path /606B94FD) (fp_text reference J12 (at 5 -3.55) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value Motor (at 5 4.6) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -2.45 -2.35) (end -2.45 3.4) (layer F.Fab) (width 0.1)) (fp_line (start -2.45 3.4) (end 12.45 3.4) (layer F.Fab) (width 0.1)) (fp_line (start 12.45 3.4) (end 12.45 -2.35) (layer F.Fab) (width 0.1)) (fp_line (start 12.45 -2.35) (end -2.45 -2.35) (layer F.Fab) (width 0.1)) (fp_line (start -2.56 -2.46) (end -2.56 3.51) (layer F.SilkS) (width 0.12)) (fp_line (start -2.56 3.51) (end 12.56 3.51) (layer F.SilkS) (width 0.12)) (fp_line (start 12.56 3.51) (end 12.56 -2.46) (layer F.SilkS) (width 0.12)) (fp_line (start 12.56 -2.46) (end -2.56 -2.46) (layer F.SilkS) (width 0.12)) (fp_line (start -2.95 -2.85) (end -2.95 3.9) (layer F.CrtYd) (width 0.05)) (fp_line (start -2.95 3.9) (end 12.95 3.9) (layer F.CrtYd) (width 0.05)) (fp_line (start 12.95 3.9) (end 12.95 -2.85) (layer F.CrtYd) (width 0.05)) (fp_line (start 12.95 -2.85) (end -2.95 -2.85) (layer F.CrtYd) (width 0.05)) (fp_line (start -0.625 -2.35) (end 0 -1.35) (layer F.Fab) (width 0.1)) (fp_line (start 0 -1.35) (end 0.625 -2.35) (layer F.Fab) (width 0.1)) (fp_line (start 0.75 -2.45) (end 0.75 -1.7) (layer F.SilkS) (width 0.12)) (fp_line (start 0.75 -1.7) (end 9.25 -1.7) (layer F.SilkS) (width 0.12)) (fp_line (start 9.25 -1.7) (end 9.25 -2.45) (layer F.SilkS) (width 0.12)) (fp_line (start 9.25 -2.45) (end 0.75 -2.45) (layer F.SilkS) (width 0.12)) (fp_line (start -2.55 -2.45) (end -2.55 -1.7) (layer F.SilkS) (width 0.12)) (fp_line (start -2.55 -1.7) (end -0.75 -1.7) (layer F.SilkS) (width 0.12)) (fp_line (start -0.75 -1.7) (end -0.75 -2.45) (layer F.SilkS) (width 0.12)) (fp_line (start -0.75 -2.45) (end -2.55 -2.45) (layer F.SilkS) (width 0.12)) (fp_line (start 10.75 -2.45) (end 10.75 -1.7) (layer F.SilkS) (width 0.12)) (fp_line (start 10.75 -1.7) (end 12.55 -1.7) (layer F.SilkS) (width 0.12)) (fp_line (start 12.55 -1.7) (end 12.55 -2.45) (layer F.SilkS) (width 0.12)) (fp_line (start 12.55 -2.45) (end 10.75 -2.45) (layer F.SilkS) (width 0.12)) (fp_line (start -2.55 -0.2) (end -1.8 -0.2) (layer F.SilkS) (width 0.12)) (fp_line (start -1.8 -0.2) (end -1.8 2.75) (layer F.SilkS) (width 0.12)) (fp_line (start -1.8 2.75) (end 5 2.75) (layer F.SilkS) (width 0.12)) (fp_line (start 12.55 -0.2) (end 11.8 -0.2) (layer F.SilkS) (width 0.12)) (fp_line (start 11.8 -0.2) (end 11.8 2.75) (layer F.SilkS) (width 0.12)) (fp_line (start 11.8 2.75) (end 5 2.75) (layer F.SilkS) (width 0.12)) (fp_line (start -1.6 -2.75) (end -2.85 -2.75) (layer F.SilkS) (width 0.12)) (fp_line (start -2.85 -2.75) (end -2.85 -1.5) (layer F.SilkS) (width 0.12)) (fp_text user %R (at 5 2.7) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 5 thru_hole oval (at 10 0 180) (size 1.7 1.95) (drill 0.95) (layers *.Cu *.Mask) (net 2 +12V)) (pad 4 thru_hole oval (at 7.5 0 180) (size 1.7 1.95) (drill 0.95) (layers *.Cu *.Mask) (net 59 /OUT_E_PHASE_D)) (pad 3 thru_hole oval (at 5 0 180) (size 1.7 1.95) (drill 0.95) (layers *.Cu *.Mask) (net 60 /OUT_E_PHASE_C)) (pad 2 thru_hole oval (at 2.5 0 180) (size 1.7 1.95) (drill 0.95) (layers *.Cu *.Mask) (net 61 /OUT_E_PHASE_B)) (pad 1 thru_hole roundrect (at 0 0 180) (size 1.7 1.95) (drill 0.95) (layers *.Cu *.Mask) (roundrect_rratio 0.1470588235294118) (net 62 /OUT_E_PHASE_A)) (model ${KISYS3DMOD}/Connector_JST.3dshapes/JST_XH_B5B-XH-A_1x05_P2.50mm_Vertical.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Connector_JST:JST_XH_B5B-XH-A_1x05_P2.50mm_Vertical (layer F.Cu) (tedit 5C28146C) (tstamp 6017A39C) (at 96.52 29.21 180) (descr "JST XH series connector, B5B-XH-A (http://www.jst-mfg.com/product/pdf/eng/eXH.pdf), generated with kicad-footprint-generator") (tags "connector JST XH vertical") (path /63DADAFC) (fp_text reference J7 (at 5 -3.55) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value Motor (at 5 4.6) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -2.45 -2.35) (end -2.45 3.4) (layer F.Fab) (width 0.1)) (fp_line (start -2.45 3.4) (end 12.45 3.4) (layer F.Fab) (width 0.1)) (fp_line (start 12.45 3.4) (end 12.45 -2.35) (layer F.Fab) (width 0.1)) (fp_line (start 12.45 -2.35) (end -2.45 -2.35) (layer F.Fab) (width 0.1)) (fp_line (start -2.56 -2.46) (end -2.56 3.51) (layer F.SilkS) (width 0.12)) (fp_line (start -2.56 3.51) (end 12.56 3.51) (layer F.SilkS) (width 0.12)) (fp_line (start 12.56 3.51) (end 12.56 -2.46) (layer F.SilkS) (width 0.12)) (fp_line (start 12.56 -2.46) (end -2.56 -2.46) (layer F.SilkS) (width 0.12)) (fp_line (start -2.95 -2.85) (end -2.95 3.9) (layer F.CrtYd) (width 0.05)) (fp_line (start -2.95 3.9) (end 12.95 3.9) (layer F.CrtYd) (width 0.05)) (fp_line (start 12.95 3.9) (end 12.95 -2.85) (layer F.CrtYd) (width 0.05)) (fp_line (start 12.95 -2.85) (end -2.95 -2.85) (layer F.CrtYd) (width 0.05)) (fp_line (start -0.625 -2.35) (end 0 -1.35) (layer F.Fab) (width 0.1)) (fp_line (start 0 -1.35) (end 0.625 -2.35) (layer F.Fab) (width 0.1)) (fp_line (start 0.75 -2.45) (end 0.75 -1.7) (layer F.SilkS) (width 0.12)) (fp_line (start 0.75 -1.7) (end 9.25 -1.7) (layer F.SilkS) (width 0.12)) (fp_line (start 9.25 -1.7) (end 9.25 -2.45) (layer F.SilkS) (width 0.12)) (fp_line (start 9.25 -2.45) (end 0.75 -2.45) (layer F.SilkS) (width 0.12)) (fp_line (start -2.55 -2.45) (end -2.55 -1.7) (layer F.SilkS) (width 0.12)) (fp_line (start -2.55 -1.7) (end -0.75 -1.7) (layer F.SilkS) (width 0.12)) (fp_line (start -0.75 -1.7) (end -0.75 -2.45) (layer F.SilkS) (width 0.12)) (fp_line (start -0.75 -2.45) (end -2.55 -2.45) (layer F.SilkS) (width 0.12)) (fp_line (start 10.75 -2.45) (end 10.75 -1.7) (layer F.SilkS) (width 0.12)) (fp_line (start 10.75 -1.7) (end 12.55 -1.7) (layer F.SilkS) (width 0.12)) (fp_line (start 12.55 -1.7) (end 12.55 -2.45) (layer F.SilkS) (width 0.12)) (fp_line (start 12.55 -2.45) (end 10.75 -2.45) (layer F.SilkS) (width 0.12)) (fp_line (start -2.55 -0.2) (end -1.8 -0.2) (layer F.SilkS) (width 0.12)) (fp_line (start -1.8 -0.2) (end -1.8 2.75) (layer F.SilkS) (width 0.12)) (fp_line (start -1.8 2.75) (end 5 2.75) (layer F.SilkS) (width 0.12)) (fp_line (start 12.55 -0.2) (end 11.8 -0.2) (layer F.SilkS) (width 0.12)) (fp_line (start 11.8 -0.2) (end 11.8 2.75) (layer F.SilkS) (width 0.12)) (fp_line (start 11.8 2.75) (end 5 2.75) (layer F.SilkS) (width 0.12)) (fp_line (start -1.6 -2.75) (end -2.85 -2.75) (layer F.SilkS) (width 0.12)) (fp_line (start -2.85 -2.75) (end -2.85 -1.5) (layer F.SilkS) (width 0.12)) (fp_text user %R (at 5 2.7) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 5 thru_hole oval (at 10 0 180) (size 1.7 1.95) (drill 0.95) (layers *.Cu *.Mask) (net 2 +12V)) (pad 4 thru_hole oval (at 7.5 0 180) (size 1.7 1.95) (drill 0.95) (layers *.Cu *.Mask) (net 20 /OUT_D_PHASE_D)) (pad 3 thru_hole oval (at 5 0 180) (size 1.7 1.95) (drill 0.95) (layers *.Cu *.Mask) (net 21 /OUT_D_PHASE_C)) (pad 2 thru_hole oval (at 2.5 0 180) (size 1.7 1.95) (drill 0.95) (layers *.Cu *.Mask) (net 22 /OUT_D_PHASE_B)) (pad 1 thru_hole roundrect (at 0 0 180) (size 1.7 1.95) (drill 0.95) (layers *.Cu *.Mask) (roundrect_rratio 0.1470588235294118) (net 23 /OUT_D_PHASE_A)) (model ${KISYS3DMOD}/Connector_JST.3dshapes/JST_XH_B5B-XH-A_1x05_P2.50mm_Vertical.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Connector_JST:JST_XH_B5B-XH-A_1x05_P2.50mm_Vertical (layer F.Cu) (tedit 5C28146C) (tstamp 6017A0A3) (at 162.56 29.21 180) (descr "JST XH series connector, B5B-XH-A (http://www.jst-mfg.com/product/pdf/eng/eXH.pdf), generated with kicad-footprint-generator") (tags "connector JST XH vertical") (path /63DADADE) (fp_text reference J6 (at 5 -3.55) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value Motor (at 5 4.6) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -2.45 -2.35) (end -2.45 3.4) (layer F.Fab) (width 0.1)) (fp_line (start -2.45 3.4) (end 12.45 3.4) (layer F.Fab) (width 0.1)) (fp_line (start 12.45 3.4) (end 12.45 -2.35) (layer F.Fab) (width 0.1)) (fp_line (start 12.45 -2.35) (end -2.45 -2.35) (layer F.Fab) (width 0.1)) (fp_line (start -2.56 -2.46) (end -2.56 3.51) (layer F.SilkS) (width 0.12)) (fp_line (start -2.56 3.51) (end 12.56 3.51) (layer F.SilkS) (width 0.12)) (fp_line (start 12.56 3.51) (end 12.56 -2.46) (layer F.SilkS) (width 0.12)) (fp_line (start 12.56 -2.46) (end -2.56 -2.46) (layer F.SilkS) (width 0.12)) (fp_line (start -2.95 -2.85) (end -2.95 3.9) (layer F.CrtYd) (width 0.05)) (fp_line (start -2.95 3.9) (end 12.95 3.9) (layer F.CrtYd) (width 0.05)) (fp_line (start 12.95 3.9) (end 12.95 -2.85) (layer F.CrtYd) (width 0.05)) (fp_line (start 12.95 -2.85) (end -2.95 -2.85) (layer F.CrtYd) (width 0.05)) (fp_line (start -0.625 -2.35) (end 0 -1.35) (layer F.Fab) (width 0.1)) (fp_line (start 0 -1.35) (end 0.625 -2.35) (layer F.Fab) (width 0.1)) (fp_line (start 0.75 -2.45) (end 0.75 -1.7) (layer F.SilkS) (width 0.12)) (fp_line (start 0.75 -1.7) (end 9.25 -1.7) (layer F.SilkS) (width 0.12)) (fp_line (start 9.25 -1.7) (end 9.25 -2.45) (layer F.SilkS) (width 0.12)) (fp_line (start 9.25 -2.45) (end 0.75 -2.45) (layer F.SilkS) (width 0.12)) (fp_line (start -2.55 -2.45) (end -2.55 -1.7) (layer F.SilkS) (width 0.12)) (fp_line (start -2.55 -1.7) (end -0.75 -1.7) (layer F.SilkS) (width 0.12)) (fp_line (start -0.75 -1.7) (end -0.75 -2.45) (layer F.SilkS) (width 0.12)) (fp_line (start -0.75 -2.45) (end -2.55 -2.45) (layer F.SilkS) (width 0.12)) (fp_line (start 10.75 -2.45) (end 10.75 -1.7) (layer F.SilkS) (width 0.12)) (fp_line (start 10.75 -1.7) (end 12.55 -1.7) (layer F.SilkS) (width 0.12)) (fp_line (start 12.55 -1.7) (end 12.55 -2.45) (layer F.SilkS) (width 0.12)) (fp_line (start 12.55 -2.45) (end 10.75 -2.45) (layer F.SilkS) (width 0.12)) (fp_line (start -2.55 -0.2) (end -1.8 -0.2) (layer F.SilkS) (width 0.12)) (fp_line (start -1.8 -0.2) (end -1.8 2.75) (layer F.SilkS) (width 0.12)) (fp_line (start -1.8 2.75) (end 5 2.75) (layer F.SilkS) (width 0.12)) (fp_line (start 12.55 -0.2) (end 11.8 -0.2) (layer F.SilkS) (width 0.12)) (fp_line (start 11.8 -0.2) (end 11.8 2.75) (layer F.SilkS) (width 0.12)) (fp_line (start 11.8 2.75) (end 5 2.75) (layer F.SilkS) (width 0.12)) (fp_line (start -1.6 -2.75) (end -2.85 -2.75) (layer F.SilkS) (width 0.12)) (fp_line (start -2.85 -2.75) (end -2.85 -1.5) (layer F.SilkS) (width 0.12)) (fp_text user %R (at 5 2.7) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 5 thru_hole oval (at 10 0 180) (size 1.7 1.95) (drill 0.95) (layers *.Cu *.Mask) (net 2 +12V)) (pad 4 thru_hole oval (at 7.5 0 180) (size 1.7 1.95) (drill 0.95) (layers *.Cu *.Mask) (net 16 /OUT_C_PHASE_D)) (pad 3 thru_hole oval (at 5 0 180) (size 1.7 1.95) (drill 0.95) (layers *.Cu *.Mask) (net 17 /OUT_C_PHASE_C)) (pad 2 thru_hole oval (at 2.5 0 180) (size 1.7 1.95) (drill 0.95) (layers *.Cu *.Mask) (net 18 /OUT_C_PHASE_B)) (pad 1 thru_hole roundrect (at 0 0 180) (size 1.7 1.95) (drill 0.95) (layers *.Cu *.Mask) (roundrect_rratio 0.1470588235294118) (net 19 /OUT_C_PHASE_A)) (model ${KISYS3DMOD}/Connector_JST.3dshapes/JST_XH_B5B-XH-A_1x05_P2.50mm_Vertical.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Connector_JST:JST_XH_B5B-XH-A_1x05_P2.50mm_Vertical (layer F.Cu) (tedit 5C28146C) (tstamp 6017A31B) (at 181.61 29.21 180) (descr "JST XH series connector, B5B-XH-A (http://www.jst-mfg.com/product/pdf/eng/eXH.pdf), generated with kicad-footprint-generator") (tags "connector JST XH vertical") (path /63D07061) (fp_text reference J5 (at 5 -3.55) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value Motor (at 5 4.6) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -2.45 -2.35) (end -2.45 3.4) (layer F.Fab) (width 0.1)) (fp_line (start -2.45 3.4) (end 12.45 3.4) (layer F.Fab) (width 0.1)) (fp_line (start 12.45 3.4) (end 12.45 -2.35) (layer F.Fab) (width 0.1)) (fp_line (start 12.45 -2.35) (end -2.45 -2.35) (layer F.Fab) (width 0.1)) (fp_line (start -2.56 -2.46) (end -2.56 3.51) (layer F.SilkS) (width 0.12)) (fp_line (start -2.56 3.51) (end 12.56 3.51) (layer F.SilkS) (width 0.12)) (fp_line (start 12.56 3.51) (end 12.56 -2.46) (layer F.SilkS) (width 0.12)) (fp_line (start 12.56 -2.46) (end -2.56 -2.46) (layer F.SilkS) (width 0.12)) (fp_line (start -2.95 -2.85) (end -2.95 3.9) (layer F.CrtYd) (width 0.05)) (fp_line (start -2.95 3.9) (end 12.95 3.9) (layer F.CrtYd) (width 0.05)) (fp_line (start 12.95 3.9) (end 12.95 -2.85) (layer F.CrtYd) (width 0.05)) (fp_line (start 12.95 -2.85) (end -2.95 -2.85) (layer F.CrtYd) (width 0.05)) (fp_line (start -0.625 -2.35) (end 0 -1.35) (layer F.Fab) (width 0.1)) (fp_line (start 0 -1.35) (end 0.625 -2.35) (layer F.Fab) (width 0.1)) (fp_line (start 0.75 -2.45) (end 0.75 -1.7) (layer F.SilkS) (width 0.12)) (fp_line (start 0.75 -1.7) (end 9.25 -1.7) (layer F.SilkS) (width 0.12)) (fp_line (start 9.25 -1.7) (end 9.25 -2.45) (layer F.SilkS) (width 0.12)) (fp_line (start 9.25 -2.45) (end 0.75 -2.45) (layer F.SilkS) (width 0.12)) (fp_line (start -2.55 -2.45) (end -2.55 -1.7) (layer F.SilkS) (width 0.12)) (fp_line (start -2.55 -1.7) (end -0.75 -1.7) (layer F.SilkS) (width 0.12)) (fp_line (start -0.75 -1.7) (end -0.75 -2.45) (layer F.SilkS) (width 0.12)) (fp_line (start -0.75 -2.45) (end -2.55 -2.45) (layer F.SilkS) (width 0.12)) (fp_line (start 10.75 -2.45) (end 10.75 -1.7) (layer F.SilkS) (width 0.12)) (fp_line (start 10.75 -1.7) (end 12.55 -1.7) (layer F.SilkS) (width 0.12)) (fp_line (start 12.55 -1.7) (end 12.55 -2.45) (layer F.SilkS) (width 0.12)) (fp_line (start 12.55 -2.45) (end 10.75 -2.45) (layer F.SilkS) (width 0.12)) (fp_line (start -2.55 -0.2) (end -1.8 -0.2) (layer F.SilkS) (width 0.12)) (fp_line (start -1.8 -0.2) (end -1.8 2.75) (layer F.SilkS) (width 0.12)) (fp_line (start -1.8 2.75) (end 5 2.75) (layer F.SilkS) (width 0.12)) (fp_line (start 12.55 -0.2) (end 11.8 -0.2) (layer F.SilkS) (width 0.12)) (fp_line (start 11.8 -0.2) (end 11.8 2.75) (layer F.SilkS) (width 0.12)) (fp_line (start 11.8 2.75) (end 5 2.75) (layer F.SilkS) (width 0.12)) (fp_line (start -1.6 -2.75) (end -2.85 -2.75) (layer F.SilkS) (width 0.12)) (fp_line (start -2.85 -2.75) (end -2.85 -1.5) (layer F.SilkS) (width 0.12)) (fp_text user %R (at 5 2.7) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 5 thru_hole oval (at 10 0 180) (size 1.7 1.95) (drill 0.95) (layers *.Cu *.Mask) (net 2 +12V)) (pad 4 thru_hole oval (at 7.5 0 180) (size 1.7 1.95) (drill 0.95) (layers *.Cu *.Mask) (net 12 /OUT_B_PHASE_D)) (pad 3 thru_hole oval (at 5 0 180) (size 1.7 1.95) (drill 0.95) (layers *.Cu *.Mask) (net 13 /OUT_B_PHASE_C)) (pad 2 thru_hole oval (at 2.5 0 180) (size 1.7 1.95) (drill 0.95) (layers *.Cu *.Mask) (net 14 /OUT_B_PHASE_B)) (pad 1 thru_hole roundrect (at 0 0 180) (size 1.7 1.95) (drill 0.95) (layers *.Cu *.Mask) (roundrect_rratio 0.1470588235294118) (net 15 /OUT_B_PHASE_A)) (model ${KISYS3DMOD}/Connector_JST.3dshapes/JST_XH_B5B-XH-A_1x05_P2.50mm_Vertical.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Connector_JST:JST_XH_B5B-XH-A_1x05_P2.50mm_Vertical (layer F.Cu) (tedit 5C28146C) (tstamp 60167B4C) (at 200.66 29.21 180) (descr "JST XH series connector, B5B-XH-A (http://www.jst-mfg.com/product/pdf/eng/eXH.pdf), generated with kicad-footprint-generator") (tags "connector JST XH vertical") (path /6072FE6C) (fp_text reference J3 (at 5 -3.55) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value Motor (at 5 4.6) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -2.45 -2.35) (end -2.45 3.4) (layer F.Fab) (width 0.1)) (fp_line (start -2.45 3.4) (end 12.45 3.4) (layer F.Fab) (width 0.1)) (fp_line (start 12.45 3.4) (end 12.45 -2.35) (layer F.Fab) (width 0.1)) (fp_line (start 12.45 -2.35) (end -2.45 -2.35) (layer F.Fab) (width 0.1)) (fp_line (start -2.56 -2.46) (end -2.56 3.51) (layer F.SilkS) (width 0.12)) (fp_line (start -2.56 3.51) (end 12.56 3.51) (layer F.SilkS) (width 0.12)) (fp_line (start 12.56 3.51) (end 12.56 -2.46) (layer F.SilkS) (width 0.12)) (fp_line (start 12.56 -2.46) (end -2.56 -2.46) (layer F.SilkS) (width 0.12)) (fp_line (start -2.95 -2.85) (end -2.95 3.9) (layer F.CrtYd) (width 0.05)) (fp_line (start -2.95 3.9) (end 12.95 3.9) (layer F.CrtYd) (width 0.05)) (fp_line (start 12.95 3.9) (end 12.95 -2.85) (layer F.CrtYd) (width 0.05)) (fp_line (start 12.95 -2.85) (end -2.95 -2.85) (layer F.CrtYd) (width 0.05)) (fp_line (start -0.625 -2.35) (end 0 -1.35) (layer F.Fab) (width 0.1)) (fp_line (start 0 -1.35) (end 0.625 -2.35) (layer F.Fab) (width 0.1)) (fp_line (start 0.75 -2.45) (end 0.75 -1.7) (layer F.SilkS) (width 0.12)) (fp_line (start 0.75 -1.7) (end 9.25 -1.7) (layer F.SilkS) (width 0.12)) (fp_line (start 9.25 -1.7) (end 9.25 -2.45) (layer F.SilkS) (width 0.12)) (fp_line (start 9.25 -2.45) (end 0.75 -2.45) (layer F.SilkS) (width 0.12)) (fp_line (start -2.55 -2.45) (end -2.55 -1.7) (layer F.SilkS) (width 0.12)) (fp_line (start -2.55 -1.7) (end -0.75 -1.7) (layer F.SilkS) (width 0.12)) (fp_line (start -0.75 -1.7) (end -0.75 -2.45) (layer F.SilkS) (width 0.12)) (fp_line (start -0.75 -2.45) (end -2.55 -2.45) (layer F.SilkS) (width 0.12)) (fp_line (start 10.75 -2.45) (end 10.75 -1.7) (layer F.SilkS) (width 0.12)) (fp_line (start 10.75 -1.7) (end 12.55 -1.7) (layer F.SilkS) (width 0.12)) (fp_line (start 12.55 -1.7) (end 12.55 -2.45) (layer F.SilkS) (width 0.12)) (fp_line (start 12.55 -2.45) (end 10.75 -2.45) (layer F.SilkS) (width 0.12)) (fp_line (start -2.55 -0.2) (end -1.8 -0.2) (layer F.SilkS) (width 0.12)) (fp_line (start -1.8 -0.2) (end -1.8 2.75) (layer F.SilkS) (width 0.12)) (fp_line (start -1.8 2.75) (end 5 2.75) (layer F.SilkS) (width 0.12)) (fp_line (start 12.55 -0.2) (end 11.8 -0.2) (layer F.SilkS) (width 0.12)) (fp_line (start 11.8 -0.2) (end 11.8 2.75) (layer F.SilkS) (width 0.12)) (fp_line (start 11.8 2.75) (end 5 2.75) (layer F.SilkS) (width 0.12)) (fp_line (start -1.6 -2.75) (end -2.85 -2.75) (layer F.SilkS) (width 0.12)) (fp_line (start -2.85 -2.75) (end -2.85 -1.5) (layer F.SilkS) (width 0.12)) (fp_text user %R (at 5 2.7) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 5 thru_hole oval (at 10 0 180) (size 1.7 1.95) (drill 0.95) (layers *.Cu *.Mask) (net 2 +12V)) (pad 4 thru_hole oval (at 7.5 0 180) (size 1.7 1.95) (drill 0.95) (layers *.Cu *.Mask) (net 8 /OUT_A_PHASE_D)) (pad 3 thru_hole oval (at 5 0 180) (size 1.7 1.95) (drill 0.95) (layers *.Cu *.Mask) (net 9 /OUT_A_PHASE_C)) (pad 2 thru_hole oval (at 2.5 0 180) (size 1.7 1.95) (drill 0.95) (layers *.Cu *.Mask) (net 10 /OUT_A_PHASE_B)) (pad 1 thru_hole roundrect (at 0 0 180) (size 1.7 1.95) (drill 0.95) (layers *.Cu *.Mask) (roundrect_rratio 0.1470588235294118) (net 11 /OUT_A_PHASE_A)) (model ${KISYS3DMOD}/Connector_JST.3dshapes/JST_XH_B5B-XH-A_1x05_P2.50mm_Vertical.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module ModifiedSymbols:SOIC-16_3.9x9.9mm_P1.27mm_silk (layer F.Cu) (tedit 6018D7C5) (tstamp 60175D91) (at 99.695 36.83 270) (descr "SOIC, 16 Pin (JEDEC MS-012AC, https://www.analog.com/media/en/package-pcb-resources/package/pkg_pdf/soic_narrow-r/r_16.pdf), generated with kicad-footprint-generator ipc_gullwing_generator.py") (tags "SOIC SO") (path /6084DA1F) (attr smd) (fp_text reference U9 (at 4.445 -4.445 180) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value 74HC595 (at 0 5.9 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_circle (center -1.016 -4.572) (end -1.016 -4.318) (layer F.SilkS) (width 0.15)) (fp_line (start -0.975 -4.95) (end 1.95 -4.95) (layer F.Fab) (width 0.1)) (fp_line (start 1.95 -4.95) (end 1.95 4.95) (layer F.Fab) (width 0.1)) (fp_line (start 1.95 4.95) (end -1.95 4.95) (layer F.Fab) (width 0.1)) (fp_line (start -1.95 4.95) (end -1.95 -3.975) (layer F.Fab) (width 0.1)) (fp_line (start -1.95 -3.975) (end -0.975 -4.95) (layer F.Fab) (width 0.1)) (fp_line (start -3.7 -5.2) (end -3.7 5.2) (layer F.CrtYd) (width 0.05)) (fp_line (start -3.7 5.2) (end 3.7 5.2) (layer F.CrtYd) (width 0.05)) (fp_line (start 3.7 5.2) (end 3.7 -5.2) (layer F.CrtYd) (width 0.05)) (fp_line (start 3.7 -5.2) (end -3.7 -5.2) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 0 90) (layer F.Fab) (effects (font (size 0.98 0.98) (thickness 0.15))) ) (pad 16 smd roundrect (at 2.475 -4.445 270) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 40 +3V3)) (pad 15 smd roundrect (at 2.475 -3.175 270) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 49 /LED_D)) (pad 14 smd roundrect (at 2.475 -1.905 270) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 53 "Net-(U5-Pad9)")) (pad 13 smd roundrect (at 2.475 -0.635 270) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 1 GND)) (pad 12 smd roundrect (at 2.475 0.635 270) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 82 /LATCH_IN)) (pad 11 smd roundrect (at 2.475 1.905 270) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 7 /CLOCK_IN)) (pad 10 smd roundrect (at 2.475 3.175 270) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 40 +3V3)) (pad 9 smd roundrect (at 2.475 4.445 270) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 71 "Net-(U7-Pad14)")) (pad 8 smd roundrect (at -2.475 4.445 270) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 1 GND)) (pad 7 smd roundrect (at -2.475 3.175 270) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 24 /MOTOR_D_PHASE_D)) (pad 6 smd roundrect (at -2.475 1.905 270) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 25 /MOTOR_D_PHASE_C)) (pad 5 smd roundrect (at -2.475 0.635 270) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 26 /MOTOR_D_PHASE_B)) (pad 4 smd roundrect (at -2.475 -0.635 270) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 27 /MOTOR_D_PHASE_A)) (pad 3 smd roundrect (at -2.475 -1.905 270) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 51 /LOOPBACK_B)) (pad 2 smd roundrect (at -2.475 -3.175 270) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 70 /LED_F)) (pad 1 smd roundrect (at -2.475 -4.445 270) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 69 /LED_E)) (model ${KISYS3DMOD}/Package_SO.3dshapes/SOIC-16_3.9x9.9mm_P1.27mm.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module ModifiedSymbols:SOIC-16_3.9x9.9mm_P1.27mm_silk (layer F.Cu) (tedit 6018D7C5) (tstamp 60167D9F) (at 86.995 36.83 90) (descr "SOIC, 16 Pin (JEDEC MS-012AC, https://www.analog.com/media/en/package-pcb-resources/package/pkg_pdf/soic_narrow-r/r_16.pdf), generated with kicad-footprint-generator ipc_gullwing_generator.py") (tags "SOIC SO") (path /6427B23E) (attr smd) (fp_text reference U8 (at -4.445 -3.81 180) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value TPL7407L (at 0 5.9 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_circle (center -1.016 -4.572) (end -1.016 -4.318) (layer F.SilkS) (width 0.15)) (fp_line (start -0.975 -4.95) (end 1.95 -4.95) (layer F.Fab) (width 0.1)) (fp_line (start 1.95 -4.95) (end 1.95 4.95) (layer F.Fab) (width 0.1)) (fp_line (start 1.95 4.95) (end -1.95 4.95) (layer F.Fab) (width 0.1)) (fp_line (start -1.95 4.95) (end -1.95 -3.975) (layer F.Fab) (width 0.1)) (fp_line (start -1.95 -3.975) (end -0.975 -4.95) (layer F.Fab) (width 0.1)) (fp_line (start -3.7 -5.2) (end -3.7 5.2) (layer F.CrtYd) (width 0.05)) (fp_line (start -3.7 5.2) (end 3.7 5.2) (layer F.CrtYd) (width 0.05)) (fp_line (start 3.7 5.2) (end 3.7 -5.2) (layer F.CrtYd) (width 0.05)) (fp_line (start 3.7 -5.2) (end -3.7 -5.2) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 0 90) (layer F.Fab) (effects (font (size 0.98 0.98) (thickness 0.15))) ) (pad 16 smd roundrect (at 2.475 -4.445 90) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 61 /OUT_E_PHASE_B)) (pad 15 smd roundrect (at 2.475 -3.175 90) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 62 /OUT_E_PHASE_A)) (pad 14 smd roundrect (at 2.475 -1.905 90) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 20 /OUT_D_PHASE_D)) (pad 13 smd roundrect (at 2.475 -0.635 90) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 21 /OUT_D_PHASE_C)) (pad 12 smd roundrect (at 2.475 0.635 90) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 22 /OUT_D_PHASE_B)) (pad 11 smd roundrect (at 2.475 1.905 90) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 23 /OUT_D_PHASE_A)) (pad 10 smd roundrect (at 2.475 3.175 90) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)) (pad 9 smd roundrect (at 2.475 4.445 90) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 2 +12V)) (pad 8 smd roundrect (at -2.475 4.445 90) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 1 GND)) (pad 7 smd roundrect (at -2.475 3.175 90) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 1 GND)) (pad 6 smd roundrect (at -2.475 1.905 90) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 27 /MOTOR_D_PHASE_A)) (pad 5 smd roundrect (at -2.475 0.635 90) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 26 /MOTOR_D_PHASE_B)) (pad 4 smd roundrect (at -2.475 -0.635 90) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 25 /MOTOR_D_PHASE_C)) (pad 3 smd roundrect (at -2.475 -1.905 90) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 24 /MOTOR_D_PHASE_D)) (pad 2 smd roundrect (at -2.475 -3.175 90) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 72 /MOTOR_E_PHASE_A)) (pad 1 smd roundrect (at -2.475 -4.445 90) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 73 /MOTOR_E_PHASE_B)) (model ${KISYS3DMOD}/Package_SO.3dshapes/SOIC-16_3.9x9.9mm_P1.27mm.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module ModifiedSymbols:SOIC-16_3.9x9.9mm_P1.27mm_silk (layer F.Cu) (tedit 6018D7C5) (tstamp 6016A013) (at 74.295 36.83 270) (descr "SOIC, 16 Pin (JEDEC MS-012AC, https://www.analog.com/media/en/package-pcb-resources/package/pkg_pdf/soic_narrow-r/r_16.pdf), generated with kicad-footprint-generator ipc_gullwing_generator.py") (tags "SOIC SO") (path /5F5739D9) (attr smd) (fp_text reference U7 (at 4.445 -3.81 180) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value 74HC595 (at 0 5.9 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_circle (center -1.016 -4.572) (end -1.016 -4.318) (layer F.SilkS) (width 0.15)) (fp_line (start -0.975 -4.95) (end 1.95 -4.95) (layer F.Fab) (width 0.1)) (fp_line (start 1.95 -4.95) (end 1.95 4.95) (layer F.Fab) (width 0.1)) (fp_line (start 1.95 4.95) (end -1.95 4.95) (layer F.Fab) (width 0.1)) (fp_line (start -1.95 4.95) (end -1.95 -3.975) (layer F.Fab) (width 0.1)) (fp_line (start -1.95 -3.975) (end -0.975 -4.95) (layer F.Fab) (width 0.1)) (fp_line (start -3.7 -5.2) (end -3.7 5.2) (layer F.CrtYd) (width 0.05)) (fp_line (start -3.7 5.2) (end 3.7 5.2) (layer F.CrtYd) (width 0.05)) (fp_line (start 3.7 5.2) (end 3.7 -5.2) (layer F.CrtYd) (width 0.05)) (fp_line (start 3.7 -5.2) (end -3.7 -5.2) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 0 90) (layer F.Fab) (effects (font (size 0.98 0.98) (thickness 0.15))) ) (pad 16 smd roundrect (at 2.475 -4.445 270) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 40 +3V3)) (pad 15 smd roundrect (at 2.475 -3.175 270) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 72 /MOTOR_E_PHASE_A)) (pad 14 smd roundrect (at 2.475 -1.905 270) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 71 "Net-(U7-Pad14)")) (pad 13 smd roundrect (at 2.475 -0.635 270) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 1 GND)) (pad 12 smd roundrect (at 2.475 0.635 270) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 82 /LATCH_IN)) (pad 11 smd roundrect (at 2.475 1.905 270) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 7 /CLOCK_IN)) (pad 10 smd roundrect (at 2.475 3.175 270) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 40 +3V3)) (pad 9 smd roundrect (at 2.475 4.445 270) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 56 /MOTOR_OUT_PRE_BUFFER)) (pad 8 smd roundrect (at -2.475 4.445 270) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 1 GND)) (pad 7 smd roundrect (at -2.475 3.175 270) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 74 /MOTOR_F_PHASE_D)) (pad 6 smd roundrect (at -2.475 1.905 270) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 75 /MOTOR_F_PHASE_C)) (pad 5 smd roundrect (at -2.475 0.635 270) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 76 /MOTOR_F_PHASE_B)) (pad 4 smd roundrect (at -2.475 -0.635 270) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 77 /MOTOR_F_PHASE_A)) (pad 3 smd roundrect (at -2.475 -1.905 270) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 78 /MOTOR_E_PHASE_D)) (pad 2 smd roundrect (at -2.475 -3.175 270) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 79 /MOTOR_E_PHASE_C)) (pad 1 smd roundrect (at -2.475 -4.445 270) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 73 /MOTOR_E_PHASE_B)) (model ${KISYS3DMOD}/Package_SO.3dshapes/SOIC-16_3.9x9.9mm_P1.27mm.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module ModifiedSymbols:SOIC-16_3.9x9.9mm_P1.27mm_silk (layer F.Cu) (tedit 6018D7C5) (tstamp 601916D5) (at 168.91 36.83 90) (descr "SOIC, 16 Pin (JEDEC MS-012AC, https://www.analog.com/media/en/package-pcb-resources/package/pkg_pdf/soic_narrow-r/r_16.pdf), generated with kicad-footprint-generator ipc_gullwing_generator.py") (tags "SOIC SO") (path /6419F7E4) (attr smd) (fp_text reference U6 (at -4.445 -3.81 180) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value TPL7407L (at 0 5.9 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_circle (center -1.016 -4.572) (end -1.016 -4.318) (layer F.SilkS) (width 0.15)) (fp_line (start -0.975 -4.95) (end 1.95 -4.95) (layer F.Fab) (width 0.1)) (fp_line (start 1.95 -4.95) (end 1.95 4.95) (layer F.Fab) (width 0.1)) (fp_line (start 1.95 4.95) (end -1.95 4.95) (layer F.Fab) (width 0.1)) (fp_line (start -1.95 4.95) (end -1.95 -3.975) (layer F.Fab) (width 0.1)) (fp_line (start -1.95 -3.975) (end -0.975 -4.95) (layer F.Fab) (width 0.1)) (fp_line (start -3.7 -5.2) (end -3.7 5.2) (layer F.CrtYd) (width 0.05)) (fp_line (start -3.7 5.2) (end 3.7 5.2) (layer F.CrtYd) (width 0.05)) (fp_line (start 3.7 5.2) (end 3.7 -5.2) (layer F.CrtYd) (width 0.05)) (fp_line (start 3.7 -5.2) (end -3.7 -5.2) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 0 90) (layer F.Fab) (effects (font (size 0.98 0.98) (thickness 0.15))) ) (pad 16 smd roundrect (at 2.475 -4.445 90) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 16 /OUT_C_PHASE_D)) (pad 15 smd roundrect (at 2.475 -3.175 90) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 17 /OUT_C_PHASE_C)) (pad 14 smd roundrect (at 2.475 -1.905 90) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 18 /OUT_C_PHASE_B)) (pad 13 smd roundrect (at 2.475 -0.635 90) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 19 /OUT_C_PHASE_A)) (pad 12 smd roundrect (at 2.475 0.635 90) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 12 /OUT_B_PHASE_D)) (pad 11 smd roundrect (at 2.475 1.905 90) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 13 /OUT_B_PHASE_C)) (pad 10 smd roundrect (at 2.475 3.175 90) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)) (pad 9 smd roundrect (at 2.475 4.445 90) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 2 +12V)) (pad 8 smd roundrect (at -2.475 4.445 90) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 1 GND)) (pad 7 smd roundrect (at -2.475 3.175 90) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 1 GND)) (pad 6 smd roundrect (at -2.475 1.905 90) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 33 /MOTOR_B_PHASE_C)) (pad 5 smd roundrect (at -2.475 0.635 90) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 32 /MOTOR_B_PHASE_D)) (pad 4 smd roundrect (at -2.475 -0.635 90) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 31 /MOTOR_C_PHASE_A)) (pad 3 smd roundrect (at -2.475 -1.905 90) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 30 /MOTOR_C_PHASE_B)) (pad 2 smd roundrect (at -2.475 -3.175 90) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 29 /MOTOR_C_PHASE_C)) (pad 1 smd roundrect (at -2.475 -4.445 90) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 28 /MOTOR_C_PHASE_D)) (model ${KISYS3DMOD}/Package_SO.3dshapes/SOIC-16_3.9x9.9mm_P1.27mm.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module ModifiedSymbols:SOIC-16_3.9x9.9mm_P1.27mm_silk (layer F.Cu) (tedit 6018D7C5) (tstamp 60167D39) (at 156.21 36.83 270) (descr "SOIC, 16 Pin (JEDEC MS-012AC, https://www.analog.com/media/en/package-pcb-resources/package/pkg_pdf/soic_narrow-r/r_16.pdf), generated with kicad-footprint-generator ipc_gullwing_generator.py") (tags "SOIC SO") (path /5F4A62A3) (attr smd) (fp_text reference U5 (at 4.445 -3.81 180) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value 74HC595 (at 0 5.9 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_circle (center -1.016 -4.572) (end -1.016 -4.318) (layer F.SilkS) (width 0.15)) (fp_line (start -0.975 -4.95) (end 1.95 -4.95) (layer F.Fab) (width 0.1)) (fp_line (start 1.95 -4.95) (end 1.95 4.95) (layer F.Fab) (width 0.1)) (fp_line (start 1.95 4.95) (end -1.95 4.95) (layer F.Fab) (width 0.1)) (fp_line (start -1.95 4.95) (end -1.95 -3.975) (layer F.Fab) (width 0.1)) (fp_line (start -1.95 -3.975) (end -0.975 -4.95) (layer F.Fab) (width 0.1)) (fp_line (start -3.7 -5.2) (end -3.7 5.2) (layer F.CrtYd) (width 0.05)) (fp_line (start -3.7 5.2) (end 3.7 5.2) (layer F.CrtYd) (width 0.05)) (fp_line (start 3.7 5.2) (end 3.7 -5.2) (layer F.CrtYd) (width 0.05)) (fp_line (start 3.7 -5.2) (end -3.7 -5.2) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 0 90) (layer F.Fab) (effects (font (size 0.98 0.98) (thickness 0.15))) ) (pad 16 smd roundrect (at 2.475 -4.445 270) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 40 +3V3)) (pad 15 smd roundrect (at 2.475 -3.175 270) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 31 /MOTOR_C_PHASE_A)) (pad 14 smd roundrect (at 2.475 -1.905 270) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 50 "Net-(U1-Pad9)")) (pad 13 smd roundrect (at 2.475 -0.635 270) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 1 GND)) (pad 12 smd roundrect (at 2.475 0.635 270) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 82 /LATCH_IN)) (pad 11 smd roundrect (at 2.475 1.905 270) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 7 /CLOCK_IN)) (pad 10 smd roundrect (at 2.475 3.175 270) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 40 +3V3)) (pad 9 smd roundrect (at 2.475 4.445 270) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 53 "Net-(U5-Pad9)")) (pad 8 smd roundrect (at -2.475 4.445 270) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 1 GND)) (pad 7 smd roundrect (at -2.475 3.175 270) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 52 /LOOPBACK_A)) (pad 6 smd roundrect (at -2.475 1.905 270) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 48 /LED_C)) (pad 5 smd roundrect (at -2.475 0.635 270) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 47 /LED_B)) (pad 4 smd roundrect (at -2.475 -0.635 270) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 46 /LED_A)) (pad 3 smd roundrect (at -2.475 -1.905 270) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 28 /MOTOR_C_PHASE_D)) (pad 2 smd roundrect (at -2.475 -3.175 270) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 29 /MOTOR_C_PHASE_C)) (pad 1 smd roundrect (at -2.475 -4.445 270) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 30 /MOTOR_C_PHASE_B)) (model ${KISYS3DMOD}/Package_SO.3dshapes/SOIC-16_3.9x9.9mm_P1.27mm.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module ModifiedSymbols:SOIC-16_3.9x9.9mm_P1.27mm_silk (layer F.Cu) (tedit 6018D7C5) (tstamp 601A5CD7) (at 144.78 48.26) (descr "SOIC, 16 Pin (JEDEC MS-012AC, https://www.analog.com/media/en/package-pcb-resources/package/pkg_pdf/soic_narrow-r/r_16.pdf), generated with kicad-footprint-generator ipc_gullwing_generator.py") (tags "SOIC SO") (path /5FC6DACF) (attr smd) (fp_text reference U4 (at 0 -5.9) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value 74HC165 (at 0 5.9) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_circle (center -1.016 -4.572) (end -1.016 -4.318) (layer F.SilkS) (width 0.15)) (fp_line (start -0.975 -4.95) (end 1.95 -4.95) (layer F.Fab) (width 0.1)) (fp_line (start 1.95 -4.95) (end 1.95 4.95) (layer F.Fab) (width 0.1)) (fp_line (start 1.95 4.95) (end -1.95 4.95) (layer F.Fab) (width 0.1)) (fp_line (start -1.95 4.95) (end -1.95 -3.975) (layer F.Fab) (width 0.1)) (fp_line (start -1.95 -3.975) (end -0.975 -4.95) (layer F.Fab) (width 0.1)) (fp_line (start -3.7 -5.2) (end -3.7 5.2) (layer F.CrtYd) (width 0.05)) (fp_line (start -3.7 5.2) (end 3.7 5.2) (layer F.CrtYd) (width 0.05)) (fp_line (start 3.7 5.2) (end 3.7 -5.2) (layer F.CrtYd) (width 0.05)) (fp_line (start 3.7 -5.2) (end -3.7 -5.2) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.98 0.98) (thickness 0.15))) ) (pad 16 smd roundrect (at 2.475 -4.445) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 40 +3V3)) (pad 15 smd roundrect (at 2.475 -3.175) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 1 GND)) (pad 14 smd roundrect (at 2.475 -1.905) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 3 /SENSOR_D)) (pad 13 smd roundrect (at 2.475 -0.635) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 4 /SENSOR_C)) (pad 12 smd roundrect (at 2.475 0.635) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 5 /SENSOR_B)) (pad 11 smd roundrect (at 2.475 1.905) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 6 /SENSOR_A)) (pad 10 smd roundrect (at 2.475 3.175) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 81 /SENSOR_IN)) (pad 9 smd roundrect (at 2.475 4.445) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 80 /SENSOR_OUT)) (pad 8 smd roundrect (at -2.475 4.445) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 1 GND)) (pad 7 smd roundrect (at -2.475 3.175) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)) (pad 6 smd roundrect (at -2.475 1.905) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 51 /LOOPBACK_B)) (pad 5 smd roundrect (at -2.475 0.635) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 52 /LOOPBACK_A)) (pad 4 smd roundrect (at -2.475 -0.635) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 68 /SENSOR_F)) (pad 3 smd roundrect (at -2.475 -1.905) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 67 /SENSOR_E)) (pad 2 smd roundrect (at -2.475 -3.175) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 7 /CLOCK_IN)) (pad 1 smd roundrect (at -2.475 -4.445) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 82 /LATCH_IN)) (model ${KISYS3DMOD}/Package_SO.3dshapes/SOIC-16_3.9x9.9mm_P1.27mm.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module ModifiedSymbols:SOIC-14_3.9x8.7mm_P1.27mm_silk (layer F.Cu) (tedit 6018D7BD) (tstamp 60185599) (at 50.165 38.735) (descr "SOIC, 14 Pin (JEDEC MS-012AB, https://www.analog.com/media/en/package-pcb-resources/package/pkg_pdf/soic_narrow-r/r_14.pdf), generated with kicad-footprint-generator ipc_gullwing_generator.py") (tags "SOIC SO") (path /602AC0A5) (attr smd) (fp_text reference U3 (at -1.905 -5.08) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value 74HC125 (at 0 5.28) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_circle (center -1.016 -3.81) (end -1.016 -3.556) (layer F.SilkS) (width 0.15)) (fp_line (start -0.975 -4.325) (end 1.95 -4.325) (layer F.Fab) (width 0.1)) (fp_line (start 1.95 -4.325) (end 1.95 4.325) (layer F.Fab) (width 0.1)) (fp_line (start 1.95 4.325) (end -1.95 4.325) (layer F.Fab) (width 0.1)) (fp_line (start -1.95 4.325) (end -1.95 -3.35) (layer F.Fab) (width 0.1)) (fp_line (start -1.95 -3.35) (end -0.975 -4.325) (layer F.Fab) (width 0.1)) (fp_line (start -3.7 -4.58) (end -3.7 4.58) (layer F.CrtYd) (width 0.05)) (fp_line (start -3.7 4.58) (end 3.7 4.58) (layer F.CrtYd) (width 0.05)) (fp_line (start 3.7 4.58) (end 3.7 -4.58) (layer F.CrtYd) (width 0.05)) (fp_line (start 3.7 -4.58) (end -3.7 -4.58) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.98 0.98) (thickness 0.15))) ) (pad 14 smd roundrect (at 2.475 -3.81) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 40 +3V3)) (pad 13 smd roundrect (at 2.475 -2.54) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 1 GND)) (pad 12 smd roundrect (at 2.475 -1.27) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 56 /MOTOR_OUT_PRE_BUFFER)) (pad 11 smd roundrect (at 2.475 0) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 55 /MOTOR_OUT)) (pad 10 smd roundrect (at 2.475 1.27) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 1 GND)) (pad 9 smd roundrect (at 2.475 2.54) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 1 GND)) (pad 8 smd roundrect (at 2.475 3.81) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)) (pad 7 smd roundrect (at -2.475 3.81) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 1 GND)) (pad 6 smd roundrect (at -2.475 2.54) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 83 /LATCH_OUT)) (pad 5 smd roundrect (at -2.475 1.27) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 82 /LATCH_IN)) (pad 4 smd roundrect (at -2.475 0) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 1 GND)) (pad 3 smd roundrect (at -2.475 -1.27) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 54 /CLOCK_OUT)) (pad 2 smd roundrect (at -2.475 -2.54) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 7 /CLOCK_IN)) (pad 1 smd roundrect (at -2.475 -3.81) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 1 GND)) (model ${KISYS3DMOD}/Package_SO.3dshapes/SOIC-14_3.9x8.7mm_P1.27mm.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module ModifiedSymbols:SOIC-16_3.9x9.9mm_P1.27mm_silk (layer F.Cu) (tedit 6018D7C5) (tstamp 601A787E) (at 194.31 36.83 90) (descr "SOIC, 16 Pin (JEDEC MS-012AC, https://www.analog.com/media/en/package-pcb-resources/package/pkg_pdf/soic_narrow-r/r_16.pdf), generated with kicad-footprint-generator ipc_gullwing_generator.py") (tags "SOIC SO") (path /60696131) (attr smd) (fp_text reference U2 (at -4.445 -4.445 180) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value TPL7407L (at 0 5.9 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_circle (center -1.016 -4.572) (end -1.016 -4.318) (layer F.SilkS) (width 0.15)) (fp_line (start -0.975 -4.95) (end 1.95 -4.95) (layer F.Fab) (width 0.1)) (fp_line (start 1.95 -4.95) (end 1.95 4.95) (layer F.Fab) (width 0.1)) (fp_line (start 1.95 4.95) (end -1.95 4.95) (layer F.Fab) (width 0.1)) (fp_line (start -1.95 4.95) (end -1.95 -3.975) (layer F.Fab) (width 0.1)) (fp_line (start -1.95 -3.975) (end -0.975 -4.95) (layer F.Fab) (width 0.1)) (fp_line (start -3.7 -5.2) (end -3.7 5.2) (layer F.CrtYd) (width 0.05)) (fp_line (start -3.7 5.2) (end 3.7 5.2) (layer F.CrtYd) (width 0.05)) (fp_line (start 3.7 5.2) (end 3.7 -5.2) (layer F.CrtYd) (width 0.05)) (fp_line (start 3.7 -5.2) (end -3.7 -5.2) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 0 90) (layer F.Fab) (effects (font (size 0.98 0.98) (thickness 0.15))) ) (pad 16 smd roundrect (at 2.475 -4.445 90) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 14 /OUT_B_PHASE_B)) (pad 15 smd roundrect (at 2.475 -3.175 90) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 15 /OUT_B_PHASE_A)) (pad 14 smd roundrect (at 2.475 -1.905 90) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 8 /OUT_A_PHASE_D)) (pad 13 smd roundrect (at 2.475 -0.635 90) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 9 /OUT_A_PHASE_C)) (pad 12 smd roundrect (at 2.475 0.635 90) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 10 /OUT_A_PHASE_B)) (pad 11 smd roundrect (at 2.475 1.905 90) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 11 /OUT_A_PHASE_A)) (pad 10 smd roundrect (at 2.475 3.175 90) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)) (pad 9 smd roundrect (at 2.475 4.445 90) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 2 +12V)) (pad 8 smd roundrect (at -2.475 4.445 90) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 1 GND)) (pad 7 smd roundrect (at -2.475 3.175 90) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 1 GND)) (pad 6 smd roundrect (at -2.475 1.905 90) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 39 /MOTOR_A_PHASE_A)) (pad 5 smd roundrect (at -2.475 0.635 90) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 38 /MOTOR_A_PHASE_B)) (pad 4 smd roundrect (at -2.475 -0.635 90) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 37 /MOTOR_A_PHASE_C)) (pad 3 smd roundrect (at -2.475 -1.905 90) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 36 /MOTOR_A_PHASE_D)) (pad 2 smd roundrect (at -2.475 -3.175 90) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 35 /MOTOR_B_PHASE_A)) (pad 1 smd roundrect (at -2.475 -4.445 90) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 34 /MOTOR_B_PHASE_B)) (model ${KISYS3DMOD}/Package_SO.3dshapes/SOIC-16_3.9x9.9mm_P1.27mm.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module ModifiedSymbols:SOIC-16_3.9x9.9mm_P1.27mm_silk (layer F.Cu) (tedit 6018D7C5) (tstamp 60167CA8) (at 181.61 36.83 270) (descr "SOIC, 16 Pin (JEDEC MS-012AC, https://www.analog.com/media/en/package-pcb-resources/package/pkg_pdf/soic_narrow-r/r_16.pdf), generated with kicad-footprint-generator ipc_gullwing_generator.py") (tags "SOIC SO") (path /5F42721A) (attr smd) (fp_text reference U1 (at 4.445 -3.175 180) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value 74HC595 (at 0 5.9 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_circle (center -1.016 -4.572) (end -1.016 -4.318) (layer F.SilkS) (width 0.15)) (fp_line (start -0.975 -4.95) (end 1.95 -4.95) (layer F.Fab) (width 0.1)) (fp_line (start 1.95 -4.95) (end 1.95 4.95) (layer F.Fab) (width 0.1)) (fp_line (start 1.95 4.95) (end -1.95 4.95) (layer F.Fab) (width 0.1)) (fp_line (start -1.95 4.95) (end -1.95 -3.975) (layer F.Fab) (width 0.1)) (fp_line (start -1.95 -3.975) (end -0.975 -4.95) (layer F.Fab) (width 0.1)) (fp_line (start -3.7 -5.2) (end -3.7 5.2) (layer F.CrtYd) (width 0.05)) (fp_line (start -3.7 5.2) (end 3.7 5.2) (layer F.CrtYd) (width 0.05)) (fp_line (start 3.7 5.2) (end 3.7 -5.2) (layer F.CrtYd) (width 0.05)) (fp_line (start 3.7 -5.2) (end -3.7 -5.2) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 0 90) (layer F.Fab) (effects (font (size 0.98 0.98) (thickness 0.15))) ) (pad 16 smd roundrect (at 2.475 -4.445 270) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 40 +3V3)) (pad 15 smd roundrect (at 2.475 -3.175 270) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 39 /MOTOR_A_PHASE_A)) (pad 14 smd roundrect (at 2.475 -1.905 270) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 45 /MOTOR_IN)) (pad 13 smd roundrect (at 2.475 -0.635 270) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 1 GND)) (pad 12 smd roundrect (at 2.475 0.635 270) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 82 /LATCH_IN)) (pad 11 smd roundrect (at 2.475 1.905 270) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 7 /CLOCK_IN)) (pad 10 smd roundrect (at 2.475 3.175 270) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 40 +3V3)) (pad 9 smd roundrect (at 2.475 4.445 270) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 50 "Net-(U1-Pad9)")) (pad 8 smd roundrect (at -2.475 4.445 270) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 1 GND)) (pad 7 smd roundrect (at -2.475 3.175 270) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 32 /MOTOR_B_PHASE_D)) (pad 6 smd roundrect (at -2.475 1.905 270) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 33 /MOTOR_B_PHASE_C)) (pad 5 smd roundrect (at -2.475 0.635 270) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 34 /MOTOR_B_PHASE_B)) (pad 4 smd roundrect (at -2.475 -0.635 270) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 35 /MOTOR_B_PHASE_A)) (pad 3 smd roundrect (at -2.475 -1.905 270) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 36 /MOTOR_A_PHASE_D)) (pad 2 smd roundrect (at -2.475 -3.175 270) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 37 /MOTOR_A_PHASE_C)) (pad 1 smd roundrect (at -2.475 -4.445 270) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 38 /MOTOR_A_PHASE_B)) (model ${KISYS3DMOD}/Package_SO.3dshapes/SOIC-16_3.9x9.9mm_P1.27mm.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module ModifiedSymbols:SOIC-16_3.9x9.9mm_P1.27mm_silk (layer F.Cu) (tedit 6018D6AB) (tstamp 601A87C5) (at 61.595 36.83 90) (descr "SOIC, 16 Pin (JEDEC MS-012AC, https://www.analog.com/media/en/package-pcb-resources/package/pkg_pdf/soic_narrow-r/r_16.pdf), generated with kicad-footprint-generator ipc_gullwing_generator.py") (tags "SOIC SO") (path /606E6DC1) (attr smd) (fp_text reference U10 (at -4.445 -3.175 180) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value TPL7407L (at 0 5.9 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 3.7 -5.2) (end -3.7 -5.2) (layer F.CrtYd) (width 0.05)) (fp_line (start 3.7 5.2) (end 3.7 -5.2) (layer F.CrtYd) (width 0.05)) (fp_line (start -3.7 5.2) (end 3.7 5.2) (layer F.CrtYd) (width 0.05)) (fp_line (start -3.7 -5.2) (end -3.7 5.2) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.95 -3.975) (end -0.975 -4.95) (layer F.Fab) (width 0.1)) (fp_line (start -1.95 4.95) (end -1.95 -3.975) (layer F.Fab) (width 0.1)) (fp_line (start 1.95 4.95) (end -1.95 4.95) (layer F.Fab) (width 0.1)) (fp_line (start 1.95 -4.95) (end 1.95 4.95) (layer F.Fab) (width 0.1)) (fp_line (start -0.975 -4.95) (end 1.95 -4.95) (layer F.Fab) (width 0.1)) (fp_line (start 0 5.06) (end -1.95 5.06) (layer F.SilkS) (width 0.12)) (fp_line (start 0 5.06) (end 1.95 5.06) (layer F.SilkS) (width 0.12)) (fp_circle (center -1.016 -4.572) (end -1.016 -4.318) (layer F.SilkS) (width 0.15)) (fp_text user %R (at 0 0 90) (layer F.Fab) (effects (font (size 0.98 0.98) (thickness 0.15))) ) (pad 16 smd roundrect (at 2.475 -4.445 90) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 63 /OUT_F_PHASE_D)) (pad 15 smd roundrect (at 2.475 -3.175 90) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 64 /OUT_F_PHASE_C)) (pad 14 smd roundrect (at 2.475 -1.905 90) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 65 /OUT_F_PHASE_B)) (pad 13 smd roundrect (at 2.475 -0.635 90) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 66 /OUT_F_PHASE_A)) (pad 12 smd roundrect (at 2.475 0.635 90) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 59 /OUT_E_PHASE_D)) (pad 11 smd roundrect (at 2.475 1.905 90) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 60 /OUT_E_PHASE_C)) (pad 10 smd roundrect (at 2.475 3.175 90) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)) (pad 9 smd roundrect (at 2.475 4.445 90) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 2 +12V)) (pad 8 smd roundrect (at -2.475 4.445 90) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 1 GND)) (pad 7 smd roundrect (at -2.475 3.175 90) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 1 GND)) (pad 6 smd roundrect (at -2.475 1.905 90) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 79 /MOTOR_E_PHASE_C)) (pad 5 smd roundrect (at -2.475 0.635 90) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 78 /MOTOR_E_PHASE_D)) (pad 4 smd roundrect (at -2.475 -0.635 90) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 77 /MOTOR_F_PHASE_A)) (pad 3 smd roundrect (at -2.475 -1.905 90) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 76 /MOTOR_F_PHASE_B)) (pad 2 smd roundrect (at -2.475 -3.175 90) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 75 /MOTOR_F_PHASE_C)) (pad 1 smd roundrect (at -2.475 -4.445 90) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 74 /MOTOR_F_PHASE_D)) (model ${KISYS3DMOD}/Package_SO.3dshapes/SOIC-16_3.9x9.9mm_P1.27mm.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module ModifiedSymbols:LED_0603_1608Metric_Silkscreen (layer F.Cu) (tedit 6018D469) (tstamp 601757D1) (at 53.34 52.705) (descr "LED SMD 0603 (1608 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: http://www.tortai-tech.com/upload/download/2011102023233369053.pdf), generated with kicad-footprint-generator") (tags LED) (path /60945B22) (attr smd) (fp_text reference D6 (at 0 1.27) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value LED (at 0 1.43) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 1.48 0.73) (end -1.48 0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.48 -0.73) (end 1.48 0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.48 -0.73) (end 1.48 -0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.48 0.73) (end -1.48 -0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start 0.8 0.4) (end 0.8 -0.4) (layer F.Fab) (width 0.1)) (fp_line (start -0.8 0.4) (end 0.8 0.4) (layer F.Fab) (width 0.1)) (fp_line (start -0.8 -0.1) (end -0.8 0.4) (layer F.Fab) (width 0.1)) (fp_line (start -0.5 -0.4) (end -0.8 -0.1) (layer F.Fab) (width 0.1)) (fp_line (start 0.8 -0.4) (end -0.5 -0.4) (layer F.Fab) (width 0.1)) (fp_line (start 0.254 -0.508) (end 0.254 0.508) (layer F.SilkS) (width 0.15)) (fp_line (start 0.254 0.508) (end -0.254 0) (layer F.SilkS) (width 0.15)) (fp_line (start -0.254 0) (end 0.254 -0.508) (layer F.SilkS) (width 0.15)) (fp_line (start -0.254 -0.508) (end -0.254 0.508) (layer F.SilkS) (width 0.15)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.4 0.4) (thickness 0.06))) ) (pad 2 smd roundrect (at 0.7875 0) (size 0.875 0.95) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 58 "Net-(D6-Pad2)")) (pad 1 smd roundrect (at -0.7875 0) (size 0.875 0.95) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 1 GND)) (model ${KISYS3DMOD}/LED_SMD.3dshapes/LED_0603_1608Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module ModifiedSymbols:LED_0603_1608Metric_Silkscreen (layer F.Cu) (tedit 6018D469) (tstamp 60179AEE) (at 72.39 52.705) (descr "LED SMD 0603 (1608 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: http://www.tortai-tech.com/upload/download/2011102023233369053.pdf), generated with kicad-footprint-generator") (tags LED) (path /609458EA) (attr smd) (fp_text reference D5 (at 0 1.27) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value LED (at 0 1.43) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 1.48 0.73) (end -1.48 0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.48 -0.73) (end 1.48 0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.48 -0.73) (end 1.48 -0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.48 0.73) (end -1.48 -0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start 0.8 0.4) (end 0.8 -0.4) (layer F.Fab) (width 0.1)) (fp_line (start -0.8 0.4) (end 0.8 0.4) (layer F.Fab) (width 0.1)) (fp_line (start -0.8 -0.1) (end -0.8 0.4) (layer F.Fab) (width 0.1)) (fp_line (start -0.5 -0.4) (end -0.8 -0.1) (layer F.Fab) (width 0.1)) (fp_line (start 0.8 -0.4) (end -0.5 -0.4) (layer F.Fab) (width 0.1)) (fp_line (start 0.254 -0.508) (end 0.254 0.508) (layer F.SilkS) (width 0.15)) (fp_line (start 0.254 0.508) (end -0.254 0) (layer F.SilkS) (width 0.15)) (fp_line (start -0.254 0) (end 0.254 -0.508) (layer F.SilkS) (width 0.15)) (fp_line (start -0.254 -0.508) (end -0.254 0.508) (layer F.SilkS) (width 0.15)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.4 0.4) (thickness 0.06))) ) (pad 2 smd roundrect (at 0.7875 0) (size 0.875 0.95) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 57 "Net-(D5-Pad2)")) (pad 1 smd roundrect (at -0.7875 0) (size 0.875 0.95) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 1 GND)) (model ${KISYS3DMOD}/LED_SMD.3dshapes/LED_0603_1608Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module ModifiedSymbols:LED_0603_1608Metric_Silkscreen (layer F.Cu) (tedit 6018D469) (tstamp 60167AEC) (at 91.44 52.705) (descr "LED SMD 0603 (1608 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: http://www.tortai-tech.com/upload/download/2011102023233369053.pdf), generated with kicad-footprint-generator") (tags LED) (path /610332BB) (attr smd) (fp_text reference D4 (at 0 1.27) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value LED (at 0 1.43) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 1.48 0.73) (end -1.48 0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.48 -0.73) (end 1.48 0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.48 -0.73) (end 1.48 -0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.48 0.73) (end -1.48 -0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start 0.8 0.4) (end 0.8 -0.4) (layer F.Fab) (width 0.1)) (fp_line (start -0.8 0.4) (end 0.8 0.4) (layer F.Fab) (width 0.1)) (fp_line (start -0.8 -0.1) (end -0.8 0.4) (layer F.Fab) (width 0.1)) (fp_line (start -0.5 -0.4) (end -0.8 -0.1) (layer F.Fab) (width 0.1)) (fp_line (start 0.8 -0.4) (end -0.5 -0.4) (layer F.Fab) (width 0.1)) (fp_line (start 0.254 -0.508) (end 0.254 0.508) (layer F.SilkS) (width 0.15)) (fp_line (start 0.254 0.508) (end -0.254 0) (layer F.SilkS) (width 0.15)) (fp_line (start -0.254 0) (end 0.254 -0.508) (layer F.SilkS) (width 0.15)) (fp_line (start -0.254 -0.508) (end -0.254 0.508) (layer F.SilkS) (width 0.15)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.4 0.4) (thickness 0.06))) ) (pad 2 smd roundrect (at 0.7875 0) (size 0.875 0.95) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 44 "Net-(D4-Pad2)")) (pad 1 smd roundrect (at -0.7875 0) (size 0.875 0.95) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 1 GND)) (model ${KISYS3DMOD}/LED_SMD.3dshapes/LED_0603_1608Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module ModifiedSymbols:LED_0603_1608Metric_Silkscreen (layer F.Cu) (tedit 6018D469) (tstamp 60167AD9) (at 157.48 52.705 180) (descr "LED SMD 0603 (1608 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: http://www.tortai-tech.com/upload/download/2011102023233369053.pdf), generated with kicad-footprint-generator") (tags LED) (path /61032E24) (attr smd) (fp_text reference D3 (at 0 -1.27) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value LED (at 0 1.43) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 1.48 0.73) (end -1.48 0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.48 -0.73) (end 1.48 0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.48 -0.73) (end 1.48 -0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.48 0.73) (end -1.48 -0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start 0.8 0.4) (end 0.8 -0.4) (layer F.Fab) (width 0.1)) (fp_line (start -0.8 0.4) (end 0.8 0.4) (layer F.Fab) (width 0.1)) (fp_line (start -0.8 -0.1) (end -0.8 0.4) (layer F.Fab) (width 0.1)) (fp_line (start -0.5 -0.4) (end -0.8 -0.1) (layer F.Fab) (width 0.1)) (fp_line (start 0.8 -0.4) (end -0.5 -0.4) (layer F.Fab) (width 0.1)) (fp_line (start 0.254 -0.508) (end 0.254 0.508) (layer F.SilkS) (width 0.15)) (fp_line (start 0.254 0.508) (end -0.254 0) (layer F.SilkS) (width 0.15)) (fp_line (start -0.254 0) (end 0.254 -0.508) (layer F.SilkS) (width 0.15)) (fp_line (start -0.254 -0.508) (end -0.254 0.508) (layer F.SilkS) (width 0.15)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.4 0.4) (thickness 0.06))) ) (pad 2 smd roundrect (at 0.7875 0 180) (size 0.875 0.95) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 43 "Net-(D3-Pad2)")) (pad 1 smd roundrect (at -0.7875 0 180) (size 0.875 0.95) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 1 GND)) (model ${KISYS3DMOD}/LED_SMD.3dshapes/LED_0603_1608Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module ModifiedSymbols:LED_0603_1608Metric_Silkscreen (layer F.Cu) (tedit 6018D469) (tstamp 60172ACB) (at 176.53 52.705 180) (descr "LED SMD 0603 (1608 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: http://www.tortai-tech.com/upload/download/2011102023233369053.pdf), generated with kicad-footprint-generator") (tags LED) (path /610329BA) (attr smd) (fp_text reference D2 (at 0 -1.27) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value LED (at 0 1.43) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 1.48 0.73) (end -1.48 0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.48 -0.73) (end 1.48 0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.48 -0.73) (end 1.48 -0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.48 0.73) (end -1.48 -0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start 0.8 0.4) (end 0.8 -0.4) (layer F.Fab) (width 0.1)) (fp_line (start -0.8 0.4) (end 0.8 0.4) (layer F.Fab) (width 0.1)) (fp_line (start -0.8 -0.1) (end -0.8 0.4) (layer F.Fab) (width 0.1)) (fp_line (start -0.5 -0.4) (end -0.8 -0.1) (layer F.Fab) (width 0.1)) (fp_line (start 0.8 -0.4) (end -0.5 -0.4) (layer F.Fab) (width 0.1)) (fp_line (start 0.254 -0.508) (end 0.254 0.508) (layer F.SilkS) (width 0.15)) (fp_line (start 0.254 0.508) (end -0.254 0) (layer F.SilkS) (width 0.15)) (fp_line (start -0.254 0) (end 0.254 -0.508) (layer F.SilkS) (width 0.15)) (fp_line (start -0.254 -0.508) (end -0.254 0.508) (layer F.SilkS) (width 0.15)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.4 0.4) (thickness 0.06))) ) (pad 2 smd roundrect (at 0.7875 0 180) (size 0.875 0.95) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 42 "Net-(D2-Pad2)")) (pad 1 smd roundrect (at -0.7875 0 180) (size 0.875 0.95) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 1 GND)) (model ${KISYS3DMOD}/LED_SMD.3dshapes/LED_0603_1608Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module ModifiedSymbols:LED_0603_1608Metric_Silkscreen (layer F.Cu) (tedit 6018D469) (tstamp 60172BA6) (at 195.58 52.705 180) (descr "LED SMD 0603 (1608 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: http://www.tortai-tech.com/upload/download/2011102023233369053.pdf), generated with kicad-footprint-generator") (tags LED) (path /6102F37B) (attr smd) (fp_text reference D1 (at 0 -1.27) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value LED (at 0 1.43) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 1.48 0.73) (end -1.48 0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.48 -0.73) (end 1.48 0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.48 -0.73) (end 1.48 -0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.48 0.73) (end -1.48 -0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start 0.8 0.4) (end 0.8 -0.4) (layer F.Fab) (width 0.1)) (fp_line (start -0.8 0.4) (end 0.8 0.4) (layer F.Fab) (width 0.1)) (fp_line (start -0.8 -0.1) (end -0.8 0.4) (layer F.Fab) (width 0.1)) (fp_line (start -0.5 -0.4) (end -0.8 -0.1) (layer F.Fab) (width 0.1)) (fp_line (start 0.8 -0.4) (end -0.5 -0.4) (layer F.Fab) (width 0.1)) (fp_line (start 0.254 -0.508) (end 0.254 0.508) (layer F.SilkS) (width 0.15)) (fp_line (start 0.254 0.508) (end -0.254 0) (layer F.SilkS) (width 0.15)) (fp_line (start -0.254 0) (end 0.254 -0.508) (layer F.SilkS) (width 0.15)) (fp_line (start -0.254 -0.508) (end -0.254 0.508) (layer F.SilkS) (width 0.15)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.4 0.4) (thickness 0.06))) ) (pad 2 smd roundrect (at 0.7875 0 180) (size 0.875 0.95) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 41 "Net-(D1-Pad2)")) (pad 1 smd roundrect (at -0.7875 0 180) (size 0.875 0.95) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 1 GND)) (model ${KISYS3DMOD}/LED_SMD.3dshapes/LED_0603_1608Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Resistor_SMD:R_0603_1608Metric (layer F.Cu) (tedit 5F68FEEE) (tstamp 60175B4D) (at 54.61 44.45) (descr "Resistor SMD 0603 (1608 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") (tags resistor) (path /60A61F50) (attr smd) (fp_text reference R12 (at -3.175 0) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value 47k (at 0 1.43) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 1.48 0.73) (end -1.48 0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.48 -0.73) (end 1.48 0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.48 -0.73) (end 1.48 -0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.48 0.73) (end -1.48 -0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start -0.237258 0.5225) (end 0.237258 0.5225) (layer F.SilkS) (width 0.12)) (fp_line (start -0.237258 -0.5225) (end 0.237258 -0.5225) (layer F.SilkS) (width 0.12)) (fp_line (start 0.8 0.4125) (end -0.8 0.4125) (layer F.Fab) (width 0.1)) (fp_line (start 0.8 -0.4125) (end 0.8 0.4125) (layer F.Fab) (width 0.1)) (fp_line (start -0.8 -0.4125) (end 0.8 -0.4125) (layer F.Fab) (width 0.1)) (fp_line (start -0.8 0.4125) (end -0.8 -0.4125) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.4 0.4) (thickness 0.06))) ) (pad 2 smd roundrect (at 0.825 0) (size 0.8 0.95) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 68 /SENSOR_F)) (pad 1 smd roundrect (at -0.825 0) (size 0.8 0.95) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 40 +3V3)) (model ${KISYS3DMOD}/Resistor_SMD.3dshapes/R_0603_1608Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Resistor_SMD:R_0603_1608Metric (layer F.Cu) (tedit 5F68FEEE) (tstamp 60175B3C) (at 73.66 44.45) (descr "Resistor SMD 0603 (1608 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") (tags resistor) (path /60A61F43) (attr smd) (fp_text reference R11 (at -3.175 0) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value 47k (at 0 1.43) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 1.48 0.73) (end -1.48 0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.48 -0.73) (end 1.48 0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.48 -0.73) (end 1.48 -0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.48 0.73) (end -1.48 -0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start -0.237258 0.5225) (end 0.237258 0.5225) (layer F.SilkS) (width 0.12)) (fp_line (start -0.237258 -0.5225) (end 0.237258 -0.5225) (layer F.SilkS) (width 0.12)) (fp_line (start 0.8 0.4125) (end -0.8 0.4125) (layer F.Fab) (width 0.1)) (fp_line (start 0.8 -0.4125) (end 0.8 0.4125) (layer F.Fab) (width 0.1)) (fp_line (start -0.8 -0.4125) (end 0.8 -0.4125) (layer F.Fab) (width 0.1)) (fp_line (start -0.8 0.4125) (end -0.8 -0.4125) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.4 0.4) (thickness 0.06))) ) (pad 2 smd roundrect (at 0.825 0) (size 0.8 0.95) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 67 /SENSOR_E)) (pad 1 smd roundrect (at -0.825 0) (size 0.8 0.95) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 40 +3V3)) (model ${KISYS3DMOD}/Resistor_SMD.3dshapes/R_0603_1608Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Resistor_SMD:R_0603_1608Metric (layer F.Cu) (tedit 5F68FEEE) (tstamp 601A5A2B) (at 62.865 52.705) (descr "Resistor SMD 0603 (1608 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") (tags resistor) (path /60945B3B) (attr smd) (fp_text reference R10 (at 0 1.27) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value 220R (at 0 1.43) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 1.48 0.73) (end -1.48 0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.48 -0.73) (end 1.48 0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.48 -0.73) (end 1.48 -0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.48 0.73) (end -1.48 -0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start -0.237258 0.5225) (end 0.237258 0.5225) (layer F.SilkS) (width 0.12)) (fp_line (start -0.237258 -0.5225) (end 0.237258 -0.5225) (layer F.SilkS) (width 0.12)) (fp_line (start 0.8 0.4125) (end -0.8 0.4125) (layer F.Fab) (width 0.1)) (fp_line (start 0.8 -0.4125) (end 0.8 0.4125) (layer F.Fab) (width 0.1)) (fp_line (start -0.8 -0.4125) (end 0.8 -0.4125) (layer F.Fab) (width 0.1)) (fp_line (start -0.8 0.4125) (end -0.8 -0.4125) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.4 0.4) (thickness 0.06))) ) (pad 2 smd roundrect (at 0.825 0) (size 0.8 0.95) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 70 /LED_F)) (pad 1 smd roundrect (at -0.825 0) (size 0.8 0.95) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 58 "Net-(D6-Pad2)")) (model ${KISYS3DMOD}/Resistor_SMD.3dshapes/R_0603_1608Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Resistor_SMD:R_0603_1608Metric (layer F.Cu) (tedit 5F68FEEE) (tstamp 60175A1A) (at 81.915 52.705) (descr "Resistor SMD 0603 (1608 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") (tags resistor) (path /60945B2E) (attr smd) (fp_text reference R1 (at 0 1.27) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value 220R (at 0 1.43) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 1.48 0.73) (end -1.48 0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.48 -0.73) (end 1.48 0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.48 -0.73) (end 1.48 -0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.48 0.73) (end -1.48 -0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start -0.237258 0.5225) (end 0.237258 0.5225) (layer F.SilkS) (width 0.12)) (fp_line (start -0.237258 -0.5225) (end 0.237258 -0.5225) (layer F.SilkS) (width 0.12)) (fp_line (start 0.8 0.4125) (end -0.8 0.4125) (layer F.Fab) (width 0.1)) (fp_line (start 0.8 -0.4125) (end 0.8 0.4125) (layer F.Fab) (width 0.1)) (fp_line (start -0.8 -0.4125) (end 0.8 -0.4125) (layer F.Fab) (width 0.1)) (fp_line (start -0.8 0.4125) (end -0.8 -0.4125) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.4 0.4) (thickness 0.06))) ) (pad 2 smd roundrect (at 0.825 0) (size 0.8 0.95) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 69 /LED_E)) (pad 1 smd roundrect (at -0.825 0) (size 0.8 0.95) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 57 "Net-(D5-Pad2)")) (model ${KISYS3DMOD}/Resistor_SMD.3dshapes/R_0603_1608Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_Vertical (layer F.Cu) (tedit 59FED5CC) (tstamp 60178582) (at 50.8 46.99 90) (descr "Through hole straight pin header, 1x03, 2.54mm pitch, single row") (tags "Through hole pin header THT 1x03 2.54mm single row") (path /60A61F30) (fp_text reference J15 (at 0 -2.33 90) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value Sensor (at 0 7.41 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 1.8 -1.8) (end -1.8 -1.8) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.8 6.85) (end 1.8 -1.8) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.8 6.85) (end 1.8 6.85) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.8 -1.8) (end -1.8 6.85) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.33 -1.33) (end 0 -1.33) (layer F.SilkS) (width 0.12)) (fp_line (start -1.33 0) (end -1.33 -1.33) (layer F.SilkS) (width 0.12)) (fp_line (start -1.33 1.27) (end 1.33 1.27) (layer F.SilkS) (width 0.12)) (fp_line (start 1.33 1.27) (end 1.33 6.41) (layer F.SilkS) (width 0.12)) (fp_line (start -1.33 1.27) (end -1.33 6.41) (layer F.SilkS) (width 0.12)) (fp_line (start -1.33 6.41) (end 1.33 6.41) (layer F.SilkS) (width 0.12)) (fp_line (start -1.27 -0.635) (end -0.635 -1.27) (layer F.Fab) (width 0.1)) (fp_line (start -1.27 6.35) (end -1.27 -0.635) (layer F.Fab) (width 0.1)) (fp_line (start 1.27 6.35) (end -1.27 6.35) (layer F.Fab) (width 0.1)) (fp_line (start 1.27 -1.27) (end 1.27 6.35) (layer F.Fab) (width 0.1)) (fp_line (start -0.635 -1.27) (end 1.27 -1.27) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 2.54) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 3 thru_hole oval (at 0 5.08 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 68 /SENSOR_F)) (pad 2 thru_hole oval (at 0 2.54 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 40 +3V3)) (pad 1 thru_hole rect (at 0 0 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 1 GND)) (model ${KISYS3DMOD}/Connector_PinHeader_2.54mm.3dshapes/PinHeader_1x03_P2.54mm_Vertical.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_Vertical (layer F.Cu) (tedit 59FED5CC) (tstamp 601759F2) (at 69.85 46.99 90) (descr "Through hole straight pin header, 1x03, 2.54mm pitch, single row") (tags "Through hole pin header THT 1x03 2.54mm single row") (path /60A61F26) (fp_text reference J14 (at 0 -2.33 90) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value Sensor (at 0 7.41 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 1.8 -1.8) (end -1.8 -1.8) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.8 6.85) (end 1.8 -1.8) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.8 6.85) (end 1.8 6.85) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.8 -1.8) (end -1.8 6.85) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.33 -1.33) (end 0 -1.33) (layer F.SilkS) (width 0.12)) (fp_line (start -1.33 0) (end -1.33 -1.33) (layer F.SilkS) (width 0.12)) (fp_line (start -1.33 1.27) (end 1.33 1.27) (layer F.SilkS) (width 0.12)) (fp_line (start 1.33 1.27) (end 1.33 6.41) (layer F.SilkS) (width 0.12)) (fp_line (start -1.33 1.27) (end -1.33 6.41) (layer F.SilkS) (width 0.12)) (fp_line (start -1.33 6.41) (end 1.33 6.41) (layer F.SilkS) (width 0.12)) (fp_line (start -1.27 -0.635) (end -0.635 -1.27) (layer F.Fab) (width 0.1)) (fp_line (start -1.27 6.35) (end -1.27 -0.635) (layer F.Fab) (width 0.1)) (fp_line (start 1.27 6.35) (end -1.27 6.35) (layer F.Fab) (width 0.1)) (fp_line (start 1.27 -1.27) (end 1.27 6.35) (layer F.Fab) (width 0.1)) (fp_line (start -0.635 -1.27) (end 1.27 -1.27) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 2.54) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 3 thru_hole oval (at 0 5.08 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 67 /SENSOR_E)) (pad 2 thru_hole oval (at 0 2.54 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 40 +3V3)) (pad 1 thru_hole rect (at 0 0 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 1 GND)) (model ${KISYS3DMOD}/Connector_PinHeader_2.54mm.3dshapes/PinHeader_1x03_P2.54mm_Vertical.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Capacitor_SMD:C_0603_1608Metric (layer F.Cu) (tedit 5F68FEEE) (tstamp 6017571B) (at 67.945 33.782 90) (descr "Capacitor SMD 0603 (1608 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") (tags capacitor) (path /606E6DDC) (attr smd) (fp_text reference C12 (at -3.048 0 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value 0.1uF (at 0 1.43 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 1.48 0.73) (end -1.48 0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.48 -0.73) (end 1.48 0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.48 -0.73) (end 1.48 -0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.48 0.73) (end -1.48 -0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start -0.14058 0.51) (end 0.14058 0.51) (layer F.SilkS) (width 0.12)) (fp_line (start -0.14058 -0.51) (end 0.14058 -0.51) (layer F.SilkS) (width 0.12)) (fp_line (start 0.8 0.4) (end -0.8 0.4) (layer F.Fab) (width 0.1)) (fp_line (start 0.8 -0.4) (end 0.8 0.4) (layer F.Fab) (width 0.1)) (fp_line (start -0.8 -0.4) (end 0.8 -0.4) (layer F.Fab) (width 0.1)) (fp_line (start -0.8 0.4) (end -0.8 -0.4) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 0 90) (layer F.Fab) (effects (font (size 0.4 0.4) (thickness 0.06))) ) (pad 2 smd roundrect (at 0.775 0 90) (size 0.9 0.95) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 2 +12V)) (pad 1 smd roundrect (at -0.775 0 90) (size 0.9 0.95) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 1 GND)) (model ${KISYS3DMOD}/Capacitor_SMD.3dshapes/C_0603_1608Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Capacitor_SMD:C_0603_1608Metric (layer F.Cu) (tedit 5F68FEEE) (tstamp 6017570A) (at 80.645 39.37 90) (descr "Capacitor SMD 0603 (1608 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") (tags capacitor) (path /6098AE24) (attr smd) (fp_text reference C11 (at 3.175 0 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value 0.1uF (at 0 1.43 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 1.48 0.73) (end -1.48 0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.48 -0.73) (end 1.48 0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.48 -0.73) (end 1.48 -0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.48 0.73) (end -1.48 -0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start -0.14058 0.51) (end 0.14058 0.51) (layer F.SilkS) (width 0.12)) (fp_line (start -0.14058 -0.51) (end 0.14058 -0.51) (layer F.SilkS) (width 0.12)) (fp_line (start 0.8 0.4) (end -0.8 0.4) (layer F.Fab) (width 0.1)) (fp_line (start 0.8 -0.4) (end 0.8 0.4) (layer F.Fab) (width 0.1)) (fp_line (start -0.8 -0.4) (end 0.8 -0.4) (layer F.Fab) (width 0.1)) (fp_line (start -0.8 0.4) (end -0.8 -0.4) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 0 90) (layer F.Fab) (effects (font (size 0.4 0.4) (thickness 0.06))) ) (pad 2 smd roundrect (at 0.775 0 90) (size 0.9 0.95) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 1 GND)) (pad 1 smd roundrect (at -0.775 0 90) (size 0.9 0.95) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 40 +3V3)) (model ${KISYS3DMOD}/Capacitor_SMD.3dshapes/C_0603_1608Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Capacitor_SMD:CP_Elec_4x5.3 (layer F.Cu) (tedit 5BCA39CF) (tstamp 6016A7A6) (at 105.41 30.48 180) (descr "SMD capacitor, aluminum electrolytic, Vishay, 4.0x5.3mm") (tags "capacitor electrolytic") (path /60F56FCC) (attr smd) (fp_text reference C8 (at -1.27 -3.2) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value 10uF (at 0 3.2) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_circle (center 0 0) (end 2 0) (layer F.Fab) (width 0.1)) (fp_line (start 2.15 -2.15) (end 2.15 2.15) (layer F.Fab) (width 0.1)) (fp_line (start -1.15 -2.15) (end 2.15 -2.15) (layer F.Fab) (width 0.1)) (fp_line (start -1.15 2.15) (end 2.15 2.15) (layer F.Fab) (width 0.1)) (fp_line (start -2.15 -1.15) (end -2.15 1.15) (layer F.Fab) (width 0.1)) (fp_line (start -2.15 -1.15) (end -1.15 -2.15) (layer F.Fab) (width 0.1)) (fp_line (start -2.15 1.15) (end -1.15 2.15) (layer F.Fab) (width 0.1)) (fp_line (start -1.574773 -1) (end -1.174773 -1) (layer F.Fab) (width 0.1)) (fp_line (start -1.374773 -1.2) (end -1.374773 -0.8) (layer F.Fab) (width 0.1)) (fp_line (start 2.26 2.26) (end 2.26 1.06) (layer F.SilkS) (width 0.12)) (fp_line (start 2.26 -2.26) (end 2.26 -1.06) (layer F.SilkS) (width 0.12)) (fp_line (start -1.195563 -2.26) (end 2.26 -2.26) (layer F.SilkS) (width 0.12)) (fp_line (start -1.195563 2.26) (end 2.26 2.26) (layer F.SilkS) (width 0.12)) (fp_line (start -2.26 1.195563) (end -2.26 1.06) (layer F.SilkS) (width 0.12)) (fp_line (start -2.26 -1.195563) (end -2.26 -1.06) (layer F.SilkS) (width 0.12)) (fp_line (start -2.26 -1.195563) (end -1.195563 -2.26) (layer F.SilkS) (width 0.12)) (fp_line (start -2.26 1.195563) (end -1.195563 2.26) (layer F.SilkS) (width 0.12)) (fp_line (start -3 -1.56) (end -2.5 -1.56) (layer F.SilkS) (width 0.12)) (fp_line (start -2.75 -1.81) (end -2.75 -1.31) (layer F.SilkS) (width 0.12)) (fp_line (start 2.4 -2.4) (end 2.4 -1.05) (layer F.CrtYd) (width 0.05)) (fp_line (start 2.4 -1.05) (end 3.35 -1.05) (layer F.CrtYd) (width 0.05)) (fp_line (start 3.35 -1.05) (end 3.35 1.05) (layer F.CrtYd) (width 0.05)) (fp_line (start 3.35 1.05) (end 2.4 1.05) (layer F.CrtYd) (width 0.05)) (fp_line (start 2.4 1.05) (end 2.4 2.4) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.25 2.4) (end 2.4 2.4) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.25 -2.4) (end 2.4 -2.4) (layer F.CrtYd) (width 0.05)) (fp_line (start -2.4 1.25) (end -1.25 2.4) (layer F.CrtYd) (width 0.05)) (fp_line (start -2.4 -1.25) (end -1.25 -2.4) (layer F.CrtYd) (width 0.05)) (fp_line (start -2.4 -1.25) (end -2.4 -1.05) (layer F.CrtYd) (width 0.05)) (fp_line (start -2.4 1.05) (end -2.4 1.25) (layer F.CrtYd) (width 0.05)) (fp_line (start -2.4 -1.05) (end -3.35 -1.05) (layer F.CrtYd) (width 0.05)) (fp_line (start -3.35 -1.05) (end -3.35 1.05) (layer F.CrtYd) (width 0.05)) (fp_line (start -3.35 1.05) (end -2.4 1.05) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.8 0.8) (thickness 0.12))) ) (pad 2 smd roundrect (at 1.8 0 180) (size 2.6 1.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.15625) (net 1 GND)) (pad 1 smd roundrect (at -1.8 0 180) (size 2.6 1.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.15625) (net 40 +3V3)) (model ${KISYS3DMOD}/Capacitor_SMD.3dshapes/CP_Elec_4x5.3.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Capacitor_SMD:CP_Elec_8x10 (layer F.Cu) (tedit 5BCA39D0) (tstamp 6016A9C5) (at 144.78 31.75 270) (descr "SMD capacitor, aluminum electrolytic, Nichicon, 8.0x10mm") (tags "capacitor electrolytic") (path /60F564AB) (attr smd) (fp_text reference C3 (at 5.08 3.175 180) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value 100uF (at 0 5.2 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_circle (center 0 0) (end 4 0) (layer F.Fab) (width 0.1)) (fp_line (start 4.15 -4.15) (end 4.15 4.15) (layer F.Fab) (width 0.1)) (fp_line (start -3.15 -4.15) (end 4.15 -4.15) (layer F.Fab) (width 0.1)) (fp_line (start -3.15 4.15) (end 4.15 4.15) (layer F.Fab) (width 0.1)) (fp_line (start -4.15 -3.15) (end -4.15 3.15) (layer F.Fab) (width 0.1)) (fp_line (start -4.15 -3.15) (end -3.15 -4.15) (layer F.Fab) (width 0.1)) (fp_line (start -4.15 3.15) (end -3.15 4.15) (layer F.Fab) (width 0.1)) (fp_line (start -3.562278 -1.5) (end -2.762278 -1.5) (layer F.Fab) (width 0.1)) (fp_line (start -3.162278 -1.9) (end -3.162278 -1.1) (layer F.Fab) (width 0.1)) (fp_line (start 4.26 4.26) (end 4.26 1.51) (layer F.SilkS) (width 0.12)) (fp_line (start 4.26 -4.26) (end 4.26 -1.51) (layer F.SilkS) (width 0.12)) (fp_line (start -3.195563 -4.26) (end 4.26 -4.26) (layer F.SilkS) (width 0.12)) (fp_line (start -3.195563 4.26) (end 4.26 4.26) (layer F.SilkS) (width 0.12)) (fp_line (start -4.26 3.195563) (end -4.26 1.51) (layer F.SilkS) (width 0.12)) (fp_line (start -4.26 -3.195563) (end -4.26 -1.51) (layer F.SilkS) (width 0.12)) (fp_line (start -4.26 -3.195563) (end -3.195563 -4.26) (layer F.SilkS) (width 0.12)) (fp_line (start -4.26 3.195563) (end -3.195563 4.26) (layer F.SilkS) (width 0.12)) (fp_line (start -5.5 -2.51) (end -4.5 -2.51) (layer F.SilkS) (width 0.12)) (fp_line (start -5 -3.01) (end -5 -2.01) (layer F.SilkS) (width 0.12)) (fp_line (start 4.4 -4.4) (end 4.4 -1.5) (layer F.CrtYd) (width 0.05)) (fp_line (start 4.4 -1.5) (end 5.25 -1.5) (layer F.CrtYd) (width 0.05)) (fp_line (start 5.25 -1.5) (end 5.25 1.5) (layer F.CrtYd) (width 0.05)) (fp_line (start 5.25 1.5) (end 4.4 1.5) (layer F.CrtYd) (width 0.05)) (fp_line (start 4.4 1.5) (end 4.4 4.4) (layer F.CrtYd) (width 0.05)) (fp_line (start -3.25 4.4) (end 4.4 4.4) (layer F.CrtYd) (width 0.05)) (fp_line (start -3.25 -4.4) (end 4.4 -4.4) (layer F.CrtYd) (width 0.05)) (fp_line (start -4.4 3.25) (end -3.25 4.4) (layer F.CrtYd) (width 0.05)) (fp_line (start -4.4 -3.25) (end -3.25 -4.4) (layer F.CrtYd) (width 0.05)) (fp_line (start -4.4 -3.25) (end -4.4 -1.5) (layer F.CrtYd) (width 0.05)) (fp_line (start -4.4 1.5) (end -4.4 3.25) (layer F.CrtYd) (width 0.05)) (fp_line (start -4.4 -1.5) (end -5.25 -1.5) (layer F.CrtYd) (width 0.05)) (fp_line (start -5.25 -1.5) (end -5.25 1.5) (layer F.CrtYd) (width 0.05)) (fp_line (start -5.25 1.5) (end -4.4 1.5) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 0 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 2 smd roundrect (at 3.25 0 270) (size 3.5 2.5) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.1) (net 1 GND)) (pad 1 smd roundrect (at -3.25 0 270) (size 3.5 2.5) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.1) (net 2 +12V)) (model ${KISYS3DMOD}/Capacitor_SMD.3dshapes/CP_Elec_8x10.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Resistor_SMD:R_0603_1608Metric (layer F.Cu) (tedit 5F68FEEE) (tstamp 6016C560) (at 92.71 44.45) (descr "Resistor SMD 0603 (1608 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") (tags resistor) (path /61377DF8) (attr smd) (fp_text reference R9 (at -3.175 0) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value 47k (at 0 1.43) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 1.48 0.73) (end -1.48 0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.48 -0.73) (end 1.48 0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.48 -0.73) (end 1.48 -0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.48 0.73) (end -1.48 -0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start -0.237258 0.5225) (end 0.237258 0.5225) (layer F.SilkS) (width 0.12)) (fp_line (start -0.237258 -0.5225) (end 0.237258 -0.5225) (layer F.SilkS) (width 0.12)) (fp_line (start 0.8 0.4125) (end -0.8 0.4125) (layer F.Fab) (width 0.1)) (fp_line (start 0.8 -0.4125) (end 0.8 0.4125) (layer F.Fab) (width 0.1)) (fp_line (start -0.8 -0.4125) (end 0.8 -0.4125) (layer F.Fab) (width 0.1)) (fp_line (start -0.8 0.4125) (end -0.8 -0.4125) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.4 0.4) (thickness 0.06))) ) (pad 2 smd roundrect (at 0.825 0) (size 0.8 0.95) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 3 /SENSOR_D)) (pad 1 smd roundrect (at -0.825 0) (size 0.8 0.95) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 40 +3V3)) (model ${KISYS3DMOD}/Resistor_SMD.3dshapes/R_0603_1608Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Resistor_SMD:R_0603_1608Metric (layer F.Cu) (tedit 5F68FEEE) (tstamp 6018FD67) (at 158.75 44.45) (descr "Resistor SMD 0603 (1608 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") (tags resistor) (path /6135363A) (attr smd) (fp_text reference R8 (at -3.175 0) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value 47k (at 0 1.43) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 1.48 0.73) (end -1.48 0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.48 -0.73) (end 1.48 0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.48 -0.73) (end 1.48 -0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.48 0.73) (end -1.48 -0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start -0.237258 0.5225) (end 0.237258 0.5225) (layer F.SilkS) (width 0.12)) (fp_line (start -0.237258 -0.5225) (end 0.237258 -0.5225) (layer F.SilkS) (width 0.12)) (fp_line (start 0.8 0.4125) (end -0.8 0.4125) (layer F.Fab) (width 0.1)) (fp_line (start 0.8 -0.4125) (end 0.8 0.4125) (layer F.Fab) (width 0.1)) (fp_line (start -0.8 -0.4125) (end 0.8 -0.4125) (layer F.Fab) (width 0.1)) (fp_line (start -0.8 0.4125) (end -0.8 -0.4125) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.4 0.4) (thickness 0.06))) ) (pad 2 smd roundrect (at 0.825 0) (size 0.8 0.95) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 4 /SENSOR_C)) (pad 1 smd roundrect (at -0.825 0) (size 0.8 0.95) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 40 +3V3)) (model ${KISYS3DMOD}/Resistor_SMD.3dshapes/R_0603_1608Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Resistor_SMD:R_0603_1608Metric (layer F.Cu) (tedit 5F68FEEE) (tstamp 60179D88) (at 177.8 44.45) (descr "Resistor SMD 0603 (1608 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") (tags resistor) (path /61341901) (attr smd) (fp_text reference R7 (at -3.175 0) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value 47k (at 0 1.43) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 1.48 0.73) (end -1.48 0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.48 -0.73) (end 1.48 0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.48 -0.73) (end 1.48 -0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.48 0.73) (end -1.48 -0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start -0.237258 0.5225) (end 0.237258 0.5225) (layer F.SilkS) (width 0.12)) (fp_line (start -0.237258 -0.5225) (end 0.237258 -0.5225) (layer F.SilkS) (width 0.12)) (fp_line (start 0.8 0.4125) (end -0.8 0.4125) (layer F.Fab) (width 0.1)) (fp_line (start 0.8 -0.4125) (end 0.8 0.4125) (layer F.Fab) (width 0.1)) (fp_line (start -0.8 -0.4125) (end 0.8 -0.4125) (layer F.Fab) (width 0.1)) (fp_line (start -0.8 0.4125) (end -0.8 -0.4125) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.4 0.4) (thickness 0.06))) ) (pad 2 smd roundrect (at 0.825 0) (size 0.8 0.95) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 5 /SENSOR_B)) (pad 1 smd roundrect (at -0.825 0) (size 0.8 0.95) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 40 +3V3)) (model ${KISYS3DMOD}/Resistor_SMD.3dshapes/R_0603_1608Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Resistor_SMD:R_0603_1608Metric (layer F.Cu) (tedit 5F68FEEE) (tstamp 60167C53) (at 196.85 44.45) (descr "Resistor SMD 0603 (1608 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") (tags resistor) (path /612FA26A) (attr smd) (fp_text reference R6 (at -3.175 0) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value 47k (at 0 1.43) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 1.48 0.73) (end -1.48 0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.48 -0.73) (end 1.48 0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.48 -0.73) (end 1.48 -0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.48 0.73) (end -1.48 -0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start -0.237258 0.5225) (end 0.237258 0.5225) (layer F.SilkS) (width 0.12)) (fp_line (start -0.237258 -0.5225) (end 0.237258 -0.5225) (layer F.SilkS) (width 0.12)) (fp_line (start 0.8 0.4125) (end -0.8 0.4125) (layer F.Fab) (width 0.1)) (fp_line (start 0.8 -0.4125) (end 0.8 0.4125) (layer F.Fab) (width 0.1)) (fp_line (start -0.8 -0.4125) (end 0.8 -0.4125) (layer F.Fab) (width 0.1)) (fp_line (start -0.8 0.4125) (end -0.8 -0.4125) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.4 0.4) (thickness 0.06))) ) (pad 2 smd roundrect (at 0.825 0) (size 0.8 0.95) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 6 /SENSOR_A)) (pad 1 smd roundrect (at -0.825 0) (size 0.8 0.95) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 40 +3V3)) (model ${KISYS3DMOD}/Resistor_SMD.3dshapes/R_0603_1608Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Resistor_SMD:R_0603_1608Metric (layer F.Cu) (tedit 5F68FEEE) (tstamp 60167C42) (at 100.965 52.705) (descr "Resistor SMD 0603 (1608 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") (tags resistor) (path /610FBD9A) (attr smd) (fp_text reference R5 (at 0 1.27) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value 220R (at 0 1.43) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 1.48 0.73) (end -1.48 0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.48 -0.73) (end 1.48 0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.48 -0.73) (end 1.48 -0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.48 0.73) (end -1.48 -0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start -0.237258 0.5225) (end 0.237258 0.5225) (layer F.SilkS) (width 0.12)) (fp_line (start -0.237258 -0.5225) (end 0.237258 -0.5225) (layer F.SilkS) (width 0.12)) (fp_line (start 0.8 0.4125) (end -0.8 0.4125) (layer F.Fab) (width 0.1)) (fp_line (start 0.8 -0.4125) (end 0.8 0.4125) (layer F.Fab) (width 0.1)) (fp_line (start -0.8 -0.4125) (end 0.8 -0.4125) (layer F.Fab) (width 0.1)) (fp_line (start -0.8 0.4125) (end -0.8 -0.4125) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.4 0.4) (thickness 0.06))) ) (pad 2 smd roundrect (at 0.825 0) (size 0.8 0.95) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 49 /LED_D)) (pad 1 smd roundrect (at -0.825 0) (size 0.8 0.95) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 44 "Net-(D4-Pad2)")) (model ${KISYS3DMOD}/Resistor_SMD.3dshapes/R_0603_1608Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Resistor_SMD:R_0603_1608Metric (layer F.Cu) (tedit 5F68FEEE) (tstamp 601B728D) (at 151.13 52.705 180) (descr "Resistor SMD 0603 (1608 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") (tags resistor) (path /610FBBBD) (attr smd) (fp_text reference R4 (at 0 -1.27) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value 220R (at 0 1.43) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 1.48 0.73) (end -1.48 0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.48 -0.73) (end 1.48 0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.48 -0.73) (end 1.48 -0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.48 0.73) (end -1.48 -0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start -0.237258 0.5225) (end 0.237258 0.5225) (layer F.SilkS) (width 0.12)) (fp_line (start -0.237258 -0.5225) (end 0.237258 -0.5225) (layer F.SilkS) (width 0.12)) (fp_line (start 0.8 0.4125) (end -0.8 0.4125) (layer F.Fab) (width 0.1)) (fp_line (start 0.8 -0.4125) (end 0.8 0.4125) (layer F.Fab) (width 0.1)) (fp_line (start -0.8 -0.4125) (end 0.8 -0.4125) (layer F.Fab) (width 0.1)) (fp_line (start -0.8 0.4125) (end -0.8 -0.4125) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.4 0.4) (thickness 0.06))) ) (pad 2 smd roundrect (at 0.825 0 180) (size 0.8 0.95) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 48 /LED_C)) (pad 1 smd roundrect (at -0.825 0 180) (size 0.8 0.95) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 43 "Net-(D3-Pad2)")) (model ${KISYS3DMOD}/Resistor_SMD.3dshapes/R_0603_1608Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Resistor_SMD:R_0603_1608Metric (layer F.Cu) (tedit 5F68FEEE) (tstamp 60167C20) (at 167.005 52.705 180) (descr "Resistor SMD 0603 (1608 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") (tags resistor) (path /610EBF7E) (attr smd) (fp_text reference R3 (at 0 -1.27) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value 220R (at 0 1.43) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 1.48 0.73) (end -1.48 0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.48 -0.73) (end 1.48 0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.48 -0.73) (end 1.48 -0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.48 0.73) (end -1.48 -0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start -0.237258 0.5225) (end 0.237258 0.5225) (layer F.SilkS) (width 0.12)) (fp_line (start -0.237258 -0.5225) (end 0.237258 -0.5225) (layer F.SilkS) (width 0.12)) (fp_line (start 0.8 0.4125) (end -0.8 0.4125) (layer F.Fab) (width 0.1)) (fp_line (start 0.8 -0.4125) (end 0.8 0.4125) (layer F.Fab) (width 0.1)) (fp_line (start -0.8 -0.4125) (end 0.8 -0.4125) (layer F.Fab) (width 0.1)) (fp_line (start -0.8 0.4125) (end -0.8 -0.4125) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.4 0.4) (thickness 0.06))) ) (pad 2 smd roundrect (at 0.825 0 180) (size 0.8 0.95) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 47 /LED_B)) (pad 1 smd roundrect (at -0.825 0 180) (size 0.8 0.95) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 42 "Net-(D2-Pad2)")) (model ${KISYS3DMOD}/Resistor_SMD.3dshapes/R_0603_1608Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Resistor_SMD:R_0603_1608Metric (layer F.Cu) (tedit 5F68FEEE) (tstamp 60167C0F) (at 186.055 52.705 180) (descr "Resistor SMD 0603 (1608 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") (tags resistor) (path /610CD129) (attr smd) (fp_text reference R2 (at 0 -1.27) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value 220R (at 0 1.43) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 1.48 0.73) (end -1.48 0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.48 -0.73) (end 1.48 0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.48 -0.73) (end 1.48 -0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.48 0.73) (end -1.48 -0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start -0.237258 0.5225) (end 0.237258 0.5225) (layer F.SilkS) (width 0.12)) (fp_line (start -0.237258 -0.5225) (end 0.237258 -0.5225) (layer F.SilkS) (width 0.12)) (fp_line (start 0.8 0.4125) (end -0.8 0.4125) (layer F.Fab) (width 0.1)) (fp_line (start 0.8 -0.4125) (end 0.8 0.4125) (layer F.Fab) (width 0.1)) (fp_line (start -0.8 -0.4125) (end 0.8 -0.4125) (layer F.Fab) (width 0.1)) (fp_line (start -0.8 0.4125) (end -0.8 -0.4125) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.4 0.4) (thickness 0.06))) ) (pad 2 smd roundrect (at 0.825 0 180) (size 0.8 0.95) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 46 /LED_A)) (pad 1 smd roundrect (at -0.825 0 180) (size 0.8 0.95) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 41 "Net-(D1-Pad2)")) (model ${KISYS3DMOD}/Resistor_SMD.3dshapes/R_0603_1608Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_Vertical (layer F.Cu) (tedit 59FED5CC) (tstamp 601784D4) (at 88.9 46.99 90) (descr "Through hole straight pin header, 1x03, 2.54mm pitch, single row") (tags "Through hole pin header THT 1x03 2.54mm single row") (path /61156491) (fp_text reference J11 (at 0 -2.33 90) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value Sensor (at 0 7.41 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 1.8 -1.8) (end -1.8 -1.8) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.8 6.85) (end 1.8 -1.8) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.8 6.85) (end 1.8 6.85) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.8 -1.8) (end -1.8 6.85) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.33 -1.33) (end 0 -1.33) (layer F.SilkS) (width 0.12)) (fp_line (start -1.33 0) (end -1.33 -1.33) (layer F.SilkS) (width 0.12)) (fp_line (start -1.33 1.27) (end 1.33 1.27) (layer F.SilkS) (width 0.12)) (fp_line (start 1.33 1.27) (end 1.33 6.41) (layer F.SilkS) (width 0.12)) (fp_line (start -1.33 1.27) (end -1.33 6.41) (layer F.SilkS) (width 0.12)) (fp_line (start -1.33 6.41) (end 1.33 6.41) (layer F.SilkS) (width 0.12)) (fp_line (start -1.27 -0.635) (end -0.635 -1.27) (layer F.Fab) (width 0.1)) (fp_line (start -1.27 6.35) (end -1.27 -0.635) (layer F.Fab) (width 0.1)) (fp_line (start 1.27 6.35) (end -1.27 6.35) (layer F.Fab) (width 0.1)) (fp_line (start 1.27 -1.27) (end 1.27 6.35) (layer F.Fab) (width 0.1)) (fp_line (start -0.635 -1.27) (end 1.27 -1.27) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 2.54) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 3 thru_hole oval (at 0 5.08 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 3 /SENSOR_D)) (pad 2 thru_hole oval (at 0 2.54 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 40 +3V3)) (pad 1 thru_hole rect (at 0 0 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 1 GND)) (model ${KISYS3DMOD}/Connector_PinHeader_2.54mm.3dshapes/PinHeader_1x03_P2.54mm_Vertical.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_Vertical (layer F.Cu) (tedit 59FED5CC) (tstamp 60167BD6) (at 154.94 46.99 90) (descr "Through hole straight pin header, 1x03, 2.54mm pitch, single row") (tags "Through hole pin header THT 1x03 2.54mm single row") (path /61155EE4) (fp_text reference J10 (at 0 -2.33 90) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value Sensor (at 0 7.41 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 1.8 -1.8) (end -1.8 -1.8) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.8 6.85) (end 1.8 -1.8) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.8 6.85) (end 1.8 6.85) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.8 -1.8) (end -1.8 6.85) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.33 -1.33) (end 0 -1.33) (layer F.SilkS) (width 0.12)) (fp_line (start -1.33 0) (end -1.33 -1.33) (layer F.SilkS) (width 0.12)) (fp_line (start -1.33 1.27) (end 1.33 1.27) (layer F.SilkS) (width 0.12)) (fp_line (start 1.33 1.27) (end 1.33 6.41) (layer F.SilkS) (width 0.12)) (fp_line (start -1.33 1.27) (end -1.33 6.41) (layer F.SilkS) (width 0.12)) (fp_line (start -1.33 6.41) (end 1.33 6.41) (layer F.SilkS) (width 0.12)) (fp_line (start -1.27 -0.635) (end -0.635 -1.27) (layer F.Fab) (width 0.1)) (fp_line (start -1.27 6.35) (end -1.27 -0.635) (layer F.Fab) (width 0.1)) (fp_line (start 1.27 6.35) (end -1.27 6.35) (layer F.Fab) (width 0.1)) (fp_line (start 1.27 -1.27) (end 1.27 6.35) (layer F.Fab) (width 0.1)) (fp_line (start -0.635 -1.27) (end 1.27 -1.27) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 2.54) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 3 thru_hole oval (at 0 5.08 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 4 /SENSOR_C)) (pad 2 thru_hole oval (at 0 2.54 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 40 +3V3)) (pad 1 thru_hole rect (at 0 0 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 1 GND)) (model ${KISYS3DMOD}/Connector_PinHeader_2.54mm.3dshapes/PinHeader_1x03_P2.54mm_Vertical.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_Vertical (layer F.Cu) (tedit 59FED5CC) (tstamp 60167BBF) (at 173.99 46.99 90) (descr "Through hole straight pin header, 1x03, 2.54mm pitch, single row") (tags "Through hole pin header THT 1x03 2.54mm single row") (path /6115565C) (fp_text reference J9 (at 0 -2.33 90) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value Sensor (at 0 7.41 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 1.8 -1.8) (end -1.8 -1.8) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.8 6.85) (end 1.8 -1.8) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.8 6.85) (end 1.8 6.85) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.8 -1.8) (end -1.8 6.85) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.33 -1.33) (end 0 -1.33) (layer F.SilkS) (width 0.12)) (fp_line (start -1.33 0) (end -1.33 -1.33) (layer F.SilkS) (width 0.12)) (fp_line (start -1.33 1.27) (end 1.33 1.27) (layer F.SilkS) (width 0.12)) (fp_line (start 1.33 1.27) (end 1.33 6.41) (layer F.SilkS) (width 0.12)) (fp_line (start -1.33 1.27) (end -1.33 6.41) (layer F.SilkS) (width 0.12)) (fp_line (start -1.33 6.41) (end 1.33 6.41) (layer F.SilkS) (width 0.12)) (fp_line (start -1.27 -0.635) (end -0.635 -1.27) (layer F.Fab) (width 0.1)) (fp_line (start -1.27 6.35) (end -1.27 -0.635) (layer F.Fab) (width 0.1)) (fp_line (start 1.27 6.35) (end -1.27 6.35) (layer F.Fab) (width 0.1)) (fp_line (start 1.27 -1.27) (end 1.27 6.35) (layer F.Fab) (width 0.1)) (fp_line (start -0.635 -1.27) (end 1.27 -1.27) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 2.54) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 3 thru_hole oval (at 0 5.08 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 5 /SENSOR_B)) (pad 2 thru_hole oval (at 0 2.54 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 40 +3V3)) (pad 1 thru_hole rect (at 0 0 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 1 GND)) (model ${KISYS3DMOD}/Connector_PinHeader_2.54mm.3dshapes/PinHeader_1x03_P2.54mm_Vertical.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_Vertical (layer F.Cu) (tedit 59FED5CC) (tstamp 60172FDA) (at 193.04 46.99 90) (descr "Through hole straight pin header, 1x03, 2.54mm pitch, single row") (tags "Through hole pin header THT 1x03 2.54mm single row") (path /61119DE9) (fp_text reference J8 (at 0 -2.33 90) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value Sensor (at 0 7.41 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 1.8 -1.8) (end -1.8 -1.8) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.8 6.85) (end 1.8 -1.8) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.8 6.85) (end 1.8 6.85) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.8 -1.8) (end -1.8 6.85) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.33 -1.33) (end 0 -1.33) (layer F.SilkS) (width 0.12)) (fp_line (start -1.33 0) (end -1.33 -1.33) (layer F.SilkS) (width 0.12)) (fp_line (start -1.33 1.27) (end 1.33 1.27) (layer F.SilkS) (width 0.12)) (fp_line (start 1.33 1.27) (end 1.33 6.41) (layer F.SilkS) (width 0.12)) (fp_line (start -1.33 1.27) (end -1.33 6.41) (layer F.SilkS) (width 0.12)) (fp_line (start -1.33 6.41) (end 1.33 6.41) (layer F.SilkS) (width 0.12)) (fp_line (start -1.27 -0.635) (end -0.635 -1.27) (layer F.Fab) (width 0.1)) (fp_line (start -1.27 6.35) (end -1.27 -0.635) (layer F.Fab) (width 0.1)) (fp_line (start 1.27 6.35) (end -1.27 6.35) (layer F.Fab) (width 0.1)) (fp_line (start 1.27 -1.27) (end 1.27 6.35) (layer F.Fab) (width 0.1)) (fp_line (start -0.635 -1.27) (end 1.27 -1.27) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 2.54) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 3 thru_hole oval (at 0 5.08 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 6 /SENSOR_A)) (pad 2 thru_hole oval (at 0 2.54 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 40 +3V3)) (pad 1 thru_hole rect (at 0 0 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 1 GND)) (model ${KISYS3DMOD}/Connector_PinHeader_2.54mm.3dshapes/PinHeader_1x03_P2.54mm_Vertical.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Capacitor_SMD:C_0603_1608Metric (layer F.Cu) (tedit 5F68FEEE) (tstamp 6016CA53) (at 175.26 34.29 90) (descr "Capacitor SMD 0603 (1608 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") (tags capacitor) (path /6427B27B) (attr smd) (fp_text reference C10 (at -3.175 0 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value 0.1uF (at 0 1.43 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 1.48 0.73) (end -1.48 0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.48 -0.73) (end 1.48 0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.48 -0.73) (end 1.48 -0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.48 0.73) (end -1.48 -0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start -0.14058 0.51) (end 0.14058 0.51) (layer F.SilkS) (width 0.12)) (fp_line (start -0.14058 -0.51) (end 0.14058 -0.51) (layer F.SilkS) (width 0.12)) (fp_line (start 0.8 0.4) (end -0.8 0.4) (layer F.Fab) (width 0.1)) (fp_line (start 0.8 -0.4) (end 0.8 0.4) (layer F.Fab) (width 0.1)) (fp_line (start -0.8 -0.4) (end 0.8 -0.4) (layer F.Fab) (width 0.1)) (fp_line (start -0.8 0.4) (end -0.8 -0.4) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 0 90) (layer F.Fab) (effects (font (size 0.4 0.4) (thickness 0.06))) ) (pad 2 smd roundrect (at 0.775 0 90) (size 0.9 0.95) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 2 +12V)) (pad 1 smd roundrect (at -0.775 0 90) (size 0.9 0.95) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 1 GND)) (model ${KISYS3DMOD}/Capacitor_SMD.3dshapes/C_0603_1608Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Capacitor_SMD:C_0603_1608Metric (layer F.Cu) (tedit 5F68FEEE) (tstamp 60167A8F) (at 93.345 34.29 90) (descr "Capacitor SMD 0603 (1608 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") (tags capacitor) (path /6419F821) (attr smd) (fp_text reference C9 (at -2.54 0 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value 0.1uF (at 0 1.43 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 1.48 0.73) (end -1.48 0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.48 -0.73) (end 1.48 0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.48 -0.73) (end 1.48 -0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.48 0.73) (end -1.48 -0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start -0.14058 0.51) (end 0.14058 0.51) (layer F.SilkS) (width 0.12)) (fp_line (start -0.14058 -0.51) (end 0.14058 -0.51) (layer F.SilkS) (width 0.12)) (fp_line (start 0.8 0.4) (end -0.8 0.4) (layer F.Fab) (width 0.1)) (fp_line (start 0.8 -0.4) (end 0.8 0.4) (layer F.Fab) (width 0.1)) (fp_line (start -0.8 -0.4) (end 0.8 -0.4) (layer F.Fab) (width 0.1)) (fp_line (start -0.8 0.4) (end -0.8 -0.4) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 0 90) (layer F.Fab) (effects (font (size 0.4 0.4) (thickness 0.06))) ) (pad 2 smd roundrect (at 0.775 0 90) (size 0.9 0.95) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 2 +12V)) (pad 1 smd roundrect (at -0.775 0 90) (size 0.9 0.95) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 1 GND)) (model ${KISYS3DMOD}/Capacitor_SMD.3dshapes/C_0603_1608Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Capacitor_SMD:C_0603_1608Metric (layer F.Cu) (tedit 5F68FEEE) (tstamp 60167A7E) (at 187.96 39.37 90) (descr "Capacitor SMD 0603 (1608 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") (tags capacitor) (path /5FFE5CEE) (attr smd) (fp_text reference C7 (at 2.54 0 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value 0.1uF (at 0 1.43 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 1.48 0.73) (end -1.48 0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.48 -0.73) (end 1.48 0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.48 -0.73) (end 1.48 -0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.48 0.73) (end -1.48 -0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start -0.14058 0.51) (end 0.14058 0.51) (layer F.SilkS) (width 0.12)) (fp_line (start -0.14058 -0.51) (end 0.14058 -0.51) (layer F.SilkS) (width 0.12)) (fp_line (start 0.8 0.4) (end -0.8 0.4) (layer F.Fab) (width 0.1)) (fp_line (start 0.8 -0.4) (end 0.8 0.4) (layer F.Fab) (width 0.1)) (fp_line (start -0.8 -0.4) (end 0.8 -0.4) (layer F.Fab) (width 0.1)) (fp_line (start -0.8 0.4) (end -0.8 -0.4) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 0 90) (layer F.Fab) (effects (font (size 0.4 0.4) (thickness 0.06))) ) (pad 2 smd roundrect (at 0.775 0 90) (size 0.9 0.95) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 1 GND)) (pad 1 smd roundrect (at -0.775 0 90) (size 0.9 0.95) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 40 +3V3)) (model ${KISYS3DMOD}/Capacitor_SMD.3dshapes/C_0603_1608Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Capacitor_SMD:C_0603_1608Metric (layer F.Cu) (tedit 5F68FEEE) (tstamp 60167A6D) (at 106.045 38.1 90) (descr "Capacitor SMD 0603 (1608 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") (tags capacitor) (path /601B1A47) (attr smd) (fp_text reference C6 (at 2.54 0 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value 0.1uF (at 0 1.43 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 1.48 0.73) (end -1.48 0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.48 -0.73) (end 1.48 0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.48 -0.73) (end 1.48 -0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.48 0.73) (end -1.48 -0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start -0.14058 0.51) (end 0.14058 0.51) (layer F.SilkS) (width 0.12)) (fp_line (start -0.14058 -0.51) (end 0.14058 -0.51) (layer F.SilkS) (width 0.12)) (fp_line (start 0.8 0.4) (end -0.8 0.4) (layer F.Fab) (width 0.1)) (fp_line (start 0.8 -0.4) (end 0.8 0.4) (layer F.Fab) (width 0.1)) (fp_line (start -0.8 -0.4) (end 0.8 -0.4) (layer F.Fab) (width 0.1)) (fp_line (start -0.8 0.4) (end -0.8 -0.4) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 0 90) (layer F.Fab) (effects (font (size 0.4 0.4) (thickness 0.06))) ) (pad 2 smd roundrect (at 0.775 0 90) (size 0.9 0.95) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 1 GND)) (pad 1 smd roundrect (at -0.775 0 90) (size 0.9 0.95) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 40 +3V3)) (model ${KISYS3DMOD}/Capacitor_SMD.3dshapes/C_0603_1608Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Capacitor_SMD:C_0603_1608Metric (layer F.Cu) (tedit 5F68FEEE) (tstamp 60167A5C) (at 162.56 39.37 90) (descr "Capacitor SMD 0603 (1608 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") (tags capacitor) (path /5FFE5A33) (attr smd) (fp_text reference C5 (at 2.54 0 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value 0.1uF (at 0 1.43 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 1.48 0.73) (end -1.48 0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.48 -0.73) (end 1.48 0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.48 -0.73) (end 1.48 -0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.48 0.73) (end -1.48 -0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start -0.14058 0.51) (end 0.14058 0.51) (layer F.SilkS) (width 0.12)) (fp_line (start -0.14058 -0.51) (end 0.14058 -0.51) (layer F.SilkS) (width 0.12)) (fp_line (start 0.8 0.4) (end -0.8 0.4) (layer F.Fab) (width 0.1)) (fp_line (start 0.8 -0.4) (end 0.8 0.4) (layer F.Fab) (width 0.1)) (fp_line (start -0.8 -0.4) (end 0.8 -0.4) (layer F.Fab) (width 0.1)) (fp_line (start -0.8 0.4) (end -0.8 -0.4) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 0 90) (layer F.Fab) (effects (font (size 0.4 0.4) (thickness 0.06))) ) (pad 2 smd roundrect (at 0.775 0 90) (size 0.9 0.95) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 1 GND)) (pad 1 smd roundrect (at -0.775 0 90) (size 0.9 0.95) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 40 +3V3)) (model ${KISYS3DMOD}/Capacitor_SMD.3dshapes/C_0603_1608Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Capacitor_SMD:C_0603_1608Metric (layer F.Cu) (tedit 5F68FEEE) (tstamp 601BA994) (at 52.07 33.02 180) (descr "Capacitor SMD 0603 (1608 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") (tags capacitor) (path /5FFE56BF) (attr smd) (fp_text reference C4 (at -2.54 0) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value 0.1uF (at 0 1.43) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 1.48 0.73) (end -1.48 0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.48 -0.73) (end 1.48 0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.48 -0.73) (end 1.48 -0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.48 0.73) (end -1.48 -0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start -0.14058 0.51) (end 0.14058 0.51) (layer F.SilkS) (width 0.12)) (fp_line (start -0.14058 -0.51) (end 0.14058 -0.51) (layer F.SilkS) (width 0.12)) (fp_line (start 0.8 0.4) (end -0.8 0.4) (layer F.Fab) (width 0.1)) (fp_line (start 0.8 -0.4) (end 0.8 0.4) (layer F.Fab) (width 0.1)) (fp_line (start -0.8 -0.4) (end 0.8 -0.4) (layer F.Fab) (width 0.1)) (fp_line (start -0.8 0.4) (end -0.8 -0.4) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.4 0.4) (thickness 0.06))) ) (pad 2 smd roundrect (at 0.775 0 180) (size 0.9 0.95) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 1 GND)) (pad 1 smd roundrect (at -0.775 0 180) (size 0.9 0.95) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 40 +3V3)) (model ${KISYS3DMOD}/Capacitor_SMD.3dshapes/C_0603_1608Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Capacitor_SMD:C_0603_1608Metric (layer F.Cu) (tedit 5F68FEEE) (tstamp 60167A3A) (at 149.86 44.45 270) (descr "Capacitor SMD 0603 (1608 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") (tags capacitor) (path /5FFE4F2C) (attr smd) (fp_text reference C2 (at 0 -1.43 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value 0.1uF (at 0 1.43 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 1.48 0.73) (end -1.48 0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.48 -0.73) (end 1.48 0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.48 -0.73) (end 1.48 -0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.48 0.73) (end -1.48 -0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start -0.14058 0.51) (end 0.14058 0.51) (layer F.SilkS) (width 0.12)) (fp_line (start -0.14058 -0.51) (end 0.14058 -0.51) (layer F.SilkS) (width 0.12)) (fp_line (start 0.8 0.4) (end -0.8 0.4) (layer F.Fab) (width 0.1)) (fp_line (start 0.8 -0.4) (end 0.8 0.4) (layer F.Fab) (width 0.1)) (fp_line (start -0.8 -0.4) (end 0.8 -0.4) (layer F.Fab) (width 0.1)) (fp_line (start -0.8 0.4) (end -0.8 -0.4) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 0 90) (layer F.Fab) (effects (font (size 0.4 0.4) (thickness 0.06))) ) (pad 2 smd roundrect (at 0.775 0 270) (size 0.9 0.95) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 1 GND)) (pad 1 smd roundrect (at -0.775 0 270) (size 0.9 0.95) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 40 +3V3)) (model ${KISYS3DMOD}/Capacitor_SMD.3dshapes/C_0603_1608Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Capacitor_SMD:C_0603_1608Metric (layer F.Cu) (tedit 5F68FEEE) (tstamp 60167A29) (at 200.66 34.29 90) (descr "Capacitor SMD 0603 (1608 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") (tags capacitor) (path /63182B65) (attr smd) (fp_text reference C1 (at 0 1.27 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value 0.1uF (at 0 1.43 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 1.48 0.73) (end -1.48 0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.48 -0.73) (end 1.48 0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.48 -0.73) (end 1.48 -0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.48 0.73) (end -1.48 -0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start -0.14058 0.51) (end 0.14058 0.51) (layer F.SilkS) (width 0.12)) (fp_line (start -0.14058 -0.51) (end 0.14058 -0.51) (layer F.SilkS) (width 0.12)) (fp_line (start 0.8 0.4) (end -0.8 0.4) (layer F.Fab) (width 0.1)) (fp_line (start 0.8 -0.4) (end 0.8 0.4) (layer F.Fab) (width 0.1)) (fp_line (start -0.8 -0.4) (end 0.8 -0.4) (layer F.Fab) (width 0.1)) (fp_line (start -0.8 0.4) (end -0.8 -0.4) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 0 90) (layer F.Fab) (effects (font (size 0.4 0.4) (thickness 0.06))) ) (pad 2 smd roundrect (at 0.775 0 90) (size 0.9 0.95) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 2 +12V)) (pad 1 smd roundrect (at -0.775 0 90) (size 0.9 0.95) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 1 GND)) (model ${KISYS3DMOD}/Capacitor_SMD.3dshapes/C_0603_1608Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (gr_text "DATE: YYYY-MM-DD\nCOMMIT: deadbeef" (at 203.835 52.07) (layer B.SilkS) (tstamp 60454E67) (effects (font (size 1.2 1.2) (thickness 0.12)) (justify left mirror)) ) (gr_text - (at 48.26 46.99) (layer F.SilkS) (tstamp 6041BB88) (effects (font (size 1.3 1.3) (thickness 0.15))) ) (gr_text S (at 58.42 46.99) (layer F.SilkS) (tstamp 6041BB89) (effects (font (size 1.3 1.3) (thickness 0.15))) ) (gr_text S (at 77.47 46.99) (layer F.SilkS) (tstamp 6041BB85) (effects (font (size 1.3 1.3) (thickness 0.15))) ) (gr_text - (at 67.31 46.99) (layer F.SilkS) (tstamp 6041BB84) (effects (font (size 1.3 1.3) (thickness 0.15))) ) (gr_text - (at 86.36 46.99) (layer F.SilkS) (tstamp 6041BB81) (effects (font (size 1.3 1.3) (thickness 0.15))) ) (gr_text S (at 96.52 46.99) (layer F.SilkS) (tstamp 6041BB80) (effects (font (size 1.3 1.3) (thickness 0.15))) ) (gr_text S (at 162.56 46.99) (layer F.SilkS) (tstamp 6041BB7D) (effects (font (size 1.3 1.3) (thickness 0.15))) ) (gr_text - (at 152.4 46.99) (layer F.SilkS) (tstamp 6041BB7C) (effects (font (size 1.3 1.3) (thickness 0.15))) ) (gr_text - (at 171.45 46.99) (layer F.SilkS) (tstamp 6041BB79) (effects (font (size 1.3 1.3) (thickness 0.15))) ) (gr_text S (at 181.61 46.99) (layer F.SilkS) (tstamp 6041BB78) (effects (font (size 1.3 1.3) (thickness 0.15))) ) (gr_text S (at 200.66 46.99) (layer F.SilkS) (tstamp 6041B7EE) (effects (font (size 1.3 1.3) (thickness 0.15))) ) (gr_text - (at 190.5 46.99) (layer F.SilkS) (tstamp 6041B7CB) (effects (font (size 1.3 1.3) (thickness 0.15))) ) (gr_text https://github.com/scottbez1/splitflap (at 203.454 36.322) (layer B.SilkS) (tstamp 601DBA93) (effects (font (size 1.5 1.5) (thickness 0.12)) (justify left mirror)) ) (gr_text v1.1 (at 164.338 33.782) (layer B.SilkS) (tstamp 601DA8F0) (effects (font (size 1.2 1.2) (thickness 0.1)) (justify left mirror)) ) (gr_text "Splitflap Chainlink Driver" (at 203.708 33.528) (layer B.SilkS) (effects (font (size 2 2) (thickness 0.25)) (justify left mirror)) ) (gr_poly (pts (xy 141.605 46.99) (xy 107.315 46.99) (xy 107.315 36.83) (xy 141.605 36.83)) (layer B.SilkS) (width 0.1)) (gr_line (start 148.59 36.83) (end 148.59 51.435) (layer F.SilkS) (width 0.4) (tstamp 601B2A02)) (gr_line (start 148.59 25.4) (end 148.59 27.305) (layer F.SilkS) (width 0.4) (tstamp 601B2A01)) (gr_line (start 186.055 41.275) (end 186.055 51.435) (layer F.SilkS) (width 0.4) (tstamp 601B2678)) (gr_line (start 186.055 25.4) (end 186.055 32.385) (layer F.SilkS) (width 0.4) (tstamp 601B2677)) (gr_line (start 167.005 25.4) (end 167.005 32.385) (layer F.SilkS) (width 0.4) (tstamp 601B2674)) (gr_line (start 167.005 41.275) (end 167.005 51.435) (layer F.SilkS) (width 0.4) (tstamp 601C5F1B)) (gr_line (start 100.965 25.4) (end 100.965 32.385) (layer F.SilkS) (width 0.4) (tstamp 601B266A)) (gr_line (start 100.965 41.275) (end 100.965 51.435) (layer F.SilkS) (width 0.4) (tstamp 601B2669)) (gr_line (start 81.915 25.4) (end 81.915 32.385) (layer F.SilkS) (width 0.4) (tstamp 601B2666)) (gr_line (start 81.915 41.275) (end 81.915 51.435) (layer F.SilkS) (width 0.4) (tstamp 601B2665)) (gr_line (start 62.865 41.275) (end 62.865 51.435) (layer F.SilkS) (width 0.4) (tstamp 601B22DD)) (gr_line (start 62.865 25.4) (end 62.865 32.385) (layer F.SilkS) (width 0.4)) (gr_line (start 119.38 36.05) (end 119.38 43.18) (layer F.SilkS) (width 0.12)) (gr_line (start 129.54 36.05) (end 129.54 43.18) (layer F.SilkS) (width 0.12)) (gr_line (start 109.22 43.18) (end 139.7 43.18) (layer F.SilkS) (width 0.12)) (gr_line (start 139.7 48.26) (end 139.7 36.05) (layer F.SilkS) (width 0.12)) (gr_line (start 109.22 48.26) (end 139.7 48.26) (layer F.SilkS) (width 0.12)) (gr_line (start 109.22 36.05) (end 109.22 48.26) (layer F.SilkS) (width 0.12)) (gr_text "Motor\n5-12V" (at 134.62 40.64) (layer F.SilkS) (tstamp 601AF2F2) (effects (font (size 1.3 1.3) (thickness 0.2))) ) (gr_text GND (at 124.46 40.64) (layer F.SilkS) (tstamp 601AF2EF) (effects (font (size 1.3 1.3) (thickness 0.2))) ) (gr_text "Logic\n3.3-5V" (at 114.3 40.64) (layer F.SilkS) (effects (font (size 1.3 1.3) (thickness 0.2))) ) (gr_text Power (at 124.46 45.72) (layer F.SilkS) (tstamp 60190C06) (effects (font (size 2.5 2.5) (thickness 0.35))) ) (gr_text Output (at 44.45 40.64 -90) (layer F.SilkS) (tstamp 617B4378) (effects (font (size 2.5 2.5) (thickness 0.35))) ) (gr_text Input (at 204.47 40.64 90) (layer F.SilkS) (effects (font (size 2.5 2.5) (thickness 0.35))) ) (gr_text A (at 195.58 50.165) (layer F.SilkS) (tstamp 6017B47A) (effects (font (size 2.5 2.2) (thickness 0.3))) ) (gr_text B (at 176.53 50.165) (layer F.SilkS) (tstamp 6017B477) (effects (font (size 2.5 2.2) (thickness 0.3))) ) (gr_text C (at 157.48 50.165) (layer F.SilkS) (tstamp 6017B474) (effects (font (size 2.5 2.2) (thickness 0.3))) ) (gr_text D (at 91.44 50.165) (layer F.SilkS) (tstamp 6017B471) (effects (font (size 2.5 2.2) (thickness 0.3))) ) (gr_text E (at 72.39 50.165) (layer F.SilkS) (tstamp 6017B46E) (effects (font (size 2.5 2.2) (thickness 0.3))) ) (gr_text F (at 53.34 50.165) (layer F.SilkS) (effects (font (size 2.5 2.2) (thickness 0.3))) ) (gr_line (start 25.4 55.88) (end 25.4 25.4) (layer Edge.Cuts) (width 0.05) (tstamp 60173911)) (gr_line (start 223.52 25.4) (end 223.52 55.88) (layer Edge.Cuts) (width 0.05) (tstamp 60173910)) (dimension 198.12 (width 0.15) (layer Cmts.User) (tstamp 6017A128) (gr_text "198.120 mm" (at 124.46 16.48) (layer Cmts.User) (tstamp 6017A128) (effects (font (size 1 1) (thickness 0.15))) ) (feature1 (pts (xy 223.52 25.4) (xy 223.52 17.193579))) (feature2 (pts (xy 25.4 25.4) (xy 25.4 17.193579))) (crossbar (pts (xy 25.4 17.78) (xy 223.52 17.78))) (arrow1a (pts (xy 223.52 17.78) (xy 222.393496 18.366421))) (arrow1b (pts (xy 223.52 17.78) (xy 222.393496 17.193579))) (arrow2a (pts (xy 25.4 17.78) (xy 26.526504 18.366421))) (arrow2b (pts (xy 25.4 17.78) (xy 26.526504 17.193579))) ) (dimension 30.48 (width 0.15) (layer Cmts.User) (gr_text "30.480 mm" (at 16.48 40.64 -90) (layer Cmts.User) (effects (font (size 1 1) (thickness 0.15))) ) (feature1 (pts (xy 25.4 55.88) (xy 17.193579 55.88))) (feature2 (pts (xy 25.4 25.4) (xy 17.193579 25.4))) (crossbar (pts (xy 17.78 25.4) (xy 17.78 55.88))) (arrow1a (pts (xy 17.78 55.88) (xy 17.193579 54.753496))) (arrow1b (pts (xy 17.78 55.88) (xy 18.366421 54.753496))) (arrow2a (pts (xy 17.78 25.4) (xy 17.193579 26.526504))) (arrow2b (pts (xy 17.78 25.4) (xy 18.366421 26.526504))) ) (gr_line (start 223.52 55.88) (end 25.4 55.88) (layer Edge.Cuts) (width 0.05)) (gr_line (start 25.4 25.4) (end 223.52 25.4) (layer Edge.Cuts) (width 0.05)) (segment (start 121.92 31.75) (end 127 31.75) (width 4) (layer B.Cu) (net 1) (tstamp 6017B441) (status 30)) (via (at 101.6 30.48) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 1)) (segment (start 103.61 30.48) (end 101.6 30.48) (width 0.2) (layer F.Cu) (net 1) (status 10)) (via (at 201.93 34.925) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 1)) (segment (start 201.79 35.065) (end 201.93 34.925) (width 0.2) (layer F.Cu) (net 1)) (segment (start 200.66 35.065) (end 201.79 35.065) (width 0.2) (layer F.Cu) (net 1) (status 10)) (segment (start 187.96 38.595) (end 187.82 38.595) (width 0.2) (layer F.Cu) (net 1) (status 30)) (segment (start 187.82 38.595) (end 187.325 38.1) (width 0.2) (layer F.Cu) (net 1) (status 10)) (via (at 187.325 38.1) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 1)) (via (at 79.756 38.608) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 1)) (segment (start 79.769 38.595) (end 79.756 38.608) (width 0.2) (layer F.Cu) (net 1)) (segment (start 80.645 38.595) (end 79.769 38.595) (width 0.2) (layer F.Cu) (net 1) (status 10)) (via (at 106.68 36.322) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 1)) (segment (start 106.045 36.957) (end 106.68 36.322) (width 0.2) (layer F.Cu) (net 1) (status 10)) (segment (start 106.045 37.325) (end 106.045 36.957) (width 0.2) (layer F.Cu) (net 1) (status 30)) (via (at 199.898 39.878) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 1)) (via (at 199.898 38.862) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 1)) (segment (start 177.165 34.355) (end 177.165 36.01498) (width 0.2) (layer F.Cu) (net 1) (status 10)) (via (at 175.26 36.10499) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 1)) (via (at 177.07499 36.10499) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 1)) (segment (start 175.26 35.065) (end 175.26 36.10499) (width 0.2) (layer F.Cu) (net 1) (status 10)) (segment (start 177.165 36.01498) (end 177.07499 36.10499) (width 0.2) (layer F.Cu) (net 1)) (via (at 174.498 39.624) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 1) (tstamp 601A7D0C)) (via (at 172.212 40.386) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 1) (tstamp 601A7D0D)) (via (at 173.228 40.386) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 1) (tstamp 601A7D0E)) (via (at 174.244 40.386) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 1) (tstamp 601A7D0F)) (via (at 174.498 38.608) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 1) (tstamp 601A7D10)) (via (at 90.17 40.386) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 1) (tstamp 601A7D17)) (via (at 92.456 39.624) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 1) (tstamp 601A7D18)) (via (at 92.456 38.608) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 1) (tstamp 601A7D19)) (via (at 92.202 40.386) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 1) (tstamp 601A7D1A)) (via (at 91.186 40.386) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 1) (tstamp 601A7D1C)) (via (at 65.786 40.386) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 1) (tstamp 601A7D25)) (via (at 64.77 40.386) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 1) (tstamp 601A7D26)) (via (at 67.056 39.624) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 1) (tstamp 601A7D27)) (via (at 66.802 40.386) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 1) (tstamp 601A7D28)) (via (at 142.24 35.052) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 1)) (via (at 142.24 34.036) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 1)) (via (at 142.24 33.02) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 1)) (via (at 142.24 36.068) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 1)) (via (at 147.32 35.052) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 1)) (via (at 147.32 34.036) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 1)) (via (at 147.32 33.02) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 1)) (via (at 147.32 36.068) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 1)) (segment (start 148.017 34.355) (end 147.32 35.052) (width 0.2) (layer F.Cu) (net 1)) (segment (start 151.765 34.355) (end 148.017 34.355) (width 0.2) (layer F.Cu) (net 1) (status 10)) (via (at 49.53 42.545) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 1)) (segment (start 47.69 42.545) (end 49.53 42.545) (width 0.2) (layer F.Cu) (net 1) (status 10)) (via (at 182.551595 40.639991) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 1)) (segment (start 182.245 39.305) (end 182.245 40.333396) (width 0.2) (layer F.Cu) (net 1) (status 10)) (segment (start 182.245 40.333396) (end 182.551595 40.639991) (width 0.2) (layer F.Cu) (net 1)) (via (at 161.925 37.465) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 1)) (segment (start 162.56 38.1) (end 161.925 37.465) (width 0.2) (layer F.Cu) (net 1)) (segment (start 162.56 38.595) (end 162.56 38.1) (width 0.2) (layer F.Cu) (net 1) (status 10)) (via (at 75.660132 37.646215) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 1)) (segment (start 74.93 39.305) (end 74.93 38.376347) (width 0.2) (layer F.Cu) (net 1) (status 30)) (segment (start 74.93 38.376347) (end 75.660132 37.646215) (width 0.2) (layer F.Cu) (net 1) (status 10)) (segment (start 50.94 33.02) (end 50.94 33.225) (width 0.2) (layer F.Cu) (net 1) (status 30)) (segment (start 51.295 33.02) (end 51.295 33.16) (width 0.2) (layer F.Cu) (net 1) (status 30)) (via (at 50.165 33.02) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 1)) (segment (start 51.295 33.02) (end 50.165 33.02) (width 0.2) (layer F.Cu) (net 1) (status 10)) (segment (start 47.69 38.735) (end 48.985014 38.735) (width 0.2) (layer F.Cu) (net 1) (status 10)) (via (at 49.530002 39.279988) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 1)) (segment (start 52.64 40.005) (end 50.255014 40.005) (width 0.2) (layer F.Cu) (net 1) (status 10)) (segment (start 48.985014 38.735) (end 49.530002 39.279988) (width 0.2) (layer F.Cu) (net 1)) (segment (start 50.255014 40.005) (end 49.530002 39.279988) (width 0.2) (layer F.Cu) (net 1)) (segment (start 50.165 36.195) (end 49.53 35.56) (width 0.2) (layer F.Cu) (net 1)) (segment (start 47.69 34.925) (end 48.895 34.925) (width 0.2) (layer F.Cu) (net 1) (status 10)) (segment (start 48.895 34.925) (end 49.53 35.56) (width 0.2) (layer F.Cu) (net 1)) (segment (start 52.64 36.195) (end 50.165 36.195) (width 0.2) (layer F.Cu) (net 1) (status 10)) (via (at 49.53 35.56) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 1)) (via (at 100.33 37.465) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 1)) (segment (start 100.33 39.305) (end 100.33 37.465) (width 0.2) (layer F.Cu) (net 1) (status 10)) (segment (start 158.2675 52.705) (end 159.385 52.705) (width 0.2) (layer F.Cu) (net 1) (status 10)) (via (at 159.385 52.705) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 1)) (via (at 178.435 52.705) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 1)) (segment (start 177.3175 52.705) (end 178.435 52.705) (width 0.2) (layer F.Cu) (net 1) (status 10)) (segment (start 196.3675 52.705) (end 197.485 52.705) (width 0.2) (layer F.Cu) (net 1) (status 10)) (via (at 197.485 52.705) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 1)) (via (at 89.535 52.705) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 1)) (segment (start 90.6525 52.705) (end 89.535 52.705) (width 0.2) (layer F.Cu) (net 1) (status 10)) (segment (start 71.6025 52.705) (end 70.485 52.705) (width 0.2) (layer F.Cu) (net 1) (status 10)) (via (at 70.485 52.705) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 1)) (via (at 51.435 52.705) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 1)) (segment (start 52.5525 52.705) (end 51.435 52.705) (width 0.2) (layer F.Cu) (net 1) (status 10)) (via (at 157.226 40.64) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 1)) (segment (start 156.845 40.259) (end 157.226 40.64) (width 0.2) (layer F.Cu) (net 1) (status 10)) (segment (start 156.845 39.305) (end 156.845 40.259) (width 0.2) (layer F.Cu) (net 1) (status 30)) (segment (start 149.72 45.085) (end 149.86 45.225) (width 0.2) (layer F.Cu) (net 1) (status 30)) (segment (start 147.255 45.085) (end 149.72 45.085) (width 0.2) (layer F.Cu) (net 1) (status 30)) (via (at 151.13 45.212) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 1)) (segment (start 151.117 45.225) (end 151.13 45.212) (width 0.2) (layer F.Cu) (net 1)) (segment (start 149.86 45.225) (end 151.117 45.225) (width 0.2) (layer F.Cu) (net 1) (status 10)) (via (at 144.018 52.324) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 1)) (segment (start 143.637 52.705) (end 144.018 52.324) (width 0.2) (layer F.Cu) (net 1)) (segment (start 142.305 52.705) (end 143.637 52.705) (width 0.2) (layer F.Cu) (net 1) (status 10)) (via (at 92.225791 35.577673) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 1)) (segment (start 92.738464 35.065) (end 92.225791 35.577673) (width 0.2) (layer F.Cu) (net 1)) (segment (start 93.345 35.065) (end 92.738464 35.065) (width 0.2) (layer F.Cu) (net 1)) (via (at 94.488 34.29) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 1)) (segment (start 94.553 34.355) (end 94.488 34.29) (width 0.2) (layer F.Cu) (net 1)) (segment (start 95.25 34.355) (end 94.553 34.355) (width 0.2) (layer F.Cu) (net 1)) (segment (start 69.661 34.355) (end 69.088 33.782) (width 0.2) (layer F.Cu) (net 1)) (via (at 69.088 33.782) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 1)) (segment (start 69.85 34.355) (end 69.661 34.355) (width 0.2) (layer F.Cu) (net 1)) (segment (start 67.297 34.557) (end 67.056 34.798) (width 0.2) (layer F.Cu) (net 1)) (via (at 67.056 34.798) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 1)) (segment (start 67.945 34.557) (end 67.297 34.557) (width 0.2) (layer F.Cu) (net 1)) (via (at 197.612 40.386) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 1)) (via (at 198.628 40.386) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 1)) (via (at 133.82101 41.69299) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 1)) (via (at 133.858 43.18) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 1)) (via (at 137.631016 41.69299) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 1)) (segment (start 133.82101 41.69299) (end 137.631016 41.69299) (width 0.35) (layer F.Cu) (net 1)) (via (at 137.668 43.18) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 1)) (segment (start 133.858 43.18) (end 137.668 43.18) (width 0.35) (layer F.Cu) (net 1)) (via (at 109.728 41.692996) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 1)) (via (at 109.728 43.26876) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 1)) (via (at 111.84872 43.26876) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 1)) (segment (start 109.728 43.26876) (end 111.84872 43.26876) (width 0.35) (layer F.Cu) (net 1)) (via (at 111.796992 41.692996) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 1)) (segment (start 109.728 41.692996) (end 111.796992 41.692996) (width 0.35) (layer F.Cu) (net 1)) (via (at 100.62099 41.69299) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 1)) (via (at 100.657968 43.360012) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 1)) (via (at 104.902 43.434) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 1)) (segment (start 104.828012 43.360012) (end 104.902 43.434) (width 0.2) (layer F.Cu) (net 1)) (segment (start 100.657968 43.360012) (end 104.828012 43.360012) (width 0.35) (layer F.Cu) (net 1)) (via (at 104.864834 41.693166) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 1)) (segment (start 100.62099 41.69299) (end 104.864658 41.69299) (width 0.35) (layer F.Cu) (net 1)) (segment (start 104.864658 41.69299) (end 104.864834 41.693166) (width 0.2) (layer F.Cu) (net 1)) (segment (start 105.41 49.72) (end 105.982 49.72) (width 0.2) (layer F.Cu) (net 1)) (segment (start 105.982 49.72) (end 106.172 49.53) (width 0.2) (layer F.Cu) (net 1)) (via (at 106.172 49.53) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 1)) (segment (start 50.8 41.275) (end 49.53 42.545) (width 0.2) (layer F.Cu) (net 1)) (segment (start 52.64 41.275) (end 50.8 41.275) (width 0.2) (layer F.Cu) (net 1)) (segment (start 137.16 31.75) (end 137.16 29.21) (width 2) (layer F.Cu) (net 2) (status 10)) (segment (start 137.16 29.21) (end 139.7 26.67) (width 2) (layer F.Cu) (net 2)) (segment (start 188.12 26.67) (end 190.66 29.21) (width 2) (layer F.Cu) (net 2) (status 20)) (segment (start 169.07 26.67) (end 171.61 29.21) (width 2) (layer F.Cu) (net 2) (status 20)) (segment (start 168.91 26.67) (end 169.07 26.67) (width 2) (layer F.Cu) (net 2)) (segment (start 150.02 26.67) (end 152.56 29.21) (width 2) (layer F.Cu) (net 2) (status 20)) (segment (start 148.59 26.67) (end 150.02 26.67) (width 2) (layer F.Cu) (net 2)) (segment (start 148.59 26.67) (end 168.91 26.67) (width 2) (layer F.Cu) (net 2)) (segment (start 142.95 26.67) (end 144.78 28.5) (width 2) (layer F.Cu) (net 2) (status 20)) (segment (start 142.24 26.67) (end 142.95 26.67) (width 2) (layer F.Cu) (net 2)) (segment (start 139.7 26.67) (end 142.24 26.67) (width 2) (layer F.Cu) (net 2)) (segment (start 142.24 26.67) (end 148.59 26.67) (width 2) (layer F.Cu) (net 2)) (segment (start 132.08 31.75) (end 132.08 27.94) (width 2) (layer F.Cu) (net 2) (status 10)) (segment (start 132.08 27.94) (end 130.81 26.67) (width 2) (layer F.Cu) (net 2)) (segment (start 71.12 26.67) (end 69.485849 26.67) (width 2) (layer F.Cu) (net 2)) (segment (start 98.425 26.67) (end 87.63 26.67) (width 2) (layer F.Cu) (net 2)) (segment (start 86.52 27.78) (end 87.63 26.67) (width 2) (layer F.Cu) (net 2)) (segment (start 86.52 29.21) (end 86.52 27.78) (width 2) (layer F.Cu) (net 2) (status 10)) (segment (start 67.47 27.78) (end 68.58 26.67) (width 2) (layer F.Cu) (net 2)) (segment (start 67.47 29.21) (end 67.47 27.78) (width 2) (layer F.Cu) (net 2) (status 10)) (segment (start 68.58 26.67) (end 49.53 26.67) (width 2) (layer F.Cu) (net 2)) (segment (start 71.12 26.67) (end 68.58 26.67) (width 2) (layer F.Cu) (net 2)) (segment (start 48.42 29.21) (end 48.42 27.78) (width 2) (layer F.Cu) (net 2) (status 10)) (segment (start 48.42 27.78) (end 49.53 26.67) (width 2) (layer F.Cu) (net 2)) (segment (start 174.42 34.355) (end 175.26 33.515) (width 0.35) (layer F.Cu) (net 2) (status 20)) (segment (start 173.355 34.355) (end 174.42 34.355) (width 0.35) (layer F.Cu) (net 2) (status 10)) (segment (start 177.83501 30.93999) (end 177.83501 26.70501) (width 0.35) (layer F.Cu) (net 2)) (segment (start 177.83501 26.70501) (end 177.8 26.67) (width 0.35) (layer F.Cu) (net 2)) (segment (start 177.8 26.67) (end 188.12 26.67) (width 2) (layer F.Cu) (net 2)) (segment (start 175.26 33.515) (end 177.83501 30.93999) (width 0.35) (layer F.Cu) (net 2) (status 10)) (segment (start 168.91 26.67) (end 177.8 26.67) (width 2) (layer F.Cu) (net 2)) (segment (start 199.82 34.355) (end 200.66 33.515) (width 0.35) (layer F.Cu) (net 2) (status 20)) (segment (start 198.755 34.355) (end 199.82 34.355) (width 0.35) (layer F.Cu) (net 2) (status 10)) (segment (start 200.3289 26.67) (end 188.12 26.67) (width 0.35) (layer F.Cu) (net 2)) (segment (start 201.88501 28.22611) (end 200.3289 26.67) (width 0.35) (layer F.Cu) (net 2)) (segment (start 201.88501 32.28999) (end 201.88501 28.22611) (width 0.35) (layer F.Cu) (net 2)) (segment (start 200.66 33.515) (end 201.88501 32.28999) (width 0.35) (layer F.Cu) (net 2) (status 10)) (segment (start 130.81 26.67) (end 98.425 26.67) (width 2) (layer F.Cu) (net 2)) (segment (start 92.505 34.355) (end 93.345 33.515) (width 0.35) (layer F.Cu) (net 2) (status 20)) (segment (start 91.44 34.355) (end 92.505 34.355) (width 0.35) (layer F.Cu) (net 2) (status 10)) (segment (start 98.425 31.115) (end 98.425 26.67) (width 0.35) (layer F.Cu) (net 2)) (segment (start 97.155 32.385) (end 98.425 31.115) (width 0.35) (layer F.Cu) (net 2)) (segment (start 94.475 32.385) (end 97.155 32.385) (width 0.35) (layer F.Cu) (net 2)) (segment (start 93.345 33.515) (end 94.475 32.385) (width 0.35) (layer F.Cu) (net 2) (status 10)) (segment (start 73.66 26.67) (end 71.12 26.67) (width 2) (layer F.Cu) (net 2)) (segment (start 87.63 26.67) (end 73.66 26.67) (width 2) (layer F.Cu) (net 2)) (segment (start 71.4375 32.7025) (end 73.74499 30.39501) (width 0.35) (layer F.Cu) (net 2)) (segment (start 73.74499 26.75499) (end 73.66 26.67) (width 0.35) (layer F.Cu) (net 2)) (segment (start 73.74499 30.39501) (end 73.74499 26.75499) (width 0.35) (layer F.Cu) (net 2)) (segment (start 68.2495 32.7025) (end 71.4375 32.7025) (width 0.35) (layer F.Cu) (net 2) (status 10)) (segment (start 67.388 33.007) (end 67.945 33.007) (width 0.35) (layer F.Cu) (net 2) (status 20)) (segment (start 67.945 33.007) (end 68.2495 32.7025) (width 0.35) (layer F.Cu) (net 2) (status 30)) (segment (start 66.04 34.355) (end 67.388 33.007) (width 0.35) (layer F.Cu) (net 2) (status 10)) (segment (start 93.535 46.545) (end 93.98 46.99) (width 0.2) (layer F.Cu) (net 3) (status 30)) (segment (start 93.535 44.45) (end 93.535 46.545) (width 0.2) (layer F.Cu) (net 3) (status 30)) (segment (start 111.277064 45.40551) (end 95.56449 45.40551) (width 0.2) (layer F.Cu) (net 3)) (segment (start 112.226289 44.456285) (end 111.277064 45.40551) (width 0.2) (layer F.Cu) (net 3)) (segment (start 94.829999 46.140001) (end 93.98 46.99) (width 0.2) (layer F.Cu) (net 3)) (segment (start 140.029517 44.456285) (end 112.226289 44.456285) (width 0.2) (layer F.Cu) (net 3)) (segment (start 141.283241 45.710009) (end 140.029517 44.456285) (width 0.2) (layer F.Cu) (net 3)) (segment (start 146.610009 45.710009) (end 141.283241 45.710009) (width 0.2) (layer F.Cu) (net 3)) (segment (start 147.255 46.355) (end 146.610009 45.710009) (width 0.2) (layer F.Cu) (net 3)) (segment (start 95.56449 45.40551) (end 94.829999 46.140001) (width 0.2) (layer F.Cu) (net 3)) (segment (start 159.575 46.545) (end 160.02 46.99) (width 0.2) (layer F.Cu) (net 4) (status 30)) (segment (start 159.575 44.45) (end 159.575 46.545) (width 0.2) (layer F.Cu) (net 4) (status 30)) (segment (start 158.844999 48.165001) (end 147.795001 48.165001) (width 0.2) (layer F.Cu) (net 4)) (segment (start 147.795001 48.165001) (end 147.255 47.625) (width 0.2) (layer F.Cu) (net 4) (status 20)) (segment (start 160.02 46.99) (end 158.844999 48.165001) (width 0.2) (layer F.Cu) (net 4) (status 10)) (segment (start 178.625 44.45) (end 179.07 44.895) (width 0.2) (layer F.Cu) (net 5) (status 10)) (segment (start 179.07 44.895) (end 179.07 46.99) (width 0.2) (layer F.Cu) (net 5) (status 20)) (segment (start 177.165 48.895) (end 179.07 46.99) (width 0.2) (layer F.Cu) (net 5) (status 20)) (segment (start 147.255 48.895) (end 177.165 48.895) (width 0.2) (layer F.Cu) (net 5) (status 10)) (segment (start 197.675 46.545) (end 198.12 46.99) (width 0.2) (layer F.Cu) (net 6) (status 30)) (segment (start 197.675 44.45) (end 197.675 46.545) (width 0.2) (layer F.Cu) (net 6) (status 30)) (segment (start 147.255 50.165) (end 194.945 50.165) (width 0.2) (layer F.Cu) (net 6) (status 10)) (segment (start 194.945 50.165) (end 198.12 46.99) (width 0.2) (layer F.Cu) (net 6) (status 20)) (segment (start 97.79 39.305) (end 97.79 40.28) (width 0.2) (layer F.Cu) (net 7) (status 10)) (segment (start 154.305 40.318179) (end 154.305 39.305) (width 0.2) (layer F.Cu) (net 7) (status 20)) (segment (start 97.79 38.928232) (end 97.79 39.305) (width 0.2) (layer F.Cu) (net 7) (status 30)) (segment (start 72.39 40.64) (end 73.406 41.656) (width 0.2) (layer F.Cu) (net 7)) (segment (start 72.39 39.305) (end 72.39 40.64) (width 0.2) (layer F.Cu) (net 7) (status 10)) (segment (start 179.705 40.64) (end 181.425011 42.360011) (width 0.2) (layer F.Cu) (net 7)) (segment (start 179.705 39.305) (end 179.705 40.64) (width 0.2) (layer F.Cu) (net 7) (status 10)) (segment (start 181.367022 42.418) (end 156.083 42.418) (width 0.2) (layer F.Cu) (net 7)) (segment (start 181.425011 42.360011) (end 181.367022 42.418) (width 0.2) (layer F.Cu) (net 7)) (segment (start 154.305 40.64) (end 156.083 42.418) (width 0.2) (layer F.Cu) (net 7)) (segment (start 154.305 39.305) (end 154.305 40.64) (width 0.2) (layer F.Cu) (net 7) (status 10)) (segment (start 142.875 45.085) (end 142.305 45.085) (width 0.2) (layer F.Cu) (net 7) (status 30)) (segment (start 145.542 42.418) (end 142.875 45.085) (width 0.2) (layer F.Cu) (net 7) (status 20)) (segment (start 97.79 40.64) (end 97.79 39.305) (width 0.2) (layer F.Cu) (net 7) (status 20)) (segment (start 97.79 40.64) (end 98.879967 41.729967) (width 0.2) (layer F.Cu) (net 7)) (segment (start 48.91498 36.195) (end 47.69 36.195) (width 0.2) (layer F.Cu) (net 7) (status 20)) (segment (start 50.80999 38.09001) (end 48.91498 36.195) (width 0.2) (layer F.Cu) (net 7)) (segment (start 53.651832 38.09001) (end 50.80999 38.09001) (width 0.2) (layer F.Cu) (net 7)) (segment (start 73.479957 41.729967) (end 57.291789 41.729967) (width 0.2) (layer F.Cu) (net 7)) (segment (start 57.291789 41.729967) (end 53.651832 38.09001) (width 0.2) (layer F.Cu) (net 7)) (segment (start 73.479962 41.729962) (end 73.479957 41.729967) (width 0.2) (layer F.Cu) (net 7)) (segment (start 73.479962 41.729962) (end 73.406 41.656) (width 0.2) (layer F.Cu) (net 7)) (segment (start 104.669097 42.418) (end 99.568 42.418) (width 0.2) (layer F.Cu) (net 7)) (segment (start 104.669265 42.418168) (end 104.669097 42.418) (width 0.2) (layer F.Cu) (net 7)) (segment (start 105.365269 42.418168) (end 104.669265 42.418168) (width 0.2) (layer F.Cu) (net 7)) (segment (start 156.083 42.418) (end 105.365437 42.418) (width 0.2) (layer F.Cu) (net 7)) (segment (start 99.568 42.418) (end 98.879967 41.729967) (width 0.2) (layer F.Cu) (net 7)) (segment (start 105.365437 42.418) (end 105.365269 42.418168) (width 0.2) (layer F.Cu) (net 7)) (segment (start 73.856666 41.729967) (end 73.856661 41.729962) (width 0.2) (layer F.Cu) (net 7)) (segment (start 73.856661 41.729962) (end 73.479962 41.729962) (width 0.2) (layer F.Cu) (net 7)) (segment (start 98.879967 41.729967) (end 73.856666 41.729967) (width 0.2) (layer F.Cu) (net 7)) (segment (start 210.82 36.83) (end 205.232 42.418) (width 0.2) (layer F.Cu) (net 7)) (segment (start 205.232 42.418) (end 181.483 42.418) (width 0.2) (layer F.Cu) (net 7)) (segment (start 181.483 42.418) (end 181.425011 42.360011) (width 0.2) (layer F.Cu) (net 7)) (segment (start 192.405 29.965) (end 193.16 29.21) (width 0.55) (layer F.Cu) (net 8) (status 20)) (segment (start 192.405 34.355) (end 192.405 29.965) (width 0.55) (layer F.Cu) (net 8) (status 10)) (segment (start 193.675 31.195) (end 193.675 34.355) (width 0.55) (layer F.Cu) (net 9) (status 20)) (segment (start 195.66 29.21) (end 193.675 31.195) (width 0.55) (layer F.Cu) (net 9) (status 10)) (segment (start 194.945 32.425) (end 198.16 29.21) (width 0.55) (layer F.Cu) (net 10) (status 20)) (segment (start 194.945 34.355) (end 194.945 32.425) (width 0.55) (layer F.Cu) (net 10) (status 10)) (segment (start 200.385 29.21) (end 200.66 29.21) (width 0.55) (layer F.Cu) (net 11) (status 30)) (segment (start 196.215 33.38) (end 200.385 29.21) (width 0.55) (layer F.Cu) (net 11) (status 30)) (segment (start 196.215 34.355) (end 196.215 33.38) (width 0.55) (layer F.Cu) (net 11) (status 30)) (segment (start 173.715 29.21) (end 174.11 29.21) (width 0.55) (layer F.Cu) (net 12) (status 30)) (segment (start 169.545 33.38) (end 173.715 29.21) (width 0.55) (layer F.Cu) (net 12) (status 30)) (segment (start 169.545 34.355) (end 169.545 33.38) (width 0.55) (layer F.Cu) (net 12) (status 30)) (segment (start 174.705 31.115) (end 176.61 29.21) (width 0.55) (layer F.Cu) (net 13) (status 20)) (segment (start 173.08 31.115) (end 174.705 31.115) (width 0.55) (layer F.Cu) (net 13)) (segment (start 170.815 33.38) (end 173.08 31.115) (width 0.55) (layer F.Cu) (net 13) (status 10)) (segment (start 170.815 34.355) (end 170.815 33.38) (width 0.55) (layer F.Cu) (net 13) (status 30)) (segment (start 181.015 31.115) (end 179.11 29.21) (width 0.55) (layer F.Cu) (net 14) (status 20)) (segment (start 186.625 31.115) (end 181.015 31.115) (width 0.55) (layer F.Cu) (net 14)) (segment (start 189.865 34.355) (end 186.625 31.115) (width 0.55) (layer F.Cu) (net 14) (status 10)) (segment (start 186.965 29.21) (end 181.61 29.21) (width 0.55) (layer F.Cu) (net 15) (status 20)) (segment (start 191.135 33.38) (end 186.965 29.21) (width 0.55) (layer F.Cu) (net 15) (status 10)) (segment (start 191.135 34.355) (end 191.135 33.38) (width 0.55) (layer F.Cu) (net 15) (status 30)) (segment (start 158.235 32.385) (end 155.06 29.21) (width 0.55) (layer F.Cu) (net 16) (status 20)) (segment (start 162.495 32.385) (end 158.235 32.385) (width 0.55) (layer F.Cu) (net 16)) (segment (start 164.465 34.355) (end 162.495 32.385) (width 0.55) (layer F.Cu) (net 16) (status 10)) (segment (start 165.735 34.355) (end 165.735 33.38) (width 0.55) (layer F.Cu) (net 17) (status 30)) (segment (start 165.735 33.38) (end 163.989989 31.634989) (width 0.55) (layer F.Cu) (net 17) (status 10)) (segment (start 163.989989 31.634989) (end 159.984989 31.634989) (width 0.55) (layer F.Cu) (net 17)) (segment (start 159.984989 31.634989) (end 157.56 29.21) (width 0.55) (layer F.Cu) (net 17) (status 20)) (segment (start 161.51001 30.66001) (end 160.06 29.21) (width 0.55) (layer F.Cu) (net 18) (status 20)) (segment (start 164.28501 30.66001) (end 161.51001 30.66001) (width 0.55) (layer F.Cu) (net 18)) (segment (start 167.005 33.38) (end 164.28501 30.66001) (width 0.55) (layer F.Cu) (net 18) (status 10)) (segment (start 167.005 34.355) (end 167.005 33.38) (width 0.55) (layer F.Cu) (net 18) (status 30)) (segment (start 168.275 33.38) (end 164.105 29.21) (width 0.55) (layer F.Cu) (net 19) (status 10)) (segment (start 164.105 29.21) (end 162.56 29.21) (width 0.55) (layer F.Cu) (net 19) (status 20)) (segment (start 168.275 34.355) (end 168.275 33.38) (width 0.55) (layer F.Cu) (net 19) (status 30)) (segment (start 85.09 33.14) (end 85.09 34.355) (width 0.55) (layer F.Cu) (net 20) (status 20)) (segment (start 89.02 29.21) (end 85.09 33.14) (width 0.55) (layer F.Cu) (net 20) (status 10)) (segment (start 86.36 33.38) (end 86.36 34.355) (width 0.55) (layer F.Cu) (net 21) (status 30)) (segment (start 89.534995 31.115001) (end 88.624999 31.115001) (width 0.55) (layer F.Cu) (net 21)) (segment (start 88.624999 31.115001) (end 86.36 33.38) (width 0.55) (layer F.Cu) (net 21) (status 20)) (segment (start 91.439996 29.21) (end 89.534995 31.115001) (width 0.55) (layer F.Cu) (net 21) (status 10)) (segment (start 91.52 29.21) (end 91.439996 29.21) (width 0.55) (layer F.Cu) (net 21) (status 30)) (segment (start 87.63 33.38) (end 87.63 34.355) (width 0.55) (layer F.Cu) (net 22) (status 30)) (segment (start 89.144988 31.865012) (end 87.63 33.38) (width 0.55) (layer F.Cu) (net 22) (status 20)) (segment (start 91.364988 31.865012) (end 89.144988 31.865012) (width 0.55) (layer F.Cu) (net 22)) (segment (start 94.02 29.21) (end 91.364988 31.865012) (width 0.55) (layer F.Cu) (net 22) (status 10)) (segment (start 88.9 33.38) (end 88.9 34.355) (width 0.55) (layer F.Cu) (net 23)) (segment (start 89.664977 32.615023) (end 88.9 33.38) (width 0.55) (layer F.Cu) (net 23)) (segment (start 92.352977 32.615023) (end 89.664977 32.615023) (width 0.55) (layer F.Cu) (net 23)) (segment (start 93.853 31.115) (end 92.352977 32.615023) (width 0.55) (layer F.Cu) (net 23)) (segment (start 94.615 31.115) (end 93.853 31.115) (width 0.55) (layer F.Cu) (net 23)) (segment (start 96.52 29.21) (end 94.615 31.115) (width 0.55) (layer F.Cu) (net 23)) (segment (start 85.09 38.33) (end 85.09 39.305) (width 0.2) (layer F.Cu) (net 24) (status 30)) (segment (start 95.528 36.322) (end 87.098 36.322) (width 0.2) (layer F.Cu) (net 24)) (segment (start 96.52 35.33) (end 95.528 36.322) (width 0.2) (layer F.Cu) (net 24)) (segment (start 87.098 36.322) (end 85.09 38.33) (width 0.2) (layer F.Cu) (net 24) (status 20)) (segment (start 96.52 34.355) (end 96.52 35.33) (width 0.2) (layer F.Cu) (net 24) (status 10)) (segment (start 87.86 36.83) (end 86.36 38.33) (width 0.2) (layer F.Cu) (net 25) (status 20)) (segment (start 96.29 36.83) (end 87.86 36.83) (width 0.2) (layer F.Cu) (net 25)) (segment (start 86.36 38.33) (end 86.36 39.305) (width 0.2) (layer F.Cu) (net 25) (status 30)) (segment (start 97.79 35.33) (end 96.29 36.83) (width 0.2) (layer F.Cu) (net 25)) (segment (start 97.79 34.355) (end 97.79 35.33) (width 0.2) (layer F.Cu) (net 25) (status 10)) (segment (start 99.06 35.33) (end 99.06 34.355) (width 0.2) (layer F.Cu) (net 26) (status 20)) (segment (start 97.052 37.338) (end 99.06 35.33) (width 0.2) (layer F.Cu) (net 26)) (segment (start 88.622 37.338) (end 97.052 37.338) (width 0.2) (layer F.Cu) (net 26)) (segment (start 87.63 38.33) (end 88.622 37.338) (width 0.2) (layer F.Cu) (net 26) (status 10)) (segment (start 87.63 39.305) (end 87.63 38.33) (width 0.2) (layer F.Cu) (net 26) (status 30)) (segment (start 88.9 39.305) (end 88.9 38.33) (width 0.2) (layer F.Cu) (net 27) (status 30)) (segment (start 88.9 38.33) (end 89.384 37.846) (width 0.2) (layer F.Cu) (net 27) (status 10)) (segment (start 89.384 37.846) (end 97.814 37.846) (width 0.2) (layer F.Cu) (net 27)) (segment (start 97.814 37.846) (end 100.33 35.33) (width 0.2) (layer F.Cu) (net 27)) (segment (start 100.33 35.33) (end 100.33 34.355) (width 0.2) (layer F.Cu) (net 27) (status 20)) (segment (start 158.115 35.33) (end 158.115 34.355) (width 0.2) (layer F.Cu) (net 28) (status 20)) (segment (start 158.890021 36.105021) (end 158.115 35.33) (width 0.2) (layer F.Cu) (net 28)) (segment (start 162.240021 36.105021) (end 158.890021 36.105021) (width 0.2) (layer F.Cu) (net 28)) (segment (start 164.465 38.33) (end 162.240021 36.105021) (width 0.2) (layer F.Cu) (net 28) (status 10)) (segment (start 164.465 39.305) (end 164.465 38.33) (width 0.2) (layer F.Cu) (net 28) (status 30)) (segment (start 165.735 38.33) (end 163.06001 35.65501) (width 0.2) (layer F.Cu) (net 29) (status 10)) (segment (start 163.06001 35.65501) (end 160.308242 35.65501) (width 0.2) (layer F.Cu) (net 29)) (segment (start 165.735 39.305) (end 165.735 38.33) (width 0.2) (layer F.Cu) (net 29) (status 30)) (segment (start 160.308242 35.65501) (end 159.385 34.731768) (width 0.2) (layer F.Cu) (net 29) (status 20)) (segment (start 159.385 34.731768) (end 159.385 34.355) (width 0.2) (layer F.Cu) (net 29) (status 30)) (segment (start 162.431768 34.355) (end 160.655 34.355) (width 0.2) (layer F.Cu) (net 30) (status 20)) (segment (start 167.005 38.928232) (end 162.431768 34.355) (width 0.2) (layer F.Cu) (net 30) (status 10)) (segment (start 167.005 39.305) (end 167.005 38.928232) (width 0.2) (layer F.Cu) (net 30) (status 30)) (segment (start 159.385 39.681768) (end 159.385 39.305) (width 0.2) (layer F.Cu) (net 31) (status 30)) (segment (start 160.623242 40.92001) (end 159.385 39.681768) (width 0.2) (layer F.Cu) (net 31) (status 20)) (segment (start 167.63499 40.92001) (end 160.623242 40.92001) (width 0.2) (layer F.Cu) (net 31)) (segment (start 168.275 40.28) (end 167.63499 40.92001) (width 0.2) (layer F.Cu) (net 31)) (segment (start 168.275 39.305) (end 168.275 40.28) (width 0.2) (layer F.Cu) (net 31) (status 10)) (segment (start 169.545 38.33) (end 169.545 39.305) (width 0.2) (layer F.Cu) (net 32) (status 30)) (segment (start 177.990411 36.83) (end 171.045 36.83) (width 0.2) (layer F.Cu) (net 32)) (segment (start 171.045 36.83) (end 169.545 38.33) (width 0.2) (layer F.Cu) (net 32) (status 20)) (segment (start 178.435 36.385411) (end 177.990411 36.83) (width 0.2) (layer F.Cu) (net 32)) (segment (start 178.435 34.355) (end 178.435 36.385411) (width 0.2) (layer F.Cu) (net 32) (status 10)) (segment (start 170.815 38.33) (end 170.815 39.305) (width 0.2) (layer F.Cu) (net 33) (status 30)) (segment (start 171.807 37.338) (end 170.815 38.33) (width 0.2) (layer F.Cu) (net 33) (status 20)) (segment (start 178.118821 37.338) (end 171.807 37.338) (width 0.2) (layer F.Cu) (net 33)) (segment (start 179.705 35.751821) (end 178.118821 37.338) (width 0.2) (layer F.Cu) (net 33)) (segment (start 179.705 34.355) (end 179.705 35.751821) (width 0.2) (layer F.Cu) (net 33) (status 10)) (segment (start 189.865 38.33) (end 189.865 39.305) (width 0.2) (layer F.Cu) (net 34) (status 30)) (segment (start 187.303047 37.005043) (end 187.753057 37.455053) (width 0.2) (layer F.Cu) (net 34)) (segment (start 187.753057 37.455053) (end 188.990053 37.455053) (width 0.2) (layer F.Cu) (net 34)) (segment (start 188.990053 37.455053) (end 189.865 38.33) (width 0.2) (layer F.Cu) (net 34) (status 20)) (segment (start 182.650043 37.005043) (end 187.303047 37.005043) (width 0.2) (layer F.Cu) (net 34)) (segment (start 180.975 35.33) (end 182.650043 37.005043) (width 0.2) (layer F.Cu) (net 34)) (segment (start 180.975 34.355) (end 180.975 35.33) (width 0.2) (layer F.Cu) (net 34) (status 10)) (segment (start 187.489447 36.555032) (end 187.939457 37.005042) (width 0.2) (layer F.Cu) (net 35)) (segment (start 191.135 38.33) (end 191.135 39.305) (width 0.2) (layer F.Cu) (net 35) (status 30)) (segment (start 187.939457 37.005042) (end 189.810042 37.005042) (width 0.2) (layer F.Cu) (net 35)) (segment (start 189.810042 37.005042) (end 191.135 38.33) (width 0.2) (layer F.Cu) (net 35) (status 20)) (segment (start 183.470032 36.555032) (end 187.489447 36.555032) (width 0.2) (layer F.Cu) (net 35)) (segment (start 182.245 35.33) (end 183.470032 36.555032) (width 0.2) (layer F.Cu) (net 35)) (segment (start 182.245 34.355) (end 182.245 35.33) (width 0.2) (layer F.Cu) (net 35) (status 10)) (segment (start 183.515 34.355) (end 183.515 35.33) (width 0.2) (layer F.Cu) (net 36) (status 10)) (segment (start 184.290021 36.105021) (end 187.675847 36.105021) (width 0.2) (layer F.Cu) (net 36)) (segment (start 187.675847 36.105021) (end 188.125857 36.555031) (width 0.2) (layer F.Cu) (net 36)) (segment (start 188.125857 36.555031) (end 190.630031 36.555031) (width 0.2) (layer F.Cu) (net 36)) (segment (start 190.630031 36.555031) (end 192.405 38.33) (width 0.2) (layer F.Cu) (net 36) (status 20)) (segment (start 183.515 35.33) (end 184.290021 36.105021) (width 0.2) (layer F.Cu) (net 36)) (segment (start 192.405 38.33) (end 192.405 39.305) (width 0.2) (layer F.Cu) (net 36) (status 30)) (segment (start 191.45002 36.10502) (end 193.675 38.33) (width 0.2) (layer F.Cu) (net 37) (status 20)) (segment (start 184.785 34.355) (end 184.785 35.33) (width 0.2) (layer F.Cu) (net 37) (status 10)) (segment (start 184.785 35.33) (end 185.11001 35.65501) (width 0.2) (layer F.Cu) (net 37)) (segment (start 185.11001 35.65501) (end 187.862247 35.65501) (width 0.2) (layer F.Cu) (net 37)) (segment (start 187.862247 35.65501) (end 188.312257 36.10502) (width 0.2) (layer F.Cu) (net 37)) (segment (start 193.675 38.33) (end 193.675 39.305) (width 0.2) (layer F.Cu) (net 37) (status 30)) (segment (start 188.312257 36.10502) (end 191.45002 36.10502) (width 0.2) (layer F.Cu) (net 37)) (segment (start 187.198648 34.355) (end 188.498657 35.655009) (width 0.2) (layer F.Cu) (net 38)) (segment (start 186.055 34.355) (end 187.198648 34.355) (width 0.2) (layer F.Cu) (net 38) (status 10)) (segment (start 192.27001 35.65501) (end 194.945 38.33) (width 0.2) (layer F.Cu) (net 38) (status 20)) (segment (start 188.498657 35.655009) (end 192.27001 35.65501) (width 0.2) (layer F.Cu) (net 38)) (segment (start 194.945 38.33) (end 194.945 39.305) (width 0.2) (layer F.Cu) (net 38) (status 30)) (segment (start 184.785 38.46209) (end 185.517035 37.730055) (width 0.2) (layer F.Cu) (net 39) (status 10)) (via (at 185.517035 37.730055) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 39)) (segment (start 184.785 39.305) (end 184.785 38.46209) (width 0.2) (layer F.Cu) (net 39) (status 30)) (segment (start 195.691256 37.330056) (end 195.6992 37.338) (width 0.2) (layer B.Cu) (net 39)) (segment (start 185.917034 37.330056) (end 195.691256 37.330056) (width 0.2) (layer B.Cu) (net 39) (tstamp 601CE76E)) (segment (start 196.215 39.305) (end 195.6992 38.7892) (width 0.2) (layer F.Cu) (net 39) (status 10)) (segment (start 185.517035 37.730055) (end 185.917034 37.330056) (width 0.2) (layer B.Cu) (net 39)) (segment (start 195.6992 38.7892) (end 195.6992 37.338) (width 0.2) (layer F.Cu) (net 39)) (via (at 195.6992 37.338) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 39)) (segment (start 116.84 31.75) (end 111.76 31.75) (width 2) (layer F.Cu) (net 40) (status 30)) (segment (start 108.48 31.75) (end 107.21 30.48) (width 0.55) (layer F.Cu) (net 40) (status 20)) (segment (start 111.76 31.75) (end 108.48 31.75) (width 0.55) (layer F.Cu) (net 40) (status 10)) (segment (start 186.055 39.305) (end 186.895 40.145) (width 0.25) (layer F.Cu) (net 40) (status 10)) (segment (start 186.895 40.145) (end 187.96 40.145) (width 0.25) (layer F.Cu) (net 40) (status 20)) (segment (start 79.58 40.145) (end 78.74 39.305) (width 0.25) (layer F.Cu) (net 40) (status 20)) (segment (start 80.645 40.145) (end 79.58 40.145) (width 0.25) (layer F.Cu) (net 40) (status 10)) (segment (start 104.57 38.875) (end 104.14 39.305) (width 0.25) (layer F.Cu) (net 40) (status 20)) (segment (start 106.045 38.875) (end 104.57 38.875) (width 0.25) (layer F.Cu) (net 40) (status 10)) (segment (start 196.025 46.545) (end 195.58 46.99) (width 0.25) (layer F.Cu) (net 40) (status 30)) (segment (start 196.025 44.45) (end 196.025 46.545) (width 0.25) (layer F.Cu) (net 40) (status 30)) (segment (start 176.975 46.545) (end 176.53 46.99) (width 0.25) (layer F.Cu) (net 40) (status 30)) (segment (start 176.975 44.45) (end 176.975 46.545) (width 0.25) (layer F.Cu) (net 40) (status 30)) (segment (start 157.925 46.545) (end 157.48 46.99) (width 0.25) (layer F.Cu) (net 40) (status 30)) (segment (start 157.925 44.45) (end 157.925 46.545) (width 0.25) (layer F.Cu) (net 40) (status 30)) (segment (start 91.885 46.545) (end 91.44 46.99) (width 0.25) (layer F.Cu) (net 40) (status 30)) (segment (start 91.885 44.45) (end 91.885 46.545) (width 0.25) (layer F.Cu) (net 40) (status 30)) (segment (start 72.835 46.545) (end 72.39 46.99) (width 0.25) (layer F.Cu) (net 40) (status 30)) (segment (start 72.835 44.45) (end 72.835 46.545) (width 0.25) (layer F.Cu) (net 40) (status 30)) (segment (start 53.785 46.545) (end 53.34 46.99) (width 0.25) (layer F.Cu) (net 40) (status 30)) (segment (start 53.785 44.45) (end 53.785 46.545) (width 0.25) (layer F.Cu) (net 40) (status 30)) (segment (start 176.12499 43.59999) (end 176.975 44.45) (width 0.35) (layer F.Cu) (net 40) (status 20)) (segment (start 157.925 44.26) (end 157.26499 43.59999) (width 0.35) (layer F.Cu) (net 40) (status 10)) (segment (start 157.925 44.45) (end 157.925 44.26) (width 0.35) (layer F.Cu) (net 40) (status 30)) (segment (start 111.76 33.16) (end 111.76 31.75) (width 0.25) (layer F.Cu) (net 40) (status 20)) (segment (start 106.045 38.875) (end 111.76 33.16) (width 0.25) (layer F.Cu) (net 40) (status 10)) (via (at 55.245 37.465) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 40)) (segment (start 71.12 39.305) (end 71.12 40.64) (width 0.25) (layer F.Cu) (net 40) (status 10)) (via (at 71.12 40.64) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 40)) (segment (start 55.245 35.56) (end 52.705 33.02) (width 0.25) (layer F.Cu) (net 40) (status 20)) (segment (start 55.245 37.465) (end 55.245 35.56) (width 0.25) (layer F.Cu) (net 40)) (segment (start 52.845 34.72) (end 52.64 34.925) (width 0.25) (layer F.Cu) (net 40) (status 30)) (segment (start 52.845 33.02) (end 52.845 34.72) (width 0.25) (layer F.Cu) (net 40) (status 30)) (segment (start 91.885 43.625) (end 91.839999 43.579999) (width 0.25) (layer F.Cu) (net 40)) (segment (start 91.885 44.45) (end 91.885 43.625) (width 0.25) (layer F.Cu) (net 40) (status 10)) (segment (start 81.41499 43.579999) (end 81.18999 43.804999) (width 0.35) (layer F.Cu) (net 40)) (segment (start 91.839999 43.579999) (end 81.41499 43.579999) (width 0.35) (layer F.Cu) (net 40)) (via (at 81.18999 43.804999) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 40)) (segment (start 72.835 44.45) (end 71.98499 43.59999) (width 0.35) (layer F.Cu) (net 40) (status 10)) (via (at 54.526428 43.75283) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 40)) (segment (start 55.245 43.034258) (end 54.526428 43.75283) (width 0.25) (layer B.Cu) (net 40)) (segment (start 55.245 37.465) (end 55.245 43.034258) (width 0.25) (layer B.Cu) (net 40)) (segment (start 54.48217 43.75283) (end 54.526428 43.75283) (width 0.35) (layer F.Cu) (net 40)) (segment (start 53.785 44.45) (end 54.48217 43.75283) (width 0.35) (layer F.Cu) (net 40) (status 10)) (segment (start 54.679268 43.59999) (end 54.526428 43.75283) (width 0.35) (layer F.Cu) (net 40)) (segment (start 71.98499 43.59999) (end 54.679268 43.59999) (width 0.35) (layer F.Cu) (net 40)) (segment (start 71.12 43.384984) (end 71.335006 43.59999) (width 0.25) (layer B.Cu) (net 40)) (via (at 71.335006 43.59999) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 40)) (segment (start 71.12 40.64) (end 71.12 43.384984) (width 0.25) (layer B.Cu) (net 40)) (via (at 188.976 40.639996) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 40)) (segment (start 187.96 40.145) (end 188.481004 40.145) (width 0.25) (layer F.Cu) (net 40) (status 10)) (segment (start 188.481004 40.145) (end 188.976 40.639996) (width 0.25) (layer F.Cu) (net 40)) (segment (start 159.982979 37.554979) (end 160.655 38.227) (width 0.25) (layer F.Cu) (net 40)) (segment (start 160.655 38.227) (end 160.655 39.305) (width 0.25) (layer F.Cu) (net 40) (status 20)) (segment (start 153.035 38.291821) (end 153.771842 37.554979) (width 0.25) (layer F.Cu) (net 40)) (segment (start 153.771842 37.554979) (end 159.982979 37.554979) (width 0.25) (layer F.Cu) (net 40)) (segment (start 153.035 39.305) (end 153.035 38.291821) (width 0.25) (layer F.Cu) (net 40) (status 10)) (segment (start 162.56 40.145) (end 162.801 40.145) (width 0.25) (layer F.Cu) (net 40) (status 30)) (via (at 163.322 39.624) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 40)) (segment (start 162.801 40.145) (end 163.322 39.624) (width 0.25) (layer F.Cu) (net 40) (status 10)) (segment (start 160.655 39.305) (end 160.974 39.624) (width 0.25) (layer F.Cu) (net 40) (status 10)) (segment (start 160.974 39.624) (end 163.322 39.624) (width 0.25) (layer F.Cu) (net 40)) (segment (start 176.12499 43.59999) (end 163.322006 43.59999) (width 0.35) (layer F.Cu) (net 40)) (segment (start 163.322 39.624) (end 163.322 43.599984) (width 0.25) (layer B.Cu) (net 40)) (segment (start 157.26499 43.59999) (end 163.322006 43.59999) (width 0.35) (layer F.Cu) (net 40)) (via (at 163.322006 43.59999) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 40)) (segment (start 163.322 43.599984) (end 163.322006 43.59999) (width 0.25) (layer B.Cu) (net 40)) (via (at 152.184995 43.599995) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 40)) (segment (start 157.26499 43.59999) (end 152.185 43.59999) (width 0.35) (layer F.Cu) (net 40)) (segment (start 152.185 43.59999) (end 152.184995 43.599995) (width 0.35) (layer F.Cu) (net 40)) (segment (start 149.72 43.815) (end 149.86 43.675) (width 0.25) (layer F.Cu) (net 40) (status 30)) (segment (start 147.255 43.815) (end 149.72 43.815) (width 0.25) (layer F.Cu) (net 40) (status 30)) (segment (start 152.10999 43.675) (end 152.184995 43.599995) (width 0.25) (layer F.Cu) (net 40)) (segment (start 149.86 43.675) (end 152.10999 43.675) (width 0.25) (layer F.Cu) (net 40) (status 10)) (via (at 179.578002 43.688) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 40)) (segment (start 179.489992 43.59999) (end 180.340002 44.45) (width 0.35) (layer F.Cu) (net 40)) (segment (start 176.12499 43.59999) (end 179.489992 43.59999) (width 0.35) (layer F.Cu) (net 40)) (segment (start 178.442187 42.552185) (end 178.442187 41.656) (width 0.25) (layer B.Cu) (net 40)) (segment (start 179.578002 43.688) (end 178.442187 42.552185) (width 0.25) (layer B.Cu) (net 40)) (via (at 178.442187 41.656) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 40)) (segment (start 178.435 41.648813) (end 178.442187 41.656) (width 0.25) (layer F.Cu) (net 40)) (segment (start 178.435 39.305) (end 178.435 41.648813) (width 0.25) (layer F.Cu) (net 40)) (segment (start 188.976 40.639996) (end 188.976 43.688) (width 0.25) (layer B.Cu) (net 40)) (via (at 188.976 43.688) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 40)) (segment (start 188.976 44.45) (end 188.976 43.688) (width 0.35) (layer F.Cu) (net 40)) (segment (start 180.340002 44.45) (end 188.976 44.45) (width 0.35) (layer F.Cu) (net 40)) (segment (start 188.976 44.45) (end 196.025 44.45) (width 0.35) (layer F.Cu) (net 40)) (via (at 95.758 40.894) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 40)) (segment (start 96.266 40.894) (end 95.758 40.894) (width 0.25) (layer F.Cu) (net 40)) (segment (start 96.52 40.64) (end 96.266 40.894) (width 0.25) (layer F.Cu) (net 40)) (segment (start 96.52 39.305) (end 96.52 40.64) (width 0.25) (layer F.Cu) (net 40)) (segment (start 95.278888 43.579999) (end 95.504 43.805111) (width 0.35) (layer F.Cu) (net 40)) (segment (start 95.758 40.894) (end 95.758 43.551111) (width 0.25) (layer B.Cu) (net 40)) (segment (start 95.758 43.551111) (end 95.504 43.805111) (width 0.25) (layer B.Cu) (net 40)) (segment (start 91.839999 43.579999) (end 95.278888 43.579999) (width 0.35) (layer F.Cu) (net 40)) (via (at 95.504 43.805111) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 40)) (via (at 110.743992 39.880968) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 40)) (segment (start 111.76 31.75) (end 111.76 38.86496) (width 0.35) (layer F.Cu) (net 40)) (segment (start 111.76 38.86496) (end 110.743992 39.880968) (width 0.35) (layer F.Cu) (net 40)) (segment (start 110.679071 44.506285) (end 110.878286 44.7055) (width 0.35) (layer F.Cu) (net 40)) (via (at 110.878286 44.7055) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 40)) (segment (start 95.504 43.805111) (end 96.205174 44.506285) (width 0.35) (layer F.Cu) (net 40)) (segment (start 110.743992 39.880968) (end 110.743992 44.571206) (width 0.35) (layer B.Cu) (net 40)) (segment (start 96.205174 44.506285) (end 110.679071 44.506285) (width 0.35) (layer F.Cu) (net 40)) (segment (start 110.743992 44.571206) (end 110.878286 44.7055) (width 0.35) (layer B.Cu) (net 40)) (via (at 81.236829 40.554957) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 40)) (segment (start 80.645 40.145) (end 80.826872 40.145) (width 0.25) (layer F.Cu) (net 40) (status 30)) (segment (start 81.18999 43.804999) (end 81.18999 40.601796) (width 0.25) (layer B.Cu) (net 40)) (segment (start 81.18999 40.601796) (end 81.236829 40.554957) (width 0.25) (layer B.Cu) (net 40)) (segment (start 80.826872 40.145) (end 81.236829 40.554957) (width 0.25) (layer F.Cu) (net 40) (status 10)) (segment (start 80.984981 43.59999) (end 81.18999 43.804999) (width 0.35) (layer F.Cu) (net 40)) (segment (start 71.98499 43.59999) (end 80.984981 43.59999) (width 0.35) (layer F.Cu) (net 40)) (segment (start 150.368 41.783) (end 150.368 40.480979) (width 0.35) (layer B.Cu) (net 40)) (via (at 150.368 40.480979) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 40)) (segment (start 152.184995 43.599995) (end 150.368 41.783) (width 0.35) (layer B.Cu) (net 40)) (segment (start 111.146055 40.283031) (end 110.743992 39.880968) (width 0.35) (layer F.Cu) (net 40)) (segment (start 150.170052 40.283031) (end 111.146055 40.283031) (width 0.35) (layer F.Cu) (net 40)) (segment (start 150.368 40.480979) (end 150.170052 40.283031) (width 0.35) (layer F.Cu) (net 40)) (segment (start 186.88 52.705) (end 194.7925 52.705) (width 0.2) (layer F.Cu) (net 41) (status 30)) (segment (start 175.7425 52.705) (end 167.83 52.705) (width 0.2) (layer F.Cu) (net 42) (status 30)) (segment (start 151.955 52.705) (end 156.6925 52.705) (width 0.2) (layer F.Cu) (net 43) (status 30)) (segment (start 100.14 52.705) (end 92.2275 52.705) (width 0.2) (layer F.Cu) (net 44) (status 30)) (via (at 207.137 39.37) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 45)) (segment (start 207.137 39.37) (end 210.82 39.37) (width 0.2) (layer B.Cu) (net 45)) (segment (start 205.105 39.37) (end 207.137 39.37) (width 0.2) (layer F.Cu) (net 45)) (segment (start 203.109999 41.365001) (end 205.105 39.37) (width 0.2) (layer F.Cu) (net 45)) (segment (start 184.600001 41.365001) (end 203.109999 41.365001) (width 0.2) (layer F.Cu) (net 45)) (segment (start 183.515 40.28) (end 184.600001 41.365001) (width 0.2) (layer F.Cu) (net 45)) (segment (start 183.515 39.305) (end 183.515 40.28) (width 0.2) (layer F.Cu) (net 45)) (via (at 134.62 39.624) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 46)) (segment (start 156.845 34.355) (end 156.845 35.33) (width 0.2) (layer F.Cu) (net 46)) (segment (start 155.070032 37.104968) (end 152.002264 37.104968) (width 0.2) (layer F.Cu) (net 46)) (segment (start 152.002264 37.104968) (end 149.29921 39.808022) (width 0.2) (layer F.Cu) (net 46)) (segment (start 156.845 35.33) (end 155.070032 37.104968) (width 0.2) (layer F.Cu) (net 46)) (segment (start 149.29921 39.808022) (end 134.804022 39.808022) (width 0.2) (layer F.Cu) (net 46)) (segment (start 134.804022 39.808022) (end 134.62 39.624) (width 0.2) (layer F.Cu) (net 46)) (segment (start 134.62 46.482) (end 134.112 46.99) (width 0.2) (layer B.Cu) (net 46)) (segment (start 134.62 39.624) (end 134.62 46.482) (width 0.2) (layer B.Cu) (net 46)) (via (at 134.112 46.99) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 46)) (segment (start 134.112 47.851553) (end 134.112 46.99) (width 0.2) (layer F.Cu) (net 46)) (segment (start 140.490479 54.230032) (end 134.112 47.851553) (width 0.2) (layer F.Cu) (net 46)) (segment (start 183.704968 54.230032) (end 140.490479 54.230032) (width 0.2) (layer F.Cu) (net 46)) (segment (start 185.23 52.705) (end 183.704968 54.230032) (width 0.2) (layer F.Cu) (net 46)) (segment (start 149.012809 39.458012) (end 135.573726 39.458012) (width 0.2) (layer F.Cu) (net 47)) (segment (start 151.915789 36.555032) (end 149.012809 39.458012) (width 0.2) (layer F.Cu) (net 47)) (segment (start 154.349968 36.555032) (end 151.915789 36.555032) (width 0.2) (layer F.Cu) (net 47)) (segment (start 155.575 35.33) (end 154.349968 36.555032) (width 0.2) (layer F.Cu) (net 47)) (segment (start 155.575 34.355) (end 155.575 35.33) (width 0.2) (layer F.Cu) (net 47)) (segment (start 135.573726 39.458012) (end 135.179857 39.064143) (width 0.2) (layer F.Cu) (net 47)) (via (at 135.179857 39.064143) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 47)) (via (at 135.026158 47.027638) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 47)) (segment (start 166.18 52.705) (end 165.104979 53.780021) (width 0.2) (layer F.Cu) (net 47)) (segment (start 135.026158 48.158158) (end 135.026158 47.027638) (width 0.2) (layer F.Cu) (net 47)) (segment (start 135.179857 39.064143) (end 135.179857 46.873939) (width 0.2) (layer B.Cu) (net 47)) (segment (start 135.179857 46.873939) (end 135.026158 47.027638) (width 0.2) (layer B.Cu) (net 47)) (segment (start 165.104979 53.780021) (end 140.648021 53.780021) (width 0.2) (layer F.Cu) (net 47)) (segment (start 140.648021 53.780021) (end 135.026158 48.158158) (width 0.2) (layer F.Cu) (net 47)) (via (at 135.915471 46.85158) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 48)) (segment (start 135.915471 48.143493) (end 135.915471 46.85158) (width 0.2) (layer F.Cu) (net 48)) (segment (start 141.101988 53.33001) (end 135.915471 48.143493) (width 0.2) (layer F.Cu) (net 48)) (segment (start 150.305 52.705) (end 149.67999 53.33001) (width 0.2) (layer F.Cu) (net 48) (status 10)) (segment (start 149.67999 53.33001) (end 141.101988 53.33001) (width 0.2) (layer F.Cu) (net 48)) (via (at 135.89908 38.784494) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 48)) (segment (start 135.915471 38.800885) (end 135.89908 38.784494) (width 0.2) (layer B.Cu) (net 48)) (segment (start 135.915471 46.85158) (end 135.915471 38.800885) (width 0.2) (layer B.Cu) (net 48)) (segment (start 154.305 34.355) (end 154.305 35.33) (width 0.2) (layer F.Cu) (net 48)) (segment (start 151.729389 36.105021) (end 148.726409 39.108001) (width 0.2) (layer F.Cu) (net 48)) (segment (start 154.305 35.33) (end 153.529979 36.105021) (width 0.2) (layer F.Cu) (net 48)) (segment (start 153.529979 36.105021) (end 151.729389 36.105021) (width 0.2) (layer F.Cu) (net 48)) (segment (start 148.726409 39.108001) (end 136.222587 39.108001) (width 0.2) (layer F.Cu) (net 48)) (segment (start 136.222587 39.108001) (end 135.89908 38.784494) (width 0.2) (layer F.Cu) (net 48)) (segment (start 102.87 39.305) (end 102.39899 38.83399) (width 0.2) (layer F.Cu) (net 49)) (via (at 102.39899 38.1) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 49)) (segment (start 102.39899 38.83399) (end 102.39899 38.1) (width 0.2) (layer F.Cu) (net 49)) (via (at 103.074684 48.981362) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 49)) (segment (start 101.79 52.705) (end 101.79 50.266046) (width 0.2) (layer F.Cu) (net 49)) (segment (start 101.79 50.266046) (end 103.074684 48.981362) (width 0.2) (layer F.Cu) (net 49)) (segment (start 102.39899 38.1) (end 102.39899 48.305668) (width 0.2) (layer B.Cu) (net 49)) (segment (start 102.39899 48.305668) (end 103.074684 48.981362) (width 0.2) (layer B.Cu) (net 49)) (segment (start 159.205021 41.370021) (end 158.115 40.28) (width 0.2) (layer F.Cu) (net 50)) (segment (start 158.115 40.28) (end 158.115 39.305) (width 0.2) (layer F.Cu) (net 50) (status 20)) (segment (start 175.099979 41.370021) (end 159.205021 41.370021) (width 0.2) (layer F.Cu) (net 50)) (segment (start 177.165 39.305) (end 175.099979 41.370021) (width 0.2) (layer F.Cu) (net 50) (status 10)) (via (at 101.6 46.736) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 51)) (segment (start 112.136264 46.455543) (end 101.880457 46.455543) (width 0.2) (layer F.Cu) (net 51)) (segment (start 142.305 50.165) (end 140.610996 50.165) (width 0.2) (layer F.Cu) (net 51)) (segment (start 140.610996 50.165) (end 136.252314 45.806318) (width 0.2) (layer F.Cu) (net 51)) (segment (start 112.785489 45.806318) (end 112.136264 46.455543) (width 0.2) (layer F.Cu) (net 51)) (segment (start 136.252314 45.806318) (end 112.785489 45.806318) (width 0.2) (layer F.Cu) (net 51)) (segment (start 101.880457 46.455543) (end 101.6 46.736) (width 0.2) (layer F.Cu) (net 51)) (via (at 101.6 37.846) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 51)) (segment (start 101.6 34.355) (end 101.6 37.846) (width 0.2) (layer F.Cu) (net 51)) (segment (start 101.6 46.736) (end 101.6 37.846) (width 0.2) (layer B.Cu) (net 51)) (segment (start 148.589999 38.608) (end 136.652 38.608) (width 0.2) (layer F.Cu) (net 52)) (segment (start 153.035 34.355) (end 153.035 35.33) (width 0.2) (layer F.Cu) (net 52)) (via (at 136.652 38.608) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 52)) (segment (start 152.70999 35.65501) (end 151.542989 35.65501) (width 0.2) (layer F.Cu) (net 52)) (segment (start 153.035 35.33) (end 152.70999 35.65501) (width 0.2) (layer F.Cu) (net 52)) (segment (start 151.542989 35.65501) (end 148.589999 38.608) (width 0.2) (layer F.Cu) (net 52)) (segment (start 136.652 45.466) (end 137.16 45.974) (width 0.2) (layer B.Cu) (net 52)) (segment (start 136.652 38.608) (end 136.652 45.466) (width 0.2) (layer B.Cu) (net 52)) (via (at 137.16 45.974) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 52)) (segment (start 140.081 48.895) (end 137.16 45.974) (width 0.2) (layer F.Cu) (net 52)) (segment (start 142.305 48.895) (end 140.081 48.895) (width 0.2) (layer F.Cu) (net 52)) (segment (start 151.765 40.28) (end 150.839011 41.205989) (width 0.2) (layer F.Cu) (net 53)) (segment (start 151.765 39.305) (end 151.765 40.28) (width 0.2) (layer F.Cu) (net 53)) (segment (start 139.21071 40.758042) (end 102.078042 40.758042) (width 0.2) (layer F.Cu) (net 53)) (segment (start 150.839011 41.205989) (end 139.658657 41.205989) (width 0.2) (layer F.Cu) (net 53)) (segment (start 139.658657 41.205989) (end 139.21071 40.758042) (width 0.2) (layer F.Cu) (net 53)) (segment (start 102.078042 40.758042) (end 101.6 40.28) (width 0.2) (layer F.Cu) (net 53)) (segment (start 101.6 40.28) (end 101.6 39.305) (width 0.2) (layer F.Cu) (net 53)) (segment (start 35.56 36.83) (end 36.83 35.56) (width 0.2) (layer F.Cu) (net 54)) (segment (start 46.715 37.465) (end 47.69 37.465) (width 0.2) (layer F.Cu) (net 54)) (segment (start 44.81 35.56) (end 46.715 37.465) (width 0.2) (layer F.Cu) (net 54)) (segment (start 36.83 35.56) (end 44.81 35.56) (width 0.2) (layer F.Cu) (net 54)) (segment (start 50.531572 38.735) (end 52.64 38.735) (width 0.2) (layer F.Cu) (net 55) (status 20)) (segment (start 49.886582 38.09001) (end 50.531572 38.735) (width 0.2) (layer F.Cu) (net 55)) (segment (start 44.44001 38.09001) (end 49.886582 38.09001) (width 0.2) (layer F.Cu) (net 55)) (segment (start 36.83999 38.09001) (end 44.44001 38.09001) (width 0.2) (layer F.Cu) (net 55)) (segment (start 35.56 39.37) (end 36.83999 38.09001) (width 0.2) (layer F.Cu) (net 55)) (segment (start 66.788999 41.161001) (end 67.993999 41.161001) (width 0.2) (layer F.Cu) (net 56)) (segment (start 67.993999 41.161001) (end 69.85 39.305) (width 0.2) (layer F.Cu) (net 56) (status 20)) (segment (start 66.788999 41.161001) (end 67.196001 41.161001) (width 0.2) (layer F.Cu) (net 56)) (segment (start 57.359233 41.161001) (end 53.663232 37.465) (width 0.2) (layer F.Cu) (net 56)) (segment (start 66.788999 41.161001) (end 57.359233 41.161001) (width 0.2) (layer F.Cu) (net 56)) (segment (start 53.663232 37.465) (end 52.64 37.465) (width 0.2) (layer F.Cu) (net 56) (status 20)) (segment (start 81.09 52.705) (end 73.1775 52.705) (width 0.2) (layer F.Cu) (net 57) (status 30)) (segment (start 62.04 52.705) (end 54.1275 52.705) (width 0.2) (layer F.Cu) (net 58) (status 30)) (segment (start 62.23 33.38) (end 64.495 31.115) (width 0.55) (layer F.Cu) (net 59) (status 10)) (segment (start 62.23 34.355) (end 62.23 33.38) (width 0.55) (layer F.Cu) (net 59) (status 30)) (segment (start 68.065 31.115) (end 69.97 29.21) (width 0.55) (layer F.Cu) (net 59) (status 20)) (segment (start 64.495 31.115) (end 68.065 31.115) (width 0.55) (layer F.Cu) (net 59)) (segment (start 63.5 34.355) (end 63.5 33.38) (width 0.55) (layer F.Cu) (net 60) (status 30)) (segment (start 63.5 33.38) (end 65.01499 31.865011) (width 0.55) (layer F.Cu) (net 60) (status 10)) (segment (start 65.01499 31.865011) (end 69.814989 31.865011) (width 0.55) (layer F.Cu) (net 60)) (segment (start 69.814989 31.865011) (end 72.47 29.21) (width 0.55) (layer F.Cu) (net 60) (status 20)) (segment (start 76.875 31.115) (end 74.97 29.21) (width 0.55) (layer F.Cu) (net 61) (status 20)) (segment (start 79.31 31.115) (end 76.875 31.115) (width 0.55) (layer F.Cu) (net 61)) (segment (start 82.55 34.355) (end 79.31 31.115) (width 0.55) (layer F.Cu) (net 61) (status 10)) (segment (start 79.65 29.21) (end 77.47 29.21) (width 0.55) (layer F.Cu) (net 62) (status 20)) (segment (start 83.82 33.38) (end 79.65 29.21) (width 0.55) (layer F.Cu) (net 62) (status 10)) (segment (start 83.82 34.355) (end 83.82 33.38) (width 0.55) (layer F.Cu) (net 62) (status 30)) (segment (start 51.421153 29.21) (end 50.92 29.21) (width 0.55) (layer F.Cu) (net 63) (status 30)) (segment (start 56.566153 34.355) (end 51.421153 29.21) (width 0.55) (layer F.Cu) (net 63) (status 20)) (segment (start 57.15 34.355) (end 56.566153 34.355) (width 0.55) (layer F.Cu) (net 63) (status 10)) (segment (start 53.8639 29.21) (end 53.42 29.21) (width 0.55) (layer F.Cu) (net 64) (status 30)) (segment (start 58.42 33.7661) (end 53.8639 29.21) (width 0.55) (layer F.Cu) (net 64) (status 30)) (segment (start 58.42 34.355) (end 58.42 33.7661) (width 0.55) (layer F.Cu) (net 64) (status 30)) (segment (start 59.69 32.98) (end 55.92 29.21) (width 0.55) (layer F.Cu) (net 65) (status 20)) (segment (start 59.69 34.355) (end 59.69 32.98) (width 0.55) (layer F.Cu) (net 65) (status 10)) (segment (start 60.96 31.75) (end 58.42 29.21) (width 0.55) (layer F.Cu) (net 66) (status 20)) (segment (start 60.96 34.355) (end 60.96 31.75) (width 0.55) (layer F.Cu) (net 66) (status 10)) (segment (start 74.485 46.545) (end 74.93 46.99) (width 0.2) (layer F.Cu) (net 67) (status 30)) (segment (start 74.485 44.45) (end 74.485 46.545) (width 0.2) (layer F.Cu) (net 67) (status 30)) (segment (start 141.33 46.355) (end 142.305 46.355) (width 0.2) (layer F.Cu) (net 67)) (segment (start 98.459646 45.755521) (end 111.563464 45.755521) (width 0.2) (layer F.Cu) (net 67)) (segment (start 76.105001 48.165001) (end 96.050166 48.165001) (width 0.2) (layer F.Cu) (net 67)) (segment (start 74.93 46.99) (end 76.105001 48.165001) (width 0.2) (layer F.Cu) (net 67)) (segment (start 139.881296 44.906296) (end 141.33 46.355) (width 0.2) (layer F.Cu) (net 67)) (segment (start 112.412689 44.906296) (end 139.881296 44.906296) (width 0.2) (layer F.Cu) (net 67)) (segment (start 111.563464 45.755521) (end 112.412689 44.906296) (width 0.2) (layer F.Cu) (net 67)) (segment (start 96.050166 48.165001) (end 98.459646 45.755521) (width 0.2) (layer F.Cu) (net 67)) (segment (start 55.435 46.545) (end 55.88 46.99) (width 0.2) (layer F.Cu) (net 68) (status 30)) (segment (start 55.435 44.45) (end 55.435 46.545) (width 0.2) (layer F.Cu) (net 68) (status 30)) (segment (start 139.061307 45.356307) (end 141.33 47.625) (width 0.2) (layer F.Cu) (net 68)) (segment (start 111.849864 46.105532) (end 112.599089 45.356307) (width 0.2) (layer F.Cu) (net 68)) (segment (start 97.020008 48.615012) (end 99.529488 46.105532) (width 0.2) (layer F.Cu) (net 68)) (segment (start 99.529488 46.105532) (end 111.849864 46.105532) (width 0.2) (layer F.Cu) (net 68)) (segment (start 55.88 46.99) (end 57.505012 48.615012) (width 0.2) (layer F.Cu) (net 68)) (segment (start 57.505012 48.615012) (end 97.020008 48.615012) (width 0.2) (layer F.Cu) (net 68)) (segment (start 141.33 47.625) (end 142.305 47.625) (width 0.2) (layer F.Cu) (net 68)) (segment (start 112.599089 45.356307) (end 139.061307 45.356307) (width 0.2) (layer F.Cu) (net 68)) (via (at 103.886 37.846) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 69)) (segment (start 104.14 34.355) (end 104.14 37.592) (width 0.2) (layer F.Cu) (net 69)) (segment (start 104.14 37.592) (end 103.886 37.846) (width 0.2) (layer F.Cu) (net 69)) (segment (start 103.886 37.846) (end 103.886 47.94124) (width 0.2) (layer B.Cu) (net 69)) (segment (start 103.886 47.94124) (end 103.72662 48.10062) (width 0.2) (layer B.Cu) (net 69)) (via (at 103.72662 48.10062) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 69)) (segment (start 102.83557 48.10062) (end 103.72662 48.10062) (width 0.2) (layer F.Cu) (net 69)) (segment (start 84.57998 50.86502) (end 100.07117 50.86502) (width 0.2) (layer F.Cu) (net 69)) (segment (start 82.74 52.705) (end 84.57998 50.86502) (width 0.2) (layer F.Cu) (net 69)) (segment (start 100.07117 50.86502) (end 102.83557 48.10062) (width 0.2) (layer F.Cu) (net 69)) (via (at 103.152339 47.530555) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 70)) (via (at 103.124 37.846) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 70)) (segment (start 102.87 34.355) (end 102.87 37.592) (width 0.2) (layer F.Cu) (net 70)) (segment (start 102.87 37.592) (end 103.124 37.846) (width 0.2) (layer F.Cu) (net 70)) (segment (start 103.152339 47.530555) (end 103.152339 37.874339) (width 0.2) (layer B.Cu) (net 70)) (segment (start 103.152339 37.874339) (end 103.124 37.846) (width 0.2) (layer B.Cu) (net 70)) (segment (start 102.798786 47.530555) (end 103.152339 47.530555) (width 0.2) (layer F.Cu) (net 70)) (segment (start 99.81433 50.515011) (end 102.798786 47.530555) (width 0.2) (layer F.Cu) (net 70)) (segment (start 65.879989 50.515011) (end 99.81433 50.515011) (width 0.2) (layer F.Cu) (net 70)) (segment (start 63.69 52.705) (end 65.879989 50.515011) (width 0.2) (layer F.Cu) (net 70)) (segment (start 95.25 39.305) (end 93.275042 41.279958) (width 0.2) (layer F.Cu) (net 71)) (segment (start 93.275042 41.279958) (end 77.199958 41.279958) (width 0.2) (layer F.Cu) (net 71)) (segment (start 76.2 40.28) (end 76.2 39.305) (width 0.2) (layer F.Cu) (net 71)) (segment (start 77.199958 41.279958) (end 76.2 40.28) (width 0.2) (layer F.Cu) (net 71)) (segment (start 81.92499 40.326758) (end 81.92499 38.23699) (width 0.2) (layer F.Cu) (net 72)) (segment (start 81.92499 38.23699) (end 81.28 37.592) (width 0.2) (layer F.Cu) (net 72)) (segment (start 77.47 38.33) (end 77.47 39.305) (width 0.2) (layer F.Cu) (net 72) (status 30)) (segment (start 81.28 37.592) (end 78.208 37.592) (width 0.2) (layer F.Cu) (net 72)) (segment (start 78.208 37.592) (end 77.47 38.33) (width 0.2) (layer F.Cu) (net 72) (status 20)) (segment (start 83.49499 40.60501) (end 82.203242 40.60501) (width 0.2) (layer F.Cu) (net 72)) (segment (start 82.203242 40.60501) (end 81.92499 40.326758) (width 0.2) (layer F.Cu) (net 72)) (segment (start 83.82 40.28) (end 83.49499 40.60501) (width 0.2) (layer F.Cu) (net 72)) (segment (start 83.82 39.305) (end 83.82 40.28) (width 0.2) (layer F.Cu) (net 72) (status 10)) (segment (start 82.55 38.165) (end 78.74 34.355) (width 0.2) (layer F.Cu) (net 73) (status 20)) (segment (start 82.55 39.305) (end 82.55 38.165) (width 0.2) (layer F.Cu) (net 73) (status 10)) (segment (start 57.15 38.33) (end 57.15 39.305) (width 0.2) (layer F.Cu) (net 74) (status 30)) (segment (start 59.725065 35.754935) (end 57.15 38.33) (width 0.2) (layer F.Cu) (net 74) (status 20)) (segment (start 71.12 35.33) (end 70.695065 35.754935) (width 0.2) (layer F.Cu) (net 74)) (segment (start 70.695065 35.754935) (end 59.725065 35.754935) (width 0.2) (layer F.Cu) (net 74)) (segment (start 71.12 34.355) (end 71.12 35.33) (width 0.2) (layer F.Cu) (net 74) (status 10)) (segment (start 58.42 38.33) (end 58.42 39.305) (width 0.2) (layer F.Cu) (net 75) (status 30)) (segment (start 71.515054 36.204946) (end 60.545054 36.204946) (width 0.2) (layer F.Cu) (net 75)) (segment (start 60.545054 36.204946) (end 58.42 38.33) (width 0.2) (layer F.Cu) (net 75) (status 20)) (segment (start 72.39 35.33) (end 71.515054 36.204946) (width 0.2) (layer F.Cu) (net 75)) (segment (start 72.39 34.355) (end 72.39 35.33) (width 0.2) (layer F.Cu) (net 75) (status 10)) (segment (start 59.69 38.33) (end 59.69 39.305) (width 0.2) (layer F.Cu) (net 76) (status 30)) (segment (start 61.365043 36.654957) (end 59.69 38.33) (width 0.2) (layer F.Cu) (net 76) (status 20)) (segment (start 72.335043 36.654957) (end 61.365043 36.654957) (width 0.2) (layer F.Cu) (net 76)) (segment (start 73.66 35.33) (end 72.335043 36.654957) (width 0.2) (layer F.Cu) (net 76)) (segment (start 73.66 34.355) (end 73.66 35.33) (width 0.2) (layer F.Cu) (net 76) (status 10)) (segment (start 60.96 38.33) (end 60.96 39.305) (width 0.2) (layer F.Cu) (net 77) (status 30)) (segment (start 62.185032 37.104968) (end 60.96 38.33) (width 0.2) (layer F.Cu) (net 77) (status 20)) (segment (start 73.155032 37.104968) (end 62.185032 37.104968) (width 0.2) (layer F.Cu) (net 77)) (segment (start 74.93 35.33) (end 73.155032 37.104968) (width 0.2) (layer F.Cu) (net 77)) (segment (start 74.93 34.355) (end 74.93 35.33) (width 0.2) (layer F.Cu) (net 77) (status 10)) (segment (start 62.23 38.1) (end 62.23 39.305) (width 0.2) (layer F.Cu) (net 78) (status 20)) (segment (start 62.775021 37.554979) (end 62.23 38.1) (width 0.2) (layer F.Cu) (net 78)) (segment (start 73.975021 37.554979) (end 62.775021 37.554979) (width 0.2) (layer F.Cu) (net 78)) (segment (start 76.2 35.33) (end 73.975021 37.554979) (width 0.2) (layer F.Cu) (net 78)) (segment (start 76.2 34.355) (end 76.2 35.33) (width 0.2) (layer F.Cu) (net 78) (status 10)) (segment (start 77.47 34.355) (end 77.47 34.763343) (width 0.2) (layer F.Cu) (net 79) (status 30)) (segment (start 63.82501 38.00499) (end 63.5 38.33) (width 0.2) (layer F.Cu) (net 79) (status 20)) (segment (start 63.5 38.33) (end 63.5 39.305) (width 0.2) (layer F.Cu) (net 79) (status 30)) (segment (start 77.47 34.763343) (end 74.228353 38.00499) (width 0.2) (layer F.Cu) (net 79) (status 10)) (segment (start 74.228353 38.00499) (end 63.82501 38.00499) (width 0.2) (layer F.Cu) (net 79)) (segment (start 150.357522 51.435) (end 201.295 51.435) (width 0.2) (layer F.Cu) (net 80)) (segment (start 201.295 51.435) (end 210.82 41.91) (width 0.2) (layer F.Cu) (net 80)) (segment (start 149.087522 52.705) (end 150.357522 51.435) (width 0.2) (layer F.Cu) (net 80)) (segment (start 147.255 52.705) (end 149.087522 52.705) (width 0.2) (layer F.Cu) (net 80)) (segment (start 146.62999 50.80999) (end 147.255 51.435) (width 0.2) (layer F.Cu) (net 81)) (segment (start 136.207335 46.256329) (end 140.760996 50.80999) (width 0.2) (layer F.Cu) (net 81)) (segment (start 112.706446 46.805554) (end 113.255671 46.256329) (width 0.2) (layer F.Cu) (net 81)) (segment (start 113.255671 46.256329) (end 136.207335 46.256329) (width 0.2) (layer F.Cu) (net 81)) (segment (start 140.760996 50.80999) (end 146.62999 50.80999) (width 0.2) (layer F.Cu) (net 81)) (segment (start 99.444892 50.165) (end 102.804338 46.805554) (width 0.2) (layer F.Cu) (net 81)) (segment (start 102.804338 46.805554) (end 105.225554 46.805554) (width 0.2) (layer F.Cu) (net 81)) (segment (start 105.225554 46.805554) (end 112.706446 46.805554) (width 0.2) (layer F.Cu) (net 81)) (segment (start 105.41 46.875108) (end 105.41 48.07) (width 0.2) (layer F.Cu) (net 81)) (segment (start 105.479554 46.805554) (end 105.41 46.875108) (width 0.2) (layer F.Cu) (net 81)) (segment (start 39.878 50.165) (end 99.444892 50.165) (width 0.2) (layer F.Cu) (net 81)) (segment (start 34.29 43.18) (end 35.56 41.91) (width 0.2) (layer F.Cu) (net 81)) (segment (start 34.29 45.085) (end 34.29 43.18) (width 0.2) (layer F.Cu) (net 81)) (segment (start 39.37 50.165) (end 34.29 45.085) (width 0.2) (layer F.Cu) (net 81)) (segment (start 39.878 50.165) (end 39.37 50.165) (width 0.2) (layer F.Cu) (net 81)) (via (at 73.66 40.386) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 82)) (segment (start 73.66 40.386) (end 73.66 39.305) (width 0.2) (layer F.Cu) (net 82) (status 20)) (via (at 99.06 40.64) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 82)) (segment (start 99.06 40.64) (end 99.06 39.305) (width 0.2) (layer F.Cu) (net 82) (status 20)) (segment (start 98.425 41.275) (end 98.425 42.45499) (width 0.2) (layer B.Cu) (net 82)) (segment (start 99.06 40.64) (end 98.425 41.275) (width 0.2) (layer B.Cu) (net 82)) (via (at 98.425 42.45499) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 82)) (segment (start 157.115032 41.820032) (end 155.575 40.28) (width 0.2) (layer F.Cu) (net 82)) (segment (start 178.088242 38.00499) (end 177.79001 38.303221) (width 0.2) (layer F.Cu) (net 82)) (segment (start 177.79001 38.303221) (end 177.79001 40.326758) (width 0.2) (layer F.Cu) (net 82)) (segment (start 180.975 38.33) (end 180.64999 38.00499) (width 0.2) (layer F.Cu) (net 82)) (segment (start 176.296736 41.820032) (end 157.115032 41.820032) (width 0.2) (layer F.Cu) (net 82)) (segment (start 180.64999 38.00499) (end 178.088242 38.00499) (width 0.2) (layer F.Cu) (net 82)) (segment (start 155.575 40.28) (end 155.575 39.305) (width 0.2) (layer F.Cu) (net 82)) (segment (start 180.975 39.305) (end 180.975 38.33) (width 0.2) (layer F.Cu) (net 82)) (segment (start 177.79001 40.326758) (end 176.296736 41.820032) (width 0.2) (layer F.Cu) (net 82)) (segment (start 73.66 40.386) (end 73.66 42.223638) (width 0.2) (layer B.Cu) (net 82)) (segment (start 73.58867 42.45499) (end 73.508659 42.374979) (width 0.2) (layer F.Cu) (net 82)) (segment (start 98.425 42.45499) (end 73.58867 42.45499) (width 0.2) (layer F.Cu) (net 82)) (via (at 73.508659 42.374979) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 82)) (segment (start 73.66 42.223638) (end 73.508659 42.374979) (width 0.2) (layer B.Cu) (net 82)) (segment (start 73.428648 42.45499) (end 73.508659 42.374979) (width 0.2) (layer F.Cu) (net 82)) (segment (start 56.4264 42.45499) (end 73.428648 42.45499) (width 0.2) (layer F.Cu) (net 82)) (segment (start 54.60142 40.63001) (end 56.4264 42.45499) (width 0.2) (layer F.Cu) (net 82)) (segment (start 48.31501 40.63001) (end 54.60142 40.63001) (width 0.2) (layer F.Cu) (net 82)) (segment (start 47.69 40.005) (end 48.31501 40.63001) (width 0.2) (layer F.Cu) (net 82)) (segment (start 99.06 40.28) (end 99.06 39.305) (width 0.2) (layer F.Cu) (net 82)) (segment (start 139.472257 41.656) (end 138.924311 41.108054) (width 0.2) (layer F.Cu) (net 82)) (segment (start 155.575 38.33) (end 155.24999 38.00499) (width 0.2) (layer F.Cu) (net 82)) (segment (start 99.888054 41.108054) (end 99.06 40.28) (width 0.2) (layer F.Cu) (net 82)) (segment (start 138.924311 41.108054) (end 99.888054 41.108054) (width 0.2) (layer F.Cu) (net 82)) (segment (start 152.330768 41.656) (end 139.472257 41.656) (width 0.2) (layer F.Cu) (net 82)) (segment (start 153.66001 40.326758) (end 152.330768 41.656) (width 0.2) (layer F.Cu) (net 82)) (segment (start 153.958242 38.00499) (end 153.66001 38.303222) (width 0.2) (layer F.Cu) (net 82)) (segment (start 153.66001 38.303222) (end 153.66001 40.326758) (width 0.2) (layer F.Cu) (net 82)) (segment (start 155.24999 38.00499) (end 153.958242 38.00499) (width 0.2) (layer F.Cu) (net 82)) (segment (start 155.575 39.305) (end 155.575 38.33) (width 0.2) (layer F.Cu) (net 82)) (via (at 142.24 43.053) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 82)) (segment (start 142.305 43.118) (end 142.24 43.053) (width 0.2) (layer F.Cu) (net 82)) (segment (start 142.305 43.815) (end 142.305 43.118) (width 0.2) (layer F.Cu) (net 82)) (via (at 142.24 41.783) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 82)) (segment (start 142.24 43.053) (end 142.24 41.783) (width 0.2) (layer B.Cu) (net 82)) (segment (start 142.113 41.783) (end 141.986 41.656) (width 0.2) (layer F.Cu) (net 82)) (segment (start 142.24 41.783) (end 142.113 41.783) (width 0.2) (layer F.Cu) (net 82)) (via (at 204.724 41.910006) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 82)) (segment (start 180.975 39.305) (end 180.975 40.28) (width 0.2) (layer F.Cu) (net 82)) (segment (start 182.605006 41.910006) (end 204.724 41.910006) (width 0.2) (layer F.Cu) (net 82)) (segment (start 180.975 40.28) (end 182.605006 41.910006) (width 0.2) (layer F.Cu) (net 82)) (segment (start 210.82 44.45) (end 207.263994 44.45) (width 0.2) (layer B.Cu) (net 82)) (segment (start 207.263994 44.45) (end 204.724 41.910006) (width 0.2) (layer B.Cu) (net 82)) (segment (start 41.275 41.275) (end 47.69 41.275) (width 0.2) (layer F.Cu) (net 83)) (segment (start 39.37 43.18) (end 41.275 41.275) (width 0.2) (layer F.Cu) (net 83)) (segment (start 36.83 43.18) (end 39.37 43.18) (width 0.2) (layer F.Cu) (net 83)) (segment (start 35.56 44.45) (end 36.83 43.18) (width 0.2) (layer F.Cu) (net 83)) (zone (net 2) (net_name +12V) (layer F.Cu) (tstamp 604A13A4) (hatch edge 0.508) (connect_pads yes (clearance 0.508)) (min_thickness 0.254) (fill yes (arc_segments 32) (thermal_gap 0.508) (thermal_bridge_width 0.508) (smoothing fillet) (radius 1)) (polygon (pts (xy 139.065 34.925) (xy 130.175 34.925) (xy 130.175 26.67) (xy 139.065 26.67) ) ) (filled_polygon (pts (xy 138.235189 26.814376) (xy 138.39885 26.864022) (xy 138.549672 26.944638) (xy 138.68187 27.05313) (xy 138.790362 27.185328) (xy 138.870978 27.33615) (xy 138.920624 27.499811) (xy 138.938 27.676234) (xy 138.938 33.918766) (xy 138.920624 34.095189) (xy 138.870978 34.25885) (xy 138.790362 34.409672) (xy 138.68187 34.54187) (xy 138.549672 34.650362) (xy 138.39885 34.730978) (xy 138.235189 34.780624) (xy 138.058766 34.798) (xy 131.181234 34.798) (xy 131.004811 34.780624) (xy 130.84115 34.730978) (xy 130.690328 34.650362) (xy 130.55813 34.54187) (xy 130.449638 34.409672) (xy 130.369022 34.25885) (xy 130.319376 34.095189) (xy 130.302 33.918766) (xy 130.302 27.676234) (xy 130.319376 27.499811) (xy 130.369022 27.33615) (xy 130.449638 27.185328) (xy 130.55813 27.05313) (xy 130.690328 26.944638) (xy 130.84115 26.864022) (xy 131.004811 26.814376) (xy 131.181234 26.797) (xy 138.058766 26.797) ) ) ) (zone (net 1) (net_name GND) (layer F.Cu) (tstamp 604A13A1) (hatch edge 0.508) (connect_pads yes (clearance 0.508)) (min_thickness 0.254) (fill yes (arc_segments 32) (thermal_gap 0.508) (thermal_bridge_width 0.508) (smoothing fillet) (radius 1)) (polygon (pts (xy 128.905 34.925) (xy 120.015 34.925) (xy 120.015 28.575) (xy 128.905 28.575) ) ) (filled_polygon (pts (xy 128.075189 28.719376) (xy 128.23885 28.769022) (xy 128.389672 28.849638) (xy 128.52187 28.95813) (xy 128.630362 29.090328) (xy 128.710978 29.24115) (xy 128.760624 29.404811) (xy 128.778 29.581234) (xy 128.778 33.918766) (xy 128.760624 34.095189) (xy 128.710978 34.25885) (xy 128.630362 34.409672) (xy 128.52187 34.54187) (xy 128.389672 34.650362) (xy 128.23885 34.730978) (xy 128.075189 34.780624) (xy 127.898766 34.798) (xy 121.021234 34.798) (xy 120.844811 34.780624) (xy 120.68115 34.730978) (xy 120.530328 34.650362) (xy 120.39813 34.54187) (xy 120.289638 34.409672) (xy 120.209022 34.25885) (xy 120.159376 34.095189) (xy 120.142 33.918766) (xy 120.142 29.581234) (xy 120.159376 29.404811) (xy 120.209022 29.24115) (xy 120.289638 29.090328) (xy 120.39813 28.95813) (xy 120.530328 28.849638) (xy 120.68115 28.769022) (xy 120.844811 28.719376) (xy 121.021234 28.702) (xy 127.898766 28.702) ) ) ) (zone (net 2) (net_name +12V) (layer B.Cu) (tstamp 604A139E) (hatch edge 0.508) (priority 1) (connect_pads yes (clearance 0.508)) (min_thickness 0.254) (fill yes (arc_segments 32) (thermal_gap 0.508) (thermal_bridge_width 0.508) (smoothing fillet) (radius 1)) (polygon (pts (xy 139.065 35.052) (xy 130.175 35.052) (xy 130.175 29.845) (xy 139.065 29.845) ) ) (filled_polygon (pts (xy 138.235189 29.989376) (xy 138.39885 30.039022) (xy 138.549672 30.119638) (xy 138.68187 30.22813) (xy 138.790362 30.360328) (xy 138.870978 30.51115) (xy 138.920624 30.674811) (xy 138.938 30.851234) (xy 138.938 34.045766) (xy 138.920624 34.222189) (xy 138.870978 34.38585) (xy 138.790362 34.536672) (xy 138.68187 34.66887) (xy 138.549672 34.777362) (xy 138.39885 34.857978) (xy 138.235189 34.907624) (xy 138.058766 34.925) (xy 131.181234 34.925) (xy 131.004811 34.907624) (xy 130.84115 34.857978) (xy 130.690328 34.777362) (xy 130.55813 34.66887) (xy 130.449638 34.536672) (xy 130.369022 34.38585) (xy 130.319376 34.222189) (xy 130.302 34.045766) (xy 130.302 30.851234) (xy 130.319376 30.674811) (xy 130.369022 30.51115) (xy 130.449638 30.360328) (xy 130.55813 30.22813) (xy 130.690328 30.119638) (xy 130.84115 30.039022) (xy 131.004811 29.989376) (xy 131.181234 29.972) (xy 138.058766 29.972) ) ) ) (zone (net 1) (net_name GND) (layer F.Cu) (tstamp 604A139B) (hatch edge 0.508) (connect_pads yes (clearance 0.508)) (min_thickness 0.254) (fill yes (arc_segments 32) (thermal_gap 0.508) (thermal_bridge_width 0.508)) (polygon (pts (xy 200.406 41.18393) (xy 197.104 41.18393) (xy 197.104 38.38993) (xy 200.406 38.38993) ) ) (filled_polygon (pts (xy 200.279 40.630001) (xy 197.231 40.630001) (xy 197.231 38.51693) (xy 200.279 38.51693) ) ) ) (zone (net 1) (net_name GND) (layer F.Cu) (tstamp 604A1398) (hatch edge 0.508) (connect_pads yes (clearance 0.508)) (min_thickness 0.254) (fill yes (arc_segments 32) (thermal_gap 0.508) (thermal_bridge_width 0.508)) (polygon (pts (xy 175.006 40.92993) (xy 171.704 40.92993) (xy 171.704 38.13593) (xy 175.006 38.13593) ) ) (filled_polygon (pts (xy 174.879 40.551554) (xy 174.795533 40.635021) (xy 171.831 40.635021) (xy 171.831 38.353446) (xy 171.921516 38.26293) (xy 174.879 38.26293) ) ) ) (zone (net 1) (net_name GND) (layer F.Cu) (tstamp 604A1395) (hatch edge 0.508) (connect_pads yes (clearance 0.508)) (min_thickness 0.254) (fill yes (arc_segments 32) (thermal_gap 0.508) (thermal_bridge_width 0.508)) (polygon (pts (xy 92.964 40.92993) (xy 89.662 40.92993) (xy 89.662 38.13593) (xy 92.964 38.13593) ) ) (filled_polygon (pts (xy 92.837 40.544958) (xy 89.789 40.544958) (xy 89.789 40.395596) (xy 89.822929 40.283745) (xy 89.838072 40.13) (xy 89.838072 38.581) (xy 92.837 38.581) ) ) ) (zone (net 1) (net_name GND) (layer F.Cu) (tstamp 604A1392) (hatch edge 0.508) (connect_pads yes (clearance 0.508)) (min_thickness 0.254) (fill yes (arc_segments 32) (thermal_gap 0.508) (thermal_bridge_width 0.508)) (polygon (pts (xy 67.564 40.92993) (xy 64.262 40.92993) (xy 64.262 38.13593) (xy 67.564 38.13593) ) ) (filled_polygon (pts (xy 67.437 40.426001) (xy 64.389 40.426001) (xy 64.389 40.395596) (xy 64.422929 40.283745) (xy 64.438072 40.13) (xy 64.438072 38.73999) (xy 67.437 38.73999) ) ) ) (zone (net 1) (net_name GND) (layer F.Cu) (tstamp 604A138F) (hatch edge 0.508) (connect_pads yes (clearance 0.508)) (min_thickness 0.254) (fill yes (arc_segments 32) (thermal_gap 0.508) (thermal_bridge_width 1)) (polygon (pts (xy 148.082 36.83) (xy 141.478 36.83) (xy 141.478 32.385) (xy 148.082 32.385) ) ) (filled_polygon (pts (xy 147.955 36.703) (xy 141.605 36.703) (xy 141.605 32.512) (xy 147.955 32.512) ) ) ) (zone (net 1) (net_name GND) (layer B.Cu) (tstamp 604A138C) (hatch edge 0.508) (connect_pads (clearance 0.508)) (min_thickness 0.254) (fill yes (arc_segments 32) (thermal_gap 0.508) (thermal_bridge_width 0.508)) (polygon (pts (xy 227.965 77.47) (xy 22.86 77.47) (xy 22.86 22.86) (xy 227.965 22.86) ) ) (filled_polygon (pts (xy 31.946825 26.096376) (xy 31.855538 26.316764) (xy 31.809 26.550727) (xy 31.809 26.789273) (xy 31.855538 27.023236) (xy 31.946825 27.243624) (xy 32.079354 27.441968) (xy 32.248032 27.610646) (xy 32.446376 27.743175) (xy 32.666764 27.834462) (xy 32.900727 27.881) (xy 33.139273 27.881) (xy 33.373236 27.834462) (xy 33.593624 27.743175) (xy 33.791968 27.610646) (xy 33.960646 27.441968) (xy 34.093175 27.243624) (xy 34.184462 27.023236) (xy 34.231 26.789273) (xy 34.231 26.550727) (xy 34.184462 26.316764) (xy 34.093175 26.096376) (xy 34.068869 26.06) (xy 217.931466 26.06) (xy 217.511024 26.480442) (xy 217.129633 27.051234) (xy 216.866927 27.685463) (xy 216.733 28.358758) (xy 216.733 29.045242) (xy 216.866927 29.718537) (xy 217.129633 30.352766) (xy 217.511024 30.923558) (xy 217.996442 31.408976) (xy 218.567234 31.790367) (xy 219.201463 32.053073) (xy 219.874758 32.187) (xy 220.561242 32.187) (xy 221.234537 32.053073) (xy 221.868766 31.790367) (xy 222.439558 31.408976) (xy 222.86 30.988534) (xy 222.860001 50.291467) (xy 222.439558 49.871024) (xy 221.868766 49.489633) (xy 221.234537 49.226927) (xy 220.561242 49.093) (xy 219.874758 49.093) (xy 219.201463 49.226927) (xy 218.567234 49.489633) (xy 217.996442 49.871024) (xy 217.511024 50.356442) (xy 217.129633 50.927234) (xy 216.866927 51.561463) (xy 216.733 52.234758) (xy 216.733 52.921242) (xy 216.866927 53.594537) (xy 217.129633 54.228766) (xy 217.511024 54.799558) (xy 217.931466 55.22) (xy 216.948869 55.22) (xy 216.973175 55.183624) (xy 217.064462 54.963236) (xy 217.111 54.729273) (xy 217.111 54.490727) (xy 217.064462 54.256764) (xy 216.973175 54.036376) (xy 216.840646 53.838032) (xy 216.671968 53.669354) (xy 216.473624 53.536825) (xy 216.253236 53.445538) (xy 216.019273 53.399) (xy 215.780727 53.399) (xy 215.546764 53.445538) (xy 215.326376 53.536825) (xy 215.128032 53.669354) (xy 214.959354 53.838032) (xy 214.826825 54.036376) (xy 214.735538 54.256764) (xy 214.689 54.490727) (xy 214.689 54.729273) (xy 214.735538 54.963236) (xy 214.826825 55.183624) (xy 214.851131 55.22) (xy 126.746534 55.22) (xy 127.166976 54.799558) (xy 127.548367 54.228766) (xy 127.811073 53.594537) (xy 127.945 52.921242) (xy 127.945 52.234758) (xy 127.811073 51.561463) (xy 127.548367 50.927234) (xy 127.166976 50.356442) (xy 126.681558 49.871024) (xy 126.110766 49.489633) (xy 125.476537 49.226927) (xy 124.803242 49.093) (xy 124.116758 49.093) (xy 123.443463 49.226927) (xy 122.809234 49.489633) (xy 122.238442 49.871024) (xy 121.753024 50.356442) (xy 121.371633 50.927234) (xy 121.108927 51.561463) (xy 120.975 52.234758) (xy 120.975 52.921242) (xy 121.108927 53.594537) (xy 121.371633 54.228766) (xy 121.753024 54.799558) (xy 122.173466 55.22) (xy 30.988534 55.22) (xy 31.408976 54.799558) (xy 31.790367 54.228766) (xy 32.053073 53.594537) (xy 32.187 52.921242) (xy 32.187 52.234758) (xy 32.053073 51.561463) (xy 31.790367 50.927234) (xy 31.408976 50.356442) (xy 30.923558 49.871024) (xy 30.352766 49.489633) (xy 29.718537 49.226927) (xy 29.045242 49.093) (xy 28.358758 49.093) (xy 27.685463 49.226927) (xy 27.051234 49.489633) (xy 26.480442 49.871024) (xy 26.06 50.291466) (xy 26.06 47.84) (xy 49.311928 47.84) (xy 49.324188 47.964482) (xy 49.360498 48.08418) (xy 49.419463 48.194494) (xy 49.498815 48.291185) (xy 49.595506 48.370537) (xy 49.70582 48.429502) (xy 49.825518 48.465812) (xy 49.95 48.478072) (xy 50.51425 48.475) (xy 50.673 48.31625) (xy 50.673 47.117) (xy 49.47375 47.117) (xy 49.315 47.27575) (xy 49.311928 47.84) (xy 26.06 47.84) (xy 26.06 46.14) (xy 49.311928 46.14) (xy 49.315 46.70425) (xy 49.47375 46.863) (xy 50.673 46.863) (xy 50.673 45.66375) (xy 50.927 45.66375) (xy 50.927 46.863) (xy 50.947 46.863) (xy 50.947 47.117) (xy 50.927 47.117) (xy 50.927 48.31625) (xy 51.08575 48.475) (xy 51.65 48.478072) (xy 51.774482 48.465812) (xy 51.89418 48.429502) (xy 52.004494 48.370537) (xy 52.101185 48.291185) (xy 52.180537 48.194494) (xy 52.239502 48.08418) (xy 52.261513 48.01162) (xy 52.393368 48.143475) (xy 52.636589 48.30599) (xy 52.906842 48.417932) (xy 53.19374 48.475) (xy 53.48626 48.475) (xy 53.773158 48.417932) (xy 54.043411 48.30599) (xy 54.286632 48.143475) (xy 54.493475 47.936632) (xy 54.61 47.76224) (xy 54.726525 47.936632) (xy 54.933368 48.143475) (xy 55.176589 48.30599) (xy 55.446842 48.417932) (xy 55.73374 48.475) (xy 56.02626 48.475) (xy 56.313158 48.417932) (xy 56.583411 48.30599) (xy 56.826632 48.143475) (xy 57.033475 47.936632) (xy 57.098042 47.84) (xy 68.361928 47.84) (xy 68.374188 47.964482) (xy 68.410498 48.08418) (xy 68.469463 48.194494) (xy 68.548815 48.291185) (xy 68.645506 48.370537) (xy 68.75582 48.429502) (xy 68.875518 48.465812) (xy 69 48.478072) (xy 69.56425 48.475) (xy 69.723 48.31625) (xy 69.723 47.117) (xy 68.52375 47.117) (xy 68.365 47.27575) (xy 68.361928 47.84) (xy 57.098042 47.84) (xy 57.19599 47.693411) (xy 57.307932 47.423158) (xy 57.365 47.13626) (xy 57.365 46.84374) (xy 57.307932 46.556842) (xy 57.19599 46.286589) (xy 57.098043 46.14) (xy 68.361928 46.14) (xy 68.365 46.70425) (xy 68.52375 46.863) (xy 69.723 46.863) (xy 69.723 45.66375) (xy 69.977 45.66375) (xy 69.977 46.863) (xy 69.997 46.863) (xy 69.997 47.117) (xy 69.977 47.117) (xy 69.977 48.31625) (xy 70.13575 48.475) (xy 70.7 48.478072) (xy 70.824482 48.465812) (xy 70.94418 48.429502) (xy 71.054494 48.370537) (xy 71.151185 48.291185) (xy 71.230537 48.194494) (xy 71.289502 48.08418) (xy 71.311513 48.01162) (xy 71.443368 48.143475) (xy 71.686589 48.30599) (xy 71.956842 48.417932) (xy 72.24374 48.475) (xy 72.53626 48.475) (xy 72.823158 48.417932) (xy 73.093411 48.30599) (xy 73.336632 48.143475) (xy 73.543475 47.936632) (xy 73.66 47.76224) (xy 73.776525 47.936632) (xy 73.983368 48.143475) (xy 74.226589 48.30599) (xy 74.496842 48.417932) (xy 74.78374 48.475) (xy 75.07626 48.475) (xy 75.363158 48.417932) (xy 75.633411 48.30599) (xy 75.876632 48.143475) (xy 76.083475 47.936632) (xy 76.148042 47.84) (xy 87.411928 47.84) (xy 87.424188 47.964482) (xy 87.460498 48.08418) (xy 87.519463 48.194494) (xy 87.598815 48.291185) (xy 87.695506 48.370537) (xy 87.80582 48.429502) (xy 87.925518 48.465812) (xy 88.05 48.478072) (xy 88.61425 48.475) (xy 88.773 48.31625) (xy 88.773 47.117) (xy 87.57375 47.117) (xy 87.415 47.27575) (xy 87.411928 47.84) (xy 76.148042 47.84) (xy 76.24599 47.693411) (xy 76.357932 47.423158) (xy 76.415 47.13626) (xy 76.415 46.84374) (xy 76.357932 46.556842) (xy 76.24599 46.286589) (xy 76.148043 46.14) (xy 87.411928 46.14) (xy 87.415 46.70425) (xy 87.57375 46.863) (xy 88.773 46.863) (xy 88.773 45.66375) (xy 89.027 45.66375) (xy 89.027 46.863) (xy 89.047 46.863) (xy 89.047 47.117) (xy 89.027 47.117) (xy 89.027 48.31625) (xy 89.18575 48.475) (xy 89.75 48.478072) (xy 89.874482 48.465812) (xy 89.99418 48.429502) (xy 90.104494 48.370537) (xy 90.201185 48.291185) (xy 90.280537 48.194494) (xy 90.339502 48.08418) (xy 90.361513 48.01162) (xy 90.493368 48.143475) (xy 90.736589 48.30599) (xy 91.006842 48.417932) (xy 91.29374 48.475) (xy 91.58626 48.475) (xy 91.873158 48.417932) (xy 92.143411 48.30599) (xy 92.386632 48.143475) (xy 92.593475 47.936632) (xy 92.71 47.76224) (xy 92.826525 47.936632) (xy 93.033368 48.143475) (xy 93.276589 48.30599) (xy 93.546842 48.417932) (xy 93.83374 48.475) (xy 94.12626 48.475) (xy 94.413158 48.417932) (xy 94.683411 48.30599) (xy 94.926632 48.143475) (xy 95.133475 47.936632) (xy 95.29599 47.693411) (xy 95.407932 47.423158) (xy 95.465 47.13626) (xy 95.465 46.84374) (xy 95.407932 46.556842) (xy 95.29599 46.286589) (xy 95.133475 46.043368) (xy 94.926632 45.836525) (xy 94.683411 45.67401) (xy 94.413158 45.562068) (xy 94.12626 45.505) (xy 93.83374 45.505) (xy 93.546842 45.562068) (xy 93.276589 45.67401) (xy 93.033368 45.836525) (xy 92.826525 46.043368) (xy 92.71 46.21776) (xy 92.593475 46.043368) (xy 92.386632 45.836525) (xy 92.143411 45.67401) (xy 91.873158 45.562068) (xy 91.58626 45.505) (xy 91.29374 45.505) (xy 91.006842 45.562068) (xy 90.736589 45.67401) (xy 90.493368 45.836525) (xy 90.361513 45.96838) (xy 90.339502 45.89582) (xy 90.280537 45.785506) (xy 90.201185 45.688815) (xy 90.104494 45.609463) (xy 89.99418 45.550498) (xy 89.874482 45.514188) (xy 89.75 45.501928) (xy 89.18575 45.505) (xy 89.027 45.66375) (xy 88.773 45.66375) (xy 88.61425 45.505) (xy 88.05 45.501928) (xy 87.925518 45.514188) (xy 87.80582 45.550498) (xy 87.695506 45.609463) (xy 87.598815 45.688815) (xy 87.519463 45.785506) (xy 87.460498 45.89582) (xy 87.424188 46.015518) (xy 87.411928 46.14) (xy 76.148043 46.14) (xy 76.083475 46.043368) (xy 75.876632 45.836525) (xy 75.633411 45.67401) (xy 75.363158 45.562068) (xy 75.07626 45.505) (xy 74.78374 45.505) (xy 74.496842 45.562068) (xy 74.226589 45.67401) (xy 73.983368 45.836525) (xy 73.776525 46.043368) (xy 73.66 46.21776) (xy 73.543475 46.043368) (xy 73.336632 45.836525) (xy 73.093411 45.67401) (xy 72.823158 45.562068) (xy 72.53626 45.505) (xy 72.24374 45.505) (xy 71.956842 45.562068) (xy 71.686589 45.67401) (xy 71.443368 45.836525) (xy 71.311513 45.96838) (xy 71.289502 45.89582) (xy 71.230537 45.785506) (xy 71.151185 45.688815) (xy 71.054494 45.609463) (xy 70.94418 45.550498) (xy 70.824482 45.514188) (xy 70.7 45.501928) (xy 70.13575 45.505) (xy 69.977 45.66375) (xy 69.723 45.66375) (xy 69.56425 45.505) (xy 69 45.501928) (xy 68.875518 45.514188) (xy 68.75582 45.550498) (xy 68.645506 45.609463) (xy 68.548815 45.688815) (xy 68.469463 45.785506) (xy 68.410498 45.89582) (xy 68.374188 46.015518) (xy 68.361928 46.14) (xy 57.098043 46.14) (xy 57.033475 46.043368) (xy 56.826632 45.836525) (xy 56.583411 45.67401) (xy 56.313158 45.562068) (xy 56.02626 45.505) (xy 55.73374 45.505) (xy 55.446842 45.562068) (xy 55.176589 45.67401) (xy 54.933368 45.836525) (xy 54.726525 46.043368) (xy 54.61 46.21776) (xy 54.493475 46.043368) (xy 54.286632 45.836525) (xy 54.043411 45.67401) (xy 53.773158 45.562068) (xy 53.48626 45.505) (xy 53.19374 45.505) (xy 52.906842 45.562068) (xy 52.636589 45.67401) (xy 52.393368 45.836525) (xy 52.261513 45.96838) (xy 52.239502 45.89582) (xy 52.180537 45.785506) (xy 52.101185 45.688815) (xy 52.004494 45.609463) (xy 51.89418 45.550498) (xy 51.774482 45.514188) (xy 51.65 45.501928) (xy 51.08575 45.505) (xy 50.927 45.66375) (xy 50.673 45.66375) (xy 50.51425 45.505) (xy 49.95 45.501928) (xy 49.825518 45.514188) (xy 49.70582 45.550498) (xy 49.595506 45.609463) (xy 49.498815 45.688815) (xy 49.419463 45.785506) (xy 49.360498 45.89582) (xy 49.324188 46.015518) (xy 49.311928 46.14) (xy 26.06 46.14) (xy 26.06 36.23) (xy 34.071928 36.23) (xy 34.071928 37.43) (xy 34.088992 37.603254) (xy 34.139528 37.76985) (xy 34.221595 37.923386) (xy 34.332038 38.057962) (xy 34.466614 38.168405) (xy 34.593608 38.236285) (xy 34.406525 38.423368) (xy 34.24401 38.666589) (xy 34.132068 38.936842) (xy 34.075 39.22374) (xy 34.075 39.51626) (xy 34.132068 39.803158) (xy 34.24401 40.073411) (xy 34.406525 40.316632) (xy 34.613368 40.523475) (xy 34.78776 40.64) (xy 34.613368 40.756525) (xy 34.406525 40.963368) (xy 34.24401 41.206589) (xy 34.132068 41.476842) (xy 34.075 41.76374) (xy 34.075 42.05626) (xy 34.132068 42.343158) (xy 34.24401 42.613411) (xy 34.406525 42.856632) (xy 34.613368 43.063475) (xy 34.78776 43.18) (xy 34.613368 43.296525) (xy 34.406525 43.503368) (xy 34.24401 43.746589) (xy 34.132068 44.016842) (xy 34.075 44.30374) (xy 34.075 44.59626) (xy 34.132068 44.883158) (xy 34.24401 45.153411) (xy 34.406525 45.396632) (xy 34.613368 45.603475) (xy 34.856589 45.76599) (xy 35.126842 45.877932) (xy 35.41374 45.935) (xy 35.70626 45.935) (xy 35.993158 45.877932) (xy 36.263411 45.76599) (xy 36.506632 45.603475) (xy 36.63171 45.478397) (xy 37.251208 45.478397) (xy 37.328843 45.727472) (xy 37.592883 45.853371) (xy 37.876411 45.925339) (xy 38.168531 45.940611) (xy 38.458019 45.898599) (xy 38.733747 45.800919) (xy 38.871157 45.727472) (xy 38.948792 45.478397) (xy 38.1 44.629605) (xy 37.251208 45.478397) (xy 36.63171 45.478397) (xy 36.713475 45.396632) (xy 36.829311 45.223271) (xy 37.071603 45.298792) (xy 37.920395 44.45) (xy 38.279605 44.45) (xy 39.128397 45.298792) (xy 39.377472 45.221157) (xy 39.503371 44.957117) (xy 39.575339 44.673589) (xy 39.590611 44.381469) (xy 39.548599 44.091981) (xy 39.450919 43.816253) (xy 39.377472 43.678843) (xy 39.287795 43.650891) (xy 53.491428 43.650891) (xy 53.491428 43.854769) (xy 53.531202 44.054728) (xy 53.609223 44.243086) (xy 53.722491 44.412604) (xy 53.866654 44.556767) (xy 54.036172 44.670035) (xy 54.22453 44.748056) (xy 54.424489 44.78783) (xy 54.628367 44.78783) (xy 54.828326 44.748056) (xy 55.016684 44.670035) (xy 55.186202 44.556767) (xy 55.330365 44.412604) (xy 55.443633 44.243086) (xy 55.521654 44.054728) (xy 55.561428 43.854769) (xy 55.561428 43.792632) (xy 55.756002 43.598057) (xy 55.785001 43.574259) (xy 55.879974 43.458534) (xy 55.950546 43.326505) (xy 55.994003 43.183244) (xy 56.005 43.071591) (xy 56.005 43.071582) (xy 56.008676 43.034259) (xy 56.005 42.996936) (xy 56.005 40.538061) (xy 70.085 40.538061) (xy 70.085 40.741939) (xy 70.124774 40.941898) (xy 70.202795 41.130256) (xy 70.316063 41.299774) (xy 70.36 41.343711) (xy 70.360001 43.249275) (xy 70.33978 43.298092) (xy 70.300006 43.498051) (xy 70.300006 43.701929) (xy 70.33978 43.901888) (xy 70.417801 44.090246) (xy 70.531069 44.259764) (xy 70.675232 44.403927) (xy 70.84475 44.517195) (xy 71.033108 44.595216) (xy 71.233067 44.63499) (xy 71.436945 44.63499) (xy 71.636904 44.595216) (xy 71.825262 44.517195) (xy 71.99478 44.403927) (xy 72.138943 44.259764) (xy 72.252211 44.090246) (xy 72.330232 43.901888) (xy 72.369781 43.70306) (xy 80.15499 43.70306) (xy 80.15499 43.906938) (xy 80.194764 44.106897) (xy 80.272785 44.295255) (xy 80.386053 44.464773) (xy 80.530216 44.608936) (xy 80.699734 44.722204) (xy 80.888092 44.800225) (xy 81.088051 44.839999) (xy 81.291929 44.839999) (xy 81.491888 44.800225) (xy 81.680246 44.722204) (xy 81.849764 44.608936) (xy 81.993927 44.464773) (xy 82.107195 44.295255) (xy 82.185216 44.106897) (xy 82.22499 43.906938) (xy 82.22499 43.703172) (xy 94.469 43.703172) (xy 94.469 43.90705) (xy 94.508774 44.107009) (xy 94.586795 44.295367) (xy 94.700063 44.464885) (xy 94.844226 44.609048) (xy 95.013744 44.722316) (xy 95.202102 44.800337) (xy 95.402061 44.840111) (xy 95.605939 44.840111) (xy 95.805898 44.800337) (xy 95.994256 44.722316) (xy 96.163774 44.609048) (xy 96.307937 44.464885) (xy 96.421205 44.295367) (xy 96.499226 44.107009) (xy 96.539 43.90705) (xy 96.539 43.703172) (xy 96.517397 43.594566) (xy 96.518 43.588444) (xy 96.518 43.588435) (xy 96.521676 43.551112) (xy 96.518 43.513789) (xy 96.518 42.367825) (xy 97.54 42.367825) (xy 97.54 42.542155) (xy 97.57401 42.713135) (xy 97.640723 42.874195) (xy 97.737576 43.019145) (xy 97.860845 43.142414) (xy 98.005795 43.239267) (xy 98.166855 43.30598) (xy 98.337835 43.33999) (xy 98.512165 43.33999) (xy 98.683145 43.30598) (xy 98.844205 43.239267) (xy 98.989155 43.142414) (xy 99.112424 43.019145) (xy 99.209277 42.874195) (xy 99.27599 42.713135) (xy 99.31 42.542155) (xy 99.31 42.367825) (xy 99.27599 42.196845) (xy 99.209277 42.035785) (xy 99.16 41.962037) (xy 99.16 41.579446) (xy 99.231153 41.508294) (xy 99.318145 41.49099) (xy 99.479205 41.424277) (xy 99.624155 41.327424) (xy 99.747424 41.204155) (xy 99.844277 41.059205) (xy 99.91099 40.898145) (xy 99.945 40.727165) (xy 99.945 40.552835) (xy 99.91099 40.381855) (xy 99.844277 40.220795) (xy 99.747424 40.075845) (xy 99.624155 39.952576) (xy 99.479205 39.855723) (xy 99.318145 39.78901) (xy 99.147165 39.755) (xy 98.972835 39.755) (xy 98.801855 39.78901) (xy 98.640795 39.855723) (xy 98.495845 39.952576) (xy 98.372576 40.075845) (xy 98.275723 40.220795) (xy 98.20901 40.381855) (xy 98.191706 40.468847) (xy 97.930808 40.729746) (xy 97.902762 40.752763) (xy 97.810913 40.864681) (xy 97.742663 40.992368) (xy 97.718075 41.073424) (xy 97.700635 41.130915) (xy 97.686444 41.275) (xy 97.69 41.311106) (xy 97.690001 41.962036) (xy 97.640723 42.035785) (xy 97.57401 42.196845) (xy 97.54 42.367825) (xy 96.518 42.367825) (xy 96.518 41.597711) (xy 96.561937 41.553774) (xy 96.675205 41.384256) (xy 96.753226 41.195898) (xy 96.793 40.995939) (xy 96.793 40.792061) (xy 96.753226 40.592102) (xy 96.675205 40.403744) (xy 96.561937 40.234226) (xy 96.417774 40.090063) (xy 96.248256 39.976795) (xy 96.059898 39.898774) (xy 95.859939 39.859) (xy 95.656061 39.859) (xy 95.456102 39.898774) (xy 95.267744 39.976795) (xy 95.098226 40.090063) (xy 94.954063 40.234226) (xy 94.840795 40.403744) (xy 94.762774 40.592102) (xy 94.723 40.792061) (xy 94.723 40.995939) (xy 94.762774 41.195898) (xy 94.840795 41.384256) (xy 94.954063 41.553774) (xy 94.998 41.597711) (xy 94.998001 42.898425) (xy 94.844226 43.001174) (xy 94.700063 43.145337) (xy 94.586795 43.314855) (xy 94.508774 43.503213) (xy 94.469 43.703172) (xy 82.22499 43.703172) (xy 82.22499 43.70306) (xy 82.185216 43.503101) (xy 82.107195 43.314743) (xy 81.993927 43.145225) (xy 81.94999 43.101288) (xy 81.94999 41.305507) (xy 82.040766 41.214731) (xy 82.154034 41.045213) (xy 82.232055 40.856855) (xy 82.271829 40.656896) (xy 82.271829 40.453018) (xy 82.232055 40.253059) (xy 82.154034 40.064701) (xy 82.040766 39.895183) (xy 81.896603 39.75102) (xy 81.727085 39.637752) (xy 81.538727 39.559731) (xy 81.338768 39.519957) (xy 81.13489 39.519957) (xy 80.934931 39.559731) (xy 80.746573 39.637752) (xy 80.577055 39.75102) (xy 80.432892 39.895183) (xy 80.319624 40.064701) (xy 80.241603 40.253059) (xy 80.201829 40.453018) (xy 80.201829 40.656896) (xy 80.241603 40.856855) (xy 80.319624 41.045213) (xy 80.429991 41.210389) (xy 80.42999 43.101288) (xy 80.386053 43.145225) (xy 80.272785 43.314743) (xy 80.194764 43.503101) (xy 80.15499 43.70306) (xy 72.369781 43.70306) (xy 72.370006 43.701929) (xy 72.370006 43.498051) (xy 72.330232 43.298092) (xy 72.252211 43.109734) (xy 72.138943 42.940216) (xy 71.99478 42.796053) (xy 71.88 42.71936) (xy 71.88 42.287814) (xy 72.623659 42.287814) (xy 72.623659 42.462144) (xy 72.657669 42.633124) (xy 72.724382 42.794184) (xy 72.821235 42.939134) (xy 72.944504 43.062403) (xy 73.089454 43.159256) (xy 73.250514 43.225969) (xy 73.421494 43.259979) (xy 73.595824 43.259979) (xy 73.766804 43.225969) (xy 73.927864 43.159256) (xy 74.072814 43.062403) (xy 74.196083 42.939134) (xy 74.292936 42.794184) (xy 74.359649 42.633124) (xy 74.393659 42.462144) (xy 74.393659 42.287814) (xy 74.392707 42.283027) (xy 74.395 42.259743) (xy 74.395 42.259734) (xy 74.398555 42.223639) (xy 74.395 42.187544) (xy 74.395 40.878953) (xy 74.444277 40.805205) (xy 74.51099 40.644145) (xy 74.545 40.473165) (xy 74.545 40.298835) (xy 74.51099 40.127855) (xy 74.444277 39.966795) (xy 74.347424 39.821845) (xy 74.224155 39.698576) (xy 74.079205 39.601723) (xy 73.918145 39.53501) (xy 73.747165 39.501) (xy 73.572835 39.501) (xy 73.401855 39.53501) (xy 73.240795 39.601723) (xy 73.095845 39.698576) (xy 72.972576 39.821845) (xy 72.875723 39.966795) (xy 72.80901 40.127855) (xy 72.775 40.298835) (xy 72.775 40.473165) (xy 72.80901 40.644145) (xy 72.875723 40.805205) (xy 72.925 40.878953) (xy 72.925001 41.707058) (xy 72.821235 41.810824) (xy 72.724382 41.955774) (xy 72.657669 42.116834) (xy 72.623659 42.287814) (xy 71.88 42.287814) (xy 71.88 41.343711) (xy 71.923937 41.299774) (xy 72.037205 41.130256) (xy 72.115226 40.941898) (xy 72.155 40.741939) (xy 72.155 40.538061) (xy 72.115226 40.338102) (xy 72.037205 40.149744) (xy 71.923937 39.980226) (xy 71.779774 39.836063) (xy 71.610256 39.722795) (xy 71.421898 39.644774) (xy 71.221939 39.605) (xy 71.018061 39.605) (xy 70.818102 39.644774) (xy 70.629744 39.722795) (xy 70.460226 39.836063) (xy 70.316063 39.980226) (xy 70.202795 40.149744) (xy 70.124774 40.338102) (xy 70.085 40.538061) (xy 56.005 40.538061) (xy 56.005 38.168711) (xy 56.048937 38.124774) (xy 56.162205 37.955256) (xy 56.240226 37.766898) (xy 56.241829 37.758835) (xy 100.715 37.758835) (xy 100.715 37.933165) (xy 100.74901 38.104145) (xy 100.815723 38.265205) (xy 100.865001 38.338954) (xy 100.865 46.243047) (xy 100.815723 46.316795) (xy 100.74901 46.477855) (xy 100.715 46.648835) (xy 100.715 46.823165) (xy 100.74901 46.994145) (xy 100.815723 47.155205) (xy 100.912576 47.300155) (xy 101.035845 47.423424) (xy 101.180795 47.520277) (xy 101.341855 47.58699) (xy 101.512835 47.621) (xy 101.663991 47.621) (xy 101.663991 48.269553) (xy 101.660434 48.305668) (xy 101.674625 48.449753) (xy 101.716654 48.588301) (xy 101.784904 48.715988) (xy 101.876753 48.827906) (xy 101.904798 48.850922) (xy 102.20639 49.152515) (xy 102.223694 49.239507) (xy 102.290407 49.400567) (xy 102.38726 49.545517) (xy 102.510529 49.668786) (xy 102.655479 49.765639) (xy 102.816539 49.832352) (xy 102.987519 49.866362) (xy 103.161849 49.866362) (xy 103.332829 49.832352) (xy 103.493889 49.765639) (xy 103.638839 49.668786) (xy 103.762108 49.545517) (xy 103.858961 49.400567) (xy 103.925674 49.239507) (xy 103.959684 49.068527) (xy 103.959684 48.956599) (xy 103.984765 48.95161) (xy 104.145825 48.884897) (xy 104.290775 48.788044) (xy 104.414044 48.664775) (xy 104.510897 48.519825) (xy 104.57761 48.358765) (xy 104.61162 48.187785) (xy 104.61162 48.072583) (xy 104.621 47.977345) (xy 104.621 47.977336) (xy 104.624555 47.941241) (xy 104.621 47.905146) (xy 104.621 46.902835) (xy 133.227 46.902835) (xy 133.227 47.077165) (xy 133.26101 47.248145) (xy 133.327723 47.409205) (xy 133.424576 47.554155) (xy 133.547845 47.677424) (xy 133.692795 47.774277) (xy 133.853855 47.84099) (xy 134.024835 47.875) (xy 134.199165 47.875) (xy 134.370145 47.84099) (xy 134.531205 47.774277) (xy 134.540915 47.767789) (xy 134.606953 47.811915) (xy 134.768013 47.878628) (xy 134.938993 47.912638) (xy 135.113323 47.912638) (xy 135.284303 47.878628) (xy 135.377559 47.84) (xy 153.451928 47.84) (xy 153.464188 47.964482) (xy 153.500498 48.08418) (xy 153.559463 48.194494) (xy 153.638815 48.291185) (xy 153.735506 48.370537) (xy 153.84582 48.429502) (xy 153.965518 48.465812) (xy 154.09 48.478072) (xy 154.65425 48.475) (xy 154.813 48.31625) (xy 154.813 47.117) (xy 153.61375 47.117) (xy 153.455 47.27575) (xy 153.451928 47.84) (xy 135.377559 47.84) (xy 135.445363 47.811915) (xy 135.590313 47.715062) (xy 135.618774 47.686601) (xy 135.657326 47.70257) (xy 135.828306 47.73658) (xy 136.002636 47.73658) (xy 136.173616 47.70257) (xy 136.334676 47.635857) (xy 136.479626 47.539004) (xy 136.602895 47.415735) (xy 136.699748 47.270785) (xy 136.766461 47.109725) (xy 136.800471 46.938745) (xy 136.800471 46.782996) (xy 136.901855 46.82499) (xy 137.072835 46.859) (xy 137.247165 46.859) (xy 137.418145 46.82499) (xy 137.579205 46.758277) (xy 137.724155 46.661424) (xy 137.847424 46.538155) (xy 137.944277 46.393205) (xy 138.01099 46.232145) (xy 138.029318 46.14) (xy 153.451928 46.14) (xy 153.455 46.70425) (xy 153.61375 46.863) (xy 154.813 46.863) (xy 154.813 45.66375) (xy 155.067 45.66375) (xy 155.067 46.863) (xy 155.087 46.863) (xy 155.087 47.117) (xy 155.067 47.117) (xy 155.067 48.31625) (xy 155.22575 48.475) (xy 155.79 48.478072) (xy 155.914482 48.465812) (xy 156.03418 48.429502) (xy 156.144494 48.370537) (xy 156.241185 48.291185) (xy 156.320537 48.194494) (xy 156.379502 48.08418) (xy 156.401513 48.01162) (xy 156.533368 48.143475) (xy 156.776589 48.30599) (xy 157.046842 48.417932) (xy 157.33374 48.475) (xy 157.62626 48.475) (xy 157.913158 48.417932) (xy 158.183411 48.30599) (xy 158.426632 48.143475) (xy 158.633475 47.936632) (xy 158.75 47.76224) (xy 158.866525 47.936632) (xy 159.073368 48.143475) (xy 159.316589 48.30599) (xy 159.586842 48.417932) (xy 159.87374 48.475) (xy 160.16626 48.475) (xy 160.453158 48.417932) (xy 160.723411 48.30599) (xy 160.966632 48.143475) (xy 161.173475 47.936632) (xy 161.238042 47.84) (xy 172.501928 47.84) (xy 172.514188 47.964482) (xy 172.550498 48.08418) (xy 172.609463 48.194494) (xy 172.688815 48.291185) (xy 172.785506 48.370537) (xy 172.89582 48.429502) (xy 173.015518 48.465812) (xy 173.14 48.478072) (xy 173.70425 48.475) (xy 173.863 48.31625) (xy 173.863 47.117) (xy 172.66375 47.117) (xy 172.505 47.27575) (xy 172.501928 47.84) (xy 161.238042 47.84) (xy 161.33599 47.693411) (xy 161.447932 47.423158) (xy 161.505 47.13626) (xy 161.505 46.84374) (xy 161.447932 46.556842) (xy 161.33599 46.286589) (xy 161.238043 46.14) (xy 172.501928 46.14) (xy 172.505 46.70425) (xy 172.66375 46.863) (xy 173.863 46.863) (xy 173.863 45.66375) (xy 174.117 45.66375) (xy 174.117 46.863) (xy 174.137 46.863) (xy 174.137 47.117) (xy 174.117 47.117) (xy 174.117 48.31625) (xy 174.27575 48.475) (xy 174.84 48.478072) (xy 174.964482 48.465812) (xy 175.08418 48.429502) (xy 175.194494 48.370537) (xy 175.291185 48.291185) (xy 175.370537 48.194494) (xy 175.429502 48.08418) (xy 175.451513 48.01162) (xy 175.583368 48.143475) (xy 175.826589 48.30599) (xy 176.096842 48.417932) (xy 176.38374 48.475) (xy 176.67626 48.475) (xy 176.963158 48.417932) (xy 177.233411 48.30599) (xy 177.476632 48.143475) (xy 177.683475 47.936632) (xy 177.8 47.76224) (xy 177.916525 47.936632) (xy 178.123368 48.143475) (xy 178.366589 48.30599) (xy 178.636842 48.417932) (xy 178.92374 48.475) (xy 179.21626 48.475) (xy 179.503158 48.417932) (xy 179.773411 48.30599) (xy 180.016632 48.143475) (xy 180.223475 47.936632) (xy 180.288042 47.84) (xy 191.551928 47.84) (xy 191.564188 47.964482) (xy 191.600498 48.08418) (xy 191.659463 48.194494) (xy 191.738815 48.291185) (xy 191.835506 48.370537) (xy 191.94582 48.429502) (xy 192.065518 48.465812) (xy 192.19 48.478072) (xy 192.75425 48.475) (xy 192.913 48.31625) (xy 192.913 47.117) (xy 191.71375 47.117) (xy 191.555 47.27575) (xy 191.551928 47.84) (xy 180.288042 47.84) (xy 180.38599 47.693411) (xy 180.497932 47.423158) (xy 180.555 47.13626) (xy 180.555 46.84374) (xy 180.497932 46.556842) (xy 180.38599 46.286589) (xy 180.288043 46.14) (xy 191.551928 46.14) (xy 191.555 46.70425) (xy 191.71375 46.863) (xy 192.913 46.863) (xy 192.913 45.66375) (xy 193.167 45.66375) (xy 193.167 46.863) (xy 193.187 46.863) (xy 193.187 47.117) (xy 193.167 47.117) (xy 193.167 48.31625) (xy 193.32575 48.475) (xy 193.89 48.478072) (xy 194.014482 48.465812) (xy 194.13418 48.429502) (xy 194.244494 48.370537) (xy 194.341185 48.291185) (xy 194.420537 48.194494) (xy 194.479502 48.08418) (xy 194.501513 48.01162) (xy 194.633368 48.143475) (xy 194.876589 48.30599) (xy 195.146842 48.417932) (xy 195.43374 48.475) (xy 195.72626 48.475) (xy 196.013158 48.417932) (xy 196.283411 48.30599) (xy 196.526632 48.143475) (xy 196.733475 47.936632) (xy 196.85 47.76224) (xy 196.966525 47.936632) (xy 197.173368 48.143475) (xy 197.416589 48.30599) (xy 197.686842 48.417932) (xy 197.97374 48.475) (xy 198.26626 48.475) (xy 198.553158 48.417932) (xy 198.823411 48.30599) (xy 199.066632 48.143475) (xy 199.273475 47.936632) (xy 199.43599 47.693411) (xy 199.547932 47.423158) (xy 199.605 47.13626) (xy 199.605 46.84374) (xy 199.547932 46.556842) (xy 199.43599 46.286589) (xy 199.273475 46.043368) (xy 199.066632 45.836525) (xy 198.823411 45.67401) (xy 198.553158 45.562068) (xy 198.26626 45.505) (xy 197.97374 45.505) (xy 197.686842 45.562068) (xy 197.416589 45.67401) (xy 197.173368 45.836525) (xy 196.966525 46.043368) (xy 196.85 46.21776) (xy 196.733475 46.043368) (xy 196.526632 45.836525) (xy 196.283411 45.67401) (xy 196.013158 45.562068) (xy 195.72626 45.505) (xy 195.43374 45.505) (xy 195.146842 45.562068) (xy 194.876589 45.67401) (xy 194.633368 45.836525) (xy 194.501513 45.96838) (xy 194.479502 45.89582) (xy 194.420537 45.785506) (xy 194.341185 45.688815) (xy 194.244494 45.609463) (xy 194.13418 45.550498) (xy 194.014482 45.514188) (xy 193.89 45.501928) (xy 193.32575 45.505) (xy 193.167 45.66375) (xy 192.913 45.66375) (xy 192.75425 45.505) (xy 192.19 45.501928) (xy 192.065518 45.514188) (xy 191.94582 45.550498) (xy 191.835506 45.609463) (xy 191.738815 45.688815) (xy 191.659463 45.785506) (xy 191.600498 45.89582) (xy 191.564188 46.015518) (xy 191.551928 46.14) (xy 180.288043 46.14) (xy 180.223475 46.043368) (xy 180.016632 45.836525) (xy 179.773411 45.67401) (xy 179.503158 45.562068) (xy 179.21626 45.505) (xy 178.92374 45.505) (xy 178.636842 45.562068) (xy 178.366589 45.67401) (xy 178.123368 45.836525) (xy 177.916525 46.043368) (xy 177.8 46.21776) (xy 177.683475 46.043368) (xy 177.476632 45.836525) (xy 177.233411 45.67401) (xy 176.963158 45.562068) (xy 176.67626 45.505) (xy 176.38374 45.505) (xy 176.096842 45.562068) (xy 175.826589 45.67401) (xy 175.583368 45.836525) (xy 175.451513 45.96838) (xy 175.429502 45.89582) (xy 175.370537 45.785506) (xy 175.291185 45.688815) (xy 175.194494 45.609463) (xy 175.08418 45.550498) (xy 174.964482 45.514188) (xy 174.84 45.501928) (xy 174.27575 45.505) (xy 174.117 45.66375) (xy 173.863 45.66375) (xy 173.70425 45.505) (xy 173.14 45.501928) (xy 173.015518 45.514188) (xy 172.89582 45.550498) (xy 172.785506 45.609463) (xy 172.688815 45.688815) (xy 172.609463 45.785506) (xy 172.550498 45.89582) (xy 172.514188 46.015518) (xy 172.501928 46.14) (xy 161.238043 46.14) (xy 161.173475 46.043368) (xy 160.966632 45.836525) (xy 160.723411 45.67401) (xy 160.453158 45.562068) (xy 160.16626 45.505) (xy 159.87374 45.505) (xy 159.586842 45.562068) (xy 159.316589 45.67401) (xy 159.073368 45.836525) (xy 158.866525 46.043368) (xy 158.75 46.21776) (xy 158.633475 46.043368) (xy 158.426632 45.836525) (xy 158.183411 45.67401) (xy 157.913158 45.562068) (xy 157.62626 45.505) (xy 157.33374 45.505) (xy 157.046842 45.562068) (xy 156.776589 45.67401) (xy 156.533368 45.836525) (xy 156.401513 45.96838) (xy 156.379502 45.89582) (xy 156.320537 45.785506) (xy 156.241185 45.688815) (xy 156.144494 45.609463) (xy 156.03418 45.550498) (xy 155.914482 45.514188) (xy 155.79 45.501928) (xy 155.22575 45.505) (xy 155.067 45.66375) (xy 154.813 45.66375) (xy 154.65425 45.505) (xy 154.09 45.501928) (xy 153.965518 45.514188) (xy 153.84582 45.550498) (xy 153.735506 45.609463) (xy 153.638815 45.688815) (xy 153.559463 45.785506) (xy 153.500498 45.89582) (xy 153.464188 46.015518) (xy 153.451928 46.14) (xy 138.029318 46.14) (xy 138.045 46.061165) (xy 138.045 45.886835) (xy 138.01099 45.715855) (xy 137.944277 45.554795) (xy 137.847424 45.409845) (xy 137.724155 45.286576) (xy 137.579205 45.189723) (xy 137.418145 45.12301) (xy 137.387 45.116815) (xy 137.387 41.695835) (xy 141.355 41.695835) (xy 141.355 41.870165) (xy 141.38901 42.041145) (xy 141.455723 42.202205) (xy 141.505001 42.275954) (xy 141.505 42.560047) (xy 141.455723 42.633795) (xy 141.38901 42.794855) (xy 141.355 42.965835) (xy 141.355 43.140165) (xy 141.38901 43.311145) (xy 141.455723 43.472205) (xy 141.552576 43.617155) (xy 141.675845 43.740424) (xy 141.820795 43.837277) (xy 141.981855 43.90399) (xy 142.152835 43.938) (xy 142.327165 43.938) (xy 142.498145 43.90399) (xy 142.659205 43.837277) (xy 142.804155 43.740424) (xy 142.927424 43.617155) (xy 143.024277 43.472205) (xy 143.09099 43.311145) (xy 143.125 43.140165) (xy 143.125 42.965835) (xy 143.09099 42.794855) (xy 143.024277 42.633795) (xy 142.975 42.560047) (xy 142.975 42.275953) (xy 143.024277 42.202205) (xy 143.09099 42.041145) (xy 143.125 41.870165) (xy 143.125 41.695835) (xy 143.09099 41.524855) (xy 143.024277 41.363795) (xy 142.927424 41.218845) (xy 142.804155 41.095576) (xy 142.659205 40.998723) (xy 142.498145 40.93201) (xy 142.327165 40.898) (xy 142.152835 40.898) (xy 141.981855 40.93201) (xy 141.820795 40.998723) (xy 141.675845 41.095576) (xy 141.552576 41.218845) (xy 141.455723 41.363795) (xy 141.38901 41.524855) (xy 141.355 41.695835) (xy 137.387 41.695835) (xy 137.387 40.37904) (xy 149.333 40.37904) (xy 149.333 40.582918) (xy 149.372774 40.782877) (xy 149.450795 40.971235) (xy 149.558001 41.13168) (xy 149.558 41.743211) (xy 149.554081 41.783) (xy 149.558 41.822788) (xy 149.558 41.82279) (xy 149.56972 41.941787) (xy 149.616037 42.094472) (xy 149.643716 42.146256) (xy 149.691251 42.235189) (xy 149.711402 42.259743) (xy 149.792472 42.358528) (xy 149.823388 42.3839) (xy 151.152124 43.712636) (xy 151.189769 43.901893) (xy 151.26779 44.090251) (xy 151.381058 44.259769) (xy 151.525221 44.403932) (xy 151.694739 44.5172) (xy 151.883097 44.595221) (xy 152.083056 44.634995) (xy 152.286934 44.634995) (xy 152.486893 44.595221) (xy 152.675251 44.5172) (xy 152.844769 44.403932) (xy 152.988932 44.259769) (xy 153.1022 44.090251) (xy 153.180221 43.901893) (xy 153.219995 43.701934) (xy 153.219995 43.498056) (xy 153.180221 43.298097) (xy 153.1022 43.109739) (xy 152.988932 42.940221) (xy 152.844769 42.796058) (xy 152.675251 42.68279) (xy 152.486893 42.604769) (xy 152.297636 42.567124) (xy 151.178 41.447488) (xy 151.178 41.131679) (xy 151.285205 40.971235) (xy 151.363226 40.782877) (xy 151.403 40.582918) (xy 151.403 40.37904) (xy 151.363226 40.179081) (xy 151.285205 39.990723) (xy 151.171937 39.821205) (xy 151.027774 39.677042) (xy 150.858256 39.563774) (xy 150.757553 39.522061) (xy 162.287 39.522061) (xy 162.287 39.725939) (xy 162.326774 39.925898) (xy 162.404795 40.114256) (xy 162.518063 40.283774) (xy 162.562 40.327711) (xy 162.562001 42.896284) (xy 162.518069 42.940216) (xy 162.404801 43.109734) (xy 162.32678 43.298092) (xy 162.287006 43.498051) (xy 162.287006 43.701929) (xy 162.32678 43.901888) (xy 162.404801 44.090246) (xy 162.518069 44.259764) (xy 162.662232 44.403927) (xy 162.83175 44.517195) (xy 163.020108 44.595216) (xy 163.220067 44.63499) (xy 163.423945 44.63499) (xy 163.623904 44.595216) (xy 163.812262 44.517195) (xy 163.98178 44.403927) (xy 164.125943 44.259764) (xy 164.239211 44.090246) (xy 164.317232 43.901888) (xy 164.357006 43.701929) (xy 164.357006 43.498051) (xy 164.317232 43.298092) (xy 164.239211 43.109734) (xy 164.125943 42.940216) (xy 164.082 42.896273) (xy 164.082 41.554061) (xy 177.407187 41.554061) (xy 177.407187 41.757939) (xy 177.446961 41.957898) (xy 177.524982 42.146256) (xy 177.63825 42.315774) (xy 177.682187 42.359711) (xy 177.682187 42.514863) (xy 177.678511 42.552185) (xy 177.682187 42.589507) (xy 177.682187 42.589517) (xy 177.693184 42.70117) (xy 177.723803 42.802109) (xy 177.736641 42.844431) (xy 177.807213 42.976461) (xy 177.827403 43.001062) (xy 177.902186 43.092186) (xy 177.931189 43.115989) (xy 178.543002 43.727802) (xy 178.543002 43.789939) (xy 178.582776 43.989898) (xy 178.660797 44.178256) (xy 178.774065 44.347774) (xy 178.918228 44.491937) (xy 179.087746 44.605205) (xy 179.276104 44.683226) (xy 179.476063 44.723) (xy 179.679941 44.723) (xy 179.8799 44.683226) (xy 180.068258 44.605205) (xy 180.237776 44.491937) (xy 180.381939 44.347774) (xy 180.495207 44.178256) (xy 180.573228 43.989898) (xy 180.613002 43.789939) (xy 180.613002 43.586061) (xy 180.573228 43.386102) (xy 180.495207 43.197744) (xy 180.381939 43.028226) (xy 180.237776 42.884063) (xy 180.068258 42.770795) (xy 179.8799 42.692774) (xy 179.679941 42.653) (xy 179.617804 42.653) (xy 179.259924 42.295121) (xy 179.359392 42.146256) (xy 179.437413 41.957898) (xy 179.477187 41.757939) (xy 179.477187 41.554061) (xy 179.437413 41.354102) (xy 179.359392 41.165744) (xy 179.246124 40.996226) (xy 179.101961 40.852063) (xy 178.932443 40.738795) (xy 178.744085 40.660774) (xy 178.544126 40.621) (xy 178.340248 40.621) (xy 178.140289 40.660774) (xy 177.951931 40.738795) (xy 177.782413 40.852063) (xy 177.63825 40.996226) (xy 177.524982 41.165744) (xy 177.446961 41.354102) (xy 177.407187 41.554061) (xy 164.082 41.554061) (xy 164.082 40.538057) (xy 187.941 40.538057) (xy 187.941 40.741935) (xy 187.980774 40.941894) (xy 188.058795 41.130252) (xy 188.172063 41.29977) (xy 188.216 41.343707) (xy 188.216001 42.984288) (xy 188.172063 43.028226) (xy 188.058795 43.197744) (xy 187.980774 43.386102) (xy 187.941 43.586061) (xy 187.941 43.789939) (xy 187.980774 43.989898) (xy 188.058795 44.178256) (xy 188.172063 44.347774) (xy 188.316226 44.491937) (xy 188.485744 44.605205) (xy 188.674102 44.683226) (xy 188.874061 44.723) (xy 189.077939 44.723) (xy 189.277898 44.683226) (xy 189.466256 44.605205) (xy 189.635774 44.491937) (xy 189.779937 44.347774) (xy 189.893205 44.178256) (xy 189.971226 43.989898) (xy 190.011 43.789939) (xy 190.011 43.586061) (xy 189.971226 43.386102) (xy 189.893205 43.197744) (xy 189.779937 43.028226) (xy 189.736 42.984289) (xy 189.736 41.822841) (xy 203.839 41.822841) (xy 203.839 41.997171) (xy 203.87301 42.168151) (xy 203.939723 42.329211) (xy 204.036576 42.474161) (xy 204.159845 42.59743) (xy 204.304795 42.694283) (xy 204.465855 42.760996) (xy 204.552848 42.7783) (xy 206.71874 44.944193) (xy 206.741756 44.972238) (xy 206.853674 45.064087) (xy 206.981361 45.132337) (xy 207.07788 45.161616) (xy 207.119908 45.174365) (xy 207.263994 45.188556) (xy 207.300099 45.185) (xy 209.525117 45.185) (xy 209.666525 45.396632) (xy 209.873368 45.603475) (xy 210.116589 45.76599) (xy 210.386842 45.877932) (xy 210.67374 45.935) (xy 210.96626 45.935) (xy 211.253158 45.877932) (xy 211.523411 45.76599) (xy 211.766632 45.603475) (xy 211.89171 45.478397) (xy 212.511208 45.478397) (xy 212.588843 45.727472) (xy 212.852883 45.853371) (xy 213.136411 45.925339) (xy 213.428531 45.940611) (xy 213.718019 45.898599) (xy 213.993747 45.800919) (xy 214.131157 45.727472) (xy 214.208792 45.478397) (xy 213.36 44.629605) (xy 212.511208 45.478397) (xy 211.89171 45.478397) (xy 211.973475 45.396632) (xy 212.089311 45.223271) (xy 212.331603 45.298792) (xy 213.180395 44.45) (xy 213.539605 44.45) (xy 214.388397 45.298792) (xy 214.637472 45.221157) (xy 214.763371 44.957117) (xy 214.835339 44.673589) (xy 214.850611 44.381469) (xy 214.808599 44.091981) (xy 214.710919 43.816253) (xy 214.637472 43.678843) (xy 214.388397 43.601208) (xy 213.539605 44.45) (xy 213.180395 44.45) (xy 212.331603 43.601208) (xy 212.089311 43.676729) (xy 211.973475 43.503368) (xy 211.766632 43.296525) (xy 211.59224 43.18) (xy 211.766632 43.063475) (xy 211.89171 42.938397) (xy 212.511208 42.938397) (xy 212.586514 43.18) (xy 212.511208 43.421603) (xy 213.36 44.270395) (xy 214.208792 43.421603) (xy 214.133486 43.18) (xy 214.208792 42.938397) (xy 213.36 42.089605) (xy 212.511208 42.938397) (xy 211.89171 42.938397) (xy 211.973475 42.856632) (xy 212.089311 42.683271) (xy 212.331603 42.758792) (xy 213.180395 41.91) (xy 213.539605 41.91) (xy 214.388397 42.758792) (xy 214.637472 42.681157) (xy 214.763371 42.417117) (xy 214.835339 42.133589) (xy 214.850611 41.841469) (xy 214.808599 41.551981) (xy 214.710919 41.276253) (xy 214.637472 41.138843) (xy 214.388397 41.061208) (xy 213.539605 41.91) (xy 213.180395 41.91) (xy 212.331603 41.061208) (xy 212.089311 41.136729) (xy 211.973475 40.963368) (xy 211.766632 40.756525) (xy 211.59224 40.64) (xy 211.766632 40.523475) (xy 211.89171 40.398397) (xy 212.511208 40.398397) (xy 212.586514 40.64) (xy 212.511208 40.881603) (xy 213.36 41.730395) (xy 214.208792 40.881603) (xy 214.133486 40.64) (xy 214.208792 40.398397) (xy 213.36 39.549605) (xy 212.511208 40.398397) (xy 211.89171 40.398397) (xy 211.973475 40.316632) (xy 212.089311 40.143271) (xy 212.331603 40.218792) (xy 213.180395 39.37) (xy 213.539605 39.37) (xy 214.388397 40.218792) (xy 214.637472 40.141157) (xy 214.763371 39.877117) (xy 214.835339 39.593589) (xy 214.850611 39.301469) (xy 214.808599 39.011981) (xy 214.710919 38.736253) (xy 214.637472 38.598843) (xy 214.388397 38.521208) (xy 213.539605 39.37) (xy 213.180395 39.37) (xy 212.331603 38.521208) (xy 212.089311 38.596729) (xy 211.973475 38.423368) (xy 211.786392 38.236285) (xy 211.913386 38.168405) (xy 212.047962 38.057962) (xy 212.158405 37.923386) (xy 212.193142 37.858397) (xy 212.511208 37.858397) (xy 212.586514 38.1) (xy 212.511208 38.341603) (xy 213.36 39.190395) (xy 214.208792 38.341603) (xy 214.133486 38.1) (xy 214.208792 37.858397) (xy 213.36 37.009605) (xy 212.511208 37.858397) (xy 212.193142 37.858397) (xy 212.240472 37.76985) (xy 212.27358 37.660707) (xy 212.331603 37.678792) (xy 213.180395 36.83) (xy 213.539605 36.83) (xy 214.388397 37.678792) (xy 214.637472 37.601157) (xy 214.763371 37.337117) (xy 214.835339 37.053589) (xy 214.850611 36.761469) (xy 214.808599 36.471981) (xy 214.710919 36.196253) (xy 214.637472 36.058843) (xy 214.388397 35.981208) (xy 213.539605 36.83) (xy 213.180395 36.83) (xy 212.331603 35.981208) (xy 212.27358 35.999293) (xy 212.240472 35.89015) (xy 212.193143 35.801603) (xy 212.511208 35.801603) (xy 213.36 36.650395) (xy 214.208792 35.801603) (xy 214.131157 35.552528) (xy 213.867117 35.426629) (xy 213.583589 35.354661) (xy 213.291469 35.339389) (xy 213.001981 35.381401) (xy 212.726253 35.479081) (xy 212.588843 35.552528) (xy 212.511208 35.801603) (xy 212.193143 35.801603) (xy 212.158405 35.736614) (xy 212.047962 35.602038) (xy 211.913386 35.491595) (xy 211.75985 35.409528) (xy 211.593254 35.358992) (xy 211.42 35.341928) (xy 210.22 35.341928) (xy 210.046746 35.358992) (xy 209.88015 35.409528) (xy 209.726614 35.491595) (xy 209.592038 35.602038) (xy 209.481595 35.736614) (xy 209.399528 35.89015) (xy 209.348992 36.056746) (xy 209.331928 36.23) (xy 209.331928 37.43) (xy 209.348992 37.603254) (xy 209.399528 37.76985) (xy 209.481595 37.923386) (xy 209.592038 38.057962) (xy 209.726614 38.168405) (xy 209.853608 38.236285) (xy 209.666525 38.423368) (xy 209.525117 38.635) (xy 207.629953 38.635) (xy 207.556205 38.585723) (xy 207.395145 38.51901) (xy 207.224165 38.485) (xy 207.049835 38.485) (xy 206.878855 38.51901) (xy 206.717795 38.585723) (xy 206.572845 38.682576) (xy 206.449576 38.805845) (xy 206.352723 38.950795) (xy 206.28601 39.111855) (xy 206.252 39.282835) (xy 206.252 39.457165) (xy 206.28601 39.628145) (xy 206.352723 39.789205) (xy 206.449576 39.934155) (xy 206.572845 40.057424) (xy 206.717795 40.154277) (xy 206.878855 40.22099) (xy 207.049835 40.255) (xy 207.224165 40.255) (xy 207.395145 40.22099) (xy 207.556205 40.154277) (xy 207.629953 40.105) (xy 209.525117 40.105) (xy 209.666525 40.316632) (xy 209.873368 40.523475) (xy 210.04776 40.64) (xy 209.873368 40.756525) (xy 209.666525 40.963368) (xy 209.50401 41.206589) (xy 209.392068 41.476842) (xy 209.335 41.76374) (xy 209.335 42.05626) (xy 209.392068 42.343158) (xy 209.50401 42.613411) (xy 209.666525 42.856632) (xy 209.873368 43.063475) (xy 210.04776 43.18) (xy 209.873368 43.296525) (xy 209.666525 43.503368) (xy 209.525117 43.715) (xy 207.568441 43.715) (xy 205.592294 41.738854) (xy 205.57499 41.651861) (xy 205.508277 41.490801) (xy 205.411424 41.345851) (xy 205.288155 41.222582) (xy 205.143205 41.125729) (xy 204.982145 41.059016) (xy 204.811165 41.025006) (xy 204.636835 41.025006) (xy 204.465855 41.059016) (xy 204.304795 41.125729) (xy 204.159845 41.222582) (xy 204.036576 41.345851) (xy 203.939723 41.490801) (xy 203.87301 41.651861) (xy 203.839 41.822841) (xy 189.736 41.822841) (xy 189.736 41.343707) (xy 189.779937 41.29977) (xy 189.893205 41.130252) (xy 189.971226 40.941894) (xy 190.011 40.741935) (xy 190.011 40.538057) (xy 189.971226 40.338098) (xy 189.893205 40.14974) (xy 189.779937 39.980222) (xy 189.635774 39.836059) (xy 189.466256 39.722791) (xy 189.277898 39.64477) (xy 189.077939 39.604996) (xy 188.874061 39.604996) (xy 188.674102 39.64477) (xy 188.485744 39.722791) (xy 188.316226 39.836059) (xy 188.172063 39.980222) (xy 188.058795 40.14974) (xy 187.980774 40.338098) (xy 187.941 40.538057) (xy 164.082 40.538057) (xy 164.082 40.327711) (xy 164.125937 40.283774) (xy 164.239205 40.114256) (xy 164.317226 39.925898) (xy 164.357 39.725939) (xy 164.357 39.522061) (xy 164.317226 39.322102) (xy 164.239205 39.133744) (xy 164.125937 38.964226) (xy 163.981774 38.820063) (xy 163.812256 38.706795) (xy 163.623898 38.628774) (xy 163.423939 38.589) (xy 163.220061 38.589) (xy 163.020102 38.628774) (xy 162.831744 38.706795) (xy 162.662226 38.820063) (xy 162.518063 38.964226) (xy 162.404795 39.133744) (xy 162.326774 39.322102) (xy 162.287 39.522061) (xy 150.757553 39.522061) (xy 150.669898 39.485753) (xy 150.469939 39.445979) (xy 150.266061 39.445979) (xy 150.066102 39.485753) (xy 149.877744 39.563774) (xy 149.708226 39.677042) (xy 149.564063 39.821205) (xy 149.450795 39.990723) (xy 149.372774 40.179081) (xy 149.333 40.37904) (xy 137.387 40.37904) (xy 137.387 39.100953) (xy 137.436277 39.027205) (xy 137.50299 38.866145) (xy 137.537 38.695165) (xy 137.537 38.520835) (xy 137.50299 38.349855) (xy 137.436277 38.188795) (xy 137.339424 38.043845) (xy 137.216155 37.920576) (xy 137.071205 37.823723) (xy 136.910145 37.75701) (xy 136.739165 37.723) (xy 136.564835 37.723) (xy 136.393855 37.75701) (xy 136.232795 37.823723) (xy 136.088851 37.919904) (xy 135.986245 37.899494) (xy 135.811915 37.899494) (xy 135.640935 37.933504) (xy 135.479875 38.000217) (xy 135.334925 38.09707) (xy 135.252852 38.179143) (xy 135.092692 38.179143) (xy 134.921712 38.213153) (xy 134.760652 38.279866) (xy 134.615702 38.376719) (xy 134.492433 38.499988) (xy 134.39558 38.644938) (xy 134.338529 38.782672) (xy 134.200795 38.839723) (xy 134.055845 38.936576) (xy 133.932576 39.059845) (xy 133.835723 39.204795) (xy 133.76901 39.365855) (xy 133.735 39.536835) (xy 133.735 39.711165) (xy 133.76901 39.882145) (xy 133.835723 40.043205) (xy 133.885 40.116953) (xy 133.885001 46.132815) (xy 133.853855 46.13901) (xy 133.692795 46.205723) (xy 133.547845 46.302576) (xy 133.424576 46.425845) (xy 133.327723 46.570795) (xy 133.26101 46.731855) (xy 133.227 46.902835) (xy 104.621 46.902835) (xy 104.621 39.779029) (xy 109.708992 39.779029) (xy 109.708992 39.982907) (xy 109.748766 40.182866) (xy 109.826787 40.371224) (xy 109.933992 40.531668) (xy 109.933993 44.28064) (xy 109.88306 44.403602) (xy 109.843286 44.603561) (xy 109.843286 44.807439) (xy 109.88306 45.007398) (xy 109.961081 45.195756) (xy 110.074349 45.365274) (xy 110.218512 45.509437) (xy 110.38803 45.622705) (xy 110.576388 45.700726) (xy 110.776347 45.7405) (xy 110.980225 45.7405) (xy 111.180184 45.700726) (xy 111.368542 45.622705) (xy 111.53806 45.509437) (xy 111.682223 45.365274) (xy 111.795491 45.195756) (xy 111.873512 45.007398) (xy 111.913286 44.807439) (xy 111.913286 44.603561) (xy 111.873512 44.403602) (xy 111.795491 44.215244) (xy 111.682223 44.045726) (xy 111.553992 43.917495) (xy 111.553992 40.531668) (xy 111.661197 40.371224) (xy 111.739218 40.182866) (xy 111.778992 39.982907) (xy 111.778992 39.779029) (xy 111.739218 39.57907) (xy 111.661197 39.390712) (xy 111.547929 39.221194) (xy 111.403766 39.077031) (xy 111.234248 38.963763) (xy 111.04589 38.885742) (xy 110.845931 38.845968) (xy 110.642053 38.845968) (xy 110.442094 38.885742) (xy 110.253736 38.963763) (xy 110.084218 39.077031) (xy 109.940055 39.221194) (xy 109.826787 39.390712) (xy 109.748766 39.57907) (xy 109.708992 39.779029) (xy 104.621 39.779029) (xy 104.621 38.338953) (xy 104.670277 38.265205) (xy 104.73699 38.104145) (xy 104.771 37.933165) (xy 104.771 37.758835) (xy 104.747938 37.64289) (xy 184.632035 37.64289) (xy 184.632035 37.81722) (xy 184.666045 37.9882) (xy 184.732758 38.14926) (xy 184.829611 38.29421) (xy 184.95288 38.417479) (xy 185.09783 38.514332) (xy 185.25889 38.581045) (xy 185.42987 38.615055) (xy 185.6042 38.615055) (xy 185.77518 38.581045) (xy 185.93624 38.514332) (xy 186.08119 38.417479) (xy 186.204459 38.29421) (xy 186.301312 38.14926) (xy 186.33619 38.065056) (xy 195.194358 38.065056) (xy 195.279995 38.122277) (xy 195.441055 38.18899) (xy 195.612035 38.223) (xy 195.786365 38.223) (xy 195.957345 38.18899) (xy 196.118405 38.122277) (xy 196.263355 38.025424) (xy 196.386624 37.902155) (xy 196.483477 37.757205) (xy 196.55019 37.596145) (xy 196.5842 37.425165) (xy 196.5842 37.250835) (xy 196.55019 37.079855) (xy 196.483477 36.918795) (xy 196.386624 36.773845) (xy 196.263355 36.650576) (xy 196.118405 36.553723) (xy 195.957345 36.48701) (xy 195.786365 36.453) (xy 195.612035 36.453) (xy 195.441055 36.48701) (xy 195.279995 36.553723) (xy 195.218136 36.595056) (xy 185.953138 36.595056) (xy 185.917033 36.5915) (xy 185.772948 36.605691) (xy 185.770575 36.606411) (xy 185.634401 36.647719) (xy 185.506714 36.715969) (xy 185.394796 36.807818) (xy 185.371775 36.835869) (xy 185.345883 36.861761) (xy 185.25889 36.879065) (xy 185.09783 36.945778) (xy 184.95288 37.042631) (xy 184.829611 37.1659) (xy 184.732758 37.31085) (xy 184.666045 37.47191) (xy 184.632035 37.64289) (xy 104.747938 37.64289) (xy 104.73699 37.587855) (xy 104.670277 37.426795) (xy 104.573424 37.281845) (xy 104.450155 37.158576) (xy 104.305205 37.061723) (xy 104.144145 36.99501) (xy 103.973165 36.961) (xy 103.798835 36.961) (xy 103.627855 36.99501) (xy 103.505 37.045898) (xy 103.382145 36.99501) (xy 103.211165 36.961) (xy 103.036835 36.961) (xy 102.865855 36.99501) (xy 102.704795 37.061723) (xy 102.559845 37.158576) (xy 102.500556 37.217865) (xy 102.486155 37.215) (xy 102.311825 37.215) (xy 102.235718 37.230139) (xy 102.164155 37.158576) (xy 102.019205 37.061723) (xy 101.858145 36.99501) (xy 101.687165 36.961) (xy 101.512835 36.961) (xy 101.341855 36.99501) (xy 101.180795 37.061723) (xy 101.035845 37.158576) (xy 100.912576 37.281845) (xy 100.815723 37.426795) (xy 100.74901 37.587855) (xy 100.715 37.758835) (xy 56.241829 37.758835) (xy 56.28 37.566939) (xy 56.28 37.363061) (xy 56.240226 37.163102) (xy 56.162205 36.974744) (xy 56.048937 36.805226) (xy 55.904774 36.661063) (xy 55.735256 36.547795) (xy 55.546898 36.469774) (xy 55.346939 36.43) (xy 55.143061 36.43) (xy 54.943102 36.469774) (xy 54.754744 36.547795) (xy 54.585226 36.661063) (xy 54.441063 36.805226) (xy 54.327795 36.974744) (xy 54.249774 37.163102) (xy 54.21 37.363061) (xy 54.21 37.566939) (xy 54.249774 37.766898) (xy 54.327795 37.955256) (xy 54.441063 38.124774) (xy 54.485 38.168711) (xy 54.485001 42.71783) (xy 54.424489 42.71783) (xy 54.22453 42.757604) (xy 54.036172 42.835625) (xy 53.866654 42.948893) (xy 53.722491 43.093056) (xy 53.609223 43.262574) (xy 53.531202 43.450932) (xy 53.491428 43.650891) (xy 39.287795 43.650891) (xy 39.128397 43.601208) (xy 38.279605 44.45) (xy 37.920395 44.45) (xy 37.071603 43.601208) (xy 36.829311 43.676729) (xy 36.713475 43.503368) (xy 36.506632 43.296525) (xy 36.33224 43.18) (xy 36.506632 43.063475) (xy 36.63171 42.938397) (xy 37.251208 42.938397) (xy 37.326514 43.18) (xy 37.251208 43.421603) (xy 38.1 44.270395) (xy 38.948792 43.421603) (xy 38.873486 43.18) (xy 38.948792 42.938397) (xy 38.1 42.089605) (xy 37.251208 42.938397) (xy 36.63171 42.938397) (xy 36.713475 42.856632) (xy 36.829311 42.683271) (xy 37.071603 42.758792) (xy 37.920395 41.91) (xy 38.279605 41.91) (xy 39.128397 42.758792) (xy 39.377472 42.681157) (xy 39.503371 42.417117) (xy 39.575339 42.133589) (xy 39.590611 41.841469) (xy 39.548599 41.551981) (xy 39.450919 41.276253) (xy 39.377472 41.138843) (xy 39.128397 41.061208) (xy 38.279605 41.91) (xy 37.920395 41.91) (xy 37.071603 41.061208) (xy 36.829311 41.136729) (xy 36.713475 40.963368) (xy 36.506632 40.756525) (xy 36.33224 40.64) (xy 36.506632 40.523475) (xy 36.63171 40.398397) (xy 37.251208 40.398397) (xy 37.326514 40.64) (xy 37.251208 40.881603) (xy 38.1 41.730395) (xy 38.948792 40.881603) (xy 38.873486 40.64) (xy 38.948792 40.398397) (xy 38.1 39.549605) (xy 37.251208 40.398397) (xy 36.63171 40.398397) (xy 36.713475 40.316632) (xy 36.829311 40.143271) (xy 37.071603 40.218792) (xy 37.920395 39.37) (xy 38.279605 39.37) (xy 39.128397 40.218792) (xy 39.377472 40.141157) (xy 39.503371 39.877117) (xy 39.575339 39.593589) (xy 39.590611 39.301469) (xy 39.548599 39.011981) (xy 39.450919 38.736253) (xy 39.377472 38.598843) (xy 39.128397 38.521208) (xy 38.279605 39.37) (xy 37.920395 39.37) (xy 37.071603 38.521208) (xy 36.829311 38.596729) (xy 36.713475 38.423368) (xy 36.526392 38.236285) (xy 36.653386 38.168405) (xy 36.787962 38.057962) (xy 36.898405 37.923386) (xy 36.933142 37.858397) (xy 37.251208 37.858397) (xy 37.326514 38.1) (xy 37.251208 38.341603) (xy 38.1 39.190395) (xy 38.948792 38.341603) (xy 38.873486 38.1) (xy 38.948792 37.858397) (xy 38.1 37.009605) (xy 37.251208 37.858397) (xy 36.933142 37.858397) (xy 36.980472 37.76985) (xy 37.01358 37.660707) (xy 37.071603 37.678792) (xy 37.920395 36.83) (xy 38.279605 36.83) (xy 39.128397 37.678792) (xy 39.377472 37.601157) (xy 39.503371 37.337117) (xy 39.575339 37.053589) (xy 39.590611 36.761469) (xy 39.548599 36.471981) (xy 39.450919 36.196253) (xy 39.377472 36.058843) (xy 39.128397 35.981208) (xy 38.279605 36.83) (xy 37.920395 36.83) (xy 37.071603 35.981208) (xy 37.01358 35.999293) (xy 36.980472 35.89015) (xy 36.933143 35.801603) (xy 37.251208 35.801603) (xy 38.1 36.650395) (xy 38.948792 35.801603) (xy 38.871157 35.552528) (xy 38.607117 35.426629) (xy 38.323589 35.354661) (xy 38.031469 35.339389) (xy 37.741981 35.381401) (xy 37.466253 35.479081) (xy 37.328843 35.552528) (xy 37.251208 35.801603) (xy 36.933143 35.801603) (xy 36.898405 35.736614) (xy 36.787962 35.602038) (xy 36.653386 35.491595) (xy 36.49985 35.409528) (xy 36.333254 35.358992) (xy 36.16 35.341928) (xy 34.96 35.341928) (xy 34.786746 35.358992) (xy 34.62015 35.409528) (xy 34.466614 35.491595) (xy 34.332038 35.602038) (xy 34.221595 35.736614) (xy 34.139528 35.89015) (xy 34.088992 36.056746) (xy 34.071928 36.23) (xy 26.06 36.23) (xy 26.06 30.988534) (xy 26.480442 31.408976) (xy 27.051234 31.790367) (xy 27.685463 32.053073) (xy 28.358758 32.187) (xy 29.045242 32.187) (xy 29.718537 32.053073) (xy 30.352766 31.790367) (xy 30.923558 31.408976) (xy 31.408976 30.923558) (xy 31.790367 30.352766) (xy 32.053073 29.718537) (xy 32.187 29.045242) (xy 32.187 29.01205) (xy 46.935 29.01205) (xy 46.935 29.407949) (xy 46.956487 29.62611) (xy 47.041401 29.906033) (xy 47.179294 30.164013) (xy 47.364866 30.390134) (xy 47.590986 30.575706) (xy 47.848966 30.713599) (xy 48.128889 30.798513) (xy 48.42 30.827185) (xy 48.71111 30.798513) (xy 48.991033 30.713599) (xy 49.249013 30.575706) (xy 49.475134 30.390134) (xy 49.660706 30.164014) (xy 49.67 30.146626) (xy 49.679294 30.164013) (xy 49.864866 30.390134) (xy 50.090986 30.575706) (xy 50.348966 30.713599) (xy 50.628889 30.798513) (xy 50.92 30.827185) (xy 51.21111 30.798513) (xy 51.491033 30.713599) (xy 51.749013 30.575706) (xy 51.975134 30.390134) (xy 52.160706 30.164014) (xy 52.17 30.146626) (xy 52.179294 30.164013) (xy 52.364866 30.390134) (xy 52.590986 30.575706) (xy 52.848966 30.713599) (xy 53.128889 30.798513) (xy 53.42 30.827185) (xy 53.71111 30.798513) (xy 53.991033 30.713599) (xy 54.249013 30.575706) (xy 54.475134 30.390134) (xy 54.660706 30.164014) (xy 54.67 30.146626) (xy 54.679294 30.164013) (xy 54.864866 30.390134) (xy 55.090986 30.575706) (xy 55.348966 30.713599) (xy 55.628889 30.798513) (xy 55.92 30.827185) (xy 56.21111 30.798513) (xy 56.491033 30.713599) (xy 56.749013 30.575706) (xy 56.975134 30.390134) (xy 57.027223 30.326663) (xy 57.081595 30.428386) (xy 57.192038 30.562962) (xy 57.326614 30.673405) (xy 57.48015 30.755472) (xy 57.646746 30.806008) (xy 57.82 30.823072) (xy 59.02 30.823072) (xy 59.193254 30.806008) (xy 59.35985 30.755472) (xy 59.513386 30.673405) (xy 59.647962 30.562962) (xy 59.758405 30.428386) (xy 59.840472 30.27485) (xy 59.891008 30.108254) (xy 59.908072 29.935) (xy 59.908072 29.01205) (xy 65.985 29.01205) (xy 65.985 29.407949) (xy 66.006487 29.62611) (xy 66.091401 29.906033) (xy 66.229294 30.164013) (xy 66.414866 30.390134) (xy 66.640986 30.575706) (xy 66.898966 30.713599) (xy 67.178889 30.798513) (xy 67.47 30.827185) (xy 67.76111 30.798513) (xy 68.041033 30.713599) (xy 68.299013 30.575706) (xy 68.525134 30.390134) (xy 68.710706 30.164014) (xy 68.72 30.146626) (xy 68.729294 30.164013) (xy 68.914866 30.390134) (xy 69.140986 30.575706) (xy 69.398966 30.713599) (xy 69.678889 30.798513) (xy 69.97 30.827185) (xy 70.26111 30.798513) (xy 70.541033 30.713599) (xy 70.799013 30.575706) (xy 71.025134 30.390134) (xy 71.210706 30.164014) (xy 71.22 30.146626) (xy 71.229294 30.164013) (xy 71.414866 30.390134) (xy 71.640986 30.575706) (xy 71.898966 30.713599) (xy 72.178889 30.798513) (xy 72.47 30.827185) (xy 72.76111 30.798513) (xy 73.041033 30.713599) (xy 73.299013 30.575706) (xy 73.525134 30.390134) (xy 73.710706 30.164014) (xy 73.72 30.146626) (xy 73.729294 30.164013) (xy 73.914866 30.390134) (xy 74.140986 30.575706) (xy 74.398966 30.713599) (xy 74.678889 30.798513) (xy 74.97 30.827185) (xy 75.26111 30.798513) (xy 75.541033 30.713599) (xy 75.799013 30.575706) (xy 76.025134 30.390134) (xy 76.077223 30.326663) (xy 76.131595 30.428386) (xy 76.242038 30.562962) (xy 76.376614 30.673405) (xy 76.53015 30.755472) (xy 76.696746 30.806008) (xy 76.87 30.823072) (xy 78.07 30.823072) (xy 78.243254 30.806008) (xy 78.40985 30.755472) (xy 78.563386 30.673405) (xy 78.697962 30.562962) (xy 78.808405 30.428386) (xy 78.890472 30.27485) (xy 78.941008 30.108254) (xy 78.958072 29.935) (xy 78.958072 29.01205) (xy 85.035 29.01205) (xy 85.035 29.407949) (xy 85.056487 29.62611) (xy 85.141401 29.906033) (xy 85.279294 30.164013) (xy 85.464866 30.390134) (xy 85.690986 30.575706) (xy 85.948966 30.713599) (xy 86.228889 30.798513) (xy 86.52 30.827185) (xy 86.81111 30.798513) (xy 87.091033 30.713599) (xy 87.349013 30.575706) (xy 87.575134 30.390134) (xy 87.760706 30.164014) (xy 87.77 30.146626) (xy 87.779294 30.164013) (xy 87.964866 30.390134) (xy 88.190986 30.575706) (xy 88.448966 30.713599) (xy 88.728889 30.798513) (xy 89.02 30.827185) (xy 89.31111 30.798513) (xy 89.591033 30.713599) (xy 89.849013 30.575706) (xy 90.075134 30.390134) (xy 90.260706 30.164014) (xy 90.27 30.146626) (xy 90.279294 30.164013) (xy 90.464866 30.390134) (xy 90.690986 30.575706) (xy 90.948966 30.713599) (xy 91.228889 30.798513) (xy 91.52 30.827185) (xy 91.81111 30.798513) (xy 92.091033 30.713599) (xy 92.349013 30.575706) (xy 92.575134 30.390134) (xy 92.760706 30.164014) (xy 92.77 30.146626) (xy 92.779294 30.164013) (xy 92.964866 30.390134) (xy 93.190986 30.575706) (xy 93.448966 30.713599) (xy 93.728889 30.798513) (xy 94.02 30.827185) (xy 94.31111 30.798513) (xy 94.591033 30.713599) (xy 94.849013 30.575706) (xy 95.075134 30.390134) (xy 95.127223 30.326663) (xy 95.181595 30.428386) (xy 95.292038 30.562962) (xy 95.426614 30.673405) (xy 95.58015 30.755472) (xy 95.746746 30.806008) (xy 95.92 30.823072) (xy 97.12 30.823072) (xy 97.293254 30.806008) (xy 97.45985 30.755472) (xy 97.470087 30.75) (xy 110.121928 30.75) (xy 110.121928 32.75) (xy 110.134188 32.874482) (xy 110.170498 32.99418) (xy 110.229463 33.104494) (xy 110.308815 33.201185) (xy 110.405506 33.280537) (xy 110.51582 33.339502) (xy 110.635518 33.375812) (xy 110.76 33.388072) (xy 112.76 33.388072) (xy 112.884482 33.375812) (xy 113.00418 33.339502) (xy 113.114494 33.280537) (xy 113.211185 33.201185) (xy 113.290537 33.104494) (xy 113.349502 32.99418) (xy 113.385812 32.874482) (xy 113.398072 32.75) (xy 113.398072 31.588967) (xy 115.205 31.588967) (xy 115.205 31.911033) (xy 115.267832 32.226912) (xy 115.391082 32.524463) (xy 115.570013 32.792252) (xy 115.797748 33.019987) (xy 116.065537 33.198918) (xy 116.363088 33.322168) (xy 116.678967 33.385) (xy 117.001033 33.385) (xy 117.316912 33.322168) (xy 117.614463 33.198918) (xy 117.882252 33.019987) (xy 118.109987 32.792252) (xy 118.138218 32.75) (xy 120.281928 32.75) (xy 120.294188 32.874482) (xy 120.330498 32.99418) (xy 120.389463 33.104494) (xy 120.468815 33.201185) (xy 120.565506 33.280537) (xy 120.67582 33.339502) (xy 120.795518 33.375812) (xy 120.92 33.388072) (xy 121.63425 33.385) (xy 121.793 33.22625) (xy 121.793 31.877) (xy 122.047 31.877) (xy 122.047 33.22625) (xy 122.20575 33.385) (xy 122.92 33.388072) (xy 123.044482 33.375812) (xy 123.16418 33.339502) (xy 123.274494 33.280537) (xy 123.371185 33.201185) (xy 123.450537 33.104494) (xy 123.509502 32.99418) (xy 123.542496 32.885413) (xy 126.044192 32.885413) (xy 126.139956 33.149814) (xy 126.429571 33.290704) (xy 126.741108 33.372384) (xy 127.062595 33.391718) (xy 127.381675 33.347961) (xy 127.686088 33.242795) (xy 127.860044 33.149814) (xy 127.955808 32.885413) (xy 127 31.929605) (xy 126.044192 32.885413) (xy 123.542496 32.885413) (xy 123.545812 32.874482) (xy 123.558072 32.75) (xy 123.555 32.03575) (xy 123.39625 31.877) (xy 122.047 31.877) (xy 121.793 31.877) (xy 120.44375 31.877) (xy 120.285 32.03575) (xy 120.281928 32.75) (xy 118.138218 32.75) (xy 118.288918 32.524463) (xy 118.412168 32.226912) (xy 118.475 31.911033) (xy 118.475 31.812595) (xy 125.358282 31.812595) (xy 125.402039 32.131675) (xy 125.507205 32.436088) (xy 125.600186 32.610044) (xy 125.864587 32.705808) (xy 126.820395 31.75) (xy 127.179605 31.75) (xy 128.135413 32.705808) (xy 128.399814 32.610044) (xy 128.540704 32.320429) (xy 128.622384 32.008892) (xy 128.641718 31.687405) (xy 128.597961 31.368325) (xy 128.492795 31.063912) (xy 128.399814 30.889956) (xy 128.275693 30.845) (xy 129.54 30.845) (xy 129.54 34.052) (xy 129.543058 34.114242) (xy 129.562273 34.309332) (xy 129.586557 34.431419) (xy 129.643462 34.619012) (xy 129.6911 34.73402) (xy 129.78351 34.906907) (xy 129.852668 35.010409) (xy 129.977031 35.161946) (xy 130.065054 35.249969) (xy 130.216591 35.374332) (xy 130.320093 35.44349) (xy 130.49298 35.5359) (xy 130.607988 35.583538) (xy 130.795581 35.640443) (xy 130.917668 35.664727) (xy 131.112758 35.683942) (xy 131.175 35.687) (xy 138.065 35.687) (xy 138.127242 35.683942) (xy 138.322332 35.664727) (xy 138.444419 35.640443) (xy 138.632012 35.583538) (xy 138.74702 35.5359) (xy 138.919907 35.44349) (xy 139.023409 35.374332) (xy 139.174946 35.249969) (xy 139.262969 35.161946) (xy 139.387332 35.010409) (xy 139.45649 34.906907) (xy 139.5489 34.73402) (xy 139.596538 34.619012) (xy 139.653443 34.431419) (xy 139.677727 34.309332) (xy 139.696942 34.114242) (xy 139.7 34.052) (xy 139.7 30.845) (xy 139.696942 30.782758) (xy 139.677727 30.587668) (xy 139.653443 30.465581) (xy 139.596538 30.277988) (xy 139.5489 30.16298) (xy 139.45649 29.990093) (xy 139.387332 29.886591) (xy 139.262969 29.735054) (xy 139.174946 29.647031) (xy 139.023409 29.522668) (xy 138.919907 29.45351) (xy 138.74702 29.3611) (xy 138.632012 29.313462) (xy 138.444419 29.256557) (xy 138.322332 29.232273) (xy 138.127242 29.213058) (xy 138.065 29.21) (xy 131.175 29.21) (xy 131.112758 29.213058) (xy 130.917668 29.232273) (xy 130.795581 29.256557) (xy 130.607988 29.313462) (xy 130.49298 29.3611) (xy 130.320093 29.45351) (xy 130.216591 29.522668) (xy 130.065054 29.647031) (xy 129.977031 29.735054) (xy 129.852668 29.886591) (xy 129.78351 29.990093) (xy 129.6911 30.16298) (xy 129.643462 30.277988) (xy 129.586557 30.465581) (xy 129.562273 30.587668) (xy 129.543058 30.782758) (xy 129.54 30.845) (xy 128.275693 30.845) (xy 128.135413 30.794192) (xy 127.179605 31.75) (xy 126.820395 31.75) (xy 125.864587 30.794192) (xy 125.600186 30.889956) (xy 125.459296 31.179571) (xy 125.377616 31.491108) (xy 125.358282 31.812595) (xy 118.475 31.812595) (xy 118.475 31.588967) (xy 118.412168 31.273088) (xy 118.288918 30.975537) (xy 118.138219 30.75) (xy 120.281928 30.75) (xy 120.285 31.46425) (xy 120.44375 31.623) (xy 121.793 31.623) (xy 121.793 30.27375) (xy 122.047 30.27375) (xy 122.047 31.623) (xy 123.39625 31.623) (xy 123.555 31.46425) (xy 123.558072 30.75) (xy 123.545812 30.625518) (xy 123.542497 30.614587) (xy 126.044192 30.614587) (xy 127 31.570395) (xy 127.955808 30.614587) (xy 127.860044 30.350186) (xy 127.570429 30.209296) (xy 127.258892 30.127616) (xy 126.937405 30.108282) (xy 126.618325 30.152039) (xy 126.313912 30.257205) (xy 126.139956 30.350186) (xy 126.044192 30.614587) (xy 123.542497 30.614587) (xy 123.509502 30.50582) (xy 123.450537 30.395506) (xy 123.371185 30.298815) (xy 123.274494 30.219463) (xy 123.16418 30.160498) (xy 123.044482 30.124188) (xy 122.92 30.111928) (xy 122.20575 30.115) (xy 122.047 30.27375) (xy 121.793 30.27375) (xy 121.63425 30.115) (xy 120.92 30.111928) (xy 120.795518 30.124188) (xy 120.67582 30.160498) (xy 120.565506 30.219463) (xy 120.468815 30.298815) (xy 120.389463 30.395506) (xy 120.330498 30.50582) (xy 120.294188 30.625518) (xy 120.281928 30.75) (xy 118.138219 30.75) (xy 118.109987 30.707748) (xy 117.882252 30.480013) (xy 117.614463 30.301082) (xy 117.316912 30.177832) (xy 117.001033 30.115) (xy 116.678967 30.115) (xy 116.363088 30.177832) (xy 116.065537 30.301082) (xy 115.797748 30.480013) (xy 115.570013 30.707748) (xy 115.391082 30.975537) (xy 115.267832 31.273088) (xy 115.205 31.588967) (xy 113.398072 31.588967) (xy 113.398072 30.75) (xy 113.385812 30.625518) (xy 113.349502 30.50582) (xy 113.290537 30.395506) (xy 113.211185 30.298815) (xy 113.114494 30.219463) (xy 113.00418 30.160498) (xy 112.884482 30.124188) (xy 112.76 30.111928) (xy 110.76 30.111928) (xy 110.635518 30.124188) (xy 110.51582 30.160498) (xy 110.405506 30.219463) (xy 110.308815 30.298815) (xy 110.229463 30.395506) (xy 110.170498 30.50582) (xy 110.134188 30.625518) (xy 110.121928 30.75) (xy 97.470087 30.75) (xy 97.613386 30.673405) (xy 97.747962 30.562962) (xy 97.858405 30.428386) (xy 97.940472 30.27485) (xy 97.991008 30.108254) (xy 98.008072 29.935) (xy 98.008072 29.01205) (xy 151.075 29.01205) (xy 151.075 29.407949) (xy 151.096487 29.62611) (xy 151.181401 29.906033) (xy 151.319294 30.164013) (xy 151.504866 30.390134) (xy 151.730986 30.575706) (xy 151.988966 30.713599) (xy 152.268889 30.798513) (xy 152.56 30.827185) (xy 152.85111 30.798513) (xy 153.131033 30.713599) (xy 153.389013 30.575706) (xy 153.615134 30.390134) (xy 153.800706 30.164014) (xy 153.81 30.146626) (xy 153.819294 30.164013) (xy 154.004866 30.390134) (xy 154.230986 30.575706) (xy 154.488966 30.713599) (xy 154.768889 30.798513) (xy 155.06 30.827185) (xy 155.35111 30.798513) (xy 155.631033 30.713599) (xy 155.889013 30.575706) (xy 156.115134 30.390134) (xy 156.300706 30.164014) (xy 156.31 30.146626) (xy 156.319294 30.164013) (xy 156.504866 30.390134) (xy 156.730986 30.575706) (xy 156.988966 30.713599) (xy 157.268889 30.798513) (xy 157.56 30.827185) (xy 157.85111 30.798513) (xy 158.131033 30.713599) (xy 158.389013 30.575706) (xy 158.615134 30.390134) (xy 158.800706 30.164014) (xy 158.81 30.146626) (xy 158.819294 30.164013) (xy 159.004866 30.390134) (xy 159.230986 30.575706) (xy 159.488966 30.713599) (xy 159.768889 30.798513) (xy 160.06 30.827185) (xy 160.35111 30.798513) (xy 160.631033 30.713599) (xy 160.889013 30.575706) (xy 161.115134 30.390134) (xy 161.167223 30.326663) (xy 161.221595 30.428386) (xy 161.332038 30.562962) (xy 161.466614 30.673405) (xy 161.62015 30.755472) (xy 161.786746 30.806008) (xy 161.96 30.823072) (xy 163.16 30.823072) (xy 163.333254 30.806008) (xy 163.49985 30.755472) (xy 163.653386 30.673405) (xy 163.787962 30.562962) (xy 163.898405 30.428386) (xy 163.980472 30.27485) (xy 164.031008 30.108254) (xy 164.048072 29.935) (xy 164.048072 29.01205) (xy 170.125 29.01205) (xy 170.125 29.407949) (xy 170.146487 29.62611) (xy 170.231401 29.906033) (xy 170.369294 30.164013) (xy 170.554866 30.390134) (xy 170.780986 30.575706) (xy 171.038966 30.713599) (xy 171.318889 30.798513) (xy 171.61 30.827185) (xy 171.90111 30.798513) (xy 172.181033 30.713599) (xy 172.439013 30.575706) (xy 172.665134 30.390134) (xy 172.850706 30.164014) (xy 172.86 30.146626) (xy 172.869294 30.164013) (xy 173.054866 30.390134) (xy 173.280986 30.575706) (xy 173.538966 30.713599) (xy 173.818889 30.798513) (xy 174.11 30.827185) (xy 174.40111 30.798513) (xy 174.681033 30.713599) (xy 174.939013 30.575706) (xy 175.165134 30.390134) (xy 175.350706 30.164014) (xy 175.36 30.146626) (xy 175.369294 30.164013) (xy 175.554866 30.390134) (xy 175.780986 30.575706) (xy 176.038966 30.713599) (xy 176.318889 30.798513) (xy 176.61 30.827185) (xy 176.90111 30.798513) (xy 177.181033 30.713599) (xy 177.439013 30.575706) (xy 177.665134 30.390134) (xy 177.850706 30.164014) (xy 177.86 30.146626) (xy 177.869294 30.164013) (xy 178.054866 30.390134) (xy 178.280986 30.575706) (xy 178.538966 30.713599) (xy 178.818889 30.798513) (xy 179.11 30.827185) (xy 179.40111 30.798513) (xy 179.681033 30.713599) (xy 179.939013 30.575706) (xy 180.165134 30.390134) (xy 180.217223 30.326663) (xy 180.271595 30.428386) (xy 180.382038 30.562962) (xy 180.516614 30.673405) (xy 180.67015 30.755472) (xy 180.836746 30.806008) (xy 181.01 30.823072) (xy 182.21 30.823072) (xy 182.383254 30.806008) (xy 182.54985 30.755472) (xy 182.703386 30.673405) (xy 182.837962 30.562962) (xy 182.948405 30.428386) (xy 183.030472 30.27485) (xy 183.081008 30.108254) (xy 183.098072 29.935) (xy 183.098072 29.01205) (xy 189.175 29.01205) (xy 189.175 29.407949) (xy 189.196487 29.62611) (xy 189.281401 29.906033) (xy 189.419294 30.164013) (xy 189.604866 30.390134) (xy 189.830986 30.575706) (xy 190.088966 30.713599) (xy 190.368889 30.798513) (xy 190.66 30.827185) (xy 190.95111 30.798513) (xy 191.231033 30.713599) (xy 191.489013 30.575706) (xy 191.715134 30.390134) (xy 191.900706 30.164014) (xy 191.91 30.146626) (xy 191.919294 30.164013) (xy 192.104866 30.390134) (xy 192.330986 30.575706) (xy 192.588966 30.713599) (xy 192.868889 30.798513) (xy 193.16 30.827185) (xy 193.45111 30.798513) (xy 193.731033 30.713599) (xy 193.989013 30.575706) (xy 194.215134 30.390134) (xy 194.400706 30.164014) (xy 194.41 30.146626) (xy 194.419294 30.164013) (xy 194.604866 30.390134) (xy 194.830986 30.575706) (xy 195.088966 30.713599) (xy 195.368889 30.798513) (xy 195.66 30.827185) (xy 195.95111 30.798513) (xy 196.231033 30.713599) (xy 196.489013 30.575706) (xy 196.715134 30.390134) (xy 196.900706 30.164014) (xy 196.91 30.146626) (xy 196.919294 30.164013) (xy 197.104866 30.390134) (xy 197.330986 30.575706) (xy 197.588966 30.713599) (xy 197.868889 30.798513) (xy 198.16 30.827185) (xy 198.45111 30.798513) (xy 198.731033 30.713599) (xy 198.989013 30.575706) (xy 199.215134 30.390134) (xy 199.267223 30.326663) (xy 199.321595 30.428386) (xy 199.432038 30.562962) (xy 199.566614 30.673405) (xy 199.72015 30.755472) (xy 199.886746 30.806008) (xy 200.06 30.823072) (xy 201.26 30.823072) (xy 201.433254 30.806008) (xy 201.59985 30.755472) (xy 201.753386 30.673405) (xy 201.887962 30.562962) (xy 201.998405 30.428386) (xy 202.080472 30.27485) (xy 202.131008 30.108254) (xy 202.148072 29.935) (xy 202.148072 28.485) (xy 202.131008 28.311746) (xy 202.080472 28.14515) (xy 201.998405 27.991614) (xy 201.887962 27.857038) (xy 201.753386 27.746595) (xy 201.59985 27.664528) (xy 201.433254 27.613992) (xy 201.26 27.596928) (xy 200.06 27.596928) (xy 199.886746 27.613992) (xy 199.72015 27.664528) (xy 199.566614 27.746595) (xy 199.432038 27.857038) (xy 199.321595 27.991614) (xy 199.267223 28.093337) (xy 199.215134 28.029866) (xy 198.989014 27.844294) (xy 198.731034 27.706401) (xy 198.451111 27.621487) (xy 198.16 27.592815) (xy 197.86889 27.621487) (xy 197.588967 27.706401) (xy 197.330987 27.844294) (xy 197.104866 28.029866) (xy 196.919294 28.255986) (xy 196.91 28.273374) (xy 196.900706 28.255986) (xy 196.715134 28.029866) (xy 196.489014 27.844294) (xy 196.231034 27.706401) (xy 195.951111 27.621487) (xy 195.66 27.592815) (xy 195.36889 27.621487) (xy 195.088967 27.706401) (xy 194.830987 27.844294) (xy 194.604866 28.029866) (xy 194.419294 28.255986) (xy 194.41 28.273374) (xy 194.400706 28.255986) (xy 194.215134 28.029866) (xy 193.989014 27.844294) (xy 193.731034 27.706401) (xy 193.451111 27.621487) (xy 193.16 27.592815) (xy 192.86889 27.621487) (xy 192.588967 27.706401) (xy 192.330987 27.844294) (xy 192.104866 28.029866) (xy 191.919294 28.255986) (xy 191.91 28.273374) (xy 191.900706 28.255986) (xy 191.715134 28.029866) (xy 191.489014 27.844294) (xy 191.231034 27.706401) (xy 190.951111 27.621487) (xy 190.66 27.592815) (xy 190.36889 27.621487) (xy 190.088967 27.706401) (xy 189.830987 27.844294) (xy 189.604866 28.029866) (xy 189.419294 28.255986) (xy 189.281401 28.513966) (xy 189.196487 28.793889) (xy 189.175 29.01205) (xy 183.098072 29.01205) (xy 183.098072 28.485) (xy 183.081008 28.311746) (xy 183.030472 28.14515) (xy 182.948405 27.991614) (xy 182.837962 27.857038) (xy 182.703386 27.746595) (xy 182.54985 27.664528) (xy 182.383254 27.613992) (xy 182.21 27.596928) (xy 181.01 27.596928) (xy 180.836746 27.613992) (xy 180.67015 27.664528) (xy 180.516614 27.746595) (xy 180.382038 27.857038) (xy 180.271595 27.991614) (xy 180.217223 28.093337) (xy 180.165134 28.029866) (xy 179.939014 27.844294) (xy 179.681034 27.706401) (xy 179.401111 27.621487) (xy 179.11 27.592815) (xy 178.81889 27.621487) (xy 178.538967 27.706401) (xy 178.280987 27.844294) (xy 178.054866 28.029866) (xy 177.869294 28.255986) (xy 177.86 28.273374) (xy 177.850706 28.255986) (xy 177.665134 28.029866) (xy 177.439014 27.844294) (xy 177.181034 27.706401) (xy 176.901111 27.621487) (xy 176.61 27.592815) (xy 176.31889 27.621487) (xy 176.038967 27.706401) (xy 175.780987 27.844294) (xy 175.554866 28.029866) (xy 175.369294 28.255986) (xy 175.36 28.273374) (xy 175.350706 28.255986) (xy 175.165134 28.029866) (xy 174.939014 27.844294) (xy 174.681034 27.706401) (xy 174.401111 27.621487) (xy 174.11 27.592815) (xy 173.81889 27.621487) (xy 173.538967 27.706401) (xy 173.280987 27.844294) (xy 173.054866 28.029866) (xy 172.869294 28.255986) (xy 172.86 28.273374) (xy 172.850706 28.255986) (xy 172.665134 28.029866) (xy 172.439014 27.844294) (xy 172.181034 27.706401) (xy 171.901111 27.621487) (xy 171.61 27.592815) (xy 171.31889 27.621487) (xy 171.038967 27.706401) (xy 170.780987 27.844294) (xy 170.554866 28.029866) (xy 170.369294 28.255986) (xy 170.231401 28.513966) (xy 170.146487 28.793889) (xy 170.125 29.01205) (xy 164.048072 29.01205) (xy 164.048072 28.485) (xy 164.031008 28.311746) (xy 163.980472 28.14515) (xy 163.898405 27.991614) (xy 163.787962 27.857038) (xy 163.653386 27.746595) (xy 163.49985 27.664528) (xy 163.333254 27.613992) (xy 163.16 27.596928) (xy 161.96 27.596928) (xy 161.786746 27.613992) (xy 161.62015 27.664528) (xy 161.466614 27.746595) (xy 161.332038 27.857038) (xy 161.221595 27.991614) (xy 161.167223 28.093337) (xy 161.115134 28.029866) (xy 160.889014 27.844294) (xy 160.631034 27.706401) (xy 160.351111 27.621487) (xy 160.06 27.592815) (xy 159.76889 27.621487) (xy 159.488967 27.706401) (xy 159.230987 27.844294) (xy 159.004866 28.029866) (xy 158.819294 28.255986) (xy 158.81 28.273374) (xy 158.800706 28.255986) (xy 158.615134 28.029866) (xy 158.389014 27.844294) (xy 158.131034 27.706401) (xy 157.851111 27.621487) (xy 157.56 27.592815) (xy 157.26889 27.621487) (xy 156.988967 27.706401) (xy 156.730987 27.844294) (xy 156.504866 28.029866) (xy 156.319294 28.255986) (xy 156.31 28.273374) (xy 156.300706 28.255986) (xy 156.115134 28.029866) (xy 155.889014 27.844294) (xy 155.631034 27.706401) (xy 155.351111 27.621487) (xy 155.06 27.592815) (xy 154.76889 27.621487) (xy 154.488967 27.706401) (xy 154.230987 27.844294) (xy 154.004866 28.029866) (xy 153.819294 28.255986) (xy 153.81 28.273374) (xy 153.800706 28.255986) (xy 153.615134 28.029866) (xy 153.389014 27.844294) (xy 153.131034 27.706401) (xy 152.851111 27.621487) (xy 152.56 27.592815) (xy 152.26889 27.621487) (xy 151.988967 27.706401) (xy 151.730987 27.844294) (xy 151.504866 28.029866) (xy 151.319294 28.255986) (xy 151.181401 28.513966) (xy 151.096487 28.793889) (xy 151.075 29.01205) (xy 98.008072 29.01205) (xy 98.008072 28.485) (xy 97.991008 28.311746) (xy 97.940472 28.14515) (xy 97.858405 27.991614) (xy 97.747962 27.857038) (xy 97.613386 27.746595) (xy 97.45985 27.664528) (xy 97.293254 27.613992) (xy 97.12 27.596928) (xy 95.92 27.596928) (xy 95.746746 27.613992) (xy 95.58015 27.664528) (xy 95.426614 27.746595) (xy 95.292038 27.857038) (xy 95.181595 27.991614) (xy 95.127223 28.093337) (xy 95.075134 28.029866) (xy 94.849014 27.844294) (xy 94.591034 27.706401) (xy 94.311111 27.621487) (xy 94.02 27.592815) (xy 93.72889 27.621487) (xy 93.448967 27.706401) (xy 93.190987 27.844294) (xy 92.964866 28.029866) (xy 92.779294 28.255986) (xy 92.77 28.273374) (xy 92.760706 28.255986) (xy 92.575134 28.029866) (xy 92.349014 27.844294) (xy 92.091034 27.706401) (xy 91.811111 27.621487) (xy 91.52 27.592815) (xy 91.22889 27.621487) (xy 90.948967 27.706401) (xy 90.690987 27.844294) (xy 90.464866 28.029866) (xy 90.279294 28.255986) (xy 90.27 28.273374) (xy 90.260706 28.255986) (xy 90.075134 28.029866) (xy 89.849014 27.844294) (xy 89.591034 27.706401) (xy 89.311111 27.621487) (xy 89.02 27.592815) (xy 88.72889 27.621487) (xy 88.448967 27.706401) (xy 88.190987 27.844294) (xy 87.964866 28.029866) (xy 87.779294 28.255986) (xy 87.77 28.273374) (xy 87.760706 28.255986) (xy 87.575134 28.029866) (xy 87.349014 27.844294) (xy 87.091034 27.706401) (xy 86.811111 27.621487) (xy 86.52 27.592815) (xy 86.22889 27.621487) (xy 85.948967 27.706401) (xy 85.690987 27.844294) (xy 85.464866 28.029866) (xy 85.279294 28.255986) (xy 85.141401 28.513966) (xy 85.056487 28.793889) (xy 85.035 29.01205) (xy 78.958072 29.01205) (xy 78.958072 28.485) (xy 78.941008 28.311746) (xy 78.890472 28.14515) (xy 78.808405 27.991614) (xy 78.697962 27.857038) (xy 78.563386 27.746595) (xy 78.40985 27.664528) (xy 78.243254 27.613992) (xy 78.07 27.596928) (xy 76.87 27.596928) (xy 76.696746 27.613992) (xy 76.53015 27.664528) (xy 76.376614 27.746595) (xy 76.242038 27.857038) (xy 76.131595 27.991614) (xy 76.077223 28.093337) (xy 76.025134 28.029866) (xy 75.799014 27.844294) (xy 75.541034 27.706401) (xy 75.261111 27.621487) (xy 74.97 27.592815) (xy 74.67889 27.621487) (xy 74.398967 27.706401) (xy 74.140987 27.844294) (xy 73.914866 28.029866) (xy 73.729294 28.255986) (xy 73.72 28.273374) (xy 73.710706 28.255986) (xy 73.525134 28.029866) (xy 73.299014 27.844294) (xy 73.041034 27.706401) (xy 72.761111 27.621487) (xy 72.47 27.592815) (xy 72.17889 27.621487) (xy 71.898967 27.706401) (xy 71.640987 27.844294) (xy 71.414866 28.029866) (xy 71.229294 28.255986) (xy 71.22 28.273374) (xy 71.210706 28.255986) (xy 71.025134 28.029866) (xy 70.799014 27.844294) (xy 70.541034 27.706401) (xy 70.261111 27.621487) (xy 69.97 27.592815) (xy 69.67889 27.621487) (xy 69.398967 27.706401) (xy 69.140987 27.844294) (xy 68.914866 28.029866) (xy 68.729294 28.255986) (xy 68.72 28.273374) (xy 68.710706 28.255986) (xy 68.525134 28.029866) (xy 68.299014 27.844294) (xy 68.041034 27.706401) (xy 67.761111 27.621487) (xy 67.47 27.592815) (xy 67.17889 27.621487) (xy 66.898967 27.706401) (xy 66.640987 27.844294) (xy 66.414866 28.029866) (xy 66.229294 28.255986) (xy 66.091401 28.513966) (xy 66.006487 28.793889) (xy 65.985 29.01205) (xy 59.908072 29.01205) (xy 59.908072 28.485) (xy 59.891008 28.311746) (xy 59.840472 28.14515) (xy 59.758405 27.991614) (xy 59.647962 27.857038) (xy 59.513386 27.746595) (xy 59.35985 27.664528) (xy 59.193254 27.613992) (xy 59.02 27.596928) (xy 57.82 27.596928) (xy 57.646746 27.613992) (xy 57.48015 27.664528) (xy 57.326614 27.746595) (xy 57.192038 27.857038) (xy 57.081595 27.991614) (xy 57.027223 28.093337) (xy 56.975134 28.029866) (xy 56.749014 27.844294) (xy 56.491034 27.706401) (xy 56.211111 27.621487) (xy 55.92 27.592815) (xy 55.62889 27.621487) (xy 55.348967 27.706401) (xy 55.090987 27.844294) (xy 54.864866 28.029866) (xy 54.679294 28.255986) (xy 54.67 28.273374) (xy 54.660706 28.255986) (xy 54.475134 28.029866) (xy 54.249014 27.844294) (xy 53.991034 27.706401) (xy 53.711111 27.621487) (xy 53.42 27.592815) (xy 53.12889 27.621487) (xy 52.848967 27.706401) (xy 52.590987 27.844294) (xy 52.364866 28.029866) (xy 52.179294 28.255986) (xy 52.17 28.273374) (xy 52.160706 28.255986) (xy 51.975134 28.029866) (xy 51.749014 27.844294) (xy 51.491034 27.706401) (xy 51.211111 27.621487) (xy 50.92 27.592815) (xy 50.62889 27.621487) (xy 50.348967 27.706401) (xy 50.090987 27.844294) (xy 49.864866 28.029866) (xy 49.679294 28.255986) (xy 49.67 28.273374) (xy 49.660706 28.255986) (xy 49.475134 28.029866) (xy 49.249014 27.844294) (xy 48.991034 27.706401) (xy 48.711111 27.621487) (xy 48.42 27.592815) (xy 48.12889 27.621487) (xy 47.848967 27.706401) (xy 47.590987 27.844294) (xy 47.364866 28.029866) (xy 47.179294 28.255986) (xy 47.041401 28.513966) (xy 46.956487 28.793889) (xy 46.935 29.01205) (xy 32.187 29.01205) (xy 32.187 28.358758) (xy 32.053073 27.685463) (xy 31.790367 27.051234) (xy 31.408976 26.480442) (xy 30.988534 26.06) (xy 31.971131 26.06) ) ) ) ) ================================================ FILE: electronics/chainlinkDriver/chainlinkDriver.lib ================================================ EESchema-LIBRARY Version 2.4 #encoding utf-8 # # 74HC165_2_74HC165 # DEF 74HC165_2_74HC165 U 0 40 Y Y 1 F N F0 "U" 150 700 50 H V C CNN F1 "74HC165_2_74HC165" 250 600 50 H V C CNN F2 "MODULE" 600 1200 50 H I C CNN F3 "DOCUMENTATION" 750 1100 50 H I C CNN DRAW S 300 550 -300 -550 0 1 0 f X ~LD 1 -600 350 300 R 50 50 1 1 I X SER 10 -600 -400 300 R 50 50 1 1 I X A 11 600 500 300 L 50 50 1 1 I X B 12 600 400 300 L 50 50 1 1 I X C 13 600 300 300 L 50 50 1 1 I X D 14 600 200 300 L 50 50 1 1 I X CLKIN 15 -600 50 300 R 50 50 1 1 I X VCC 16 0 850 300 D 50 50 1 1 W X CLK 2 -600 150 300 R 50 50 1 1 I X E 3 600 100 300 L 50 50 1 1 I X F 4 600 0 300 L 50 50 1 1 I X G 5 600 -100 300 L 50 50 1 1 I X H 6 600 -200 300 L 50 50 1 1 I X ~QH 7 600 -500 300 L 50 50 1 1 O X GND 8 0 -850 300 U 50 50 1 1 W X QH 9 600 -400 300 L 50 50 1 1 O ENDDRAW ENDDEF # # 74xx_74HC244 # DEF 74xx_74HC244 U 0 20 Y Y 1 F N F0 "U" -300 650 50 H V C CNN F1 "74xx_74HC244" -300 -650 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN ALIAS 74HCT244 74AHC244 74AHCT244 $FPLIST TSSOP*4.4x6.5mm*P0.65mm* SSOP*4.4x6.5mm*P0.65mm* $ENDFPLIST DRAW S -300 600 300 -600 1 1 10 f P 4 1 0 6 50 0 -50 50 -50 -50 50 0 N X 1OE 1 -500 -400 200 R 50 50 1 0 I I X GND 10 0 -800 200 U 50 50 1 0 W X 2A3 11 -500 -200 200 R 50 50 1 0 I X 1Y3 12 500 200 200 L 50 50 1 0 T X 2A2 13 -500 -100 200 R 50 50 1 0 I X 1Y2 14 500 300 200 L 50 50 1 0 T X 2A1 15 -500 0 200 R 50 50 1 0 I X 1Y1 16 500 400 200 L 50 50 1 0 T X 2A0 17 -500 100 200 R 50 50 1 0 I X 1Y0 18 500 500 200 L 50 50 1 0 T X 2OE 19 -500 -500 200 R 50 50 1 0 I I X 1A0 2 -500 500 200 R 50 50 1 0 I X VCC 20 0 800 200 D 50 50 1 0 W X 2Y0 3 500 100 200 L 50 50 1 0 T X 1A1 4 -500 400 200 R 50 50 1 0 I X 2Y1 5 500 0 200 L 50 50 1 0 T X 1A2 6 -500 300 200 R 50 50 1 0 I X 2Y2 7 500 -100 200 L 50 50 1 0 T X 1A3 8 -500 200 200 R 50 50 1 0 I X 2Y3 9 500 -200 200 L 50 50 1 0 T ENDDRAW ENDDEF # # 74xx_74HC595 # DEF 74xx_74HC595 U 0 20 Y Y 1 F N F0 "U" -300 550 50 H V C CNN F1 "74xx_74HC595" -300 -650 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN ALIAS 74LS595 74HCT595 $FPLIST DIP*W7.62mm* SOIC*3.9x9.9mm*P1.27mm* TSSOP*4.4x5mm*P0.65mm* SOIC*5.3x10.2mm*P1.27mm* SOIC*7.5x10.3mm*P1.27mm* $ENDFPLIST DRAW S -300 500 300 -600 1 1 10 f X QB 1 400 300 100 L 50 50 1 0 T X ~SRCLR 10 -400 100 100 R 50 50 1 0 I X SRCLK 11 -400 200 100 R 50 50 1 0 I X RCLK 12 -400 -100 100 R 50 50 1 0 I X ~OE 13 -400 -200 100 R 50 50 1 0 I X SER 14 -400 400 100 R 50 50 1 0 I X QA 15 400 400 100 L 50 50 1 0 T X VCC 16 0 600 100 D 50 50 1 0 W X QC 2 400 200 100 L 50 50 1 0 T X QD 3 400 100 100 L 50 50 1 0 T X QE 4 400 0 100 L 50 50 1 0 T X QF 5 400 -100 100 L 50 50 1 0 T X QG 6 400 -200 100 L 50 50 1 0 T X QH 7 400 -300 100 L 50 50 1 0 T X GND 8 0 -700 100 U 50 50 1 0 W X QH' 9 400 -500 100 L 50 50 1 0 O ENDDRAW ENDDEF # # Analog_ADC_INA219BxD # DEF Analog_ADC_INA219BxD U 0 20 Y Y 1 F N F0 "U" -250 350 50 H V C CNN F1 "Analog_ADC_INA219BxD" 200 350 50 H V C CNN F2 "Package_SO:SOIC-8_3.9x4.9mm_P1.27mm" 800 -350 50 H I C CNN F3 "" 350 -100 50 H I C CNN ALIAS INA219BxD $FPLIST SOIC*3.9x4.9mm*P1.27mm* $ENDFPLIST DRAW S -300 300 300 -300 0 1 10 f X A1 1 400 -100 100 L 50 50 1 1 I X A0 2 400 -200 100 L 50 50 1 1 I X SDA 3 400 200 100 L 50 50 1 1 B X SCL 4 400 100 100 L 50 50 1 1 I X VS 5 0 400 100 D 50 50 1 1 W X GND 6 0 -400 100 U 50 50 1 1 W X IN- 7 -400 -100 100 R 50 50 1 1 I X IN+ 8 -400 100 100 R 50 50 1 1 I ENDDRAW ENDDEF # # Connector_Conn_01x05_Male # DEF Connector_Conn_01x05_Male J 0 40 Y N 1 F N F0 "J" 0 300 50 H V C CNN F1 "Connector_Conn_01x05_Male" 0 -300 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST Connector*:*_1x??_* $ENDFPLIST DRAW S 34 -195 0 -205 1 1 6 F S 34 -95 0 -105 1 1 6 F S 34 5 0 -5 1 1 6 F S 34 105 0 95 1 1 6 F S 34 205 0 195 1 1 6 F P 2 1 1 6 50 -200 34 -200 N P 2 1 1 6 50 -100 34 -100 N P 2 1 1 6 50 0 34 0 N P 2 1 1 6 50 100 34 100 N P 2 1 1 6 50 200 34 200 N X Pin_1 1 200 200 150 L 50 50 1 1 P X Pin_2 2 200 100 150 L 50 50 1 1 P X Pin_3 3 200 0 150 L 50 50 1 1 P X Pin_4 4 200 -100 150 L 50 50 1 1 P X Pin_5 5 200 -200 150 L 50 50 1 1 P ENDDRAW ENDDEF # # Connector_Conn_01x12_Male # DEF Connector_Conn_01x12_Male J 0 40 Y N 1 F N F0 "J" 0 600 50 H V C CNN F1 "Connector_Conn_01x12_Male" 0 -700 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST Connector*:*_1x??_* $ENDFPLIST DRAW S 34 -595 0 -605 1 1 6 F S 34 -495 0 -505 1 1 6 F S 34 -395 0 -405 1 1 6 F S 34 -295 0 -305 1 1 6 F S 34 -195 0 -205 1 1 6 F S 34 -95 0 -105 1 1 6 F S 34 5 0 -5 1 1 6 F S 34 105 0 95 1 1 6 F S 34 205 0 195 1 1 6 F S 34 305 0 295 1 1 6 F S 34 405 0 395 1 1 6 F S 34 505 0 495 1 1 6 F P 2 1 1 6 50 -600 34 -600 N P 2 1 1 6 50 -500 34 -500 N P 2 1 1 6 50 -400 34 -400 N P 2 1 1 6 50 -300 34 -300 N P 2 1 1 6 50 -200 34 -200 N P 2 1 1 6 50 -100 34 -100 N P 2 1 1 6 50 0 34 0 N P 2 1 1 6 50 100 34 100 N P 2 1 1 6 50 200 34 200 N P 2 1 1 6 50 300 34 300 N P 2 1 1 6 50 400 34 400 N P 2 1 1 6 50 500 34 500 N X Pin_1 1 200 500 150 L 50 50 1 1 P X Pin_10 10 200 -400 150 L 50 50 1 1 P X Pin_11 11 200 -500 150 L 50 50 1 1 P X Pin_12 12 200 -600 150 L 50 50 1 1 P X Pin_2 2 200 400 150 L 50 50 1 1 P X Pin_3 3 200 300 150 L 50 50 1 1 P X Pin_4 4 200 200 150 L 50 50 1 1 P X Pin_5 5 200 100 150 L 50 50 1 1 P X Pin_6 6 200 0 150 L 50 50 1 1 P X Pin_7 7 200 -100 150 L 50 50 1 1 P X Pin_8 8 200 -200 150 L 50 50 1 1 P X Pin_9 9 200 -300 150 L 50 50 1 1 P ENDDRAW ENDDEF # # Connector_Screw_Terminal_01x02 # DEF Connector_Screw_Terminal_01x02 J 0 40 Y N 1 F N F0 "J" 0 100 50 H V C CNN F1 "Connector_Screw_Terminal_01x02" 0 -200 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST TerminalBlock*:* $ENDFPLIST DRAW C 0 -100 25 1 1 6 N C 0 0 25 1 1 6 N S -50 50 50 -150 1 1 10 f P 2 1 1 6 -21 -87 13 -120 N P 2 1 1 6 -21 13 13 -20 N P 2 1 1 6 -14 -80 20 -113 N P 2 1 1 6 -14 20 20 -13 N X Pin_1 1 -200 0 150 R 50 50 1 1 P X Pin_2 2 -200 -100 150 R 50 50 1 1 P ENDDRAW ENDDEF # # Connector_Screw_Terminal_01x03 # DEF Connector_Screw_Terminal_01x03 J 0 40 Y N 1 F N F0 "J" 0 200 50 H V C CNN F1 "Connector_Screw_Terminal_01x03" 0 -200 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST TerminalBlock*:* $ENDFPLIST DRAW C 0 -100 25 1 1 6 N C 0 0 25 1 1 6 N C 0 100 25 1 1 6 N S -50 150 50 -150 1 1 10 f P 2 1 1 6 -21 -87 13 -120 N P 2 1 1 6 -21 13 13 -20 N P 2 1 1 6 -21 113 13 80 N P 2 1 1 6 -14 -80 20 -113 N P 2 1 1 6 -14 20 20 -13 N P 2 1 1 6 -14 120 20 87 N X Pin_1 1 -200 100 150 R 50 50 1 1 P X Pin_2 2 -200 0 150 R 50 50 1 1 P X Pin_3 3 -200 -100 150 R 50 50 1 1 P ENDDRAW ENDDEF # # Connector_Screw_Terminal_01x06 # DEF Connector_Screw_Terminal_01x06 J 0 40 Y N 1 F N F0 "J" 0 300 50 H V C CNN F1 "Connector_Screw_Terminal_01x06" 0 -400 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST TerminalBlock*:* $ENDFPLIST DRAW C 0 -300 25 1 1 6 N C 0 -200 25 1 1 6 N C 0 -100 25 1 1 6 N C 0 0 25 1 1 6 N C 0 100 25 1 1 6 N C 0 200 25 1 1 6 N S -50 250 50 -350 1 1 10 f P 2 1 1 6 -21 -287 13 -320 N P 2 1 1 6 -21 -187 13 -220 N P 2 1 1 6 -21 -87 13 -120 N P 2 1 1 6 -21 13 13 -20 N P 2 1 1 6 -21 113 13 80 N P 2 1 1 6 -21 213 13 180 N P 2 1 1 6 -14 -280 20 -313 N P 2 1 1 6 -14 -180 20 -213 N P 2 1 1 6 -14 -80 20 -113 N P 2 1 1 6 -14 20 20 -13 N P 2 1 1 6 -14 120 20 87 N P 2 1 1 6 -14 220 20 187 N X Pin_1 1 -200 200 150 R 50 50 1 1 P X Pin_2 2 -200 100 150 R 50 50 1 1 P X Pin_3 3 -200 0 150 R 50 50 1 1 P X Pin_4 4 -200 -100 150 R 50 50 1 1 P X Pin_5 5 -200 -200 150 R 50 50 1 1 P X Pin_6 6 -200 -300 150 R 50 50 1 1 P ENDDRAW ENDDEF # # CustomPower_+12V_Monitored # DEF CustomPower_+12V_Monitored #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -150 50 H I C CNN F1 "CustomPower_+12V_Monitored" 0 140 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 2 0 1 0 -30 50 0 100 N P 2 0 1 0 0 0 0 100 N P 2 0 1 0 0 100 30 50 N X +12V_Monitored 1 0 0 0 U 50 50 1 1 W N ENDDRAW ENDDEF # # CustomPower_IOVCC # DEF CustomPower_IOVCC #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -150 50 H I C CNN F1 "CustomPower_IOVCC" 0 140 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 2 0 1 0 -30 50 0 100 N P 2 0 1 0 0 0 0 100 N P 2 0 1 0 0 100 30 50 N X IOVCC 1 0 0 0 U 50 50 1 1 W N ENDDRAW ENDDEF # # Device_CP_Small # DEF Device_CP_Small C 0 10 N N 1 F N F0 "C" 10 70 50 H V L CNN F1 "Device_CP_Small" 10 -80 50 H V L CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST CP_* $ENDFPLIST DRAW S -60 -12 60 -27 0 1 0 F S -60 27 60 12 0 1 0 N P 2 0 1 0 -50 60 -30 60 N P 2 0 1 0 -40 50 -40 70 N X ~ 1 0 100 73 D 50 50 1 1 P X ~ 2 0 -100 73 U 50 50 1 1 P ENDDRAW ENDDEF # # Device_C_Small # DEF Device_C_Small C 0 10 N N 1 F N F0 "C" 10 70 50 H V L CNN F1 "Device_C_Small" 10 -80 50 H V L CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST C_* $ENDFPLIST DRAW P 2 0 1 13 -60 -20 60 -20 N P 2 0 1 12 -60 20 60 20 N X ~ 1 0 100 80 D 50 50 1 1 P X ~ 2 0 -100 80 U 50 50 1 1 P ENDDRAW ENDDEF # # Device_Jumper_NO_Small # DEF Device_Jumper_NO_Small JP 0 30 N N 1 F N F0 "JP" 0 80 50 H V C CNN F1 "Device_Jumper_NO_Small" 10 -60 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST SolderJumper*Open* $ENDFPLIST DRAW C -40 0 20 0 1 0 N C 40 0 20 0 1 0 N X 1 1 -100 0 40 R 50 50 0 1 P X 2 2 100 0 40 L 50 50 0 1 P ENDDRAW ENDDEF # # Device_R_Small # DEF Device_R_Small R 0 10 N N 1 F N F0 "R" 30 20 50 H V L CNN F1 "Device_R_Small" 30 -40 50 H V L CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST R_* $ENDFPLIST DRAW S -30 70 30 -70 0 1 8 N X ~ 1 0 100 30 D 50 50 1 1 P X ~ 2 0 -100 30 U 50 50 1 1 P ENDDRAW ENDDEF # # ESP32Modules_D1_32 # DEF ESP32Modules_D1_32 U 0 40 Y Y 1 F N F0 "U" 0 1100 50 H V C CNN F1 "ESP32Modules_D1_32" 0 950 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW S -550 1050 550 -1050 0 1 0 f P 2 0 1 0 -600 -850 -550 -850 N P 2 0 1 0 -600 -650 -550 -650 N P 2 0 1 0 -600 -450 -550 -450 N P 2 0 1 0 -600 -250 -550 -250 N P 2 0 1 0 -600 -50 -550 -50 N P 2 0 1 0 -600 150 -550 150 N P 2 0 1 0 -600 350 -550 350 N P 2 0 1 0 -600 550 -550 550 N P 2 0 1 0 -600 750 -550 750 N P 2 0 1 0 -600 950 -550 950 N P 2 0 1 0 600 -850 550 -850 N P 2 0 1 0 600 -650 550 -650 N P 2 0 1 0 600 -450 550 -450 N P 2 0 1 0 600 -250 550 -250 N P 2 0 1 0 600 -50 550 -50 N P 2 0 1 0 600 150 550 150 N P 2 0 1 0 600 350 550 350 N P 2 0 1 0 600 550 550 550 N P 2 0 1 0 600 750 550 750 N P 2 0 1 0 600 950 550 950 N X GND 1 -700 950 100 R 50 50 1 1 P X GPIO19/D6 10 -650 50 100 R 50 50 1 1 P X GPIO34 11 -700 -50 100 R 50 50 1 1 P X GPIO23/D7 12 -650 -150 100 R 50 50 1 1 P X GPIO14 13 -700 -250 100 R 50 50 1 1 P X GPIO5/D8 14 -650 -350 100 R 50 50 1 1 P X ~ 15 -700 -450 100 R 50 50 1 1 N X 3V3/3V3 16 -650 -550 100 R 50 50 1 1 P X GPIO9 17 -700 -650 100 R 50 50 1 1 P X GPIO13 18 -650 -750 100 R 50 50 1 1 P X GPIO11 19 -700 -850 100 R 50 50 1 1 P X RST 2 -650 850 100 R 50 50 1 1 P X GPIO10 20 -650 -950 100 R 50 50 1 1 P X GND 21 700 950 100 L 50 50 1 1 P X GPIO1/TX 22 650 850 100 L 50 50 1 1 P X GPIO27 23 700 750 100 L 50 50 1 1 P X GPIO3/RX 24 650 650 100 L 50 50 1 1 P X GPIO25 25 700 550 100 L 50 50 1 1 P X GPIO22/D1 26 650 450 100 L 50 50 1 1 P X GPIO32 27 700 350 100 L 50 50 1 1 P X GPIO21/D2 28 650 250 100 L 50 50 1 1 P X GPIO12 29 700 150 100 L 50 50 1 1 P X ~ 3 -700 750 100 R 50 50 1 1 N X GPIO17/D3 30 650 50 100 L 50 50 1 1 P X GPIO4 31 700 -50 100 L 50 50 1 1 P X GPIO16/D4 32 650 -150 100 L 50 50 1 1 P X GPIO0 33 700 -250 100 L 50 50 1 1 P X GND/GND 34 650 -350 100 L 50 50 1 1 P X GPIO2 35 700 -450 100 L 50 50 1 1 P X 5V/5V 36 650 -550 100 L 50 50 1 1 P X GPIO8 37 700 -650 100 L 50 50 1 1 P X GPIO15 38 650 -750 100 L 50 50 1 1 P X GPIO6 39 700 -850 100 L 50 50 1 1 P X GPIO36/A0 4 -650 650 100 R 50 50 1 1 P X GPIO7 40 650 -950 100 L 50 50 1 1 P X GPIO39 5 -700 550 100 R 50 50 1 1 P X GPIO26/D0 6 -650 450 100 R 50 50 1 1 P X GPIO35 7 -700 350 100 R 50 50 1 1 P X GPIO18/D5 8 -650 250 100 R 50 50 1 1 P X GPIO33 9 -700 150 100 R 50 50 1 1 P ENDDRAW ENDDEF # # ESP32Modules_TTGO_TDisplay # DEF ESP32Modules_TTGO_TDisplay U 0 40 Y Y 1 F N F0 "U" -200 750 50 H V C CNN F1 "ESP32Modules_TTGO_TDisplay" 0 650 50 H V C CNN F2 "" -200 50 50 H I C CNN F3 "" -200 50 50 H I C CNN DRAW C -60 -310 0 0 1 0 N C -60 -110 0 0 1 0 N S -400 700 400 -700 0 1 0 f P 2 0 1 0 -60 -290 -60 -300 N P 2 0 1 0 -60 -90 -60 -100 N P 4 0 1 0 -60 -270 -90 -320 -30 -320 -60 -270 N P 4 0 1 0 -60 -70 -90 -120 -30 -120 -60 -70 N P 4 0 1 0 370 100 400 130 400 70 370 100 F P 4 0 1 0 370 200 400 230 400 170 370 200 F P 4 0 1 0 370 300 400 330 400 270 370 300 F P 4 0 1 0 370 400 400 430 400 370 370 400 F X GND 1 -500 500 100 R 50 50 1 1 P X GND 10 -500 -400 100 R 50 50 1 1 P X GND 11 -500 -500 100 R 50 50 1 1 P X 3V3 12 -500 -600 100 R 50 50 1 1 P X 5V 13 500 -600 100 L 50 50 1 1 P X GND 14 500 -500 100 L 50 50 1 1 P X GPIO27 15 500 -400 100 L 50 50 1 1 P X GPIO26 16 500 -300 100 L 50 50 1 1 P X GPIO25 17 500 -200 100 L 50 50 1 1 P X GPIO33 18 500 -100 100 L 50 50 1 1 P X GPIO32 19 500 0 100 L 50 50 1 1 P X GND 2 -500 400 100 R 50 50 1 1 P X GPIO39 20 500 100 100 L 50 50 1 1 P X GPIO38 21 500 200 100 L 50 50 1 1 P X GPIO37 22 500 300 100 L 50 50 1 1 P X GPIO36 23 500 400 100 L 50 50 1 1 P X 3V3 24 500 500 100 L 50 50 1 1 P X GPIO21 3 -500 300 100 R 50 50 1 1 P X GPIO22 4 -500 200 100 R 50 50 1 1 P X GPIO17 5 -500 100 100 R 50 50 1 1 P X GPIO2 6 -500 0 100 R 50 50 1 1 P X GPIO15 7 -500 -100 100 R 50 50 1 1 P X GPIO13 8 -500 -200 100 R 50 50 1 1 P X GPIO12 9 -500 -300 100 R 50 50 1 1 P ENDDRAW ENDDEF # # INA219_Breakout_INA219_Breakout # DEF INA219_Breakout_INA219_Breakout U 0 40 Y Y 1 F N F0 "U" -150 400 50 H V C CNN F1 "INA219_Breakout_INA219_Breakout" 150 0 50 V V C CNN F2 "" -300 50 50 H I C CNN F3 "" -300 50 50 H I C CNN DRAW S -200 350 200 -350 0 1 0 f X VCC 1 -300 250 100 R 50 50 1 1 P X GND 2 -300 150 100 R 50 50 1 1 P X SCL 3 -300 50 100 R 50 50 1 1 P X SDA 4 -300 -50 100 R 50 50 1 1 P X VIN- 5 -300 -150 100 R 50 50 1 1 P X VIN+ 6 -300 -250 100 R 50 50 1 1 w ENDDRAW ENDDEF # # Interface_UART_MAX485E # DEF Interface_UART_MAX485E U 0 20 Y Y 1 F N F0 "U" -240 450 50 H V C CNN F1 "Interface_UART_MAX485E" 30 450 50 H V L CNN F2 "" 0 -700 50 H I C CNN F3 "" 0 50 50 H I C CNN ALIAS MAX483E MAX485E MAX487E MAX1487E MAX3485 MAX3483 MAX3486 $FPLIST DIP*W7.62mm* SOIC*3.9x4.9mm*P1.27mm* $ENDFPLIST DRAW C -12 -145 14 0 1 10 F C -1 59 14 0 1 10 F C 65 75 14 0 1 10 F S -300 400 300 -500 0 1 10 f S 50 125 50 125 0 1 0 N P 2 0 1 10 -160 -200 -75 -200 N P 2 0 1 10 -160 100 -50 100 N P 2 0 1 10 -50 -126 -50 -136 N P 2 0 1 10 -25 -200 210 -200 N P 3 0 1 10 -160 -100 -50 -100 -50 -125 N P 3 0 1 10 0 50 0 0 -160 0 N P 3 0 1 10 50 125 150 125 150 -200 N P 3 0 1 10 100 75 100 -150 0 -150 N P 4 0 1 10 -75 -125 -75 -225 25 -175 -75 -125 N P 4 0 1 10 -50 100 50 150 50 50 -50 100 N P 4 0 1 10 75 75 175 75 175 100 210 100 N X RO 1 -400 100 100 R 50 50 1 1 O X ~RE 2 -400 0 100 R 50 50 1 1 I X DE 3 -400 -100 100 R 50 50 1 1 I X DI 4 -400 -200 100 R 50 50 1 1 I X GND 5 0 -600 100 U 50 50 1 1 W X A 6 400 -200 100 L 50 50 1 1 B X B 7 400 100 100 L 50 50 1 1 B X VCC 8 0 500 100 D 50 50 1 1 W ENDDRAW ENDDEF # # Jumper_SolderJumper_2_Open # DEF Jumper_SolderJumper_2_Open JP 0 0 Y N 1 F N F0 "JP" 0 80 50 H V C CNN F1 "Jumper_SolderJumper_2_Open" 0 -100 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST SolderJumper*Open* $ENDFPLIST DRAW A -10 0 40 901 -901 0 1 0 N -10 40 -10 -40 A -10 0 40 901 -901 0 1 0 F -10 40 -10 -40 A 10 0 40 -899 899 0 1 0 N 10 -40 10 40 A 10 0 40 -899 899 0 1 0 F 10 -40 10 40 P 2 0 1 0 -10 40 -10 -40 N P 2 0 1 0 10 40 10 -40 N X A 1 -150 0 100 R 50 50 1 1 P X B 2 150 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # LCD_ST7789_240x240 # DEF LCD_ST7789_240x240 U 0 40 Y Y 1 F N F0 "U" 0 450 50 H V C CNN F1 "LCD_ST7789_240x240" 50 350 50 H V C CNN F2 "" -150 0 50 H I C CNN F3 "" -150 0 50 H I C CNN DRAW S -300 400 300 -350 0 1 0 f X BLK BLK -600 300 300 R 50 50 1 1 P X DC DC -600 200 300 R 50 50 1 1 P X GND GND -600 -300 300 R 50 50 1 1 P X RES RES -600 100 300 R 50 50 1 1 P X SCL(CLK) SCL -600 -100 300 R 50 50 1 1 P X SDA_(MOSI) SDA -600 0 300 R 50 50 1 1 P X VCC VCC -600 -200 300 R 50 50 1 1 P ENDDRAW ENDDEF # # LCD_ST7789_80x160 # DEF LCD_ST7789_80x160 U 0 40 Y Y 1 F N F0 "U" 0 500 50 H V C CNN F1 "LCD_ST7789_80x160" 50 400 50 H V C CNN F2 "" -150 50 50 H I C CNN F3 "" -150 50 50 H I C CNN DRAW S -300 450 300 -450 0 1 0 f X BLK BLK -600 350 300 R 50 50 1 1 P X CS CS -600 250 300 R 50 50 1 1 P X DC DC -600 150 300 R 50 50 1 1 P X GND GND -600 -350 300 R 50 50 1 1 P X RES RES -600 50 300 R 50 50 1 1 P X SCL(CLK) SCL -600 -150 300 R 50 50 1 1 P X SDA_(MOSI) SDA -600 -50 300 R 50 50 1 1 P X VCC VCC -600 -250 300 R 50 50 1 1 P ENDDRAW ENDDEF # # LevelShifterModule_LevelShifterModule # DEF LevelShifterModule_LevelShifterModule U 0 40 Y Y 1 F N F0 "U" 0 350 50 H V C CNN F1 "LevelShifterModule_LevelShifterModule" 0 400 50 H V C CNN F2 "" -150 50 50 H I C CNN F3 "" -150 50 50 H I C CNN DRAW S -250 300 250 -300 0 0 0 f X LV1 1 -350 250 100 R 50 50 1 1 B X HV 10 350 50 100 L 50 50 1 1 W X HV2 11 350 150 100 L 50 50 1 1 B X HV1 12 350 250 100 L 50 50 1 1 B X LV2 2 -350 150 100 R 50 50 1 1 B X LV 3 -350 50 100 R 50 50 1 1 W X GND 4 -350 -50 100 R 50 50 1 1 W X LV3 5 -350 -150 100 R 50 50 1 1 B X LV4 6 -350 -250 100 R 50 50 1 1 B X HV4 7 350 -250 100 L 50 50 1 1 B X HV3 8 350 -150 100 L 50 50 1 1 B X GND 9 350 -50 100 L 50 50 1 1 W ENDDRAW ENDDEF # # Mechanical_MountingHole # DEF Mechanical_MountingHole H 0 40 Y Y 1 F N F0 "H" 0 200 50 H V C CNN F1 "Mechanical_MountingHole" 0 125 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST MountingHole* $ENDFPLIST DRAW C 0 0 50 0 1 50 N ENDDRAW ENDDEF # # Mega2560Shield_Mega2560Shield # DEF Mega2560Shield_Mega2560Shield U 0 40 Y Y 1 F N F0 "U" 550 50 50 H V C CNN F1 "Mega2560Shield_Mega2560Shield" 350 -100 50 H V C CNN F2 "" -900 100 50 H I C CNN F3 "" -900 100 50 H I C CNN DRAW S 0 0 1100 -9000 0 1 0 f X 3V3 3V3 1200 -300 100 L 50 50 1 1 P X 5V 5V 1200 -400 100 L 50 50 1 1 P X A0 A0 1200 -7400 100 L 50 50 1 1 P X A1 A1 1200 -7500 100 L 50 50 1 1 P X A10 A10 1200 -8400 100 L 50 50 1 1 P X A11 A11 1200 -8500 100 L 50 50 1 1 P X A12 A12 1200 -8600 100 L 50 50 1 1 P X A13 A13 1200 -8700 100 L 50 50 1 1 P X A14 A14 1200 -8800 100 L 50 50 1 1 P X A15 A15 1200 -8900 100 L 50 50 1 1 P X A2 A2 1200 -7600 100 L 50 50 1 1 P X A3 A3 1200 -7700 100 L 50 50 1 1 P X A4 A4 1200 -7800 100 L 50 50 1 1 P X A5 A5 1200 -7900 100 L 50 50 1 1 P X A6 A6 1200 -8000 100 L 50 50 1 1 P X A7 A7 1200 -8100 100 L 50 50 1 1 P X A8 A8 1200 -8200 100 L 50 50 1 1 P X A9 A9 1200 -8300 100 L 50 50 1 1 P X AREF AREF 1200 -1000 100 L 50 50 1 1 P X D0 D0 1200 -1900 100 L 50 50 1 1 P X D1 D1 1200 -2000 100 L 50 50 1 1 P X D10 D10 1200 -2900 100 L 50 50 1 1 P X D11 D11 1200 -3000 100 L 50 50 1 1 P X D12 D12 1200 -3100 100 L 50 50 1 1 P X D13 D13 1200 -3200 100 L 50 50 1 1 P X D14 D14 1200 -3300 100 L 50 50 1 1 P X D15 D15 1200 -3400 100 L 50 50 1 1 P X D16 D16 1200 -3500 100 L 50 50 1 1 P X D17 D17 1200 -3600 100 L 50 50 1 1 P X D18 D18 1200 -3700 100 L 50 50 1 1 P X D19 D19 1200 -3800 100 L 50 50 1 1 P X D2 D2 1200 -2100 100 L 50 50 1 1 P X D20 D20 1200 -3900 100 L 50 50 1 1 P X D21 D21 1200 -4000 100 L 50 50 1 1 P X D22 D22 1200 -4100 100 L 50 50 1 1 P X D23 D23 1200 -4200 100 L 50 50 1 1 P X D24 D24 1200 -4300 100 L 50 50 1 1 P X D25 D25 1200 -4400 100 L 50 50 1 1 P X D26 D26 1200 -4500 100 L 50 50 1 1 P X D27 D27 1200 -4600 100 L 50 50 1 1 P X D28 D28 1200 -4700 100 L 50 50 1 1 P X D29 D29 1200 -4800 100 L 50 50 1 1 P X D3 D3 1200 -2200 100 L 50 50 1 1 P X D30 D30 1200 -4900 100 L 50 50 1 1 P X D31 D31 1200 -5000 100 L 50 50 1 1 P X D32 D32 1200 -5100 100 L 50 50 1 1 P X D33 D33 1200 -5200 100 L 50 50 1 1 P X D34 D34 1200 -5300 100 L 50 50 1 1 P X D35 D35 1200 -5400 100 L 50 50 1 1 P X D36 D36 1200 -5500 100 L 50 50 1 1 P X D37 D37 1200 -5600 100 L 50 50 1 1 P X D38 D38 1200 -5700 100 L 50 50 1 1 P X D39 D39 1200 -5800 100 L 50 50 1 1 P X D4 D4 1200 -2300 100 L 50 50 1 1 P X D40 D40 1200 -5900 100 L 50 50 1 1 P X D41 D41 1200 -6000 100 L 50 50 1 1 P X D42 D42 1200 -6100 100 L 50 50 1 1 P X D43 D43 1200 -6200 100 L 50 50 1 1 P X D44 D44 1200 -6300 100 L 50 50 1 1 P X D45 D45 1200 -6400 100 L 50 50 1 1 P X D46 D46 1200 -6500 100 L 50 50 1 1 P X D47 D47 1200 -6600 100 L 50 50 1 1 P X D48 D48 1200 -6700 100 L 50 50 1 1 P X D49 D49 1200 -6800 100 L 50 50 1 1 P X D5 D5 1200 -2400 100 L 50 50 1 1 P X D50 D50 1200 -6900 100 L 50 50 1 1 P X D51 D51 1200 -7000 100 L 50 50 1 1 P X D52 D52 1200 -7100 100 L 50 50 1 1 P X D53 D53 1200 -7200 100 L 50 50 1 1 P X D6 D6 1200 -2500 100 L 50 50 1 1 P X D7 D7 1200 -2600 100 L 50 50 1 1 P X D8 D8 1200 -2700 100 L 50 50 1 1 P X D9 D9 1200 -2800 100 L 50 50 1 1 P X GND GND 1200 -500 100 L 50 50 1 1 P X ICSP_5V ICSP_5V 1200 -1300 100 L 50 50 1 1 P X ICSP_GND ICSP_GND 1200 -1700 100 L 50 50 1 1 P X ICSP_MISO ICSP_MISO 1200 -1200 100 L 50 50 1 1 P X ICSP_MOSI ICSP_MOSI 1200 -1500 100 L 50 50 1 1 P X ICSP_RESET ICSP_RESET 1200 -1600 100 L 50 50 1 1 P X ICSP_SCK ICSP_SCK 1200 -1400 100 L 50 50 1 1 P X IOREF IOREF 1200 -800 100 L 50 50 1 1 P X NC NC 1200 -100 100 L 50 50 1 1 P X RESET RESET 1200 -900 100 L 50 50 1 1 P X VIN VIN 1200 -600 100 L 50 50 1 1 P ENDDRAW ENDDEF # # RS485Module_RS485Module # DEF RS485Module_RS485Module U 0 40 Y Y 1 F N F0 "U" 0 300 50 H V C CNN F1 "RS485Module_RS485Module" 0 350 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C 150 -100 50 0 1 0 N C 150 100 50 0 1 0 N S -450 250 450 -250 0 1 0 f S 50 200 250 -200 0 1 0 N P 2 0 1 0 100 -100 200 -100 N P 2 0 1 0 100 100 200 100 N P 2 0 1 0 150 -50 150 -150 N P 2 0 1 0 150 150 150 50 N X A A 550 -50 100 L 50 50 1 1 B X B B 550 50 100 L 50 50 1 1 B X DE DE -550 -50 100 R 50 50 1 1 I X DI DI -550 -150 100 R 50 50 1 1 I X GND GND 550 -150 100 L 50 50 1 1 W X RE RE -550 50 100 R 50 50 1 1 I X RO RO -550 150 100 R 50 50 1 1 O X VCC VCC 550 150 100 L 50 50 1 1 W ENDDRAW ENDDEF # # Transistor_Array_ULN2003A # DEF Transistor_Array_ULN2003A U 0 20 Y Y 1 F N F0 "U" 0 625 50 H V C CNN F1 "Transistor_Array_ULN2003A" 0 550 50 H V C CNN F2 "" 50 -550 50 H I L CNN F3 "" 100 -200 50 H I C CNN ALIAS ULN2003A ULN2002 ULN2002A ULN2004 ULN2004A $FPLIST DIP*W7.62mm* SOIC*3.9x9.9mm*P1.27mm* SSOP*4.4x5.2mm*P0.65mm* TSSOP*4.4x5mm*P0.65mm* SOIC*W*5.3x10.2mm*P1.27mm* $ENDFPLIST DRAW C -70 200 10 0 1 0 N C -50 -90 10 0 1 0 F C -50 0 10 0 1 0 F C -50 100 10 0 1 0 F C -20 200 10 0 1 0 F S -300 -500 300 500 0 1 10 f P 2 0 1 0 -180 200 -140 200 N P 2 0 1 0 -60 200 160 200 N P 2 0 1 0 0 265 -40 265 N P 3 0 1 0 -20 200 -20 400 115 400 N P 4 0 1 0 -140 240 -140 160 -80 200 -140 240 N P 4 0 1 0 0 235 -40 235 -20 265 0 235 N X I1 1 -400 200 100 R 50 50 1 1 I X O7 10 400 -400 100 L 50 50 1 1 C X O6 11 400 -300 100 L 50 50 1 1 C X O5 12 400 -200 100 L 50 50 1 1 C X O4 13 400 -100 100 L 50 50 1 1 C X O3 14 400 0 100 L 50 50 1 1 C X O2 15 400 100 100 L 50 50 1 1 C X O1 16 400 200 100 L 50 50 1 1 C X I2 2 -400 100 100 R 50 50 1 1 I X I3 3 -400 0 100 R 50 50 1 1 I X I4 4 -400 -100 100 R 50 50 1 1 I X I5 5 -400 -200 100 R 50 50 1 1 I X I6 6 -400 -300 100 R 50 50 1 1 I X I7 7 -400 -400 100 R 50 50 1 1 I X GND 8 0 -600 100 U 50 50 1 1 W X COM 9 400 400 100 L 50 50 1 1 P ENDDRAW ENDDEF # # Transistor_FET_BSS138 # DEF Transistor_FET_BSS138 Q 0 20 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "Transistor_FET_BSS138" 200 0 50 H V L CNN F2 "Package_TO_SOT_SMD:SOT-23" 200 -75 50 H I L CIN F3 "" 0 0 50 H I L CNN ALIAS 2N7002 2N7002E 2N7002H 2N7002K BS170F BS870 BSN20 BSS123 BSS127S DMG2302U DMG3402L DMG3404L DMG3406L DMG3414U DMG3418L DMN10H220L DMN10H700S DMN13H750S DMN2041L DMN2050L DMN2056U DMN2058U DMN2075U DMN2230U DMN24H11DS DMN24H3D5L DMN3042L DMN3051L DMN30H4D0L DMN3110S DMN3150L DMN3300U DMN3404L DMN6075S DMN6140L DMN67D7L DMN67D8L MMBF170 VN10LF ZVN3306F ZVN3310F ZVN3320F ZVN4106F ZXM61N02F ZXM61N03F ZXMN10A07F ZXMN2A01F ZXMN2A14F ZXMN2B01F ZXMN2B14FH ZXMN2F30FH ZXMN2F34FH ZXMN3A01F ZXMN3A14F ZXMN3B01F ZXMN3B14F ZXMN3F30FH ZXMN6A07F IRLML0030 IRLML2060 $FPLIST SOT?23* $ENDFPLIST DRAW C 65 0 110 0 1 10 N C 100 -70 10 0 1 0 F C 100 70 10 0 1 0 F P 2 0 1 0 10 0 -100 0 N P 2 0 1 10 10 75 10 -75 N P 2 0 1 10 30 -50 30 -90 N P 2 0 1 10 30 20 30 -20 N P 2 0 1 10 30 90 30 50 N P 2 0 1 0 100 100 100 70 N P 3 0 1 0 100 -100 100 0 30 0 N P 4 0 1 0 30 -70 130 -70 130 70 30 70 N P 4 0 1 0 40 0 80 15 80 -15 40 0 F P 4 0 1 0 110 20 115 15 145 15 150 10 N P 4 0 1 0 130 15 115 -10 145 -10 130 15 N X G 1 -200 0 100 R 50 50 1 1 I X S 2 100 -200 100 U 50 50 1 1 P X D 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # ULN2003AModule_ULN2003AModule # DEF ULN2003AModule_ULN2003AModule U 0 40 Y Y 1 F N F0 "U" 100 50 50 H V C CNN F1 "ULN2003AModule_ULN2003AModule" 250 -400 50 V V C CNN F2 "" 200 -250 50 H I C CNN F3 "" 200 -250 50 H I C CNN DRAW S 0 0 800 -800 0 1 0 f X EN_JMP1 EN_JMP1 900 -100 100 L 50 50 1 1 P X EN_JMP2 EN_JMP2 900 -200 100 L 50 50 1 1 P X GND GND 350 -900 100 U 50 50 1 1 P X IN1 IN1 -100 -100 100 R 50 50 1 1 P X IN2 IN2 -100 -200 100 R 50 50 1 1 P X IN3 IN3 -100 -300 100 R 50 50 1 1 P X IN4 IN4 -100 -400 100 R 50 50 1 1 P X IN5 IN5 -100 -500 100 R 50 50 1 1 P X IN6 IN6 -100 -600 100 R 50 50 1 1 P X IN7 IN7 -100 -700 100 R 50 50 1 1 P X VCC VCC 350 100 100 D 50 50 1 1 P ENDDRAW ENDDEF # # oled_SSD1306_I2C # DEF oled_SSD1306_I2C U 0 40 Y Y 1 F N F0 "U" 0 300 50 H V C CNN F1 "oled_SSD1306_I2C" 100 0 50 V V C CNN F2 "" -250 -300 50 H I C CNN F3 "" -250 -300 50 H I C CNN DRAW S -150 250 150 -250 0 1 0 f X SDA 1 -250 150 100 R 50 50 1 1 P X SCL 2 -250 50 100 R 50 50 1 1 P X VCC 3 -250 -50 100 R 50 50 1 1 P X GND 4 -250 -150 100 R 50 50 1 1 P ENDDRAW ENDDEF # # power_+12V # DEF power_+12V #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -150 50 H I C CNN F1 "power_+12V" 0 140 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 2 0 1 0 -30 50 0 100 N P 2 0 1 0 0 0 0 100 N P 2 0 1 0 0 100 30 50 N X +12V 1 0 0 0 U 50 50 1 1 W N ENDDRAW ENDDEF # # power_+5V # DEF power_+5V #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -150 50 H I C CNN F1 "power_+5V" 0 140 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 2 0 1 0 -30 50 0 100 N P 2 0 1 0 0 0 0 100 N P 2 0 1 0 0 100 30 50 N X +5V 1 0 0 0 U 50 50 1 1 W N ENDDRAW ENDDEF # # power_GND # DEF power_GND #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -250 50 H I C CNN F1 "power_GND" 0 -150 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 6 0 1 0 0 0 0 -50 50 -50 0 -100 -50 -50 0 -50 N X GND 1 0 0 0 D 50 50 1 1 W N ENDDRAW ENDDEF # # power_PWR_FLAG # DEF power_PWR_FLAG #FLG 0 0 N N 1 F P F0 "#FLG" 0 75 50 H I C CNN F1 "power_PWR_FLAG" 0 150 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 6 0 1 0 0 0 0 50 -40 75 0 100 40 75 0 50 N X pwr 1 0 0 0 U 50 50 0 0 w ENDDRAW ENDDEF # #End Library ================================================ FILE: electronics/chainlinkDriver/chainlinkDriver.pro ================================================ update=Wed 03 Feb 2021 05:28:49 PM PST version=1 last_client=kicad [general] version=1 RootSch= BoardNm= [cvpcb] version=1 NetIExt=net [eeschema] version=1 LibDir= [eeschema/libraries] [pcbnew] version=1 PageLayoutDescrFile= LastNetListRead= CopperLayerCount=2 BoardThickness=1.6 AllowMicroVias=0 AllowBlindVias=0 RequireCourtyardDefinitions=0 ProhibitOverlappingCourtyards=1 MinTrackWidth=0.127 MinViaDiameter=0.45 MinViaDrill=0.2 MinMicroViaDiameter=0.2 MinMicroViaDrill=0.09999999999999999 MinHoleToHole=0.25 TrackWidth1=0.2 TrackWidth2=0.15 TrackWidth3=0.35 TrackWidth4=0.55 TrackWidth5=2 ViaDiameter1=0.5 ViaDrill1=0.3 dPairWidth1=0.2 dPairGap1=0.25 dPairViaGap1=0.25 SilkLineWidth=0.12 SilkTextSizeV=1 SilkTextSizeH=1 SilkTextSizeThickness=0.15 SilkTextItalic=0 SilkTextUpright=1 CopperLineWidth=0.2 CopperTextSizeV=1.5 CopperTextSizeH=1.5 CopperTextThickness=0.3 CopperTextItalic=0 CopperTextUpright=1 EdgeCutLineWidth=0.05 CourtyardLineWidth=0.05 OthersLineWidth=0.15 OthersTextSizeV=1 OthersTextSizeH=1 OthersTextSizeThickness=0.15 OthersTextItalic=0 OthersTextUpright=1 SolderMaskClearance=0 SolderMaskMinWidth=0 SolderPasteClearance=0 SolderPasteRatio=-0 [pcbnew/Layer.F.Cu] Name=F.Cu Type=0 Enabled=1 [pcbnew/Layer.In1.Cu] Name=In1.Cu Type=0 Enabled=0 [pcbnew/Layer.In2.Cu] Name=In2.Cu Type=0 Enabled=0 [pcbnew/Layer.In3.Cu] Name=In3.Cu Type=0 Enabled=0 [pcbnew/Layer.In4.Cu] Name=In4.Cu Type=0 Enabled=0 [pcbnew/Layer.In5.Cu] Name=In5.Cu Type=0 Enabled=0 [pcbnew/Layer.In6.Cu] Name=In6.Cu Type=0 Enabled=0 [pcbnew/Layer.In7.Cu] Name=In7.Cu Type=0 Enabled=0 [pcbnew/Layer.In8.Cu] Name=In8.Cu Type=0 Enabled=0 [pcbnew/Layer.In9.Cu] Name=In9.Cu Type=0 Enabled=0 [pcbnew/Layer.In10.Cu] Name=In10.Cu Type=0 Enabled=0 [pcbnew/Layer.In11.Cu] Name=In11.Cu Type=0 Enabled=0 [pcbnew/Layer.In12.Cu] Name=In12.Cu Type=0 Enabled=0 [pcbnew/Layer.In13.Cu] Name=In13.Cu Type=0 Enabled=0 [pcbnew/Layer.In14.Cu] Name=In14.Cu Type=0 Enabled=0 [pcbnew/Layer.In15.Cu] Name=In15.Cu Type=0 Enabled=0 [pcbnew/Layer.In16.Cu] Name=In16.Cu Type=0 Enabled=0 [pcbnew/Layer.In17.Cu] Name=In17.Cu Type=0 Enabled=0 [pcbnew/Layer.In18.Cu] Name=In18.Cu Type=0 Enabled=0 [pcbnew/Layer.In19.Cu] Name=In19.Cu Type=0 Enabled=0 [pcbnew/Layer.In20.Cu] Name=In20.Cu Type=0 Enabled=0 [pcbnew/Layer.In21.Cu] Name=In21.Cu Type=0 Enabled=0 [pcbnew/Layer.In22.Cu] Name=In22.Cu Type=0 Enabled=0 [pcbnew/Layer.In23.Cu] Name=In23.Cu Type=0 Enabled=0 [pcbnew/Layer.In24.Cu] Name=In24.Cu Type=0 Enabled=0 [pcbnew/Layer.In25.Cu] Name=In25.Cu Type=0 Enabled=0 [pcbnew/Layer.In26.Cu] Name=In26.Cu Type=0 Enabled=0 [pcbnew/Layer.In27.Cu] Name=In27.Cu Type=0 Enabled=0 [pcbnew/Layer.In28.Cu] Name=In28.Cu Type=0 Enabled=0 [pcbnew/Layer.In29.Cu] Name=In29.Cu Type=0 Enabled=0 [pcbnew/Layer.In30.Cu] Name=In30.Cu Type=0 Enabled=0 [pcbnew/Layer.B.Cu] Name=B.Cu Type=0 Enabled=1 [pcbnew/Layer.B.Adhes] Enabled=1 [pcbnew/Layer.F.Adhes] Enabled=1 [pcbnew/Layer.B.Paste] Enabled=1 [pcbnew/Layer.F.Paste] Enabled=1 [pcbnew/Layer.B.SilkS] Enabled=1 [pcbnew/Layer.F.SilkS] Enabled=1 [pcbnew/Layer.B.Mask] Enabled=1 [pcbnew/Layer.F.Mask] Enabled=1 [pcbnew/Layer.Dwgs.User] Enabled=1 [pcbnew/Layer.Cmts.User] Enabled=1 [pcbnew/Layer.Eco1.User] Enabled=1 [pcbnew/Layer.Eco2.User] Enabled=1 [pcbnew/Layer.Edge.Cuts] Enabled=1 [pcbnew/Layer.Margin] Enabled=1 [pcbnew/Layer.B.CrtYd] Enabled=1 [pcbnew/Layer.F.CrtYd] Enabled=1 [pcbnew/Layer.B.Fab] Enabled=1 [pcbnew/Layer.F.Fab] Enabled=1 [pcbnew/Layer.Rescue] Enabled=0 [pcbnew/Netclasses] [pcbnew/Netclasses/Default] Name=Default Clearance=0.15 TrackWidth=0.2 ViaDiameter=0.5 ViaDrill=0.3 uViaDiameter=0.3 uViaDrill=0.1 dPairWidth=0.2 dPairGap=0.25 dPairViaGap=0.25 [pcbnew/Netclasses/1] Name=save Clearance=0.2 TrackWidth=0.25 ViaDiameter=0.8 ViaDrill=0.4 uViaDiameter=0.3 uViaDrill=0.1 dPairWidth=0.2 dPairGap=0.25 dPairViaGap=0.25 [schematic_editor] version=1 PageLayoutDescrFile= PlotDirectoryName=./ SubpartIdSeparator=0 SubpartFirstId=65 NetFmtName=Pcbnew SpiceAjustPassiveValues=0 LabSize=50 ERC_TestSimilarLabels=1 ================================================ FILE: electronics/chainlinkDriver/chainlinkDriver.sch ================================================ EESchema Schematic File Version 4 EELAYER 30 0 EELAYER END $Descr USLedger 17000 11000 encoding utf-8 Sheet 1 1 Title "" Date "" Rev "" Comp "" Comment1 "" Comment2 "" Comment3 "" Comment4 "" $EndDescr $Comp L 74xx:74HC595 U1 U 1 1 5F42721A P 2200 9000 F 0 "U1" H 2350 9650 50 0000 C CNN F 1 "74HC595" H 2450 9550 50 0000 C CNN F 2 "ModifiedSymbols:SOIC-16_3.9x9.9mm_P1.27mm_silk" H 2200 9000 50 0001 C CNN F 3 "http://www.ti.com/lit/ds/symlink/sn74hc595.pdf" H 2200 9000 50 0001 C CNN F 4 "C5947" H 2200 9000 50 0001 C CNN "LCSC" F 5 "0;0;-90" H 2200 9000 50 0001 C CNN "JLCPCB_CORRECTION" 1 2200 9000 1 0 0 -1 $EndComp Wire Wire Line 2200 8350 2200 8400 Text Label 3450 8600 2 50 ~ 0 MOTOR_A_PHASE_A Text Label 3450 8700 2 50 ~ 0 MOTOR_A_PHASE_B Text Label 3450 8800 2 50 ~ 0 MOTOR_A_PHASE_C Text Label 3450 8900 2 50 ~ 0 MOTOR_A_PHASE_D Text Label 3450 9000 2 50 ~ 0 MOTOR_B_PHASE_A Text Label 3450 9100 2 50 ~ 0 MOTOR_B_PHASE_B Text Label 3450 9200 2 50 ~ 0 MOTOR_B_PHASE_C Text Label 3450 9300 2 50 ~ 0 MOTOR_B_PHASE_D Wire Wire Line 1800 8800 1150 8800 Text Label 950 8600 0 50 ~ 0 MOTOR_IN Text Label 1150 8800 0 50 ~ 0 CLOCK_IN Wire Wire Line 1800 8900 1750 8900 Wire Wire Line 1750 8900 1750 8400 Wire Wire Line 1750 8400 2200 8400 Connection ~ 2200 8400 Wire Wire Line 1800 9100 1150 9100 Text Label 1150 9100 0 50 ~ 0 LATCH_IN $Comp L power:GND #PWR08 U 1 1 5F49587F P 2200 9750 F 0 "#PWR08" H 2200 9500 50 0001 C CNN F 1 "GND" H 2205 9577 50 0000 C CNN F 2 "" H 2200 9750 50 0001 C CNN F 3 "" H 2200 9750 50 0001 C CNN 1 2200 9750 1 0 0 -1 $EndComp Wire Wire Line 2200 9750 2200 9700 $Comp L 74xx:74HC595 U5 U 1 1 5F4A62A3 P 4650 9000 F 0 "U5" H 4800 9650 50 0000 C CNN F 1 "74HC595" H 4900 9550 50 0000 C CNN F 2 "ModifiedSymbols:SOIC-16_3.9x9.9mm_P1.27mm_silk" H 4650 9000 50 0001 C CNN F 3 "http://www.ti.com/lit/ds/symlink/sn74hc595.pdf" H 4650 9000 50 0001 C CNN F 4 "C5947" H 4650 9000 50 0001 C CNN "LCSC" F 5 "0;0;-90" H 4650 9000 50 0001 C CNN "JLCPCB_CORRECTION" 1 4650 9000 1 0 0 -1 $EndComp Wire Wire Line 4650 8350 4650 8400 Wire Wire Line 4250 8800 3600 8800 Text Label 3600 8800 0 50 ~ 0 CLOCK_IN Wire Wire Line 4250 8900 4200 8900 Wire Wire Line 4200 8900 4200 8400 Wire Wire Line 4200 8400 4650 8400 Connection ~ 4650 8400 Wire Wire Line 4250 9100 3600 9100 Text Label 3600 9100 0 50 ~ 0 LATCH_IN $Comp L power:GND #PWR027 U 1 1 5F4A62BC P 4650 9750 F 0 "#PWR027" H 4650 9500 50 0001 C CNN F 1 "GND" H 4655 9577 50 0000 C CNN F 2 "" H 4650 9750 50 0001 C CNN F 3 "" H 4650 9750 50 0001 C CNN 1 4650 9750 1 0 0 -1 $EndComp Wire Wire Line 4650 9750 4650 9700 Wire Wire Line 2600 9500 3550 9500 Wire Wire Line 3550 9500 3550 8600 Wire Wire Line 3550 8600 4250 8600 Wire Wire Line 2600 9300 3450 9300 Wire Wire Line 2600 9200 3450 9200 Wire Wire Line 2600 9100 3450 9100 Wire Wire Line 2600 9000 3450 9000 Wire Wire Line 2600 8900 3450 8900 Wire Wire Line 2600 8800 3450 8800 Wire Wire Line 2600 8700 3450 8700 Wire Wire Line 2600 8600 3450 8600 Text Label 5900 8600 2 50 ~ 0 MOTOR_C_PHASE_A Wire Wire Line 5050 8600 5900 8600 Text Label 5900 8700 2 50 ~ 0 MOTOR_C_PHASE_B Wire Wire Line 5050 8700 5900 8700 Text Label 5900 8800 2 50 ~ 0 MOTOR_C_PHASE_C Wire Wire Line 5050 8800 5900 8800 Text Label 5900 8900 2 50 ~ 0 MOTOR_C_PHASE_D Wire Wire Line 5050 8900 5900 8900 Text Label 8350 9000 2 50 ~ 0 MOTOR_D_PHASE_A Wire Wire Line 7500 9000 8350 9000 Text Label 8350 9100 2 50 ~ 0 MOTOR_D_PHASE_B Wire Wire Line 7500 9100 8350 9100 Text Label 8350 9200 2 50 ~ 0 MOTOR_D_PHASE_C Wire Wire Line 7500 9200 8350 9200 Text Label 8350 9300 2 50 ~ 0 MOTOR_D_PHASE_D Wire Wire Line 7500 9300 8350 9300 $Comp L 74xx:74HC595 U7 U 1 1 5F5739D9 P 9550 9000 F 0 "U7" H 9700 9650 50 0000 C CNN F 1 "74HC595" H 9800 9550 50 0000 C CNN F 2 "ModifiedSymbols:SOIC-16_3.9x9.9mm_P1.27mm_silk" H 9550 9000 50 0001 C CNN F 3 "http://www.ti.com/lit/ds/symlink/sn74hc595.pdf" H 9550 9000 50 0001 C CNN F 4 "C5947" H 9550 9000 50 0001 C CNN "LCSC" F 5 "0;0;-90" H 9550 9000 50 0001 C CNN "JLCPCB_CORRECTION" 1 9550 9000 1 0 0 -1 $EndComp Wire Wire Line 9550 8350 9550 8400 Wire Wire Line 9150 8800 8500 8800 Text Label 8500 8800 0 50 ~ 0 CLOCK_IN Wire Wire Line 9150 8900 9100 8900 Wire Wire Line 9100 8900 9100 8400 Wire Wire Line 9100 8400 9550 8400 Connection ~ 9550 8400 Wire Wire Line 9150 9100 8500 9100 Text Label 8500 9100 0 50 ~ 0 LATCH_IN $Comp L power:GND #PWR033 U 1 1 5F5739F0 P 9550 9750 F 0 "#PWR033" H 9550 9500 50 0001 C CNN F 1 "GND" H 9555 9577 50 0000 C CNN F 2 "" H 9550 9750 50 0001 C CNN F 3 "" H 9550 9750 50 0001 C CNN 1 9550 9750 1 0 0 -1 $EndComp Wire Wire Line 9550 9750 9550 9700 Wire Wire Line 5050 9500 6000 9500 Wire Wire Line 6000 9500 6000 8600 Wire Wire Line 8450 8600 9150 8600 Wire Wire Line 9950 9500 11200 9500 Text Label 11200 9500 2 50 ~ 0 MOTOR_OUT_PRE_BUFFER Wire Wire Line 950 8600 1800 8600 Wire Wire Line 9850 5850 9850 5800 $Comp L power:GND #PWR011 U 1 1 5FC21C87 P 9850 7500 F 0 "#PWR011" H 9850 7250 50 0001 C CNN F 1 "GND" H 9855 7327 50 0000 C CNN F 2 "" H 9850 7500 50 0001 C CNN F 3 "" H 9850 7500 50 0001 C CNN 1 9850 7500 1 0 0 -1 $EndComp Wire Wire Line 9850 7500 9850 7450 Wire Wire Line 9350 7450 9850 7450 Text Label 16100 5650 2 50 ~ 0 SENSOR_A Text Label 16100 5750 2 50 ~ 0 SENSOR_B Text Label 16100 5850 2 50 ~ 0 SENSOR_C Text Label 16100 5950 2 50 ~ 0 SENSOR_D Wire Wire Line 16100 5650 15650 5650 Wire Wire Line 15650 5750 16100 5750 Wire Wire Line 16100 5850 15650 5850 Wire Wire Line 15650 5950 16100 5950 $Comp L power:GND #PWR025 U 1 1 5FE35D91 P 15050 7050 F 0 "#PWR025" H 15050 6800 50 0001 C CNN F 1 "GND" H 15055 6877 50 0000 C CNN F 2 "" H 15050 7050 50 0001 C CNN F 3 "" H 15050 7050 50 0001 C CNN 1 15050 7050 1 0 0 -1 $EndComp Wire Wire Line 15050 7050 15050 7000 Wire Wire Line 15050 5250 15050 5300 NoConn ~ 15650 6650 Text Label 13250 6000 0 50 ~ 0 CLOCK_IN $Comp L power:GND #PWR023 U 1 1 5FF22A5A P 14400 6200 F 0 "#PWR023" H 14400 5950 50 0001 C CNN F 1 "GND" H 14405 6027 50 0000 C CNN F 2 "" H 14400 6200 50 0001 C CNN F 3 "" H 14400 6200 50 0001 C CNN 1 14400 6200 1 0 0 -1 $EndComp Wire Wire Line 14400 6200 14400 6100 Wire Wire Line 14400 6100 14450 6100 Text Label 13250 6550 0 50 ~ 0 SENSOR_IN Text Label 16250 6550 2 50 ~ 0 SENSOR_OUT Wire Wire Line 15650 6550 16250 6550 Text Label 13600 2250 0 50 ~ 0 SENSOR_A Text Label 13600 2650 0 50 ~ 0 SENSOR_B Text Label 13600 3050 0 50 ~ 0 SENSOR_C Text Label 13600 3450 0 50 ~ 0 SENSOR_D $Comp L Mechanical:MountingHole_Pad H1 U 1 1 61902623 P 14800 750 F 0 "H1" H 14900 796 50 0000 L CNN F 1 "MountingHole" H 14900 705 50 0000 L CNN F 2 "MountingHole:MountingHole_3.2mm_M3_ISO7380_Pad" H 14800 750 50 0001 C CNN F 3 "~" H 14800 750 50 0001 C CNN 1 14800 750 1 0 0 -1 $EndComp $Comp L Mechanical:MountingHole_Pad H2 U 1 1 619139E1 P 15050 750 F 0 "H2" H 15150 796 50 0000 L CNN F 1 "MountingHole" H 15150 705 50 0000 L CNN F 2 "MountingHole:MountingHole_3.2mm_M3_ISO7380_Pad" H 15050 750 50 0001 C CNN F 3 "~" H 15050 750 50 0001 C CNN 1 15050 750 1 0 0 -1 $EndComp $Comp L Mechanical:MountingHole_Pad H3 U 1 1 61913E82 P 15300 750 F 0 "H3" H 15400 796 50 0000 L CNN F 1 "MountingHole" H 15400 705 50 0000 L CNN F 2 "MountingHole:MountingHole_3.2mm_M3_ISO7380_Pad" H 15300 750 50 0001 C CNN F 3 "~" H 15300 750 50 0001 C CNN 1 15300 750 1 0 0 -1 $EndComp $Comp L Mechanical:MountingHole_Pad H4 U 1 1 61914268 P 15550 750 F 0 "H4" H 15650 796 50 0000 L CNN F 1 "MountingHole" H 15650 705 50 0000 L CNN F 2 "MountingHole:MountingHole_3.2mm_M3_ISO7380_Pad" H 15550 750 50 0001 C CNN F 3 "~" H 15550 750 50 0001 C CNN 1 15550 750 1 0 0 -1 $EndComp $Comp L Device:C_Small C2 U 1 1 5FFE4F2C P 4350 1050 F 0 "C2" H 4442 1096 50 0000 L CNN F 1 "0.1uF" H 4442 1005 50 0000 L CNN F 2 "Capacitor_SMD:C_0603_1608Metric" H 4350 1050 50 0001 C CNN F 3 "~" H 4350 1050 50 0001 C CNN F 4 "C14663" H 4350 1050 50 0001 C CNN "LCSC" 1 4350 1050 1 0 0 -1 $EndComp $Comp L Device:C_Small C4 U 1 1 5FFE56BF P 4500 1050 F 0 "C4" H 4592 1096 50 0000 L CNN F 1 "0.1uF" H 4592 1005 50 0000 L CNN F 2 "Capacitor_SMD:C_0603_1608Metric" H 4500 1050 50 0001 C CNN F 3 "~" H 4500 1050 50 0001 C CNN F 4 "C14663" H 4500 1050 50 0001 C CNN "LCSC" 1 4500 1050 1 0 0 -1 $EndComp $Comp L Device:C_Small C5 U 1 1 5FFE5A33 P 4650 1050 F 0 "C5" H 4742 1096 50 0000 L CNN F 1 "0.1uF" H 4742 1005 50 0000 L CNN F 2 "Capacitor_SMD:C_0603_1608Metric" H 4650 1050 50 0001 C CNN F 3 "~" H 4650 1050 50 0001 C CNN F 4 "C14663" H 4650 1050 50 0001 C CNN "LCSC" 1 4650 1050 1 0 0 -1 $EndComp $Comp L Device:C_Small C7 U 1 1 5FFE5CEE P 4950 1050 F 0 "C7" H 5042 1096 50 0000 L CNN F 1 "0.1uF" H 5042 1005 50 0000 L CNN F 2 "Capacitor_SMD:C_0603_1608Metric" H 4950 1050 50 0001 C CNN F 3 "~" H 4950 1050 50 0001 C CNN F 4 "C14663" H 4950 1050 50 0001 C CNN "LCSC" 1 4950 1050 1 0 0 -1 $EndComp $Comp L power:GND #PWR014 U 1 1 5FFE6F10 P 4350 1150 F 0 "#PWR014" H 4350 900 50 0001 C CNN F 1 "GND" H 4355 977 50 0000 C CNN F 2 "" H 4350 1150 50 0001 C CNN F 3 "" H 4350 1150 50 0001 C CNN 1 4350 1150 1 0 0 -1 $EndComp Wire Wire Line 4350 950 4500 950 Connection ~ 4500 950 Wire Wire Line 4500 950 4650 950 Wire Wire Line 4800 950 4950 950 Connection ~ 4500 1150 Wire Wire Line 4500 1150 4350 1150 Wire Wire Line 4650 1150 4500 1150 Wire Wire Line 4950 1150 4800 1150 Connection ~ 4350 1150 $Comp L Device:C_Small C6 U 1 1 601B1A47 P 4800 1050 F 0 "C6" H 4892 1096 50 0000 L CNN F 1 "0.1uF" H 4892 1005 50 0000 L CNN F 2 "Capacitor_SMD:C_0603_1608Metric" H 4800 1050 50 0001 C CNN F 3 "~" H 4800 1050 50 0001 C CNN F 4 "C14663" H 4800 1050 50 0001 C CNN "LCSC" 1 4800 1050 1 0 0 -1 $EndComp $Comp L Transistor_Array:ULN2003A U2 U 1 1 60696131 P 1900 4100 F 0 "U2" H 1900 4767 50 0000 C CNN F 1 "TPL7407L" H 1900 4676 50 0000 C CNN F 2 "ModifiedSymbols:SOIC-16_3.9x9.9mm_P1.27mm_silk" H 1950 3550 50 0001 L CNN F 3 "~" H 2000 3900 50 0001 C CNN F 4 "C139663" H 1900 4100 50 0001 C CNN "LCSC" F 5 "C7512" H 1900 4100 50 0001 C CNN "LCSC_ALT_ULN2003A" F 6 "0;0;-90" H 1900 4100 50 0001 C CNN "JLCPCB_CORRECTION" 1 1900 4100 1 0 0 -1 $EndComp $Comp L Connector:Conn_01x05_Male J3 U 1 1 6072FE6C P 1700 2700 F 0 "J3" H 1672 2632 50 0000 R CNN F 1 "Motor" H 1672 2723 50 0000 R CNN F 2 "Connector_JST:JST_XH_B5B-XH-A_1x05_P2.50mm_Vertical" H 1700 2700 50 0001 C CNN F 3 "~" H 1700 2700 50 0001 C CNN F 4 "C157991" H 1672 2723 50 0001 C CNN "LCSC" F 5 "5;0;-180" H 1672 2723 50 0001 C CNN "JLCPCB_CORRECTION" 1 1700 2700 -1 0 0 -1 $EndComp $Comp L power:GND #PWR09 U 1 1 60B72DE6 P 1900 4850 F 0 "#PWR09" H 1900 4600 50 0001 C CNN F 1 "GND" H 1905 4677 50 0000 C CNN F 2 "" H 1900 4850 50 0001 C CNN F 3 "" H 1900 4850 50 0001 C CNN 1 1900 4850 1 0 0 -1 $EndComp Wire Wire Line 1900 4700 1900 4800 Wire Wire Line 2350 3600 2350 3700 Wire Wire Line 2350 3700 2300 3700 Text Label 3050 4200 2 50 ~ 0 OUT_A_PHASE_C Text Label 3050 4100 2 50 ~ 0 OUT_A_PHASE_D Text Label 3050 4000 2 50 ~ 0 OUT_B_PHASE_A Text Label 3050 3900 2 50 ~ 0 OUT_B_PHASE_B Text Label 5650 4400 2 50 ~ 0 OUT_B_PHASE_C Wire Wire Line 2300 4200 3050 4200 Wire Wire Line 2300 4100 3050 4100 Wire Wire Line 2300 4000 3050 4000 Wire Wire Line 2300 3900 3050 3900 Wire Wire Line 4900 4400 5650 4400 Text Label 700 4200 0 50 ~ 0 MOTOR_A_PHASE_C Text Label 700 4100 0 50 ~ 0 MOTOR_A_PHASE_D Text Label 700 4000 0 50 ~ 0 MOTOR_B_PHASE_A Text Label 700 3900 0 50 ~ 0 MOTOR_B_PHASE_B Text Label 3300 4400 0 50 ~ 0 MOTOR_B_PHASE_C Wire Wire Line 700 4200 1500 4200 Wire Wire Line 700 4100 1500 4100 Wire Wire Line 700 4000 1500 4000 Wire Wire Line 700 3900 1500 3900 Wire Wire Line 3300 4400 4100 4400 $Comp L Device:C_Small C1 U 1 1 63182B65 P 2350 4700 F 0 "C1" H 2258 4654 50 0000 R CNN F 1 "0.1uF" H 2258 4745 50 0000 R CNN F 2 "Capacitor_SMD:C_0603_1608Metric" H 2350 4700 50 0001 C CNN F 3 "~" H 2350 4700 50 0001 C CNN F 4 "C14663" H 2350 4700 50 0001 C CNN "LCSC" 1 2350 4700 -1 0 0 1 $EndComp Wire Wire Line 2350 4600 2350 3700 Connection ~ 2350 3700 Wire Wire Line 2350 4800 1900 4800 Connection ~ 1900 4800 Wire Wire Line 1900 4800 1900 4850 Text Label 750 2500 0 50 ~ 0 OUT_A_PHASE_A Text Label 750 2600 0 50 ~ 0 OUT_A_PHASE_B Text Label 750 2700 0 50 ~ 0 OUT_A_PHASE_C Text Label 750 2800 0 50 ~ 0 OUT_A_PHASE_D Wire Wire Line 750 2500 1500 2500 Wire Wire Line 750 2600 1500 2600 Wire Wire Line 750 2700 1500 2700 Wire Wire Line 750 2800 1500 2800 Wire Wire Line 1400 2900 1500 2900 Wire Wire Line 1400 2300 1400 2900 $Comp L Connector:Conn_01x05_Male J5 U 1 1 63D07061 P 3100 2700 F 0 "J5" H 3072 2632 50 0000 R CNN F 1 "Motor" H 3072 2723 50 0000 R CNN F 2 "Connector_JST:JST_XH_B5B-XH-A_1x05_P2.50mm_Vertical" H 3100 2700 50 0001 C CNN F 3 "~" H 3100 2700 50 0001 C CNN F 4 "C157991" H 3072 2723 50 0001 C CNN "LCSC" F 5 "5;0;-180" H 3072 2723 50 0001 C CNN "JLCPCB_CORRECTION" 1 3100 2700 -1 0 0 -1 $EndComp Text Label 2150 2500 0 50 ~ 0 OUT_B_PHASE_A Text Label 2150 2600 0 50 ~ 0 OUT_B_PHASE_B Text Label 2150 2700 0 50 ~ 0 OUT_B_PHASE_C Text Label 2150 2800 0 50 ~ 0 OUT_B_PHASE_D Wire Wire Line 2150 2500 2900 2500 Wire Wire Line 2150 2600 2900 2600 Wire Wire Line 2150 2700 2900 2700 Wire Wire Line 2150 2800 2900 2800 Wire Wire Line 2800 2900 2900 2900 Wire Wire Line 2800 2300 2800 2900 $Comp L Connector:Conn_01x05_Male J6 U 1 1 63DADADE P 4500 2700 F 0 "J6" H 4472 2632 50 0000 R CNN F 1 "Motor" H 4472 2723 50 0000 R CNN F 2 "Connector_JST:JST_XH_B5B-XH-A_1x05_P2.50mm_Vertical" H 4500 2700 50 0001 C CNN F 3 "~" H 4500 2700 50 0001 C CNN F 4 "C157991" H 4472 2723 50 0001 C CNN "LCSC" F 5 "5;0;-180" H 4472 2723 50 0001 C CNN "JLCPCB_CORRECTION" 1 4500 2700 -1 0 0 -1 $EndComp Text Label 3550 2500 0 50 ~ 0 OUT_C_PHASE_A Text Label 3550 2600 0 50 ~ 0 OUT_C_PHASE_B Text Label 3550 2700 0 50 ~ 0 OUT_C_PHASE_C Text Label 3550 2800 0 50 ~ 0 OUT_C_PHASE_D Wire Wire Line 3550 2500 4300 2500 Wire Wire Line 3550 2600 4300 2600 Wire Wire Line 3550 2700 4300 2700 Wire Wire Line 3550 2800 4300 2800 Wire Wire Line 4200 2900 4300 2900 Wire Wire Line 4200 2300 4200 2900 $Comp L Connector:Conn_01x05_Male J7 U 1 1 63DADAFC P 5900 2700 F 0 "J7" H 5872 2632 50 0000 R CNN F 1 "Motor" H 5872 2723 50 0000 R CNN F 2 "Connector_JST:JST_XH_B5B-XH-A_1x05_P2.50mm_Vertical" H 5900 2700 50 0001 C CNN F 3 "~" H 5900 2700 50 0001 C CNN F 4 "C157991" H 5872 2723 50 0001 C CNN "LCSC" F 5 "5;0;-180" H 5872 2723 50 0001 C CNN "JLCPCB_CORRECTION" 1 5900 2700 -1 0 0 -1 $EndComp Text Label 4950 2500 0 50 ~ 0 OUT_D_PHASE_A Text Label 4950 2600 0 50 ~ 0 OUT_D_PHASE_B Text Label 4950 2700 0 50 ~ 0 OUT_D_PHASE_C Text Label 4950 2800 0 50 ~ 0 OUT_D_PHASE_D Wire Wire Line 4950 2500 5700 2500 Wire Wire Line 4950 2600 5700 2600 Wire Wire Line 4950 2700 5700 2700 Wire Wire Line 4950 2800 5700 2800 Wire Wire Line 5600 2900 5700 2900 Wire Wire Line 5600 2300 5600 2900 $Comp L Transistor_Array:ULN2003A U6 U 1 1 6419F7E4 P 4500 4100 F 0 "U6" H 4500 4767 50 0000 C CNN F 1 "TPL7407L" H 4500 4676 50 0000 C CNN F 2 "ModifiedSymbols:SOIC-16_3.9x9.9mm_P1.27mm_silk" H 4550 3550 50 0001 L CNN F 3 "~" H 4600 3900 50 0001 C CNN F 4 "C139663" H 4500 4100 50 0001 C CNN "LCSC" F 5 "C7512" H 4500 4100 50 0001 C CNN "LCSC_ALT_ULN2003A" F 6 "0;0;-90" H 4500 4100 50 0001 C CNN "JLCPCB_CORRECTION" 1 4500 4100 1 0 0 -1 $EndComp $Comp L power:GND #PWR028 U 1 1 6419F7F8 P 4500 4850 F 0 "#PWR028" H 4500 4600 50 0001 C CNN F 1 "GND" H 4505 4677 50 0000 C CNN F 2 "" H 4500 4850 50 0001 C CNN F 3 "" H 4500 4850 50 0001 C CNN 1 4500 4850 1 0 0 -1 $EndComp Wire Wire Line 4500 4700 4500 4800 Wire Wire Line 4950 3700 4900 3700 Text Label 5650 4300 2 50 ~ 0 OUT_B_PHASE_D Text Label 5650 4200 2 50 ~ 0 OUT_C_PHASE_A Text Label 5650 4100 2 50 ~ 0 OUT_C_PHASE_B Text Label 5650 4000 2 50 ~ 0 OUT_C_PHASE_C Text Label 5650 3900 2 50 ~ 0 OUT_C_PHASE_D Text Label 8300 4400 2 50 ~ 0 OUT_D_PHASE_A Text Label 8300 4300 2 50 ~ 0 OUT_D_PHASE_B Wire Wire Line 4900 4300 5650 4300 Wire Wire Line 4900 4200 5650 4200 Wire Wire Line 4900 4100 5650 4100 Wire Wire Line 4900 4000 5650 4000 Wire Wire Line 4900 3900 5650 3900 Text Label 3300 4300 0 50 ~ 0 MOTOR_B_PHASE_D Text Label 3300 4200 0 50 ~ 0 MOTOR_C_PHASE_A Text Label 3300 4100 0 50 ~ 0 MOTOR_C_PHASE_B Text Label 3300 4000 0 50 ~ 0 MOTOR_C_PHASE_C Text Label 3300 3900 0 50 ~ 0 MOTOR_C_PHASE_D Text Label 5950 4400 0 50 ~ 0 MOTOR_D_PHASE_A Text Label 5950 4300 0 50 ~ 0 MOTOR_D_PHASE_B Wire Wire Line 3300 4300 4100 4300 Wire Wire Line 3300 4200 4100 4200 Wire Wire Line 3300 4100 4100 4100 Wire Wire Line 3300 4000 4100 4000 Wire Wire Line 3300 3900 4100 3900 Wire Wire Line 5950 4400 6750 4400 Wire Wire Line 5950 4300 6750 4300 $Comp L Device:C_Small C9 U 1 1 6419F821 P 4950 4700 F 0 "C9" H 4858 4654 50 0000 R CNN F 1 "0.1uF" H 4858 4745 50 0000 R CNN F 2 "Capacitor_SMD:C_0603_1608Metric" H 4950 4700 50 0001 C CNN F 3 "~" H 4950 4700 50 0001 C CNN F 4 "C14663" H 4950 4700 50 0001 C CNN "LCSC" 1 4950 4700 -1 0 0 1 $EndComp Wire Wire Line 4950 4600 4950 3700 Connection ~ 4950 3700 Wire Wire Line 4950 4800 4500 4800 Connection ~ 4500 4800 Wire Wire Line 4500 4800 4500 4850 $Comp L power:GND #PWR034 U 1 1 6427B252 P 7150 4850 F 0 "#PWR034" H 7150 4600 50 0001 C CNN F 1 "GND" H 7155 4677 50 0000 C CNN F 2 "" H 7150 4850 50 0001 C CNN F 3 "" H 7150 4850 50 0001 C CNN 1 7150 4850 1 0 0 -1 $EndComp Wire Wire Line 7150 4700 7150 4800 Wire Wire Line 7600 3600 7600 3700 Wire Wire Line 7600 3700 7550 3700 Text Label 8300 4200 2 50 ~ 0 OUT_D_PHASE_C Text Label 8300 4100 2 50 ~ 0 OUT_D_PHASE_D Wire Wire Line 7550 4200 8300 4200 Wire Wire Line 7550 4100 8300 4100 $Comp L Device:C_Small C10 U 1 1 6427B27B P 7600 4700 F 0 "C10" H 7508 4654 50 0000 R CNN F 1 "0.1uF" H 7508 4745 50 0000 R CNN F 2 "Capacitor_SMD:C_0603_1608Metric" H 7600 4700 50 0001 C CNN F 3 "~" H 7600 4700 50 0001 C CNN F 4 "C14663" H 7600 4700 50 0001 C CNN "LCSC" 1 7600 4700 -1 0 0 1 $EndComp Wire Wire Line 7600 4600 7600 3700 Connection ~ 7600 3700 Wire Wire Line 7600 4800 7150 4800 Connection ~ 7150 4800 Wire Wire Line 7150 4800 7150 4850 $Comp L power:+3.3V #PWR037 U 1 1 60BCCAEC P 14450 1950 F 0 "#PWR037" H 14450 1800 50 0001 C CNN F 1 "+3.3V" H 14465 2123 50 0000 C CNN F 2 "" H 14450 1950 50 0001 C CNN F 3 "" H 14450 1950 50 0001 C CNN 1 14450 1950 1 0 0 -1 $EndComp $Comp L power:+3.3V #PWR010 U 1 1 60BD7815 P 9850 5800 F 0 "#PWR010" H 9850 5650 50 0001 C CNN F 1 "+3.3V" H 9865 5973 50 0000 C CNN F 2 "" H 9850 5800 50 0001 C CNN F 3 "" H 9850 5800 50 0001 C CNN 1 9850 5800 1 0 0 -1 $EndComp $Comp L power:+3.3V #PWR024 U 1 1 60BE4FAD P 15050 5250 F 0 "#PWR024" H 15050 5100 50 0001 C CNN F 1 "+3.3V" H 15065 5423 50 0000 C CNN F 2 "" H 15050 5250 50 0001 C CNN F 3 "" H 15050 5250 50 0001 C CNN 1 15050 5250 1 0 0 -1 $EndComp $Comp L power:+3.3V #PWR07 U 1 1 60BE5B14 P 2200 8350 F 0 "#PWR07" H 2200 8200 50 0001 C CNN F 1 "+3.3V" H 2215 8523 50 0000 C CNN F 2 "" H 2200 8350 50 0001 C CNN F 3 "" H 2200 8350 50 0001 C CNN 1 2200 8350 1 0 0 -1 $EndComp $Comp L power:+3.3V #PWR026 U 1 1 60BE66B4 P 4650 8350 F 0 "#PWR026" H 4650 8200 50 0001 C CNN F 1 "+3.3V" H 4665 8523 50 0000 C CNN F 2 "" H 4650 8350 50 0001 C CNN F 3 "" H 4650 8350 50 0001 C CNN 1 4650 8350 1 0 0 -1 $EndComp $Comp L power:+3.3V #PWR032 U 1 1 60BE71C7 P 9550 8350 F 0 "#PWR032" H 9550 8200 50 0001 C CNN F 1 "+3.3V" H 9565 8523 50 0000 C CNN F 2 "" H 9550 8350 50 0001 C CNN F 3 "" H 9550 8350 50 0001 C CNN 1 9550 8350 1 0 0 -1 $EndComp $Comp L power:+3.3V #PWR013 U 1 1 60BFBFAE P 4350 950 F 0 "#PWR013" H 4350 800 50 0001 C CNN F 1 "+3.3V" H 4365 1123 50 0000 C CNN F 2 "" H 4350 950 50 0001 C CNN F 3 "" H 4350 950 50 0001 C CNN 1 4350 950 1 0 0 -1 $EndComp Connection ~ 4350 950 $Comp L power:+12V #PWR05 U 1 1 60CAB213 P 1400 2300 F 0 "#PWR05" H 1400 2150 50 0001 C CNN F 1 "+12V" H 1415 2473 50 0000 C CNN F 2 "" H 1400 2300 50 0001 C CNN F 3 "" H 1400 2300 50 0001 C CNN 1 1400 2300 1 0 0 -1 $EndComp $Comp L power:+12V #PWR019 U 1 1 60CAB860 P 2800 2300 F 0 "#PWR019" H 2800 2150 50 0001 C CNN F 1 "+12V" H 2815 2473 50 0000 C CNN F 2 "" H 2800 2300 50 0001 C CNN F 3 "" H 2800 2300 50 0001 C CNN 1 2800 2300 1 0 0 -1 $EndComp $Comp L power:+12V #PWR029 U 1 1 60CAC007 P 4200 2300 F 0 "#PWR029" H 4200 2150 50 0001 C CNN F 1 "+12V" H 4215 2473 50 0000 C CNN F 2 "" H 4200 2300 50 0001 C CNN F 3 "" H 4200 2300 50 0001 C CNN 1 4200 2300 1 0 0 -1 $EndComp $Comp L power:+12V #PWR031 U 1 1 60CADACC P 5600 2300 F 0 "#PWR031" H 5600 2150 50 0001 C CNN F 1 "+12V" H 5615 2473 50 0000 C CNN F 2 "" H 5600 2300 50 0001 C CNN F 3 "" H 5600 2300 50 0001 C CNN 1 5600 2300 1 0 0 -1 $EndComp $Comp L power:+12V #PWR012 U 1 1 60CB0B9F P 2350 3600 F 0 "#PWR012" H 2350 3450 50 0001 C CNN F 1 "+12V" H 2365 3773 50 0000 C CNN F 2 "" H 2350 3600 50 0001 C CNN F 3 "" H 2350 3600 50 0001 C CNN 1 2350 3600 1 0 0 -1 $EndComp $Comp L power:+12V #PWR030 U 1 1 60CB136C P 4950 3600 F 0 "#PWR030" H 4950 3450 50 0001 C CNN F 1 "+12V" H 4965 3773 50 0000 C CNN F 2 "" H 4950 3600 50 0001 C CNN F 3 "" H 4950 3600 50 0001 C CNN 1 4950 3600 1 0 0 -1 $EndComp Wire Wire Line 4950 3600 4950 3700 $Comp L power:+12V #PWR036 U 1 1 60CC65B0 P 7600 3600 F 0 "#PWR036" H 7600 3450 50 0001 C CNN F 1 "+12V" H 7615 3773 50 0000 C CNN F 2 "" H 7600 3600 50 0001 C CNN F 3 "" H 7600 3600 50 0001 C CNN 1 7600 3600 1 0 0 -1 $EndComp $Comp L power:+3.3V #PWR01 U 1 1 60CD32FA P 1100 800 F 0 "#PWR01" H 1100 650 50 0001 C CNN F 1 "+3.3V" H 1115 973 50 0000 C CNN F 2 "" H 1100 800 50 0001 C CNN F 3 "" H 1100 800 50 0001 C CNN 1 1100 800 1 0 0 -1 $EndComp $Comp L power:GND #PWR02 U 1 1 60CD4250 P 1200 1500 F 0 "#PWR02" H 1200 1250 50 0001 C CNN F 1 "GND" H 1205 1327 50 0000 C CNN F 2 "" H 1200 1500 50 0001 C CNN F 3 "" H 1200 1500 50 0001 C CNN 1 1200 1500 1 0 0 -1 $EndComp $Comp L power:+12V #PWR03 U 1 1 60CD4A10 P 1300 800 F 0 "#PWR03" H 1300 650 50 0001 C CNN F 1 "+12V" H 1315 973 50 0000 C CNN F 2 "" H 1300 800 50 0001 C CNN F 3 "" H 1300 800 50 0001 C CNN 1 1300 800 1 0 0 -1 $EndComp Wire Wire Line 1200 1500 1200 1200 Wire Wire Line 1200 1100 1400 1100 Wire Wire Line 1400 1200 1200 1200 Connection ~ 1200 1200 Wire Wire Line 1200 1200 1200 1100 Wire Wire Line 1300 1400 1400 1400 Wire Wire Line 1300 800 1300 1300 Wire Wire Line 1400 1300 1300 1300 Connection ~ 1300 1300 Wire Wire Line 1300 1300 1300 1400 Wire Wire Line 1100 800 1100 900 Wire Wire Line 1100 900 1400 900 Wire Wire Line 1400 1000 1100 1000 Wire Wire Line 1100 1000 1100 900 Connection ~ 1100 900 Wire Wire Line 5950 4200 6750 4200 Text Label 5950 4200 0 50 ~ 0 MOTOR_D_PHASE_C Wire Wire Line 7550 4400 8300 4400 Wire Wire Line 8300 4300 7550 4300 Wire Wire Line 15650 6350 16100 6350 Wire Wire Line 16100 6250 15650 6250 Text Label 16100 6350 2 50 ~ 0 LOOPBACK_B Text Label 16100 6250 2 50 ~ 0 LOOPBACK_A $Comp L 74HC165_2:74HC165 U4 U 1 1 5FC6DACF P 15050 6150 F 0 "U4" H 15150 6900 50 0000 C CNN F 1 "74HC165" H 15300 6800 50 0000 C CNN F 2 "ModifiedSymbols:SOIC-16_3.9x9.9mm_P1.27mm_silk" H 15650 7350 50 0001 C CNN F 3 "DOCUMENTATION" H 15800 7250 50 0001 C CNN F 4 "C5613" H 15050 6150 50 0001 C CNN "LCSC" F 5 "0;0;-90" H 15050 6150 50 0001 C CNN "JLCPCB_CORRECTION" 1 15050 6150 1 0 0 -1 $EndComp $Comp L Device:CP_Small C3 U 1 1 60F564AB P 2800 1050 F 0 "C3" H 2888 1096 50 0000 L CNN F 1 "100uF" H 2888 1005 50 0000 L CNN F 2 "Capacitor_SMD:CP_Elec_8x10" H 2800 1050 50 0001 C CNN F 3 "~" H 2800 1050 50 0001 C CNN F 4 "C176665" H 2800 1050 50 0001 C CNN "LCSC" F 5 "0;0;180" H 2800 1050 50 0001 C CNN "JLCPCB_CORRECTION" 1 2800 1050 1 0 0 -1 $EndComp $Comp L power:+12V #PWR015 U 1 1 60F5782B P 2800 900 F 0 "#PWR015" H 2800 750 50 0001 C CNN F 1 "+12V" H 2815 1073 50 0000 C CNN F 2 "" H 2800 900 50 0001 C CNN F 3 "" H 2800 900 50 0001 C CNN 1 2800 900 1 0 0 -1 $EndComp $Comp L power:GND #PWR016 U 1 1 60F582C0 P 2800 1200 F 0 "#PWR016" H 2800 950 50 0001 C CNN F 1 "GND" H 2805 1027 50 0000 C CNN F 2 "" H 2800 1200 50 0001 C CNN F 3 "" H 2800 1200 50 0001 C CNN 1 2800 1200 1 0 0 -1 $EndComp Wire Wire Line 2800 900 2800 950 Wire Wire Line 2800 1150 2800 1200 $Comp L power:+3.3V #PWR021 U 1 1 60F902E2 P 3500 900 F 0 "#PWR021" H 3500 750 50 0001 C CNN F 1 "+3.3V" H 3515 1073 50 0000 C CNN F 2 "" H 3500 900 50 0001 C CNN F 3 "" H 3500 900 50 0001 C CNN 1 3500 900 1 0 0 -1 $EndComp $Comp L power:GND #PWR022 U 1 1 60F91A7F P 3500 1200 F 0 "#PWR022" H 3500 950 50 0001 C CNN F 1 "GND" H 3505 1027 50 0000 C CNN F 2 "" H 3500 1200 50 0001 C CNN F 3 "" H 3500 1200 50 0001 C CNN 1 3500 1200 1 0 0 -1 $EndComp Wire Wire Line 3500 1150 3500 1200 Wire Wire Line 3500 900 3500 950 $Comp L power:GND #PWR04 U 1 1 60FBE6C2 P 2550 6850 F 0 "#PWR04" H 2550 6600 50 0001 C CNN F 1 "GND" H 2555 6677 50 0000 C CNN F 2 "" H 2550 6850 50 0001 C CNN F 3 "" H 2550 6850 50 0001 C CNN 1 2550 6850 1 0 0 -1 $EndComp $Comp L power:GND #PWR020 U 1 1 60FBEBB8 P 4150 6850 F 0 "#PWR020" H 4150 6600 50 0001 C CNN F 1 "GND" H 4155 6677 50 0000 C CNN F 2 "" H 4150 6850 50 0001 C CNN F 3 "" H 4150 6850 50 0001 C CNN 1 4150 6850 1 0 0 -1 $EndComp Text Label 2900 6400 0 50 ~ 0 CLOCK_OUT Text Label 2900 6700 0 50 ~ 0 LATCH_OUT Text Label 2900 6500 0 50 ~ 0 MOTOR_OUT Text Label 2900 6600 0 50 ~ 0 SENSOR_IN $Comp L Device:LED_Small D1 U 1 1 6102F37B P 10500 1150 F 0 "D1" H 10500 943 50 0000 C CNN F 1 "LED" H 10500 1034 50 0000 C CNN F 2 "ModifiedSymbols:LED_0603_1608Metric_Silkscreen" V 10500 1150 50 0001 C CNN F 3 "~" V 10500 1150 50 0001 C CNN F 4 "C2286" H 10500 1150 50 0001 C CNN "LCSC" F 5 "C72044" H 10500 1150 50 0001 C CNN "LCSC_ALT_LED" 1 10500 1150 -1 0 0 1 $EndComp $Comp L Device:LED_Small D2 U 1 1 610329BA P 10500 1450 F 0 "D2" H 10500 1243 50 0000 C CNN F 1 "LED" H 10500 1334 50 0000 C CNN F 2 "ModifiedSymbols:LED_0603_1608Metric_Silkscreen" V 10500 1450 50 0001 C CNN F 3 "~" V 10500 1450 50 0001 C CNN F 4 "C2286" H 10500 1450 50 0001 C CNN "LCSC" F 5 "C72044" H 10500 1450 50 0001 C CNN "LCSC_ALT_LED" 1 10500 1450 -1 0 0 1 $EndComp $Comp L Device:LED_Small D3 U 1 1 61032E24 P 10500 1750 F 0 "D3" H 10500 1543 50 0000 C CNN F 1 "LED" H 10500 1634 50 0000 C CNN F 2 "ModifiedSymbols:LED_0603_1608Metric_Silkscreen" V 10500 1750 50 0001 C CNN F 3 "~" V 10500 1750 50 0001 C CNN F 4 "C2286" H 10500 1750 50 0001 C CNN "LCSC" F 5 "C72044" H 10500 1750 50 0001 C CNN "LCSC_ALT_LED" 1 10500 1750 -1 0 0 1 $EndComp $Comp L Device:LED_Small D4 U 1 1 610332BB P 10500 2050 F 0 "D4" H 10500 1843 50 0000 C CNN F 1 "LED" H 10500 1934 50 0000 C CNN F 2 "ModifiedSymbols:LED_0603_1608Metric_Silkscreen" V 10500 2050 50 0001 C CNN F 3 "~" V 10500 2050 50 0001 C CNN F 4 "C2286" H 10500 2050 50 0001 C CNN "LCSC" F 5 "C72044" H 10500 2050 50 0001 C CNN "LCSC_ALT_LED" 1 10500 2050 -1 0 0 1 $EndComp $Comp L power:GND #PWR035 U 1 1 61034F84 P 10700 2750 F 0 "#PWR035" H 10700 2500 50 0001 C CNN F 1 "GND" H 10705 2577 50 0000 C CNN F 2 "" H 10700 2750 50 0001 C CNN F 3 "" H 10700 2750 50 0001 C CNN 1 10700 2750 1 0 0 -1 $EndComp Wire Wire Line 10600 2050 10700 2050 Wire Wire Line 10700 2050 10700 1750 Wire Wire Line 10700 1750 10600 1750 Wire Wire Line 10600 1450 10700 1450 Wire Wire Line 10700 1450 10700 1750 Connection ~ 10700 1750 Wire Wire Line 10700 1450 10700 1150 Wire Wire Line 10700 1150 10600 1150 Connection ~ 10700 1450 $Comp L Device:R_Small R2 U 1 1 610CD129 P 10100 1150 F 0 "R2" V 9904 1150 50 0000 C CNN F 1 "220R" V 9995 1150 50 0000 C CNN F 2 "Resistor_SMD:R_0603_1608Metric" H 10100 1150 50 0001 C CNN F 3 "~" H 10100 1150 50 0001 C CNN F 4 "C22962" H 10100 1150 50 0001 C CNN "LCSC" 1 10100 1150 0 1 1 0 $EndComp Wire Wire Line 10200 1150 10400 1150 Wire Wire Line 10000 1150 9350 1150 Text Label 9350 1150 0 50 ~ 0 LED_A $Comp L Device:R_Small R3 U 1 1 610EBF7E P 10100 1450 F 0 "R3" V 9904 1450 50 0000 C CNN F 1 "220R" V 9995 1450 50 0000 C CNN F 2 "Resistor_SMD:R_0603_1608Metric" H 10100 1450 50 0001 C CNN F 3 "~" H 10100 1450 50 0001 C CNN F 4 "C22962" H 10100 1450 50 0001 C CNN "LCSC" 1 10100 1450 0 1 1 0 $EndComp Wire Wire Line 10200 1450 10400 1450 Wire Wire Line 10000 1450 9350 1450 Text Label 9350 1450 0 50 ~ 0 LED_B $Comp L Device:R_Small R4 U 1 1 610FBBBD P 10100 1750 F 0 "R4" V 9904 1750 50 0000 C CNN F 1 "220R" V 9995 1750 50 0000 C CNN F 2 "Resistor_SMD:R_0603_1608Metric" H 10100 1750 50 0001 C CNN F 3 "~" H 10100 1750 50 0001 C CNN F 4 "C22962" H 10100 1750 50 0001 C CNN "LCSC" 1 10100 1750 0 1 1 0 $EndComp Wire Wire Line 10200 1750 10400 1750 Wire Wire Line 10000 1750 9350 1750 Text Label 9350 1750 0 50 ~ 0 LED_C $Comp L Device:R_Small R5 U 1 1 610FBD9A P 10100 2050 F 0 "R5" V 9904 2050 50 0000 C CNN F 1 "220R" V 9995 2050 50 0000 C CNN F 2 "Resistor_SMD:R_0603_1608Metric" H 10100 2050 50 0001 C CNN F 3 "~" H 10100 2050 50 0001 C CNN F 4 "C22962" H 10100 2050 50 0001 C CNN "LCSC" 1 10100 2050 0 1 1 0 $EndComp Wire Wire Line 10200 2050 10400 2050 Wire Wire Line 10000 2050 9350 2050 Text Label 9350 2050 0 50 ~ 0 LED_D $Comp L Connector:Conn_01x03_Male J8 U 1 1 61119DE9 P 14950 2350 F 0 "J8" H 14922 2282 50 0000 R CNN F 1 "Sensor" H 14922 2373 50 0000 R CNN F 2 "Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_Vertical" H 14950 2350 50 0001 C CNN F 3 "~" H 14950 2350 50 0001 C CNN F 4 "C49257" H 14922 2373 50 0001 C CNN "LCSC" F 5 "0;2.54;-90" H 14922 2373 50 0001 C CNN "JLCPCB_CORRECTION" 1 14950 2350 -1 0 0 1 $EndComp $Comp L power:GND #PWR038 U 1 1 61154CD7 P 14600 4550 F 0 "#PWR038" H 14600 4300 50 0001 C CNN F 1 "GND" H 14605 4377 50 0000 C CNN F 2 "" H 14600 4550 50 0001 C CNN F 3 "" H 14600 4550 50 0001 C CNN 1 14600 4550 1 0 0 -1 $EndComp $Comp L Connector:Conn_01x03_Male J9 U 1 1 6115565C P 14950 2750 F 0 "J9" H 14922 2682 50 0000 R CNN F 1 "Sensor" H 14922 2773 50 0000 R CNN F 2 "Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_Vertical" H 14950 2750 50 0001 C CNN F 3 "~" H 14950 2750 50 0001 C CNN F 4 "C49257" H 14922 2773 50 0001 C CNN "LCSC" F 5 "0;2.54;-90" H 14922 2773 50 0001 C CNN "JLCPCB_CORRECTION" 1 14950 2750 -1 0 0 1 $EndComp $Comp L Connector:Conn_01x03_Male J10 U 1 1 61155EE4 P 14950 3150 F 0 "J10" H 14922 3082 50 0000 R CNN F 1 "Sensor" H 14922 3173 50 0000 R CNN F 2 "Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_Vertical" H 14950 3150 50 0001 C CNN F 3 "~" H 14950 3150 50 0001 C CNN F 4 "C49257" H 14922 3173 50 0001 C CNN "LCSC" F 5 "0;2.54;-90" H 14922 3173 50 0001 C CNN "JLCPCB_CORRECTION" 1 14950 3150 -1 0 0 1 $EndComp $Comp L Connector:Conn_01x03_Male J11 U 1 1 61156491 P 14950 3550 F 0 "J11" H 14922 3482 50 0000 R CNN F 1 "Sensor" H 14922 3573 50 0000 R CNN F 2 "Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_Vertical" H 14950 3550 50 0001 C CNN F 3 "~" H 14950 3550 50 0001 C CNN F 4 "C49257" H 14922 3573 50 0001 C CNN "LCSC" F 5 "0;2.54;-90" H 14922 3573 50 0001 C CNN "JLCPCB_CORRECTION" 1 14950 3550 -1 0 0 1 $EndComp Wire Wire Line 14450 2350 14750 2350 Wire Wire Line 14450 2750 14750 2750 Connection ~ 14450 2350 Wire Wire Line 14450 2750 14450 2850 Wire Wire Line 14450 3150 14750 3150 Connection ~ 14450 2750 Wire Wire Line 14450 3150 14450 3250 Wire Wire Line 14450 3550 14750 3550 Connection ~ 14450 3150 Wire Wire Line 14750 2450 14600 2450 Wire Wire Line 14600 2450 14600 2850 Wire Wire Line 14750 2850 14600 2850 Connection ~ 14600 2850 Wire Wire Line 14600 2850 14600 3250 Wire Wire Line 14750 3250 14600 3250 Connection ~ 14600 3250 Wire Wire Line 14600 3250 14600 3650 Wire Wire Line 14750 3650 14600 3650 Wire Wire Line 14600 4450 14600 4550 Wire Wire Line 13250 5800 14450 5800 Wire Wire Line 13250 6000 14450 6000 Wire Wire Line 1800 9200 1750 9200 Wire Wire Line 1750 9200 1750 9750 Wire Wire Line 1750 9750 2200 9750 Connection ~ 2200 9750 Wire Wire Line 4250 9200 4200 9200 Wire Wire Line 4200 9200 4200 9750 Wire Wire Line 4200 9750 4650 9750 Connection ~ 4650 9750 Wire Wire Line 9150 9200 9100 9200 Wire Wire Line 9100 9200 9100 9750 Wire Wire Line 9100 9750 9550 9750 Connection ~ 9550 9750 $Comp L Device:R_Small R6 U 1 1 612FA26A P 14150 2150 F 0 "R6" H 14209 2196 50 0000 L CNN F 1 "47k" H 14209 2105 50 0000 L CNN F 2 "Resistor_SMD:R_0603_1608Metric" H 14150 2150 50 0001 C CNN F 3 "~" H 14150 2150 50 0001 C CNN F 4 "C25819" H 14150 2150 50 0001 C CNN "LCSC" 1 14150 2150 1 0 0 -1 $EndComp Connection ~ 14150 2250 Wire Wire Line 14150 2250 14750 2250 Wire Wire Line 14450 2350 14450 2450 Wire Wire Line 14750 2650 14150 2650 Wire Wire Line 14450 1950 14450 2050 Wire Wire Line 14150 2050 14450 2050 Connection ~ 14450 2050 Wire Wire Line 14450 2050 14450 2350 $Comp L Device:R_Small R7 U 1 1 61341901 P 14150 2550 F 0 "R7" H 14209 2596 50 0000 L CNN F 1 "47k" H 14209 2505 50 0000 L CNN F 2 "Resistor_SMD:R_0603_1608Metric" H 14150 2550 50 0001 C CNN F 3 "~" H 14150 2550 50 0001 C CNN F 4 "C25819" H 14150 2550 50 0001 C CNN "LCSC" 1 14150 2550 1 0 0 -1 $EndComp Wire Wire Line 14150 2450 14450 2450 Connection ~ 14150 2650 Connection ~ 14450 2450 Wire Wire Line 14450 2450 14450 2750 $Comp L Device:R_Small R8 U 1 1 6135363A P 14150 2950 F 0 "R8" H 14209 2996 50 0000 L CNN F 1 "47k" H 14209 2905 50 0000 L CNN F 2 "Resistor_SMD:R_0603_1608Metric" H 14150 2950 50 0001 C CNN F 3 "~" H 14150 2950 50 0001 C CNN F 4 "C25819" H 14150 2950 50 0001 C CNN "LCSC" 1 14150 2950 1 0 0 -1 $EndComp Wire Wire Line 14150 2850 14450 2850 Connection ~ 14150 3050 Wire Wire Line 14150 3050 14750 3050 Connection ~ 14450 2850 Wire Wire Line 14450 2850 14450 3150 $Comp L Device:R_Small R9 U 1 1 61377DF8 P 14150 3350 F 0 "R9" H 14209 3396 50 0000 L CNN F 1 "47k" H 14209 3305 50 0000 L CNN F 2 "Resistor_SMD:R_0603_1608Metric" H 14150 3350 50 0001 C CNN F 3 "~" H 14150 3350 50 0001 C CNN F 4 "C25819" H 14150 3350 50 0001 C CNN "LCSC" 1 14150 3350 1 0 0 -1 $EndComp Wire Wire Line 14150 3250 14450 3250 Connection ~ 14150 3450 Wire Wire Line 14150 3450 14750 3450 Connection ~ 14450 3250 Wire Wire Line 14450 3250 14450 3550 Wire Wire Line 13600 2250 14150 2250 Wire Wire Line 13600 2650 14150 2650 Wire Wire Line 13600 3050 14150 3050 Wire Wire Line 13600 3450 14150 3450 NoConn ~ 2300 4500 NoConn ~ 4900 4500 NoConn ~ 7550 4500 Wire Wire Line 1500 4500 1500 4800 Wire Wire Line 1500 4800 1900 4800 Wire Wire Line 4100 4500 4100 4800 Wire Wire Line 4100 4800 4500 4800 Wire Wire Line 6750 4800 7150 4800 $Comp L power:PWR_FLAG #FLG0101 U 1 1 6152201C P 800 800 F 0 "#FLG0101" H 800 875 50 0001 C CNN F 1 "PWR_FLAG" H 800 973 50 0000 C CNN F 2 "" H 800 800 50 0001 C CNN F 3 "~" H 800 800 50 0001 C CNN 1 800 800 1 0 0 -1 $EndComp $Comp L power:PWR_FLAG #FLG0102 U 1 1 61522513 P 1600 800 F 0 "#FLG0102" H 1600 875 50 0001 C CNN F 1 "PWR_FLAG" H 1600 973 50 0000 C CNN F 2 "" H 1600 800 50 0001 C CNN F 3 "~" H 1600 800 50 0001 C CNN 1 1600 800 1 0 0 -1 $EndComp $Comp L power:PWR_FLAG #FLG0103 U 1 1 61522815 P 800 1500 F 0 "#FLG0103" H 800 1575 50 0001 C CNN F 1 "PWR_FLAG" H 800 1673 50 0000 C CNN F 2 "" H 800 1500 50 0001 C CNN F 3 "~" H 800 1500 50 0001 C CNN 1 800 1500 1 0 0 -1 $EndComp Wire Wire Line 800 800 1100 800 Connection ~ 1100 800 Wire Wire Line 1300 800 1600 800 Connection ~ 1300 800 Wire Wire Line 800 1500 1200 1500 Connection ~ 1200 1500 Wire Wire Line 13250 6550 14200 6550 Wire Wire Line 700 4300 1500 4300 Text Label 700 4300 0 50 ~ 0 MOTOR_A_PHASE_B Wire Wire Line 700 4400 1500 4400 Text Label 700 4400 0 50 ~ 0 MOTOR_A_PHASE_A Wire Wire Line 2300 4300 3050 4300 Text Label 3050 4300 2 50 ~ 0 OUT_A_PHASE_B Wire Wire Line 2300 4400 3050 4400 Text Label 3050 4400 2 50 ~ 0 OUT_A_PHASE_A Text Label 5950 4100 0 50 ~ 0 MOTOR_D_PHASE_D Wire Wire Line 5950 4100 6750 4100 $Comp L Connector:Conn_01x05_Male J12 U 1 1 606B94FD P 7250 2700 F 0 "J12" H 7222 2632 50 0000 R CNN F 1 "Motor" H 7222 2723 50 0000 R CNN F 2 "Connector_JST:JST_XH_B5B-XH-A_1x05_P2.50mm_Vertical" H 7250 2700 50 0001 C CNN F 3 "~" H 7250 2700 50 0001 C CNN F 4 "C157991" H 7222 2723 50 0001 C CNN "LCSC" F 5 "5;0;-180" H 7222 2723 50 0001 C CNN "JLCPCB_CORRECTION" 1 7250 2700 -1 0 0 -1 $EndComp Text Label 6300 2500 0 50 ~ 0 OUT_E_PHASE_A Text Label 6300 2600 0 50 ~ 0 OUT_E_PHASE_B Text Label 6300 2700 0 50 ~ 0 OUT_E_PHASE_C Text Label 6300 2800 0 50 ~ 0 OUT_E_PHASE_D Wire Wire Line 6300 2500 7050 2500 Wire Wire Line 6300 2600 7050 2600 Wire Wire Line 6300 2700 7050 2700 Wire Wire Line 6300 2800 7050 2800 Wire Wire Line 6950 2900 7050 2900 Wire Wire Line 6950 2300 6950 2900 $Comp L Connector:Conn_01x05_Male J13 U 1 1 606B9929 P 8650 2700 F 0 "J13" H 8622 2632 50 0000 R CNN F 1 "Motor" H 8622 2723 50 0000 R CNN F 2 "Connector_JST:JST_XH_B5B-XH-A_1x05_P2.50mm_Vertical" H 8650 2700 50 0001 C CNN F 3 "~" H 8650 2700 50 0001 C CNN F 4 "C157991" H 8622 2723 50 0001 C CNN "LCSC" F 5 "5;0;-180" H 8622 2723 50 0001 C CNN "JLCPCB_CORRECTION" 1 8650 2700 -1 0 0 -1 $EndComp Text Label 7700 2500 0 50 ~ 0 OUT_F_PHASE_A Text Label 7700 2600 0 50 ~ 0 OUT_F_PHASE_B Text Label 7700 2700 0 50 ~ 0 OUT_F_PHASE_C Text Label 7700 2800 0 50 ~ 0 OUT_F_PHASE_D Wire Wire Line 7700 2500 8450 2500 Wire Wire Line 7700 2600 8450 2600 Wire Wire Line 7700 2700 8450 2700 Wire Wire Line 7700 2800 8450 2800 Wire Wire Line 8350 2900 8450 2900 Wire Wire Line 8350 2300 8350 2900 $Comp L power:+12V #PWR041 U 1 1 606B993D P 6950 2300 F 0 "#PWR041" H 6950 2150 50 0001 C CNN F 1 "+12V" H 6965 2473 50 0000 C CNN F 2 "" H 6950 2300 50 0001 C CNN F 3 "" H 6950 2300 50 0001 C CNN 1 6950 2300 1 0 0 -1 $EndComp $Comp L power:+12V #PWR042 U 1 1 606B9947 P 8350 2300 F 0 "#PWR042" H 8350 2150 50 0001 C CNN F 1 "+12V" H 8365 2473 50 0000 C CNN F 2 "" H 8350 2300 50 0001 C CNN F 3 "" H 8350 2300 50 0001 C CNN 1 8350 2300 1 0 0 -1 $EndComp $Comp L Transistor_Array:ULN2003A U10 U 1 1 606E6DC1 P 9800 4100 F 0 "U10" H 9800 4767 50 0000 C CNN F 1 "TPL7407L" H 9800 4676 50 0000 C CNN F 2 "ModifiedSymbols:SOIC-16_3.9x9.9mm_P1.27mm_silk" H 9850 3550 50 0001 L CNN F 3 "~" H 9900 3900 50 0001 C CNN F 4 "C139663" H 9800 4100 50 0001 C CNN "LCSC" F 5 "C7512" H 9800 4100 50 0001 C CNN "LCSC_ALT_ULN2003A" F 6 "0;0;-90" H 9800 4100 50 0001 C CNN "JLCPCB_CORRECTION" 1 9800 4100 1 0 0 -1 $EndComp $Comp L power:GND #PWR043 U 1 1 606E6DCB P 9800 4850 F 0 "#PWR043" H 9800 4600 50 0001 C CNN F 1 "GND" H 9805 4677 50 0000 C CNN F 2 "" H 9800 4850 50 0001 C CNN F 3 "" H 9800 4850 50 0001 C CNN 1 9800 4850 1 0 0 -1 $EndComp Wire Wire Line 9800 4700 9800 4800 Wire Wire Line 10250 3600 10250 3700 Wire Wire Line 10250 3700 10200 3700 Text Label 10950 4400 2 50 ~ 0 OUT_E_PHASE_C Text Label 10950 4300 2 50 ~ 0 OUT_E_PHASE_D Wire Wire Line 10200 4400 10950 4400 Wire Wire Line 10200 4300 10950 4300 $Comp L Device:C_Small C12 U 1 1 606E6DDC P 10250 4700 F 0 "C12" H 10158 4654 50 0000 R CNN F 1 "0.1uF" H 10158 4745 50 0000 R CNN F 2 "Capacitor_SMD:C_0603_1608Metric" H 10250 4700 50 0001 C CNN F 3 "~" H 10250 4700 50 0001 C CNN F 4 "C14663" H 10250 4700 50 0001 C CNN "LCSC" 1 10250 4700 -1 0 0 1 $EndComp Wire Wire Line 10250 4600 10250 3700 Connection ~ 10250 3700 Wire Wire Line 10250 4800 9800 4800 Connection ~ 9800 4800 Wire Wire Line 9800 4800 9800 4850 $Comp L power:+12V #PWR044 U 1 1 606E6DEB P 10250 3600 F 0 "#PWR044" H 10250 3450 50 0001 C CNN F 1 "+12V" H 10265 3773 50 0000 C CNN F 2 "" H 10250 3600 50 0001 C CNN F 3 "" H 10250 3600 50 0001 C CNN 1 10250 3600 1 0 0 -1 $EndComp Wire Wire Line 8600 4400 9400 4400 Text Label 8600 4400 0 50 ~ 0 MOTOR_E_PHASE_C NoConn ~ 10200 4500 Wire Wire Line 9400 4800 9800 4800 Wire Wire Line 9400 4500 9400 4800 Text Label 8600 4300 0 50 ~ 0 MOTOR_E_PHASE_D Wire Wire Line 8600 4300 9400 4300 Wire Wire Line 6750 4500 6750 4800 $Comp L Transistor_Array:ULN2003A U8 U 1 1 6427B23E P 7150 4100 F 0 "U8" H 7150 4767 50 0000 C CNN F 1 "TPL7407L" H 7150 4676 50 0000 C CNN F 2 "ModifiedSymbols:SOIC-16_3.9x9.9mm_P1.27mm_silk" H 7200 3550 50 0001 L CNN F 3 "~" H 7250 3900 50 0001 C CNN F 4 "C139663" H 7150 4100 50 0001 C CNN "LCSC" F 5 "C7512" H 7150 4100 50 0001 C CNN "LCSC_ALT_ULN2003A" F 6 "0;0;-90" H 7150 4100 50 0001 C CNN "JLCPCB_CORRECTION" 1 7150 4100 1 0 0 -1 $EndComp Text Label 5950 4000 0 50 ~ 0 MOTOR_E_PHASE_A Text Label 5950 3900 0 50 ~ 0 MOTOR_E_PHASE_B Wire Wire Line 5950 4000 6750 4000 Wire Wire Line 5950 3900 6750 3900 Text Label 8300 4000 2 50 ~ 0 OUT_E_PHASE_A Text Label 8300 3900 2 50 ~ 0 OUT_E_PHASE_B Wire Wire Line 7550 4000 8300 4000 Wire Wire Line 8300 3900 7550 3900 Text Label 10950 4200 2 50 ~ 0 OUT_F_PHASE_A Text Label 10950 4100 2 50 ~ 0 OUT_F_PHASE_B Text Label 10950 4000 2 50 ~ 0 OUT_F_PHASE_C Text Label 10950 3900 2 50 ~ 0 OUT_F_PHASE_D Wire Wire Line 10200 4000 10950 4000 Wire Wire Line 10200 3900 10950 3900 Wire Wire Line 10200 4200 10950 4200 Wire Wire Line 10950 4100 10200 4100 Text Label 8600 4200 0 50 ~ 0 MOTOR_F_PHASE_A Text Label 8600 4100 0 50 ~ 0 MOTOR_F_PHASE_B Wire Wire Line 8600 4200 9400 4200 Wire Wire Line 8600 4100 9400 4100 Wire Wire Line 8600 4000 9400 4000 Text Label 8600 4000 0 50 ~ 0 MOTOR_F_PHASE_C Text Label 8600 3900 0 50 ~ 0 MOTOR_F_PHASE_D Wire Wire Line 8600 3900 9400 3900 Wire Wire Line 7500 8600 8350 8600 Text Label 8350 8600 2 50 ~ 0 LED_D Wire Wire Line 5050 9200 5900 9200 Text Label 5900 9200 2 50 ~ 0 LED_C Wire Wire Line 5050 9100 5900 9100 Text Label 5900 9100 2 50 ~ 0 LED_B Wire Wire Line 5050 9000 5900 9000 Text Label 5900 9000 2 50 ~ 0 LED_A Wire Wire Line 7500 8900 8350 8900 Text Label 8350 8900 2 50 ~ 0 LOOPBACK_B Wire Wire Line 5050 9300 5900 9300 Text Label 5900 9300 2 50 ~ 0 LOOPBACK_A $Comp L 74xx:74HC595 U9 U 1 1 6084DA1F P 7100 9000 F 0 "U9" H 7250 9650 50 0000 C CNN F 1 "74HC595" H 7350 9550 50 0000 C CNN F 2 "ModifiedSymbols:SOIC-16_3.9x9.9mm_P1.27mm_silk" H 7100 9000 50 0001 C CNN F 3 "http://www.ti.com/lit/ds/symlink/sn74hc595.pdf" H 7100 9000 50 0001 C CNN F 4 "C5947" H 7100 9000 50 0001 C CNN "LCSC" F 5 "0;0;-90" H 7100 9000 50 0001 C CNN "JLCPCB_CORRECTION" 1 7100 9000 1 0 0 -1 $EndComp Wire Wire Line 7100 8350 7100 8400 Wire Wire Line 6700 8800 6050 8800 Text Label 6050 8800 0 50 ~ 0 CLOCK_IN Wire Wire Line 6700 8900 6650 8900 Wire Wire Line 6650 8900 6650 8400 Wire Wire Line 6650 8400 7100 8400 Connection ~ 7100 8400 Wire Wire Line 6700 9100 6050 9100 Text Label 6050 9100 0 50 ~ 0 LATCH_IN $Comp L power:GND #PWR040 U 1 1 6084DCEC P 7100 9750 F 0 "#PWR040" H 7100 9500 50 0001 C CNN F 1 "GND" H 7105 9577 50 0000 C CNN F 2 "" H 7100 9750 50 0001 C CNN F 3 "" H 7100 9750 50 0001 C CNN 1 7100 9750 1 0 0 -1 $EndComp Wire Wire Line 7100 9750 7100 9700 Wire Wire Line 6000 8600 6700 8600 Text Label 10800 8600 2 50 ~ 0 MOTOR_E_PHASE_A Wire Wire Line 9950 8600 10800 8600 Text Label 10800 8700 2 50 ~ 0 MOTOR_E_PHASE_B Wire Wire Line 9950 8700 10800 8700 Text Label 10800 8800 2 50 ~ 0 MOTOR_E_PHASE_C Wire Wire Line 9950 8800 10800 8800 Text Label 10800 8900 2 50 ~ 0 MOTOR_E_PHASE_D Wire Wire Line 9950 8900 10800 8900 Text Label 10800 9000 2 50 ~ 0 MOTOR_F_PHASE_A Wire Wire Line 9950 9000 10800 9000 Text Label 10800 9100 2 50 ~ 0 MOTOR_F_PHASE_B Wire Wire Line 9950 9100 10800 9100 Text Label 10800 9200 2 50 ~ 0 MOTOR_F_PHASE_C Wire Wire Line 9950 9200 10800 9200 Text Label 10800 9300 2 50 ~ 0 MOTOR_F_PHASE_D Wire Wire Line 9950 9300 10800 9300 Wire Wire Line 7500 9500 8450 9500 Wire Wire Line 8450 9500 8450 8600 $Comp L power:+3.3V #PWR039 U 1 1 6084DD0A P 7100 8350 F 0 "#PWR039" H 7100 8200 50 0001 C CNN F 1 "+3.3V" H 7115 8523 50 0000 C CNN F 2 "" H 7100 8350 50 0001 C CNN F 3 "" H 7100 8350 50 0001 C CNN 1 7100 8350 1 0 0 -1 $EndComp Wire Wire Line 6700 9200 6650 9200 Wire Wire Line 6650 9200 6650 9750 Wire Wire Line 6650 9750 7100 9750 Connection ~ 7100 9750 Wire Wire Line 7500 8800 8350 8800 Text Label 8350 8800 2 50 ~ 0 LED_F Wire Wire Line 7500 8700 8350 8700 Text Label 8350 8700 2 50 ~ 0 LED_E Text Label 16100 6050 2 50 ~ 0 SENSOR_E Text Label 16100 6150 2 50 ~ 0 SENSOR_F Wire Wire Line 16100 6050 15650 6050 Wire Wire Line 15650 6150 16100 6150 $Comp L Device:LED_Small D5 U 1 1 609458EA P 10500 2350 F 0 "D5" H 10500 2143 50 0000 C CNN F 1 "LED" H 10500 2234 50 0000 C CNN F 2 "ModifiedSymbols:LED_0603_1608Metric_Silkscreen" V 10500 2350 50 0001 C CNN F 3 "~" V 10500 2350 50 0001 C CNN F 4 "C2286" H 10500 2350 50 0001 C CNN "LCSC" F 5 "C72044" H 10500 2350 50 0001 C CNN "LCSC_ALT_LED" 1 10500 2350 -1 0 0 1 $EndComp $Comp L Device:LED_Small D6 U 1 1 60945B22 P 10500 2650 F 0 "D6" H 10500 2443 50 0000 C CNN F 1 "LED" H 10500 2534 50 0000 C CNN F 2 "ModifiedSymbols:LED_0603_1608Metric_Silkscreen" V 10500 2650 50 0001 C CNN F 3 "~" V 10500 2650 50 0001 C CNN F 4 "C2286" H 10500 2650 50 0001 C CNN "LCSC" F 5 "C72044" H 10500 2650 50 0001 C CNN "LCSC_ALT_LED" 1 10500 2650 -1 0 0 1 $EndComp Wire Wire Line 10600 2650 10700 2650 Wire Wire Line 10700 2350 10600 2350 $Comp L Device:R_Small R1 U 1 1 60945B2E P 10100 2350 F 0 "R1" V 9904 2350 50 0000 C CNN F 1 "220R" V 9995 2350 50 0000 C CNN F 2 "Resistor_SMD:R_0603_1608Metric" H 10100 2350 50 0001 C CNN F 3 "~" H 10100 2350 50 0001 C CNN F 4 "C22962" H 10100 2350 50 0001 C CNN "LCSC" 1 10100 2350 0 1 1 0 $EndComp Wire Wire Line 10200 2350 10400 2350 Wire Wire Line 10000 2350 9350 2350 Text Label 9350 2350 0 50 ~ 0 LED_E $Comp L Device:R_Small R10 U 1 1 60945B3B P 10100 2650 F 0 "R10" V 9904 2650 50 0000 C CNN F 1 "220R" V 9995 2650 50 0000 C CNN F 2 "Resistor_SMD:R_0603_1608Metric" H 10100 2650 50 0001 C CNN F 3 "~" H 10100 2650 50 0001 C CNN F 4 "C22962" H 10100 2650 50 0001 C CNN "LCSC" 1 10100 2650 0 1 1 0 $EndComp Wire Wire Line 10200 2650 10400 2650 Wire Wire Line 10000 2650 9350 2650 Text Label 9350 2650 0 50 ~ 0 LED_F Wire Wire Line 10700 2750 10700 2650 Connection ~ 10700 2050 Connection ~ 10700 2350 Wire Wire Line 10700 2350 10700 2050 Connection ~ 10700 2650 Wire Wire Line 10700 2650 10700 2350 $Comp L Device:C_Small C11 U 1 1 6098AE24 P 5100 1050 F 0 "C11" H 5192 1096 50 0000 L CNN F 1 "0.1uF" H 5192 1005 50 0000 L CNN F 2 "Capacitor_SMD:C_0603_1608Metric" H 5100 1050 50 0001 C CNN F 3 "~" H 5100 1050 50 0001 C CNN F 4 "C14663" H 5100 1050 50 0001 C CNN "LCSC" 1 5100 1050 1 0 0 -1 $EndComp Wire Wire Line 4950 950 5100 950 Wire Wire Line 5100 1150 4950 1150 Connection ~ 4950 950 Connection ~ 4950 1150 Text Label 13600 3850 0 50 ~ 0 SENSOR_E Text Label 13600 4250 0 50 ~ 0 SENSOR_F $Comp L Connector:Conn_01x03_Male J14 U 1 1 60A61F26 P 14950 3950 F 0 "J14" H 14922 3882 50 0000 R CNN F 1 "Sensor" H 14922 3973 50 0000 R CNN F 2 "Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_Vertical" H 14950 3950 50 0001 C CNN F 3 "~" H 14950 3950 50 0001 C CNN F 4 "C49257" H 14922 3973 50 0001 C CNN "LCSC" F 5 "0;2.54;-90" H 14922 3973 50 0001 C CNN "JLCPCB_CORRECTION" 1 14950 3950 -1 0 0 1 $EndComp $Comp L Connector:Conn_01x03_Male J15 U 1 1 60A61F30 P 14950 4350 F 0 "J15" H 14922 4282 50 0000 R CNN F 1 "Sensor" H 14922 4373 50 0000 R CNN F 2 "Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_Vertical" H 14950 4350 50 0001 C CNN F 3 "~" H 14950 4350 50 0001 C CNN F 4 "C49257" H 14922 4373 50 0001 C CNN "LCSC" F 5 "0;2.54;-90" H 14922 4373 50 0001 C CNN "JLCPCB_CORRECTION" 1 14950 4350 -1 0 0 1 $EndComp Wire Wire Line 14450 3950 14750 3950 Wire Wire Line 14450 3950 14450 4050 Wire Wire Line 14450 4350 14750 4350 Connection ~ 14450 3950 Wire Wire Line 14600 3650 14600 4050 Wire Wire Line 14750 4050 14600 4050 Connection ~ 14600 4050 Wire Wire Line 14600 4050 14600 4450 Wire Wire Line 14750 4450 14600 4450 $Comp L Device:R_Small R11 U 1 1 60A61F43 P 14150 3750 F 0 "R11" H 14209 3796 50 0000 L CNN F 1 "47k" H 14209 3705 50 0000 L CNN F 2 "Resistor_SMD:R_0603_1608Metric" H 14150 3750 50 0001 C CNN F 3 "~" H 14150 3750 50 0001 C CNN F 4 "C25819" H 14150 3750 50 0001 C CNN "LCSC" 1 14150 3750 1 0 0 -1 $EndComp Connection ~ 14150 3850 Wire Wire Line 14150 3850 14750 3850 Wire Wire Line 14450 3650 14450 3950 $Comp L Device:R_Small R12 U 1 1 60A61F50 P 14150 4150 F 0 "R12" H 14209 4196 50 0000 L CNN F 1 "47k" H 14209 4105 50 0000 L CNN F 2 "Resistor_SMD:R_0603_1608Metric" H 14150 4150 50 0001 C CNN F 3 "~" H 14150 4150 50 0001 C CNN F 4 "C25819" H 14150 4150 50 0001 C CNN "LCSC" 1 14150 4150 1 0 0 -1 $EndComp Wire Wire Line 14150 4050 14450 4050 Connection ~ 14150 4250 Wire Wire Line 14150 4250 14750 4250 Connection ~ 14450 4050 Wire Wire Line 14450 4050 14450 4350 Wire Wire Line 13600 3850 14150 3850 Wire Wire Line 13600 4250 14150 4250 Connection ~ 14600 3650 Wire Wire Line 14150 3650 14450 3650 Wire Wire Line 14450 3650 14450 3550 Connection ~ 14450 3650 Connection ~ 14450 3550 Connection ~ 14600 4450 $Comp L Mechanical:MountingHole_Pad H5 U 1 1 60AEF190 P 15800 750 F 0 "H5" H 15900 796 50 0000 L CNN F 1 "MountingHole" H 15900 705 50 0000 L CNN F 2 "MountingHole:MountingHole_3.2mm_M3_ISO7380_Pad" H 15800 750 50 0001 C CNN F 3 "~" H 15800 750 50 0001 C CNN 1 15800 750 1 0 0 -1 $EndComp Text Label 8200 6200 0 50 ~ 0 CLOCK_IN Text Label 8200 6800 0 50 ~ 0 MOTOR_OUT_PRE_BUFFER Text Label 11050 6250 2 50 ~ 0 CLOCK_OUT Text Label 11050 6850 2 50 ~ 0 MOTOR_OUT Wire Wire Line 9450 6300 9350 6300 Wire Wire Line 9350 6300 9350 6500 Wire Wire Line 9450 6500 9350 6500 Connection ~ 9350 6500 Wire Wire Line 9350 6700 9450 6700 Connection ~ 9350 6700 Wire Wire Line 9850 7250 9850 7450 Connection ~ 9850 7450 Wire Wire Line 8200 6200 9450 6200 Wire Wire Line 8200 6400 9450 6400 Wire Wire Line 8200 6800 9450 6800 Wire Wire Line 4650 950 4800 950 Connection ~ 4650 950 Connection ~ 4800 950 Wire Wire Line 4800 1150 4650 1150 Connection ~ 4800 1150 Connection ~ 4650 1150 Wire Wire Line 9350 6700 9350 6900 $Comp L 74HC125:74HC125 U3 U 1 1 602AC0A5 P 9850 6550 F 0 "U3" H 9850 7431 50 0000 C CNN F 1 "74HC125" H 9850 7340 50 0000 C CNN F 2 "ModifiedSymbols:SOIC-14_3.9x8.7mm_P1.27mm_silk" H 9850 6650 50 0001 C CNN F 3 "" H 9850 6650 50 0001 C CNN F 4 "C5598" H 9850 6550 50 0001 C CNN "LCSC" F 5 "0;0;-90" H 9850 6550 50 0001 C CNN "JLCPCB_CORRECTION" F 6 "C7390" H 9850 6550 50 0001 C CNN "LCSC_ALT_BUFFER" F 7 "C94424" H 9850 6550 50 0001 C CNN "LCSC_ALT_BUFFER2" 1 9850 6550 1 0 0 -1 $EndComp Wire Wire Line 10250 6250 11050 6250 Wire Wire Line 10250 6450 11050 6450 Wire Wire Line 10250 6850 11050 6850 Wire Wire Line 2900 6400 3650 6400 Wire Wire Line 2900 6700 3650 6700 Wire Wire Line 2900 6500 3650 6500 Wire Wire Line 2900 6600 3650 6600 Wire Wire Line 9450 6900 9350 6900 Connection ~ 9350 6900 Wire Wire Line 9350 6900 9350 7450 NoConn ~ 14800 850 NoConn ~ 15050 850 NoConn ~ 15300 850 NoConn ~ 15550 850 NoConn ~ 15800 850 $Comp L Mechanical:MountingHole H6 U 1 1 611C9319 P 14800 1400 F 0 "H6" H 14900 1446 50 0000 L CNN F 1 "MountingHole" H 14900 1355 50 0000 L CNN F 2 "JLCPCB:AssemblyToolingHole" H 14800 1400 50 0001 C CNN F 3 "~" H 14800 1400 50 0001 C CNN 1 14800 1400 1 0 0 -1 $EndComp $Comp L Mechanical:MountingHole H7 U 1 1 611C9E09 P 15050 1400 F 0 "H7" H 15150 1446 50 0000 L CNN F 1 "MountingHole" H 15150 1355 50 0000 L CNN F 2 "JLCPCB:AssemblyToolingHole" H 15050 1400 50 0001 C CNN F 3 "~" H 15050 1400 50 0001 C CNN 1 15050 1400 1 0 0 -1 $EndComp Text Notes 14750 1250 0 50 ~ 0 JLCPCB Assembly Tooling Holes Text Notes 700 3300 0 50 ~ 0 TPL7407L or TPL7407LA will work. OUT7 is avoided because the datasheet recommends an external flyback diode for TPL7407L, and we have spare channels we can use instead. Text Notes 2350 4600 0 50 ~ 0 Do not use O7 on TPL7407L\n(see note above) Text Notes 4950 4600 0 50 ~ 0 Do not use O7 on TPL7407L\n(see note above) Text Notes 7600 4600 0 50 ~ 0 Do not use O7 on TPL7407L\n(see note above) Text Notes 10250 4600 0 50 ~ 0 Do not use O7 on TPL7407L\n(see note above) Text Notes 10250 7550 0 50 ~ 0 Motor data does not need to be buffered for transmission reasons\n(it is 1:1 from one board to the next, not bussed), but it is buffered\nto keep timing in sync with the buffered clock.\n\n74HC595 chaining relies on narrow propagation delay > hold time\nmargin to work, so we need to be cognizant of anything that may\ncause data to change sooner after the rising clock edge (reducing\neffective propagation delay) $Comp L Connector:Screw_Terminal_01x02 J16 U 1 1 604CA397 P 1600 900 F 0 "J16" H 1680 892 50 0000 L CNN F 1 "Power" H 1680 801 50 0000 L CNN F 2 "ScrewTerminals:Generic-5.08-2P" H 1600 900 50 0001 C CNN F 3 "~" H 1600 900 50 0001 C CNN F 4 "C8465" H 1600 900 50 0001 C CNN "LCSC" F 5 "C395868" H 1600 900 50 0001 C CNN "LCSC_ALT_SCREW_DIBO" F 6 "2.54;0;180" H 1600 900 50 0001 C CNN "JLCPCB_CORRECTION" 1 1600 900 1 0 0 -1 $EndComp $Comp L Connector:Screw_Terminal_01x02 J17 U 1 1 604FD568 P 1600 1100 F 0 "J17" H 1680 1092 50 0000 L CNN F 1 "Power" H 1680 1001 50 0000 L CNN F 2 "ScrewTerminals:Generic-5.08-2P" H 1600 1100 50 0001 C CNN F 3 "~" H 1600 1100 50 0001 C CNN F 4 "C8465" H 1600 1100 50 0001 C CNN "LCSC" F 5 "C395868" H 1600 1100 50 0001 C CNN "LCSC_ALT_SCREW_DIBO" F 6 "2.54;0;180" H 1600 1100 50 0001 C CNN "JLCPCB_CORRECTION" 1 1600 1100 1 0 0 -1 $EndComp $Comp L Connector:Screw_Terminal_01x02 J18 U 1 1 604FD827 P 1600 1300 F 0 "J18" H 1680 1292 50 0000 L CNN F 1 "Power" H 1680 1201 50 0000 L CNN F 2 "ScrewTerminals:Generic-5.08-2P" H 1600 1300 50 0001 C CNN F 3 "~" H 1600 1300 50 0001 C CNN F 4 "C8465" H 1600 1300 50 0001 C CNN "LCSC" F 5 "C395868" H 1600 1300 50 0001 C CNN "LCSC_ALT_SCREW_DIBO" F 6 "2.54;0;180" H 1600 1300 50 0001 C CNN "JLCPCB_CORRECTION" 1 1600 1300 1 0 0 -1 $EndComp $Comp L Device:R_Small R14 U 1 1 60866A83 P 14200 6750 F 0 "R14" H 14259 6796 50 0000 L CNN F 1 "47k" H 14259 6705 50 0000 L CNN F 2 "Resistor_SMD:R_0603_1608Metric" H 14200 6750 50 0001 C CNN F 3 "~" H 14200 6750 50 0001 C CNN F 4 "C25819" H 14200 6750 50 0001 C CNN "LCSC" 1 14200 6750 1 0 0 -1 $EndComp Wire Wire Line 14200 6550 14200 6650 Connection ~ 14200 6550 Wire Wire Line 14200 6550 14450 6550 Wire Wire Line 14200 6850 14200 7000 Wire Wire Line 14200 7000 15050 7000 Connection ~ 15050 7000 Text Label 1450 6600 0 50 ~ 0 SENSOR_OUT Text Label 1450 6500 0 50 ~ 0 MOTOR_IN Text Label 1450 6700 0 50 ~ 0 LATCH_IN Text Label 1450 6400 0 50 ~ 0 CLOCK_IN Wire Wire Line 1450 6600 2050 6600 Wire Wire Line 1450 6500 2050 6500 Wire Wire Line 1450 6700 2050 6700 Wire Wire Line 1450 6400 2050 6400 $Comp L Connector_Generic:Conn_02x04_Odd_Even J19 U 1 1 61861E9F P 2250 6500 F 0 "J19" H 2300 6817 50 0000 C CNN F 1 "IDC" H 2300 6726 50 0000 C CNN F 2 "ModifiedSymbols:IDC-Header_2x04_P2.54mm_Vertical" H 2250 6500 50 0001 C CNN F 3 "~" H 2250 6500 50 0001 C CNN F 4 "C9135" H 2300 6726 50 0001 C CNN "LCSC" F 5 "1.27;3.81;-90" H 2300 6726 50 0001 C CNN "JLCPCB_CORRECTION" 1 2250 6500 1 0 0 -1 $EndComp Wire Wire Line 2550 6400 2550 6500 Connection ~ 2550 6500 Wire Wire Line 2550 6500 2550 6600 Connection ~ 2550 6600 Wire Wire Line 2550 6600 2550 6700 Connection ~ 2550 6700 Wire Wire Line 2550 6700 2550 6850 $Comp L Connector_Generic:Conn_02x04_Odd_Even J20 U 1 1 618D5E87 P 3850 6500 F 0 "J20" H 3900 6817 50 0000 C CNN F 1 "IDC" H 3900 6726 50 0000 C CNN F 2 "ModifiedSymbols:IDC-Header_2x04_P2.54mm_Vertical" H 3850 6500 50 0001 C CNN F 3 "~" H 3850 6500 50 0001 C CNN F 4 "C9135" H 3900 6726 50 0001 C CNN "LCSC" F 5 "1.27;3.81;-90" H 3900 6726 50 0001 C CNN "JLCPCB_CORRECTION" 1 3850 6500 1 0 0 -1 $EndComp Wire Wire Line 4150 6850 4150 6700 Connection ~ 4150 6500 Wire Wire Line 4150 6500 4150 6400 Connection ~ 4150 6600 Wire Wire Line 4150 6600 4150 6500 Connection ~ 4150 6700 Wire Wire Line 4150 6700 4150 6600 Text Label 8200 6400 0 50 ~ 0 LATCH_IN Text Label 11050 6450 2 50 ~ 0 LATCH_OUT NoConn ~ 10250 6650 Wire Wire Line 9450 6600 9350 6600 Wire Wire Line 9350 6500 9350 6600 Wire Wire Line 9350 6600 9350 6700 Connection ~ 9350 6600 Text Label 13250 5800 0 50 ~ 0 LATCH_IN $Comp L Device:CP_Small C8 U 1 1 60F56FCC P 3500 1050 F 0 "C8" H 3588 1096 50 0000 L CNN F 1 "10uF" H 3588 1005 50 0000 L CNN F 2 "Capacitor_SMD:CP_Elec_4x5.3" H 3500 1050 50 0001 C CNN F 3 "~" H 3500 1050 50 0001 C CNN F 4 "C176661" H 3500 1050 50 0001 C CNN "LCSC" 1 3500 1050 1 0 0 -1 $EndComp $EndSCHEMATC ================================================ FILE: electronics/chainlinkDriver/fp-lib-table ================================================ (fp_lib_table (lib (name JST_XH_Connectors)(type KiCad)(uri "$(KIPRJMOD)/../lib/JST_XH_Connectors.pretty")(options "")(descr "")) (lib (name Mega2560Shield)(type KiCad)(uri ${KIPRJMOD}/../lib/Mega2560Shield.pretty)(options "")(descr "")(disabled)) (lib (name ULN2003AModule)(type KiCad)(uri ${KIPRJMOD}/../lib/ULN2003AModule.pretty)(options "")(descr "")(disabled)) (lib (name ST7789)(type KiCad)(uri ${KIPRJMOD}/../lib/ST7789.pretty)(options "")(descr "")) (lib (name INA219)(type KiCad)(uri ${KIPRJMOD}/../lib/INA219.pretty)(options "")(descr "")) (lib (name ESP32)(type KiCad)(uri ${KIPRJMOD}/../lib/ESP32.pretty)(options "")(descr "")) (lib (name RS485)(type KiCad)(uri ${KIPRJMOD}/../lib/RS485.pretty)(options "")(descr "")(disabled)) (lib (name LevelShifterModule)(type KiCad)(uri ${KIPRJMOD}/../lib/LevelShifterModule.pretty)(options "")(descr "")) (lib (name ModifiedSymbols)(type KiCad)(uri /home/scott/src/splitflap/electronics/lib/ModifiedSymbols.pretty)(options "")(descr "")) (lib (name JLCPCB)(type KiCad)(uri /home/scott/src/splitflap/electronics/lib/JLCPCB.pretty)(options "")(descr "")) (lib (name ScrewTerminals)(type KiCad)(uri /home/scott/src/splitflap/electronics/lib/ScrewTerminals.pretty)(options "")(descr "")) ) ================================================ FILE: electronics/chainlinkDriver/sym-lib-table ================================================ (sym_lib_table (lib (name Mega2560Shield)(type Legacy)(uri ${KIPRJMOD}/../lib/Mega2560Shield.lib)(options "")(descr "")) (lib (name ULN2003AModule)(type Legacy)(uri ${KIPRJMOD}/../lib/ULN2003AModule.lib)(options "")(descr "")) (lib (name oled)(type Legacy)(uri ${KIPRJMOD}/../lib/oled.lib)(options "")(descr "")) (lib (name INA219_Breakout)(type Legacy)(uri ${KIPRJMOD}/../lib/INA219_Breakout.lib)(options "")(descr "")) (lib (name CustomPower)(type Legacy)(uri ${KIPRJMOD}/../lib/CustomPower.lib)(options "")(descr "")) (lib (name ESP32Modules)(type Legacy)(uri ${KIPRJMOD}/../lib/ESP32Modules.lib)(options "")(descr "")) (lib (name LM339)(type Legacy)(uri ${KIPRJMOD}/../lib/LM339.lib)(options "")(descr "")) (lib (name LCD)(type Legacy)(uri ${KIPRJMOD}/../lib/LCD.lib)(options "")(descr "")) (lib (name LevelShifterModule)(type Legacy)(uri ${KIPRJMOD}/../lib/LevelShifterModule.lib)(options "")(descr "")) (lib (name RS485Module)(type Legacy)(uri ${KIPRJMOD}/../lib/RS485Module.lib)(options "")(descr "")) (lib (name screw_terminal_01x03_power_output)(type Legacy)(uri ${KIPRJMOD}/../lib/screw_terminal_01x03_power_output.lib)(options "")(descr "")) (lib (name 74HC165_2)(type Legacy)(uri ${KIPRJMOD}/../lib/74HC165_2.lib)(options "")(descr "")) (lib (name 74HC125)(type Legacy)(uri ${KIPRJMOD}/../lib/74HC125.lib)(options "")(descr "")) ) ================================================ FILE: electronics/chainlinkDriverTester/.gitignore ================================================ *.xml ================================================ FILE: electronics/chainlinkDriverTester/chainlinkDriverTester-cache.lib ================================================ EESchema-LIBRARY Version 2.4 #encoding utf-8 # # Analog_ADC_INA219BxD # DEF Analog_ADC_INA219BxD U 0 20 Y Y 1 F N F0 "U" -250 350 50 H V C CNN F1 "Analog_ADC_INA219BxD" 200 350 50 H V C CNN F2 "Package_SO:SOIC-8_3.9x4.9mm_P1.27mm" 800 -350 50 H I C CNN F3 "" 350 -100 50 H I C CNN ALIAS INA219BxD $FPLIST SOIC*3.9x4.9mm*P1.27mm* $ENDFPLIST DRAW S -300 300 300 -300 0 1 10 f X A1 1 400 -100 100 L 50 50 1 1 I X A0 2 400 -200 100 L 50 50 1 1 I X SDA 3 400 200 100 L 50 50 1 1 B X SCL 4 400 100 100 L 50 50 1 1 I X VS 5 0 400 100 D 50 50 1 1 W X GND 6 0 -400 100 U 50 50 1 1 W X IN- 7 -400 -100 100 R 50 50 1 1 I X IN+ 8 -400 100 100 R 50 50 1 1 I ENDDRAW ENDDEF # # BuckModule_Buck # DEF BuckModule_Buck U 0 40 Y Y 1 F N F0 "U" 0 0 50 H V C CNN F1 "BuckModule_Buck" 0 0 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW S -350 150 400 -150 0 1 0 f X IN IN -450 100 100 R 50 50 1 1 P X IN_GND IN_GND -450 -100 100 R 50 50 1 1 P X OUT OUT 500 100 100 L 50 50 1 1 P X OUT_GND OUT_GND 500 -100 100 L 50 50 1 1 P ENDDRAW ENDDEF # # Connector_Barrel_Jack_Switch # DEF Connector_Barrel_Jack_Switch J 0 20 Y N 1 F N F0 "J" 0 210 50 H V C CNN F1 "Connector_Barrel_Jack_Switch" 0 -200 50 H V C CNN F2 "" 50 -40 50 H I C CNN F3 "" 50 -40 50 H I C CNN $FPLIST BarrelJack* $ENDFPLIST DRAW A -130 100 25 901 -901 0 1 10 F -130 125 -130 75 A -130 100 25 901 -901 0 1 10 N -130 125 -130 75 S -200 150 200 -150 0 1 10 f S 145 125 -130 75 0 1 10 F P 2 0 1 10 50 -90 75 -65 N P 2 0 1 10 200 100 150 100 N P 4 0 1 10 200 0 50 0 50 -90 25 -65 N P 6 0 1 10 -150 -100 -100 -100 -50 -50 0 -100 100 -100 200 -100 N X ~ 1 300 100 100 L 50 50 1 1 P X ~ 2 300 -100 100 L 50 50 1 1 P X ~ 3 300 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # Connector_Conn_01x03_Female # DEF Connector_Conn_01x03_Female J 0 40 Y N 1 F N F0 "J" 0 200 50 H V C CNN F1 "Connector_Conn_01x03_Female" 0 -200 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST Connector*:*_1x??_* $ENDFPLIST DRAW A 0 -100 20 901 -901 1 1 6 N 0 -80 0 -120 A 0 0 20 901 -901 1 1 6 N 0 20 0 -20 A 0 100 20 901 -901 1 1 6 N 0 120 0 80 P 2 1 1 6 -50 -100 -20 -100 N P 2 1 1 6 -50 0 -20 0 N P 2 1 1 6 -50 100 -20 100 N X Pin_1 1 -200 100 150 R 50 50 1 1 P X Pin_2 2 -200 0 150 R 50 50 1 1 P X Pin_3 3 -200 -100 150 R 50 50 1 1 P ENDDRAW ENDDEF # # Connector_Conn_01x03_Male # DEF Connector_Conn_01x03_Male J 0 40 Y N 1 F N F0 "J" 0 200 50 H V C CNN F1 "Connector_Conn_01x03_Male" 0 -200 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST Connector*:*_1x??_* $ENDFPLIST DRAW S 34 -95 0 -105 1 1 6 F S 34 5 0 -5 1 1 6 F S 34 105 0 95 1 1 6 F P 2 1 1 6 50 -100 34 -100 N P 2 1 1 6 50 0 34 0 N P 2 1 1 6 50 100 34 100 N X Pin_1 1 200 100 150 L 50 50 1 1 P X Pin_2 2 200 0 150 L 50 50 1 1 P X Pin_3 3 200 -100 150 L 50 50 1 1 P ENDDRAW ENDDEF # # Connector_Conn_01x04_Female # DEF Connector_Conn_01x04_Female J 0 40 Y N 1 F N F0 "J" 0 200 50 H V C CNN F1 "Connector_Conn_01x04_Female" 0 -300 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST Connector*:*_1x??_* $ENDFPLIST DRAW A 0 -200 20 901 -901 1 1 6 N 0 -180 0 -220 A 0 -100 20 901 -901 1 1 6 N 0 -80 0 -120 A 0 0 20 901 -901 1 1 6 N 0 20 0 -20 A 0 100 20 901 -901 1 1 6 N 0 120 0 80 P 2 1 1 6 -50 -200 -20 -200 N P 2 1 1 6 -50 -100 -20 -100 N P 2 1 1 6 -50 0 -20 0 N P 2 1 1 6 -50 100 -20 100 N X Pin_1 1 -200 100 150 R 50 50 1 1 P X Pin_2 2 -200 0 150 R 50 50 1 1 P X Pin_3 3 -200 -100 150 R 50 50 1 1 P X Pin_4 4 -200 -200 150 R 50 50 1 1 P ENDDRAW ENDDEF # # Connector_Conn_01x05_Male # DEF Connector_Conn_01x05_Male J 0 40 Y N 1 F N F0 "J" 0 300 50 H V C CNN F1 "Connector_Conn_01x05_Male" 0 -300 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST Connector*:*_1x??_* $ENDFPLIST DRAW S 34 -195 0 -205 1 1 6 F S 34 -95 0 -105 1 1 6 F S 34 5 0 -5 1 1 6 F S 34 105 0 95 1 1 6 F S 34 205 0 195 1 1 6 F P 2 1 1 6 50 -200 34 -200 N P 2 1 1 6 50 -100 34 -100 N P 2 1 1 6 50 0 34 0 N P 2 1 1 6 50 100 34 100 N P 2 1 1 6 50 200 34 200 N X Pin_1 1 200 200 150 L 50 50 1 1 P X Pin_2 2 200 100 150 L 50 50 1 1 P X Pin_3 3 200 0 150 L 50 50 1 1 P X Pin_4 4 200 -100 150 L 50 50 1 1 P X Pin_5 5 200 -200 150 L 50 50 1 1 P ENDDRAW ENDDEF # # Connector_Generic_Conn_02x04_Odd_Even # DEF Connector_Generic_Conn_02x04_Odd_Even J 0 40 Y N 1 F N F0 "J" 50 200 50 H V C CNN F1 "Connector_Generic_Conn_02x04_Odd_Even" 50 -300 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST Connector*:*_2x??_* $ENDFPLIST DRAW S -50 -195 0 -205 1 1 6 N S -50 -95 0 -105 1 1 6 N S -50 5 0 -5 1 1 6 N S -50 105 0 95 1 1 6 N S -50 150 150 -250 1 1 10 f S 150 -195 100 -205 1 1 6 N S 150 -95 100 -105 1 1 6 N S 150 5 100 -5 1 1 6 N S 150 105 100 95 1 1 6 N X Pin_1 1 -200 100 150 R 50 50 1 1 P X Pin_2 2 300 100 150 L 50 50 1 1 P X Pin_3 3 -200 0 150 R 50 50 1 1 P X Pin_4 4 300 0 150 L 50 50 1 1 P X Pin_5 5 -200 -100 150 R 50 50 1 1 P X Pin_6 6 300 -100 150 L 50 50 1 1 P X Pin_7 7 -200 -200 150 R 50 50 1 1 P X Pin_8 8 300 -200 150 L 50 50 1 1 P ENDDRAW ENDDEF # # Connector_Screw_Terminal_01x02 # DEF Connector_Screw_Terminal_01x02 J 0 40 Y N 1 F N F0 "J" 0 100 50 H V C CNN F1 "Connector_Screw_Terminal_01x02" 0 -200 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST TerminalBlock*:* $ENDFPLIST DRAW C 0 -100 25 1 1 6 N C 0 0 25 1 1 6 N S -50 50 50 -150 1 1 10 f P 2 1 1 6 -21 -87 13 -120 N P 2 1 1 6 -21 13 13 -20 N P 2 1 1 6 -14 -80 20 -113 N P 2 1 1 6 -14 20 20 -13 N X Pin_1 1 -200 0 150 R 50 50 1 1 P X Pin_2 2 -200 -100 150 R 50 50 1 1 P ENDDRAW ENDDEF # # Connector_TestPoint # DEF Connector_TestPoint TP 0 30 N N 1 F N F0 "TP" 0 270 50 H V C CNN F1 "Connector_TestPoint" 0 200 50 H V C CNN F2 "" 200 0 50 H I C CNN F3 "" 200 0 50 H I C CNN $FPLIST Pin* Test* $ENDFPLIST DRAW C 0 130 30 0 1 0 N X 1 1 0 0 100 U 50 50 1 1 P ENDDRAW ENDDEF # # Device_Buzzer # DEF Device_Buzzer BZ 0 1 Y N 1 F N F0 "BZ" 150 50 50 H V L CNN F1 "Device_Buzzer" 150 -50 50 H V L CNN F2 "" -25 100 50 V I C CNN F3 "" -25 100 50 V I C CNN $FPLIST *Buzzer* $ENDFPLIST DRAW A 0 0 125 -899 899 0 1 0 N 0 -125 0 125 P 2 0 1 0 -65 75 -45 75 N P 2 0 1 0 -55 85 -55 65 N P 2 0 1 0 0 125 0 -125 N X - 1 -100 100 100 R 50 50 1 1 P X + 2 -100 -100 100 R 50 50 1 1 P ENDDRAW ENDDEF # # Device_CP_Small # DEF Device_CP_Small C 0 10 N N 1 F N F0 "C" 10 70 50 H V L CNN F1 "Device_CP_Small" 10 -80 50 H V L CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST CP_* $ENDFPLIST DRAW S -60 -12 60 -27 0 1 0 F S -60 27 60 12 0 1 0 N P 2 0 1 0 -50 60 -30 60 N P 2 0 1 0 -40 50 -40 70 N X ~ 1 0 100 73 D 50 50 1 1 P X ~ 2 0 -100 73 U 50 50 1 1 P ENDDRAW ENDDEF # # Device_C_Small # DEF Device_C_Small C 0 10 N N 1 F N F0 "C" 10 70 50 H V L CNN F1 "Device_C_Small" 10 -80 50 H V L CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST C_* $ENDFPLIST DRAW P 2 0 1 13 -60 -20 60 -20 N P 2 0 1 12 -60 20 60 20 N X ~ 1 0 100 80 D 50 50 1 1 P X ~ 2 0 -100 80 U 50 50 1 1 P ENDDRAW ENDDEF # # Device_D_Schottky_Small # DEF Device_D_Schottky_Small D 0 10 N N 1 F N F0 "D" -50 80 50 H V L CNN F1 "Device_D_Schottky_Small" -280 -80 50 H V L CNN F2 "" 0 0 50 V I C CNN F3 "" 0 0 50 V I C CNN $FPLIST TO-???* *_Diode_* *SingleDiode* D_* $ENDFPLIST DRAW P 2 0 1 0 -30 0 30 0 N P 4 0 1 10 30 -40 -30 0 30 40 30 -40 N P 6 0 1 10 -50 30 -50 40 -30 40 -30 -40 -10 -40 -10 -30 N X K 1 -100 0 70 R 50 50 1 1 P X A 2 100 0 70 L 50 50 1 1 P ENDDRAW ENDDEF # # Device_Fuse # DEF Device_Fuse F 0 0 N Y 1 F N F0 "F" 80 0 50 V V C CNN F1 "Device_Fuse" -75 0 50 V V C CNN F2 "" -70 0 50 V I C CNN F3 "" 0 0 50 H I C CNN $FPLIST *Fuse* $ENDFPLIST DRAW S -30 -100 30 100 0 1 10 N P 2 0 1 0 0 100 0 -100 N X ~ 1 0 150 50 D 50 50 1 1 P X ~ 2 0 -150 50 U 50 50 1 1 P ENDDRAW ENDDEF # # Device_LED_Small # DEF Device_LED_Small D 0 10 N N 1 F N F0 "D" -50 125 50 H V L CNN F1 "Device_LED_Small" -175 -100 50 H V L CNN F2 "" 0 0 50 V I C CNN F3 "" 0 0 50 V I C CNN $FPLIST LED* LED_SMD:* LED_THT:* $ENDFPLIST DRAW P 2 0 1 10 -30 -40 -30 40 N P 2 0 1 0 40 0 -30 0 N P 4 0 1 10 30 -40 -30 0 30 40 30 -40 N P 5 0 1 0 0 30 -20 50 -10 50 -20 50 -20 40 N P 5 0 1 0 20 50 0 70 10 70 0 70 0 60 N X K 1 -100 0 70 R 50 50 1 1 P X A 2 100 0 70 L 50 50 1 1 P ENDDRAW ENDDEF # # Device_Polyfuse_Small # DEF Device_Polyfuse_Small F 0 0 N Y 1 F N F0 "F" -75 0 50 V V C CNN F1 "Device_Polyfuse_Small" 75 0 50 V V C CNN F2 "" 50 -200 50 H I L CNN F3 "" 0 0 50 H I C CNN $FPLIST *polyfuse* *PTC* $ENDFPLIST DRAW S -20 50 20 -50 0 1 0 N P 2 0 1 0 0 100 0 -100 N P 4 0 1 0 -40 50 -40 30 40 -30 40 -50 N X ~ 1 0 100 25 D 50 50 1 1 P X ~ 2 0 -100 25 U 50 50 1 1 P ENDDRAW ENDDEF # # Device_R_Small # DEF Device_R_Small R 0 10 N N 1 F N F0 "R" 30 20 50 H V L CNN F1 "Device_R_Small" 30 -40 50 H V L CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST R_* $ENDFPLIST DRAW S -30 70 30 -70 0 1 8 N X ~ 1 0 100 30 D 50 50 1 1 P X ~ 2 0 -100 30 U 50 50 1 1 P ENDDRAW ENDDEF # # ESP32Modules_TTGO_TDisplay # DEF ESP32Modules_TTGO_TDisplay U 0 40 Y Y 1 F N F0 "U" -200 750 50 H V C CNN F1 "ESP32Modules_TTGO_TDisplay" 0 650 50 H V C CNN F2 "" -200 50 50 H I C CNN F3 "" -200 50 50 H I C CNN DRAW C -110 -10 0 0 1 0 N C -60 -310 0 0 1 0 N C -60 -110 0 0 1 0 N S -400 700 400 -700 0 1 0 f P 2 0 1 0 -110 10 -110 0 N P 2 0 1 0 -60 -290 -60 -300 N P 2 0 1 0 -60 -90 -60 -100 N P 4 0 1 0 -110 30 -140 -20 -80 -20 -110 30 N P 4 0 1 0 -60 -270 -90 -320 -30 -320 -60 -270 N P 4 0 1 0 -60 -70 -90 -120 -30 -120 -60 -70 N P 4 0 1 0 370 100 400 130 400 70 370 100 F P 4 0 1 0 370 200 400 230 400 170 370 200 F P 4 0 1 0 370 300 400 330 400 270 370 300 F P 4 0 1 0 370 400 400 430 400 370 370 400 F X GND 1 -500 500 100 R 50 50 1 1 P X GND 10 -500 -400 100 R 50 50 1 1 P X GND 11 -500 -500 100 R 50 50 1 1 P X 3V3 12 -500 -600 100 R 50 50 1 1 P X 5V 13 500 -600 100 L 50 50 1 1 P X GND 14 500 -500 100 L 50 50 1 1 P X GPIO27 15 500 -400 100 L 50 50 1 1 P X GPIO26 16 500 -300 100 L 50 50 1 1 P X GPIO25 17 500 -200 100 L 50 50 1 1 P X GPIO33 18 500 -100 100 L 50 50 1 1 P X GPIO32 19 500 0 100 L 50 50 1 1 P X GND 2 -500 400 100 R 50 50 1 1 P X GPIO39 20 500 100 100 L 50 50 1 1 P X GPIO38 21 500 200 100 L 50 50 1 1 P X GPIO37 22 500 300 100 L 50 50 1 1 P X GPIO36 23 500 400 100 L 50 50 1 1 P X 3V3 24 500 500 100 L 50 50 1 1 P X GPIO21 3 -500 300 100 R 50 50 1 1 P X GPIO22 4 -500 200 100 R 50 50 1 1 P X GPIO17 5 -500 100 100 R 50 50 1 1 P X GPIO2 6 -500 0 100 R 50 50 1 1 P X GPIO15 7 -500 -100 100 R 50 50 1 1 P X GPIO13 8 -500 -200 100 R 50 50 1 1 P X GPIO12 9 -500 -300 100 R 50 50 1 1 P ENDDRAW ENDDEF # # Interface_Expansion_MCP23017_SS # DEF Interface_Expansion_MCP23017_SS U 0 40 Y Y 1 F N F0 "U" -450 950 50 H V C CNN F1 "Interface_Expansion_MCP23017_SS" 0 0 50 H V C CNN F2 "Package_SO:SSOP-28_5.3x10.2mm_P0.65mm" 200 -1000 50 H I L CNN F3 "" 200 -1100 50 H I L CNN $FPLIST SSOP*5.3x10.2mm*P0.65mm* $ENDFPLIST DRAW S -500 900 500 -900 0 1 10 f X GPB0 1 700 800 200 L 50 50 1 1 B X VSS 10 0 -1100 200 U 50 50 1 1 W X NC 11 -500 600 200 R 50 50 1 1 N N X SCK 12 -700 700 200 R 50 50 1 1 I X SDA 13 -700 800 200 R 50 50 1 1 B X NC 14 -500 500 200 R 50 50 1 1 N N X A0 15 -700 -800 200 R 50 50 1 1 I X A1 16 -700 -700 200 R 50 50 1 1 I X A2 17 -700 -600 200 R 50 50 1 1 I X ~RESET~ 18 -700 -100 200 R 50 50 1 1 I X INTB 19 -700 200 200 R 50 50 1 1 T X GPB1 2 700 700 200 L 50 50 1 1 B X INTA 20 -700 100 200 R 50 50 1 1 T X GPA0 21 700 -100 200 L 50 50 1 1 B X GPA1 22 700 -200 200 L 50 50 1 1 B X GPA2 23 700 -300 200 L 50 50 1 1 B X GPA3 24 700 -400 200 L 50 50 1 1 B X GPA4 25 700 -500 200 L 50 50 1 1 B X GPA5 26 700 -600 200 L 50 50 1 1 B X GPA6 27 700 -700 200 L 50 50 1 1 B X GPA7 28 700 -800 200 L 50 50 1 1 B X GPB2 3 700 600 200 L 50 50 1 1 B X GPB3 4 700 500 200 L 50 50 1 1 B X GPB4 5 700 400 200 L 50 50 1 1 B X GPB5 6 700 300 200 L 50 50 1 1 B X GPB6 7 700 200 200 L 50 50 1 1 B X GPB7 8 700 100 200 L 50 50 1 1 B X VDD 9 0 1100 200 D 50 50 1 1 W ENDDRAW ENDDEF # # Mechanical_MountingHole_Pad # DEF Mechanical_MountingHole_Pad H 0 40 N N 1 F N F0 "H" 0 250 50 H V C CNN F1 "Mechanical_MountingHole_Pad" 0 175 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST MountingHole*Pad* $ENDFPLIST DRAW C 0 50 50 0 1 50 N X 1 1 0 -100 100 U 50 50 1 1 I ENDDRAW ENDDEF # # Regulator_Linear_AP7361C-33E # DEF Regulator_Linear_AP7361C-33E U 0 10 Y Y 1 F N F0 "U" -150 125 50 H V C CNN F1 "Regulator_Linear_AP7361C-33E" 0 125 50 H V L CNN F2 "Package_TO_SOT_SMD:SOT-223-3_TabPin2" 0 225 50 H I C CIN F3 "" 0 -50 50 H I C CNN ALIAS SPX2920M3-5.0_SOT223 LT1129-3.3_SOT223 LT1129-5.0_SOT223 LM2937xMP AP7361C-10E AP7361C-12E AP7361C-15E AP7361C-18E AP7361C-25E AP7361C-28E AP7361C-33E $FPLIST SOT?223* $ENDFPLIST DRAW S -200 -200 200 75 0 1 10 f X VI 1 -300 0 100 R 50 50 1 1 W X GND 2 0 -300 100 U 50 50 1 1 W X VO 3 300 0 100 L 50 50 1 1 w ENDDRAW ENDDEF # # Regulator_Linear_LM7805_TO220 # DEF Regulator_Linear_LM7805_TO220 U 0 10 Y Y 1 F N F0 "U" -150 125 50 H V C CNN F1 "Regulator_Linear_LM7805_TO220" 0 125 50 H V L CNN F2 "Package_TO_SOT_THT:TO-220-3_Vertical" 0 225 50 H I C CIN F3 "" 0 -50 50 H I C CNN ALIAS LM7806_TO220 LM7808_TO220 LM7809_TO220 LM7810_TO220 LM7812_TO220 LM7815_TO220 LM7818_TO220 LM7824_TO220 LM78M05_TO220 SPX2920U-3.3_TO220 SPX2920U-5.0_TO220 LF15_TO220 LF18_TO220 LF25_TO220 LF33_TO220 LF50_TO220 LF60_TO220 LF80_TO220 LF85_TO220 LF120_TO220 LF47_TO220 LF90_TO220 LM341T-05_TO220 LM341T-12_TO220 LM341T-15_TO220 LM2937xT LM2931-3.3_TO220 LM2931-5.0_TO220 $FPLIST TO?220* $ENDFPLIST DRAW S -200 75 200 -200 0 1 10 f X VI 1 -300 0 100 R 50 50 1 1 W X GND 2 0 -300 100 U 50 50 1 1 W X VO 3 300 0 100 L 50 50 1 1 w ENDDRAW ENDDEF # # Switch_SW_Push # DEF Switch_SW_Push SW 0 40 N N 1 F N F0 "SW" 50 100 50 H V L CNN F1 "Switch_SW_Push" 0 -60 50 H V C CNN F2 "" 0 200 50 H I C CNN F3 "" 0 200 50 H I C CNN DRAW C -80 0 20 0 1 0 N C 80 0 20 0 1 0 N P 2 0 1 0 0 50 0 120 N P 2 0 1 0 100 50 -100 50 N X 1 1 -200 0 100 R 50 50 0 1 P X 2 2 200 0 100 L 50 50 0 1 P ENDDRAW ENDDEF # # VN7007ALHTR_VN7007ALH # DEF VN7007ALHTR_VN7007ALH U 0 40 Y Y 1 F N F0 "U" -400 400 50 H V C CNN F1 "VN7007ALHTR_VN7007ALH" -400 300 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW S -500 250 500 -400 0 1 0 f X OUTPUT 1 600 100 100 L 50 50 1 1 w X OUTPUT 2 600 0 100 L 50 50 1 1 P X OUTPUT 3 600 -100 100 L 50 50 1 1 P X IN 4 -600 100 100 R 50 50 1 1 I X CURSENSE 5 -600 -200 100 R 50 50 1 1 O X FR_DIAG 6 -600 0 100 R 50 50 1 1 I X GND 7 0 -500 100 U 50 50 1 1 W X VCC TAB 0 350 100 D 50 50 1 1 W ENDDRAW ENDDEF # # no_pin_no_pin # DEF no_pin_no_pin Z 0 40 Y Y 1 F N F0 "Z" -350 150 60 H V C CNN F1 "no_pin_no_pin" 0 0 60 H V C CNN F2 "" 0 0 60 H I C CNN F3 "" 0 0 60 H I C CNN DRAW S -400 100 400 -100 0 1 0 N ENDDRAW ENDDEF # # power_+12V # DEF power_+12V #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -150 50 H I C CNN F1 "power_+12V" 0 140 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 2 0 1 0 -30 50 0 100 N P 2 0 1 0 0 0 0 100 N P 2 0 1 0 0 100 30 50 N X +12V 1 0 0 0 U 50 50 1 1 W N ENDDRAW ENDDEF # # power_+3.3V # DEF power_+3.3V #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -150 50 H I C CNN F1 "power_+3.3V" 0 140 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN ALIAS +3.3V DRAW P 2 0 1 0 -30 50 0 100 N P 2 0 1 0 0 0 0 100 N P 2 0 1 0 0 100 30 50 N X +3V3 1 0 0 0 U 50 50 1 1 W N ENDDRAW ENDDEF # # power_+3V3 # DEF power_+3V3 #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -150 50 H I C CNN F1 "power_+3V3" 0 140 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 2 0 1 0 -30 50 0 100 N P 2 0 1 0 0 0 0 100 N P 2 0 1 0 0 100 30 50 N X +3V3 1 0 0 0 U 50 50 1 1 W N ENDDRAW ENDDEF # # power_+5V # DEF power_+5V #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -150 50 H I C CNN F1 "power_+5V" 0 140 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 2 0 1 0 -30 50 0 100 N P 2 0 1 0 0 0 0 100 N P 2 0 1 0 0 100 30 50 N X +5V 1 0 0 0 U 50 50 1 1 W N ENDDRAW ENDDEF # # power_GND # DEF power_GND #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -250 50 H I C CNN F1 "power_GND" 0 -150 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 6 0 1 0 0 0 0 -50 50 -50 0 -100 -50 -50 0 -50 N X GND 1 0 0 0 D 50 50 1 1 W N ENDDRAW ENDDEF # # power_PWR_FLAG # DEF power_PWR_FLAG #FLG 0 0 N N 1 F P F0 "#FLG" 0 75 50 H I C CNN F1 "power_PWR_FLAG" 0 150 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 6 0 1 0 0 0 0 50 -40 75 0 100 40 75 0 50 N X pwr 1 0 0 0 U 50 50 0 0 w ENDDRAW ENDDEF # #End Library ================================================ FILE: electronics/chainlinkDriverTester/chainlinkDriverTester.kibot.yml ================================================ kibot: version: 1 preflight: check_zone_fills: true run_drc: true run_erc: true filters: - filter: 'Overlapping headers' number: 45 regex: '(?s)Footprint J31(.*)Footprint J30' - filter: 'Overlapping headers' number: 45 regex: '(?s)Footprint J30(.*)Footprint J29' - filter: 'Overlapping headers' number: 45 regex: '(?s)Footprint J28(.*)Footprint J27' - filter: 'Overlapping headers' number: 45 regex: '(?s)Footprint J27(.*)Footprint J26' - filter: 'Overlapping headers' number: 45 regex: '(?s)Footprint TP75(.*)Footprint TP69' update_xml: true outputs: - name: ibom comment: 'Interactive BOM' type: ibom dir: bom options: layer_view: F dark_mode: true netlist_file: '%F.xml' extra_fields: 'DK#' ================================================ FILE: electronics/chainlinkDriverTester/chainlinkDriverTester.kicad_pcb ================================================ (kicad_pcb (version 20171130) (host pcbnew 5.1.10-88a1d61d58~90~ubuntu20.04.1) (general (thickness 1.6) (drawings 62) (tracks 633) (zones 0) (modules 141) (nets 96) ) (page A4) (layers (0 F.Cu signal) (31 B.Cu signal) (32 B.Adhes user) (33 F.Adhes user) (34 B.Paste user) (35 F.Paste user) (36 B.SilkS user) (37 F.SilkS user) (38 B.Mask user) (39 F.Mask user) (40 Dwgs.User user) (41 Cmts.User user) (42 Eco1.User user) (43 Eco2.User user) (44 Edge.Cuts user) (45 Margin user) (46 B.CrtYd user) (47 F.CrtYd user) (48 B.Fab user) (49 F.Fab user) ) (setup (last_trace_width 0.2) (user_trace_width 0.15) (user_trace_width 0.35) (user_trace_width 0.55) (user_trace_width 2) (trace_clearance 0.15) (zone_clearance 0.4) (zone_45_only no) (trace_min 0.127) (via_size 0.5) (via_drill 0.3) (via_min_size 0.45) (via_min_drill 0.2) (uvia_size 0.3) (uvia_drill 0.1) (uvias_allowed no) (uvia_min_size 0.2) (uvia_min_drill 0.1) (edge_width 0.05) (segment_width 0.2) (pcb_text_width 0.3) (pcb_text_size 1.5 1.5) (mod_edge_width 0.12) (mod_text_size 1 1) (mod_text_width 0.15) (pad_size 1.524 1.524) (pad_drill 0.762) (pad_to_mask_clearance 0) (aux_axis_origin 0 0) (visible_elements FFFFFF7F) (pcbplotparams (layerselection 0x010fc_ffffffff) (usegerberextensions false) (usegerberattributes false) (usegerberadvancedattributes false) (creategerberjobfile false) (excludeedgelayer true) (linewidth 0.100000) (plotframeref false) (viasonmask false) (mode 1) (useauxorigin false) (hpglpennumber 1) (hpglpenspeed 20) (hpglpendiameter 15.000000) (psnegative false) (psa4output false) (plotreference true) (plotvalue true) (plotinvisibletext false) (padsonsilk false) (subtractmaskfromsilk false) (outputformat 1) (mirror false) (drillshape 0) (scaleselection 1) (outputdirectory "build")) ) (net 0 "") (net 1 GND) (net 2 +12V) (net 3 /OUT_A_PHASE_D) (net 4 /OUT_A_PHASE_C) (net 5 /OUT_A_PHASE_B) (net 6 /OUT_A_PHASE_A) (net 7 /OUT_B_PHASE_D) (net 8 /OUT_B_PHASE_C) (net 9 /OUT_B_PHASE_B) (net 10 /OUT_B_PHASE_A) (net 11 /OUT_C_PHASE_D) (net 12 /OUT_C_PHASE_C) (net 13 /OUT_C_PHASE_B) (net 14 /OUT_C_PHASE_A) (net 15 /OUT_D_PHASE_D) (net 16 /OUT_D_PHASE_C) (net 17 /OUT_D_PHASE_B) (net 18 /OUT_D_PHASE_A) (net 19 +3V3) (net 20 "Net-(D2-Pad2)") (net 21 "Net-(D3-Pad2)") (net 22 /CLOCK_OUT) (net 23 /MOTOR_OUT) (net 24 /OUT_E_PHASE_D) (net 25 /OUT_E_PHASE_C) (net 26 /OUT_E_PHASE_B) (net 27 /OUT_E_PHASE_A) (net 28 /OUT_F_PHASE_D) (net 29 /OUT_F_PHASE_C) (net 30 /OUT_F_PHASE_B) (net 31 /OUT_F_PHASE_A) (net 32 /SENSOR_IN) (net 33 +5V) (net 34 "Net-(C4-Pad2)") (net 35 /12V_EN) (net 36 "Net-(D1-Pad1)") (net 37 "Net-(D2-Pad1)") (net 38 /3V3_FUSED) (net 39 /OUT_A_COMMON) (net 40 /OUT_B_COMMON) (net 41 /OUT_C_COMMON) (net 42 /OUT_D_COMMON) (net 43 /SENSOR_A_SIGNAL) (net 44 /SENSOR_A_VCC) (net 45 /SENSOR_A_GND) (net 46 /SENSOR_B_SIGNAL) (net 47 /SENSOR_B_VCC) (net 48 /SENSOR_B_GND) (net 49 /SENSOR_C_SIGNAL) (net 50 /SENSOR_C_VCC) (net 51 /SENSOR_C_GND) (net 52 /SENSOR_D_SIGNAL) (net 53 /SENSOR_D_VCC) (net 54 /SENSOR_D_GND) (net 55 /OUT_E_COMMON) (net 56 /OUT_F_COMMON) (net 57 /SENSOR_E_SIGNAL) (net 58 /SENSOR_E_VCC) (net 59 /SENSOR_E_GND) (net 60 /SENSOR_F_SIGNAL) (net 61 /SENSOR_F_VCC) (net 62 /SENSOR_F_GND) (net 63 /SDA) (net 64 /SCL) (net 65 "Net-(R3-Pad1)") (net 66 "Net-(R6-Pad2)") (net 67 "Net-(R8-Pad2)") (net 68 /MCP_RESET) (net 69 /12V_TEST_FEED) (net 70 /12V_OUTPUT) (net 71 /CLOCK) (net 72 /MOTOR_DATA) (net 73 /SENSOR_DATA) (net 74 /MCP_INT) (net 75 /SW_IN) (net 76 "Net-(D4-Pad1)") (net 77 /GPA3) (net 78 /GPA2) (net 79 /GPA1) (net 80 /GPA0) (net 81 /GPA7) (net 82 /GPA6) (net 83 /GPA5) (net 84 /GPA4) (net 85 /BUZZER) (net 86 /DETECT) (net 87 "Net-(U2-Pad6)") (net 88 "Net-(U2-Pad9)") (net 89 "Net-(U2-Pad12)") (net 90 "Net-(U2-Pad21)") (net 91 "Net-(U2-Pad7)") (net 92 /LATCH_OUT) (net 93 /LATCH) (net 94 "Net-(U2-Pad5)") (net 95 "Net-(C8-Pad1)") (net_class Default "This is the default net class." (clearance 0.15) (trace_width 0.2) (via_dia 0.5) (via_drill 0.3) (uvia_dia 0.3) (uvia_drill 0.1) (add_net +3V3) (add_net +5V) (add_net /12V_EN) (add_net /12V_OUTPUT) (add_net /12V_TEST_FEED) (add_net /3V3_FUSED) (add_net /BUZZER) (add_net /CLOCK) (add_net /CLOCK_OUT) (add_net /DETECT) (add_net /GPA0) (add_net /GPA1) (add_net /GPA2) (add_net /GPA3) (add_net /GPA4) (add_net /GPA5) (add_net /GPA6) (add_net /GPA7) (add_net /LATCH) (add_net /LATCH_OUT) (add_net /MCP_INT) (add_net /MCP_RESET) (add_net /MOTOR_DATA) (add_net /MOTOR_OUT) (add_net /SCL) (add_net /SDA) (add_net /SENSOR_A_GND) (add_net /SENSOR_A_SIGNAL) (add_net /SENSOR_A_VCC) (add_net /SENSOR_B_GND) (add_net /SENSOR_B_SIGNAL) (add_net /SENSOR_B_VCC) (add_net /SENSOR_C_GND) (add_net /SENSOR_C_SIGNAL) (add_net /SENSOR_C_VCC) (add_net /SENSOR_DATA) (add_net /SENSOR_D_GND) (add_net /SENSOR_D_SIGNAL) (add_net /SENSOR_D_VCC) (add_net /SENSOR_E_GND) (add_net /SENSOR_E_SIGNAL) (add_net /SENSOR_E_VCC) (add_net /SENSOR_F_GND) (add_net /SENSOR_F_SIGNAL) (add_net /SENSOR_F_VCC) (add_net /SENSOR_IN) (add_net /SW_IN) (add_net GND) (add_net "Net-(C4-Pad2)") (add_net "Net-(C8-Pad1)") (add_net "Net-(D1-Pad1)") (add_net "Net-(D2-Pad1)") (add_net "Net-(D2-Pad2)") (add_net "Net-(D3-Pad2)") (add_net "Net-(D4-Pad1)") (add_net "Net-(R3-Pad1)") (add_net "Net-(R6-Pad2)") (add_net "Net-(R8-Pad2)") (add_net "Net-(U2-Pad12)") (add_net "Net-(U2-Pad21)") (add_net "Net-(U2-Pad5)") (add_net "Net-(U2-Pad6)") (add_net "Net-(U2-Pad7)") (add_net "Net-(U2-Pad9)") ) (net_class motor "" (clearance 0.2) (trace_width 0.8) (via_dia 0.8) (via_drill 0.4) (uvia_dia 0.3) (uvia_drill 0.1) (add_net /OUT_A_COMMON) (add_net /OUT_A_PHASE_A) (add_net /OUT_A_PHASE_B) (add_net /OUT_A_PHASE_C) (add_net /OUT_A_PHASE_D) (add_net /OUT_B_COMMON) (add_net /OUT_B_PHASE_A) (add_net /OUT_B_PHASE_B) (add_net /OUT_B_PHASE_C) (add_net /OUT_B_PHASE_D) (add_net /OUT_C_COMMON) (add_net /OUT_C_PHASE_A) (add_net /OUT_C_PHASE_B) (add_net /OUT_C_PHASE_C) (add_net /OUT_C_PHASE_D) (add_net /OUT_D_COMMON) (add_net /OUT_D_PHASE_A) (add_net /OUT_D_PHASE_B) (add_net /OUT_D_PHASE_C) (add_net /OUT_D_PHASE_D) (add_net /OUT_E_COMMON) (add_net /OUT_E_PHASE_A) (add_net /OUT_E_PHASE_B) (add_net /OUT_E_PHASE_C) (add_net /OUT_E_PHASE_D) (add_net /OUT_F_COMMON) (add_net /OUT_F_PHASE_A) (add_net /OUT_F_PHASE_B) (add_net /OUT_F_PHASE_C) (add_net /OUT_F_PHASE_D) ) (net_class save "" (clearance 0.2) (trace_width 0.25) (via_dia 0.8) (via_drill 0.4) (uvia_dia 0.3) (uvia_drill 0.1) (add_net +12V) ) (module Capacitor_SMD:C_1206_3216Metric (layer F.Cu) (tedit 5F68FEEE) (tstamp 6180E74C) (at 41.275 100.33 180) (descr "Capacitor SMD 1206 (3216 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") (tags capacitor) (path /61A898F1) (attr smd) (fp_text reference C8 (at 0 -1.905) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value 22uF (at 0 1.85) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 2.3 1.15) (end -2.3 1.15) (layer F.CrtYd) (width 0.05)) (fp_line (start 2.3 -1.15) (end 2.3 1.15) (layer F.CrtYd) (width 0.05)) (fp_line (start -2.3 -1.15) (end 2.3 -1.15) (layer F.CrtYd) (width 0.05)) (fp_line (start -2.3 1.15) (end -2.3 -1.15) (layer F.CrtYd) (width 0.05)) (fp_line (start -0.711252 0.91) (end 0.711252 0.91) (layer F.SilkS) (width 0.12)) (fp_line (start -0.711252 -0.91) (end 0.711252 -0.91) (layer F.SilkS) (width 0.12)) (fp_line (start 1.6 0.8) (end -1.6 0.8) (layer F.Fab) (width 0.1)) (fp_line (start 1.6 -0.8) (end 1.6 0.8) (layer F.Fab) (width 0.1)) (fp_line (start -1.6 -0.8) (end 1.6 -0.8) (layer F.Fab) (width 0.1)) (fp_line (start -1.6 0.8) (end -1.6 -0.8) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.8 0.8) (thickness 0.12))) ) (pad 2 smd roundrect (at 1.475 0 180) (size 1.15 1.8) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.217391) (net 1 GND)) (pad 1 smd roundrect (at -1.475 0 180) (size 1.15 1.8) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.217391) (net 95 "Net-(C8-Pad1)")) (model ${KISYS3DMOD}/Capacitor_SMD.3dshapes/C_1206_3216Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Capacitor_SMD:C_1206_3216Metric (layer F.Cu) (tedit 5F68FEEE) (tstamp 6180E68D) (at 36.195 100.33) (descr "Capacitor SMD 1206 (3216 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") (tags capacitor) (path /61A891A1) (attr smd) (fp_text reference C3 (at 0 1.905) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value 10uF (at 0 1.85) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 2.3 1.15) (end -2.3 1.15) (layer F.CrtYd) (width 0.05)) (fp_line (start 2.3 -1.15) (end 2.3 1.15) (layer F.CrtYd) (width 0.05)) (fp_line (start -2.3 -1.15) (end 2.3 -1.15) (layer F.CrtYd) (width 0.05)) (fp_line (start -2.3 1.15) (end -2.3 -1.15) (layer F.CrtYd) (width 0.05)) (fp_line (start -0.711252 0.91) (end 0.711252 0.91) (layer F.SilkS) (width 0.12)) (fp_line (start -0.711252 -0.91) (end 0.711252 -0.91) (layer F.SilkS) (width 0.12)) (fp_line (start 1.6 0.8) (end -1.6 0.8) (layer F.Fab) (width 0.1)) (fp_line (start 1.6 -0.8) (end 1.6 0.8) (layer F.Fab) (width 0.1)) (fp_line (start -1.6 -0.8) (end 1.6 -0.8) (layer F.Fab) (width 0.1)) (fp_line (start -1.6 0.8) (end -1.6 -0.8) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.8 0.8) (thickness 0.12))) ) (pad 2 smd roundrect (at 1.475 0) (size 1.15 1.8) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.217391) (net 1 GND)) (pad 1 smd roundrect (at -1.475 0) (size 1.15 1.8) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.217391) (net 75 /SW_IN)) (model ${KISYS3DMOD}/Capacitor_SMD.3dshapes/C_1206_3216Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module pogoPins:pogo1mm (layer F.Cu) (tedit 617F1EC7) (tstamp 6066D03D) (at 137.16 59.69) (path /6192B219) (fp_text reference TP68 (at 0 0.5) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value TestPoint (at 0 -0.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 1 thru_hole circle (at 0 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 70 /12V_OUTPUT)) (model ../lib/Pogo.models/pogo1mmPoint.step (offset (xyz 0 0 -10.5)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module pogoPins:pogo1mm (layer F.Cu) (tedit 617F1EC7) (tstamp 6066D049) (at 132.08 59.69) (path /6192B20F) (fp_text reference TP67 (at 0 0.5) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value TestPoint (at 0 -0.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 1 thru_hole circle (at 0 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 70 /12V_OUTPUT)) (model ../lib/Pogo.models/pogo1mmPoint.step (offset (xyz 0 0 -10.5)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module pogoPins:pogo1mm (layer F.Cu) (tedit 617F1EC7) (tstamp 6066D055) (at 127 59.69) (path /6192B205) (fp_text reference TP66 (at 0 0.5) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value TestPoint (at 0 -0.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 1 thru_hole circle (at 0 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 1 GND)) (model ../lib/Pogo.models/pogo1mmPoint.step (offset (xyz 0 0 -10.5)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module pogoPins:pogo1mm (layer F.Cu) (tedit 617F1EC7) (tstamp 6066D061) (at 121.92 59.69) (path /6192B1FB) (fp_text reference TP65 (at 0 0.5) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value TestPoint (at 0 -0.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 1 thru_hole circle (at 0 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 1 GND)) (model ../lib/Pogo.models/pogo1mmPoint.step (offset (xyz 0 0 -10.5)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module pogoPins:pogo1mm (layer F.Cu) (tedit 617F1EC7) (tstamp 6066D06D) (at 116.84 59.69) (path /6192B1F1) (fp_text reference TP64 (at 0 0.5) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value TestPoint (at 0 -0.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 1 thru_hole circle (at 0 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 38 /3V3_FUSED)) (model ../lib/Pogo.models/pogo1mmPoint.step (offset (xyz 0 0 -10.5)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module pogoPins:pogo1mm (layer F.Cu) (tedit 617F1EC7) (tstamp 6066D079) (at 111.76 59.69) (path /6192AE25) (fp_text reference TP63 (at 0 0.5) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value TestPoint (at 0 -0.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 1 thru_hole circle (at 0 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 38 /3V3_FUSED)) (model ../lib/Pogo.models/pogo1mmPoint.step (offset (xyz 0 0 -10.5)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module pogoPins:pogo1mm (layer F.Cu) (tedit 617F1EC7) (tstamp 6066D085) (at 38.1 72.39) (path /6192832F) (fp_text reference TP60 (at 0 0.5) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value TestPoint (at 0 -0.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 1 thru_hole circle (at 0 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 1 GND)) (model ../lib/Pogo.models/pogo1mmPoint.step (offset (xyz 0 0 -10.5)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module pogoPins:pogo1mm (layer F.Cu) (tedit 617F1EC7) (tstamp 6066D091) (at 213.36 72.39) (path /61927B4B) (fp_text reference TP59 (at 0 0.5) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value TestPoint (at 0 -0.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 1 thru_hole circle (at 0 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 1 GND)) (model ../lib/Pogo.models/pogo1mmPoint.step (offset (xyz 0 0 -10.5)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module pogoPins:pogo1mm (layer F.Cu) (tedit 617F1EC7) (tstamp 6066D2C5) (at 35.56 72.39) (path /618D77B1) (fp_text reference TP56 (at 0 0.5) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value TestPoint (at 0 -0.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 1 thru_hole circle (at 0 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 92 /LATCH_OUT)) (model ../lib/Pogo.models/pogo1mmPoint.step (offset (xyz 0 0 -10.5)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module pogoPins:pogo1mm (layer F.Cu) (tedit 617F1EC7) (tstamp 6066D2D1) (at 210.82 72.39) (path /6190E50A) (fp_text reference TP55 (at 0 0.5) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value TestPoint (at 0 -0.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 1 thru_hole circle (at 0 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 93 /LATCH)) (model ../lib/Pogo.models/pogo1mmPoint.step (offset (xyz 0 0 -10.5)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module pogoPins:pogo1mm (layer F.Cu) (tedit 617F1EC7) (tstamp 6066D2DD) (at 35.56 69.85) (path /618D77AB) (fp_text reference TP54 (at 0 0.5) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value TestPoint (at 0 -0.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 1 thru_hole circle (at 0 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 32 /SENSOR_IN)) (model ../lib/Pogo.models/pogo1mmPoint.step (offset (xyz 0 0 -10.5)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module pogoPins:pogo1mm (layer F.Cu) (tedit 617F1EC7) (tstamp 6066D2E9) (at 210.82 69.85) (path /6190E510) (fp_text reference TP53 (at 0 0.5) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value TestPoint (at 0 -0.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 1 thru_hole circle (at 0 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 73 /SENSOR_DATA)) (model ../lib/Pogo.models/pogo1mmPoint.step (offset (xyz 0 0 -10.5)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module pogoPins:pogo1mm (layer F.Cu) (tedit 617F1EC7) (tstamp 6066D2F5) (at 35.56 67.31) (path /618D77A5) (fp_text reference TP52 (at 0 0.5) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value TestPoint (at 0 -0.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 1 thru_hole circle (at 0 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 23 /MOTOR_OUT)) (model ../lib/Pogo.models/pogo1mmPoint.step (offset (xyz 0 0 -10.5)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module pogoPins:pogo1mm (layer F.Cu) (tedit 617F1EC7) (tstamp 6066D301) (at 210.82 67.31) (path /6190E516) (fp_text reference TP51 (at 0 0.5) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value TestPoint (at 0 -0.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 1 thru_hole circle (at 0 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 72 /MOTOR_DATA)) (model ../lib/Pogo.models/pogo1mmPoint.step (offset (xyz 0 0 -10.5)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module pogoPins:pogo1mm (layer F.Cu) (tedit 617F1EC7) (tstamp 6066D30D) (at 35.56 64.77) (path /618D779F) (fp_text reference TP50 (at 0 0.5) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value TestPoint (at 0 -0.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 1 thru_hole circle (at 0 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 22 /CLOCK_OUT)) (model ../lib/Pogo.models/pogo1mmPoint.step (offset (xyz 0 0 -10.5)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module pogoPins:pogo1mm (layer F.Cu) (tedit 617F1EC7) (tstamp 6066D319) (at 210.82 64.77) (path /6190E51C) (fp_text reference TP49 (at 0 0.5) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value TestPoint (at 0 -0.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 1 thru_hole circle (at 0 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 71 /CLOCK)) (model ../lib/Pogo.models/pogo1mmPoint.step (offset (xyz 0 0 -10.5)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module pogoPins:pogo1mm (layer F.Cu) (tedit 617F1EC7) (tstamp 6066D325) (at 50.8 74.93) (path /617FFF80) (fp_text reference TP48 (at 0 0.5) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value TestPoint (at 0 -0.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 1 thru_hole circle (at 0 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 62 /SENSOR_F_GND)) (model ../lib/Pogo.models/pogo1mmPoint.step (offset (xyz 0 0 -10.5)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module pogoPins:pogo1mm (layer F.Cu) (tedit 617F1EC7) (tstamp 6066D331) (at 53.34 74.93) (path /617FFF76) (fp_text reference TP47 (at 0 0.5) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value TestPoint (at 0 -0.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 1 thru_hole circle (at 0 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 61 /SENSOR_F_VCC)) (model ../lib/Pogo.models/pogo1mmPoint.step (offset (xyz 0 0 -10.5)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module pogoPins:pogo1mm (layer F.Cu) (tedit 617F1EC7) (tstamp 6066D33D) (at 55.88 74.93) (path /617FFF6C) (fp_text reference TP46 (at 0 0.5) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value TestPoint (at 0 -0.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 1 thru_hole circle (at 0 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 60 /SENSOR_F_SIGNAL)) (model ../lib/Pogo.models/pogo1mmPoint.step (offset (xyz 0 0 -10.5)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module pogoPins:pogo1mm (layer F.Cu) (tedit 617F1EC7) (tstamp 6066D349) (at 69.85 74.93) (path /617FFF62) (fp_text reference TP45 (at 0 0.5) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value TestPoint (at 0 -0.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 1 thru_hole circle (at 0 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 59 /SENSOR_E_GND)) (model ../lib/Pogo.models/pogo1mmPoint.step (offset (xyz 0 0 -10.5)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module pogoPins:pogo1mm (layer F.Cu) (tedit 617F1EC7) (tstamp 6066D355) (at 72.39 74.93) (path /617FFF58) (fp_text reference TP44 (at 0 0.5) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value TestPoint (at 0 -0.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 1 thru_hole circle (at 0 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 58 /SENSOR_E_VCC)) (model ../lib/Pogo.models/pogo1mmPoint.step (offset (xyz 0 0 -10.5)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module pogoPins:pogo1mm (layer F.Cu) (tedit 617F1EC7) (tstamp 6066D361) (at 74.93 74.93) (path /617FFC48) (fp_text reference TP43 (at 0 0.5) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value TestPoint (at 0 -0.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 1 thru_hole circle (at 0 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 57 /SENSOR_E_SIGNAL)) (model ../lib/Pogo.models/pogo1mmPoint.step (offset (xyz 0 0 -10.5)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module pogoPins:pogo1mm (layer F.Cu) (tedit 617F1EC7) (tstamp 6066D36D) (at 48.42 57.15) (path /618BA887) (fp_text reference TP42 (at 0 0.5) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value TestPoint (at 0 -0.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 1 thru_hole circle (at 0 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 56 /OUT_F_COMMON)) (model ../lib/Pogo.models/pogo1mmPoint.step (offset (xyz 0 0 -10.5)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module pogoPins:pogo1mm (layer F.Cu) (tedit 617F1EC7) (tstamp 6066D379) (at 67.47 57.15) (path /618A0D85) (fp_text reference TP41 (at 0 0.5) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value TestPoint (at 0 -0.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 1 thru_hole circle (at 0 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 55 /OUT_E_COMMON)) (model ../lib/Pogo.models/pogo1mmPoint.step (offset (xyz 0 0 -10.5)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module pogoPins:pogo1mm (layer F.Cu) (tedit 617F1EC7) (tstamp 6066D385) (at 86.52 57.15) (path /618873B1) (fp_text reference TP40 (at 0 0.5) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value TestPoint (at 0 -0.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 1 thru_hole circle (at 0 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 42 /OUT_D_COMMON)) (model ../lib/Pogo.models/pogo1mmPoint.step (offset (xyz 0 0 -10.5)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module pogoPins:pogo1mm (layer F.Cu) (tedit 617F1EC7) (tstamp 6066D391) (at 152.56 57.15) (path /6186D3A3) (fp_text reference TP39 (at 0 0.5) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value TestPoint (at 0 -0.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 1 thru_hole circle (at 0 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 41 /OUT_C_COMMON)) (model ../lib/Pogo.models/pogo1mmPoint.step (offset (xyz 0 0 -10.5)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module pogoPins:pogo1mm (layer F.Cu) (tedit 617F1EC7) (tstamp 6066D39D) (at 171.61 57.15) (path /61850047) (fp_text reference TP38 (at 0 0.5) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value TestPoint (at 0 -0.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 1 thru_hole circle (at 0 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 40 /OUT_B_COMMON)) (model ../lib/Pogo.models/pogo1mmPoint.step (offset (xyz 0 0 -10.5)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module pogoPins:pogo1mm (layer F.Cu) (tedit 617F1EC7) (tstamp 6066D3A9) (at 190.66 57.15) (path /6184F17F) (fp_text reference TP37 (at 0 0.5) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value TestPoint (at 0 -0.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 1 thru_hole circle (at 0 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 39 /OUT_A_COMMON)) (model ../lib/Pogo.models/pogo1mmPoint.step (offset (xyz 0 0 -10.5)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module pogoPins:pogo1mm (layer F.Cu) (tedit 617F1EC7) (tstamp 6066D3B5) (at 88.9 74.93) (path /617E011B) (fp_text reference TP36 (at 0 0.5) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value TestPoint (at 0 -0.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 1 thru_hole circle (at 0 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 54 /SENSOR_D_GND)) (model ../lib/Pogo.models/pogo1mmPoint.step (offset (xyz 0 0 -10.5)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module pogoPins:pogo1mm (layer F.Cu) (tedit 617F1EC7) (tstamp 6066D3C1) (at 50.92 57.15) (path /618BA881) (fp_text reference TP35 (at 0 0.5) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value TestPoint (at 0 -0.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 1 thru_hole circle (at 0 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 28 /OUT_F_PHASE_D)) (model ../lib/Pogo.models/pogo1mmPoint.step (offset (xyz 0 0 -10.5)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module pogoPins:pogo1mm (layer F.Cu) (tedit 617F1EC7) (tstamp 6066D3CD) (at 69.97 57.15) (path /618A0D7F) (fp_text reference TP34 (at 0 0.5) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value TestPoint (at 0 -0.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 1 thru_hole circle (at 0 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 24 /OUT_E_PHASE_D)) (model ../lib/Pogo.models/pogo1mmPoint.step (offset (xyz 0 0 -10.5)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module pogoPins:pogo1mm (layer F.Cu) (tedit 617F1EC7) (tstamp 6066D3D9) (at 89.02 57.15) (path /618873AB) (fp_text reference TP33 (at 0 0.5) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value TestPoint (at 0 -0.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 1 thru_hole circle (at 0 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 15 /OUT_D_PHASE_D)) (model ../lib/Pogo.models/pogo1mmPoint.step (offset (xyz 0 0 -10.5)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module pogoPins:pogo1mm (layer F.Cu) (tedit 617F1EC7) (tstamp 6066D3E5) (at 155.06 57.15) (path /6186D39D) (fp_text reference TP32 (at 0 0.5) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value TestPoint (at 0 -0.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 1 thru_hole circle (at 0 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 11 /OUT_C_PHASE_D)) (model ../lib/Pogo.models/pogo1mmPoint.step (offset (xyz 0 0 -10.5)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module pogoPins:pogo1mm (layer F.Cu) (tedit 617F1EC7) (tstamp 6066D3F1) (at 174.11 57.15) (path /6185003D) (fp_text reference TP31 (at 0 0.5) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value TestPoint (at 0 -0.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 1 thru_hole circle (at 0 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 7 /OUT_B_PHASE_D)) (model ../lib/Pogo.models/pogo1mmPoint.step (offset (xyz 0 0 -10.5)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module pogoPins:pogo1mm (layer F.Cu) (tedit 617F1EC7) (tstamp 6066CC41) (at 193.16 57.15) (path /6184EF40) (fp_text reference TP30 (at 0 0.5) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value TestPoint (at 0 -0.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 1 thru_hole circle (at 0 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 3 /OUT_A_PHASE_D)) (model ../lib/Pogo.models/pogo1mmPoint.step (offset (xyz 0 0 -10.5)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module pogoPins:pogo1mm (layer F.Cu) (tedit 617F1EC7) (tstamp 6066CC4D) (at 91.44 74.93) (path /617E0111) (fp_text reference TP29 (at 0 0.5) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value TestPoint (at 0 -0.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 1 thru_hole circle (at 0 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 53 /SENSOR_D_VCC)) (model ../lib/Pogo.models/pogo1mmPoint.step (offset (xyz 0 0 -10.5)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module pogoPins:pogo1mm (layer F.Cu) (tedit 617F1EC7) (tstamp 6066CC59) (at 53.42 57.15) (path /618BA87B) (fp_text reference TP28 (at 0 0.5) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value TestPoint (at 0 -0.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 1 thru_hole circle (at 0 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 29 /OUT_F_PHASE_C)) (model ../lib/Pogo.models/pogo1mmPoint.step (offset (xyz 0 0 -10.5)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module pogoPins:pogo1mm (layer F.Cu) (tedit 617F1EC7) (tstamp 6066CC65) (at 72.47 57.15) (path /618A0D79) (fp_text reference TP27 (at 0 0.5) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value TestPoint (at 0 -0.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 1 thru_hole circle (at 0 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 25 /OUT_E_PHASE_C)) (model ../lib/Pogo.models/pogo1mmPoint.step (offset (xyz 0 0 -10.5)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module pogoPins:pogo1mm (layer F.Cu) (tedit 617F1EC7) (tstamp 6066CC71) (at 91.52 57.15) (path /618873A5) (fp_text reference TP26 (at 0 0.5) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value TestPoint (at 0 -0.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 1 thru_hole circle (at 0 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 16 /OUT_D_PHASE_C)) (model ../lib/Pogo.models/pogo1mmPoint.step (offset (xyz 0 0 -10.5)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module pogoPins:pogo1mm (layer F.Cu) (tedit 617F1EC7) (tstamp 6066CC7D) (at 157.56 57.15) (path /6186D397) (fp_text reference TP25 (at 0 0.5) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value TestPoint (at 0 -0.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 1 thru_hole circle (at 0 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 12 /OUT_C_PHASE_C)) (model ../lib/Pogo.models/pogo1mmPoint.step (offset (xyz 0 0 -10.5)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module pogoPins:pogo1mm (layer F.Cu) (tedit 617F1EC7) (tstamp 6066CC89) (at 176.61 57.15) (path /61850033) (fp_text reference TP24 (at 0 0.5) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value TestPoint (at 0 -0.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 1 thru_hole circle (at 0 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 8 /OUT_B_PHASE_C)) (model ../lib/Pogo.models/pogo1mmPoint.step (offset (xyz 0 0 -10.5)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module pogoPins:pogo1mm (layer F.Cu) (tedit 617F1EC7) (tstamp 6066CC95) (at 195.66 57.15) (path /6184EC55) (fp_text reference TP23 (at 0 0.5) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value TestPoint (at 0 -0.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 1 thru_hole circle (at 0 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 4 /OUT_A_PHASE_C)) (model ../lib/Pogo.models/pogo1mmPoint.step (offset (xyz 0 0 -10.5)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module pogoPins:pogo1mm (layer F.Cu) (tedit 617F1EC7) (tstamp 6066CCA1) (at 93.98 74.93) (path /617E0107) (fp_text reference TP22 (at 0 0.5) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value TestPoint (at 0 -0.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 1 thru_hole circle (at 0 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 52 /SENSOR_D_SIGNAL)) (model ../lib/Pogo.models/pogo1mmPoint.step (offset (xyz 0 0 -10.5)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module pogoPins:pogo1mm (layer F.Cu) (tedit 617F1EC7) (tstamp 6066CCAD) (at 55.92 57.15) (path /618BA875) (fp_text reference TP21 (at 0 0.5) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value TestPoint (at 0 -0.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 1 thru_hole circle (at 0 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 30 /OUT_F_PHASE_B)) (model ../lib/Pogo.models/pogo1mmPoint.step (offset (xyz 0 0 -10.5)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module pogoPins:pogo1mm (layer F.Cu) (tedit 617F1EC7) (tstamp 6066CCB9) (at 74.97 57.15) (path /618A0D73) (fp_text reference TP20 (at 0 0.5) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value TestPoint (at 0 -0.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 1 thru_hole circle (at 0 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 26 /OUT_E_PHASE_B)) (model ../lib/Pogo.models/pogo1mmPoint.step (offset (xyz 0 0 -10.5)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module pogoPins:pogo1mm (layer F.Cu) (tedit 617F1EC7) (tstamp 6066CCC5) (at 94.02 57.15) (path /6188739F) (fp_text reference TP19 (at 0 0.5) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value TestPoint (at 0 -0.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 1 thru_hole circle (at 0 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 17 /OUT_D_PHASE_B)) (model ../lib/Pogo.models/pogo1mmPoint.step (offset (xyz 0 0 -10.5)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module pogoPins:pogo1mm (layer F.Cu) (tedit 617F1EC7) (tstamp 6066CCD1) (at 160.06 57.15) (path /6186D391) (fp_text reference TP18 (at 0 0.5) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value TestPoint (at 0 -0.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 1 thru_hole circle (at 0 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 13 /OUT_C_PHASE_B)) (model ../lib/Pogo.models/pogo1mmPoint.step (offset (xyz 0 0 -10.5)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module pogoPins:pogo1mm (layer F.Cu) (tedit 617F1EC7) (tstamp 6066CCDD) (at 179.11 57.15) (path /61850029) (fp_text reference TP17 (at 0 0.5) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value TestPoint (at 0 -0.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 1 thru_hole circle (at 0 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 9 /OUT_B_PHASE_B)) (model ../lib/Pogo.models/pogo1mmPoint.step (offset (xyz 0 0 -10.5)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module pogoPins:pogo1mm (layer F.Cu) (tedit 617F1EC7) (tstamp 6066CCE9) (at 198.16 57.15) (path /6184E940) (fp_text reference TP16 (at 0 0.5) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value TestPoint (at 0 -0.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 1 thru_hole circle (at 0 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 5 /OUT_A_PHASE_B)) (model ../lib/Pogo.models/pogo1mmPoint.step (offset (xyz 0 0 -10.5)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module pogoPins:pogo1mm (layer F.Cu) (tedit 617F1EC7) (tstamp 6066C86C) (at 58.42 57.15) (path /618BA86F) (fp_text reference TP15 (at 0 0.5) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value TestPoint (at 0 -0.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 1 thru_hole circle (at 0 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 31 /OUT_F_PHASE_A)) (model ../lib/Pogo.models/pogo1mmPoint.step (offset (xyz 0 0 -10.5)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module pogoPins:pogo1mm (layer F.Cu) (tedit 617F1EC7) (tstamp 6066D559) (at 77.47 57.15) (path /618A0D6D) (fp_text reference TP14 (at 0 0.5) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value TestPoint (at 0 -0.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 1 thru_hole circle (at 0 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 27 /OUT_E_PHASE_A)) (model ../lib/Pogo.models/pogo1mmPoint.step (offset (xyz 0 0 -10.5)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module pogoPins:pogo1mm (layer F.Cu) (tedit 617F1EC7) (tstamp 6066D3FD) (at 96.52 57.15) (path /61887399) (fp_text reference TP13 (at 0 0.5) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value TestPoint (at 0 -0.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 1 thru_hole circle (at 0 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 18 /OUT_D_PHASE_A)) (model ../lib/Pogo.models/pogo1mmPoint.step (offset (xyz 0 0 -10.5)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module pogoPins:pogo1mm (layer F.Cu) (tedit 617F1EC7) (tstamp 6066D409) (at 162.56 57.15) (path /6186D38B) (fp_text reference TP12 (at 0 0.5) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value TestPoint (at 0 -0.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 1 thru_hole circle (at 0 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 14 /OUT_C_PHASE_A)) (model ../lib/Pogo.models/pogo1mmPoint.step (offset (xyz 0 0 -10.5)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module pogoPins:pogo1mm (layer F.Cu) (tedit 617F1EC7) (tstamp 6066D415) (at 181.61 57.15) (path /6184FD3D) (fp_text reference TP11 (at 0 0.5) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value TestPoint (at 0 -0.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 1 thru_hole circle (at 0 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 10 /OUT_B_PHASE_A)) (model ../lib/Pogo.models/pogo1mmPoint.step (offset (xyz 0 0 -10.5)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module pogoPins:pogo1mm (layer F.Cu) (tedit 617F1EC7) (tstamp 6066D421) (at 200.66 57.15) (path /6184AD16) (fp_text reference TP10 (at 0 0.5) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value TestPoint (at 0 -0.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 1 thru_hole circle (at 0 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 6 /OUT_A_PHASE_A)) (model ../lib/Pogo.models/pogo1mmPoint.step (offset (xyz 0 0 -10.5)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module pogoPins:pogo1mm (layer F.Cu) (tedit 617F1EC7) (tstamp 6066D42D) (at 154.94 74.93) (path /617E00FD) (fp_text reference TP9 (at 0 0.5) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value TestPoint (at 0 -0.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 1 thru_hole circle (at 0 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 51 /SENSOR_C_GND)) (model ../lib/Pogo.models/pogo1mmPoint.step (offset (xyz 0 0 -10.5)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module pogoPins:pogo1mm (layer F.Cu) (tedit 617F1EC7) (tstamp 6066D439) (at 157.48 74.93) (path /617E00F3) (fp_text reference TP8 (at 0 0.5) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value TestPoint (at 0 -0.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 1 thru_hole circle (at 0 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 50 /SENSOR_C_VCC)) (model ../lib/Pogo.models/pogo1mmPoint.step (offset (xyz 0 0 -10.5)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module pogoPins:pogo1mm (layer F.Cu) (tedit 617F1EC7) (tstamp 6066D445) (at 160.02 74.93) (path /617DFC93) (fp_text reference TP7 (at 0 0.5) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value TestPoint (at 0 -0.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 1 thru_hole circle (at 0 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 49 /SENSOR_C_SIGNAL)) (model ../lib/Pogo.models/pogo1mmPoint.step (offset (xyz 0 0 -10.5)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module pogoPins:pogo1mm (layer F.Cu) (tedit 617F1EC7) (tstamp 6066D451) (at 173.99 74.93) (path /617C18B9) (fp_text reference TP6 (at 0 0.5) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value TestPoint (at 0 -0.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 1 thru_hole circle (at 0 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 48 /SENSOR_B_GND)) (model ../lib/Pogo.models/pogo1mmPoint.step (offset (xyz 0 0 -10.5)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module pogoPins:pogo1mm (layer F.Cu) (tedit 617F1EC7) (tstamp 6066D45D) (at 176.53 74.93) (path /617C18AF) (fp_text reference TP5 (at 0 0.5) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value TestPoint (at 0 -0.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 1 thru_hole circle (at 0 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 47 /SENSOR_B_VCC)) (model ../lib/Pogo.models/pogo1mmPoint.step (offset (xyz 0 0 -10.5)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module pogoPins:pogo1mm (layer F.Cu) (tedit 617F1EC7) (tstamp 6066D469) (at 179.07 74.93) (path /617C1479) (fp_text reference TP4 (at 0 0.5) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value TestPoint (at 0 -0.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 1 thru_hole circle (at 0 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 46 /SENSOR_B_SIGNAL)) (model ../lib/Pogo.models/pogo1mmPoint.step (offset (xyz 0 0 -10.5)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module pogoPins:pogo1mm (layer F.Cu) (tedit 617F1EC7) (tstamp 6066D475) (at 193.04 74.93) (path /617BD90D) (fp_text reference TP3 (at 0 0.5) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value TestPoint (at 0 -0.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 1 thru_hole circle (at 0 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 45 /SENSOR_A_GND)) (model ../lib/Pogo.models/pogo1mmPoint.step (offset (xyz 0 0 -10.5)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module pogoPins:pogo1mm (layer F.Cu) (tedit 617F1EC7) (tstamp 6066D481) (at 195.58 74.93) (path /617BD2CD) (fp_text reference TP2 (at 0 0.5) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value TestPoint (at 0 -0.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 1 thru_hole circle (at 0 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 44 /SENSOR_A_VCC)) (model ../lib/Pogo.models/pogo1mmPoint.step (offset (xyz 0 0 -10.5)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module pogoPins:pogo1mm (layer F.Cu) (tedit 617F1EC7) (tstamp 6066D48D) (at 198.12 74.93) (path /617BCAE2) (fp_text reference TP1 (at 0 0.5) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value TestPoint (at 0 -0.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 1 thru_hole circle (at 0 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 43 /SENSOR_A_SIGNAL)) (model ../lib/Pogo.models/pogo1mmPoint.step (offset (xyz 0 0 -10.5)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module ModifiedSymbols:IDC-Header_2x04_P2.54mm_Vertical (layer F.Cu) (tedit 617B5015) (tstamp 617FEA1A) (at 29.21 38.735) (descr "Through hole IDC box header, 2x04, 2.54mm pitch, DIN 41651 / IEC 60603-13, double rows, https://docs.google.com/spreadsheets/d/16SsEcesNF15N3Lb4niX7dcUr-NY5_MFPQhobNuNppn4/edit#gid=0") (tags "Through hole vertical IDC box header THT 2x04 2.54mm double row") (path /619E4686) (fp_text reference J101 (at 1.27 -2.921) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value Conn_02x04_Odd_Even (at 1.27 13.72) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 6.22 -5.6) (end -3.68 -5.6) (layer F.CrtYd) (width 0.05)) (fp_line (start 6.22 13.22) (end 6.22 -5.6) (layer F.CrtYd) (width 0.05)) (fp_line (start -3.68 13.22) (end 6.22 13.22) (layer F.CrtYd) (width 0.05)) (fp_line (start -3.68 -5.6) (end -3.68 13.22) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.98 5.86) (end -3.29 5.86) (layer F.SilkS) (width 0.12)) (fp_line (start -1.98 5.86) (end -1.98 5.86) (layer F.SilkS) (width 0.12)) (fp_line (start -1.98 11.53) (end -1.98 5.86) (layer F.SilkS) (width 0.12)) (fp_line (start 4.52 11.53) (end -1.98 11.53) (layer F.SilkS) (width 0.12)) (fp_line (start 4.52 -3.91) (end 4.52 11.53) (layer F.SilkS) (width 0.12)) (fp_line (start -1.98 -3.91) (end 4.52 -3.91) (layer F.SilkS) (width 0.12)) (fp_line (start -1.98 1.76) (end -1.98 -3.91) (layer F.SilkS) (width 0.12)) (fp_line (start -3.29 1.76) (end -1.98 1.76) (layer F.SilkS) (width 0.12)) (fp_line (start -3.29 12.83) (end -3.29 -5.21) (layer F.SilkS) (width 0.12)) (fp_line (start 5.83 12.83) (end -3.29 12.83) (layer F.SilkS) (width 0.12)) (fp_line (start 5.83 -5.21) (end 5.83 12.83) (layer F.SilkS) (width 0.12)) (fp_line (start -3.29 -5.21) (end 5.83 -5.21) (layer F.SilkS) (width 0.12)) (fp_line (start -1.98 5.86) (end -3.18 5.86) (layer F.Fab) (width 0.1)) (fp_line (start -1.98 5.86) (end -1.98 5.86) (layer F.Fab) (width 0.1)) (fp_line (start -1.98 11.53) (end -1.98 5.86) (layer F.Fab) (width 0.1)) (fp_line (start 4.52 11.53) (end -1.98 11.53) (layer F.Fab) (width 0.1)) (fp_line (start 4.52 -3.91) (end 4.52 11.53) (layer F.Fab) (width 0.1)) (fp_line (start -1.98 -3.91) (end 4.52 -3.91) (layer F.Fab) (width 0.1)) (fp_line (start -1.98 1.76) (end -1.98 -3.91) (layer F.Fab) (width 0.1)) (fp_line (start -3.18 1.76) (end -1.98 1.76) (layer F.Fab) (width 0.1)) (fp_line (start -3.18 12.72) (end -3.18 -4.1) (layer F.Fab) (width 0.1)) (fp_line (start 5.72 12.72) (end -3.18 12.72) (layer F.Fab) (width 0.1)) (fp_line (start 5.72 -5.1) (end 5.72 12.72) (layer F.Fab) (width 0.1)) (fp_line (start -2.18 -5.1) (end 5.72 -5.1) (layer F.Fab) (width 0.1)) (fp_line (start -3.18 -4.1) (end -2.18 -5.1) (layer F.Fab) (width 0.1)) (fp_text user %R (at 1.27 3.81 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 1 thru_hole roundrect (at 0 0) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (roundrect_rratio 0.147059) (net 22 /CLOCK_OUT)) (pad 3 thru_hole circle (at 0 2.54) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 23 /MOTOR_OUT)) (pad 5 thru_hole circle (at 0 5.08) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 32 /SENSOR_IN)) (pad 7 thru_hole circle (at 0 7.62) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 92 /LATCH_OUT)) (pad 2 thru_hole circle (at 2.54 0) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 1 GND)) (pad 4 thru_hole circle (at 2.54 2.54) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 1 GND)) (pad 6 thru_hole circle (at 2.54 5.08) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 1 GND)) (pad 8 thru_hole circle (at 2.54 7.62) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 1 GND)) (model ${KISYS3DMOD}/Connector_IDC.3dshapes/IDC-Header_2x04_P2.54mm_Vertical.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Package_TO_SOT_THT:TO-220-3_Vertical (layer F.Cu) (tedit 5AC8BA0D) (tstamp 617FD362) (at 36.195 96.52) (descr "TO-220-3, Vertical, RM 2.54mm, see https://www.vishay.com/docs/66542/to-220-1.pdf") (tags "TO-220-3 Vertical RM 2.54mm") (path /618B409A) (fp_text reference U6 (at 2.54 -4.27) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value LM7805_TO220 (at 2.54 2.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 7.79 -3.4) (end -2.71 -3.4) (layer F.CrtYd) (width 0.05)) (fp_line (start 7.79 1.51) (end 7.79 -3.4) (layer F.CrtYd) (width 0.05)) (fp_line (start -2.71 1.51) (end 7.79 1.51) (layer F.CrtYd) (width 0.05)) (fp_line (start -2.71 -3.4) (end -2.71 1.51) (layer F.CrtYd) (width 0.05)) (fp_line (start 4.391 -3.27) (end 4.391 -1.76) (layer F.SilkS) (width 0.12)) (fp_line (start 0.69 -3.27) (end 0.69 -1.76) (layer F.SilkS) (width 0.12)) (fp_line (start -2.58 -1.76) (end 7.66 -1.76) (layer F.SilkS) (width 0.12)) (fp_line (start 7.66 -3.27) (end 7.66 1.371) (layer F.SilkS) (width 0.12)) (fp_line (start -2.58 -3.27) (end -2.58 1.371) (layer F.SilkS) (width 0.12)) (fp_line (start -2.58 1.371) (end 7.66 1.371) (layer F.SilkS) (width 0.12)) (fp_line (start -2.58 -3.27) (end 7.66 -3.27) (layer F.SilkS) (width 0.12)) (fp_line (start 4.39 -3.15) (end 4.39 -1.88) (layer F.Fab) (width 0.1)) (fp_line (start 0.69 -3.15) (end 0.69 -1.88) (layer F.Fab) (width 0.1)) (fp_line (start -2.46 -1.88) (end 7.54 -1.88) (layer F.Fab) (width 0.1)) (fp_line (start 7.54 -3.15) (end -2.46 -3.15) (layer F.Fab) (width 0.1)) (fp_line (start 7.54 1.25) (end 7.54 -3.15) (layer F.Fab) (width 0.1)) (fp_line (start -2.46 1.25) (end 7.54 1.25) (layer F.Fab) (width 0.1)) (fp_line (start -2.46 -3.15) (end -2.46 1.25) (layer F.Fab) (width 0.1)) (fp_text user %R (at 2.54 -4.27) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 3 thru_hole oval (at 5.08 0) (size 1.905 2) (drill 1.1) (layers *.Cu *.Mask) (net 95 "Net-(C8-Pad1)")) (pad 2 thru_hole oval (at 2.54 0) (size 1.905 2) (drill 1.1) (layers *.Cu *.Mask) (net 1 GND)) (pad 1 thru_hole rect (at 0 0) (size 1.905 2) (drill 1.1) (layers *.Cu *.Mask) (net 75 /SW_IN)) (model ${KISYS3DMOD}/Package_TO_SOT_THT.3dshapes/TO-220-3_Vertical.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module ESP32:T-DISPLAY_extra_pins (layer F.Cu) (tedit 61706544) (tstamp 6064D236) (at 179.07 118.11 90) (path /60D0A4DC) (fp_text reference U2 (at 11.43 -1.27 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value TTGO_TDisplay (at 11.43 -5.08 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 3.935 83.95) (end 18.935 83.95) (layer F.Fab) (width 0.12)) (fp_line (start -1.11 43.95) (end 23.98 43.95) (layer F.SilkS) (width 0.15)) (fp_line (start 23.98 -7.54) (end 23.98 43.95) (layer F.SilkS) (width 0.15)) (fp_line (start -1.11 -7.54) (end -1.11 43.95) (layer F.SilkS) (width 0.15)) (fp_line (start -1.11 -3.15) (end 23.98 -3.15) (layer F.SilkS) (width 0.15)) (fp_line (start -1.11 -7.54) (end 23.98 -7.54) (layer F.SilkS) (width 0.15)) (fp_line (start -3.81 0) (end -3.81 -11.43) (layer F.Fab) (width 0.12)) (fp_line (start -3.81 -11.43) (end 26.67 -11.43) (layer F.Fab) (width 0.12)) (fp_line (start 26.67 -11.43) (end 26.67 0) (layer F.Fab) (width 0.12)) (fp_line (start 26.67 0) (end -3.81 0) (layer F.Fab) (width 0.12)) (fp_line (start -3.81 -7.62) (end 0 -11.43) (layer F.Fab) (width 0.12)) (fp_line (start -3.81 -3.81) (end 3.81 -11.43) (layer F.Fab) (width 0.12)) (fp_line (start -3.81 0) (end 7.62 -11.43) (layer F.Fab) (width 0.12)) (fp_line (start 0 0) (end 11.43 -11.43) (layer F.Fab) (width 0.12)) (fp_line (start 3.81 0) (end 15.24 -11.43) (layer F.Fab) (width 0.12)) (fp_line (start 7.62 0) (end 19.05 -11.43) (layer F.Fab) (width 0.12)) (fp_line (start 22.86 -11.43) (end 11.43 0) (layer F.Fab) (width 0.12)) (fp_line (start 15.24 0) (end 26.67 -11.43) (layer F.Fab) (width 0.12)) (fp_line (start 19.05 0) (end 26.67 -7.62) (layer F.Fab) (width 0.12)) (fp_line (start 22.86 0) (end 26.67 -3.81) (layer F.Fab) (width 0.12)) (fp_text user CABLE (at 10.795 63.754 180) (layer F.Fab) (effects (font (size 10 8) (thickness 0.15))) ) (pad 22 thru_hole circle (at 20.32 5.08 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 74 /MCP_INT)) (pad 21 thru_hole circle (at 20.32 7.62 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 90 "Net-(U2-Pad21)")) (pad 19 thru_hole circle (at 20.32 12.7 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 72 /MOTOR_DATA)) (pad 20 thru_hole circle (at 20.32 10.16 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 73 /SENSOR_DATA)) (pad 17 thru_hole circle (at 20.32 17.78 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 93 /LATCH)) (pad 16 thru_hole circle (at 20.32 20.32 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 68 /MCP_RESET)) (pad 14 thru_hole circle (at 20.32 25.4 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 1 GND)) (pad 24 thru_hole circle (at 20.32 0 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 19 +3V3)) (pad 18 thru_hole circle (at 20.32 15.24 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 71 /CLOCK)) (pad 15 thru_hole circle (at 20.32 22.86 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 69 /12V_TEST_FEED)) (pad 13 thru_hole circle (at 20.32 27.94 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 33 +5V)) (pad 23 thru_hole circle (at 20.32 2.54 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 38 /3V3_FUSED)) (pad 8 thru_hole circle (at 2.54 17.78 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 35 /12V_EN)) (pad 10 thru_hole circle (at 2.54 22.86 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 1 GND)) (pad 6 thru_hole circle (at 2.54 12.7 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 87 "Net-(U2-Pad6)")) (pad 1 thru_hole circle (at 2.54 0 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 1 GND)) (pad 2 thru_hole circle (at 2.54 2.54 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 1 GND)) (pad 3 thru_hole circle (at 2.54 5.08 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 63 /SDA)) (pad 4 thru_hole circle (at 2.54 7.62 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 64 /SCL)) (pad 5 thru_hole circle (at 2.54 10.16 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 94 "Net-(U2-Pad5)")) (pad 12 thru_hole circle (at 2.54 27.94 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 89 "Net-(U2-Pad12)")) (pad 9 thru_hole circle (at 2.54 20.32 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 88 "Net-(U2-Pad9)")) (pad 11 thru_hole circle (at 2.54 25.4 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 1 GND)) (pad 7 thru_hole circle (at 2.54 15.24 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 91 "Net-(U2-Pad7)")) (pad 24 thru_hole circle (at 22.86 0 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 19 +3V3)) (pad 23 thru_hole circle (at 22.86 2.54 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 38 /3V3_FUSED)) (pad 22 thru_hole circle (at 22.86 5.08 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 74 /MCP_INT)) (pad 21 thru_hole circle (at 22.86 7.62 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 90 "Net-(U2-Pad21)")) (pad 20 thru_hole circle (at 22.86 10.16 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 73 /SENSOR_DATA)) (pad 19 thru_hole circle (at 22.86 12.7 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 72 /MOTOR_DATA)) (pad 18 thru_hole circle (at 22.86 15.24 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 71 /CLOCK)) (pad 17 thru_hole circle (at 22.86 17.78 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 93 /LATCH)) (pad 16 thru_hole circle (at 22.86 20.32 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 68 /MCP_RESET)) (pad 15 thru_hole circle (at 22.86 22.86 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 69 /12V_TEST_FEED)) (pad 14 thru_hole circle (at 22.86 25.4 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 1 GND)) (pad 13 thru_hole circle (at 22.86 27.94 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 33 +5V)) (pad 12 thru_hole circle (at 0 27.94 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 89 "Net-(U2-Pad12)")) (pad 11 thru_hole circle (at 0 25.4 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 1 GND)) (pad 10 thru_hole circle (at 0 22.86 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 1 GND)) (pad 9 thru_hole circle (at 0 20.32 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 88 "Net-(U2-Pad9)")) (pad 8 thru_hole circle (at 0 17.78 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 35 /12V_EN)) (pad 7 thru_hole circle (at 0 15.24 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 91 "Net-(U2-Pad7)")) (pad 6 thru_hole circle (at 0 12.7 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 87 "Net-(U2-Pad6)")) (pad 5 thru_hole circle (at 0 10.16 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 94 "Net-(U2-Pad5)")) (pad 4 thru_hole circle (at 0 7.62 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 64 /SCL)) (pad 3 thru_hole circle (at 0 5.08 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 63 /SDA)) (pad 2 thru_hole circle (at 0 2.54 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 1 GND)) (pad 1 thru_hole circle (at 0 0 90) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 1 GND)) (model ../lib/TTGO.models/TTGO_TDisplay.step (offset (xyz 0 0 10.5)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) (model ${KISYS3DMOD}/Connector_PinSocket_2.54mm.3dshapes/PinSocket_1x12_P2.54mm_Vertical.step (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) (model ${KISYS3DMOD}/Connector_PinSocket_2.54mm.3dshapes/PinSocket_1x12_P2.54mm_Vertical.step (offset (xyz 22.86 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) (model ${KISYS3DMOD}/Connector_PinHeader_2.54mm.3dshapes/PinHeader_1x12_P2.54mm_Vertical.step (offset (xyz 0 0 10)) (scale (xyz 1 1 1)) (rotate (xyz 0 180 0)) ) (model ${KISYS3DMOD}/Connector_PinHeader_2.54mm.3dshapes/PinHeader_1x12_P2.54mm_Vertical.step (offset (xyz 22.86 0 10)) (scale (xyz 1 1 1)) (rotate (xyz 0 180 0)) ) ) (module SwitchESE13:ESE13V01D (layer F.Cu) (tedit 60739FC9) (tstamp 6074239A) (at 137.795 72.39 180) (path /607D9BC7) (fp_text reference SW1 (at -1.1 2.9) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value SW_Push (at 0 -0.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 0.55 -1.8) (end 0.55 1.8) (layer F.SilkS) (width 0.15)) (fp_line (start 0.55 1.8) (end -3.65 1.8) (layer F.SilkS) (width 0.15)) (fp_line (start -3.65 1.8) (end -3.65 -1.8) (layer F.SilkS) (width 0.15)) (fp_line (start -3.65 -1.8) (end 0.55 -1.8) (layer F.SilkS) (width 0.15)) (fp_line (start 0.55 -0.6) (end 2.5 -0.6) (layer F.SilkS) (width 0.15)) (fp_line (start 2.5 -0.6) (end 2.5 0.6) (layer F.SilkS) (width 0.15)) (fp_line (start 2.5 0.6) (end 0.55 0.6) (layer F.SilkS) (width 0.15)) (fp_line (start -3.8 -2.3) (end 2.7 -2.3) (layer F.CrtYd) (width 0.12)) (fp_line (start 2.7 -2.3) (end 2.7 2.3) (layer F.CrtYd) (width 0.12)) (fp_line (start 2.7 2.3) (end -3.8 2.3) (layer F.CrtYd) (width 0.12)) (fp_line (start -3.8 2.3) (end -3.8 -2.3) (layer F.CrtYd) (width 0.12)) (pad 2 smd rect (at -3 1.7 180) (size 0.7 1.2) (layers F.Cu F.Paste F.Mask) (net 1 GND)) (pad 1 smd rect (at -3 -1.7 180) (size 0.7 1.2) (layers F.Cu F.Paste F.Mask) (net 86 /DETECT)) (pad "" np_thru_hole circle (at -2.45 0 180) (size 0.9 0.9) (drill 0.8) (layers *.Cu *.Mask)) (pad "" np_thru_hole circle (at -0.45 0 180) (size 0.9 0.9) (drill 0.8) (layers *.Cu *.Mask)) (pad ~ smd rect (at 0 1.625 180) (size 0.7 1.05) (layers F.Cu F.Paste F.Mask)) (pad ~ smd rect (at 0 -1.625 180) (size 0.7 1.05) (layers F.Cu F.Paste F.Mask)) ) (module ModifiedSymbols:LED_0805_2012Metric_Silkscreen (layer F.Cu) (tedit 606FFE5F) (tstamp 6067CECE) (at 123.19 93.98 180) (descr "LED SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: https://docs.google.com/spreadsheets/d/1BsfQQcO9C6DZCsRaXUlFlo91Tg2WpOkGARC1WS5S8t0/edit?usp=sharing), generated with kicad-footprint-generator") (tags LED) (path /607210C0) (attr smd) (fp_text reference D4 (at 0 -1.65) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value Red (at 0 1.65) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -0.254 -0.635) (end -0.254 0.635) (layer F.SilkS) (width 0.15)) (fp_line (start -0.254 0) (end 0.254 -0.635) (layer F.SilkS) (width 0.15)) (fp_line (start 0.254 0.635) (end -0.254 0) (layer F.SilkS) (width 0.15)) (fp_line (start 0.254 -0.635) (end 0.254 0.635) (layer F.SilkS) (width 0.15)) (fp_line (start 1 -0.6) (end -0.7 -0.6) (layer F.Fab) (width 0.1)) (fp_line (start -0.7 -0.6) (end -1 -0.3) (layer F.Fab) (width 0.1)) (fp_line (start -1 -0.3) (end -1 0.6) (layer F.Fab) (width 0.1)) (fp_line (start -1 0.6) (end 1 0.6) (layer F.Fab) (width 0.1)) (fp_line (start 1 0.6) (end 1 -0.6) (layer F.Fab) (width 0.1)) (fp_line (start -1.68 0.95) (end -1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.68 -0.95) (end 1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.68 -0.95) (end 1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.68 0.95) (end -1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.5 0.5) (thickness 0.08))) ) (pad 2 smd roundrect (at 0.9375 0 180) (size 0.975 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 38 /3V3_FUSED)) (pad 1 smd roundrect (at -0.9375 0 180) (size 0.975 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 76 "Net-(D4-Pad1)")) (model ${KISYS3DMOD}/LED_SMD.3dshapes/LED_0805_2012Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module ModifiedSymbols:LED_0805_2012Metric_Silkscreen (layer F.Cu) (tedit 606FFE5F) (tstamp 6066D267) (at 140.97 44.45 90) (descr "LED SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: https://docs.google.com/spreadsheets/d/1BsfQQcO9C6DZCsRaXUlFlo91Tg2WpOkGARC1WS5S8t0/edit?usp=sharing), generated with kicad-footprint-generator") (tags LED) (path /60D334E5) (attr smd) (fp_text reference D2 (at 1.905 0 180) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value Red (at 0 1.65 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -0.254 -0.635) (end -0.254 0.635) (layer F.SilkS) (width 0.15)) (fp_line (start -0.254 0) (end 0.254 -0.635) (layer F.SilkS) (width 0.15)) (fp_line (start 0.254 0.635) (end -0.254 0) (layer F.SilkS) (width 0.15)) (fp_line (start 0.254 -0.635) (end 0.254 0.635) (layer F.SilkS) (width 0.15)) (fp_line (start 1 -0.6) (end -0.7 -0.6) (layer F.Fab) (width 0.1)) (fp_line (start -0.7 -0.6) (end -1 -0.3) (layer F.Fab) (width 0.1)) (fp_line (start -1 -0.3) (end -1 0.6) (layer F.Fab) (width 0.1)) (fp_line (start -1 0.6) (end 1 0.6) (layer F.Fab) (width 0.1)) (fp_line (start 1 0.6) (end 1 -0.6) (layer F.Fab) (width 0.1)) (fp_line (start -1.68 0.95) (end -1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.68 -0.95) (end 1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.68 -0.95) (end 1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.68 0.95) (end -1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 0 90) (layer F.Fab) (effects (font (size 0.5 0.5) (thickness 0.08))) ) (pad 2 smd roundrect (at 0.9375 0 90) (size 0.975 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 20 "Net-(D2-Pad2)")) (pad 1 smd roundrect (at -0.9375 0 90) (size 0.975 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 37 "Net-(D2-Pad1)")) (model ${KISYS3DMOD}/LED_SMD.3dshapes/LED_0805_2012Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module ModifiedSymbols:LED_0805_2012Metric_Silkscreen (layer F.Cu) (tedit 606FFE5F) (tstamp 6066D29D) (at 143.51 44.45 90) (descr "LED SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: https://docs.google.com/spreadsheets/d/1BsfQQcO9C6DZCsRaXUlFlo91Tg2WpOkGARC1WS5S8t0/edit?usp=sharing), generated with kicad-footprint-generator") (tags LED) (path /60D3344A) (attr smd) (fp_text reference D1 (at 1.905 0 180) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value Red (at 0 1.65 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -0.254 -0.635) (end -0.254 0.635) (layer F.SilkS) (width 0.15)) (fp_line (start -0.254 0) (end 0.254 -0.635) (layer F.SilkS) (width 0.15)) (fp_line (start 0.254 0.635) (end -0.254 0) (layer F.SilkS) (width 0.15)) (fp_line (start 0.254 -0.635) (end 0.254 0.635) (layer F.SilkS) (width 0.15)) (fp_line (start 1 -0.6) (end -0.7 -0.6) (layer F.Fab) (width 0.1)) (fp_line (start -0.7 -0.6) (end -1 -0.3) (layer F.Fab) (width 0.1)) (fp_line (start -1 -0.3) (end -1 0.6) (layer F.Fab) (width 0.1)) (fp_line (start -1 0.6) (end 1 0.6) (layer F.Fab) (width 0.1)) (fp_line (start 1 0.6) (end 1 -0.6) (layer F.Fab) (width 0.1)) (fp_line (start -1.68 0.95) (end -1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.68 -0.95) (end 1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.68 -0.95) (end 1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.68 0.95) (end -1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 0 90) (layer F.Fab) (effects (font (size 0.5 0.5) (thickness 0.08))) ) (pad 2 smd roundrect (at 0.9375 0 90) (size 0.975 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 35 /12V_EN)) (pad 1 smd roundrect (at -0.9375 0 90) (size 0.975 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 36 "Net-(D1-Pad1)")) (model ${KISYS3DMOD}/LED_SMD.3dshapes/LED_0805_2012Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Buck:BuckModuleBackSilk (layer F.Cu) (tedit 606E666B) (tstamp 606B10AD) (at 29.845 90.17) (path /60777001) (fp_text reference U7 (at 0 0.5 180) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value Buck (at 0 -0.5 -180) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -1.9 -1.765) (end 20.6 -1.765) (layer B.SilkS) (width 0.15)) (fp_line (start -1.9 15.735) (end 20.6 15.735) (layer B.SilkS) (width 0.15)) (fp_line (start -1.9 -1.765) (end -1.9 15.735) (layer B.SilkS) (width 0.15)) (fp_line (start 20.6 -1.765) (end 20.6 15.735) (layer B.SilkS) (width 0.15)) (fp_line (start 2.54 6.35) (end 15.24 6.35) (layer B.SilkS) (width 0.15)) (fp_line (start 15.24 6.35) (end 12.7 3.81) (layer B.SilkS) (width 0.15)) (fp_line (start 15.24 6.35) (end 12.7 8.89) (layer B.SilkS) (width 0.15)) (fp_text user "[Install on other side]" (at 9.525 -0.635) (layer B.SilkS) (effects (font (size 0.8 0.8) (thickness 0.12) italic) (justify mirror)) ) (fp_text user IN- (at 3.81 1.27 180) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) (fp_text user OUT- (at 13.97 1.27 180) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) (fp_text user IN+ (at 3.81 12.7 180) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) (fp_text user OUT+ (at 13.97 12.7 180) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) (pad IN_GND thru_hole circle (at 0 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 1 GND)) (pad IN_GND thru_hole circle (at 0 2.54) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 1 GND)) (pad IN thru_hole circle (at 0 11.43) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 75 /SW_IN)) (pad IN thru_hole circle (at 0 13.97) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 75 /SW_IN)) (pad OUT_GND thru_hole circle (at 18.7 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 1 GND)) (pad OUT_GND thru_hole circle (at 18.7 2.54) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 1 GND)) (pad OUT thru_hole circle (at 18.7 11.43) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 95 "Net-(C8-Pad1)")) (pad OUT thru_hole circle (at 18.7 13.97) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask) (net 95 "Net-(C8-Pad1)")) ) (module Diode_SMD:D_SOD-128 (layer F.Cu) (tedit 5D3216F4) (tstamp 606B260A) (at 131.445 107.315 270) (descr "D_SOD-128 (CFP5 SlimSMAW), https://assets.nexperia.com/documents/outline-drawing/SOD128.pdf") (tags D_SOD-128) (path /6086A699) (attr smd) (fp_text reference D7 (at 0 2.54 180) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value "2A 500mV" (at 0 2 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -3.08 -1.36) (end 1.9 -1.36) (layer F.SilkS) (width 0.12)) (fp_line (start -3.08 1.36) (end 1.9 1.36) (layer F.SilkS) (width 0.12)) (fp_line (start -3.15 -1.5) (end -3.15 1.5) (layer F.CrtYd) (width 0.05)) (fp_line (start 3.15 1.5) (end -3.15 1.5) (layer F.CrtYd) (width 0.05)) (fp_line (start 3.15 -1.5) (end 3.15 1.5) (layer F.CrtYd) (width 0.05)) (fp_line (start -3.15 -1.5) (end 3.15 -1.5) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.9 -1.25) (end 1.9 -1.25) (layer F.Fab) (width 0.1)) (fp_line (start 1.9 -1.25) (end 1.9 1.25) (layer F.Fab) (width 0.1)) (fp_line (start 1.9 1.25) (end -1.9 1.25) (layer F.Fab) (width 0.1)) (fp_line (start -1.9 1.25) (end -1.9 -1.25) (layer F.Fab) (width 0.1)) (fp_line (start -0.75 0) (end -0.35 0) (layer F.Fab) (width 0.1)) (fp_line (start -0.35 0) (end -0.35 -0.55) (layer F.Fab) (width 0.1)) (fp_line (start -0.35 0) (end -0.35 0.55) (layer F.Fab) (width 0.1)) (fp_line (start -0.35 0) (end 0.25 -0.4) (layer F.Fab) (width 0.1)) (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer F.Fab) (width 0.1)) (fp_line (start 0.25 0.4) (end -0.35 0) (layer F.Fab) (width 0.1)) (fp_line (start 0.25 0) (end 0.75 0) (layer F.Fab) (width 0.1)) (fp_line (start -3.08 -1.36) (end -3.08 1.36) (layer F.SilkS) (width 0.12)) (fp_text user %R (at 0 -2 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 2 smd rect (at 2.2 0 270) (size 1.4 2.1) (layers F.Cu F.Paste F.Mask) (net 95 "Net-(C8-Pad1)")) (pad 1 smd rect (at -2.2 0 270) (size 1.4 2.1) (layers F.Cu F.Paste F.Mask) (net 33 +5V)) (model ${KISYS3DMOD}/Diode_SMD.3dshapes/D_SOD-128.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Diode_SMD:D_SOD-128 (layer F.Cu) (tedit 5D3216F4) (tstamp 6066C9D0) (at 132.715 43.815 270) (descr "D_SOD-128 (CFP5 SlimSMAW), https://assets.nexperia.com/documents/outline-drawing/SOD128.pdf") (tags D_SOD-128) (path /614E73C4) (attr smd) (fp_text reference D3 (at 0 2.54 180) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value "2A 500mV" (at 0 2 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -3.08 -1.36) (end 1.9 -1.36) (layer F.SilkS) (width 0.12)) (fp_line (start -3.08 1.36) (end 1.9 1.36) (layer F.SilkS) (width 0.12)) (fp_line (start -3.15 -1.5) (end -3.15 1.5) (layer F.CrtYd) (width 0.05)) (fp_line (start 3.15 1.5) (end -3.15 1.5) (layer F.CrtYd) (width 0.05)) (fp_line (start 3.15 -1.5) (end 3.15 1.5) (layer F.CrtYd) (width 0.05)) (fp_line (start -3.15 -1.5) (end 3.15 -1.5) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.9 -1.25) (end 1.9 -1.25) (layer F.Fab) (width 0.1)) (fp_line (start 1.9 -1.25) (end 1.9 1.25) (layer F.Fab) (width 0.1)) (fp_line (start 1.9 1.25) (end -1.9 1.25) (layer F.Fab) (width 0.1)) (fp_line (start -1.9 1.25) (end -1.9 -1.25) (layer F.Fab) (width 0.1)) (fp_line (start -0.75 0) (end -0.35 0) (layer F.Fab) (width 0.1)) (fp_line (start -0.35 0) (end -0.35 -0.55) (layer F.Fab) (width 0.1)) (fp_line (start -0.35 0) (end -0.35 0.55) (layer F.Fab) (width 0.1)) (fp_line (start -0.35 0) (end 0.25 -0.4) (layer F.Fab) (width 0.1)) (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer F.Fab) (width 0.1)) (fp_line (start 0.25 0.4) (end -0.35 0) (layer F.Fab) (width 0.1)) (fp_line (start 0.25 0) (end 0.75 0) (layer F.Fab) (width 0.1)) (fp_line (start -3.08 -1.36) (end -3.08 1.36) (layer F.SilkS) (width 0.12)) (fp_text user %R (at 0 -2 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 2 smd rect (at 2.2 0 270) (size 1.4 2.1) (layers F.Cu F.Paste F.Mask) (net 21 "Net-(D3-Pad2)")) (pad 1 smd rect (at -2.2 0 270) (size 1.4 2.1) (layers F.Cu F.Paste F.Mask) (net 20 "Net-(D2-Pad2)")) (model ${KISYS3DMOD}/Diode_SMD.3dshapes/D_SOD-128.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module ScrewTerminals:Generic-5.08-2P (layer F.Cu) (tedit 606BAC3F) (tstamp 6066C887) (at 109.22 36.195 180) (path /6162CBA8) (fp_text reference J22 (at 2.54 -2.921) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value Power (at 0 -0.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -2.54 -6.2) (end 7.62 -6.2) (layer F.CrtYd) (width 0.12)) (fp_line (start 7.62 -6.2) (end 7.62 6.2) (layer F.CrtYd) (width 0.12)) (fp_line (start 7.62 6.2) (end -2.54 6.2) (layer F.CrtYd) (width 0.12)) (fp_line (start -2.54 6.2) (end -2.54 -6.2) (layer F.CrtYd) (width 0.12)) (fp_line (start -2.54 4.3) (end -2.54 -4.3) (layer F.SilkS) (width 0.12)) (fp_line (start 7.62 4.3) (end -2.54 4.3) (layer F.SilkS) (width 0.12)) (fp_line (start -2.54 -4.3) (end 7.62 -4.3) (layer F.SilkS) (width 0.12)) (fp_line (start 7.62 -4.3) (end 7.62 4.3) (layer F.SilkS) (width 0.12)) (fp_line (start -1.27 4.23) (end -0.635 3.04) (layer F.SilkS) (width 0.15)) (fp_line (start -0.635 3.04) (end 0.635 3.04) (layer F.SilkS) (width 0.15)) (fp_line (start 0.635 3.04) (end 1.27 4.23) (layer F.SilkS) (width 0.15)) (fp_line (start 5.715 3.04) (end 6.35 4.23) (layer F.SilkS) (width 0.15)) (fp_line (start 3.81 4.23) (end 4.445 3.04) (layer F.SilkS) (width 0.15)) (fp_line (start 4.445 3.04) (end 5.715 3.04) (layer F.SilkS) (width 0.15)) (fp_text user "Generic screw terminal keep out region" (at 2.54 5.08) (layer F.Fab) (effects (font (size 0.5 0.3) (thickness 0.05))) ) (fp_text user "Generic screw terminal keep out region" (at 2.54 -5.08) (layer F.Fab) (effects (font (size 0.5 0.3) (thickness 0.05))) ) (pad 2 thru_hole circle (at 5.08 0 180) (size 2 2) (drill 1.2) (layers *.Cu *.Mask) (net 1 GND)) (pad 1 thru_hole rect (at 0 0 180) (size 2 2) (drill 1.2) (layers *.Cu *.Mask) (net 2 +12V)) (model ${KISYS3DMOD}/TerminalBlock_Phoenix.3dshapes/TerminalBlock_Phoenix_MKDS-1,5-2-5.08_1x02_P5.08mm_Horizontal.step (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Dummy:Dummy (layer F.Cu) (tedit 606FAF91) (tstamp 60712348) (at 124.46 38.735) (path /60734BDC) (attr virtual) (fp_text reference Z101 (at 0 0.5) (layer Cmts.User) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value Fuse (at 0 -0.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text user "(BOM Only)" (at 0 1.905) (layer Cmts.User) (effects (font (size 1 1) (thickness 0.15))) ) ) (module Buzzer_Beeper:Buzzer_12x9.5RM7.6 (layer F.Cu) (tedit 5A030281) (tstamp 6071261B) (at 150.495 97.155 90) (descr "Generic Buzzer, D12mm height 9.5mm with RM7.6mm") (tags buzzer) (path /606C3416) (fp_text reference BZ1 (at 3.8 -3.175 180) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value Buzzer (at 3.8 7.4 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_circle (center 3.8 0) (end 9.9 0) (layer F.SilkS) (width 0.12)) (fp_circle (center 3.8 0) (end 4.8 0) (layer F.Fab) (width 0.1)) (fp_circle (center 3.8 0) (end 9.8 0) (layer F.Fab) (width 0.1)) (fp_circle (center 3.8 0) (end 10.05 0) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 3.8 -4 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text user + (at -0.01 -2.54 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text user + (at -0.01 -2.54 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 2 thru_hole circle (at 7.6 0 90) (size 2 2) (drill 1) (layers *.Cu *.Mask) (net 1 GND)) (pad 1 thru_hole rect (at 0 0 90) (size 2 2) (drill 1) (layers *.Cu *.Mask) (net 85 /BUZZER)) (model ${KISYS3DMOD}/Buzzer_Beeper.3dshapes/Buzzer_12x9.5RM7.6.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Connector_PinSocket_2.54mm:PinSocket_1x03_P2.54mm_Vertical (layer F.Cu) (tedit 5A19A429) (tstamp 606A26D6) (at 34.925 29.21 90) (descr "Through hole straight socket strip, 1x03, 2.54mm pitch, single row (from Kicad 4.0.7), script generated") (tags "Through hole socket strip THT 1x03 2.54mm single row") (path /607CDC54) (fp_text reference J2 (at 0 -2.77 90) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value Conn_01x03_Female (at 0 7.85 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -1.27 -1.27) (end 0.635 -1.27) (layer F.Fab) (width 0.1)) (fp_line (start 0.635 -1.27) (end 1.27 -0.635) (layer F.Fab) (width 0.1)) (fp_line (start 1.27 -0.635) (end 1.27 6.35) (layer F.Fab) (width 0.1)) (fp_line (start 1.27 6.35) (end -1.27 6.35) (layer F.Fab) (width 0.1)) (fp_line (start -1.27 6.35) (end -1.27 -1.27) (layer F.Fab) (width 0.1)) (fp_line (start -1.33 1.27) (end 1.33 1.27) (layer F.SilkS) (width 0.12)) (fp_line (start -1.33 1.27) (end -1.33 6.41) (layer F.SilkS) (width 0.12)) (fp_line (start -1.33 6.41) (end 1.33 6.41) (layer F.SilkS) (width 0.12)) (fp_line (start 1.33 1.27) (end 1.33 6.41) (layer F.SilkS) (width 0.12)) (fp_line (start 1.33 -1.33) (end 1.33 0) (layer F.SilkS) (width 0.12)) (fp_line (start 0 -1.33) (end 1.33 -1.33) (layer F.SilkS) (width 0.12)) (fp_line (start -1.8 -1.8) (end 1.75 -1.8) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.75 -1.8) (end 1.75 6.85) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.75 6.85) (end -1.8 6.85) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.8 6.85) (end -1.8 -1.8) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 2.54) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 3 thru_hole oval (at 0 5.08 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 70 /12V_OUTPUT)) (pad 2 thru_hole oval (at 0 2.54 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 1 GND)) (pad 1 thru_hole rect (at 0 0 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 38 /3V3_FUSED)) (model ${KISYS3DMOD}/Connector_PinSocket_2.54mm.3dshapes/PinSocket_1x03_P2.54mm_Vertical.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module PJ-202A:PJ-202A (layer F.Cu) (tedit 56E4A9C6) (tstamp 606A017A) (at 106.045 36.195 90) (descr "CONN POWER JACK 2.1MM PCB") (tags "CONN POWER JACK 2.1MM PCB BARREL JACK") (path /6074305E) (fp_text reference J1 (at 0 -2.54 90) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value Barrel_Jack_Switch (at 0.7 3.5 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 7.2 -4.5) (end 7.2 4.5) (layer F.Fab) (width 0.15)) (fp_line (start -3.7 -2.3) (end -3.7 -4.5) (layer F.Fab) (width 0.15)) (fp_line (start -3.7 -4.5) (end -2 -4.5) (layer F.Fab) (width 0.15)) (fp_line (start 2 -4.5) (end 10.7 -4.5) (layer F.Fab) (width 0.15)) (fp_line (start 10.7 -4.5) (end 10.7 4.5) (layer F.Fab) (width 0.15)) (fp_line (start 10.7 4.5) (end -3.7 4.5) (layer F.Fab) (width 0.15)) (fp_line (start -3.7 4.5) (end -3.7 2.3) (layer F.Fab) (width 0.15)) (pad 3 thru_hole oval (at 0 -4.7 90) (size 4 2) (drill oval 3 1) (layers *.Cu *.Mask F.SilkS) (net 1 GND)) (pad 2 thru_hole oval (at 3 0 90) (size 2 4) (drill oval 1 3) (layers *.Cu *.Mask F.SilkS) (net 1 GND)) (pad 1 thru_hole oval (at -3 0 90) (size 2 4.5) (drill oval 1 3.5) (layers *.Cu *.Mask F.SilkS) (net 2 +12V)) ) (module Resistor_SMD:R_0805_2012Metric (layer F.Cu) (tedit 5F68FEEE) (tstamp 6067D5F5) (at 127 93.98 180) (descr "Resistor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") (tags resistor) (path /6072153E) (attr smd) (fp_text reference R13 (at 0 -1.65) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value 220 (at 0 1.65) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 1.68 0.95) (end -1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.68 -0.95) (end 1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.68 -0.95) (end 1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.68 0.95) (end -1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start -0.227064 0.735) (end 0.227064 0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -0.227064 -0.735) (end 0.227064 -0.735) (layer F.SilkS) (width 0.12)) (fp_line (start 1 0.625) (end -1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 -0.625) (end 1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start -1 -0.625) (end 1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start -1 0.625) (end -1 -0.625) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.5 0.5) (thickness 0.08))) ) (pad 2 smd roundrect (at 0.9125 0 180) (size 1.025 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.243902) (net 76 "Net-(D4-Pad1)")) (pad 1 smd roundrect (at -0.9125 0 180) (size 1.025 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.243902) (net 1 GND)) (model ${KISYS3DMOD}/Resistor_SMD.3dshapes/R_0805_2012Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module TestPoint:TestPoint_THTPad_D2.0mm_Drill1.0mm (layer B.Cu) (tedit 5A0F774F) (tstamp 6067A28C) (at 111.125 97.79) (descr "THT pad as test Point, diameter 2.0mm, hole diameter 1.0mm") (tags "test point THT pad") (path /62BE70B7) (attr virtual) (fp_text reference TP74 (at 0 -2.54) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) (fp_text value TestPoint (at 0 -2.05) (layer B.Fab) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) (fp_circle (center 0 0) (end 0 -1.2) (layer B.SilkS) (width 0.12)) (fp_circle (center 0 0) (end 1.5 0) (layer B.CrtYd) (width 0.05)) (fp_text user %R (at 0 -2.54) (layer B.Fab) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) (pad 1 thru_hole circle (at 0 0) (size 2 2) (drill 1) (layers *.Cu *.Mask) (net 34 "Net-(C4-Pad2)")) ) (module MountingHole:MountingHole_3.2mm_M3_ISO7380_Pad (layer B.Cu) (tedit 56D1B4CB) (tstamp 6066C626) (at 124.46 116.84) (descr "Mounting Hole 3.2mm, M3, ISO7380") (tags "mounting hole 3.2mm m3 iso7380") (path /62B5CEC0) (attr virtual) (fp_text reference H16 (at 0 -3.81) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) (fp_text value MountingHole (at 0 -3.85) (layer B.Fab) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) (fp_circle (center 0 0) (end 3.1 0) (layer B.CrtYd) (width 0.05)) (fp_circle (center 0 0) (end 2.85 0) (layer Cmts.User) (width 0.15)) (fp_text user %R (at 0.3 0) (layer B.Fab) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) (pad 1 thru_hole circle (at 0 0) (size 5.7 5.7) (drill 3.2) (layers *.Cu *.Mask)) ) (module MountingHole:MountingHole_3.2mm_M3_ISO7380_Pad (layer B.Cu) (tedit 56D1B4CB) (tstamp 6066C749) (at 124.46 29.21) (descr "Mounting Hole 3.2mm, M3, ISO7380") (tags "mounting hole 3.2mm m3 iso7380") (path /62B5CB5E) (attr virtual) (fp_text reference H15 (at -5.08 0) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) (fp_text value MountingHole (at 0 -3.85) (layer B.Fab) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) (fp_circle (center 0 0) (end 3.1 0) (layer B.CrtYd) (width 0.05)) (fp_circle (center 0 0) (end 2.85 0) (layer Cmts.User) (width 0.15)) (fp_text user %R (at 0.3 0) (layer B.Fab) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) (pad 1 thru_hole circle (at 0 0) (size 5.7 5.7) (drill 3.2) (layers *.Cu *.Mask)) ) (module MountingHole:MountingHole_3.2mm_M3_ISO7380_Pad (layer B.Cu) (tedit 56D1B4CB) (tstamp 617FD3E5) (at 220.345 68.58) (descr "Mounting Hole 3.2mm, M3, ISO7380") (tags "mounting hole 3.2mm m3 iso7380") (path /62B11AA1) (attr virtual) (fp_text reference H14 (at 0 3.85) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) (fp_text value MountingHole (at 0 -3.85) (layer B.Fab) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) (fp_circle (center 0 0) (end 3.1 0) (layer B.CrtYd) (width 0.05)) (fp_circle (center 0 0) (end 2.85 0) (layer Cmts.User) (width 0.15)) (fp_text user %R (at 0.3 0) (layer B.Fab) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) (pad 1 thru_hole circle (at 0 0) (size 5.7 5.7) (drill 3.2) (layers *.Cu *.Mask)) ) (module MountingHole:MountingHole_3.2mm_M3_ISO7380_Pad (layer B.Cu) (tedit 56D1B4CB) (tstamp 6066C60E) (at 157.48 66.04) (descr "Mounting Hole 3.2mm, M3, ISO7380") (tags "mounting hole 3.2mm m3 iso7380") (path /62B11A97) (attr virtual) (fp_text reference H13 (at 0 3.85) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) (fp_text value MountingHole (at 0 -3.85) (layer B.Fab) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) (fp_circle (center 0 0) (end 3.1 0) (layer B.CrtYd) (width 0.05)) (fp_circle (center 0 0) (end 2.85 0) (layer Cmts.User) (width 0.15)) (fp_text user %R (at 0.3 0) (layer B.Fab) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) (pad 1 thru_hole circle (at 0 0) (size 5.7 5.7) (drill 3.2) (layers *.Cu *.Mask)) ) (module MountingHole:MountingHole_3.2mm_M3_ISO7380_Pad (layer B.Cu) (tedit 56D1B4CB) (tstamp 6066C734) (at 124.46 68.58) (descr "Mounting Hole 3.2mm, M3, ISO7380") (tags "mounting hole 3.2mm m3 iso7380") (path /62B11A8D) (attr virtual) (fp_text reference H12 (at 0 3.85) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) (fp_text value MountingHole (at 0 -3.85) (layer B.Fab) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) (fp_circle (center 0 0) (end 3.1 0) (layer B.CrtYd) (width 0.05)) (fp_circle (center 0 0) (end 2.85 0) (layer Cmts.User) (width 0.15)) (fp_text user %R (at 0.3 0) (layer B.Fab) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) (pad 1 thru_hole circle (at 0 0) (size 5.7 5.7) (drill 3.2) (layers *.Cu *.Mask)) ) (module MountingHole:MountingHole_3.2mm_M3_ISO7380_Pad (layer B.Cu) (tedit 56D1B4CB) (tstamp 6066C63E) (at 91.44 66.04) (descr "Mounting Hole 3.2mm, M3, ISO7380") (tags "mounting hole 3.2mm m3 iso7380") (path /62B11A83) (attr virtual) (fp_text reference H11 (at 0 3.85) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) (fp_text value MountingHole (at 0 -3.85) (layer B.Fab) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) (fp_circle (center 0 0) (end 3.1 0) (layer B.CrtYd) (width 0.05)) (fp_circle (center 0 0) (end 2.85 0) (layer Cmts.User) (width 0.15)) (fp_text user %R (at 0.3 0) (layer B.Fab) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) (pad 1 thru_hole circle (at 0 0) (size 5.7 5.7) (drill 3.2) (layers *.Cu *.Mask)) ) (module MountingHole:MountingHole_3.2mm_M3_ISO7380_Pad (layer B.Cu) (tedit 56D1B4CB) (tstamp 6066C680) (at 28.575 68.58) (descr "Mounting Hole 3.2mm, M3, ISO7380") (tags "mounting hole 3.2mm m3 iso7380") (path /62B11681) (attr virtual) (fp_text reference H10 (at 0 3.85) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) (fp_text value MountingHole (at 0 -3.85) (layer B.Fab) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) (fp_circle (center 0 0) (end 3.1 0) (layer B.CrtYd) (width 0.05)) (fp_circle (center 0 0) (end 2.85 0) (layer Cmts.User) (width 0.15)) (fp_text user %R (at 0.3 0) (layer B.Fab) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) (pad 1 thru_hole circle (at 0 0) (size 5.7 5.7) (drill 3.2) (layers *.Cu *.Mask)) ) (module MountingHole:MountingHole_3.2mm_M3_ISO7380_Pad (layer B.Cu) (tedit 56D1B4CB) (tstamp 6066C941) (at 219.71 116.84) (descr "Mounting Hole 3.2mm, M3, ISO7380") (tags "mounting hole 3.2mm m3 iso7380") (path /627806C7) (attr virtual) (fp_text reference H9 (at 0 -3.81) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) (fp_text value MountingHole (at 0 -3.85) (layer B.Fab) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) (fp_circle (center 0 0) (end 2.85 0) (layer Cmts.User) (width 0.15)) (fp_circle (center 0 0) (end 3.1 0) (layer B.CrtYd) (width 0.05)) (fp_text user %R (at 0.3 0) (layer B.Fab) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) (pad 1 thru_hole circle (at 0 0) (size 5.7 5.7) (drill 3.2) (layers *.Cu *.Mask)) ) (module MountingHole:MountingHole_3.2mm_M3_ISO7380_Pad (layer B.Cu) (tedit 56D1B4CB) (tstamp 6066CBFC) (at 29.21 116.84) (descr "Mounting Hole 3.2mm, M3, ISO7380") (tags "mounting hole 3.2mm m3 iso7380") (path /627806BD) (attr virtual) (fp_text reference H8 (at 0 -3.81) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) (fp_text value MountingHole (at 0 -3.85) (layer B.Fab) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) (fp_circle (center 0 0) (end 2.85 0) (layer Cmts.User) (width 0.15)) (fp_circle (center 0 0) (end 3.1 0) (layer B.CrtYd) (width 0.05)) (fp_text user %R (at 0.3 0) (layer B.Fab) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) (pad 1 thru_hole circle (at 0 0) (size 5.7 5.7) (drill 3.2) (layers *.Cu *.Mask)) ) (module MountingHole:MountingHole_3.2mm_M3_ISO7380_Pad (layer B.Cu) (tedit 56D1B4CB) (tstamp 6066CB00) (at 219.71 29.21) (descr "Mounting Hole 3.2mm, M3, ISO7380") (tags "mounting hole 3.2mm m3 iso7380") (path /627806B3) (attr virtual) (fp_text reference H7 (at 0 4.445) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) (fp_text value MountingHole (at 0 -3.85) (layer B.Fab) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) (fp_circle (center 0 0) (end 2.85 0) (layer Cmts.User) (width 0.15)) (fp_circle (center 0 0) (end 3.1 0) (layer B.CrtYd) (width 0.05)) (fp_text user %R (at 0.3 0) (layer B.Fab) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) (pad 1 thru_hole circle (at 0 0) (size 5.7 5.7) (drill 3.2) (layers *.Cu *.Mask)) ) (module MountingHole:MountingHole_3.2mm_M3_ISO7380_Pad (layer B.Cu) (tedit 56D1B4CB) (tstamp 6066CCF8) (at 29.21 29.21) (descr "Mounting Hole 3.2mm, M3, ISO7380") (tags "mounting hole 3.2mm m3 iso7380") (path /62780377) (attr virtual) (fp_text reference H6 (at 3.81 3.175) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) (fp_text value MountingHole (at 0 -3.85) (layer B.Fab) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) (fp_circle (center 0 0) (end 2.85 0) (layer Cmts.User) (width 0.15)) (fp_circle (center 0 0) (end 3.1 0) (layer B.CrtYd) (width 0.05)) (fp_text user %R (at 0.3 0) (layer B.Fab) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) (pad 1 thru_hole circle (at 0 0) (size 5.7 5.7) (drill 3.2) (layers *.Cu *.Mask)) ) (module Connector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_Vertical (layer F.Cu) (tedit 59FED5CC) (tstamp 60676EA0) (at 148.59 118.745 90) (descr "Through hole straight pin header, 1x04, 2.54mm pitch, single row") (tags "Through hole pin header THT 1x04 2.54mm single row") (path /61F3AACC) (fp_text reference J31 (at 0 -2.33 90) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value exp (at 0 9.95 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 1.8 -1.8) (end -1.8 -1.8) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.8 9.4) (end 1.8 -1.8) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.8 9.4) (end 1.8 9.4) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.8 -1.8) (end -1.8 9.4) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.33 -1.33) (end 0 -1.33) (layer F.SilkS) (width 0.12)) (fp_line (start -1.33 0) (end -1.33 -1.33) (layer F.SilkS) (width 0.12)) (fp_line (start -1.33 1.27) (end 1.33 1.27) (layer F.SilkS) (width 0.12)) (fp_line (start 1.33 1.27) (end 1.33 8.95) (layer F.SilkS) (width 0.12)) (fp_line (start -1.33 1.27) (end -1.33 8.95) (layer F.SilkS) (width 0.12)) (fp_line (start -1.33 8.95) (end 1.33 8.95) (layer F.SilkS) (width 0.12)) (fp_line (start -1.27 -0.635) (end -0.635 -1.27) (layer F.Fab) (width 0.1)) (fp_line (start -1.27 8.89) (end -1.27 -0.635) (layer F.Fab) (width 0.1)) (fp_line (start 1.27 8.89) (end -1.27 8.89) (layer F.Fab) (width 0.1)) (fp_line (start 1.27 -1.27) (end 1.27 8.89) (layer F.Fab) (width 0.1)) (fp_line (start -0.635 -1.27) (end 1.27 -1.27) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 3.81) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 4 thru_hole oval (at 0 7.62 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 1 GND)) (pad 3 thru_hole oval (at 0 5.08 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 1 GND)) (pad 2 thru_hole oval (at 0 2.54 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 1 GND)) (pad 1 thru_hole rect (at 0 0 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 1 GND)) (model ${KISYS3DMOD}/Connector_PinHeader_2.54mm.3dshapes/PinHeader_1x04_P2.54mm_Vertical.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Connector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_Vertical (layer F.Cu) (tedit 59FED5CC) (tstamp 60676DD1) (at 148.59 116.205 90) (descr "Through hole straight pin header, 1x04, 2.54mm pitch, single row") (tags "Through hole pin header THT 1x04 2.54mm single row") (path /61F3928E) (fp_text reference J30 (at 0 -2.33 90) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value exp (at 0 9.95 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 1.8 -1.8) (end -1.8 -1.8) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.8 9.4) (end 1.8 -1.8) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.8 9.4) (end 1.8 9.4) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.8 -1.8) (end -1.8 9.4) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.33 -1.33) (end 0 -1.33) (layer F.SilkS) (width 0.12)) (fp_line (start -1.33 0) (end -1.33 -1.33) (layer F.SilkS) (width 0.12)) (fp_line (start -1.33 1.27) (end 1.33 1.27) (layer F.SilkS) (width 0.12)) (fp_line (start 1.33 1.27) (end 1.33 8.95) (layer F.SilkS) (width 0.12)) (fp_line (start -1.33 1.27) (end -1.33 8.95) (layer F.SilkS) (width 0.12)) (fp_line (start -1.33 8.95) (end 1.33 8.95) (layer F.SilkS) (width 0.12)) (fp_line (start -1.27 -0.635) (end -0.635 -1.27) (layer F.Fab) (width 0.1)) (fp_line (start -1.27 8.89) (end -1.27 -0.635) (layer F.Fab) (width 0.1)) (fp_line (start 1.27 8.89) (end -1.27 8.89) (layer F.Fab) (width 0.1)) (fp_line (start 1.27 -1.27) (end 1.27 8.89) (layer F.Fab) (width 0.1)) (fp_line (start -0.635 -1.27) (end 1.27 -1.27) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 3.81) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 4 thru_hole oval (at 0 7.62 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 19 +3V3)) (pad 3 thru_hole oval (at 0 5.08 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 19 +3V3)) (pad 2 thru_hole oval (at 0 2.54 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 19 +3V3)) (pad 1 thru_hole rect (at 0 0 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 19 +3V3)) (model ${KISYS3DMOD}/Connector_PinHeader_2.54mm.3dshapes/PinHeader_1x04_P2.54mm_Vertical.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Connector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_Vertical (layer F.Cu) (tedit 59FED5CC) (tstamp 60676E5B) (at 148.59 113.665 90) (descr "Through hole straight pin header, 1x04, 2.54mm pitch, single row") (tags "Through hole pin header THT 1x04 2.54mm single row") (path /61F36F61) (fp_text reference J29 (at 0 -2.33 90) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value exp (at 0 9.95 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 1.8 -1.8) (end -1.8 -1.8) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.8 9.4) (end 1.8 -1.8) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.8 9.4) (end 1.8 9.4) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.8 -1.8) (end -1.8 9.4) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.33 -1.33) (end 0 -1.33) (layer F.SilkS) (width 0.12)) (fp_line (start -1.33 0) (end -1.33 -1.33) (layer F.SilkS) (width 0.12)) (fp_line (start -1.33 1.27) (end 1.33 1.27) (layer F.SilkS) (width 0.12)) (fp_line (start 1.33 1.27) (end 1.33 8.95) (layer F.SilkS) (width 0.12)) (fp_line (start -1.33 1.27) (end -1.33 8.95) (layer F.SilkS) (width 0.12)) (fp_line (start -1.33 8.95) (end 1.33 8.95) (layer F.SilkS) (width 0.12)) (fp_line (start -1.27 -0.635) (end -0.635 -1.27) (layer F.Fab) (width 0.1)) (fp_line (start -1.27 8.89) (end -1.27 -0.635) (layer F.Fab) (width 0.1)) (fp_line (start 1.27 8.89) (end -1.27 8.89) (layer F.Fab) (width 0.1)) (fp_line (start 1.27 -1.27) (end 1.27 8.89) (layer F.Fab) (width 0.1)) (fp_line (start -0.635 -1.27) (end 1.27 -1.27) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 3.81) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 4 thru_hole oval (at 0 7.62 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 81 /GPA7)) (pad 3 thru_hole oval (at 0 5.08 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 82 /GPA6)) (pad 2 thru_hole oval (at 0 2.54 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 83 /GPA5)) (pad 1 thru_hole rect (at 0 0 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 84 /GPA4)) (model ${KISYS3DMOD}/Connector_PinHeader_2.54mm.3dshapes/PinHeader_1x04_P2.54mm_Vertical.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Connector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_Vertical (layer F.Cu) (tedit 59FED5CC) (tstamp 60676E16) (at 135.89 118.745 90) (descr "Through hole straight pin header, 1x04, 2.54mm pitch, single row") (tags "Through hole pin header THT 1x04 2.54mm single row") (path /61F3A3F5) (fp_text reference J28 (at 0 -2.33 90) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value exp (at 0 9.95 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 1.8 -1.8) (end -1.8 -1.8) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.8 9.4) (end 1.8 -1.8) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.8 9.4) (end 1.8 9.4) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.8 -1.8) (end -1.8 9.4) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.33 -1.33) (end 0 -1.33) (layer F.SilkS) (width 0.12)) (fp_line (start -1.33 0) (end -1.33 -1.33) (layer F.SilkS) (width 0.12)) (fp_line (start -1.33 1.27) (end 1.33 1.27) (layer F.SilkS) (width 0.12)) (fp_line (start 1.33 1.27) (end 1.33 8.95) (layer F.SilkS) (width 0.12)) (fp_line (start -1.33 1.27) (end -1.33 8.95) (layer F.SilkS) (width 0.12)) (fp_line (start -1.33 8.95) (end 1.33 8.95) (layer F.SilkS) (width 0.12)) (fp_line (start -1.27 -0.635) (end -0.635 -1.27) (layer F.Fab) (width 0.1)) (fp_line (start -1.27 8.89) (end -1.27 -0.635) (layer F.Fab) (width 0.1)) (fp_line (start 1.27 8.89) (end -1.27 8.89) (layer F.Fab) (width 0.1)) (fp_line (start 1.27 -1.27) (end 1.27 8.89) (layer F.Fab) (width 0.1)) (fp_line (start -0.635 -1.27) (end 1.27 -1.27) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 3.81) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 4 thru_hole oval (at 0 7.62 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 1 GND)) (pad 3 thru_hole oval (at 0 5.08 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 1 GND)) (pad 2 thru_hole oval (at 0 2.54 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 1 GND)) (pad 1 thru_hole rect (at 0 0 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 1 GND)) (model ${KISYS3DMOD}/Connector_PinHeader_2.54mm.3dshapes/PinHeader_1x04_P2.54mm_Vertical.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Connector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_Vertical (layer F.Cu) (tedit 59FED5CC) (tstamp 60676F2A) (at 135.89 116.205 90) (descr "Through hole straight pin header, 1x04, 2.54mm pitch, single row") (tags "Through hole pin header THT 1x04 2.54mm single row") (path /61F38C5C) (fp_text reference J27 (at 0 -2.33 90) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value exp (at 0 9.95 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 1.8 -1.8) (end -1.8 -1.8) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.8 9.4) (end 1.8 -1.8) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.8 9.4) (end 1.8 9.4) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.8 -1.8) (end -1.8 9.4) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.33 -1.33) (end 0 -1.33) (layer F.SilkS) (width 0.12)) (fp_line (start -1.33 0) (end -1.33 -1.33) (layer F.SilkS) (width 0.12)) (fp_line (start -1.33 1.27) (end 1.33 1.27) (layer F.SilkS) (width 0.12)) (fp_line (start 1.33 1.27) (end 1.33 8.95) (layer F.SilkS) (width 0.12)) (fp_line (start -1.33 1.27) (end -1.33 8.95) (layer F.SilkS) (width 0.12)) (fp_line (start -1.33 8.95) (end 1.33 8.95) (layer F.SilkS) (width 0.12)) (fp_line (start -1.27 -0.635) (end -0.635 -1.27) (layer F.Fab) (width 0.1)) (fp_line (start -1.27 8.89) (end -1.27 -0.635) (layer F.Fab) (width 0.1)) (fp_line (start 1.27 8.89) (end -1.27 8.89) (layer F.Fab) (width 0.1)) (fp_line (start 1.27 -1.27) (end 1.27 8.89) (layer F.Fab) (width 0.1)) (fp_line (start -0.635 -1.27) (end 1.27 -1.27) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 3.81) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 4 thru_hole oval (at 0 7.62 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 19 +3V3)) (pad 3 thru_hole oval (at 0 5.08 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 19 +3V3)) (pad 2 thru_hole oval (at 0 2.54 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 19 +3V3)) (pad 1 thru_hole rect (at 0 0 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 19 +3V3)) (model ${KISYS3DMOD}/Connector_PinHeader_2.54mm.3dshapes/PinHeader_1x04_P2.54mm_Vertical.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Connector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_Vertical (layer F.Cu) (tedit 59FED5CC) (tstamp 60676EE5) (at 135.89 113.665 90) (descr "Through hole straight pin header, 1x04, 2.54mm pitch, single row") (tags "Through hole pin header THT 1x04 2.54mm single row") (path /61F3688D) (fp_text reference J26 (at 0 -2.33 90) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value exp (at 0 9.95 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 1.8 -1.8) (end -1.8 -1.8) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.8 9.4) (end 1.8 -1.8) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.8 9.4) (end 1.8 9.4) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.8 -1.8) (end -1.8 9.4) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.33 -1.33) (end 0 -1.33) (layer F.SilkS) (width 0.12)) (fp_line (start -1.33 0) (end -1.33 -1.33) (layer F.SilkS) (width 0.12)) (fp_line (start -1.33 1.27) (end 1.33 1.27) (layer F.SilkS) (width 0.12)) (fp_line (start 1.33 1.27) (end 1.33 8.95) (layer F.SilkS) (width 0.12)) (fp_line (start -1.33 1.27) (end -1.33 8.95) (layer F.SilkS) (width 0.12)) (fp_line (start -1.33 8.95) (end 1.33 8.95) (layer F.SilkS) (width 0.12)) (fp_line (start -1.27 -0.635) (end -0.635 -1.27) (layer F.Fab) (width 0.1)) (fp_line (start -1.27 8.89) (end -1.27 -0.635) (layer F.Fab) (width 0.1)) (fp_line (start 1.27 8.89) (end -1.27 8.89) (layer F.Fab) (width 0.1)) (fp_line (start 1.27 -1.27) (end 1.27 8.89) (layer F.Fab) (width 0.1)) (fp_line (start -0.635 -1.27) (end 1.27 -1.27) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 3.81) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 4 thru_hole oval (at 0 7.62 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 77 /GPA3)) (pad 3 thru_hole oval (at 0 5.08 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 78 /GPA2)) (pad 2 thru_hole oval (at 0 2.54 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 79 /GPA1)) (pad 1 thru_hole rect (at 0 0 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 80 /GPA0)) (model ${KISYS3DMOD}/Connector_PinHeader_2.54mm.3dshapes/PinHeader_1x04_P2.54mm_Vertical.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Package_SO:SOIC-8_3.9x4.9mm_P1.27mm (layer F.Cu) (tedit 5D9F72B1) (tstamp 6066CEED) (at 119.38 45.72) (descr "SOIC, 8 Pin (JEDEC MS-012AA, https://www.analog.com/media/en/package-pcb-resources/package/pkg_pdf/soic_narrow-r/r_8.pdf), generated with kicad-footprint-generator ipc_gullwing_generator.py") (tags "SOIC SO") (path /60D3343A) (attr smd) (fp_text reference U5 (at 0 -3.4) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value INA219BxD (at 0 3.4) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 3.7 -2.7) (end -3.7 -2.7) (layer F.CrtYd) (width 0.05)) (fp_line (start 3.7 2.7) (end 3.7 -2.7) (layer F.CrtYd) (width 0.05)) (fp_line (start -3.7 2.7) (end 3.7 2.7) (layer F.CrtYd) (width 0.05)) (fp_line (start -3.7 -2.7) (end -3.7 2.7) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.95 -1.475) (end -0.975 -2.45) (layer F.Fab) (width 0.1)) (fp_line (start -1.95 2.45) (end -1.95 -1.475) (layer F.Fab) (width 0.1)) (fp_line (start 1.95 2.45) (end -1.95 2.45) (layer F.Fab) (width 0.1)) (fp_line (start 1.95 -2.45) (end 1.95 2.45) (layer F.Fab) (width 0.1)) (fp_line (start -0.975 -2.45) (end 1.95 -2.45) (layer F.Fab) (width 0.1)) (fp_line (start 0 -2.56) (end -3.45 -2.56) (layer F.SilkS) (width 0.12)) (fp_line (start 0 -2.56) (end 1.95 -2.56) (layer F.SilkS) (width 0.12)) (fp_line (start 0 2.56) (end -1.95 2.56) (layer F.SilkS) (width 0.12)) (fp_line (start 0 2.56) (end 1.95 2.56) (layer F.SilkS) (width 0.12)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.98 0.98) (thickness 0.15))) ) (pad 8 smd roundrect (at 2.475 -1.905) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 20 "Net-(D2-Pad2)")) (pad 7 smd roundrect (at 2.475 -0.635) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 70 /12V_OUTPUT)) (pad 6 smd roundrect (at 2.475 0.635) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 1 GND)) (pad 5 smd roundrect (at 2.475 1.905) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 19 +3V3)) (pad 4 smd roundrect (at -2.475 1.905) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 64 /SCL)) (pad 3 smd roundrect (at -2.475 0.635) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 63 /SDA)) (pad 2 smd roundrect (at -2.475 -0.635) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 1 GND)) (pad 1 smd roundrect (at -2.475 -1.905) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 1 GND)) (model ${KISYS3DMOD}/Package_SO.3dshapes/SOIC-8_3.9x4.9mm_P1.27mm.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Package_SO:SSOP-28_5.3x10.2mm_P0.65mm (layer F.Cu) (tedit 5A02F25C) (tstamp 6066CF4F) (at 146.05 106.045 270) (descr "28-Lead Plastic Shrink Small Outline (SS)-5.30 mm Body [SSOP] (see Microchip Packaging Specification 00000049BS.pdf)") (tags "SSOP 0.65") (path /60D19D8B) (attr smd) (fp_text reference U4 (at -1.905 -6.985 180) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value MCP23017_SS (at 0 6.25 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -1.65 -5.1) (end 2.65 -5.1) (layer F.Fab) (width 0.15)) (fp_line (start 2.65 -5.1) (end 2.65 5.1) (layer F.Fab) (width 0.15)) (fp_line (start 2.65 5.1) (end -2.65 5.1) (layer F.Fab) (width 0.15)) (fp_line (start -2.65 5.1) (end -2.65 -4.1) (layer F.Fab) (width 0.15)) (fp_line (start -2.65 -4.1) (end -1.65 -5.1) (layer F.Fab) (width 0.15)) (fp_line (start -4.75 -5.5) (end -4.75 5.5) (layer F.CrtYd) (width 0.05)) (fp_line (start 4.75 -5.5) (end 4.75 5.5) (layer F.CrtYd) (width 0.05)) (fp_line (start -4.75 -5.5) (end 4.75 -5.5) (layer F.CrtYd) (width 0.05)) (fp_line (start -4.75 5.5) (end 4.75 5.5) (layer F.CrtYd) (width 0.05)) (fp_line (start -2.875 -5.325) (end -2.875 -4.75) (layer F.SilkS) (width 0.15)) (fp_line (start 2.875 -5.325) (end 2.875 -4.675) (layer F.SilkS) (width 0.15)) (fp_line (start 2.875 5.325) (end 2.875 4.675) (layer F.SilkS) (width 0.15)) (fp_line (start -2.875 5.325) (end -2.875 4.675) (layer F.SilkS) (width 0.15)) (fp_line (start -2.875 -5.325) (end 2.875 -5.325) (layer F.SilkS) (width 0.15)) (fp_line (start -2.875 5.325) (end 2.875 5.325) (layer F.SilkS) (width 0.15)) (fp_line (start -2.875 -4.75) (end -4.475 -4.75) (layer F.SilkS) (width 0.15)) (fp_text user %R (at 0 0 90) (layer F.Fab) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (pad 1 smd rect (at -3.6 -4.225 270) (size 1.75 0.45) (layers F.Cu F.Paste F.Mask) (net 43 /SENSOR_A_SIGNAL)) (pad 2 smd rect (at -3.6 -3.575 270) (size 1.75 0.45) (layers F.Cu F.Paste F.Mask) (net 46 /SENSOR_B_SIGNAL)) (pad 3 smd rect (at -3.6 -2.925 270) (size 1.75 0.45) (layers F.Cu F.Paste F.Mask) (net 49 /SENSOR_C_SIGNAL)) (pad 4 smd rect (at -3.6 -2.275 270) (size 1.75 0.45) (layers F.Cu F.Paste F.Mask) (net 85 /BUZZER)) (pad 5 smd rect (at -3.6 -1.625 270) (size 1.75 0.45) (layers F.Cu F.Paste F.Mask) (net 86 /DETECT)) (pad 6 smd rect (at -3.6 -0.975 270) (size 1.75 0.45) (layers F.Cu F.Paste F.Mask) (net 52 /SENSOR_D_SIGNAL)) (pad 7 smd rect (at -3.6 -0.325 270) (size 1.75 0.45) (layers F.Cu F.Paste F.Mask) (net 57 /SENSOR_E_SIGNAL)) (pad 8 smd rect (at -3.6 0.325 270) (size 1.75 0.45) (layers F.Cu F.Paste F.Mask) (net 60 /SENSOR_F_SIGNAL)) (pad 9 smd rect (at -3.6 0.975 270) (size 1.75 0.45) (layers F.Cu F.Paste F.Mask) (net 19 +3V3)) (pad 10 smd rect (at -3.6 1.625 270) (size 1.75 0.45) (layers F.Cu F.Paste F.Mask) (net 1 GND)) (pad 11 smd rect (at -3.6 2.275 270) (size 1.75 0.45) (layers F.Cu F.Paste F.Mask)) (pad 12 smd rect (at -3.6 2.925 270) (size 1.75 0.45) (layers F.Cu F.Paste F.Mask) (net 64 /SCL)) (pad 13 smd rect (at -3.6 3.575 270) (size 1.75 0.45) (layers F.Cu F.Paste F.Mask) (net 63 /SDA)) (pad 14 smd rect (at -3.6 4.225 270) (size 1.75 0.45) (layers F.Cu F.Paste F.Mask)) (pad 15 smd rect (at 3.6 4.225 270) (size 1.75 0.45) (layers F.Cu F.Paste F.Mask) (net 1 GND)) (pad 16 smd rect (at 3.6 3.575 270) (size 1.75 0.45) (layers F.Cu F.Paste F.Mask) (net 1 GND)) (pad 17 smd rect (at 3.6 2.925 270) (size 1.75 0.45) (layers F.Cu F.Paste F.Mask) (net 1 GND)) (pad 18 smd rect (at 3.6 2.275 270) (size 1.75 0.45) (layers F.Cu F.Paste F.Mask) (net 68 /MCP_RESET)) (pad 19 smd rect (at 3.6 1.625 270) (size 1.75 0.45) (layers F.Cu F.Paste F.Mask)) (pad 20 smd rect (at 3.6 0.975 270) (size 1.75 0.45) (layers F.Cu F.Paste F.Mask) (net 74 /MCP_INT)) (pad 21 smd rect (at 3.6 0.325 270) (size 1.75 0.45) (layers F.Cu F.Paste F.Mask) (net 80 /GPA0)) (pad 22 smd rect (at 3.6 -0.325 270) (size 1.75 0.45) (layers F.Cu F.Paste F.Mask) (net 79 /GPA1)) (pad 23 smd rect (at 3.6 -0.975 270) (size 1.75 0.45) (layers F.Cu F.Paste F.Mask) (net 78 /GPA2)) (pad 24 smd rect (at 3.6 -1.625 270) (size 1.75 0.45) (layers F.Cu F.Paste F.Mask) (net 77 /GPA3)) (pad 25 smd rect (at 3.6 -2.275 270) (size 1.75 0.45) (layers F.Cu F.Paste F.Mask) (net 84 /GPA4)) (pad 26 smd rect (at 3.6 -2.925 270) (size 1.75 0.45) (layers F.Cu F.Paste F.Mask) (net 83 /GPA5)) (pad 27 smd rect (at 3.6 -3.575 270) (size 1.75 0.45) (layers F.Cu F.Paste F.Mask) (net 82 /GPA6)) (pad 28 smd rect (at 3.6 -4.225 270) (size 1.75 0.45) (layers F.Cu F.Paste F.Mask) (net 81 /GPA7)) (model ${KISYS3DMOD}/Package_SO.3dshapes/SSOP-28_5.3x10.2mm_P0.65mm.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module VN7007ALHTR:VN7007ALHTR (layer F.Cu) (tedit 605D34ED) (tstamp 6066CFC8) (at 139.7 33.02 90) (path /60D334B0) (fp_text reference U3 (at -2.54 -6.604 180) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15)) (justify left)) ) (fp_text value VN7007ALH (at 0 0 90) (layer F.Fab) (effects (font (size 1.27 1.27) (thickness 0.15))) ) (fp_line (start 5.025001 -3.725) (end 5.025001 -3.725) (layer F.CrtYd) (width 0.15)) (fp_line (start 5.025001 -3.725) (end -7.024999 -3.725) (layer F.CrtYd) (width 0.15)) (fp_line (start -7.024999 -3.725) (end -7.024999 3.725) (layer F.CrtYd) (width 0.15)) (fp_line (start -7.024999 3.725) (end 5.025001 3.725) (layer F.CrtYd) (width 0.15)) (fp_line (start 5.025001 3.725) (end 5.025001 -3.725) (layer F.CrtYd) (width 0.15)) (fp_line (start 3.05 -3.25) (end 3.05 -3.15) (layer F.SilkS) (width 0.15)) (fp_line (start 3.05 3.15) (end 3.05 3.25) (layer F.SilkS) (width 0.15)) (fp_line (start -3.05 3.25) (end 3.05 3.25) (layer F.SilkS) (width 0.15)) (fp_line (start -3.05 -3.25) (end 3.05 -3.25) (layer F.SilkS) (width 0.15)) (fp_circle (center -6.4 -3.55) (end -6.275 -3.55) (layer F.SilkS) (width 0.25)) (fp_line (start -3.05 3.25) (end -3.05 -3.25) (layer F.Fab) (width 0.15)) (fp_line (start -3.05 -3.25) (end 3.05 -3.25) (layer F.Fab) (width 0.15)) (fp_line (start 3.05 -3.25) (end 3.05 3.25) (layer F.Fab) (width 0.15)) (fp_line (start 3.05 3.25) (end -3.05 3.25) (layer F.Fab) (width 0.15)) (pad 7 smd rect (at -5.425 2.55 180) (size 0.7 2.4) (layers F.Cu F.Paste F.Mask) (net 1 GND)) (pad 6 smd rect (at -5.425 1.7 180) (size 0.7 2.4) (layers F.Cu F.Paste F.Mask) (net 66 "Net-(R6-Pad2)")) (pad 5 smd rect (at -5.425 0.85 180) (size 0.7 2.4) (layers F.Cu F.Paste F.Mask) (net 67 "Net-(R8-Pad2)")) (pad 4 smd rect (at -5.425 0 180) (size 0.7 2.4) (layers F.Cu F.Paste F.Mask) (net 65 "Net-(R3-Pad1)")) (pad 3 smd rect (at -5.425 -0.85 180) (size 0.7 2.4) (layers F.Cu F.Paste F.Mask) (net 20 "Net-(D2-Pad2)")) (pad 2 smd rect (at -5.425 -1.7 180) (size 0.7 2.4) (layers F.Cu F.Paste F.Mask) (net 20 "Net-(D2-Pad2)")) (pad 1 smd rect (at -5.425 -2.55 180) (size 0.7 2.4) (layers F.Cu F.Paste F.Mask) (net 20 "Net-(D2-Pad2)")) (pad TAB smd rect (at 1.375 0 180) (size 5.55 6.5) (layers F.Cu F.Paste F.Mask) (net 75 /SW_IN)) (model ../lib/VN7003ALHTR.models/STMicroelectronics_-_VN7003ALHTR.step (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 90)) ) ) (module Package_TO_SOT_SMD:SOT-223-3_TabPin2 (layer F.Cu) (tedit 5A02FF57) (tstamp 6067A2AF) (at 125.095 101.6 270) (descr "module CMS SOT223 4 pins") (tags "CMS SOT") (path /61DC2D69) (attr smd) (fp_text reference U1 (at 3.81 -3.175 180) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value AP7361C-33E (at 0 4.5 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 1.85 -3.35) (end 1.85 3.35) (layer F.Fab) (width 0.1)) (fp_line (start -1.85 3.35) (end 1.85 3.35) (layer F.Fab) (width 0.1)) (fp_line (start -4.1 -3.41) (end 1.91 -3.41) (layer F.SilkS) (width 0.12)) (fp_line (start -0.85 -3.35) (end 1.85 -3.35) (layer F.Fab) (width 0.1)) (fp_line (start -1.85 3.41) (end 1.91 3.41) (layer F.SilkS) (width 0.12)) (fp_line (start -1.85 -2.35) (end -1.85 3.35) (layer F.Fab) (width 0.1)) (fp_line (start -1.85 -2.35) (end -0.85 -3.35) (layer F.Fab) (width 0.1)) (fp_line (start -4.4 -3.6) (end -4.4 3.6) (layer F.CrtYd) (width 0.05)) (fp_line (start -4.4 3.6) (end 4.4 3.6) (layer F.CrtYd) (width 0.05)) (fp_line (start 4.4 3.6) (end 4.4 -3.6) (layer F.CrtYd) (width 0.05)) (fp_line (start 4.4 -3.6) (end -4.4 -3.6) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.91 -3.41) (end 1.91 -2.15) (layer F.SilkS) (width 0.12)) (fp_line (start 1.91 3.41) (end 1.91 2.15) (layer F.SilkS) (width 0.12)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.8 0.8) (thickness 0.12))) ) (pad 1 smd rect (at -3.15 -2.3 270) (size 2 1.5) (layers F.Cu F.Paste F.Mask) (net 33 +5V)) (pad 3 smd rect (at -3.15 2.3 270) (size 2 1.5) (layers F.Cu F.Paste F.Mask) (net 34 "Net-(C4-Pad2)")) (pad 2 smd rect (at -3.15 0 270) (size 2 1.5) (layers F.Cu F.Paste F.Mask) (net 1 GND)) (pad 2 smd rect (at 3.15 0 270) (size 2 3.8) (layers F.Cu F.Paste F.Mask) (net 1 GND)) (model ${KISYS3DMOD}/Package_TO_SOT_SMD.3dshapes/SOT-223.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Resistor_SMD:R_0612_1632Metric (layer F.Cu) (tedit 5F68FEEE) (tstamp 6066D4A5) (at 137.16 44.45 270) (descr "Resistor SMD 0612 (1632 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: https://www.vishay.com/docs/20019/rcwe.pdf), generated with kicad-footprint-generator") (tags resistor) (path /60D3347A) (attr smd) (fp_text reference R12 (at 2.286 0 180) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value "0.01R 1% 1W" (at 0 2.65 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 1.5 1.95) (end -1.5 1.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.5 -1.95) (end 1.5 1.95) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.5 -1.95) (end 1.5 -1.95) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.5 1.95) (end -1.5 -1.95) (layer F.CrtYd) (width 0.05)) (fp_line (start -0.182983 1.71) (end 0.182983 1.71) (layer F.SilkS) (width 0.12)) (fp_line (start -0.182983 -1.71) (end 0.182983 -1.71) (layer F.SilkS) (width 0.12)) (fp_line (start 0.8 1.6) (end -0.8 1.6) (layer F.Fab) (width 0.1)) (fp_line (start 0.8 -1.6) (end 0.8 1.6) (layer F.Fab) (width 0.1)) (fp_line (start -0.8 -1.6) (end 0.8 -1.6) (layer F.Fab) (width 0.1)) (fp_line (start -0.8 1.6) (end -0.8 -1.6) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 0 90) (layer F.Fab) (effects (font (size 0.4 0.4) (thickness 0.06))) ) (pad 2 smd roundrect (at 0.75 0 270) (size 1 3.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 70 /12V_OUTPUT)) (pad 1 smd roundrect (at -0.75 0 270) (size 1 3.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 20 "Net-(D2-Pad2)")) (model ${KISYS3DMOD}/Resistor_SMD.3dshapes/R_0612_1632Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Resistor_SMD:R_0805_2012Metric (layer F.Cu) (tedit 5F68FEEE) (tstamp 6066D4D5) (at 132.08 48.26) (descr "Resistor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") (tags resistor) (path /6154C8DA) (attr smd) (fp_text reference R11 (at 0 1.778) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value 220 (at 0 1.65) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 1.68 0.95) (end -1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.68 -0.95) (end 1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.68 -0.95) (end 1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.68 0.95) (end -1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start -0.227064 0.735) (end 0.227064 0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -0.227064 -0.735) (end 0.227064 -0.735) (layer F.SilkS) (width 0.12)) (fp_line (start 1 0.625) (end -1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 -0.625) (end 1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start -1 -0.625) (end 1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start -1 0.625) (end -1 -0.625) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.5 0.5) (thickness 0.08))) ) (pad 2 smd roundrect (at 0.9125 0) (size 1.025 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.243902) (net 21 "Net-(D3-Pad2)")) (pad 1 smd roundrect (at -0.9125 0) (size 1.025 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.243902) (net 69 /12V_TEST_FEED)) (model ${KISYS3DMOD}/Resistor_SMD.3dshapes/R_0805_2012Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Resistor_SMD:R_0805_2012Metric (layer F.Cu) (tedit 5F68FEEE) (tstamp 6066D505) (at 137.16 109.22 180) (descr "Resistor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") (tags resistor) (path /60D19DD6) (attr smd) (fp_text reference R10 (at 0 1.905) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value 15k (at 0 1.65) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 1.68 0.95) (end -1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.68 -0.95) (end 1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.68 -0.95) (end 1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.68 0.95) (end -1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start -0.227064 0.735) (end 0.227064 0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -0.227064 -0.735) (end 0.227064 -0.735) (layer F.SilkS) (width 0.12)) (fp_line (start 1 0.625) (end -1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 -0.625) (end 1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start -1 -0.625) (end 1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start -1 0.625) (end -1 -0.625) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.5 0.5) (thickness 0.08))) ) (pad 2 smd roundrect (at 0.9125 0 180) (size 1.025 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.243902) (net 1 GND)) (pad 1 smd roundrect (at -0.9125 0 180) (size 1.025 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.243902) (net 68 /MCP_RESET)) (model ${KISYS3DMOD}/Resistor_SMD.3dshapes/R_0805_2012Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Resistor_SMD:R_0805_2012Metric (layer F.Cu) (tedit 5F68FEEE) (tstamp 6067585D) (at 140.97 48.26 90) (descr "Resistor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") (tags resistor) (path /60D334EB) (attr smd) (fp_text reference R9 (at -2.54 0 180) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value 2k (at 0 1.65 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 1.68 0.95) (end -1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.68 -0.95) (end 1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.68 -0.95) (end 1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.68 0.95) (end -1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start -0.227064 0.735) (end 0.227064 0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -0.227064 -0.735) (end 0.227064 -0.735) (layer F.SilkS) (width 0.12)) (fp_line (start 1 0.625) (end -1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 -0.625) (end 1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start -1 -0.625) (end 1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start -1 0.625) (end -1 -0.625) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 0 90) (layer F.Fab) (effects (font (size 0.5 0.5) (thickness 0.08))) ) (pad 2 smd roundrect (at 0.9125 0 90) (size 1.025 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.243902) (net 37 "Net-(D2-Pad1)")) (pad 1 smd roundrect (at -0.9125 0 90) (size 1.025 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.243902) (net 1 GND)) (model ${KISYS3DMOD}/Resistor_SMD.3dshapes/R_0805_2012Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Resistor_SMD:R_0805_2012Metric (layer F.Cu) (tedit 5F68FEEE) (tstamp 6066D535) (at 146.05 41.275 180) (descr "Resistor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") (tags resistor) (path /60D334BD) (attr smd) (fp_text reference R8 (at -2.54 0.127) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value 1k (at 0 1.65) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 1.68 0.95) (end -1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.68 -0.95) (end 1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.68 -0.95) (end 1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.68 0.95) (end -1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start -0.227064 0.735) (end 0.227064 0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -0.227064 -0.735) (end 0.227064 -0.735) (layer F.SilkS) (width 0.12)) (fp_line (start 1 0.625) (end -1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 -0.625) (end 1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start -1 -0.625) (end 1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start -1 0.625) (end -1 -0.625) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.5 0.5) (thickness 0.08))) ) (pad 2 smd roundrect (at 0.9125 0 180) (size 1.025 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.243902) (net 67 "Net-(R8-Pad2)")) (pad 1 smd roundrect (at -0.9125 0 180) (size 1.025 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.243902) (net 1 GND)) (model ${KISYS3DMOD}/Resistor_SMD.3dshapes/R_0805_2012Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Resistor_SMD:R_0805_2012Metric (layer F.Cu) (tedit 5F68FEEE) (tstamp 6066D571) (at 143.51 48.26 90) (descr "Resistor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") (tags resistor) (path /60D33456) (attr smd) (fp_text reference R7 (at -2.54 0 180) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value 220 (at 0 1.65 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 1.68 0.95) (end -1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.68 -0.95) (end 1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.68 -0.95) (end 1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.68 0.95) (end -1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start -0.227064 0.735) (end 0.227064 0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -0.227064 -0.735) (end 0.227064 -0.735) (layer F.SilkS) (width 0.12)) (fp_line (start 1 0.625) (end -1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 -0.625) (end 1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start -1 -0.625) (end 1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start -1 0.625) (end -1 -0.625) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 0 90) (layer F.Fab) (effects (font (size 0.5 0.5) (thickness 0.08))) ) (pad 2 smd roundrect (at 0.9125 0 90) (size 1.025 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.243902) (net 36 "Net-(D1-Pad1)")) (pad 1 smd roundrect (at -0.9125 0 90) (size 1.025 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.243902) (net 1 GND)) (model ${KISYS3DMOD}/Resistor_SMD.3dshapes/R_0805_2012Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Resistor_SMD:R_0805_2012Metric (layer F.Cu) (tedit 5F68FEEE) (tstamp 6066D5A1) (at 146.05 39.37 180) (descr "Resistor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") (tags resistor) (path /60D334C7) (attr smd) (fp_text reference R6 (at -2.54 0) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value 15k (at 0 1.65) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 1.68 0.95) (end -1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.68 -0.95) (end 1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.68 -0.95) (end 1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.68 0.95) (end -1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start -0.227064 0.735) (end 0.227064 0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -0.227064 -0.735) (end 0.227064 -0.735) (layer F.SilkS) (width 0.12)) (fp_line (start 1 0.625) (end -1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 -0.625) (end 1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start -1 -0.625) (end 1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start -1 0.625) (end -1 -0.625) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.5 0.5) (thickness 0.08))) ) (pad 2 smd roundrect (at 0.9125 0 180) (size 1.025 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.243902) (net 66 "Net-(R6-Pad2)")) (pad 1 smd roundrect (at -0.9125 0 180) (size 1.025 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.243902) (net 1 GND)) (model ${KISYS3DMOD}/Resistor_SMD.3dshapes/R_0805_2012Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Resistor_SMD:R_0805_2012Metric (layer F.Cu) (tedit 5F68FEEE) (tstamp 6066D5D1) (at 148.59 45.085 180) (descr "Resistor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") (tags resistor) (path /615A39FB) (attr smd) (fp_text reference R5 (at 0 -1.65) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value 15k (at 0 1.65) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 1.68 0.95) (end -1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.68 -0.95) (end 1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.68 -0.95) (end 1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.68 0.95) (end -1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start -0.227064 0.735) (end 0.227064 0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -0.227064 -0.735) (end 0.227064 -0.735) (layer F.SilkS) (width 0.12)) (fp_line (start 1 0.625) (end -1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 -0.625) (end 1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start -1 -0.625) (end 1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start -1 0.625) (end -1 -0.625) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.5 0.5) (thickness 0.08))) ) (pad 2 smd roundrect (at 0.9125 0 180) (size 1.025 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.243902) (net 35 /12V_EN)) (pad 1 smd roundrect (at -0.9125 0 180) (size 1.025 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.243902) (net 1 GND)) (model ${KISYS3DMOD}/Resistor_SMD.3dshapes/R_0805_2012Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Resistor_SMD:R_0805_2012Metric (layer F.Cu) (tedit 5F68FEEE) (tstamp 6066D601) (at 181.61 92.71 180) (descr "Resistor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") (tags resistor) (path /61B97817) (attr smd) (fp_text reference R4 (at 0 1.905) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value 15k (at 0 1.65) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -1 0.625) (end -1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start -1 -0.625) (end 1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 -0.625) (end 1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 0.625) (end -1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start -0.227064 -0.735) (end 0.227064 -0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -0.227064 0.735) (end 0.227064 0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -1.68 0.95) (end -1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.68 -0.95) (end 1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.68 -0.95) (end 1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.68 0.95) (end -1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.5 0.5) (thickness 0.08))) ) (pad 1 smd roundrect (at -0.9125 0 180) (size 1.025 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.243902) (net 74 /MCP_INT)) (pad 2 smd roundrect (at 0.9125 0 180) (size 1.025 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.243902) (net 19 +3V3)) (model ${KISYS3DMOD}/Resistor_SMD.3dshapes/R_0805_2012Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Resistor_SMD:R_0805_2012Metric (layer F.Cu) (tedit 5F68FEEE) (tstamp 6066D631) (at 141.605 41.275) (descr "Resistor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") (tags resistor) (path /60D3349B) (attr smd) (fp_text reference R3 (at -2.667 0.127) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value 15k (at 0 1.65) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 1.68 0.95) (end -1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.68 -0.95) (end 1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.68 -0.95) (end 1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.68 0.95) (end -1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start -0.227064 0.735) (end 0.227064 0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -0.227064 -0.735) (end 0.227064 -0.735) (layer F.SilkS) (width 0.12)) (fp_line (start 1 0.625) (end -1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 -0.625) (end 1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start -1 -0.625) (end 1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start -1 0.625) (end -1 -0.625) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.5 0.5) (thickness 0.08))) ) (pad 2 smd roundrect (at 0.9125 0) (size 1.025 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.243902) (net 35 /12V_EN)) (pad 1 smd roundrect (at -0.9125 0) (size 1.025 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.243902) (net 65 "Net-(R3-Pad1)")) (model ${KISYS3DMOD}/Resistor_SMD.3dshapes/R_0805_2012Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Resistor_SMD:R_0805_2012Metric (layer F.Cu) (tedit 5F68FEEE) (tstamp 6066D661) (at 156.464 103.886 180) (descr "Resistor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") (tags resistor) (path /60D19D97) (attr smd) (fp_text reference R2 (at 0 -1.65) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value 1k (at 0 1.65) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 1.68 0.95) (end -1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.68 -0.95) (end 1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.68 -0.95) (end 1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.68 0.95) (end -1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start -0.227064 0.735) (end 0.227064 0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -0.227064 -0.735) (end 0.227064 -0.735) (layer F.SilkS) (width 0.12)) (fp_line (start 1 0.625) (end -1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 -0.625) (end 1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start -1 -0.625) (end 1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start -1 0.625) (end -1 -0.625) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.5 0.5) (thickness 0.08))) ) (pad 2 smd roundrect (at 0.9125 0 180) (size 1.025 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.243902) (net 64 /SCL)) (pad 1 smd roundrect (at -0.9125 0 180) (size 1.025 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.243902) (net 19 +3V3)) (model ${KISYS3DMOD}/Resistor_SMD.3dshapes/R_0805_2012Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Resistor_SMD:R_0805_2012Metric (layer F.Cu) (tedit 5F68FEEE) (tstamp 6066D691) (at 159.004 101.854 180) (descr "Resistor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") (tags resistor) (path /60D19D91) (attr smd) (fp_text reference R1 (at 0 -1.65) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value 1k (at 0 1.65) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 1.68 0.95) (end -1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.68 -0.95) (end 1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.68 -0.95) (end 1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.68 0.95) (end -1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start -0.227064 0.735) (end 0.227064 0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -0.227064 -0.735) (end 0.227064 -0.735) (layer F.SilkS) (width 0.12)) (fp_line (start 1 0.625) (end -1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 -0.625) (end 1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start -1 -0.625) (end 1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start -1 0.625) (end -1 -0.625) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.5 0.5) (thickness 0.08))) ) (pad 2 smd roundrect (at 0.9125 0 180) (size 1.025 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.243902) (net 63 /SDA)) (pad 1 smd roundrect (at -0.9125 0 180) (size 1.025 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.243902) (net 19 +3V3)) (model ${KISYS3DMOD}/Resistor_SMD.3dshapes/R_0805_2012Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module BK-6013:BK-6013 (layer F.Cu) (tedit 605D2E8E) (tstamp 6066CAD8) (at 120.65 35.56 180) (path /60D33482) (fp_text reference F2 (at 0 -3.81) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value "Fuse Holder BK-6013" (at 0 -0.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -7.747 2.794) (end -7.747 -2.794) (layer F.CrtYd) (width 0.12)) (fp_line (start 7.747 2.794) (end -7.747 2.794) (layer F.CrtYd) (width 0.12)) (fp_line (start 7.747 -2.794) (end 7.747 2.794) (layer F.CrtYd) (width 0.12)) (fp_line (start -7.747 -2.794) (end 7.747 -2.794) (layer F.CrtYd) (width 0.12)) (fp_line (start -7.35 -2.375) (end -7.35 2.375) (layer F.SilkS) (width 0.15)) (fp_line (start 7.35 -2.375) (end 7.35 2.375) (layer F.SilkS) (width 0.15)) (fp_line (start -7.35 2.375) (end 7.35 2.375) (layer F.SilkS) (width 0.15)) (fp_line (start -7.35 -2.375) (end 7.35 -2.375) (layer F.SilkS) (width 0.15)) (pad 2 thru_hole circle (at 5.895 0 180) (size 2.7 2.7) (drill 1.65) (layers *.Cu *.Mask) (net 2 +12V)) (pad 2 thru_hole circle (at 2.235 0 180) (size 2.7 2.7) (drill 1.65) (layers *.Cu *.Mask) (net 2 +12V)) (pad 1 thru_hole rect (at -5.895 0 180) (size 2.7 2.7) (drill 1.65) (layers *.Cu *.Mask) (net 75 /SW_IN)) (pad 1 thru_hole rect (at -2.235 0 180) (size 2.7 2.7) (drill 1.65) (layers *.Cu *.Mask) (net 75 /SW_IN)) (model ../lib/BK-6013.models/Memory_Protection_Devices_-_BK-6013.step (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Fuse:Fuse_0603_1608Metric (layer F.Cu) (tedit 5F68FEF1) (tstamp 6067A1DB) (at 119.38 95.25 270) (descr "Fuse SMD 0603 (1608 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: http://www.tortai-tech.com/upload/download/2011102023233369053.pdf), generated with kicad-footprint-generator") (tags fuse) (path /61C29AAB) (attr smd) (fp_text reference F1 (at 0 1.905 180) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value "50mA (0ZCM0005FF2G)" (at 0 1.43 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -0.8 0.4) (end -0.8 -0.4) (layer F.Fab) (width 0.1)) (fp_line (start -0.8 -0.4) (end 0.8 -0.4) (layer F.Fab) (width 0.1)) (fp_line (start 0.8 -0.4) (end 0.8 0.4) (layer F.Fab) (width 0.1)) (fp_line (start 0.8 0.4) (end -0.8 0.4) (layer F.Fab) (width 0.1)) (fp_line (start -0.162779 -0.51) (end 0.162779 -0.51) (layer F.SilkS) (width 0.12)) (fp_line (start -0.162779 0.51) (end 0.162779 0.51) (layer F.SilkS) (width 0.12)) (fp_line (start -1.48 0.73) (end -1.48 -0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.48 -0.73) (end 1.48 -0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.48 -0.73) (end 1.48 0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.48 0.73) (end -1.48 0.73) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 0 90) (layer F.Fab) (effects (font (size 0.4 0.4) (thickness 0.06))) ) (pad 1 smd roundrect (at -0.7875 0 270) (size 0.875 0.95) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 38 /3V3_FUSED)) (pad 2 smd roundrect (at 0.7875 0 270) (size 0.875 0.95) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 34 "Net-(C4-Pad2)")) (model ${KISYS3DMOD}/Fuse.3dshapes/Fuse_0603_1608Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Capacitor_SMD:C_0805_2012Metric (layer F.Cu) (tedit 5F68FEEE) (tstamp 6066C998) (at 125.73 46.99 270) (descr "Capacitor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf, https://docs.google.com/spreadsheets/d/1BsfQQcO9C6DZCsRaXUlFlo91Tg2WpOkGARC1WS5S8t0/edit?usp=sharing), generated with kicad-footprint-generator") (tags capacitor) (path /60D33440) (attr smd) (fp_text reference C7 (at -2.286 0 180) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value 0.1uF (at 0 1.68 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 1.7 0.98) (end -1.7 0.98) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.7 -0.98) (end 1.7 0.98) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.7 -0.98) (end 1.7 -0.98) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.7 0.98) (end -1.7 -0.98) (layer F.CrtYd) (width 0.05)) (fp_line (start -0.261252 0.735) (end 0.261252 0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -0.261252 -0.735) (end 0.261252 -0.735) (layer F.SilkS) (width 0.12)) (fp_line (start 1 0.625) (end -1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 -0.625) (end 1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start -1 -0.625) (end 1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start -1 0.625) (end -1 -0.625) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 0 90) (layer F.Fab) (effects (font (size 0.5 0.5) (thickness 0.08))) ) (pad 2 smd roundrect (at 0.95 0 270) (size 1 1.45) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 19 +3V3)) (pad 1 smd roundrect (at -0.95 0 270) (size 1 1.45) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 1 GND)) (model ${KISYS3DMOD}/Capacitor_SMD.3dshapes/C_0805_2012Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Capacitor_SMD:C_0805_2012Metric (layer F.Cu) (tedit 5F68FEEE) (tstamp 6066D859) (at 144.145 99.822 180) (descr "Capacitor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf, https://docs.google.com/spreadsheets/d/1BsfQQcO9C6DZCsRaXUlFlo91Tg2WpOkGARC1WS5S8t0/edit?usp=sharing), generated with kicad-footprint-generator") (tags capacitor) (path /61ACC34E) (attr smd) (fp_text reference C6 (at 0.635 2.032) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value 0.1uF (at 0 1.68) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 1.7 0.98) (end -1.7 0.98) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.7 -0.98) (end 1.7 0.98) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.7 -0.98) (end 1.7 -0.98) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.7 0.98) (end -1.7 -0.98) (layer F.CrtYd) (width 0.05)) (fp_line (start -0.261252 0.735) (end 0.261252 0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -0.261252 -0.735) (end 0.261252 -0.735) (layer F.SilkS) (width 0.12)) (fp_line (start 1 0.625) (end -1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 -0.625) (end 1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start -1 -0.625) (end 1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start -1 0.625) (end -1 -0.625) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.5 0.5) (thickness 0.08))) ) (pad 2 smd roundrect (at 0.95 0 180) (size 1 1.45) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 1 GND)) (pad 1 smd roundrect (at -0.95 0 180) (size 1 1.45) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 19 +3V3)) (model ${KISYS3DMOD}/Capacitor_SMD.3dshapes/C_0805_2012Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Capacitor_SMD:CP_Elec_4x5.3 (layer F.Cu) (tedit 5BCA39CF) (tstamp 6067A17D) (at 115.57 100.965 270) (descr "SMD capacitor, aluminum electrolytic, Vishay, 4.0x5.3mm") (tags "capacitor electrolytic") (path /61EEA530) (attr smd) (fp_text reference C5 (at 4.445 0 180) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value 10uF (at 0 3.2 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -3.35 1.05) (end -2.4 1.05) (layer F.CrtYd) (width 0.05)) (fp_line (start -3.35 -1.05) (end -3.35 1.05) (layer F.CrtYd) (width 0.05)) (fp_line (start -2.4 -1.05) (end -3.35 -1.05) (layer F.CrtYd) (width 0.05)) (fp_line (start -2.4 1.05) (end -2.4 1.25) (layer F.CrtYd) (width 0.05)) (fp_line (start -2.4 -1.25) (end -2.4 -1.05) (layer F.CrtYd) (width 0.05)) (fp_line (start -2.4 -1.25) (end -1.25 -2.4) (layer F.CrtYd) (width 0.05)) (fp_line (start -2.4 1.25) (end -1.25 2.4) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.25 -2.4) (end 2.4 -2.4) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.25 2.4) (end 2.4 2.4) (layer F.CrtYd) (width 0.05)) (fp_line (start 2.4 1.05) (end 2.4 2.4) (layer F.CrtYd) (width 0.05)) (fp_line (start 3.35 1.05) (end 2.4 1.05) (layer F.CrtYd) (width 0.05)) (fp_line (start 3.35 -1.05) (end 3.35 1.05) (layer F.CrtYd) (width 0.05)) (fp_line (start 2.4 -1.05) (end 3.35 -1.05) (layer F.CrtYd) (width 0.05)) (fp_line (start 2.4 -2.4) (end 2.4 -1.05) (layer F.CrtYd) (width 0.05)) (fp_line (start -2.75 -1.81) (end -2.75 -1.31) (layer F.SilkS) (width 0.12)) (fp_line (start -3 -1.56) (end -2.5 -1.56) (layer F.SilkS) (width 0.12)) (fp_line (start -2.26 1.195563) (end -1.195563 2.26) (layer F.SilkS) (width 0.12)) (fp_line (start -2.26 -1.195563) (end -1.195563 -2.26) (layer F.SilkS) (width 0.12)) (fp_line (start -2.26 -1.195563) (end -2.26 -1.06) (layer F.SilkS) (width 0.12)) (fp_line (start -2.26 1.195563) (end -2.26 1.06) (layer F.SilkS) (width 0.12)) (fp_line (start -1.195563 2.26) (end 2.26 2.26) (layer F.SilkS) (width 0.12)) (fp_line (start -1.195563 -2.26) (end 2.26 -2.26) (layer F.SilkS) (width 0.12)) (fp_line (start 2.26 -2.26) (end 2.26 -1.06) (layer F.SilkS) (width 0.12)) (fp_line (start 2.26 2.26) (end 2.26 1.06) (layer F.SilkS) (width 0.12)) (fp_line (start -1.374773 -1.2) (end -1.374773 -0.8) (layer F.Fab) (width 0.1)) (fp_line (start -1.574773 -1) (end -1.174773 -1) (layer F.Fab) (width 0.1)) (fp_line (start -2.15 1.15) (end -1.15 2.15) (layer F.Fab) (width 0.1)) (fp_line (start -2.15 -1.15) (end -1.15 -2.15) (layer F.Fab) (width 0.1)) (fp_line (start -2.15 -1.15) (end -2.15 1.15) (layer F.Fab) (width 0.1)) (fp_line (start -1.15 2.15) (end 2.15 2.15) (layer F.Fab) (width 0.1)) (fp_line (start -1.15 -2.15) (end 2.15 -2.15) (layer F.Fab) (width 0.1)) (fp_line (start 2.15 -2.15) (end 2.15 2.15) (layer F.Fab) (width 0.1)) (fp_circle (center 0 0) (end 2 0) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 0 90) (layer F.Fab) (effects (font (size 0.8 0.8) (thickness 0.12))) ) (pad 2 smd roundrect (at 1.8 0 270) (size 2.6 1.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.15625) (net 1 GND)) (pad 1 smd roundrect (at -1.8 0 270) (size 2.6 1.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.15625) (net 34 "Net-(C4-Pad2)")) (model ${KISYS3DMOD}/Capacitor_SMD.3dshapes/CP_Elec_4x5.3.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Capacitor_SMD:C_0805_2012Metric (layer F.Cu) (tedit 5F68FEEE) (tstamp 6066CC1D) (at 119.38 99.695 90) (descr "Capacitor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf, https://docs.google.com/spreadsheets/d/1BsfQQcO9C6DZCsRaXUlFlo91Tg2WpOkGARC1WS5S8t0/edit?usp=sharing), generated with kicad-footprint-generator") (tags capacitor) (path /61EABA74) (attr smd) (fp_text reference C4 (at -3.175 0 180) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value 4.7uF (at 0 1.68 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 1.7 0.98) (end -1.7 0.98) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.7 -0.98) (end 1.7 0.98) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.7 -0.98) (end 1.7 -0.98) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.7 0.98) (end -1.7 -0.98) (layer F.CrtYd) (width 0.05)) (fp_line (start -0.261252 0.735) (end 0.261252 0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -0.261252 -0.735) (end 0.261252 -0.735) (layer F.SilkS) (width 0.12)) (fp_line (start 1 0.625) (end -1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 -0.625) (end 1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start -1 -0.625) (end 1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start -1 0.625) (end -1 -0.625) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 0 90) (layer F.Fab) (effects (font (size 0.5 0.5) (thickness 0.08))) ) (pad 2 smd roundrect (at 0.95 0 90) (size 1 1.45) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 34 "Net-(C4-Pad2)")) (pad 1 smd roundrect (at -0.95 0 90) (size 1 1.45) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 1 GND)) (model ${KISYS3DMOD}/Capacitor_SMD.3dshapes/C_0805_2012Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Capacitor_SMD:C_0805_2012Metric (layer F.Cu) (tedit 5F68FEEE) (tstamp 6066C7FD) (at 130.81 99.695 90) (descr "Capacitor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf, https://docs.google.com/spreadsheets/d/1BsfQQcO9C6DZCsRaXUlFlo91Tg2WpOkGARC1WS5S8t0/edit?usp=sharing), generated with kicad-footprint-generator") (tags capacitor) (path /61E8B3EB) (attr smd) (fp_text reference C2 (at -3.175 0 180) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value 4.7uF (at 0 1.68 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 1.7 0.98) (end -1.7 0.98) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.7 -0.98) (end 1.7 0.98) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.7 -0.98) (end 1.7 -0.98) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.7 0.98) (end -1.7 -0.98) (layer F.CrtYd) (width 0.05)) (fp_line (start -0.261252 0.735) (end 0.261252 0.735) (layer F.SilkS) (width 0.12)) (fp_line (start -0.261252 -0.735) (end 0.261252 -0.735) (layer F.SilkS) (width 0.12)) (fp_line (start 1 0.625) (end -1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start 1 -0.625) (end 1 0.625) (layer F.Fab) (width 0.1)) (fp_line (start -1 -0.625) (end 1 -0.625) (layer F.Fab) (width 0.1)) (fp_line (start -1 0.625) (end -1 -0.625) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 0 90) (layer F.Fab) (effects (font (size 0.5 0.5) (thickness 0.08))) ) (pad 2 smd roundrect (at 0.95 0 90) (size 1 1.45) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 33 +5V)) (pad 1 smd roundrect (at -0.95 0 90) (size 1 1.45) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) (net 1 GND)) (model ${KISYS3DMOD}/Capacitor_SMD.3dshapes/C_0805_2012Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Capacitor_SMD:CP_Elec_4x5.3 (layer F.Cu) (tedit 5BCA39CF) (tstamp 6067A222) (at 134.62 100.965 270) (descr "SMD capacitor, aluminum electrolytic, Vishay, 4.0x5.3mm") (tags "capacitor electrolytic") (path /61EC9D69) (attr smd) (fp_text reference C1 (at 4.445 0 180) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value 10uF (at 0 3.2 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -3.35 1.05) (end -2.4 1.05) (layer F.CrtYd) (width 0.05)) (fp_line (start -3.35 -1.05) (end -3.35 1.05) (layer F.CrtYd) (width 0.05)) (fp_line (start -2.4 -1.05) (end -3.35 -1.05) (layer F.CrtYd) (width 0.05)) (fp_line (start -2.4 1.05) (end -2.4 1.25) (layer F.CrtYd) (width 0.05)) (fp_line (start -2.4 -1.25) (end -2.4 -1.05) (layer F.CrtYd) (width 0.05)) (fp_line (start -2.4 -1.25) (end -1.25 -2.4) (layer F.CrtYd) (width 0.05)) (fp_line (start -2.4 1.25) (end -1.25 2.4) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.25 -2.4) (end 2.4 -2.4) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.25 2.4) (end 2.4 2.4) (layer F.CrtYd) (width 0.05)) (fp_line (start 2.4 1.05) (end 2.4 2.4) (layer F.CrtYd) (width 0.05)) (fp_line (start 3.35 1.05) (end 2.4 1.05) (layer F.CrtYd) (width 0.05)) (fp_line (start 3.35 -1.05) (end 3.35 1.05) (layer F.CrtYd) (width 0.05)) (fp_line (start 2.4 -1.05) (end 3.35 -1.05) (layer F.CrtYd) (width 0.05)) (fp_line (start 2.4 -2.4) (end 2.4 -1.05) (layer F.CrtYd) (width 0.05)) (fp_line (start -2.75 -1.81) (end -2.75 -1.31) (layer F.SilkS) (width 0.12)) (fp_line (start -3 -1.56) (end -2.5 -1.56) (layer F.SilkS) (width 0.12)) (fp_line (start -2.26 1.195563) (end -1.195563 2.26) (layer F.SilkS) (width 0.12)) (fp_line (start -2.26 -1.195563) (end -1.195563 -2.26) (layer F.SilkS) (width 0.12)) (fp_line (start -2.26 -1.195563) (end -2.26 -1.06) (layer F.SilkS) (width 0.12)) (fp_line (start -2.26 1.195563) (end -2.26 1.06) (layer F.SilkS) (width 0.12)) (fp_line (start -1.195563 2.26) (end 2.26 2.26) (layer F.SilkS) (width 0.12)) (fp_line (start -1.195563 -2.26) (end 2.26 -2.26) (layer F.SilkS) (width 0.12)) (fp_line (start 2.26 -2.26) (end 2.26 -1.06) (layer F.SilkS) (width 0.12)) (fp_line (start 2.26 2.26) (end 2.26 1.06) (layer F.SilkS) (width 0.12)) (fp_line (start -1.374773 -1.2) (end -1.374773 -0.8) (layer F.Fab) (width 0.1)) (fp_line (start -1.574773 -1) (end -1.174773 -1) (layer F.Fab) (width 0.1)) (fp_line (start -2.15 1.15) (end -1.15 2.15) (layer F.Fab) (width 0.1)) (fp_line (start -2.15 -1.15) (end -1.15 -2.15) (layer F.Fab) (width 0.1)) (fp_line (start -2.15 -1.15) (end -2.15 1.15) (layer F.Fab) (width 0.1)) (fp_line (start -1.15 2.15) (end 2.15 2.15) (layer F.Fab) (width 0.1)) (fp_line (start -1.15 -2.15) (end 2.15 -2.15) (layer F.Fab) (width 0.1)) (fp_line (start 2.15 -2.15) (end 2.15 2.15) (layer F.Fab) (width 0.1)) (fp_circle (center 0 0) (end 2 0) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 0 90) (layer F.Fab) (effects (font (size 0.8 0.8) (thickness 0.12))) ) (pad 2 smd roundrect (at 1.8 0 270) (size 2.6 1.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.15625) (net 1 GND)) (pad 1 smd roundrect (at -1.8 0 270) (size 2.6 1.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.15625) (net 33 +5V)) (model ${KISYS3DMOD}/Capacitor_SMD.3dshapes/CP_Elec_4x5.3.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module MountingHole:MountingHole_3.2mm_M3_ISO7380_Pad (layer F.Cu) (tedit 56D1B4CB) (tstamp 6066D166) (at 124.46 80.518) (descr "Mounting Hole 3.2mm, M3, ISO7380") (tags "mounting hole 3.2mm m3 iso7380") (path /60AEF190) (attr virtual) (fp_text reference H5 (at 0 -3.85) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value MountingHole (at 0 3.85) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_circle (center 0 0) (end 3.1 0) (layer F.CrtYd) (width 0.05)) (fp_circle (center 0 0) (end 2.85 0) (layer Cmts.User) (width 0.15)) (fp_text user %R (at 0.3 0) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 1 thru_hole circle (at 0 0) (size 5.7 5.7) (drill 3.2) (layers *.Cu *.Mask)) ) (module MountingHole:MountingHole_3.2mm_M3_ISO7380_Pad (layer F.Cu) (tedit 56D1B4CB) (tstamp 6066D1FF) (at 220.218 80.518) (descr "Mounting Hole 3.2mm, M3, ISO7380") (tags "mounting hole 3.2mm m3 iso7380") (path /61914268) (attr virtual) (fp_text reference H4 (at 0 -3.85) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value MountingHole (at 0 3.85) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_circle (center 0 0) (end 3.1 0) (layer F.CrtYd) (width 0.05)) (fp_circle (center 0 0) (end 2.85 0) (layer Cmts.User) (width 0.15)) (fp_text user %R (at 0.3 0) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 1 thru_hole circle (at 0 0) (size 5.7 5.7) (drill 3.2) (layers *.Cu *.Mask)) ) (module MountingHole:MountingHole_3.2mm_M3_ISO7380_Pad (layer F.Cu) (tedit 56D1B4CB) (tstamp 6066CBE7) (at 28.702 80.518) (descr "Mounting Hole 3.2mm, M3, ISO7380") (tags "mounting hole 3.2mm m3 iso7380") (path /61913E82) (attr virtual) (fp_text reference H3 (at 0 -3.85) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value MountingHole (at 0 3.85) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_circle (center 0 0) (end 3.1 0) (layer F.CrtYd) (width 0.05)) (fp_circle (center 0 0) (end 2.85 0) (layer Cmts.User) (width 0.15)) (fp_text user %R (at 0.3 0) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 1 thru_hole circle (at 0 0) (size 5.7 5.7) (drill 3.2) (layers *.Cu *.Mask)) ) (module MountingHole:MountingHole_3.2mm_M3_ISO7380_Pad (layer F.Cu) (tedit 56D1B4CB) (tstamp 6066D151) (at 220.218 56.642) (descr "Mounting Hole 3.2mm, M3, ISO7380") (tags "mounting hole 3.2mm m3 iso7380") (path /619139E1) (attr virtual) (fp_text reference H2 (at 0 -3.85) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value MountingHole (at 0 3.85) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_circle (center 0 0) (end 2.85 0) (layer Cmts.User) (width 0.15)) (fp_circle (center 0 0) (end 3.1 0) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0.3 0) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 1 thru_hole circle (at 0 0) (size 5.7 5.7) (drill 3.2) (layers *.Cu *.Mask)) ) (module MountingHole:MountingHole_3.2mm_M3_ISO7380_Pad (layer F.Cu) (tedit 56D1B4CB) (tstamp 6066D214) (at 28.702 56.642) (descr "Mounting Hole 3.2mm, M3, ISO7380") (tags "mounting hole 3.2mm m3 iso7380") (path /61902623) (attr virtual) (fp_text reference H1 (at 0 -3.85) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value MountingHole (at 0 3.85) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_circle (center 0 0) (end 2.85 0) (layer Cmts.User) (width 0.15)) (fp_circle (center 0 0) (end 3.1 0) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0.3 0) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 1 thru_hole circle (at 0 0) (size 5.7 5.7) (drill 3.2) (layers *.Cu *.Mask)) ) (module Connector_JST:JST_XH_B5B-XH-A_1x05_P2.50mm_Vertical (layer F.Cu) (tedit 5C28146C) (tstamp 6066CD31) (at 58.42 39.37 180) (descr "JST XH series connector, B5B-XH-A (http://www.jst-mfg.com/product/pdf/eng/eXH.pdf), generated with kicad-footprint-generator") (tags "connector JST XH vertical") (path /606B9929) (fp_text reference J13 (at 5 -3.55) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value "Motor F" (at 5 4.6) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -2.45 -2.35) (end -2.45 3.4) (layer F.Fab) (width 0.1)) (fp_line (start -2.45 3.4) (end 12.45 3.4) (layer F.Fab) (width 0.1)) (fp_line (start 12.45 3.4) (end 12.45 -2.35) (layer F.Fab) (width 0.1)) (fp_line (start 12.45 -2.35) (end -2.45 -2.35) (layer F.Fab) (width 0.1)) (fp_line (start -2.56 -2.46) (end -2.56 3.51) (layer F.SilkS) (width 0.12)) (fp_line (start -2.56 3.51) (end 12.56 3.51) (layer F.SilkS) (width 0.12)) (fp_line (start 12.56 3.51) (end 12.56 -2.46) (layer F.SilkS) (width 0.12)) (fp_line (start 12.56 -2.46) (end -2.56 -2.46) (layer F.SilkS) (width 0.12)) (fp_line (start -2.95 -2.85) (end -2.95 3.9) (layer F.CrtYd) (width 0.05)) (fp_line (start -2.95 3.9) (end 12.95 3.9) (layer F.CrtYd) (width 0.05)) (fp_line (start 12.95 3.9) (end 12.95 -2.85) (layer F.CrtYd) (width 0.05)) (fp_line (start 12.95 -2.85) (end -2.95 -2.85) (layer F.CrtYd) (width 0.05)) (fp_line (start -0.625 -2.35) (end 0 -1.35) (layer F.Fab) (width 0.1)) (fp_line (start 0 -1.35) (end 0.625 -2.35) (layer F.Fab) (width 0.1)) (fp_line (start 0.75 -2.45) (end 0.75 -1.7) (layer F.SilkS) (width 0.12)) (fp_line (start 0.75 -1.7) (end 9.25 -1.7) (layer F.SilkS) (width 0.12)) (fp_line (start 9.25 -1.7) (end 9.25 -2.45) (layer F.SilkS) (width 0.12)) (fp_line (start 9.25 -2.45) (end 0.75 -2.45) (layer F.SilkS) (width 0.12)) (fp_line (start -2.55 -2.45) (end -2.55 -1.7) (layer F.SilkS) (width 0.12)) (fp_line (start -2.55 -1.7) (end -0.75 -1.7) (layer F.SilkS) (width 0.12)) (fp_line (start -0.75 -1.7) (end -0.75 -2.45) (layer F.SilkS) (width 0.12)) (fp_line (start -0.75 -2.45) (end -2.55 -2.45) (layer F.SilkS) (width 0.12)) (fp_line (start 10.75 -2.45) (end 10.75 -1.7) (layer F.SilkS) (width 0.12)) (fp_line (start 10.75 -1.7) (end 12.55 -1.7) (layer F.SilkS) (width 0.12)) (fp_line (start 12.55 -1.7) (end 12.55 -2.45) (layer F.SilkS) (width 0.12)) (fp_line (start 12.55 -2.45) (end 10.75 -2.45) (layer F.SilkS) (width 0.12)) (fp_line (start -2.55 -0.2) (end -1.8 -0.2) (layer F.SilkS) (width 0.12)) (fp_line (start -1.8 -0.2) (end -1.8 2.75) (layer F.SilkS) (width 0.12)) (fp_line (start -1.8 2.75) (end 5 2.75) (layer F.SilkS) (width 0.12)) (fp_line (start 12.55 -0.2) (end 11.8 -0.2) (layer F.SilkS) (width 0.12)) (fp_line (start 11.8 -0.2) (end 11.8 2.75) (layer F.SilkS) (width 0.12)) (fp_line (start 11.8 2.75) (end 5 2.75) (layer F.SilkS) (width 0.12)) (fp_line (start -1.6 -2.75) (end -2.85 -2.75) (layer F.SilkS) (width 0.12)) (fp_line (start -2.85 -2.75) (end -2.85 -1.5) (layer F.SilkS) (width 0.12)) (fp_text user %R (at 5 2.7) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 5 thru_hole oval (at 10 0 180) (size 1.7 1.95) (drill 0.95) (layers *.Cu *.Mask) (net 56 /OUT_F_COMMON)) (pad 4 thru_hole oval (at 7.5 0 180) (size 1.7 1.95) (drill 0.95) (layers *.Cu *.Mask) (net 28 /OUT_F_PHASE_D)) (pad 3 thru_hole oval (at 5 0 180) (size 1.7 1.95) (drill 0.95) (layers *.Cu *.Mask) (net 29 /OUT_F_PHASE_C)) (pad 2 thru_hole oval (at 2.5 0 180) (size 1.7 1.95) (drill 0.95) (layers *.Cu *.Mask) (net 30 /OUT_F_PHASE_B)) (pad 1 thru_hole roundrect (at 0 0 180) (size 1.7 1.95) (drill 0.95) (layers *.Cu *.Mask) (roundrect_rratio 0.1470588235294118) (net 31 /OUT_F_PHASE_A)) (model ${KISYS3DMOD}/Connector_JST.3dshapes/JST_XH_B5B-XH-A_1x05_P2.50mm_Vertical.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Connector_JST:JST_XH_B5B-XH-A_1x05_P2.50mm_Vertical (layer F.Cu) (tedit 5C28146C) (tstamp 6066D8AA) (at 77.47 39.37 180) (descr "JST XH series connector, B5B-XH-A (http://www.jst-mfg.com/product/pdf/eng/eXH.pdf), generated with kicad-footprint-generator") (tags "connector JST XH vertical") (path /606B94FD) (fp_text reference J12 (at 5 -3.55) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value "Motor E" (at 5 4.6) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -2.45 -2.35) (end -2.45 3.4) (layer F.Fab) (width 0.1)) (fp_line (start -2.45 3.4) (end 12.45 3.4) (layer F.Fab) (width 0.1)) (fp_line (start 12.45 3.4) (end 12.45 -2.35) (layer F.Fab) (width 0.1)) (fp_line (start 12.45 -2.35) (end -2.45 -2.35) (layer F.Fab) (width 0.1)) (fp_line (start -2.56 -2.46) (end -2.56 3.51) (layer F.SilkS) (width 0.12)) (fp_line (start -2.56 3.51) (end 12.56 3.51) (layer F.SilkS) (width 0.12)) (fp_line (start 12.56 3.51) (end 12.56 -2.46) (layer F.SilkS) (width 0.12)) (fp_line (start 12.56 -2.46) (end -2.56 -2.46) (layer F.SilkS) (width 0.12)) (fp_line (start -2.95 -2.85) (end -2.95 3.9) (layer F.CrtYd) (width 0.05)) (fp_line (start -2.95 3.9) (end 12.95 3.9) (layer F.CrtYd) (width 0.05)) (fp_line (start 12.95 3.9) (end 12.95 -2.85) (layer F.CrtYd) (width 0.05)) (fp_line (start 12.95 -2.85) (end -2.95 -2.85) (layer F.CrtYd) (width 0.05)) (fp_line (start -0.625 -2.35) (end 0 -1.35) (layer F.Fab) (width 0.1)) (fp_line (start 0 -1.35) (end 0.625 -2.35) (layer F.Fab) (width 0.1)) (fp_line (start 0.75 -2.45) (end 0.75 -1.7) (layer F.SilkS) (width 0.12)) (fp_line (start 0.75 -1.7) (end 9.25 -1.7) (layer F.SilkS) (width 0.12)) (fp_line (start 9.25 -1.7) (end 9.25 -2.45) (layer F.SilkS) (width 0.12)) (fp_line (start 9.25 -2.45) (end 0.75 -2.45) (layer F.SilkS) (width 0.12)) (fp_line (start -2.55 -2.45) (end -2.55 -1.7) (layer F.SilkS) (width 0.12)) (fp_line (start -2.55 -1.7) (end -0.75 -1.7) (layer F.SilkS) (width 0.12)) (fp_line (start -0.75 -1.7) (end -0.75 -2.45) (layer F.SilkS) (width 0.12)) (fp_line (start -0.75 -2.45) (end -2.55 -2.45) (layer F.SilkS) (width 0.12)) (fp_line (start 10.75 -2.45) (end 10.75 -1.7) (layer F.SilkS) (width 0.12)) (fp_line (start 10.75 -1.7) (end 12.55 -1.7) (layer F.SilkS) (width 0.12)) (fp_line (start 12.55 -1.7) (end 12.55 -2.45) (layer F.SilkS) (width 0.12)) (fp_line (start 12.55 -2.45) (end 10.75 -2.45) (layer F.SilkS) (width 0.12)) (fp_line (start -2.55 -0.2) (end -1.8 -0.2) (layer F.SilkS) (width 0.12)) (fp_line (start -1.8 -0.2) (end -1.8 2.75) (layer F.SilkS) (width 0.12)) (fp_line (start -1.8 2.75) (end 5 2.75) (layer F.SilkS) (width 0.12)) (fp_line (start 12.55 -0.2) (end 11.8 -0.2) (layer F.SilkS) (width 0.12)) (fp_line (start 11.8 -0.2) (end 11.8 2.75) (layer F.SilkS) (width 0.12)) (fp_line (start 11.8 2.75) (end 5 2.75) (layer F.SilkS) (width 0.12)) (fp_line (start -1.6 -2.75) (end -2.85 -2.75) (layer F.SilkS) (width 0.12)) (fp_line (start -2.85 -2.75) (end -2.85 -1.5) (layer F.SilkS) (width 0.12)) (fp_text user %R (at 5 2.7) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 5 thru_hole oval (at 10 0 180) (size 1.7 1.95) (drill 0.95) (layers *.Cu *.Mask) (net 55 /OUT_E_COMMON)) (pad 4 thru_hole oval (at 7.5 0 180) (size 1.7 1.95) (drill 0.95) (layers *.Cu *.Mask) (net 24 /OUT_E_PHASE_D)) (pad 3 thru_hole oval (at 5 0 180) (size 1.7 1.95) (drill 0.95) (layers *.Cu *.Mask) (net 25 /OUT_E_PHASE_C)) (pad 2 thru_hole oval (at 2.5 0 180) (size 1.7 1.95) (drill 0.95) (layers *.Cu *.Mask) (net 26 /OUT_E_PHASE_B)) (pad 1 thru_hole roundrect (at 0 0 180) (size 1.7 1.95) (drill 0.95) (layers *.Cu *.Mask) (roundrect_rratio 0.1470588235294118) (net 27 /OUT_E_PHASE_A)) (model ${KISYS3DMOD}/Connector_JST.3dshapes/JST_XH_B5B-XH-A_1x05_P2.50mm_Vertical.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Connector_JST:JST_XH_B5B-XH-A_1x05_P2.50mm_Vertical (layer F.Cu) (tedit 5C28146C) (tstamp 6066D19F) (at 96.52 39.37 180) (descr "JST XH series connector, B5B-XH-A (http://www.jst-mfg.com/product/pdf/eng/eXH.pdf), generated with kicad-footprint-generator") (tags "connector JST XH vertical") (path /63DADAFC) (fp_text reference J7 (at 5 -3.55) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value "Motor D" (at 5 4.6) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -2.45 -2.35) (end -2.45 3.4) (layer F.Fab) (width 0.1)) (fp_line (start -2.45 3.4) (end 12.45 3.4) (layer F.Fab) (width 0.1)) (fp_line (start 12.45 3.4) (end 12.45 -2.35) (layer F.Fab) (width 0.1)) (fp_line (start 12.45 -2.35) (end -2.45 -2.35) (layer F.Fab) (width 0.1)) (fp_line (start -2.56 -2.46) (end -2.56 3.51) (layer F.SilkS) (width 0.12)) (fp_line (start -2.56 3.51) (end 12.56 3.51) (layer F.SilkS) (width 0.12)) (fp_line (start 12.56 3.51) (end 12.56 -2.46) (layer F.SilkS) (width 0.12)) (fp_line (start 12.56 -2.46) (end -2.56 -2.46) (layer F.SilkS) (width 0.12)) (fp_line (start -2.95 -2.85) (end -2.95 3.9) (layer F.CrtYd) (width 0.05)) (fp_line (start -2.95 3.9) (end 12.95 3.9) (layer F.CrtYd) (width 0.05)) (fp_line (start 12.95 3.9) (end 12.95 -2.85) (layer F.CrtYd) (width 0.05)) (fp_line (start 12.95 -2.85) (end -2.95 -2.85) (layer F.CrtYd) (width 0.05)) (fp_line (start -0.625 -2.35) (end 0 -1.35) (layer F.Fab) (width 0.1)) (fp_line (start 0 -1.35) (end 0.625 -2.35) (layer F.Fab) (width 0.1)) (fp_line (start 0.75 -2.45) (end 0.75 -1.7) (layer F.SilkS) (width 0.12)) (fp_line (start 0.75 -1.7) (end 9.25 -1.7) (layer F.SilkS) (width 0.12)) (fp_line (start 9.25 -1.7) (end 9.25 -2.45) (layer F.SilkS) (width 0.12)) (fp_line (start 9.25 -2.45) (end 0.75 -2.45) (layer F.SilkS) (width 0.12)) (fp_line (start -2.55 -2.45) (end -2.55 -1.7) (layer F.SilkS) (width 0.12)) (fp_line (start -2.55 -1.7) (end -0.75 -1.7) (layer F.SilkS) (width 0.12)) (fp_line (start -0.75 -1.7) (end -0.75 -2.45) (layer F.SilkS) (width 0.12)) (fp_line (start -0.75 -2.45) (end -2.55 -2.45) (layer F.SilkS) (width 0.12)) (fp_line (start 10.75 -2.45) (end 10.75 -1.7) (layer F.SilkS) (width 0.12)) (fp_line (start 10.75 -1.7) (end 12.55 -1.7) (layer F.SilkS) (width 0.12)) (fp_line (start 12.55 -1.7) (end 12.55 -2.45) (layer F.SilkS) (width 0.12)) (fp_line (start 12.55 -2.45) (end 10.75 -2.45) (layer F.SilkS) (width 0.12)) (fp_line (start -2.55 -0.2) (end -1.8 -0.2) (layer F.SilkS) (width 0.12)) (fp_line (start -1.8 -0.2) (end -1.8 2.75) (layer F.SilkS) (width 0.12)) (fp_line (start -1.8 2.75) (end 5 2.75) (layer F.SilkS) (width 0.12)) (fp_line (start 12.55 -0.2) (end 11.8 -0.2) (layer F.SilkS) (width 0.12)) (fp_line (start 11.8 -0.2) (end 11.8 2.75) (layer F.SilkS) (width 0.12)) (fp_line (start 11.8 2.75) (end 5 2.75) (layer F.SilkS) (width 0.12)) (fp_line (start -1.6 -2.75) (end -2.85 -2.75) (layer F.SilkS) (width 0.12)) (fp_line (start -2.85 -2.75) (end -2.85 -1.5) (layer F.SilkS) (width 0.12)) (fp_text user %R (at 5 2.7) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 5 thru_hole oval (at 10 0 180) (size 1.7 1.95) (drill 0.95) (layers *.Cu *.Mask) (net 42 /OUT_D_COMMON)) (pad 4 thru_hole oval (at 7.5 0 180) (size 1.7 1.95) (drill 0.95) (layers *.Cu *.Mask) (net 15 /OUT_D_PHASE_D)) (pad 3 thru_hole oval (at 5 0 180) (size 1.7 1.95) (drill 0.95) (layers *.Cu *.Mask) (net 16 /OUT_D_PHASE_C)) (pad 2 thru_hole oval (at 2.5 0 180) (size 1.7 1.95) (drill 0.95) (layers *.Cu *.Mask) (net 17 /OUT_D_PHASE_B)) (pad 1 thru_hole roundrect (at 0 0 180) (size 1.7 1.95) (drill 0.95) (layers *.Cu *.Mask) (roundrect_rratio 0.1470588235294118) (net 18 /OUT_D_PHASE_A)) (model ${KISYS3DMOD}/Connector_JST.3dshapes/JST_XH_B5B-XH-A_1x05_P2.50mm_Vertical.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Connector_JST:JST_XH_B5B-XH-A_1x05_P2.50mm_Vertical (layer F.Cu) (tedit 5C28146C) (tstamp 6066D0F1) (at 162.56 39.37 180) (descr "JST XH series connector, B5B-XH-A (http://www.jst-mfg.com/product/pdf/eng/eXH.pdf), generated with kicad-footprint-generator") (tags "connector JST XH vertical") (path /63DADADE) (fp_text reference J6 (at 5 -3.55) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value "Motor C" (at 5 4.6) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -2.45 -2.35) (end -2.45 3.4) (layer F.Fab) (width 0.1)) (fp_line (start -2.45 3.4) (end 12.45 3.4) (layer F.Fab) (width 0.1)) (fp_line (start 12.45 3.4) (end 12.45 -2.35) (layer F.Fab) (width 0.1)) (fp_line (start 12.45 -2.35) (end -2.45 -2.35) (layer F.Fab) (width 0.1)) (fp_line (start -2.56 -2.46) (end -2.56 3.51) (layer F.SilkS) (width 0.12)) (fp_line (start -2.56 3.51) (end 12.56 3.51) (layer F.SilkS) (width 0.12)) (fp_line (start 12.56 3.51) (end 12.56 -2.46) (layer F.SilkS) (width 0.12)) (fp_line (start 12.56 -2.46) (end -2.56 -2.46) (layer F.SilkS) (width 0.12)) (fp_line (start -2.95 -2.85) (end -2.95 3.9) (layer F.CrtYd) (width 0.05)) (fp_line (start -2.95 3.9) (end 12.95 3.9) (layer F.CrtYd) (width 0.05)) (fp_line (start 12.95 3.9) (end 12.95 -2.85) (layer F.CrtYd) (width 0.05)) (fp_line (start 12.95 -2.85) (end -2.95 -2.85) (layer F.CrtYd) (width 0.05)) (fp_line (start -0.625 -2.35) (end 0 -1.35) (layer F.Fab) (width 0.1)) (fp_line (start 0 -1.35) (end 0.625 -2.35) (layer F.Fab) (width 0.1)) (fp_line (start 0.75 -2.45) (end 0.75 -1.7) (layer F.SilkS) (width 0.12)) (fp_line (start 0.75 -1.7) (end 9.25 -1.7) (layer F.SilkS) (width 0.12)) (fp_line (start 9.25 -1.7) (end 9.25 -2.45) (layer F.SilkS) (width 0.12)) (fp_line (start 9.25 -2.45) (end 0.75 -2.45) (layer F.SilkS) (width 0.12)) (fp_line (start -2.55 -2.45) (end -2.55 -1.7) (layer F.SilkS) (width 0.12)) (fp_line (start -2.55 -1.7) (end -0.75 -1.7) (layer F.SilkS) (width 0.12)) (fp_line (start -0.75 -1.7) (end -0.75 -2.45) (layer F.SilkS) (width 0.12)) (fp_line (start -0.75 -2.45) (end -2.55 -2.45) (layer F.SilkS) (width 0.12)) (fp_line (start 10.75 -2.45) (end 10.75 -1.7) (layer F.SilkS) (width 0.12)) (fp_line (start 10.75 -1.7) (end 12.55 -1.7) (layer F.SilkS) (width 0.12)) (fp_line (start 12.55 -1.7) (end 12.55 -2.45) (layer F.SilkS) (width 0.12)) (fp_line (start 12.55 -2.45) (end 10.75 -2.45) (layer F.SilkS) (width 0.12)) (fp_line (start -2.55 -0.2) (end -1.8 -0.2) (layer F.SilkS) (width 0.12)) (fp_line (start -1.8 -0.2) (end -1.8 2.75) (layer F.SilkS) (width 0.12)) (fp_line (start -1.8 2.75) (end 5 2.75) (layer F.SilkS) (width 0.12)) (fp_line (start 12.55 -0.2) (end 11.8 -0.2) (layer F.SilkS) (width 0.12)) (fp_line (start 11.8 -0.2) (end 11.8 2.75) (layer F.SilkS) (width 0.12)) (fp_line (start 11.8 2.75) (end 5 2.75) (layer F.SilkS) (width 0.12)) (fp_line (start -1.6 -2.75) (end -2.85 -2.75) (layer F.SilkS) (width 0.12)) (fp_line (start -2.85 -2.75) (end -2.85 -1.5) (layer F.SilkS) (width 0.12)) (fp_text user %R (at 5 2.7) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 5 thru_hole oval (at 10 0 180) (size 1.7 1.95) (drill 0.95) (layers *.Cu *.Mask) (net 41 /OUT_C_COMMON)) (pad 4 thru_hole oval (at 7.5 0 180) (size 1.7 1.95) (drill 0.95) (layers *.Cu *.Mask) (net 11 /OUT_C_PHASE_D)) (pad 3 thru_hole oval (at 5 0 180) (size 1.7 1.95) (drill 0.95) (layers *.Cu *.Mask) (net 12 /OUT_C_PHASE_C)) (pad 2 thru_hole oval (at 2.5 0 180) (size 1.7 1.95) (drill 0.95) (layers *.Cu *.Mask) (net 13 /OUT_C_PHASE_B)) (pad 1 thru_hole roundrect (at 0 0 180) (size 1.7 1.95) (drill 0.95) (layers *.Cu *.Mask) (roundrect_rratio 0.1470588235294118) (net 14 /OUT_C_PHASE_A)) (model ${KISYS3DMOD}/Connector_JST.3dshapes/JST_XH_B5B-XH-A_1x05_P2.50mm_Vertical.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Connector_JST:JST_XH_B5B-XH-A_1x05_P2.50mm_Vertical (layer F.Cu) (tedit 5C28146C) (tstamp 6066D7B1) (at 181.61 39.37 180) (descr "JST XH series connector, B5B-XH-A (http://www.jst-mfg.com/product/pdf/eng/eXH.pdf), generated with kicad-footprint-generator") (tags "connector JST XH vertical") (path /63D07061) (fp_text reference J5 (at 5 -3.55) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value "Motor B" (at 5 4.6) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -2.45 -2.35) (end -2.45 3.4) (layer F.Fab) (width 0.1)) (fp_line (start -2.45 3.4) (end 12.45 3.4) (layer F.Fab) (width 0.1)) (fp_line (start 12.45 3.4) (end 12.45 -2.35) (layer F.Fab) (width 0.1)) (fp_line (start 12.45 -2.35) (end -2.45 -2.35) (layer F.Fab) (width 0.1)) (fp_line (start -2.56 -2.46) (end -2.56 3.51) (layer F.SilkS) (width 0.12)) (fp_line (start -2.56 3.51) (end 12.56 3.51) (layer F.SilkS) (width 0.12)) (fp_line (start 12.56 3.51) (end 12.56 -2.46) (layer F.SilkS) (width 0.12)) (fp_line (start 12.56 -2.46) (end -2.56 -2.46) (layer F.SilkS) (width 0.12)) (fp_line (start -2.95 -2.85) (end -2.95 3.9) (layer F.CrtYd) (width 0.05)) (fp_line (start -2.95 3.9) (end 12.95 3.9) (layer F.CrtYd) (width 0.05)) (fp_line (start 12.95 3.9) (end 12.95 -2.85) (layer F.CrtYd) (width 0.05)) (fp_line (start 12.95 -2.85) (end -2.95 -2.85) (layer F.CrtYd) (width 0.05)) (fp_line (start -0.625 -2.35) (end 0 -1.35) (layer F.Fab) (width 0.1)) (fp_line (start 0 -1.35) (end 0.625 -2.35) (layer F.Fab) (width 0.1)) (fp_line (start 0.75 -2.45) (end 0.75 -1.7) (layer F.SilkS) (width 0.12)) (fp_line (start 0.75 -1.7) (end 9.25 -1.7) (layer F.SilkS) (width 0.12)) (fp_line (start 9.25 -1.7) (end 9.25 -2.45) (layer F.SilkS) (width 0.12)) (fp_line (start 9.25 -2.45) (end 0.75 -2.45) (layer F.SilkS) (width 0.12)) (fp_line (start -2.55 -2.45) (end -2.55 -1.7) (layer F.SilkS) (width 0.12)) (fp_line (start -2.55 -1.7) (end -0.75 -1.7) (layer F.SilkS) (width 0.12)) (fp_line (start -0.75 -1.7) (end -0.75 -2.45) (layer F.SilkS) (width 0.12)) (fp_line (start -0.75 -2.45) (end -2.55 -2.45) (layer F.SilkS) (width 0.12)) (fp_line (start 10.75 -2.45) (end 10.75 -1.7) (layer F.SilkS) (width 0.12)) (fp_line (start 10.75 -1.7) (end 12.55 -1.7) (layer F.SilkS) (width 0.12)) (fp_line (start 12.55 -1.7) (end 12.55 -2.45) (layer F.SilkS) (width 0.12)) (fp_line (start 12.55 -2.45) (end 10.75 -2.45) (layer F.SilkS) (width 0.12)) (fp_line (start -2.55 -0.2) (end -1.8 -0.2) (layer F.SilkS) (width 0.12)) (fp_line (start -1.8 -0.2) (end -1.8 2.75) (layer F.SilkS) (width 0.12)) (fp_line (start -1.8 2.75) (end 5 2.75) (layer F.SilkS) (width 0.12)) (fp_line (start 12.55 -0.2) (end 11.8 -0.2) (layer F.SilkS) (width 0.12)) (fp_line (start 11.8 -0.2) (end 11.8 2.75) (layer F.SilkS) (width 0.12)) (fp_line (start 11.8 2.75) (end 5 2.75) (layer F.SilkS) (width 0.12)) (fp_line (start -1.6 -2.75) (end -2.85 -2.75) (layer F.SilkS) (width 0.12)) (fp_line (start -2.85 -2.75) (end -2.85 -1.5) (layer F.SilkS) (width 0.12)) (fp_text user %R (at 5 2.7) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 5 thru_hole oval (at 10 0 180) (size 1.7 1.95) (drill 0.95) (layers *.Cu *.Mask) (net 40 /OUT_B_COMMON)) (pad 4 thru_hole oval (at 7.5 0 180) (size 1.7 1.95) (drill 0.95) (layers *.Cu *.Mask) (net 7 /OUT_B_PHASE_D)) (pad 3 thru_hole oval (at 5 0 180) (size 1.7 1.95) (drill 0.95) (layers *.Cu *.Mask) (net 8 /OUT_B_PHASE_C)) (pad 2 thru_hole oval (at 2.5 0 180) (size 1.7 1.95) (drill 0.95) (layers *.Cu *.Mask) (net 9 /OUT_B_PHASE_B)) (pad 1 thru_hole roundrect (at 0 0 180) (size 1.7 1.95) (drill 0.95) (layers *.Cu *.Mask) (roundrect_rratio 0.1470588235294118) (net 10 /OUT_B_PHASE_A)) (model ${KISYS3DMOD}/Connector_JST.3dshapes/JST_XH_B5B-XH-A_1x05_P2.50mm_Vertical.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Connector_JST:JST_XH_B5B-XH-A_1x05_P2.50mm_Vertical (layer F.Cu) (tedit 5C28146C) (tstamp 6066CE27) (at 200.66 39.37 180) (descr "JST XH series connector, B5B-XH-A (http://www.jst-mfg.com/product/pdf/eng/eXH.pdf), generated with kicad-footprint-generator") (tags "connector JST XH vertical") (path /6072FE6C) (fp_text reference J3 (at 5 -3.55) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value "Motor A" (at 5 4.6) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -2.45 -2.35) (end -2.45 3.4) (layer F.Fab) (width 0.1)) (fp_line (start -2.45 3.4) (end 12.45 3.4) (layer F.Fab) (width 0.1)) (fp_line (start 12.45 3.4) (end 12.45 -2.35) (layer F.Fab) (width 0.1)) (fp_line (start 12.45 -2.35) (end -2.45 -2.35) (layer F.Fab) (width 0.1)) (fp_line (start -2.56 -2.46) (end -2.56 3.51) (layer F.SilkS) (width 0.12)) (fp_line (start -2.56 3.51) (end 12.56 3.51) (layer F.SilkS) (width 0.12)) (fp_line (start 12.56 3.51) (end 12.56 -2.46) (layer F.SilkS) (width 0.12)) (fp_line (start 12.56 -2.46) (end -2.56 -2.46) (layer F.SilkS) (width 0.12)) (fp_line (start -2.95 -2.85) (end -2.95 3.9) (layer F.CrtYd) (width 0.05)) (fp_line (start -2.95 3.9) (end 12.95 3.9) (layer F.CrtYd) (width 0.05)) (fp_line (start 12.95 3.9) (end 12.95 -2.85) (layer F.CrtYd) (width 0.05)) (fp_line (start 12.95 -2.85) (end -2.95 -2.85) (layer F.CrtYd) (width 0.05)) (fp_line (start -0.625 -2.35) (end 0 -1.35) (layer F.Fab) (width 0.1)) (fp_line (start 0 -1.35) (end 0.625 -2.35) (layer F.Fab) (width 0.1)) (fp_line (start 0.75 -2.45) (end 0.75 -1.7) (layer F.SilkS) (width 0.12)) (fp_line (start 0.75 -1.7) (end 9.25 -1.7) (layer F.SilkS) (width 0.12)) (fp_line (start 9.25 -1.7) (end 9.25 -2.45) (layer F.SilkS) (width 0.12)) (fp_line (start 9.25 -2.45) (end 0.75 -2.45) (layer F.SilkS) (width 0.12)) (fp_line (start -2.55 -2.45) (end -2.55 -1.7) (layer F.SilkS) (width 0.12)) (fp_line (start -2.55 -1.7) (end -0.75 -1.7) (layer F.SilkS) (width 0.12)) (fp_line (start -0.75 -1.7) (end -0.75 -2.45) (layer F.SilkS) (width 0.12)) (fp_line (start -0.75 -2.45) (end -2.55 -2.45) (layer F.SilkS) (width 0.12)) (fp_line (start 10.75 -2.45) (end 10.75 -1.7) (layer F.SilkS) (width 0.12)) (fp_line (start 10.75 -1.7) (end 12.55 -1.7) (layer F.SilkS) (width 0.12)) (fp_line (start 12.55 -1.7) (end 12.55 -2.45) (layer F.SilkS) (width 0.12)) (fp_line (start 12.55 -2.45) (end 10.75 -2.45) (layer F.SilkS) (width 0.12)) (fp_line (start -2.55 -0.2) (end -1.8 -0.2) (layer F.SilkS) (width 0.12)) (fp_line (start -1.8 -0.2) (end -1.8 2.75) (layer F.SilkS) (width 0.12)) (fp_line (start -1.8 2.75) (end 5 2.75) (layer F.SilkS) (width 0.12)) (fp_line (start 12.55 -0.2) (end 11.8 -0.2) (layer F.SilkS) (width 0.12)) (fp_line (start 11.8 -0.2) (end 11.8 2.75) (layer F.SilkS) (width 0.12)) (fp_line (start 11.8 2.75) (end 5 2.75) (layer F.SilkS) (width 0.12)) (fp_line (start -1.6 -2.75) (end -2.85 -2.75) (layer F.SilkS) (width 0.12)) (fp_line (start -2.85 -2.75) (end -2.85 -1.5) (layer F.SilkS) (width 0.12)) (fp_text user %R (at 5 2.7) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 5 thru_hole oval (at 10 0 180) (size 1.7 1.95) (drill 0.95) (layers *.Cu *.Mask) (net 39 /OUT_A_COMMON)) (pad 4 thru_hole oval (at 7.5 0 180) (size 1.7 1.95) (drill 0.95) (layers *.Cu *.Mask) (net 3 /OUT_A_PHASE_D)) (pad 3 thru_hole oval (at 5 0 180) (size 1.7 1.95) (drill 0.95) (layers *.Cu *.Mask) (net 4 /OUT_A_PHASE_C)) (pad 2 thru_hole oval (at 2.5 0 180) (size 1.7 1.95) (drill 0.95) (layers *.Cu *.Mask) (net 5 /OUT_A_PHASE_B)) (pad 1 thru_hole roundrect (at 0 0 180) (size 1.7 1.95) (drill 0.95) (layers *.Cu *.Mask) (roundrect_rratio 0.1470588235294118) (net 6 /OUT_A_PHASE_A)) (model ${KISYS3DMOD}/Connector_JST.3dshapes/JST_XH_B5B-XH-A_1x05_P2.50mm_Vertical.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_Vertical (layer F.Cu) (tedit 59FED5CC) (tstamp 6066D75A) (at 50.8 29.21 90) (descr "Through hole straight pin header, 1x03, 2.54mm pitch, single row") (tags "Through hole pin header THT 1x03 2.54mm single row") (path /60A61F30) (fp_text reference J15 (at 0 -2.33 90) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value "Sensor F" (at 0 7.41 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 1.8 -1.8) (end -1.8 -1.8) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.8 6.85) (end 1.8 -1.8) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.8 6.85) (end 1.8 6.85) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.8 -1.8) (end -1.8 6.85) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.33 -1.33) (end 0 -1.33) (layer F.SilkS) (width 0.12)) (fp_line (start -1.33 0) (end -1.33 -1.33) (layer F.SilkS) (width 0.12)) (fp_line (start -1.33 1.27) (end 1.33 1.27) (layer F.SilkS) (width 0.12)) (fp_line (start 1.33 1.27) (end 1.33 6.41) (layer F.SilkS) (width 0.12)) (fp_line (start -1.33 1.27) (end -1.33 6.41) (layer F.SilkS) (width 0.12)) (fp_line (start -1.33 6.41) (end 1.33 6.41) (layer F.SilkS) (width 0.12)) (fp_line (start -1.27 -0.635) (end -0.635 -1.27) (layer F.Fab) (width 0.1)) (fp_line (start -1.27 6.35) (end -1.27 -0.635) (layer F.Fab) (width 0.1)) (fp_line (start 1.27 6.35) (end -1.27 6.35) (layer F.Fab) (width 0.1)) (fp_line (start 1.27 -1.27) (end 1.27 6.35) (layer F.Fab) (width 0.1)) (fp_line (start -0.635 -1.27) (end 1.27 -1.27) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 2.54) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 3 thru_hole oval (at 0 5.08 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 60 /SENSOR_F_SIGNAL)) (pad 2 thru_hole oval (at 0 2.54 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 61 /SENSOR_F_VCC)) (pad 1 thru_hole rect (at 0 0 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 62 /SENSOR_F_GND)) (model ${KISYS3DMOD}/Connector_PinHeader_2.54mm.3dshapes/PinHeader_1x03_P2.54mm_Vertical.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_Vertical (layer F.Cu) (tedit 59FED5CC) (tstamp 6066CA16) (at 69.85 29.21 90) (descr "Through hole straight pin header, 1x03, 2.54mm pitch, single row") (tags "Through hole pin header THT 1x03 2.54mm single row") (path /60A61F26) (fp_text reference J14 (at 0 -2.33 90) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value "Sensor E" (at 0 7.41 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 1.8 -1.8) (end -1.8 -1.8) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.8 6.85) (end 1.8 -1.8) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.8 6.85) (end 1.8 6.85) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.8 -1.8) (end -1.8 6.85) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.33 -1.33) (end 0 -1.33) (layer F.SilkS) (width 0.12)) (fp_line (start -1.33 0) (end -1.33 -1.33) (layer F.SilkS) (width 0.12)) (fp_line (start -1.33 1.27) (end 1.33 1.27) (layer F.SilkS) (width 0.12)) (fp_line (start 1.33 1.27) (end 1.33 6.41) (layer F.SilkS) (width 0.12)) (fp_line (start -1.33 1.27) (end -1.33 6.41) (layer F.SilkS) (width 0.12)) (fp_line (start -1.33 6.41) (end 1.33 6.41) (layer F.SilkS) (width 0.12)) (fp_line (start -1.27 -0.635) (end -0.635 -1.27) (layer F.Fab) (width 0.1)) (fp_line (start -1.27 6.35) (end -1.27 -0.635) (layer F.Fab) (width 0.1)) (fp_line (start 1.27 6.35) (end -1.27 6.35) (layer F.Fab) (width 0.1)) (fp_line (start 1.27 -1.27) (end 1.27 6.35) (layer F.Fab) (width 0.1)) (fp_line (start -0.635 -1.27) (end 1.27 -1.27) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 2.54) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 3 thru_hole oval (at 0 5.08 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 57 /SENSOR_E_SIGNAL)) (pad 2 thru_hole oval (at 0 2.54 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 58 /SENSOR_E_VCC)) (pad 1 thru_hole rect (at 0 0 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 59 /SENSOR_E_GND)) (model ${KISYS3DMOD}/Connector_PinHeader_2.54mm.3dshapes/PinHeader_1x03_P2.54mm_Vertical.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_Vertical (layer F.Cu) (tedit 59FED5CC) (tstamp 6066CA9D) (at 88.9 29.21 90) (descr "Through hole straight pin header, 1x03, 2.54mm pitch, single row") (tags "Through hole pin header THT 1x03 2.54mm single row") (path /61156491) (fp_text reference J11 (at 0 -2.33 90) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value "Sensor D" (at 0 7.41 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 1.8 -1.8) (end -1.8 -1.8) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.8 6.85) (end 1.8 -1.8) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.8 6.85) (end 1.8 6.85) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.8 -1.8) (end -1.8 6.85) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.33 -1.33) (end 0 -1.33) (layer F.SilkS) (width 0.12)) (fp_line (start -1.33 0) (end -1.33 -1.33) (layer F.SilkS) (width 0.12)) (fp_line (start -1.33 1.27) (end 1.33 1.27) (layer F.SilkS) (width 0.12)) (fp_line (start 1.33 1.27) (end 1.33 6.41) (layer F.SilkS) (width 0.12)) (fp_line (start -1.33 1.27) (end -1.33 6.41) (layer F.SilkS) (width 0.12)) (fp_line (start -1.33 6.41) (end 1.33 6.41) (layer F.SilkS) (width 0.12)) (fp_line (start -1.27 -0.635) (end -0.635 -1.27) (layer F.Fab) (width 0.1)) (fp_line (start -1.27 6.35) (end -1.27 -0.635) (layer F.Fab) (width 0.1)) (fp_line (start 1.27 6.35) (end -1.27 6.35) (layer F.Fab) (width 0.1)) (fp_line (start 1.27 -1.27) (end 1.27 6.35) (layer F.Fab) (width 0.1)) (fp_line (start -0.635 -1.27) (end 1.27 -1.27) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 2.54) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 3 thru_hole oval (at 0 5.08 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 52 /SENSOR_D_SIGNAL)) (pad 2 thru_hole oval (at 0 2.54 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 53 /SENSOR_D_VCC)) (pad 1 thru_hole rect (at 0 0 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 54 /SENSOR_D_GND)) (model ${KISYS3DMOD}/Connector_PinHeader_2.54mm.3dshapes/PinHeader_1x03_P2.54mm_Vertical.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_Vertical (layer F.Cu) (tedit 59FED5CC) (tstamp 6066CBB4) (at 154.94 29.21 90) (descr "Through hole straight pin header, 1x03, 2.54mm pitch, single row") (tags "Through hole pin header THT 1x03 2.54mm single row") (path /61155EE4) (fp_text reference J10 (at 0 -2.33 90) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value "Sensor C" (at 0 7.41 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 1.8 -1.8) (end -1.8 -1.8) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.8 6.85) (end 1.8 -1.8) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.8 6.85) (end 1.8 6.85) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.8 -1.8) (end -1.8 6.85) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.33 -1.33) (end 0 -1.33) (layer F.SilkS) (width 0.12)) (fp_line (start -1.33 0) (end -1.33 -1.33) (layer F.SilkS) (width 0.12)) (fp_line (start -1.33 1.27) (end 1.33 1.27) (layer F.SilkS) (width 0.12)) (fp_line (start 1.33 1.27) (end 1.33 6.41) (layer F.SilkS) (width 0.12)) (fp_line (start -1.33 1.27) (end -1.33 6.41) (layer F.SilkS) (width 0.12)) (fp_line (start -1.33 6.41) (end 1.33 6.41) (layer F.SilkS) (width 0.12)) (fp_line (start -1.27 -0.635) (end -0.635 -1.27) (layer F.Fab) (width 0.1)) (fp_line (start -1.27 6.35) (end -1.27 -0.635) (layer F.Fab) (width 0.1)) (fp_line (start 1.27 6.35) (end -1.27 6.35) (layer F.Fab) (width 0.1)) (fp_line (start 1.27 -1.27) (end 1.27 6.35) (layer F.Fab) (width 0.1)) (fp_line (start -0.635 -1.27) (end 1.27 -1.27) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 2.54) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 3 thru_hole oval (at 0 5.08 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 49 /SENSOR_C_SIGNAL)) (pad 2 thru_hole oval (at 0 2.54 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 50 /SENSOR_C_VCC)) (pad 1 thru_hole rect (at 0 0 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 51 /SENSOR_C_GND)) (model ${KISYS3DMOD}/Connector_PinHeader_2.54mm.3dshapes/PinHeader_1x03_P2.54mm_Vertical.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_Vertical (layer F.Cu) (tedit 59FED5CC) (tstamp 6066CB72) (at 173.99 29.21 90) (descr "Through hole straight pin header, 1x03, 2.54mm pitch, single row") (tags "Through hole pin header THT 1x03 2.54mm single row") (path /6115565C) (fp_text reference J9 (at 0 -2.33 90) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value "Sensor B" (at 0 7.41 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 1.8 -1.8) (end -1.8 -1.8) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.8 6.85) (end 1.8 -1.8) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.8 6.85) (end 1.8 6.85) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.8 -1.8) (end -1.8 6.85) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.33 -1.33) (end 0 -1.33) (layer F.SilkS) (width 0.12)) (fp_line (start -1.33 0) (end -1.33 -1.33) (layer F.SilkS) (width 0.12)) (fp_line (start -1.33 1.27) (end 1.33 1.27) (layer F.SilkS) (width 0.12)) (fp_line (start 1.33 1.27) (end 1.33 6.41) (layer F.SilkS) (width 0.12)) (fp_line (start -1.33 1.27) (end -1.33 6.41) (layer F.SilkS) (width 0.12)) (fp_line (start -1.33 6.41) (end 1.33 6.41) (layer F.SilkS) (width 0.12)) (fp_line (start -1.27 -0.635) (end -0.635 -1.27) (layer F.Fab) (width 0.1)) (fp_line (start -1.27 6.35) (end -1.27 -0.635) (layer F.Fab) (width 0.1)) (fp_line (start 1.27 6.35) (end -1.27 6.35) (layer F.Fab) (width 0.1)) (fp_line (start 1.27 -1.27) (end 1.27 6.35) (layer F.Fab) (width 0.1)) (fp_line (start -0.635 -1.27) (end 1.27 -1.27) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 2.54) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 3 thru_hole oval (at 0 5.08 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 46 /SENSOR_B_SIGNAL)) (pad 2 thru_hole oval (at 0 2.54 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 47 /SENSOR_B_VCC)) (pad 1 thru_hole rect (at 0 0 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 48 /SENSOR_B_GND)) (model ${KISYS3DMOD}/Connector_PinHeader_2.54mm.3dshapes/PinHeader_1x03_P2.54mm_Vertical.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_Vertical (layer F.Cu) (tedit 59FED5CC) (tstamp 6066CE93) (at 193.04 29.21 90) (descr "Through hole straight pin header, 1x03, 2.54mm pitch, single row") (tags "Through hole pin header THT 1x03 2.54mm single row") (path /61119DE9) (fp_text reference J8 (at 0 -2.33 90) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value "Sensor A" (at 0 7.41 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 1.8 -1.8) (end -1.8 -1.8) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.8 6.85) (end 1.8 -1.8) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.8 6.85) (end 1.8 6.85) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.8 -1.8) (end -1.8 6.85) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.33 -1.33) (end 0 -1.33) (layer F.SilkS) (width 0.12)) (fp_line (start -1.33 0) (end -1.33 -1.33) (layer F.SilkS) (width 0.12)) (fp_line (start -1.33 1.27) (end 1.33 1.27) (layer F.SilkS) (width 0.12)) (fp_line (start 1.33 1.27) (end 1.33 6.41) (layer F.SilkS) (width 0.12)) (fp_line (start -1.33 1.27) (end -1.33 6.41) (layer F.SilkS) (width 0.12)) (fp_line (start -1.33 6.41) (end 1.33 6.41) (layer F.SilkS) (width 0.12)) (fp_line (start -1.27 -0.635) (end -0.635 -1.27) (layer F.Fab) (width 0.1)) (fp_line (start -1.27 6.35) (end -1.27 -0.635) (layer F.Fab) (width 0.1)) (fp_line (start 1.27 6.35) (end -1.27 6.35) (layer F.Fab) (width 0.1)) (fp_line (start 1.27 -1.27) (end 1.27 6.35) (layer F.Fab) (width 0.1)) (fp_line (start -0.635 -1.27) (end 1.27 -1.27) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 2.54) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 3 thru_hole oval (at 0 5.08 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 43 /SENSOR_A_SIGNAL)) (pad 2 thru_hole oval (at 0 2.54 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 44 /SENSOR_A_VCC)) (pad 1 thru_hole rect (at 0 0 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (net 45 /SENSOR_A_GND)) (model ${KISYS3DMOD}/Connector_PinHeader_2.54mm.3dshapes/PinHeader_1x03_P2.54mm_Vertical.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (dimension 17.78 (width 0.15) (layer Cmts.User) (gr_text "17.780 mm" (at 100.36 72.39 270) (layer Cmts.User) (effects (font (size 1 1) (thickness 0.15))) ) (feature1 (pts (xy 98.425 81.28) (xy 99.646421 81.28))) (feature2 (pts (xy 98.425 63.5) (xy 99.646421 63.5))) (crossbar (pts (xy 99.06 63.5) (xy 99.06 81.28))) (arrow1a (pts (xy 99.06 81.28) (xy 98.473579 80.153496))) (arrow1b (pts (xy 99.06 81.28) (xy 99.646421 80.153496))) (arrow2a (pts (xy 99.06 63.5) (xy 98.473579 64.626504))) (arrow2b (pts (xy 99.06 63.5) (xy 99.646421 64.626504))) ) (dimension 21.59 (width 0.15) (layer Cmts.User) (gr_text "21.590 mm" (at 107.315 67.34) (layer Cmts.User) (effects (font (size 1 1) (thickness 0.15))) ) (feature1 (pts (xy 118.11 66.04) (xy 118.11 66.626421))) (feature2 (pts (xy 96.52 66.04) (xy 96.52 66.626421))) (crossbar (pts (xy 96.52 66.04) (xy 118.11 66.04))) (arrow1a (pts (xy 118.11 66.04) (xy 116.983496 66.626421))) (arrow1b (pts (xy 118.11 66.04) (xy 116.983496 65.453579))) (arrow2a (pts (xy 96.52 66.04) (xy 97.646504 66.626421))) (arrow2b (pts (xy 96.52 66.04) (xy 97.646504 65.453579))) ) (gr_text GND (at 104.14 27.94 180) (layer F.SilkS) (tstamp 6073FD2B) (effects (font (size 1.2 1.2) (thickness 0.15))) ) (gr_text 12V (at 109.22 27.94 180) (layer F.SilkS) (effects (font (size 1.2 1.2) (thickness 0.15))) ) (gr_text - (at 48.26 29.21) (layer F.SilkS) (tstamp 6071351A) (effects (font (size 1.5 1.5) (thickness 0.3))) ) (gr_text - (at 67.31 29.21) (layer F.SilkS) (tstamp 60713518) (effects (font (size 1.5 1.5) (thickness 0.3))) ) (gr_text - (at 86.36 29.21) (layer F.SilkS) (tstamp 60713516) (effects (font (size 1.5 1.5) (thickness 0.3))) ) (gr_text - (at 152.4 29.21) (layer F.SilkS) (tstamp 60713514) (effects (font (size 1.5 1.5) (thickness 0.3))) ) (gr_text - (at 171.45 29.21) (layer F.SilkS) (tstamp 60713512) (effects (font (size 1.5 1.5) (thickness 0.3))) ) (gr_text - (at 190.5 29.21) (layer F.SilkS) (effects (font (size 1.5 1.5) (thickness 0.3))) ) (gr_text Motor (at 40.005 31.75) (layer F.SilkS) (tstamp 606A272B) (effects (font (size 1 1) (thickness 0.15))) ) (gr_text GND (at 37.465 33.655) (layer F.SilkS) (tstamp 606A2728) (effects (font (size 1 1) (thickness 0.15))) ) (gr_text Logic (at 34.925 31.75) (layer F.SilkS) (tstamp 606A2725) (effects (font (size 1 1) (thickness 0.15))) ) (gr_text GPIO (at 132.715 113.665) (layer F.SilkS) (tstamp 60697484) (effects (font (size 1 1) (thickness 0.15))) ) (gr_text GND (at 132.715 118.745) (layer F.SilkS) (tstamp 60697481) (effects (font (size 1 1) (thickness 0.15))) ) (gr_text 3V3 (at 132.715 116.205) (layer F.SilkS) (tstamp 6069747D) (effects (font (size 1 1) (thickness 0.15))) ) (gr_text 7 (at 156.21 111.76) (layer F.SilkS) (tstamp 60693A44) (effects (font (size 1 1) (thickness 0.15))) ) (gr_text 6 (at 153.67 111.76) (layer F.SilkS) (tstamp 60693A42) (effects (font (size 1 1) (thickness 0.15))) ) (gr_text 5 (at 151.13 111.76) (layer F.SilkS) (tstamp 60693A40) (effects (font (size 1 1) (thickness 0.15))) ) (gr_text 4 (at 148.59 111.76) (layer F.SilkS) (tstamp 60693A3E) (effects (font (size 1 1) (thickness 0.15))) ) (gr_text 3 (at 143.51 111.76) (layer F.SilkS) (tstamp 60693A3C) (effects (font (size 1 1) (thickness 0.15))) ) (gr_text 2 (at 140.97 111.76) (layer F.SilkS) (tstamp 60693A3A) (effects (font (size 1 1) (thickness 0.15))) ) (gr_text 1 (at 138.43 111.76) (layer F.SilkS) (tstamp 60693A38) (effects (font (size 1 1) (thickness 0.15))) ) (gr_text 0 (at 135.89 111.76) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (gr_arc (start 116.84 80.01) (end 116.84 81.28) (angle -90) (layer Edge.Cuts) (width 0.05) (tstamp 6066C950)) (gr_line (start 97.79 63.5) (end 116.84 63.5) (layer Edge.Cuts) (width 0.05) (tstamp 6066C764)) (gr_arc (start 116.84 64.77) (end 118.11 64.77) (angle -90) (layer Edge.Cuts) (width 0.05) (tstamp 6066C761)) (gr_arc (start 97.79 80.01) (end 96.52 80.01) (angle -90) (layer Edge.Cuts) (width 0.05) (tstamp 6066C6A7)) (gr_arc (start 97.79 64.77) (end 97.79 63.5) (angle -90) (layer Edge.Cuts) (width 0.05) (tstamp 6066EB13)) (gr_line (start 96.52 80.01) (end 96.52 64.77) (layer Edge.Cuts) (width 0.05) (tstamp 6066C602)) (gr_line (start 118.11 64.77) (end 118.11 80.01) (layer Edge.Cuts) (width 0.05) (tstamp 6066C5FF)) (gr_line (start 116.84 81.28) (end 97.79 81.28) (layer Edge.Cuts) (width 0.05) (tstamp 6066C5FC)) (dimension 95.25 (width 0.15) (layer Dwgs.User) (tstamp 6066D0B9) (gr_text "95.250 mm" (at 232.44 73.025 270) (layer Dwgs.User) (tstamp 6066D0B9) (effects (font (size 1 1) (thickness 0.15))) ) (feature1 (pts (xy 223.52 120.65) (xy 231.726421 120.65))) (feature2 (pts (xy 223.52 25.4) (xy 231.726421 25.4))) (crossbar (pts (xy 231.14 25.4) (xy 231.14 120.65))) (arrow1a (pts (xy 231.14 120.65) (xy 230.553579 119.523496))) (arrow1b (pts (xy 231.14 120.65) (xy 231.726421 119.523496))) (arrow2a (pts (xy 231.14 25.4) (xy 230.553579 26.526504))) (arrow2b (pts (xy 231.14 25.4) (xy 231.726421 26.526504))) ) (dimension 198.12 (width 0.15) (layer Dwgs.User) (tstamp 6066C75C) (gr_text "198.120 mm" (at 124.46 16.48) (layer Dwgs.User) (tstamp 6066C75C) (effects (font (size 1 1) (thickness 0.15))) ) (feature1 (pts (xy 223.52 25.4) (xy 223.52 17.193579))) (feature2 (pts (xy 25.4 25.4) (xy 25.4 17.193579))) (crossbar (pts (xy 25.4 17.78) (xy 223.52 17.78))) (arrow1a (pts (xy 223.52 17.78) (xy 222.393496 18.366421))) (arrow1b (pts (xy 223.52 17.78) (xy 222.393496 17.193579))) (arrow2a (pts (xy 25.4 17.78) (xy 26.526504 18.366421))) (arrow2b (pts (xy 25.4 17.78) (xy 26.526504 17.193579))) ) (gr_line (start 25.4 120.65) (end 25.4 25.4) (layer Edge.Cuts) (width 0.05) (tstamp 6066D1F6)) (gr_line (start 223.52 120.65) (end 25.4 120.65) (layer Edge.Cuts) (width 0.05) (tstamp 6066D742)) (gr_line (start 223.52 25.4) (end 223.52 120.65) (layer Edge.Cuts) (width 0.05) (tstamp 6066CC0B)) (gr_line (start 25.4 25.4) (end 223.52 25.4) (layer Edge.Cuts) (width 0.05) (tstamp 6066CAF7)) (gr_text https://github.com/scottbez1/splitflap (at 36.83 116.84) (layer F.SilkS) (tstamp 606B3E54) (effects (font (size 1.5 1.5) (thickness 0.12)) (justify left)) ) (gr_text "DATE: YYYY-MM-DD\nCOMMIT: deadbeef" (at 59.69 115.57) (layer B.SilkS) (tstamp 6066D847) (effects (font (size 1.2 1.2) (thickness 0.12)) (justify left mirror)) ) (gr_text v1.1 (at 86.681429 113.03) (layer F.SilkS) (tstamp 6066D81D) (effects (font (size 1.2 1.2) (thickness 0.1)) (justify left)) ) (gr_text "Splitflap Chainlink Driver Tester" (at 36.83 113.03) (layer F.SilkS) (tstamp 606B3E5B) (effects (font (size 2 2) (thickness 0.25)) (justify left)) ) (gr_line (start 148.59 64.77) (end 148.59 79.375) (layer F.SilkS) (width 0.4) (tstamp 6066D817)) (gr_line (start 148.59 53.34) (end 148.59 55.245) (layer F.SilkS) (width 0.4) (tstamp 6066D814)) (gr_line (start 186.055 69.215) (end 186.055 79.375) (layer F.SilkS) (width 0.4) (tstamp 6066D811)) (gr_line (start 186.055 53.34) (end 186.055 60.325) (layer F.SilkS) (width 0.4) (tstamp 6066D80E)) (gr_line (start 167.005 53.34) (end 167.005 60.325) (layer F.SilkS) (width 0.4) (tstamp 6066D80B)) (gr_line (start 167.005 69.215) (end 167.005 79.375) (layer F.SilkS) (width 0.4) (tstamp 6066D808)) (gr_line (start 81.915 53.34) (end 81.915 60.325) (layer F.SilkS) (width 0.4) (tstamp 6066D9B2)) (gr_line (start 81.915 69.215) (end 81.915 79.375) (layer F.SilkS) (width 0.4) (tstamp 6066D9AF)) (gr_line (start 62.865 69.215) (end 62.865 79.375) (layer F.SilkS) (width 0.4) (tstamp 6066D9AC)) (gr_line (start 62.865 53.34) (end 62.865 60.325) (layer F.SilkS) (width 0.4) (tstamp 6066D9A9)) (gr_text A (at 195.58 33.02) (layer F.SilkS) (tstamp 6066D9A6) (effects (font (size 2.5 2.2) (thickness 0.3))) ) (gr_text B (at 176.53 33.02) (layer F.SilkS) (tstamp 6066D9A3) (effects (font (size 2.5 2.2) (thickness 0.3))) ) (gr_text C (at 157.48 33.02) (layer F.SilkS) (tstamp 6066D9A0) (effects (font (size 2.5 2.2) (thickness 0.3))) ) (gr_text D (at 91.44 33.02) (layer F.SilkS) (tstamp 6066D99D) (effects (font (size 2.5 2.2) (thickness 0.3))) ) (gr_text E (at 72.39 33.02) (layer F.SilkS) (tstamp 6066D99A) (effects (font (size 2.5 2.2) (thickness 0.3))) ) (gr_text F (at 53.34 33.02) (layer F.SilkS) (tstamp 6066D997) (effects (font (size 2.5 2.2) (thickness 0.3))) ) (gr_line (start 25.4 83.82) (end 25.4 53.34) (layer F.SilkS) (width 0.05) (tstamp 6066D994)) (gr_line (start 223.52 53.34) (end 223.52 83.82) (layer F.SilkS) (width 0.05) (tstamp 6066D991)) (gr_line (start 223.52 83.82) (end 25.4 83.82) (layer F.SilkS) (width 0.05) (tstamp 6066D98E)) (gr_line (start 25.4 53.34) (end 223.52 53.34) (layer F.SilkS) (width 0.05) (tstamp 6066D98B)) (segment (start 142.25 38.445) (end 142.45001 38.24499) (width 0.55) (layer F.Cu) (net 1) (status 30)) (segment (start 148.73499 38.24499) (end 151.13 40.64) (width 0.55) (layer F.Cu) (net 1)) (segment (start 151.13 40.64) (end 151.13 44.45) (width 0.55) (layer F.Cu) (net 1)) (via (at 151.13 44.45) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 1)) (via (at 142.24 50.165) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 1)) (segment (start 141.2475 49.1725) (end 142.24 50.165) (width 0.15) (layer F.Cu) (net 1) (status 10)) (segment (start 140.97 49.1725) (end 141.2475 49.1725) (width 0.15) (layer F.Cu) (net 1) (status 30)) (segment (start 143.2325 49.1725) (end 142.24 50.165) (width 0.15) (layer F.Cu) (net 1) (status 10)) (segment (start 143.51 49.1725) (end 143.2325 49.1725) (width 0.15) (layer F.Cu) (net 1) (status 30)) (segment (start 146.9625 38.4575) (end 147.17501 38.24499) (width 0.15) (layer F.Cu) (net 1)) (segment (start 146.9625 39.37) (end 146.9625 38.4575) (width 0.15) (layer F.Cu) (net 1) (status 10)) (segment (start 147.17501 38.24499) (end 148.73499 38.24499) (width 0.55) (layer F.Cu) (net 1)) (segment (start 142.45001 38.24499) (end 147.17501 38.24499) (width 0.55) (layer F.Cu) (net 1) (status 10)) (segment (start 146.9625 41.275) (end 146.9625 39.37) (width 0.15) (layer F.Cu) (net 1) (status 30)) (segment (start 150.495 45.085) (end 151.13 44.45) (width 0.15) (layer F.Cu) (net 1)) (segment (start 149.5025 45.085) (end 150.495 45.085) (width 0.15) (layer F.Cu) (net 1) (status 10)) (via (at 127 46.228) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 1)) (segment (start 141.825 109.645) (end 142.475 109.645) (width 0.15) (layer F.Cu) (net 1) (status 30)) (segment (start 142.475 109.645) (end 143.125 109.645) (width 0.15) (layer F.Cu) (net 1) (status 30)) (segment (start 144.425 101.052) (end 143.195 99.822) (width 0.15) (layer F.Cu) (net 1) (status 20)) (segment (start 144.425 102.445) (end 144.425 101.052) (width 0.15) (layer F.Cu) (net 1) (status 10)) (via (at 143.51 99.06) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 1)) (segment (start 143.195 99.375) (end 143.51 99.06) (width 0.15) (layer F.Cu) (net 1) (status 10)) (segment (start 143.195 99.822) (end 143.195 99.375) (width 0.15) (layer F.Cu) (net 1) (status 30)) (via (at 125.222 96.774) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 1)) (segment (start 125.095 96.901) (end 125.222 96.774) (width 0.55) (layer F.Cu) (net 1)) (segment (start 125.095 98.45) (end 125.095 96.901) (width 0.55) (layer F.Cu) (net 1) (status 10)) (via (at 125.222 106.172) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 1)) (segment (start 125.095 106.045) (end 125.222 106.172) (width 0.55) (layer F.Cu) (net 1)) (segment (start 125.095 104.75) (end 125.095 106.045) (width 0.55) (layer F.Cu) (net 1) (status 10)) (via (at 130.81 101.346) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 1)) (segment (start 130.81 100.645) (end 130.81 101.346) (width 0.55) (layer F.Cu) (net 1) (status 10)) (segment (start 133.709 102.765) (end 133.604 102.87) (width 0.55) (layer F.Cu) (net 1)) (via (at 133.604 102.87) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 1)) (segment (start 134.62 102.765) (end 133.709 102.765) (width 0.55) (layer F.Cu) (net 1) (status 10)) (via (at 119.38 101.346) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 1)) (segment (start 119.38 100.645) (end 119.38 101.346) (width 0.55) (layer F.Cu) (net 1) (status 10)) (segment (start 116.481 102.765) (end 116.586 102.87) (width 0.55) (layer F.Cu) (net 1)) (via (at 116.586 102.87) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 1)) (segment (start 115.57 102.765) (end 116.481 102.765) (width 0.55) (layer F.Cu) (net 1) (status 10)) (via (at 129.54 93.98) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 1)) (segment (start 127.9125 93.98) (end 129.54 93.98) (width 0.15) (layer F.Cu) (net 1) (status 10)) (via (at 142.494 108.204) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 1)) (segment (start 142.475 109.645) (end 142.475 108.223) (width 0.15) (layer F.Cu) (net 1) (status 10)) (segment (start 142.475 108.223) (end 142.494 108.204) (width 0.15) (layer F.Cu) (net 1)) (via (at 144.756501 104.116501) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 1)) (segment (start 144.425 102.445) (end 144.425 103.785) (width 0.15) (layer F.Cu) (net 1) (status 10)) (segment (start 144.425 103.785) (end 144.756501 104.116501) (width 0.15) (layer F.Cu) (net 1)) (via (at 135.255 109.22) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 1)) (segment (start 136.2475 109.22) (end 135.255 109.22) (width 0.15) (layer F.Cu) (net 1) (status 10)) (segment (start 121.92 59.69) (end 127 59.69) (width 2) (layer F.Cu) (net 1) (status 30)) (segment (start 125.415 46.355) (end 125.73 46.04) (width 0.35) (layer F.Cu) (net 1) (status 30)) (segment (start 121.855 46.355) (end 125.415 46.355) (width 0.35) (layer F.Cu) (net 1) (status 30)) (segment (start 126.812 46.04) (end 127 46.228) (width 0.35) (layer F.Cu) (net 1)) (segment (start 125.73 46.04) (end 126.812 46.04) (width 0.35) (layer F.Cu) (net 1) (status 10)) (segment (start 116.905 43.815) (end 117.363879 44.273879) (width 0.15) (layer F.Cu) (net 1) (status 10)) (via (at 118.163781 45.213695) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 1)) (segment (start 121.855 46.355) (end 121.413491 46.796509) (width 0.35) (layer F.Cu) (net 1) (status 10)) (segment (start 118.035086 45.085) (end 118.163781 45.213695) (width 0.15) (layer F.Cu) (net 1)) (segment (start 116.905 45.085) (end 118.035086 45.085) (width 0.15) (layer F.Cu) (net 1) (status 10)) (via (at 117.640838 44.273879) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 1)) (segment (start 117.363879 44.273879) (end 117.640838 44.273879) (width 0.15) (layer F.Cu) (net 1)) (segment (start 121.413491 46.796509) (end 121.13 46.796509) (width 0.35) (layer F.Cu) (net 1)) (via (at 121.13 46.796509) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 1)) (via (at 140.97 69.215) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 1)) (segment (start 140.795 69.39) (end 140.97 69.215) (width 0.15) (layer F.Cu) (net 1)) (segment (start 140.795 70.69) (end 140.795 69.39) (width 0.15) (layer F.Cu) (net 1) (status 10)) (segment (start 204.47 95.25) (end 204.47 97.79) (width 0.35) (layer F.Cu) (net 1) (status 30)) (segment (start 204.47 118.11) (end 204.47 115.57) (width 0.35) (layer F.Cu) (net 1) (status 30)) (segment (start 201.93 118.11) (end 201.93 115.57) (width 0.35) (layer F.Cu) (net 1) (status 30)) (segment (start 181.61 115.57) (end 181.61 118.11) (width 0.35) (layer F.Cu) (net 1) (status 30)) (segment (start 179.07 115.57) (end 179.07 118.11) (width 0.35) (layer F.Cu) (net 1) (status 30)) (segment (start 38.735 99.265) (end 39.8 100.33) (width 0.55) (layer F.Cu) (net 1)) (segment (start 38.735 96.52) (end 38.735 99.265) (width 0.55) (layer F.Cu) (net 1)) (segment (start 37.67 100.33) (end 38.735 99.265) (width 0.55) (layer F.Cu) (net 1)) (segment (start 106.22 39.195) (end 109.22 36.195) (width 2) (layer F.Cu) (net 2) (status 30)) (segment (start 106.045 39.195) (end 106.22 39.195) (width 2) (layer F.Cu) (net 2) (status 30)) (segment (start 114.12 36.195) (end 114.755 35.56) (width 2) (layer F.Cu) (net 2) (status 30)) (segment (start 109.22 36.195) (end 114.12 36.195) (width 2) (layer F.Cu) (net 2) (status 30)) (segment (start 114.755 35.56) (end 118.415 35.56) (width 2) (layer F.Cu) (net 2) (status 30)) (segment (start 193.16 39.37) (end 193.16 57.15) (width 0.8) (layer B.Cu) (net 3) (status 30)) (segment (start 195.66 39.37) (end 195.66 57.15) (width 0.8) (layer B.Cu) (net 4) (status 30)) (segment (start 198.16 57.15) (end 198.16 39.37) (width 0.8) (layer B.Cu) (net 5) (status 30)) (segment (start 200.66 39.37) (end 200.66 57.15) (width 0.8) (layer B.Cu) (net 6) (status 30)) (segment (start 174.11 39.37) (end 174.11 57.15) (width 0.8) (layer B.Cu) (net 7) (status 30)) (segment (start 176.61 39.37) (end 176.61 57.15) (width 0.8) (layer B.Cu) (net 8) (status 30)) (segment (start 179.11 39.37) (end 179.11 57.15) (width 0.8) (layer B.Cu) (net 9) (status 30)) (segment (start 181.61 39.37) (end 181.61 57.15) (width 0.8) (layer B.Cu) (net 10) (status 30)) (segment (start 155.06 57.15) (end 155.06 39.37) (width 0.8) (layer B.Cu) (net 11) (status 30)) (segment (start 157.56 57.15) (end 157.56 39.37) (width 0.8) (layer B.Cu) (net 12) (status 30)) (segment (start 160.06 57.15) (end 160.06 39.37) (width 0.8) (layer B.Cu) (net 13) (status 30)) (segment (start 162.56 57.15) (end 162.56 39.37) (width 0.8) (layer B.Cu) (net 14) (status 30)) (segment (start 89.02 39.37) (end 89.02 57.15) (width 0.8) (layer B.Cu) (net 15) (status 30)) (segment (start 91.52 57.15) (end 91.52 39.37) (width 0.8) (layer B.Cu) (net 16) (status 30)) (segment (start 94.02 39.37) (end 94.02 57.15) (width 0.8) (layer B.Cu) (net 17) (status 30)) (segment (start 96.52 39.37) (end 96.52 57.15) (width 0.8) (layer B.Cu) (net 18) (status 30)) (segment (start 145.075 99.842) (end 145.095 99.822) (width 0.15) (layer F.Cu) (net 19) (status 30)) (segment (start 145.075 102.445) (end 145.075 99.842) (width 0.15) (layer F.Cu) (net 19) (status 30)) (segment (start 180.6975 93.6225) (end 179.07 95.25) (width 0.15) (layer F.Cu) (net 19) (status 20)) (segment (start 180.6975 92.71) (end 180.6975 93.6225) (width 0.15) (layer F.Cu) (net 19) (status 10)) (segment (start 156.21 116.205) (end 148.59 116.205) (width 0.35) (layer F.Cu) (net 19) (status 30)) (segment (start 148.59 116.205) (end 135.89 116.205) (width 0.35) (layer F.Cu) (net 19) (status 30)) (segment (start 156.21 116.205) (end 161.29 111.125) (width 0.35) (layer F.Cu) (net 19) (status 10)) (segment (start 161.036 101.854) (end 161.29 101.6) (width 0.15) (layer F.Cu) (net 19)) (segment (start 159.9165 101.854) (end 161.036 101.854) (width 0.15) (layer F.Cu) (net 19) (status 10)) (segment (start 160.528 103.886) (end 161.29 103.124) (width 0.15) (layer F.Cu) (net 19)) (segment (start 157.3765 103.886) (end 160.528 103.886) (width 0.15) (layer F.Cu) (net 19) (status 10)) (segment (start 161.29 103.124) (end 161.29 101.6) (width 0.35) (layer F.Cu) (net 19)) (segment (start 161.29 111.125) (end 161.29 103.124) (width 0.35) (layer F.Cu) (net 19)) (segment (start 125.415 47.625) (end 125.73 47.94) (width 0.35) (layer F.Cu) (net 19) (status 30)) (segment (start 121.855 47.625) (end 125.415 47.625) (width 0.35) (layer F.Cu) (net 19) (status 30)) (segment (start 179.07 95.25) (end 179.07 97.79) (width 0.35) (layer F.Cu) (net 19) (status 30)) (segment (start 179.07 92.250364) (end 179.07 95.25) (width 0.35) (layer F.Cu) (net 19) (status 20)) (segment (start 177.624636 90.805) (end 179.07 92.250364) (width 0.35) (layer F.Cu) (net 19)) (segment (start 162.56 90.805) (end 177.624636 90.805) (width 0.35) (layer F.Cu) (net 19)) (segment (start 161.29 92.075) (end 162.56 90.805) (width 0.35) (layer F.Cu) (net 19)) (segment (start 161.29 101.6) (end 161.29 92.075) (width 0.35) (layer F.Cu) (net 19)) (via (at 146.685 88.265) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 19)) (via (at 129.54 48.260016) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 19)) (segment (start 125.73 47.94) (end 129.219984 47.94) (width 0.35) (layer F.Cu) (net 19) (status 10)) (segment (start 129.219984 47.94) (end 129.54 48.260016) (width 0.35) (layer F.Cu) (net 19)) (segment (start 146.685 88.265) (end 143.51 85.09) (width 0.35) (layer B.Cu) (net 19)) (segment (start 143.51 85.09) (end 143.51 62.230016) (width 0.35) (layer B.Cu) (net 19)) (segment (start 143.51 62.230016) (end 129.54 48.260016) (width 0.35) (layer B.Cu) (net 19)) (segment (start 148.263 95.25) (end 154.305 95.25) (width 0.35) (layer F.Cu) (net 19)) (segment (start 145.095 99.822) (end 145.095 98.418) (width 0.35) (layer F.Cu) (net 19) (status 10)) (segment (start 145.095 98.418) (end 148.263 95.25) (width 0.35) (layer F.Cu) (net 19)) (segment (start 153.67 95.25) (end 154.305 95.25) (width 0.35) (layer F.Cu) (net 19)) (segment (start 146.685 88.265) (end 153.67 95.25) (width 0.35) (layer F.Cu) (net 19)) (via (at 154.305 95.25) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 19)) (via (at 161.29 95.25001) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 19)) (segment (start 154.305 95.25) (end 161.28999 95.25) (width 0.35) (layer B.Cu) (net 19)) (segment (start 161.28999 95.25) (end 161.29 95.25001) (width 0.35) (layer B.Cu) (net 19)) (segment (start 136.664 44.196) (end 137.16 43.7) (width 0.15) (layer F.Cu) (net 20) (status 30)) (segment (start 122.236 44.196) (end 136.664 44.196) (width 0.15) (layer F.Cu) (net 20) (status 20)) (segment (start 121.855 43.815) (end 122.236 44.196) (width 0.15) (layer F.Cu) (net 20) (status 10)) (segment (start 140.7825 43.7) (end 140.97 43.5125) (width 0.15) (layer F.Cu) (net 20) (status 30)) (segment (start 137.16 43.7) (end 140.7825 43.7) (width 0.15) (layer F.Cu) (net 20) (status 30)) (segment (start 135.075 41.615) (end 137.16 43.7) (width 0.15) (layer F.Cu) (net 20) (status 20)) (segment (start 132.715 41.615) (end 135.075 41.615) (width 0.15) (layer F.Cu) (net 20) (status 10)) (segment (start 132.715 47.9825) (end 132.9925 48.26) (width 0.15) (layer F.Cu) (net 21) (status 30)) (segment (start 132.715 46.1) (end 132.715 47.9825) (width 0.15) (layer F.Cu) (net 21) (status 30)) (segment (start 30.649999 40.174999) (end 29.21 38.735) (width 0.2) (layer B.Cu) (net 22)) (segment (start 30.649999 46.883001) (end 30.649999 40.174999) (width 0.2) (layer B.Cu) (net 22)) (segment (start 35.56 51.793002) (end 30.649999 46.883001) (width 0.2) (layer B.Cu) (net 22)) (segment (start 35.56 64.77) (end 35.56 51.793002) (width 0.2) (layer B.Cu) (net 22)) (segment (start 28.109999 42.375001) (end 29.21 41.275) (width 0.2) (layer B.Cu) (net 23)) (segment (start 28.109999 47.159999) (end 28.109999 42.375001) (width 0.2) (layer B.Cu) (net 23)) (segment (start 34.29 53.34) (end 28.109999 47.159999) (width 0.2) (layer B.Cu) (net 23)) (segment (start 34.29 66.04) (end 34.29 53.34) (width 0.2) (layer B.Cu) (net 23)) (segment (start 35.56 67.31) (end 34.29 66.04) (width 0.2) (layer B.Cu) (net 23)) (segment (start 69.97 39.37) (end 69.97 57.15) (width 0.8) (layer B.Cu) (net 24) (status 30)) (segment (start 72.47 57.15) (end 72.47 39.37) (width 0.8) (layer B.Cu) (net 25) (status 30)) (segment (start 74.97 57.15) (end 74.97 39.37) (width 0.8) (layer B.Cu) (net 26) (status 30)) (segment (start 77.47 39.37) (end 77.47 57.15) (width 0.8) (layer B.Cu) (net 27) (status 30)) (segment (start 50.92 39.37) (end 50.92 57.15) (width 0.8) (layer B.Cu) (net 28) (status 30)) (segment (start 53.42 39.37) (end 53.42 57.15) (width 0.8) (layer B.Cu) (net 29) (status 30)) (segment (start 55.92 39.37) (end 55.92 57.15) (width 0.8) (layer B.Cu) (net 30) (status 30)) (segment (start 58.42 39.37) (end 58.42 57.15) (width 0.8) (layer B.Cu) (net 31) (status 30)) (segment (start 33.370011 53.690029) (end 28.574982 48.895) (width 0.2) (layer B.Cu) (net 32)) (segment (start 27.94 48.260018) (end 28.574982 48.895) (width 0.2) (layer F.Cu) (net 32)) (segment (start 33.370011 67.660011) (end 33.370011 53.690029) (width 0.2) (layer B.Cu) (net 32)) (segment (start 35.56 69.85) (end 33.370011 67.660011) (width 0.2) (layer B.Cu) (net 32)) (via (at 28.574982 48.895) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 32)) (segment (start 29.21 43.815) (end 27.94 45.085) (width 0.2) (layer F.Cu) (net 32)) (segment (start 27.94 45.085) (end 27.94 48.260018) (width 0.2) (layer F.Cu) (net 32)) (segment (start 130.515 98.45) (end 130.81 98.745) (width 0.55) (layer F.Cu) (net 33) (status 30)) (segment (start 127.395 98.45) (end 130.515 98.45) (width 0.55) (layer F.Cu) (net 33) (status 30)) (segment (start 134.2 98.745) (end 134.62 99.165) (width 0.55) (layer F.Cu) (net 33) (status 30)) (segment (start 130.81 98.745) (end 134.2 98.745) (width 0.55) (layer F.Cu) (net 33) (status 30)) (segment (start 207.01 97.79) (end 207.01 95.25) (width 0.55) (layer F.Cu) (net 33) (status 30)) (segment (start 207.01 91.44) (end 207.01 95.25) (width 0.55) (layer F.Cu) (net 33) (status 20)) (segment (start 202.184 86.614) (end 207.01 91.44) (width 0.55) (layer F.Cu) (net 33)) (segment (start 147.171 86.614) (end 202.184 86.614) (width 0.55) (layer F.Cu) (net 33)) (segment (start 134.62 99.165) (end 147.171 86.614) (width 0.55) (layer F.Cu) (net 33) (status 10)) (segment (start 131.445 102.34) (end 134.62 99.165) (width 0.55) (layer F.Cu) (net 33) (status 20)) (segment (start 131.445 105.115) (end 131.445 102.34) (width 0.55) (layer F.Cu) (net 33) (status 10)) (segment (start 119.38 98.745) (end 119.38 96.0375) (width 0.55) (layer F.Cu) (net 34) (status 30)) (segment (start 119.675 98.45) (end 119.38 98.745) (width 0.55) (layer F.Cu) (net 34) (status 30)) (segment (start 122.795 98.45) (end 119.675 98.45) (width 0.55) (layer F.Cu) (net 34) (status 30)) (segment (start 115.99 98.745) (end 115.57 99.165) (width 0.55) (layer F.Cu) (net 34) (status 30)) (segment (start 119.38 98.745) (end 115.99 98.745) (width 0.55) (layer F.Cu) (net 34) (status 30)) (segment (start 112.5 99.165) (end 111.125 97.79) (width 0.55) (layer F.Cu) (net 34) (status 20)) (segment (start 115.57 99.165) (end 112.5 99.165) (width 0.55) (layer F.Cu) (net 34) (status 10)) (segment (start 142.5175 42.52) (end 143.51 43.5125) (width 0.15) (layer F.Cu) (net 35) (status 20)) (segment (start 142.5175 41.275) (end 142.5175 42.52) (width 0.15) (layer F.Cu) (net 35) (status 10)) (segment (start 146.105 43.5125) (end 147.6775 45.085) (width 0.15) (layer F.Cu) (net 35) (status 20)) (segment (start 143.51 43.5125) (end 146.105 43.5125) (width 0.15) (layer F.Cu) (net 35) (status 10)) (via (at 147.32 46.99) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 35)) (segment (start 147.6775 46.6325) (end 147.32 46.99) (width 0.15) (layer F.Cu) (net 35)) (segment (start 147.6775 45.085) (end 147.6775 46.6325) (width 0.15) (layer F.Cu) (net 35) (status 10)) (via (at 154.178 88.138002) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 35)) (segment (start 147.32 46.99) (end 147.32 81.280002) (width 0.15) (layer B.Cu) (net 35)) (segment (start 147.32 81.280002) (end 154.178 88.138002) (width 0.15) (layer B.Cu) (net 35)) (segment (start 200.66 101.346) (end 200.66 91.328724) (width 0.15) (layer F.Cu) (net 35)) (segment (start 200.66 91.328724) (end 197.261287 87.930011) (width 0.15) (layer F.Cu) (net 35)) (segment (start 197.261287 87.930011) (end 154.385991 87.930011) (width 0.15) (layer F.Cu) (net 35)) (segment (start 154.385991 87.930011) (end 154.178 88.138002) (width 0.15) (layer F.Cu) (net 35)) (segment (start 196.85 105.156) (end 200.66 101.346) (width 0.15) (layer F.Cu) (net 35)) (segment (start 196.85 118.11) (end 196.85 105.156) (width 0.15) (layer F.Cu) (net 35) (status 10)) (segment (start 196.85 118.11) (end 196.85 115.57) (width 0.35) (layer F.Cu) (net 35) (status 30)) (segment (start 143.51 45.3875) (end 143.51 47.3475) (width 0.15) (layer F.Cu) (net 36) (status 30)) (segment (start 140.97 45.3875) (end 140.97 47.3475) (width 0.15) (layer F.Cu) (net 37) (status 30)) (segment (start 111.76 59.69) (end 116.84 59.69) (width 0.55) (layer B.Cu) (net 38) (status 30)) (segment (start 116.84 59.69) (end 119.888 62.738) (width 0.55) (layer B.Cu) (net 38) (status 10)) (segment (start 119.888 62.738) (end 119.888 86.106) (width 0.55) (layer B.Cu) (net 38)) (segment (start 119.888 86.106) (end 119.888 92.202) (width 0.55) (layer B.Cu) (net 38)) (segment (start 119.888 86.106) (end 119.888 86.868) (width 0.55) (layer B.Cu) (net 38)) (segment (start 119.888 92.202) (end 119.38 92.71) (width 0.55) (layer B.Cu) (net 38)) (via (at 119.38 92.71) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 38)) (segment (start 119.38 92.71) (end 119.38 94.4625) (width 0.55) (layer F.Cu) (net 38) (status 20)) (segment (start 121.77 94.4625) (end 122.2525 93.98) (width 0.15) (layer F.Cu) (net 38) (status 30)) (segment (start 119.38 94.4625) (end 121.77 94.4625) (width 0.15) (layer F.Cu) (net 38) (status 30)) (segment (start 135.21899 94.90501) (end 144.272 85.852) (width 0.15) (layer F.Cu) (net 38)) (segment (start 123.17751 94.90501) (end 135.21899 94.90501) (width 0.15) (layer F.Cu) (net 38)) (segment (start 122.2525 93.98) (end 123.17751 94.90501) (width 0.15) (layer F.Cu) (net 38) (status 10)) (via (at 104.774986 52.705) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 38)) (segment (start 104.775 52.705) (end 104.774986 52.705) (width 0.55) (layer B.Cu) (net 38)) (segment (start 34.925 29.21) (end 34.925 38.1) (width 0.55) (layer F.Cu) (net 38) (status 10)) (segment (start 111.76 59.69) (end 104.775 52.705) (width 0.55) (layer B.Cu) (net 38) (status 10)) (segment (start 34.925 38.1) (end 49.53 52.705) (width 0.55) (layer F.Cu) (net 38)) (segment (start 49.53 52.705) (end 104.774986 52.705) (width 0.55) (layer F.Cu) (net 38)) (via (at 177.038 85.852) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 38)) (segment (start 144.272 85.852) (end 177.038 85.852) (width 0.15) (layer F.Cu) (net 38)) (segment (start 177.038 89.916) (end 177.038 85.852) (width 0.15) (layer B.Cu) (net 38)) (segment (start 181.61 94.488) (end 177.038 89.916) (width 0.15) (layer B.Cu) (net 38) (status 10)) (segment (start 181.61 95.25) (end 181.61 94.488) (width 0.15) (layer B.Cu) (net 38) (status 30)) (segment (start 181.61 95.25) (end 181.61 97.79) (width 0.35) (layer F.Cu) (net 38) (status 30)) (segment (start 190.66 39.37) (end 190.66 57.15) (width 0.8) (layer B.Cu) (net 39) (status 30)) (segment (start 171.61 39.37) (end 171.61 57.15) (width 0.8) (layer B.Cu) (net 40) (status 30)) (segment (start 152.56 57.15) (end 152.56 39.37) (width 0.8) (layer B.Cu) (net 41) (status 30)) (segment (start 86.52 57.15) (end 86.52 39.37) (width 0.8) (layer B.Cu) (net 42) (status 30)) (segment (start 188.468 38.862) (end 198.12 29.21) (width 0.2) (layer B.Cu) (net 43) (status 20)) (segment (start 198.12 74.93) (end 188.468 65.278) (width 0.2) (layer B.Cu) (net 43) (status 10)) (segment (start 188.468 65.278) (end 188.468 38.862) (width 0.2) (layer B.Cu) (net 43)) (via (at 184.912 88.646) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 43)) (segment (start 184.912 88.138) (end 184.912 88.646) (width 0.15) (layer B.Cu) (net 43)) (segment (start 198.12 74.93) (end 184.912 88.138) (width 0.15) (layer B.Cu) (net 43) (status 10)) (segment (start 184.662001 88.895999) (end 184.912 88.646) (width 0.15) (layer F.Cu) (net 43)) (segment (start 158.703987 94.016013) (end 158.703987 91.978294) (width 0.15) (layer F.Cu) (net 43)) (segment (start 150.275 102.445) (end 158.703987 94.016013) (width 0.15) (layer F.Cu) (net 43) (status 10)) (segment (start 158.703987 91.978294) (end 161.786282 88.895999) (width 0.15) (layer F.Cu) (net 43)) (segment (start 161.786282 88.895999) (end 184.662001 88.895999) (width 0.15) (layer F.Cu) (net 43)) (segment (start 195.58 29.21) (end 188.117989 36.672011) (width 0.2) (layer B.Cu) (net 44) (status 10)) (segment (start 188.117989 36.672011) (end 188.117989 67.467989) (width 0.2) (layer B.Cu) (net 44)) (segment (start 188.117989 67.467989) (end 195.58 74.93) (width 0.2) (layer B.Cu) (net 44) (status 20)) (segment (start 187.767978 69.657978) (end 187.767978 34.482022) (width 0.2) (layer B.Cu) (net 45)) (segment (start 193.04 74.93) (end 187.767978 69.657978) (width 0.2) (layer B.Cu) (net 45) (status 10)) (segment (start 187.767978 34.482022) (end 193.04 29.21) (width 0.2) (layer B.Cu) (net 45) (status 20)) (segment (start 179.07 29.21) (end 184.596022 34.736022) (width 0.2) (layer B.Cu) (net 46) (status 10)) (segment (start 184.596022 34.736022) (end 184.596022 69.403978) (width 0.2) (layer B.Cu) (net 46)) (segment (start 184.596022 69.403978) (end 179.07 74.93) (width 0.2) (layer B.Cu) (net 46) (status 20)) (via (at 165.608 88.405021) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 46)) (segment (start 179.07 74.943021) (end 179.07 74.93) (width 0.15) (layer B.Cu) (net 46) (status 30)) (segment (start 165.608 88.405021) (end 179.07 74.943021) (width 0.15) (layer B.Cu) (net 46) (status 20)) (segment (start 158.403976 91.854026) (end 161.852981 88.405021) (width 0.15) (layer F.Cu) (net 46)) (segment (start 149.625 102.445) (end 149.625 101.42) (width 0.15) (layer F.Cu) (net 46) (status 10)) (segment (start 149.625 101.42) (end 149.906989 101.138011) (width 0.15) (layer F.Cu) (net 46)) (segment (start 149.906989 101.138011) (end 150.746268 101.138011) (width 0.15) (layer F.Cu) (net 46)) (segment (start 150.746268 101.138011) (end 158.403976 93.480303) (width 0.15) (layer F.Cu) (net 46)) (segment (start 158.403976 93.480303) (end 158.403976 91.854026) (width 0.15) (layer F.Cu) (net 46)) (segment (start 161.852981 88.405021) (end 165.608 88.405021) (width 0.15) (layer F.Cu) (net 46)) (segment (start 184.246011 36.926011) (end 176.53 29.21) (width 0.2) (layer B.Cu) (net 47) (status 20)) (segment (start 176.53 74.93) (end 184.246011 67.213989) (width 0.2) (layer B.Cu) (net 47) (status 10)) (segment (start 184.246011 67.213989) (end 184.246011 36.926011) (width 0.2) (layer B.Cu) (net 47)) (segment (start 183.896 65.024) (end 173.99 74.93) (width 0.2) (layer B.Cu) (net 48) (status 20)) (segment (start 183.896 39.116) (end 183.896 65.024) (width 0.2) (layer B.Cu) (net 48)) (segment (start 173.99 29.21) (end 183.896 39.116) (width 0.2) (layer B.Cu) (net 48) (status 10)) (segment (start 160.02 74.93) (end 165.292021 69.657979) (width 0.2) (layer B.Cu) (net 49) (status 10)) (segment (start 165.292021 69.657979) (end 165.292021 34.482021) (width 0.2) (layer B.Cu) (net 49)) (segment (start 165.292021 34.482021) (end 160.02 29.21) (width 0.2) (layer B.Cu) (net 49) (status 20)) (via (at 159.643445 88.9) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 49)) (segment (start 160.02 88.523445) (end 159.643445 88.9) (width 0.15) (layer B.Cu) (net 49)) (segment (start 160.02 74.93) (end 160.02 88.523445) (width 0.15) (layer B.Cu) (net 49) (status 10)) (segment (start 158.103965 93.356035) (end 158.103965 90.43948) (width 0.15) (layer F.Cu) (net 49)) (segment (start 148.975 102.445) (end 148.975 101.215) (width 0.15) (layer F.Cu) (net 49) (status 10)) (segment (start 149.352 100.838) (end 150.622 100.838) (width 0.15) (layer F.Cu) (net 49)) (segment (start 158.103965 90.43948) (end 159.643445 88.9) (width 0.15) (layer F.Cu) (net 49)) (segment (start 150.622 100.838) (end 158.103965 93.356035) (width 0.15) (layer F.Cu) (net 49)) (segment (start 148.975 101.215) (end 149.352 100.838) (width 0.15) (layer F.Cu) (net 49)) (segment (start 160.394991 73.779999) (end 158.630001 73.779999) (width 0.2) (layer B.Cu) (net 50)) (segment (start 158.630001 73.779999) (end 157.48 74.93) (width 0.2) (layer B.Cu) (net 50) (status 20)) (segment (start 157.48 29.21) (end 164.94201 36.67201) (width 0.2) (layer B.Cu) (net 50) (status 10)) (segment (start 164.94201 36.67201) (end 164.94201 69.23298) (width 0.2) (layer B.Cu) (net 50)) (segment (start 164.94201 69.23298) (end 160.394991 73.779999) (width 0.2) (layer B.Cu) (net 50)) (segment (start 156.440012 73.429988) (end 154.94 74.93) (width 0.2) (layer B.Cu) (net 51) (status 20)) (segment (start 160.250012 73.429988) (end 156.440012 73.429988) (width 0.2) (layer B.Cu) (net 51)) (segment (start 164.591999 69.088001) (end 160.250012 73.429988) (width 0.2) (layer B.Cu) (net 51)) (segment (start 164.591999 38.861999) (end 164.591999 69.088001) (width 0.2) (layer B.Cu) (net 51)) (segment (start 154.94 29.21) (end 164.591999 38.861999) (width 0.2) (layer B.Cu) (net 51) (status 10)) (segment (start 92.71 73.66) (end 93.98 74.93) (width 0.2) (layer B.Cu) (net 52) (status 20)) (segment (start 90.17 73.66) (end 92.71 73.66) (width 0.2) (layer B.Cu) (net 52)) (segment (start 83.82 67.31) (end 90.17 73.66) (width 0.2) (layer B.Cu) (net 52)) (segment (start 93.98 29.21) (end 83.82 39.37) (width 0.2) (layer B.Cu) (net 52) (status 10)) (segment (start 83.82 39.37) (end 83.82 67.31) (width 0.2) (layer B.Cu) (net 52)) (via (at 93.979998 89.535) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 52)) (segment (start 93.98 74.93) (end 93.98 89.534998) (width 0.15) (layer B.Cu) (net 52) (status 10)) (segment (start 147.025 102.445) (end 147.025 104.945722) (width 0.15) (layer F.Cu) (net 52) (status 10)) (segment (start 93.98 89.534998) (end 93.979998 89.535) (width 0.15) (layer B.Cu) (net 52)) (segment (start 147.025 104.945722) (end 144.436699 107.534022) (width 0.15) (layer F.Cu) (net 52)) (segment (start 144.436699 107.534022) (end 111.97902 107.534022) (width 0.15) (layer F.Cu) (net 52)) (segment (start 111.97902 107.534022) (end 93.979998 89.535) (width 0.15) (layer F.Cu) (net 52)) (segment (start 83.46999 37.18001) (end 83.46999 67.45498) (width 0.2) (layer B.Cu) (net 53)) (segment (start 91.44 29.21) (end 83.46999 37.18001) (width 0.2) (layer B.Cu) (net 53) (status 10)) (segment (start 83.46999 67.45498) (end 90.94501 74.93) (width 0.2) (layer B.Cu) (net 53) (status 20)) (segment (start 90.94501 74.93) (end 91.44 74.93) (width 0.2) (layer B.Cu) (net 53) (status 30)) (segment (start 88.9 29.21) (end 83.11998 34.99002) (width 0.2) (layer B.Cu) (net 54) (status 10)) (segment (start 83.11998 34.99002) (end 83.11998 69.14998) (width 0.2) (layer B.Cu) (net 54)) (segment (start 83.11998 69.14998) (end 88.9 74.93) (width 0.2) (layer B.Cu) (net 54) (status 20)) (segment (start 67.47 57.15) (end 67.47 39.37) (width 0.8) (layer B.Cu) (net 55) (status 30)) (segment (start 48.42 39.37) (end 48.42 57.15) (width 0.8) (layer B.Cu) (net 56) (status 30)) (segment (start 64.77 64.77) (end 74.93 74.93) (width 0.2) (layer B.Cu) (net 57) (status 20)) (segment (start 74.93 29.21) (end 64.77 39.37) (width 0.2) (layer B.Cu) (net 57) (status 10)) (segment (start 64.77 39.37) (end 64.77 64.77) (width 0.2) (layer B.Cu) (net 57)) (via (at 88.900002 88.9) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 57)) (segment (start 74.93 74.93) (end 75.830001 75.829999) (width 0.15) (layer B.Cu) (net 57) (status 10)) (segment (start 146.375 105.171444) (end 144.566432 106.980011) (width 0.15) (layer F.Cu) (net 57)) (segment (start 144.566432 106.980011) (end 112.738289 106.980011) (width 0.15) (layer F.Cu) (net 57)) (segment (start 75.830001 75.829999) (end 88.900002 88.9) (width 0.15) (layer B.Cu) (net 57)) (segment (start 146.375 102.445) (end 146.375 105.171444) (width 0.15) (layer F.Cu) (net 57) (status 10)) (segment (start 112.738289 106.980011) (end 94.658278 88.9) (width 0.15) (layer F.Cu) (net 57)) (segment (start 94.658278 88.9) (end 88.900002 88.9) (width 0.15) (layer F.Cu) (net 57)) (segment (start 72.39 29.21) (end 64.41999 37.18001) (width 0.2) (layer B.Cu) (net 58) (status 10)) (segment (start 64.41999 37.18001) (end 64.41999 66.95999) (width 0.2) (layer B.Cu) (net 58)) (segment (start 64.41999 66.95999) (end 72.39 74.93) (width 0.2) (layer B.Cu) (net 58) (status 20)) (segment (start 64.06998 69.14998) (end 69.85 74.93) (width 0.2) (layer B.Cu) (net 59) (status 20)) (segment (start 69.85 29.21) (end 64.06998 34.99002) (width 0.2) (layer B.Cu) (net 59) (status 10)) (segment (start 64.06998 34.99002) (end 64.06998 69.14998) (width 0.2) (layer B.Cu) (net 59)) (via (at 69.087998 88.138) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 60)) (segment (start 113.141281 106.68) (end 94.599281 88.138) (width 0.15) (layer F.Cu) (net 60)) (segment (start 56.779999 75.830001) (end 69.087998 88.138) (width 0.15) (layer B.Cu) (net 60)) (segment (start 145.725 102.445) (end 145.725 105.227) (width 0.15) (layer F.Cu) (net 60) (status 10)) (segment (start 55.88 74.93) (end 56.779999 75.830001) (width 0.15) (layer B.Cu) (net 60) (status 10)) (segment (start 145.725 105.227) (end 144.272 106.68) (width 0.15) (layer F.Cu) (net 60)) (segment (start 144.272 106.68) (end 113.141281 106.68) (width 0.15) (layer F.Cu) (net 60)) (segment (start 94.599281 88.138) (end 69.087998 88.138) (width 0.15) (layer F.Cu) (net 60)) (segment (start 55.88 29.21) (end 53.34 31.75) (width 0.2) (layer B.Cu) (net 60) (status 10)) (segment (start 53.34 31.75) (end 51.294988 31.75) (width 0.2) (layer B.Cu) (net 60)) (segment (start 51.294988 31.75) (end 45.72 37.324988) (width 0.2) (layer B.Cu) (net 60)) (segment (start 45.72 37.324988) (end 45.72 64.77) (width 0.2) (layer B.Cu) (net 60)) (segment (start 45.72 64.77) (end 55.88 74.93) (width 0.2) (layer B.Cu) (net 60) (status 20)) (segment (start 53.34 29.21) (end 45.369989 37.180011) (width 0.2) (layer B.Cu) (net 61) (status 10)) (segment (start 45.369989 37.180011) (end 45.36999 64.91498) (width 0.2) (layer B.Cu) (net 61)) (segment (start 45.36999 64.91498) (end 53.34 72.88499) (width 0.2) (layer B.Cu) (net 61)) (segment (start 53.34 72.88499) (end 53.34 74.93) (width 0.2) (layer B.Cu) (net 61) (status 20)) (segment (start 50.8 29.21) (end 45.01998 34.99002) (width 0.2) (layer B.Cu) (net 62) (status 10)) (segment (start 50.8 70.83998) (end 50.8 74.93) (width 0.2) (layer B.Cu) (net 62) (status 20)) (segment (start 45.01998 34.99002) (end 45.01998 65.05996) (width 0.2) (layer B.Cu) (net 62)) (segment (start 45.01998 65.05996) (end 50.8 70.83998) (width 0.2) (layer B.Cu) (net 62)) (segment (start 184.15 117.856) (end 184.15 118.11) (width 0.15) (layer B.Cu) (net 63) (status 30)) (via (at 144.272 105.664) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 63)) (segment (start 142.475 103.867) (end 144.272 105.664) (width 0.15) (layer F.Cu) (net 63)) (segment (start 142.475 102.445) (end 142.475 103.867) (width 0.15) (layer F.Cu) (net 63) (status 10)) (via (at 151.892 105.918) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 63)) (segment (start 144.526 105.918) (end 151.892 105.918) (width 0.15) (layer B.Cu) (net 63)) (segment (start 144.272 105.664) (end 144.526 105.918) (width 0.15) (layer B.Cu) (net 63)) (segment (start 156.464 104.648) (end 155.194 105.918) (width 0.15) (layer F.Cu) (net 63)) (segment (start 156.464 102.969) (end 156.464 104.648) (width 0.15) (layer F.Cu) (net 63)) (segment (start 155.194 105.918) (end 151.892 105.918) (width 0.15) (layer F.Cu) (net 63)) (segment (start 157.579 101.854) (end 156.464 102.969) (width 0.15) (layer F.Cu) (net 63) (status 10)) (segment (start 158.0915 101.854) (end 157.579 101.854) (width 0.15) (layer F.Cu) (net 63) (status 30)) (via (at 139.7 95.504) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 63)) (segment (start 142.475 102.445) (end 142.475 101.246502) (width 0.15) (layer F.Cu) (net 63) (status 10)) (segment (start 142.475 101.246502) (end 138.589998 97.3615) (width 0.15) (layer F.Cu) (net 63)) (segment (start 138.589998 97.3615) (end 138.589998 96.614002) (width 0.15) (layer F.Cu) (net 63)) (segment (start 138.589998 96.614002) (end 139.7 95.504) (width 0.15) (layer F.Cu) (net 63)) (via (at 120.90401 49.53) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 63)) (segment (start 117.72901 46.355) (end 120.90401 49.53) (width 0.15) (layer F.Cu) (net 63) (status 10)) (segment (start 116.905 46.355) (end 117.72901 46.355) (width 0.15) (layer F.Cu) (net 63) (status 30)) (segment (start 124.313989 61.61785) (end 124.313989 56.241984) (width 0.15) (layer B.Cu) (net 63)) (segment (start 132.715 70.018861) (end 124.313989 61.61785) (width 0.15) (layer B.Cu) (net 63)) (segment (start 120.90401 52.832005) (end 120.90401 49.53) (width 0.15) (layer B.Cu) (net 63)) (segment (start 132.715 88.519) (end 132.715 70.018861) (width 0.15) (layer B.Cu) (net 63)) (segment (start 124.313989 56.241984) (end 120.90401 52.832005) (width 0.15) (layer B.Cu) (net 63)) (segment (start 139.7 95.504) (end 132.715 88.519) (width 0.15) (layer B.Cu) (net 63)) (segment (start 162.209397 90.17) (end 159.904031 92.475366) (width 0.15) (layer F.Cu) (net 63)) (segment (start 185.42 93.98) (end 181.61 90.17) (width 0.15) (layer F.Cu) (net 63)) (segment (start 158.0915 101.154) (end 158.0915 101.854) (width 0.15) (layer F.Cu) (net 63) (status 30)) (segment (start 181.61 90.17) (end 162.209397 90.17) (width 0.15) (layer F.Cu) (net 63)) (segment (start 185.42 98.679) (end 185.42 93.98) (width 0.15) (layer F.Cu) (net 63)) (segment (start 159.904031 99.341469) (end 158.0915 101.154) (width 0.15) (layer F.Cu) (net 63) (status 20)) (segment (start 184.15 99.949) (end 185.42 98.679) (width 0.15) (layer F.Cu) (net 63)) (segment (start 159.904031 92.475366) (end 159.904031 99.341469) (width 0.15) (layer F.Cu) (net 63)) (segment (start 184.15 118.11) (end 184.15 99.949) (width 0.15) (layer F.Cu) (net 63) (status 10)) (segment (start 184.15 115.57) (end 184.15 118.11) (width 0.35) (layer F.Cu) (net 63) (status 30)) (via (at 144.78 105.156) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 64)) (segment (start 143.125 103.501) (end 144.78 105.156) (width 0.15) (layer F.Cu) (net 64)) (segment (start 143.125 102.445) (end 143.125 103.501) (width 0.15) (layer F.Cu) (net 64) (status 10)) (via (at 153.924008 105.156) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 64)) (segment (start 144.78 105.156) (end 153.924008 105.156) (width 0.15) (layer B.Cu) (net 64)) (segment (start 154.2815 105.156) (end 155.5515 103.886) (width 0.15) (layer F.Cu) (net 64) (status 20)) (segment (start 153.924008 105.156) (end 154.2815 105.156) (width 0.15) (layer F.Cu) (net 64)) (segment (start 187.205001 93.98) (end 187.96 94.734999) (width 0.15) (layer F.Cu) (net 64)) (segment (start 181.783988 89.869989) (end 185.893999 93.98) (width 0.15) (layer F.Cu) (net 64)) (segment (start 159.60402 92.351098) (end 162.085129 89.869989) (width 0.15) (layer F.Cu) (net 64)) (segment (start 159.60402 98.71398) (end 159.60402 92.351098) (width 0.15) (layer F.Cu) (net 64)) (segment (start 162.085129 89.869989) (end 181.783988 89.869989) (width 0.15) (layer F.Cu) (net 64)) (segment (start 185.893999 93.98) (end 187.205001 93.98) (width 0.15) (layer F.Cu) (net 64)) (segment (start 155.5515 102.7665) (end 159.60402 98.71398) (width 0.15) (layer F.Cu) (net 64)) (segment (start 155.5515 103.886) (end 155.5515 102.7665) (width 0.15) (layer F.Cu) (net 64) (status 10)) (segment (start 143.125 101.215) (end 139.065 97.155) (width 0.15) (layer F.Cu) (net 64)) (segment (start 139.065 97.155) (end 139.065 96.901) (width 0.15) (layer F.Cu) (net 64)) (segment (start 143.125 102.445) (end 143.125 101.215) (width 0.15) (layer F.Cu) (net 64) (status 10)) (via (at 139.065 96.901) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 64)) (via (at 120.429006 50.292) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 64)) (segment (start 120.396 50.292) (end 120.429006 50.292) (width 0.15) (layer F.Cu) (net 64)) (segment (start 117.729 47.625) (end 120.396 50.292) (width 0.15) (layer F.Cu) (net 64) (status 10)) (segment (start 116.905 47.625) (end 117.729 47.625) (width 0.15) (layer F.Cu) (net 64) (status 30)) (segment (start 123.995001 56.601279) (end 120.429006 53.035284) (width 0.15) (layer B.Cu) (net 64)) (segment (start 123.995001 61.72314) (end 123.995001 56.601279) (width 0.15) (layer B.Cu) (net 64)) (segment (start 132.08 69.808139) (end 123.995001 61.72314) (width 0.15) (layer B.Cu) (net 64)) (segment (start 120.429006 53.035284) (end 120.429006 50.292) (width 0.15) (layer B.Cu) (net 64)) (segment (start 132.08 89.916) (end 132.08 69.808139) (width 0.15) (layer B.Cu) (net 64)) (segment (start 139.065 96.901) (end 132.08 89.916) (width 0.15) (layer B.Cu) (net 64)) (segment (start 186.69 100.33) (end 187.96 99.06) (width 0.15) (layer F.Cu) (net 64)) (segment (start 186.69 118.11) (end 186.69 100.33) (width 0.15) (layer F.Cu) (net 64) (status 10)) (segment (start 187.96 94.734999) (end 187.96 99.06) (width 0.15) (layer F.Cu) (net 64)) (segment (start 186.69 115.57) (end 186.69 118.11) (width 0.35) (layer F.Cu) (net 64) (status 30)) (segment (start 139.7 40.2825) (end 140.6925 41.275) (width 0.15) (layer F.Cu) (net 65) (status 20)) (segment (start 139.7 38.445) (end 139.7 40.2825) (width 0.15) (layer F.Cu) (net 65) (status 10)) (segment (start 141.719999 39.870001) (end 144.637499 39.870001) (width 0.15) (layer F.Cu) (net 66) (status 20)) (segment (start 141.4 39.550002) (end 141.719999 39.870001) (width 0.15) (layer F.Cu) (net 66) (status 10)) (segment (start 144.637499 39.870001) (end 145.1375 39.37) (width 0.15) (layer F.Cu) (net 66) (status 30)) (segment (start 141.4 38.445) (end 141.4 39.550002) (width 0.15) (layer F.Cu) (net 66) (status 30)) (segment (start 144.032512 40.170012) (end 145.1375 41.275) (width 0.15) (layer F.Cu) (net 67) (status 20)) (segment (start 140.925012 40.170012) (end 144.032512 40.170012) (width 0.15) (layer F.Cu) (net 67)) (segment (start 140.55 39.795) (end 140.925012 40.170012) (width 0.15) (layer F.Cu) (net 67)) (segment (start 140.55 38.445) (end 140.55 39.795) (width 0.15) (layer F.Cu) (net 67) (status 10)) (segment (start 143.699999 110.745001) (end 139.597501 110.745001) (width 0.15) (layer F.Cu) (net 68)) (segment (start 143.775 110.67) (end 143.699999 110.745001) (width 0.15) (layer F.Cu) (net 68)) (segment (start 139.597501 110.745001) (end 138.0725 109.22) (width 0.15) (layer F.Cu) (net 68) (status 20)) (segment (start 143.775 109.645) (end 143.775 110.67) (width 0.15) (layer F.Cu) (net 68) (status 10)) (segment (start 199.39 90.482998) (end 199.39 95.25) (width 0.15) (layer F.Cu) (net 68) (status 20)) (segment (start 161.836593 89.269967) (end 198.176969 89.269967) (width 0.15) (layer F.Cu) (net 68)) (segment (start 159.003998 92.102562) (end 161.836593 89.269967) (width 0.15) (layer F.Cu) (net 68)) (segment (start 146.275002 107.95) (end 159.003998 95.221004) (width 0.15) (layer F.Cu) (net 68)) (segment (start 143.775 109.645) (end 143.775 108.62) (width 0.15) (layer F.Cu) (net 68) (status 10)) (segment (start 143.775 108.62) (end 144.445 107.95) (width 0.15) (layer F.Cu) (net 68)) (segment (start 198.176969 89.269967) (end 199.39 90.482998) (width 0.15) (layer F.Cu) (net 68)) (segment (start 144.445 107.95) (end 146.275002 107.95) (width 0.15) (layer F.Cu) (net 68)) (segment (start 159.003998 95.221004) (end 159.003998 92.102562) (width 0.15) (layer F.Cu) (net 68)) (segment (start 199.39 95.25) (end 199.39 97.79) (width 0.35) (layer F.Cu) (net 68) (status 30)) (via (at 148.336 87.63) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 69)) (segment (start 201.93 95.25) (end 201.93 92.174445) (width 0.15) (layer F.Cu) (net 69) (status 10)) (segment (start 201.93 92.174445) (end 197.385555 87.63) (width 0.15) (layer F.Cu) (net 69)) (segment (start 197.385555 87.63) (end 148.336 87.63) (width 0.15) (layer F.Cu) (net 69)) (segment (start 131.1675 48.617488) (end 131.826012 49.276) (width 0.15) (layer F.Cu) (net 69) (status 10)) (segment (start 144.272 83.566) (end 144.272 61.721988) (width 0.15) (layer B.Cu) (net 69)) (via (at 131.826012 49.276) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 69)) (segment (start 144.272 61.721988) (end 131.826012 49.276) (width 0.15) (layer B.Cu) (net 69)) (segment (start 131.1675 48.26) (end 131.1675 48.617488) (width 0.15) (layer F.Cu) (net 69) (status 30)) (segment (start 148.336 87.63) (end 144.272 83.566) (width 0.15) (layer B.Cu) (net 69)) (segment (start 201.93 95.25) (end 201.93 97.79) (width 0.35) (layer F.Cu) (net 69) (status 30)) (segment (start 132.08 59.69) (end 137.16 59.69) (width 2) (layer F.Cu) (net 70) (status 30)) (segment (start 136.63499 44.67499) (end 137.16 45.2) (width 0.15) (layer F.Cu) (net 70) (status 20)) (segment (start 122.26501 44.67499) (end 136.63499 44.67499) (width 0.15) (layer F.Cu) (net 70)) (segment (start 121.855 45.085) (end 122.26501 44.67499) (width 0.15) (layer F.Cu) (net 70) (status 10)) (segment (start 137.16 51.435) (end 137.16 52.07) (width 2) (layer F.Cu) (net 70)) (segment (start 136.525 52.07) (end 137.16 51.435) (width 2) (layer F.Cu) (net 70)) (segment (start 107.559906 47.234906) (end 112.395 52.07) (width 2) (layer F.Cu) (net 70)) (segment (start 49.139906 47.234906) (end 107.559906 47.234906) (width 2) (layer F.Cu) (net 70)) (segment (start 40.005 38.1) (end 49.139906 47.234906) (width 2) (layer F.Cu) (net 70)) (segment (start 112.395 52.07) (end 136.525 52.07) (width 2) (layer F.Cu) (net 70)) (segment (start 40.005 29.21) (end 40.005 38.1) (width 2) (layer F.Cu) (net 70) (status 10)) (segment (start 195.326 94.234) (end 195.326 90.805) (width 0.15) (layer F.Cu) (net 71)) (segment (start 194.31 95.25) (end 195.326 94.234) (width 0.15) (layer F.Cu) (net 71) (status 10)) (via (at 195.326 90.805) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 71)) (segment (start 194.31 95.25) (end 194.31 97.79) (width 0.35) (layer F.Cu) (net 71) (status 30)) (segment (start 195.326 90.228996) (end 195.326 90.805) (width 0.15) (layer B.Cu) (net 71)) (segment (start 195.859998 89.694998) (end 195.326 90.228996) (width 0.15) (layer B.Cu) (net 71)) (segment (start 196.082449 89.694998) (end 195.859998 89.694998) (width 0.15) (layer B.Cu) (net 71)) (segment (start 204.539956 81.237491) (end 196.082449 89.694998) (width 0.15) (layer B.Cu) (net 71)) (segment (start 204.539956 71.050044) (end 204.539956 81.237491) (width 0.15) (layer B.Cu) (net 71)) (segment (start 210.82 64.77) (end 204.539956 71.050044) (width 0.15) (layer B.Cu) (net 71)) (segment (start 195.257996 90.17) (end 196.215004 90.17) (width 0.15) (layer F.Cu) (net 72)) (segment (start 191.77 93.657996) (end 195.257996 90.17) (width 0.15) (layer F.Cu) (net 72)) (segment (start 191.77 95.25) (end 191.77 93.657996) (width 0.15) (layer F.Cu) (net 72) (status 10)) (via (at 196.215004 90.17) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 72)) (segment (start 191.77 95.25) (end 191.77 97.79) (width 0.35) (layer F.Cu) (net 72) (status 30)) (segment (start 204.839967 73.290033) (end 204.839967 81.545037) (width 0.15) (layer B.Cu) (net 72)) (segment (start 204.839967 81.545037) (end 196.215004 90.17) (width 0.15) (layer B.Cu) (net 72)) (segment (start 210.82 67.31) (end 204.839967 73.290033) (width 0.15) (layer B.Cu) (net 72)) (via (at 197.866 90.17) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 73)) (segment (start 189.23 95.25) (end 194.785001 89.694999) (width 0.15) (layer F.Cu) (net 73) (status 10)) (segment (start 194.785001 89.694999) (end 197.390999 89.694999) (width 0.15) (layer F.Cu) (net 73)) (segment (start 197.390999 89.694999) (end 197.866 90.17) (width 0.15) (layer F.Cu) (net 73)) (segment (start 189.23 95.25) (end 189.23 97.79) (width 0.35) (layer F.Cu) (net 73) (status 30)) (segment (start 205.139978 82.896022) (end 197.866 90.17) (width 0.15) (layer B.Cu) (net 73)) (segment (start 205.139978 75.530022) (end 205.139978 82.896022) (width 0.15) (layer B.Cu) (net 73)) (segment (start 210.82 69.85) (end 205.139978 75.530022) (width 0.15) (layer B.Cu) (net 73)) (segment (start 182.5225 93.6225) (end 182.5225 92.71) (width 0.15) (layer F.Cu) (net 74) (status 20)) (segment (start 184.15 95.25) (end 182.5225 93.6225) (width 0.15) (layer F.Cu) (net 74) (status 10)) (segment (start 184.15 92.836988) (end 184.786377 92.200611) (width 0.15) (layer B.Cu) (net 74)) (segment (start 182.155744 89.569978) (end 184.786377 92.200611) (width 0.15) (layer F.Cu) (net 74)) (segment (start 145.075 108.62) (end 145.444989 108.250011) (width 0.15) (layer F.Cu) (net 74)) (segment (start 159.304009 92.22683) (end 161.960861 89.569978) (width 0.15) (layer F.Cu) (net 74)) (segment (start 159.304009 95.345272) (end 159.304009 92.22683) (width 0.15) (layer F.Cu) (net 74)) (segment (start 184.15 95.25) (end 184.15 92.836988) (width 0.15) (layer B.Cu) (net 74) (status 10)) (segment (start 146.39927 108.250011) (end 159.304009 95.345272) (width 0.15) (layer F.Cu) (net 74)) (segment (start 145.444989 108.250011) (end 146.39927 108.250011) (width 0.15) (layer F.Cu) (net 74)) (segment (start 161.960861 89.569978) (end 182.155744 89.569978) (width 0.15) (layer F.Cu) (net 74)) (via (at 184.786377 92.200611) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 74)) (segment (start 145.075 109.645) (end 145.075 108.62) (width 0.15) (layer F.Cu) (net 74) (status 10)) (segment (start 184.15 95.25) (end 184.15 97.79) (width 0.35) (layer F.Cu) (net 74) (status 30)) (via (at 137.668 27.178) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 75) (tstamp 6066C674)) (via (at 139.7 27.178) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 75) (tstamp 6066C68F)) (via (at 141.732 27.178) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 75) (tstamp 6066C677)) (via (at 143.51 27.178) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 75) (tstamp 6066C767)) (via (at 135.89 27.178) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 75) (tstamp 6066C956)) (via (at 135.89 28.956) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 75) (tstamp 6066C5E1)) (via (at 135.89 30.988) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 75) (tstamp 6066D0B5)) (via (at 143.51 30.988) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 75) (tstamp 6066C770)) (via (at 143.51 33.02) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 75) (tstamp 6066D0C1)) (via (at 143.51 28.956) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 75) (tstamp 6066C662)) (via (at 135.89 33.02) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 75) (tstamp 6066C758)) (via (at 135.89 35.306) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 75) (tstamp 6066CB54)) (via (at 143.51 35.306) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 75) (tstamp 6066C72B)) (via (at 138.684 34.036) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 75) (tstamp 6066C668) (status 30)) (via (at 137.668 34.036) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 75) (tstamp 6066C635) (status 30)) (via (at 139.7 34.036) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 75) (tstamp 6066CB57) (status 30)) (via (at 140.716 34.036) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 75) (tstamp 6066C953) (status 30)) (via (at 141.732 34.036) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 75) (tstamp 6066C773) (status 30)) (via (at 138.684 33.02) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 75) (tstamp 6066C725) (status 30)) (via (at 137.668 33.02) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 75) (tstamp 6066D148) (status 30)) (via (at 139.7 33.02) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 75) (tstamp 6066C66B) (status 30)) (via (at 140.716 33.02) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 75) (tstamp 6066C61D) (status 30)) (via (at 141.732 33.02) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 75) (tstamp 6066D223) (status 30)) (via (at 138.684 32.004) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 75) (tstamp 6066D0BE) (status 30)) (via (at 137.668 32.004) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 75) (tstamp 6066C76D) (status 30)) (via (at 139.7 32.004) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 75) (tstamp 6066C671) (status 30)) (via (at 140.716 32.004) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 75) (tstamp 6066D727) (status 30)) (via (at 141.732 32.004) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 75) (tstamp 6066D0C4) (status 30)) (via (at 138.684 30.988) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 75) (tstamp 6066C76A) (status 30)) (via (at 137.668 30.988) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 75) (tstamp 6066C71C) (status 30)) (via (at 139.7 30.988) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 75) (tstamp 6066D9B8) (status 30)) (via (at 140.716 30.988) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 75) (tstamp 6066C66E) (status 30)) (via (at 141.732 30.988) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 75) (tstamp 6066C8AE) (status 30)) (via (at 138.684 29.972) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 75) (tstamp 6066D0B2) (status 30)) (via (at 137.668 29.972) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 75) (tstamp 6066C6D7) (status 30)) (via (at 139.7 29.972) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 75) (tstamp 6066CB5A) (status 30)) (via (at 140.716 29.972) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 75) (tstamp 6066C71F) (status 30)) (via (at 141.732 29.972) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 75) (tstamp 6066C665) (status 30)) (via (at 138.684 28.956) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 75) (tstamp 6066C704) (status 30)) (via (at 140.716 28.956) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 75) (tstamp 6066C5DE) (status 30)) (via (at 141.732 28.956) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 75) (tstamp 6066C5DB) (status 30)) (via (at 139.7 28.956) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 75) (tstamp 6066C5F9) (status 30)) (via (at 137.668 28.956) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 75) (tstamp 6066C6BF) (status 30)) (segment (start 135.785 35.56) (end 139.7 31.645) (width 2) (layer F.Cu) (net 75) (status 20)) (segment (start 126.545 35.56) (end 135.785 35.56) (width 2) (layer F.Cu) (net 75) (status 10)) (segment (start 122.885 35.56) (end 126.545 35.56) (width 2) (layer F.Cu) (net 75) (status 30)) (segment (start 29.845 101.6) (end 29.845 104.14) (width 0.55) (layer F.Cu) (net 75) (status 30)) (segment (start 33.655 97.79) (end 29.845 101.6) (width 0.55) (layer F.Cu) (net 75)) (segment (start 33.649999 30.400001) (end 33.655 30.405002) (width 0.55) (layer F.Cu) (net 75)) (segment (start 33.649999 28.019999) (end 33.649999 30.400001) (width 0.55) (layer F.Cu) (net 75)) (segment (start 33.655 28.014998) (end 33.649999 28.019999) (width 0.55) (layer F.Cu) (net 75)) (segment (start 33.655 27.305) (end 33.655 28.014998) (width 0.55) (layer F.Cu) (net 75)) (segment (start 34.29 26.67) (end 33.655 27.305) (width 0.55) (layer F.Cu) (net 75)) (segment (start 113.995 26.67) (end 34.29 26.67) (width 0.55) (layer F.Cu) (net 75)) (segment (start 122.885 35.56) (end 113.995 26.67) (width 0.55) (layer F.Cu) (net 75)) (segment (start 36.195 96.52) (end 33.655 96.52) (width 0.55) (layer F.Cu) (net 75)) (segment (start 33.655 96.52) (end 33.655 97.79) (width 0.55) (layer F.Cu) (net 75)) (segment (start 33.655 30.405002) (end 33.655 96.52) (width 0.55) (layer F.Cu) (net 75)) (segment (start 34.72 97.995) (end 36.195 96.52) (width 0.55) (layer F.Cu) (net 75)) (segment (start 34.72 100.33) (end 34.72 97.995) (width 0.55) (layer F.Cu) (net 75)) (segment (start 124.1275 93.98) (end 126.0875 93.98) (width 0.15) (layer F.Cu) (net 76) (status 30)) (segment (start 144.68 113.665) (end 143.51 113.665) (width 0.15) (layer F.Cu) (net 77) (status 20)) (segment (start 147.675 110.67) (end 144.68 113.665) (width 0.15) (layer F.Cu) (net 77)) (segment (start 147.675 109.645) (end 147.675 110.67) (width 0.15) (layer F.Cu) (net 77) (status 10)) (segment (start 145.105001 112.589999) (end 142.045001 112.589999) (width 0.15) (layer F.Cu) (net 78)) (segment (start 142.045001 112.589999) (end 140.97 113.665) (width 0.15) (layer F.Cu) (net 78) (status 20)) (segment (start 147.025 110.67) (end 145.105001 112.589999) (width 0.15) (layer F.Cu) (net 78)) (segment (start 147.025 109.645) (end 147.025 110.67) (width 0.15) (layer F.Cu) (net 78) (status 10)) (segment (start 146.375 110.67) (end 145.238989 111.806011) (width 0.15) (layer F.Cu) (net 79)) (segment (start 146.375 109.645) (end 146.375 110.67) (width 0.15) (layer F.Cu) (net 79) (status 10)) (segment (start 145.238989 111.806011) (end 140.288989 111.806011) (width 0.15) (layer F.Cu) (net 79)) (segment (start 140.288989 111.806011) (end 138.43 113.665) (width 0.15) (layer F.Cu) (net 79) (status 20)) (segment (start 144.889 111.506) (end 138.049 111.506) (width 0.15) (layer F.Cu) (net 80)) (segment (start 145.725 109.645) (end 145.725 110.67) (width 0.15) (layer F.Cu) (net 80) (status 10)) (segment (start 145.725 110.67) (end 144.889 111.506) (width 0.15) (layer F.Cu) (net 80)) (segment (start 138.049 111.506) (end 135.89 113.665) (width 0.15) (layer F.Cu) (net 80) (status 20)) (segment (start 152.19 109.645) (end 156.21 113.665) (width 0.15) (layer F.Cu) (net 81) (status 20)) (segment (start 150.275 109.645) (end 152.19 109.645) (width 0.15) (layer F.Cu) (net 81) (status 10)) (segment (start 152.789998 113.665) (end 153.67 113.665) (width 0.15) (layer F.Cu) (net 82) (status 20)) (segment (start 149.625 110.500002) (end 152.789998 113.665) (width 0.15) (layer F.Cu) (net 82) (status 10)) (segment (start 149.625 109.645) (end 149.625 110.500002) (width 0.15) (layer F.Cu) (net 82) (status 30)) (segment (start 151.13 112.825) (end 151.13 113.665) (width 0.15) (layer F.Cu) (net 83) (status 30)) (segment (start 148.975 110.67) (end 151.13 112.825) (width 0.15) (layer F.Cu) (net 83) (status 20)) (segment (start 148.975 109.645) (end 148.975 110.67) (width 0.15) (layer F.Cu) (net 83) (status 10)) (segment (start 148.325 113.4) (end 148.59 113.665) (width 0.15) (layer F.Cu) (net 84) (status 30)) (segment (start 148.325 109.645) (end 148.325 113.4) (width 0.15) (layer F.Cu) (net 84) (status 30)) (segment (start 150.495 99.06) (end 150.495 97.155) (width 0.2) (layer F.Cu) (net 85) (status 20)) (segment (start 148.325 101.23) (end 150.495 99.06) (width 0.2) (layer F.Cu) (net 85)) (segment (start 148.325 102.445) (end 148.325 101.23) (width 0.2) (layer F.Cu) (net 85) (status 10)) (segment (start 140.795 75.105) (end 140.335 75.565) (width 0.15) (layer F.Cu) (net 86)) (segment (start 140.795 74.09) (end 140.795 75.105) (width 0.15) (layer F.Cu) (net 86) (status 10)) (via (at 140.335 75.565) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 86)) (segment (start 140.335 87.63) (end 144.145 91.44) (width 0.15) (layer B.Cu) (net 86)) (segment (start 140.335 75.565) (end 140.335 87.63) (width 0.15) (layer B.Cu) (net 86)) (via (at 144.145 91.44) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 86)) (via (at 146.05 95.885) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 86)) (segment (start 144.145 93.98) (end 146.05 95.885) (width 0.15) (layer F.Cu) (net 86)) (segment (start 144.145 91.44) (end 144.145 93.98) (width 0.15) (layer F.Cu) (net 86)) (via (at 147.32 97.155) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 86)) (segment (start 146.05 95.885) (end 147.32 97.155) (width 0.15) (layer B.Cu) (net 86)) (segment (start 147.675 97.51) (end 147.675 102.445) (width 0.15) (layer F.Cu) (net 86) (status 20)) (segment (start 147.32 97.155) (end 147.675 97.51) (width 0.15) (layer F.Cu) (net 86)) (segment (start 191.77 115.57) (end 191.77 118.11) (width 0.35) (layer F.Cu) (net 87) (status 30)) (segment (start 199.39 118.11) (end 199.39 115.57) (width 0.35) (layer F.Cu) (net 88) (status 30)) (segment (start 207.01 118.11) (end 207.01 115.57) (width 0.35) (layer F.Cu) (net 89) (status 30)) (segment (start 186.69 95.25) (end 186.69 97.79) (width 0.35) (layer F.Cu) (net 90) (status 30)) (segment (start 194.31 118.11) (end 194.31 115.57) (width 0.35) (layer F.Cu) (net 91) (status 30)) (via (at 29.209994 50.8) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 92)) (segment (start 35.56 72.39) (end 33.02 69.85) (width 0.2) (layer B.Cu) (net 92)) (segment (start 33.02 69.85) (end 33.02 54.610006) (width 0.2) (layer B.Cu) (net 92)) (segment (start 33.02 54.610006) (end 29.209994 50.8) (width 0.2) (layer B.Cu) (net 92)) (segment (start 29.21 46.355) (end 29.21 50.799994) (width 0.2) (layer F.Cu) (net 92)) (segment (start 29.21 50.799994) (end 29.209994 50.8) (width 0.2) (layer F.Cu) (net 92)) (segment (start 196.85 92.71) (end 198.755 90.805) (width 0.15) (layer F.Cu) (net 93)) (segment (start 196.85 95.25) (end 196.85 92.71) (width 0.15) (layer F.Cu) (net 93) (status 10)) (via (at 198.755 90.805) (size 0.5) (drill 0.3) (layers F.Cu B.Cu) (net 93)) (segment (start 196.85 95.25) (end 196.85 97.79) (width 0.35) (layer F.Cu) (net 93) (status 30)) (segment (start 205.439989 84.120011) (end 198.755 90.805) (width 0.15) (layer B.Cu) (net 93)) (segment (start 205.439989 77.770011) (end 205.439989 84.120011) (width 0.15) (layer B.Cu) (net 93)) (segment (start 210.82 72.39) (end 205.439989 77.770011) (width 0.15) (layer B.Cu) (net 93)) (segment (start 189.23 115.57) (end 189.23 118.11) (width 0.35) (layer F.Cu) (net 94) (status 30)) (segment (start 48.545 101.6) (end 48.545 104.14) (width 0.55) (layer F.Cu) (net 95) (status 30)) (segment (start 130.895 108.965) (end 131.445 109.515) (width 0.55) (layer F.Cu) (net 95) (status 30)) (segment (start 53.37 108.965) (end 130.895 108.965) (width 0.55) (layer F.Cu) (net 95) (status 20)) (segment (start 48.545 104.14) (end 53.37 108.965) (width 0.55) (layer F.Cu) (net 95) (status 10)) (segment (start 42.75 97.995) (end 41.275 96.52) (width 0.55) (layer F.Cu) (net 95)) (segment (start 42.75 100.33) (end 42.75 97.995) (width 0.55) (layer F.Cu) (net 95)) (segment (start 44.735 100.33) (end 48.545 104.14) (width 0.55) (layer F.Cu) (net 95)) (segment (start 42.75 100.33) (end 44.735 100.33) (width 0.55) (layer F.Cu) (net 95)) (zone (net 0) (net_name "") (layers F&B.Cu) (tstamp 6066C728) (hatch edge 0.508) (connect_pads (clearance 0.508)) (min_thickness 0.254) (keepout (tracks not_allowed) (vias not_allowed) (copperpour not_allowed)) (fill (arc_segments 32) (thermal_gap 0.508) (thermal_bridge_width 0.508)) (polygon (pts (xy 177.8 124.46) (xy 162.56 124.46) (xy 162.56 91.44) (xy 177.8 91.44) ) ) ) (zone (net 75) (net_name /SW_IN) (layer F.Cu) (tstamp 6066C776) (hatch edge 0.508) (priority 1) (connect_pads yes (clearance 0.508)) (min_thickness 0.254) (fill yes (arc_segments 32) (thermal_gap 0.508) (thermal_bridge_width 0.508)) (polygon (pts (xy 149.86 36.195) (xy 129.54 36.195) (xy 129.54 25.4) (xy 149.86 25.4) ) ) (filled_polygon (pts (xy 149.733 36.068) (xy 129.667 36.068) (xy 129.667 26.06) (xy 149.733 26.06) ) ) ) (zone (net 75) (net_name /SW_IN) (layer B.Cu) (tstamp 60717E6A) (hatch edge 0.508) (priority 2) (connect_pads yes (clearance 0.508)) (min_thickness 0.254) (fill yes (arc_segments 32) (thermal_gap 0.508) (thermal_bridge_width 0.508)) (polygon (pts (xy 149.86 43.18) (xy 129.54 43.18) (xy 129.54 25.4) (xy 149.86 25.4) ) ) (filled_polygon (pts (xy 149.733 43.053) (xy 129.667 43.053) (xy 129.667 26.06) (xy 149.733 26.06) ) ) ) (zone (net 20) (net_name "Net-(D2-Pad2)") (layer F.Cu) (tstamp 0) (hatch edge 0.508) (connect_pads yes (clearance 0.25)) (min_thickness 0.254) (fill yes (arc_segments 32) (thermal_gap 0.508) (thermal_bridge_width 0.508)) (polygon (pts (xy 139.065 44.196) (xy 135.89 44.196) (xy 135.89 37.465) (xy 139.065 37.465) ) ) (filled_polygon (pts (xy 138.938 44.069) (xy 136.017 44.069) (xy 136.017 37.592) (xy 138.938 37.592) ) ) ) (zone (net 70) (net_name /12V_OUTPUT) (layer F.Cu) (tstamp 0) (hatch edge 0.508) (connect_pads yes (clearance 0.25)) (min_thickness 0.254) (fill yes (arc_segments 32) (thermal_gap 0.508) (thermal_bridge_width 0.508)) (polygon (pts (xy 138.43 60.325) (xy 135.89 60.325) (xy 135.89 44.704) (xy 138.43 44.704) ) ) (filled_polygon (pts (xy 138.303 60.198) (xy 136.017 60.198) (xy 136.017 44.831) (xy 138.303 44.831) ) ) ) (zone (net 1) (net_name GND) (layer B.Cu) (tstamp 60691665) (hatch edge 0.508) (connect_pads (clearance 0.508)) (min_thickness 0.254) (fill yes (arc_segments 32) (thermal_gap 0.508) (thermal_bridge_width 0.508) (smoothing fillet)) (polygon (pts (xy 223.52 120.65) (xy 25.4 120.65) (xy 25.4 25.4) (xy 223.52 25.4) ) ) (filled_polygon (pts (xy 122.809234 26.121633) (xy 122.238442 26.503024) (xy 121.753024 26.988442) (xy 121.371633 27.559234) (xy 121.108927 28.193463) (xy 120.975 28.866758) (xy 120.975 29.553242) (xy 121.108927 30.226537) (xy 121.371633 30.860766) (xy 121.753024 31.431558) (xy 122.238442 31.916976) (xy 122.809234 32.298367) (xy 123.443463 32.561073) (xy 124.116758 32.695) (xy 124.803242 32.695) (xy 125.476537 32.561073) (xy 126.110766 32.298367) (xy 126.681558 31.916976) (xy 127.166976 31.431558) (xy 127.548367 30.860766) (xy 127.811073 30.226537) (xy 127.945 29.553242) (xy 127.945 28.866758) (xy 127.811073 28.193463) (xy 127.548367 27.559234) (xy 127.166976 26.988442) (xy 126.681558 26.503024) (xy 126.110766 26.121633) (xy 125.961971 26.06) (xy 128.905 26.06) (xy 128.905 43.18) (xy 128.917201 43.303882) (xy 128.953336 43.423004) (xy 129.012017 43.532787) (xy 129.090987 43.629013) (xy 129.187213 43.707983) (xy 129.296996 43.766664) (xy 129.416118 43.802799) (xy 129.54 43.815) (xy 149.86 43.815) (xy 149.983882 43.802799) (xy 150.103004 43.766664) (xy 150.212787 43.707983) (xy 150.309013 43.629013) (xy 150.387983 43.532787) (xy 150.446664 43.423004) (xy 150.482799 43.303882) (xy 150.495 43.18) (xy 150.495 26.06) (xy 218.208029 26.06) (xy 218.059234 26.121633) (xy 217.488442 26.503024) (xy 217.003024 26.988442) (xy 216.621633 27.559234) (xy 216.358927 28.193463) (xy 216.225 28.866758) (xy 216.225 29.553242) (xy 216.358927 30.226537) (xy 216.621633 30.860766) (xy 217.003024 31.431558) (xy 217.488442 31.916976) (xy 218.059234 32.298367) (xy 218.693463 32.561073) (xy 219.366758 32.695) (xy 220.053242 32.695) (xy 220.726537 32.561073) (xy 221.360766 32.298367) (xy 221.931558 31.916976) (xy 222.416976 31.431558) (xy 222.798367 30.860766) (xy 222.86 30.711971) (xy 222.86 54.355466) (xy 222.439558 53.935024) (xy 221.868766 53.553633) (xy 221.234537 53.290927) (xy 220.561242 53.157) (xy 219.874758 53.157) (xy 219.201463 53.290927) (xy 218.567234 53.553633) (xy 217.996442 53.935024) (xy 217.511024 54.420442) (xy 217.129633 54.991234) (xy 216.866927 55.625463) (xy 216.733 56.298758) (xy 216.733 56.985242) (xy 216.866927 57.658537) (xy 217.129633 58.292766) (xy 217.511024 58.863558) (xy 217.996442 59.348976) (xy 218.567234 59.730367) (xy 219.201463 59.993073) (xy 219.874758 60.127) (xy 220.561242 60.127) (xy 221.234537 59.993073) (xy 221.868766 59.730367) (xy 222.439558 59.348976) (xy 222.86 58.928534) (xy 222.86 66.166466) (xy 222.566558 65.873024) (xy 221.995766 65.491633) (xy 221.361537 65.228927) (xy 220.688242 65.095) (xy 220.001758 65.095) (xy 219.328463 65.228927) (xy 218.694234 65.491633) (xy 218.123442 65.873024) (xy 217.638024 66.358442) (xy 217.256633 66.929234) (xy 216.993927 67.563463) (xy 216.86 68.236758) (xy 216.86 68.923242) (xy 216.993927 69.596537) (xy 217.256633 70.230766) (xy 217.638024 70.801558) (xy 218.123442 71.286976) (xy 218.694234 71.668367) (xy 219.328463 71.931073) (xy 220.001758 72.065) (xy 220.688242 72.065) (xy 221.361537 71.931073) (xy 221.995766 71.668367) (xy 222.566558 71.286976) (xy 222.86 70.993534) (xy 222.860001 78.231467) (xy 222.439558 77.811024) (xy 221.868766 77.429633) (xy 221.234537 77.166927) (xy 220.561242 77.033) (xy 219.874758 77.033) (xy 219.201463 77.166927) (xy 218.567234 77.429633) (xy 217.996442 77.811024) (xy 217.511024 78.296442) (xy 217.129633 78.867234) (xy 216.866927 79.501463) (xy 216.733 80.174758) (xy 216.733 80.861242) (xy 216.866927 81.534537) (xy 217.129633 82.168766) (xy 217.511024 82.739558) (xy 217.996442 83.224976) (xy 218.567234 83.606367) (xy 219.201463 83.869073) (xy 219.874758 84.003) (xy 220.561242 84.003) (xy 221.234537 83.869073) (xy 221.868766 83.606367) (xy 222.439558 83.224976) (xy 222.860001 82.804533) (xy 222.860001 115.338032) (xy 222.798367 115.189234) (xy 222.416976 114.618442) (xy 221.931558 114.133024) (xy 221.360766 113.751633) (xy 220.726537 113.488927) (xy 220.053242 113.355) (xy 219.366758 113.355) (xy 218.693463 113.488927) (xy 218.059234 113.751633) (xy 217.488442 114.133024) (xy 217.003024 114.618442) (xy 216.621633 115.189234) (xy 216.358927 115.823463) (xy 216.225 116.496758) (xy 216.225 117.183242) (xy 216.358927 117.856537) (xy 216.621633 118.490766) (xy 217.003024 119.061558) (xy 217.488442 119.546976) (xy 218.059234 119.928367) (xy 218.208029 119.99) (xy 177.927 119.99) (xy 177.927 119.17408) (xy 178.185525 119.17408) (xy 178.269208 119.428261) (xy 178.541775 119.559158) (xy 178.834642 119.634365) (xy 179.136553 119.650991) (xy 179.435907 119.608397) (xy 179.721199 119.508222) (xy 179.870792 119.428261) (xy 179.954475 119.17408) (xy 180.725525 119.17408) (xy 180.809208 119.428261) (xy 181.081775 119.559158) (xy 181.374642 119.634365) (xy 181.676553 119.650991) (xy 181.975907 119.608397) (xy 182.261199 119.508222) (xy 182.410792 119.428261) (xy 182.494475 119.17408) (xy 181.61 118.289605) (xy 180.725525 119.17408) (xy 179.954475 119.17408) (xy 179.07 118.289605) (xy 178.185525 119.17408) (xy 177.927 119.17408) (xy 177.927 118.968492) (xy 178.00592 118.994475) (xy 178.890395 118.11) (xy 179.249605 118.11) (xy 180.13408 118.994475) (xy 180.34 118.926681) (xy 180.54592 118.994475) (xy 181.430395 118.11) (xy 180.54592 117.225525) (xy 180.34 117.293319) (xy 180.13408 117.225525) (xy 179.249605 118.11) (xy 178.890395 118.11) (xy 178.00592 117.225525) (xy 177.927 117.251508) (xy 177.927 116.63408) (xy 178.185525 116.63408) (xy 178.253319 116.84) (xy 178.185525 117.04592) (xy 179.07 117.930395) (xy 179.954475 117.04592) (xy 179.886681 116.84) (xy 179.954475 116.63408) (xy 180.725525 116.63408) (xy 180.793319 116.84) (xy 180.725525 117.04592) (xy 181.61 117.930395) (xy 182.494475 117.04592) (xy 182.426681 116.84) (xy 182.494475 116.63408) (xy 181.61 115.749605) (xy 180.725525 116.63408) (xy 179.954475 116.63408) (xy 179.07 115.749605) (xy 178.185525 116.63408) (xy 177.927 116.63408) (xy 177.927 116.428492) (xy 178.00592 116.454475) (xy 178.890395 115.57) (xy 179.249605 115.57) (xy 180.13408 116.454475) (xy 180.34 116.386681) (xy 180.54592 116.454475) (xy 181.430395 115.57) (xy 181.789605 115.57) (xy 182.67408 116.454475) (xy 182.855049 116.394895) (xy 182.957688 116.548505) (xy 183.171495 116.762312) (xy 183.287763 116.84) (xy 183.171495 116.917688) (xy 182.957688 117.131495) (xy 182.855049 117.285105) (xy 182.67408 117.225525) (xy 181.789605 118.11) (xy 182.67408 118.994475) (xy 182.855049 118.934895) (xy 182.957688 119.088505) (xy 183.171495 119.302312) (xy 183.422905 119.470299) (xy 183.702257 119.586011) (xy 183.998816 119.645) (xy 184.301184 119.645) (xy 184.597743 119.586011) (xy 184.877095 119.470299) (xy 185.128505 119.302312) (xy 185.342312 119.088505) (xy 185.42 118.972237) (xy 185.497688 119.088505) (xy 185.711495 119.302312) (xy 185.962905 119.470299) (xy 186.242257 119.586011) (xy 186.538816 119.645) (xy 186.841184 119.645) (xy 187.137743 119.586011) (xy 187.417095 119.470299) (xy 187.668505 119.302312) (xy 187.882312 119.088505) (xy 187.96 118.972237) (xy 188.037688 119.088505) (xy 188.251495 119.302312) (xy 188.502905 119.470299) (xy 188.782257 119.586011) (xy 189.078816 119.645) (xy 189.381184 119.645) (xy 189.677743 119.586011) (xy 189.957095 119.470299) (xy 190.208505 119.302312) (xy 190.422312 119.088505) (xy 190.5 118.972237) (xy 190.577688 119.088505) (xy 190.791495 119.302312) (xy 191.042905 119.470299) (xy 191.322257 119.586011) (xy 191.618816 119.645) (xy 191.921184 119.645) (xy 192.217743 119.586011) (xy 192.497095 119.470299) (xy 192.748505 119.302312) (xy 192.962312 119.088505) (xy 193.04 118.972237) (xy 193.117688 119.088505) (xy 193.331495 119.302312) (xy 193.582905 119.470299) (xy 193.862257 119.586011) (xy 194.158816 119.645) (xy 194.461184 119.645) (xy 194.757743 119.586011) (xy 195.037095 119.470299) (xy 195.288505 119.302312) (xy 195.502312 119.088505) (xy 195.58 118.972237) (xy 195.657688 119.088505) (xy 195.871495 119.302312) (xy 196.122905 119.470299) (xy 196.402257 119.586011) (xy 196.698816 119.645) (xy 197.001184 119.645) (xy 197.297743 119.586011) (xy 197.577095 119.470299) (xy 197.828505 119.302312) (xy 198.042312 119.088505) (xy 198.12 118.972237) (xy 198.197688 119.088505) (xy 198.411495 119.302312) (xy 198.662905 119.470299) (xy 198.942257 119.586011) (xy 199.238816 119.645) (xy 199.541184 119.645) (xy 199.837743 119.586011) (xy 200.117095 119.470299) (xy 200.368505 119.302312) (xy 200.496737 119.17408) (xy 201.045525 119.17408) (xy 201.129208 119.428261) (xy 201.401775 119.559158) (xy 201.694642 119.634365) (xy 201.996553 119.650991) (xy 202.295907 119.608397) (xy 202.581199 119.508222) (xy 202.730792 119.428261) (xy 202.814475 119.17408) (xy 203.585525 119.17408) (xy 203.669208 119.428261) (xy 203.941775 119.559158) (xy 204.234642 119.634365) (xy 204.536553 119.650991) (xy 204.835907 119.608397) (xy 205.121199 119.508222) (xy 205.270792 119.428261) (xy 205.354475 119.17408) (xy 204.47 118.289605) (xy 203.585525 119.17408) (xy 202.814475 119.17408) (xy 201.93 118.289605) (xy 201.045525 119.17408) (xy 200.496737 119.17408) (xy 200.582312 119.088505) (xy 200.684951 118.934895) (xy 200.86592 118.994475) (xy 201.750395 118.11) (xy 202.109605 118.11) (xy 202.99408 118.994475) (xy 203.2 118.926681) (xy 203.40592 118.994475) (xy 204.290395 118.11) (xy 203.40592 117.225525) (xy 203.2 117.293319) (xy 202.99408 117.225525) (xy 202.109605 118.11) (xy 201.750395 118.11) (xy 200.86592 117.225525) (xy 200.684951 117.285105) (xy 200.582312 117.131495) (xy 200.368505 116.917688) (xy 200.252237 116.84) (xy 200.368505 116.762312) (xy 200.496737 116.63408) (xy 201.045525 116.63408) (xy 201.113319 116.84) (xy 201.045525 117.04592) (xy 201.93 117.930395) (xy 202.814475 117.04592) (xy 202.746681 116.84) (xy 202.814475 116.63408) (xy 203.585525 116.63408) (xy 203.653319 116.84) (xy 203.585525 117.04592) (xy 204.47 117.930395) (xy 205.354475 117.04592) (xy 205.286681 116.84) (xy 205.354475 116.63408) (xy 204.47 115.749605) (xy 203.585525 116.63408) (xy 202.814475 116.63408) (xy 201.93 115.749605) (xy 201.045525 116.63408) (xy 200.496737 116.63408) (xy 200.582312 116.548505) (xy 200.684951 116.394895) (xy 200.86592 116.454475) (xy 201.750395 115.57) (xy 202.109605 115.57) (xy 202.99408 116.454475) (xy 203.2 116.386681) (xy 203.40592 116.454475) (xy 204.290395 115.57) (xy 204.649605 115.57) (xy 205.53408 116.454475) (xy 205.715049 116.394895) (xy 205.817688 116.548505) (xy 206.031495 116.762312) (xy 206.147763 116.84) (xy 206.031495 116.917688) (xy 205.817688 117.131495) (xy 205.715049 117.285105) (xy 205.53408 117.225525) (xy 204.649605 118.11) (xy 205.53408 118.994475) (xy 205.715049 118.934895) (xy 205.817688 119.088505) (xy 206.031495 119.302312) (xy 206.282905 119.470299) (xy 206.562257 119.586011) (xy 206.858816 119.645) (xy 207.161184 119.645) (xy 207.457743 119.586011) (xy 207.737095 119.470299) (xy 207.988505 119.302312) (xy 208.202312 119.088505) (xy 208.370299 118.837095) (xy 208.486011 118.557743) (xy 208.545 118.261184) (xy 208.545 117.958816) (xy 208.486011 117.662257) (xy 208.370299 117.382905) (xy 208.202312 117.131495) (xy 207.988505 116.917688) (xy 207.872237 116.84) (xy 207.988505 116.762312) (xy 208.202312 116.548505) (xy 208.370299 116.297095) (xy 208.486011 116.017743) (xy 208.545 115.721184) (xy 208.545 115.418816) (xy 208.486011 115.122257) (xy 208.370299 114.842905) (xy 208.202312 114.591495) (xy 207.988505 114.377688) (xy 207.737095 114.209701) (xy 207.457743 114.093989) (xy 207.161184 114.035) (xy 206.858816 114.035) (xy 206.562257 114.093989) (xy 206.282905 114.209701) (xy 206.031495 114.377688) (xy 205.817688 114.591495) (xy 205.715049 114.745105) (xy 205.53408 114.685525) (xy 204.649605 115.57) (xy 204.290395 115.57) (xy 203.40592 114.685525) (xy 203.2 114.753319) (xy 202.99408 114.685525) (xy 202.109605 115.57) (xy 201.750395 115.57) (xy 200.86592 114.685525) (xy 200.684951 114.745105) (xy 200.582312 114.591495) (xy 200.496737 114.50592) (xy 201.045525 114.50592) (xy 201.93 115.390395) (xy 202.814475 114.50592) (xy 203.585525 114.50592) (xy 204.47 115.390395) (xy 205.354475 114.50592) (xy 205.270792 114.251739) (xy 204.998225 114.120842) (xy 204.705358 114.045635) (xy 204.403447 114.029009) (xy 204.104093 114.071603) (xy 203.818801 114.171778) (xy 203.669208 114.251739) (xy 203.585525 114.50592) (xy 202.814475 114.50592) (xy 202.730792 114.251739) (xy 202.458225 114.120842) (xy 202.165358 114.045635) (xy 201.863447 114.029009) (xy 201.564093 114.071603) (xy 201.278801 114.171778) (xy 201.129208 114.251739) (xy 201.045525 114.50592) (xy 200.496737 114.50592) (xy 200.368505 114.377688) (xy 200.117095 114.209701) (xy 199.837743 114.093989) (xy 199.541184 114.035) (xy 199.238816 114.035) (xy 198.942257 114.093989) (xy 198.662905 114.209701) (xy 198.411495 114.377688) (xy 198.197688 114.591495) (xy 198.12 114.707763) (xy 198.042312 114.591495) (xy 197.828505 114.377688) (xy 197.577095 114.209701) (xy 197.297743 114.093989) (xy 197.001184 114.035) (xy 196.698816 114.035) (xy 196.402257 114.093989) (xy 196.122905 114.209701) (xy 195.871495 114.377688) (xy 195.657688 114.591495) (xy 195.58 114.707763) (xy 195.502312 114.591495) (xy 195.288505 114.377688) (xy 195.037095 114.209701) (xy 194.757743 114.093989) (xy 194.461184 114.035) (xy 194.158816 114.035) (xy 193.862257 114.093989) (xy 193.582905 114.209701) (xy 193.331495 114.377688) (xy 193.117688 114.591495) (xy 193.04 114.707763) (xy 192.962312 114.591495) (xy 192.748505 114.377688) (xy 192.497095 114.209701) (xy 192.217743 114.093989) (xy 191.921184 114.035) (xy 191.618816 114.035) (xy 191.322257 114.093989) (xy 191.042905 114.209701) (xy 190.791495 114.377688) (xy 190.577688 114.591495) (xy 190.5 114.707763) (xy 190.422312 114.591495) (xy 190.208505 114.377688) (xy 189.957095 114.209701) (xy 189.677743 114.093989) (xy 189.381184 114.035) (xy 189.078816 114.035) (xy 188.782257 114.093989) (xy 188.502905 114.209701) (xy 188.251495 114.377688) (xy 188.037688 114.591495) (xy 187.96 114.707763) (xy 187.882312 114.591495) (xy 187.668505 114.377688) (xy 187.417095 114.209701) (xy 187.137743 114.093989) (xy 186.841184 114.035) (xy 186.538816 114.035) (xy 186.242257 114.093989) (xy 185.962905 114.209701) (xy 185.711495 114.377688) (xy 185.497688 114.591495) (xy 185.42 114.707763) (xy 185.342312 114.591495) (xy 185.128505 114.377688) (xy 184.877095 114.209701) (xy 184.597743 114.093989) (xy 184.301184 114.035) (xy 183.998816 114.035) (xy 183.702257 114.093989) (xy 183.422905 114.209701) (xy 183.171495 114.377688) (xy 182.957688 114.591495) (xy 182.855049 114.745105) (xy 182.67408 114.685525) (xy 181.789605 115.57) (xy 181.430395 115.57) (xy 180.54592 114.685525) (xy 180.34 114.753319) (xy 180.13408 114.685525) (xy 179.249605 115.57) (xy 178.890395 115.57) (xy 178.00592 114.685525) (xy 177.927 114.711508) (xy 177.927 114.50592) (xy 178.185525 114.50592) (xy 179.07 115.390395) (xy 179.954475 114.50592) (xy 180.725525 114.50592) (xy 181.61 115.390395) (xy 182.494475 114.50592) (xy 182.410792 114.251739) (xy 182.138225 114.120842) (xy 181.845358 114.045635) (xy 181.543447 114.029009) (xy 181.244093 114.071603) (xy 180.958801 114.171778) (xy 180.809208 114.251739) (xy 180.725525 114.50592) (xy 179.954475 114.50592) (xy 179.870792 114.251739) (xy 179.598225 114.120842) (xy 179.305358 114.045635) (xy 179.003447 114.029009) (xy 178.704093 114.071603) (xy 178.418801 114.171778) (xy 178.269208 114.251739) (xy 178.185525 114.50592) (xy 177.927 114.50592) (xy 177.927 98.817817) (xy 178.091495 98.982312) (xy 178.342905 99.150299) (xy 178.622257 99.266011) (xy 178.918816 99.325) (xy 179.221184 99.325) (xy 179.517743 99.266011) (xy 179.797095 99.150299) (xy 180.048505 98.982312) (xy 180.262312 98.768505) (xy 180.34 98.652237) (xy 180.417688 98.768505) (xy 180.631495 98.982312) (xy 180.882905 99.150299) (xy 181.162257 99.266011) (xy 181.458816 99.325) (xy 181.761184 99.325) (xy 182.057743 99.266011) (xy 182.337095 99.150299) (xy 182.588505 98.982312) (xy 182.802312 98.768505) (xy 182.88 98.652237) (xy 182.957688 98.768505) (xy 183.171495 98.982312) (xy 183.422905 99.150299) (xy 183.702257 99.266011) (xy 183.998816 99.325) (xy 184.301184 99.325) (xy 184.597743 99.266011) (xy 184.877095 99.150299) (xy 185.128505 98.982312) (xy 185.342312 98.768505) (xy 185.42 98.652237) (xy 185.497688 98.768505) (xy 185.711495 98.982312) (xy 185.962905 99.150299) (xy 186.242257 99.266011) (xy 186.538816 99.325) (xy 186.841184 99.325) (xy 187.137743 99.266011) (xy 187.417095 99.150299) (xy 187.668505 98.982312) (xy 187.882312 98.768505) (xy 187.96 98.652237) (xy 188.037688 98.768505) (xy 188.251495 98.982312) (xy 188.502905 99.150299) (xy 188.782257 99.266011) (xy 189.078816 99.325) (xy 189.381184 99.325) (xy 189.677743 99.266011) (xy 189.957095 99.150299) (xy 190.208505 98.982312) (xy 190.422312 98.768505) (xy 190.5 98.652237) (xy 190.577688 98.768505) (xy 190.791495 98.982312) (xy 191.042905 99.150299) (xy 191.322257 99.266011) (xy 191.618816 99.325) (xy 191.921184 99.325) (xy 192.217743 99.266011) (xy 192.497095 99.150299) (xy 192.748505 98.982312) (xy 192.962312 98.768505) (xy 193.04 98.652237) (xy 193.117688 98.768505) (xy 193.331495 98.982312) (xy 193.582905 99.150299) (xy 193.862257 99.266011) (xy 194.158816 99.325) (xy 194.461184 99.325) (xy 194.757743 99.266011) (xy 195.037095 99.150299) (xy 195.288505 98.982312) (xy 195.502312 98.768505) (xy 195.58 98.652237) (xy 195.657688 98.768505) (xy 195.871495 98.982312) (xy 196.122905 99.150299) (xy 196.402257 99.266011) (xy 196.698816 99.325) (xy 197.001184 99.325) (xy 197.297743 99.266011) (xy 197.577095 99.150299) (xy 197.828505 98.982312) (xy 198.042312 98.768505) (xy 198.12 98.652237) (xy 198.197688 98.768505) (xy 198.411495 98.982312) (xy 198.662905 99.150299) (xy 198.942257 99.266011) (xy 199.238816 99.325) (xy 199.541184 99.325) (xy 199.837743 99.266011) (xy 200.117095 99.150299) (xy 200.368505 98.982312) (xy 200.582312 98.768505) (xy 200.66 98.652237) (xy 200.737688 98.768505) (xy 200.951495 98.982312) (xy 201.202905 99.150299) (xy 201.482257 99.266011) (xy 201.778816 99.325) (xy 202.081184 99.325) (xy 202.377743 99.266011) (xy 202.657095 99.150299) (xy 202.908505 98.982312) (xy 203.036737 98.85408) (xy 203.585525 98.85408) (xy 203.669208 99.108261) (xy 203.941775 99.239158) (xy 204.234642 99.314365) (xy 204.536553 99.330991) (xy 204.835907 99.288397) (xy 205.121199 99.188222) (xy 205.270792 99.108261) (xy 205.354475 98.85408) (xy 204.47 97.969605) (xy 203.585525 98.85408) (xy 203.036737 98.85408) (xy 203.122312 98.768505) (xy 203.224951 98.614895) (xy 203.40592 98.674475) (xy 204.290395 97.79) (xy 203.40592 96.905525) (xy 203.224951 96.965105) (xy 203.122312 96.811495) (xy 202.908505 96.597688) (xy 202.792237 96.52) (xy 202.908505 96.442312) (xy 203.036737 96.31408) (xy 203.585525 96.31408) (xy 203.653319 96.52) (xy 203.585525 96.72592) (xy 204.47 97.610395) (xy 205.354475 96.72592) (xy 205.286681 96.52) (xy 205.354475 96.31408) (xy 204.47 95.429605) (xy 203.585525 96.31408) (xy 203.036737 96.31408) (xy 203.122312 96.228505) (xy 203.224951 96.074895) (xy 203.40592 96.134475) (xy 204.290395 95.25) (xy 204.649605 95.25) (xy 205.53408 96.134475) (xy 205.715049 96.074895) (xy 205.817688 96.228505) (xy 206.031495 96.442312) (xy 206.147763 96.52) (xy 206.031495 96.597688) (xy 205.817688 96.811495) (xy 205.715049 96.965105) (xy 205.53408 96.905525) (xy 204.649605 97.79) (xy 205.53408 98.674475) (xy 205.715049 98.614895) (xy 205.817688 98.768505) (xy 206.031495 98.982312) (xy 206.282905 99.150299) (xy 206.562257 99.266011) (xy 206.858816 99.325) (xy 207.161184 99.325) (xy 207.457743 99.266011) (xy 207.737095 99.150299) (xy 207.988505 98.982312) (xy 208.202312 98.768505) (xy 208.370299 98.517095) (xy 208.486011 98.237743) (xy 208.545 97.941184) (xy 208.545 97.638816) (xy 208.486011 97.342257) (xy 208.370299 97.062905) (xy 208.202312 96.811495) (xy 207.988505 96.597688) (xy 207.872237 96.52) (xy 207.988505 96.442312) (xy 208.202312 96.228505) (xy 208.370299 95.977095) (xy 208.486011 95.697743) (xy 208.545 95.401184) (xy 208.545 95.098816) (xy 208.486011 94.802257) (xy 208.370299 94.522905) (xy 208.202312 94.271495) (xy 207.988505 94.057688) (xy 207.737095 93.889701) (xy 207.457743 93.773989) (xy 207.161184 93.715) (xy 206.858816 93.715) (xy 206.562257 93.773989) (xy 206.282905 93.889701) (xy 206.031495 94.057688) (xy 205.817688 94.271495) (xy 205.715049 94.425105) (xy 205.53408 94.365525) (xy 204.649605 95.25) (xy 204.290395 95.25) (xy 203.40592 94.365525) (xy 203.224951 94.425105) (xy 203.122312 94.271495) (xy 203.036737 94.18592) (xy 203.585525 94.18592) (xy 204.47 95.070395) (xy 205.354475 94.18592) (xy 205.270792 93.931739) (xy 204.998225 93.800842) (xy 204.705358 93.725635) (xy 204.403447 93.709009) (xy 204.104093 93.751603) (xy 203.818801 93.851778) (xy 203.669208 93.931739) (xy 203.585525 94.18592) (xy 203.036737 94.18592) (xy 202.908505 94.057688) (xy 202.657095 93.889701) (xy 202.377743 93.773989) (xy 202.081184 93.715) (xy 201.778816 93.715) (xy 201.482257 93.773989) (xy 201.202905 93.889701) (xy 200.951495 94.057688) (xy 200.737688 94.271495) (xy 200.66 94.387763) (xy 200.582312 94.271495) (xy 200.368505 94.057688) (xy 200.117095 93.889701) (xy 199.837743 93.773989) (xy 199.541184 93.715) (xy 199.238816 93.715) (xy 198.942257 93.773989) (xy 198.662905 93.889701) (xy 198.411495 94.057688) (xy 198.197688 94.271495) (xy 198.12 94.387763) (xy 198.042312 94.271495) (xy 197.828505 94.057688) (xy 197.577095 93.889701) (xy 197.297743 93.773989) (xy 197.001184 93.715) (xy 196.698816 93.715) (xy 196.402257 93.773989) (xy 196.122905 93.889701) (xy 195.871495 94.057688) (xy 195.657688 94.271495) (xy 195.58 94.387763) (xy 195.502312 94.271495) (xy 195.288505 94.057688) (xy 195.037095 93.889701) (xy 194.757743 93.773989) (xy 194.461184 93.715) (xy 194.158816 93.715) (xy 193.862257 93.773989) (xy 193.582905 93.889701) (xy 193.331495 94.057688) (xy 193.117688 94.271495) (xy 193.04 94.387763) (xy 192.962312 94.271495) (xy 192.748505 94.057688) (xy 192.497095 93.889701) (xy 192.217743 93.773989) (xy 191.921184 93.715) (xy 191.618816 93.715) (xy 191.322257 93.773989) (xy 191.042905 93.889701) (xy 190.791495 94.057688) (xy 190.577688 94.271495) (xy 190.5 94.387763) (xy 190.422312 94.271495) (xy 190.208505 94.057688) (xy 189.957095 93.889701) (xy 189.677743 93.773989) (xy 189.381184 93.715) (xy 189.078816 93.715) (xy 188.782257 93.773989) (xy 188.502905 93.889701) (xy 188.251495 94.057688) (xy 188.037688 94.271495) (xy 187.96 94.387763) (xy 187.882312 94.271495) (xy 187.668505 94.057688) (xy 187.417095 93.889701) (xy 187.137743 93.773989) (xy 186.841184 93.715) (xy 186.538816 93.715) (xy 186.242257 93.773989) (xy 185.962905 93.889701) (xy 185.711495 94.057688) (xy 185.497688 94.271495) (xy 185.42 94.387763) (xy 185.342312 94.271495) (xy 185.128505 94.057688) (xy 184.877095 93.889701) (xy 184.86 93.88262) (xy 184.86 93.131079) (xy 184.913396 93.077684) (xy 185.044522 93.051601) (xy 185.205582 92.984888) (xy 185.350532 92.888035) (xy 185.473801 92.764766) (xy 185.570654 92.619816) (xy 185.637367 92.458756) (xy 185.671377 92.287776) (xy 185.671377 92.113446) (xy 185.637367 91.942466) (xy 185.570654 91.781406) (xy 185.473801 91.636456) (xy 185.350532 91.513187) (xy 185.205582 91.416334) (xy 185.044522 91.349621) (xy 184.873542 91.315611) (xy 184.699212 91.315611) (xy 184.528232 91.349621) (xy 184.367172 91.416334) (xy 184.222222 91.513187) (xy 184.098953 91.636456) (xy 184.0021 91.781406) (xy 183.935387 91.942466) (xy 183.909304 92.073592) (xy 183.672616 92.310281) (xy 183.645526 92.332513) (xy 183.623293 92.359604) (xy 183.556801 92.440625) (xy 183.490872 92.563969) (xy 183.450274 92.697804) (xy 183.436565 92.836988) (xy 183.440001 92.871873) (xy 183.440001 93.88262) (xy 183.422905 93.889701) (xy 183.171495 94.057688) (xy 182.957688 94.271495) (xy 182.88 94.387763) (xy 182.802312 94.271495) (xy 182.588505 94.057688) (xy 182.337095 93.889701) (xy 182.057743 93.773989) (xy 181.860933 93.734841) (xy 178.843927 90.717835) (xy 194.441 90.717835) (xy 194.441 90.892165) (xy 194.47501 91.063145) (xy 194.541723 91.224205) (xy 194.638576 91.369155) (xy 194.761845 91.492424) (xy 194.906795 91.589277) (xy 195.067855 91.65599) (xy 195.238835 91.69) (xy 195.413165 91.69) (xy 195.584145 91.65599) (xy 195.745205 91.589277) (xy 195.890155 91.492424) (xy 196.013424 91.369155) (xy 196.110277 91.224205) (xy 196.17699 91.063145) (xy 196.17861 91.055) (xy 196.302169 91.055) (xy 196.473149 91.02099) (xy 196.634209 90.954277) (xy 196.779159 90.857424) (xy 196.902428 90.734155) (xy 196.999281 90.589205) (xy 197.040502 90.489688) (xy 197.081723 90.589205) (xy 197.178576 90.734155) (xy 197.301845 90.857424) (xy 197.446795 90.954277) (xy 197.607855 91.02099) (xy 197.778835 91.055) (xy 197.90239 91.055) (xy 197.90401 91.063145) (xy 197.970723 91.224205) (xy 198.067576 91.369155) (xy 198.190845 91.492424) (xy 198.335795 91.589277) (xy 198.496855 91.65599) (xy 198.667835 91.69) (xy 198.842165 91.69) (xy 199.013145 91.65599) (xy 199.174205 91.589277) (xy 199.319155 91.492424) (xy 199.442424 91.369155) (xy 199.539277 91.224205) (xy 199.60599 91.063145) (xy 199.632073 90.932018) (xy 205.917373 84.646719) (xy 205.944464 84.624486) (xy 206.033189 84.516374) (xy 206.099117 84.393031) (xy 206.139716 84.259195) (xy 206.149989 84.154888) (xy 206.149989 84.154887) (xy 206.153424 84.120012) (xy 206.149989 84.085137) (xy 206.149989 78.064102) (xy 210.355161 73.85893) (xy 210.372257 73.866011) (xy 210.668816 73.925) (xy 210.971184 73.925) (xy 211.267743 73.866011) (xy 211.547095 73.750299) (xy 211.798505 73.582312) (xy 211.926737 73.45408) (xy 212.475525 73.45408) (xy 212.559208 73.708261) (xy 212.831775 73.839158) (xy 213.124642 73.914365) (xy 213.426553 73.930991) (xy 213.725907 73.888397) (xy 214.011199 73.788222) (xy 214.160792 73.708261) (xy 214.244475 73.45408) (xy 213.36 72.569605) (xy 212.475525 73.45408) (xy 211.926737 73.45408) (xy 212.012312 73.368505) (xy 212.114951 73.214895) (xy 212.29592 73.274475) (xy 213.180395 72.39) (xy 213.539605 72.39) (xy 214.42408 73.274475) (xy 214.678261 73.190792) (xy 214.809158 72.918225) (xy 214.884365 72.625358) (xy 214.900991 72.323447) (xy 214.858397 72.024093) (xy 214.758222 71.738801) (xy 214.678261 71.589208) (xy 214.42408 71.505525) (xy 213.539605 72.39) (xy 213.180395 72.39) (xy 212.29592 71.505525) (xy 212.114951 71.565105) (xy 212.012312 71.411495) (xy 211.926737 71.32592) (xy 212.475525 71.32592) (xy 213.36 72.210395) (xy 214.244475 71.32592) (xy 214.160792 71.071739) (xy 213.888225 70.940842) (xy 213.595358 70.865635) (xy 213.293447 70.849009) (xy 212.994093 70.891603) (xy 212.708801 70.991778) (xy 212.559208 71.071739) (xy 212.475525 71.32592) (xy 211.926737 71.32592) (xy 211.798505 71.197688) (xy 211.682237 71.12) (xy 211.798505 71.042312) (xy 212.012312 70.828505) (xy 212.180299 70.577095) (xy 212.296011 70.297743) (xy 212.355 70.001184) (xy 212.355 69.698816) (xy 212.296011 69.402257) (xy 212.180299 69.122905) (xy 212.012312 68.871495) (xy 211.798505 68.657688) (xy 211.682237 68.58) (xy 211.798505 68.502312) (xy 212.012312 68.288505) (xy 212.180299 68.037095) (xy 212.296011 67.757743) (xy 212.355 67.461184) (xy 212.355 67.158816) (xy 212.296011 66.862257) (xy 212.180299 66.582905) (xy 212.012312 66.331495) (xy 211.798505 66.117688) (xy 211.682237 66.04) (xy 211.798505 65.962312) (xy 212.012312 65.748505) (xy 212.180299 65.497095) (xy 212.296011 65.217743) (xy 212.355 64.921184) (xy 212.355 64.618816) (xy 212.296011 64.322257) (xy 212.180299 64.042905) (xy 212.012312 63.791495) (xy 211.798505 63.577688) (xy 211.547095 63.409701) (xy 211.267743 63.293989) (xy 210.971184 63.235) (xy 210.668816 63.235) (xy 210.372257 63.293989) (xy 210.092905 63.409701) (xy 209.841495 63.577688) (xy 209.627688 63.791495) (xy 209.459701 64.042905) (xy 209.343989 64.322257) (xy 209.285 64.618816) (xy 209.285 64.921184) (xy 209.343989 65.217743) (xy 209.35107 65.234838) (xy 204.062574 70.523335) (xy 204.035481 70.54557) (xy 203.946756 70.653682) (xy 203.880828 70.777025) (xy 203.840229 70.910861) (xy 203.83226 70.991778) (xy 203.826521 71.050044) (xy 203.829956 71.084919) (xy 203.829957 80.943398) (xy 195.784342 88.989014) (xy 195.720814 88.995271) (xy 195.586978 89.03587) (xy 195.463635 89.101798) (xy 195.355523 89.190523) (xy 195.33329 89.217614) (xy 194.848617 89.702288) (xy 194.821525 89.724522) (xy 194.7328 89.832634) (xy 194.666872 89.955977) (xy 194.626273 90.089813) (xy 194.616502 90.18902) (xy 194.612565 90.228996) (xy 194.616 90.263871) (xy 194.616 90.274632) (xy 194.541723 90.385795) (xy 194.47501 90.546855) (xy 194.441 90.717835) (xy 178.843927 90.717835) (xy 177.748 89.621909) (xy 177.748 88.558835) (xy 184.027 88.558835) (xy 184.027 88.733165) (xy 184.06101 88.904145) (xy 184.127723 89.065205) (xy 184.224576 89.210155) (xy 184.347845 89.333424) (xy 184.492795 89.430277) (xy 184.653855 89.49699) (xy 184.824835 89.531) (xy 184.999165 89.531) (xy 185.170145 89.49699) (xy 185.331205 89.430277) (xy 185.476155 89.333424) (xy 185.599424 89.210155) (xy 185.696277 89.065205) (xy 185.76299 88.904145) (xy 185.797 88.733165) (xy 185.797 88.558835) (xy 185.76299 88.387855) (xy 185.734651 88.31944) (xy 197.655161 76.39893) (xy 197.672257 76.406011) (xy 197.968816 76.465) (xy 198.271184 76.465) (xy 198.567743 76.406011) (xy 198.847095 76.290299) (xy 199.098505 76.122312) (xy 199.312312 75.908505) (xy 199.480299 75.657095) (xy 199.596011 75.377743) (xy 199.655 75.081184) (xy 199.655 74.778816) (xy 199.596011 74.482257) (xy 199.480299 74.202905) (xy 199.312312 73.951495) (xy 199.098505 73.737688) (xy 198.847095 73.569701) (xy 198.567743 73.453989) (xy 198.271184 73.395) (xy 197.968816 73.395) (xy 197.681581 73.452134) (xy 189.203 64.973554) (xy 189.203 57.643639) (xy 189.299701 57.877095) (xy 189.467688 58.128505) (xy 189.681495 58.342312) (xy 189.932905 58.510299) (xy 190.212257 58.626011) (xy 190.508816 58.685) (xy 190.811184 58.685) (xy 191.107743 58.626011) (xy 191.387095 58.510299) (xy 191.638505 58.342312) (xy 191.852312 58.128505) (xy 191.91 58.042169) (xy 191.967688 58.128505) (xy 192.181495 58.342312) (xy 192.432905 58.510299) (xy 192.712257 58.626011) (xy 193.008816 58.685) (xy 193.311184 58.685) (xy 193.607743 58.626011) (xy 193.887095 58.510299) (xy 194.138505 58.342312) (xy 194.352312 58.128505) (xy 194.41 58.042169) (xy 194.467688 58.128505) (xy 194.681495 58.342312) (xy 194.932905 58.510299) (xy 195.212257 58.626011) (xy 195.508816 58.685) (xy 195.811184 58.685) (xy 196.107743 58.626011) (xy 196.387095 58.510299) (xy 196.638505 58.342312) (xy 196.852312 58.128505) (xy 196.91 58.042169) (xy 196.967688 58.128505) (xy 197.181495 58.342312) (xy 197.432905 58.510299) (xy 197.712257 58.626011) (xy 198.008816 58.685) (xy 198.311184 58.685) (xy 198.607743 58.626011) (xy 198.887095 58.510299) (xy 199.138505 58.342312) (xy 199.352312 58.128505) (xy 199.41 58.042169) (xy 199.467688 58.128505) (xy 199.681495 58.342312) (xy 199.932905 58.510299) (xy 200.212257 58.626011) (xy 200.508816 58.685) (xy 200.811184 58.685) (xy 201.107743 58.626011) (xy 201.387095 58.510299) (xy 201.638505 58.342312) (xy 201.852312 58.128505) (xy 202.020299 57.877095) (xy 202.136011 57.597743) (xy 202.195 57.301184) (xy 202.195 56.998816) (xy 202.136011 56.702257) (xy 202.020299 56.422905) (xy 201.852312 56.171495) (xy 201.695 56.014183) (xy 201.695 40.864613) (xy 201.753386 40.833405) (xy 201.887962 40.722962) (xy 201.998405 40.588386) (xy 202.080472 40.43485) (xy 202.131008 40.268254) (xy 202.148072 40.095) (xy 202.148072 38.645) (xy 202.131008 38.471746) (xy 202.080472 38.30515) (xy 201.998405 38.151614) (xy 201.887962 38.017038) (xy 201.753386 37.906595) (xy 201.59985 37.824528) (xy 201.433254 37.773992) (xy 201.26 37.756928) (xy 200.06 37.756928) (xy 199.886746 37.773992) (xy 199.72015 37.824528) (xy 199.566614 37.906595) (xy 199.432038 38.017038) (xy 199.321595 38.151614) (xy 199.267223 38.253337) (xy 199.215134 38.189866) (xy 198.989014 38.004294) (xy 198.731034 37.866401) (xy 198.451111 37.781487) (xy 198.16 37.752815) (xy 197.86889 37.781487) (xy 197.588967 37.866401) (xy 197.330987 38.004294) (xy 197.104866 38.189866) (xy 196.919294 38.415986) (xy 196.91 38.433374) (xy 196.900706 38.415986) (xy 196.715134 38.189866) (xy 196.489014 38.004294) (xy 196.231034 37.866401) (xy 195.951111 37.781487) (xy 195.66 37.752815) (xy 195.36889 37.781487) (xy 195.088967 37.866401) (xy 194.830987 38.004294) (xy 194.604866 38.189866) (xy 194.419294 38.415986) (xy 194.41 38.433374) (xy 194.400706 38.415986) (xy 194.215134 38.189866) (xy 193.989014 38.004294) (xy 193.731034 37.866401) (xy 193.451111 37.781487) (xy 193.16 37.752815) (xy 192.86889 37.781487) (xy 192.588967 37.866401) (xy 192.330987 38.004294) (xy 192.104866 38.189866) (xy 191.919294 38.415986) (xy 191.91 38.433374) (xy 191.900706 38.415986) (xy 191.715134 38.189866) (xy 191.489014 38.004294) (xy 191.231034 37.866401) (xy 190.951111 37.781487) (xy 190.66 37.752815) (xy 190.611893 37.757553) (xy 197.724103 30.645344) (xy 197.97374 30.695) (xy 198.26626 30.695) (xy 198.553158 30.637932) (xy 198.823411 30.52599) (xy 199.066632 30.363475) (xy 199.273475 30.156632) (xy 199.43599 29.913411) (xy 199.547932 29.643158) (xy 199.605 29.35626) (xy 199.605 29.06374) (xy 199.547932 28.776842) (xy 199.43599 28.506589) (xy 199.273475 28.263368) (xy 199.066632 28.056525) (xy 198.823411 27.89401) (xy 198.553158 27.782068) (xy 198.26626 27.725) (xy 197.97374 27.725) (xy 197.686842 27.782068) (xy 197.416589 27.89401) (xy 197.173368 28.056525) (xy 196.966525 28.263368) (xy 196.85 28.43776) (xy 196.733475 28.263368) (xy 196.526632 28.056525) (xy 196.283411 27.89401) (xy 196.013158 27.782068) (xy 195.72626 27.725) (xy 195.43374 27.725) (xy 195.146842 27.782068) (xy 194.876589 27.89401) (xy 194.633368 28.056525) (xy 194.501513 28.18838) (xy 194.479502 28.11582) (xy 194.420537 28.005506) (xy 194.341185 27.908815) (xy 194.244494 27.829463) (xy 194.13418 27.770498) (xy 194.014482 27.734188) (xy 193.89 27.721928) (xy 192.19 27.721928) (xy 192.065518 27.734188) (xy 191.94582 27.770498) (xy 191.835506 27.829463) (xy 191.738815 27.908815) (xy 191.659463 28.005506) (xy 191.600498 28.11582) (xy 191.564188 28.235518) (xy 191.551928 28.36) (xy 191.551928 29.658625) (xy 187.273786 33.936768) (xy 187.245741 33.959784) (xy 187.153892 34.071702) (xy 187.127042 34.121935) (xy 187.085642 34.199389) (xy 187.043613 34.337937) (xy 187.029422 34.482022) (xy 187.032979 34.518137) (xy 187.032978 69.621873) (xy 187.029422 69.657978) (xy 187.043613 69.802063) (xy 187.047325 69.814298) (xy 187.085641 69.94061) (xy 187.153891 70.068297) (xy 187.24574 70.180215) (xy 187.273786 70.203232) (xy 191.562134 74.491581) (xy 191.505 74.778816) (xy 191.505 75.081184) (xy 191.563989 75.377743) (xy 191.679701 75.657095) (xy 191.847688 75.908505) (xy 192.061495 76.122312) (xy 192.312905 76.290299) (xy 192.592257 76.406011) (xy 192.888816 76.465) (xy 193.191184 76.465) (xy 193.487743 76.406011) (xy 193.767095 76.290299) (xy 194.018505 76.122312) (xy 194.232312 75.908505) (xy 194.31 75.792237) (xy 194.387688 75.908505) (xy 194.601495 76.122312) (xy 194.852905 76.290299) (xy 195.132257 76.406011) (xy 195.428816 76.465) (xy 195.580909 76.465) (xy 184.434617 87.611292) (xy 184.407525 87.633526) (xy 184.3188 87.741638) (xy 184.252872 87.864981) (xy 184.212273 87.998817) (xy 184.20715 88.050835) (xy 184.200555 88.117795) (xy 184.127723 88.226795) (xy 184.06101 88.387855) (xy 184.027 88.558835) (xy 177.748 88.558835) (xy 177.748 86.382368) (xy 177.822277 86.271205) (xy 177.88899 86.110145) (xy 177.923 85.939165) (xy 177.923 85.764835) (xy 177.88899 85.593855) (xy 177.822277 85.432795) (xy 177.725424 85.287845) (xy 177.602155 85.164576) (xy 177.457205 85.067723) (xy 177.296145 85.00101) (xy 177.125165 84.967) (xy 176.950835 84.967) (xy 176.779855 85.00101) (xy 176.618795 85.067723) (xy 176.473845 85.164576) (xy 176.350576 85.287845) (xy 176.253723 85.432795) (xy 176.18701 85.593855) (xy 176.153 85.764835) (xy 176.153 85.939165) (xy 176.18701 86.110145) (xy 176.253723 86.271205) (xy 176.328001 86.382369) (xy 176.328 89.881125) (xy 176.324565 89.916) (xy 176.328 89.950875) (xy 176.328 89.950876) (xy 176.338273 90.055183) (xy 176.378872 90.189019) (xy 176.4448 90.312362) (xy 176.533525 90.420474) (xy 176.560617 90.442708) (xy 177.430909 91.313) (xy 162.56 91.313) (xy 162.535224 91.31544) (xy 162.511399 91.322667) (xy 162.489443 91.334403) (xy 162.470197 91.350197) (xy 162.454403 91.369443) (xy 162.442667 91.391399) (xy 162.43544 91.415224) (xy 162.433 91.44) (xy 162.433 119.99) (xy 157.012637 119.99) (xy 157.210269 119.842588) (xy 157.405178 119.626355) (xy 157.554157 119.376252) (xy 157.651481 119.101891) (xy 157.530814 118.872) (xy 156.337 118.872) (xy 156.337 118.892) (xy 156.083 118.892) (xy 156.083 118.872) (xy 153.797 118.872) (xy 153.797 118.892) (xy 153.543 118.892) (xy 153.543 118.872) (xy 151.257 118.872) (xy 151.257 118.892) (xy 151.003 118.892) (xy 151.003 118.872) (xy 148.717 118.872) (xy 148.717 118.892) (xy 148.463 118.892) (xy 148.463 118.872) (xy 147.26375 118.872) (xy 147.105 119.03075) (xy 147.101928 119.595) (xy 147.114188 119.719482) (xy 147.150498 119.83918) (xy 147.209463 119.949494) (xy 147.242705 119.99) (xy 144.312637 119.99) (xy 144.510269 119.842588) (xy 144.705178 119.626355) (xy 144.854157 119.376252) (xy 144.951481 119.101891) (xy 144.830814 118.872) (xy 143.637 118.872) (xy 143.637 118.892) (xy 143.383 118.892) (xy 143.383 118.872) (xy 141.097 118.872) (xy 141.097 118.892) (xy 140.843 118.892) (xy 140.843 118.872) (xy 138.557 118.872) (xy 138.557 118.892) (xy 138.303 118.892) (xy 138.303 118.872) (xy 136.017 118.872) (xy 136.017 118.892) (xy 135.763 118.892) (xy 135.763 118.872) (xy 134.56375 118.872) (xy 134.405 119.03075) (xy 134.401928 119.595) (xy 134.414188 119.719482) (xy 134.450498 119.83918) (xy 134.509463 119.949494) (xy 134.542705 119.99) (xy 125.961971 119.99) (xy 126.110766 119.928367) (xy 126.681558 119.546976) (xy 127.166976 119.061558) (xy 127.548367 118.490766) (xy 127.811073 117.856537) (xy 127.945 117.183242) (xy 127.945 116.496758) (xy 127.811073 115.823463) (xy 127.548367 115.189234) (xy 127.166976 114.618442) (xy 126.681558 114.133024) (xy 126.110766 113.751633) (xy 125.476537 113.488927) (xy 124.803242 113.355) (xy 124.116758 113.355) (xy 123.443463 113.488927) (xy 122.809234 113.751633) (xy 122.238442 114.133024) (xy 121.753024 114.618442) (xy 121.371633 115.189234) (xy 121.108927 115.823463) (xy 120.975 116.496758) (xy 120.975 117.183242) (xy 121.108927 117.856537) (xy 121.371633 118.490766) (xy 121.753024 119.061558) (xy 122.238442 119.546976) (xy 122.809234 119.928367) (xy 122.958029 119.99) (xy 30.711971 119.99) (xy 30.860766 119.928367) (xy 31.431558 119.546976) (xy 31.916976 119.061558) (xy 32.298367 118.490766) (xy 32.561073 117.856537) (xy 32.695 117.183242) (xy 32.695 116.496758) (xy 32.561073 115.823463) (xy 32.298367 115.189234) (xy 31.916976 114.618442) (xy 31.431558 114.133024) (xy 30.860766 113.751633) (xy 30.226537 113.488927) (xy 29.553242 113.355) (xy 28.866758 113.355) (xy 28.193463 113.488927) (xy 27.559234 113.751633) (xy 26.988442 114.133024) (xy 26.503024 114.618442) (xy 26.121633 115.189234) (xy 26.06 115.338029) (xy 26.06 112.815) (xy 134.401928 112.815) (xy 134.401928 114.515) (xy 134.414188 114.639482) (xy 134.450498 114.75918) (xy 134.509463 114.869494) (xy 134.563222 114.935) (xy 134.509463 115.000506) (xy 134.450498 115.11082) (xy 134.414188 115.230518) (xy 134.401928 115.355) (xy 134.401928 117.055) (xy 134.414188 117.179482) (xy 134.450498 117.29918) (xy 134.509463 117.409494) (xy 134.563222 117.475) (xy 134.509463 117.540506) (xy 134.450498 117.65082) (xy 134.414188 117.770518) (xy 134.401928 117.895) (xy 134.405 118.45925) (xy 134.56375 118.618) (xy 135.763 118.618) (xy 135.763 118.598) (xy 136.017 118.598) (xy 136.017 118.618) (xy 138.303 118.618) (xy 138.303 118.598) (xy 138.557 118.598) (xy 138.557 118.618) (xy 140.843 118.618) (xy 140.843 118.598) (xy 141.097 118.598) (xy 141.097 118.618) (xy 143.383 118.618) (xy 143.383 118.598) (xy 143.637 118.598) (xy 143.637 118.618) (xy 144.830814 118.618) (xy 144.951481 118.388109) (xy 144.854157 118.113748) (xy 144.705178 117.863645) (xy 144.510269 117.647412) (xy 144.280594 117.4761) (xy 144.456632 117.358475) (xy 144.663475 117.151632) (xy 144.82599 116.908411) (xy 144.937932 116.638158) (xy 144.995 116.35126) (xy 144.995 116.05874) (xy 144.937932 115.771842) (xy 144.82599 115.501589) (xy 144.663475 115.258368) (xy 144.456632 115.051525) (xy 144.28224 114.935) (xy 144.456632 114.818475) (xy 144.663475 114.611632) (xy 144.82599 114.368411) (xy 144.937932 114.098158) (xy 144.995 113.81126) (xy 144.995 113.51874) (xy 144.937932 113.231842) (xy 144.82599 112.961589) (xy 144.728043 112.815) (xy 147.101928 112.815) (xy 147.101928 114.515) (xy 147.114188 114.639482) (xy 147.150498 114.75918) (xy 147.209463 114.869494) (xy 147.263222 114.935) (xy 147.209463 115.000506) (xy 147.150498 115.11082) (xy 147.114188 115.230518) (xy 147.101928 115.355) (xy 147.101928 117.055) (xy 147.114188 117.179482) (xy 147.150498 117.29918) (xy 147.209463 117.409494) (xy 147.263222 117.475) (xy 147.209463 117.540506) (xy 147.150498 117.65082) (xy 147.114188 117.770518) (xy 147.101928 117.895) (xy 147.105 118.45925) (xy 147.26375 118.618) (xy 148.463 118.618) (xy 148.463 118.598) (xy 148.717 118.598) (xy 148.717 118.618) (xy 151.003 118.618) (xy 151.003 118.598) (xy 151.257 118.598) (xy 151.257 118.618) (xy 153.543 118.618) (xy 153.543 118.598) (xy 153.797 118.598) (xy 153.797 118.618) (xy 156.083 118.618) (xy 156.083 118.598) (xy 156.337 118.598) (xy 156.337 118.618) (xy 157.530814 118.618) (xy 157.651481 118.388109) (xy 157.554157 118.113748) (xy 157.405178 117.863645) (xy 157.210269 117.647412) (xy 156.980594 117.4761) (xy 157.156632 117.358475) (xy 157.363475 117.151632) (xy 157.52599 116.908411) (xy 157.637932 116.638158) (xy 157.695 116.35126) (xy 157.695 116.05874) (xy 157.637932 115.771842) (xy 157.52599 115.501589) (xy 157.363475 115.258368) (xy 157.156632 115.051525) (xy 156.98224 114.935) (xy 157.156632 114.818475) (xy 157.363475 114.611632) (xy 157.52599 114.368411) (xy 157.637932 114.098158) (xy 157.695 113.81126) (xy 157.695 113.51874) (xy 157.637932 113.231842) (xy 157.52599 112.961589) (xy 157.363475 112.718368) (xy 157.156632 112.511525) (xy 156.913411 112.34901) (xy 156.643158 112.237068) (xy 156.35626 112.18) (xy 156.06374 112.18) (xy 155.776842 112.237068) (xy 155.506589 112.34901) (xy 155.263368 112.511525) (xy 155.056525 112.718368) (xy 154.94 112.89276) (xy 154.823475 112.718368) (xy 154.616632 112.511525) (xy 154.373411 112.34901) (xy 154.103158 112.237068) (xy 153.81626 112.18) (xy 153.52374 112.18) (xy 153.236842 112.237068) (xy 152.966589 112.34901) (xy 152.723368 112.511525) (xy 152.516525 112.718368) (xy 152.4 112.89276) (xy 152.283475 112.718368) (xy 152.076632 112.511525) (xy 151.833411 112.34901) (xy 151.563158 112.237068) (xy 151.27626 112.18) (xy 150.98374 112.18) (xy 150.696842 112.237068) (xy 150.426589 112.34901) (xy 150.183368 112.511525) (xy 150.051513 112.64338) (xy 150.029502 112.57082) (xy 149.970537 112.460506) (xy 149.891185 112.363815) (xy 149.794494 112.284463) (xy 149.68418 112.225498) (xy 149.564482 112.189188) (xy 149.44 112.176928) (xy 147.74 112.176928) (xy 147.615518 112.189188) (xy 147.49582 112.225498) (xy 147.385506 112.284463) (xy 147.288815 112.363815) (xy 147.209463 112.460506) (xy 147.150498 112.57082) (xy 147.114188 112.690518) (xy 147.101928 112.815) (xy 144.728043 112.815) (xy 144.663475 112.718368) (xy 144.456632 112.511525) (xy 144.213411 112.34901) (xy 143.943158 112.237068) (xy 143.65626 112.18) (xy 143.36374 112.18) (xy 143.076842 112.237068) (xy 142.806589 112.34901) (xy 142.563368 112.511525) (xy 142.356525 112.718368) (xy 142.24 112.89276) (xy 142.123475 112.718368) (xy 141.916632 112.511525) (xy 141.673411 112.34901) (xy 141.403158 112.237068) (xy 141.11626 112.18) (xy 140.82374 112.18) (xy 140.536842 112.237068) (xy 140.266589 112.34901) (xy 140.023368 112.511525) (xy 139.816525 112.718368) (xy 139.7 112.89276) (xy 139.583475 112.718368) (xy 139.376632 112.511525) (xy 139.133411 112.34901) (xy 138.863158 112.237068) (xy 138.57626 112.18) (xy 138.28374 112.18) (xy 137.996842 112.237068) (xy 137.726589 112.34901) (xy 137.483368 112.511525) (xy 137.351513 112.64338) (xy 137.329502 112.57082) (xy 137.270537 112.460506) (xy 137.191185 112.363815) (xy 137.094494 112.284463) (xy 136.98418 112.225498) (xy 136.864482 112.189188) (xy 136.74 112.176928) (xy 135.04 112.176928) (xy 134.915518 112.189188) (xy 134.79582 112.225498) (xy 134.685506 112.284463) (xy 134.588815 112.363815) (xy 134.509463 112.460506) (xy 134.450498 112.57082) (xy 134.414188 112.690518) (xy 134.401928 112.815) (xy 26.06 112.815) (xy 26.06 101.448816) (xy 28.31 101.448816) (xy 28.31 101.751184) (xy 28.368989 102.047743) (xy 28.484701 102.327095) (xy 28.652688 102.578505) (xy 28.866495 102.792312) (xy 28.982763 102.87) (xy 28.866495 102.947688) (xy 28.652688 103.161495) (xy 28.484701 103.412905) (xy 28.368989 103.692257) (xy 28.31 103.988816) (xy 28.31 104.291184) (xy 28.368989 104.587743) (xy 28.484701 104.867095) (xy 28.652688 105.118505) (xy 28.866495 105.332312) (xy 29.117905 105.500299) (xy 29.397257 105.616011) (xy 29.693816 105.675) (xy 29.996184 105.675) (xy 30.292743 105.616011) (xy 30.572095 105.500299) (xy 30.823505 105.332312) (xy 31.037312 105.118505) (xy 31.205299 104.867095) (xy 31.321011 104.587743) (xy 31.38 104.291184) (xy 31.38 103.988816) (xy 31.321011 103.692257) (xy 31.205299 103.412905) (xy 31.037312 103.161495) (xy 30.823505 102.947688) (xy 30.707237 102.87) (xy 30.823505 102.792312) (xy 31.037312 102.578505) (xy 31.205299 102.327095) (xy 31.321011 102.047743) (xy 31.38 101.751184) (xy 31.38 101.448816) (xy 47.01 101.448816) (xy 47.01 101.751184) (xy 47.068989 102.047743) (xy 47.184701 102.327095) (xy 47.352688 102.578505) (xy 47.566495 102.792312) (xy 47.682763 102.87) (xy 47.566495 102.947688) (xy 47.352688 103.161495) (xy 47.184701 103.412905) (xy 47.068989 103.692257) (xy 47.01 103.988816) (xy 47.01 104.291184) (xy 47.068989 104.587743) (xy 47.184701 104.867095) (xy 47.352688 105.118505) (xy 47.566495 105.332312) (xy 47.817905 105.500299) (xy 48.097257 105.616011) (xy 48.393816 105.675) (xy 48.696184 105.675) (xy 48.992743 105.616011) (xy 49.087321 105.576835) (xy 143.387 105.576835) (xy 143.387 105.751165) (xy 143.42101 105.922145) (xy 143.487723 106.083205) (xy 143.584576 106.228155) (xy 143.707845 106.351424) (xy 143.852795 106.448277) (xy 144.013855 106.51499) (xy 144.184835 106.549) (xy 144.200356 106.549) (xy 144.25298 106.577128) (xy 144.386816 106.617727) (xy 144.491123 106.628) (xy 144.491124 106.628) (xy 144.525999 106.631435) (xy 144.560874 106.628) (xy 151.361632 106.628) (xy 151.472795 106.702277) (xy 151.633855 106.76899) (xy 151.804835 106.803) (xy 151.979165 106.803) (xy 152.150145 106.76899) (xy 152.311205 106.702277) (xy 152.456155 106.605424) (xy 152.579424 106.482155) (xy 152.676277 106.337205) (xy 152.74299 106.176145) (xy 152.777 106.005165) (xy 152.777 105.866) (xy 153.39364 105.866) (xy 153.504803 105.940277) (xy 153.665863 106.00699) (xy 153.836843 106.041) (xy 154.011173 106.041) (xy 154.182153 106.00699) (xy 154.343213 105.940277) (xy 154.488163 105.843424) (xy 154.611432 105.720155) (xy 154.708285 105.575205) (xy 154.774998 105.414145) (xy 154.809008 105.243165) (xy 154.809008 105.068835) (xy 154.774998 104.897855) (xy 154.708285 104.736795) (xy 154.611432 104.591845) (xy 154.488163 104.468576) (xy 154.343213 104.371723) (xy 154.182153 104.30501) (xy 154.011173 104.271) (xy 153.836843 104.271) (xy 153.665863 104.30501) (xy 153.504803 104.371723) (xy 153.39364 104.446) (xy 145.310368 104.446) (xy 145.199205 104.371723) (xy 145.038145 104.30501) (xy 144.867165 104.271) (xy 144.692835 104.271) (xy 144.521855 104.30501) (xy 144.360795 104.371723) (xy 144.215845 104.468576) (xy 144.092576 104.591845) (xy 143.995723 104.736795) (xy 143.95386 104.83786) (xy 143.852795 104.879723) (xy 143.707845 104.976576) (xy 143.584576 105.099845) (xy 143.487723 105.244795) (xy 143.42101 105.405855) (xy 143.387 105.576835) (xy 49.087321 105.576835) (xy 49.272095 105.500299) (xy 49.523505 105.332312) (xy 49.737312 105.118505) (xy 49.905299 104.867095) (xy 50.021011 104.587743) (xy 50.08 104.291184) (xy 50.08 103.988816) (xy 50.021011 103.692257) (xy 49.905299 103.412905) (xy 49.737312 103.161495) (xy 49.523505 102.947688) (xy 49.407237 102.87) (xy 49.523505 102.792312) (xy 49.737312 102.578505) (xy 49.905299 102.327095) (xy 50.021011 102.047743) (xy 50.08 101.751184) (xy 50.08 101.448816) (xy 50.021011 101.152257) (xy 49.905299 100.872905) (xy 49.737312 100.621495) (xy 49.523505 100.407688) (xy 49.272095 100.239701) (xy 48.992743 100.123989) (xy 48.696184 100.065) (xy 48.393816 100.065) (xy 48.097257 100.123989) (xy 47.817905 100.239701) (xy 47.566495 100.407688) (xy 47.352688 100.621495) (xy 47.184701 100.872905) (xy 47.068989 101.152257) (xy 47.01 101.448816) (xy 31.38 101.448816) (xy 31.321011 101.152257) (xy 31.205299 100.872905) (xy 31.037312 100.621495) (xy 30.823505 100.407688) (xy 30.572095 100.239701) (xy 30.292743 100.123989) (xy 29.996184 100.065) (xy 29.693816 100.065) (xy 29.397257 100.123989) (xy 29.117905 100.239701) (xy 28.866495 100.407688) (xy 28.652688 100.621495) (xy 28.484701 100.872905) (xy 28.368989 101.152257) (xy 28.31 101.448816) (xy 26.06 101.448816) (xy 26.06 95.52) (xy 34.604428 95.52) (xy 34.604428 97.52) (xy 34.616688 97.644482) (xy 34.652998 97.76418) (xy 34.711963 97.874494) (xy 34.791315 97.971185) (xy 34.888006 98.050537) (xy 34.99832 98.109502) (xy 35.118018 98.145812) (xy 35.2425 98.158072) (xy 37.1475 98.158072) (xy 37.271982 98.145812) (xy 37.39168 98.109502) (xy 37.501994 98.050537) (xy 37.598685 97.971185) (xy 37.678037 97.874494) (xy 37.727059 97.782781) (xy 37.868077 97.895969) (xy 38.143906 98.039571) (xy 38.36202 98.110563) (xy 38.608 97.990594) (xy 38.608 96.647) (xy 38.588 96.647) (xy 38.588 96.393) (xy 38.608 96.393) (xy 38.608 95.049406) (xy 38.862 95.049406) (xy 38.862 96.393) (xy 38.882 96.393) (xy 38.882 96.647) (xy 38.862 96.647) (xy 38.862 97.990594) (xy 39.10798 98.110563) (xy 39.326094 98.039571) (xy 39.601923 97.895969) (xy 39.844437 97.701315) (xy 39.999837 97.516101) (xy 40.147037 97.695463) (xy 40.388766 97.893845) (xy 40.664552 98.041255) (xy 40.963797 98.13203) (xy 41.275 98.162681) (xy 41.586204 98.13203) (xy 41.885449 98.041255) (xy 42.161235 97.893845) (xy 42.402963 97.695463) (xy 42.457534 97.628967) (xy 109.49 97.628967) (xy 109.49 97.951033) (xy 109.552832 98.266912) (xy 109.676082 98.564463) (xy 109.855013 98.832252) (xy 110.082748 99.059987) (xy 110.350537 99.238918) (xy 110.648088 99.362168) (xy 110.963967 99.425) (xy 111.286033 99.425) (xy 111.601912 99.362168) (xy 111.899463 99.238918) (xy 112.167252 99.059987) (xy 112.394987 98.832252) (xy 112.573918 98.564463) (xy 112.697168 98.266912) (xy 112.76 97.951033) (xy 112.76 97.628967) (xy 112.697168 97.313088) (xy 112.573918 97.015537) (xy 112.394987 96.747748) (xy 112.167252 96.520013) (xy 111.899463 96.341082) (xy 111.601912 96.217832) (xy 111.286033 96.155) (xy 110.963967 96.155) (xy 110.648088 96.217832) (xy 110.350537 96.341082) (xy 110.082748 96.520013) (xy 109.855013 96.747748) (xy 109.676082 97.015537) (xy 109.552832 97.313088) (xy 109.49 97.628967) (xy 42.457534 97.628967) (xy 42.601345 97.453734) (xy 42.748755 97.177948) (xy 42.83953 96.878703) (xy 42.8625 96.645485) (xy 42.8625 96.394514) (xy 42.83953 96.161296) (xy 42.748755 95.862051) (xy 42.601345 95.586265) (xy 42.402963 95.344537) (xy 42.161234 95.146155) (xy 41.885448 94.998745) (xy 41.586203 94.90797) (xy 41.275 94.877319) (xy 40.963796 94.90797) (xy 40.664551 94.998745) (xy 40.388765 95.146155) (xy 40.147037 95.344537) (xy 39.999838 95.5239) (xy 39.844437 95.338685) (xy 39.601923 95.144031) (xy 39.326094 95.000429) (xy 39.10798 94.929437) (xy 38.862 95.049406) (xy 38.608 95.049406) (xy 38.36202 94.929437) (xy 38.143906 95.000429) (xy 37.868077 95.144031) (xy 37.727059 95.257219) (xy 37.678037 95.165506) (xy 37.598685 95.068815) (xy 37.501994 94.989463) (xy 37.39168 94.930498) (xy 37.271982 94.894188) (xy 37.1475 94.881928) (xy 35.2425 94.881928) (xy 35.118018 94.894188) (xy 34.99832 94.930498) (xy 34.888006 94.989463) (xy 34.791315 95.068815) (xy 34.711963 95.165506) (xy 34.652998 95.27582) (xy 34.616688 95.395518) (xy 34.604428 95.52) (xy 26.06 95.52) (xy 26.06 93.77408) (xy 28.960525 93.77408) (xy 29.044208 94.028261) (xy 29.316775 94.159158) (xy 29.609642 94.234365) (xy 29.911553 94.250991) (xy 30.210907 94.208397) (xy 30.496199 94.108222) (xy 30.645792 94.028261) (xy 30.729475 93.77408) (xy 47.660525 93.77408) (xy 47.744208 94.028261) (xy 48.016775 94.159158) (xy 48.309642 94.234365) (xy 48.611553 94.250991) (xy 48.910907 94.208397) (xy 49.196199 94.108222) (xy 49.345792 94.028261) (xy 49.429475 93.77408) (xy 48.545 92.889605) (xy 47.660525 93.77408) (xy 30.729475 93.77408) (xy 29.845 92.889605) (xy 28.960525 93.77408) (xy 26.06 93.77408) (xy 26.06 92.776553) (xy 28.304009 92.776553) (xy 28.346603 93.075907) (xy 28.446778 93.361199) (xy 28.526739 93.510792) (xy 28.78092 93.594475) (xy 29.665395 92.71) (xy 30.024605 92.71) (xy 30.90908 93.594475) (xy 31.163261 93.510792) (xy 31.294158 93.238225) (xy 31.369365 92.945358) (xy 31.37866 92.776553) (xy 47.004009 92.776553) (xy 47.046603 93.075907) (xy 47.146778 93.361199) (xy 47.226739 93.510792) (xy 47.48092 93.594475) (xy 48.365395 92.71) (xy 48.724605 92.71) (xy 49.60908 93.594475) (xy 49.863261 93.510792) (xy 49.994158 93.238225) (xy 50.069365 92.945358) (xy 50.085991 92.643447) (xy 50.043397 92.344093) (xy 49.943222 92.058801) (xy 49.863261 91.909208) (xy 49.60908 91.825525) (xy 48.724605 92.71) (xy 48.365395 92.71) (xy 47.48092 91.825525) (xy 47.226739 91.909208) (xy 47.095842 92.181775) (xy 47.020635 92.474642) (xy 47.004009 92.776553) (xy 31.37866 92.776553) (xy 31.385991 92.643447) (xy 31.343397 92.344093) (xy 31.243222 92.058801) (xy 31.163261 91.909208) (xy 30.90908 91.825525) (xy 30.024605 92.71) (xy 29.665395 92.71) (xy 28.78092 91.825525) (xy 28.526739 91.909208) (xy 28.395842 92.181775) (xy 28.320635 92.474642) (xy 28.304009 92.776553) (xy 26.06 92.776553) (xy 26.06 91.23408) (xy 28.960525 91.23408) (xy 29.028319 91.44) (xy 28.960525 91.64592) (xy 29.845 92.530395) (xy 30.729475 91.64592) (xy 30.661681 91.44) (xy 30.729475 91.23408) (xy 47.660525 91.23408) (xy 47.728319 91.44) (xy 47.660525 91.64592) (xy 48.545 92.530395) (xy 49.429475 91.64592) (xy 49.361681 91.44) (xy 49.429475 91.23408) (xy 48.545 90.349605) (xy 47.660525 91.23408) (xy 30.729475 91.23408) (xy 29.845 90.349605) (xy 28.960525 91.23408) (xy 26.06 91.23408) (xy 26.06 90.236553) (xy 28.304009 90.236553) (xy 28.346603 90.535907) (xy 28.446778 90.821199) (xy 28.526739 90.970792) (xy 28.78092 91.054475) (xy 29.665395 90.17) (xy 30.024605 90.17) (xy 30.90908 91.054475) (xy 31.163261 90.970792) (xy 31.294158 90.698225) (xy 31.369365 90.405358) (xy 31.37866 90.236553) (xy 47.004009 90.236553) (xy 47.046603 90.535907) (xy 47.146778 90.821199) (xy 47.226739 90.970792) (xy 47.48092 91.054475) (xy 48.365395 90.17) (xy 48.724605 90.17) (xy 49.60908 91.054475) (xy 49.863261 90.970792) (xy 49.994158 90.698225) (xy 50.069365 90.405358) (xy 50.085991 90.103447) (xy 50.043397 89.804093) (xy 49.943222 89.518801) (xy 49.863261 89.369208) (xy 49.60908 89.285525) (xy 48.724605 90.17) (xy 48.365395 90.17) (xy 47.48092 89.285525) (xy 47.226739 89.369208) (xy 47.095842 89.641775) (xy 47.020635 89.934642) (xy 47.004009 90.236553) (xy 31.37866 90.236553) (xy 31.385991 90.103447) (xy 31.343397 89.804093) (xy 31.243222 89.518801) (xy 31.163261 89.369208) (xy 30.90908 89.285525) (xy 30.024605 90.17) (xy 29.665395 90.17) (xy 28.78092 89.285525) (xy 28.526739 89.369208) (xy 28.395842 89.641775) (xy 28.320635 89.934642) (xy 28.304009 90.236553) (xy 26.06 90.236553) (xy 26.06 89.10592) (xy 28.960525 89.10592) (xy 29.845 89.990395) (xy 30.729475 89.10592) (xy 47.660525 89.10592) (xy 48.545 89.990395) (xy 49.429475 89.10592) (xy 49.345792 88.851739) (xy 49.073225 88.720842) (xy 48.780358 88.645635) (xy 48.478447 88.629009) (xy 48.179093 88.671603) (xy 47.893801 88.771778) (xy 47.744208 88.851739) (xy 47.660525 89.10592) (xy 30.729475 89.10592) (xy 30.645792 88.851739) (xy 30.373225 88.720842) (xy 30.080358 88.645635) (xy 29.778447 88.629009) (xy 29.479093 88.671603) (xy 29.193801 88.771778) (xy 29.044208 88.851739) (xy 28.960525 89.10592) (xy 26.06 89.10592) (xy 26.06 82.804534) (xy 26.480442 83.224976) (xy 27.051234 83.606367) (xy 27.685463 83.869073) (xy 28.358758 84.003) (xy 29.045242 84.003) (xy 29.718537 83.869073) (xy 30.352766 83.606367) (xy 30.923558 83.224976) (xy 31.408976 82.739558) (xy 31.790367 82.168766) (xy 32.053073 81.534537) (xy 32.187 80.861242) (xy 32.187 80.174758) (xy 32.053073 79.501463) (xy 31.790367 78.867234) (xy 31.408976 78.296442) (xy 30.923558 77.811024) (xy 30.352766 77.429633) (xy 29.718537 77.166927) (xy 29.045242 77.033) (xy 28.358758 77.033) (xy 27.685463 77.166927) (xy 27.051234 77.429633) (xy 26.480442 77.811024) (xy 26.06 78.231466) (xy 26.06 70.993534) (xy 26.353442 71.286976) (xy 26.924234 71.668367) (xy 27.558463 71.931073) (xy 28.231758 72.065) (xy 28.918242 72.065) (xy 29.591537 71.931073) (xy 30.225766 71.668367) (xy 30.796558 71.286976) (xy 31.281976 70.801558) (xy 31.663367 70.230766) (xy 31.926073 69.596537) (xy 32.06 68.923242) (xy 32.06 68.236758) (xy 31.926073 67.563463) (xy 31.663367 66.929234) (xy 31.281976 66.358442) (xy 30.796558 65.873024) (xy 30.225766 65.491633) (xy 29.591537 65.228927) (xy 28.918242 65.095) (xy 28.231758 65.095) (xy 27.558463 65.228927) (xy 26.924234 65.491633) (xy 26.353442 65.873024) (xy 26.06 66.166466) (xy 26.06 58.928534) (xy 26.480442 59.348976) (xy 27.051234 59.730367) (xy 27.685463 59.993073) (xy 28.358758 60.127) (xy 29.045242 60.127) (xy 29.718537 59.993073) (xy 30.352766 59.730367) (xy 30.923558 59.348976) (xy 31.408976 58.863558) (xy 31.790367 58.292766) (xy 32.053073 57.658537) (xy 32.187 56.985242) (xy 32.187 56.298758) (xy 32.053073 55.625463) (xy 31.790367 54.991234) (xy 31.408976 54.420442) (xy 30.923558 53.935024) (xy 30.352766 53.553633) (xy 29.718537 53.290927) (xy 29.045242 53.157) (xy 28.358758 53.157) (xy 27.685463 53.290927) (xy 27.051234 53.553633) (xy 26.480442 53.935024) (xy 26.06 54.355466) (xy 26.06 42.375001) (xy 27.371443 42.375001) (xy 27.375 42.411116) (xy 27.374999 47.123894) (xy 27.371443 47.159999) (xy 27.374999 47.196103) (xy 27.385634 47.304083) (xy 27.427662 47.442631) (xy 27.495912 47.570318) (xy 27.587761 47.682236) (xy 27.615807 47.705253) (xy 28.07515 48.164596) (xy 28.010827 48.207576) (xy 27.887558 48.330845) (xy 27.790705 48.475795) (xy 27.723992 48.636855) (xy 27.689982 48.807835) (xy 27.689982 48.982165) (xy 27.723992 49.153145) (xy 27.790705 49.314205) (xy 27.887558 49.459155) (xy 28.010827 49.582424) (xy 28.155777 49.679277) (xy 28.316837 49.74599) (xy 28.40383 49.763294) (xy 28.710144 50.069608) (xy 28.645839 50.112576) (xy 28.52257 50.235845) (xy 28.425717 50.380795) (xy 28.359004 50.541855) (xy 28.324994 50.712835) (xy 28.324994 50.887165) (xy 28.359004 51.058145) (xy 28.425717 51.219205) (xy 28.52257 51.364155) (xy 28.645839 51.487424) (xy 28.790789 51.584277) (xy 28.951849 51.65099) (xy 29.038842 51.668294) (xy 32.285001 54.914454) (xy 32.285 69.813895) (xy 32.281444 69.85) (xy 32.295635 69.994085) (xy 32.303151 70.018861) (xy 32.337663 70.132632) (xy 32.405913 70.260319) (xy 32.497762 70.372237) (xy 32.525807 70.395253) (xy 34.082134 71.951581) (xy 34.025 72.238816) (xy 34.025 72.541184) (xy 34.083989 72.837743) (xy 34.199701 73.117095) (xy 34.367688 73.368505) (xy 34.581495 73.582312) (xy 34.832905 73.750299) (xy 35.112257 73.866011) (xy 35.408816 73.925) (xy 35.711184 73.925) (xy 36.007743 73.866011) (xy 36.287095 73.750299) (xy 36.538505 73.582312) (xy 36.666737 73.45408) (xy 37.215525 73.45408) (xy 37.299208 73.708261) (xy 37.571775 73.839158) (xy 37.864642 73.914365) (xy 38.166553 73.930991) (xy 38.465907 73.888397) (xy 38.751199 73.788222) (xy 38.900792 73.708261) (xy 38.984475 73.45408) (xy 38.1 72.569605) (xy 37.215525 73.45408) (xy 36.666737 73.45408) (xy 36.752312 73.368505) (xy 36.854951 73.214895) (xy 37.03592 73.274475) (xy 37.920395 72.39) (xy 38.279605 72.39) (xy 39.16408 73.274475) (xy 39.418261 73.190792) (xy 39.549158 72.918225) (xy 39.624365 72.625358) (xy 39.640991 72.323447) (xy 39.598397 72.024093) (xy 39.498222 71.738801) (xy 39.418261 71.589208) (xy 39.16408 71.505525) (xy 38.279605 72.39) (xy 37.920395 72.39) (xy 37.03592 71.505525) (xy 36.854951 71.565105) (xy 36.752312 71.411495) (xy 36.666737 71.32592) (xy 37.215525 71.32592) (xy 38.1 72.210395) (xy 38.984475 71.32592) (xy 38.900792 71.071739) (xy 38.628225 70.940842) (xy 38.335358 70.865635) (xy 38.033447 70.849009) (xy 37.734093 70.891603) (xy 37.448801 70.991778) (xy 37.299208 71.071739) (xy 37.215525 71.32592) (xy 36.666737 71.32592) (xy 36.538505 71.197688) (xy 36.422237 71.12) (xy 36.538505 71.042312) (xy 36.752312 70.828505) (xy 36.920299 70.577095) (xy 37.036011 70.297743) (xy 37.095 70.001184) (xy 37.095 69.698816) (xy 37.036011 69.402257) (xy 36.920299 69.122905) (xy 36.752312 68.871495) (xy 36.538505 68.657688) (xy 36.422237 68.58) (xy 36.538505 68.502312) (xy 36.752312 68.288505) (xy 36.920299 68.037095) (xy 37.036011 67.757743) (xy 37.095 67.461184) (xy 37.095 67.158816) (xy 37.036011 66.862257) (xy 36.920299 66.582905) (xy 36.752312 66.331495) (xy 36.538505 66.117688) (xy 36.422237 66.04) (xy 36.538505 65.962312) (xy 36.752312 65.748505) (xy 36.920299 65.497095) (xy 37.036011 65.217743) (xy 37.095 64.921184) (xy 37.095 64.618816) (xy 37.036011 64.322257) (xy 36.920299 64.042905) (xy 36.752312 63.791495) (xy 36.538505 63.577688) (xy 36.295 63.414983) (xy 36.295 51.829106) (xy 36.298556 51.793001) (xy 36.284365 51.648916) (xy 36.264757 51.584277) (xy 36.242337 51.510369) (xy 36.174087 51.382682) (xy 36.082238 51.270764) (xy 36.054193 51.247748) (xy 32.467563 47.661119) (xy 32.521157 47.632472) (xy 32.598792 47.383397) (xy 31.75 46.534605) (xy 31.735858 46.548748) (xy 31.556253 46.369143) (xy 31.570395 46.355) (xy 31.929605 46.355) (xy 32.778397 47.203792) (xy 33.027472 47.126157) (xy 33.153371 46.862117) (xy 33.225339 46.578589) (xy 33.240611 46.286469) (xy 33.198599 45.996981) (xy 33.100919 45.721253) (xy 33.027472 45.583843) (xy 32.778397 45.506208) (xy 31.929605 46.355) (xy 31.570395 46.355) (xy 31.556253 46.340858) (xy 31.735858 46.161253) (xy 31.75 46.175395) (xy 32.598792 45.326603) (xy 32.523486 45.085) (xy 32.598792 44.843397) (xy 31.75 43.994605) (xy 31.735858 44.008748) (xy 31.556253 43.829143) (xy 31.570395 43.815) (xy 31.929605 43.815) (xy 32.778397 44.663792) (xy 33.027472 44.586157) (xy 33.153371 44.322117) (xy 33.225339 44.038589) (xy 33.240611 43.746469) (xy 33.198599 43.456981) (xy 33.100919 43.181253) (xy 33.027472 43.043843) (xy 32.778397 42.966208) (xy 31.929605 43.815) (xy 31.570395 43.815) (xy 31.556253 43.800858) (xy 31.735858 43.621253) (xy 31.75 43.635395) (xy 32.598792 42.786603) (xy 32.523486 42.545) (xy 32.598792 42.303397) (xy 31.75 41.454605) (xy 31.735858 41.468748) (xy 31.556253 41.289143) (xy 31.570395 41.275) (xy 31.929605 41.275) (xy 32.778397 42.123792) (xy 33.027472 42.046157) (xy 33.153371 41.782117) (xy 33.225339 41.498589) (xy 33.240611 41.206469) (xy 33.198599 40.916981) (xy 33.100919 40.641253) (xy 33.027472 40.503843) (xy 32.778397 40.426208) (xy 31.929605 41.275) (xy 31.570395 41.275) (xy 31.556253 41.260858) (xy 31.735858 41.081253) (xy 31.75 41.095395) (xy 32.598792 40.246603) (xy 32.523486 40.005) (xy 32.598792 39.763397) (xy 31.75 38.914605) (xy 31.735858 38.928748) (xy 31.556253 38.749143) (xy 31.570395 38.735) (xy 31.929605 38.735) (xy 32.778397 39.583792) (xy 33.027472 39.506157) (xy 33.153371 39.242117) (xy 33.225339 38.958589) (xy 33.240611 38.666469) (xy 33.198599 38.376981) (xy 33.100919 38.101253) (xy 33.027472 37.963843) (xy 32.778397 37.886208) (xy 31.929605 38.735) (xy 31.570395 38.735) (xy 30.721603 37.886208) (xy 30.66358 37.904293) (xy 30.630472 37.79515) (xy 30.583143 37.706603) (xy 30.901208 37.706603) (xy 31.75 38.555395) (xy 32.598792 37.706603) (xy 32.521157 37.457528) (xy 32.257117 37.331629) (xy 31.973589 37.259661) (xy 31.681469 37.244389) (xy 31.391981 37.286401) (xy 31.116253 37.384081) (xy 30.978843 37.457528) (xy 30.901208 37.706603) (xy 30.583143 37.706603) (xy 30.548405 37.641614) (xy 30.437962 37.507038) (xy 30.303386 37.396595) (xy 30.14985 37.314528) (xy 29.983254 37.263992) (xy 29.81 37.246928) (xy 28.61 37.246928) (xy 28.436746 37.263992) (xy 28.27015 37.314528) (xy 28.116614 37.396595) (xy 27.982038 37.507038) (xy 27.871595 37.641614) (xy 27.789528 37.79515) (xy 27.738992 37.961746) (xy 27.721928 38.135) (xy 27.721928 39.335) (xy 27.738992 39.508254) (xy 27.789528 39.67485) (xy 27.871595 39.828386) (xy 27.982038 39.962962) (xy 28.116614 40.073405) (xy 28.243608 40.141285) (xy 28.056525 40.328368) (xy 27.89401 40.571589) (xy 27.782068 40.841842) (xy 27.725 41.12874) (xy 27.725 41.42126) (xy 27.774656 41.670897) (xy 27.615807 41.829747) (xy 27.587762 41.852763) (xy 27.495913 41.964681) (xy 27.452363 42.046157) (xy 27.427663 42.092368) (xy 27.385634 42.230916) (xy 27.371443 42.375001) (xy 26.06 42.375001) (xy 26.06 34.99002) (xy 44.281424 34.99002) (xy 44.28498 35.026125) (xy 44.284981 65.023845) (xy 44.281424 65.05996) (xy 44.295615 65.204045) (xy 44.326736 65.306634) (xy 44.337644 65.342593) (xy 44.405894 65.47028) (xy 44.497743 65.582198) (xy 44.525788 65.605214) (xy 50.065 71.144427) (xy 50.065001 73.574983) (xy 49.821495 73.737688) (xy 49.607688 73.951495) (xy 49.439701 74.202905) (xy 49.323989 74.482257) (xy 49.265 74.778816) (xy 49.265 75.081184) (xy 49.323989 75.377743) (xy 49.439701 75.657095) (xy 49.607688 75.908505) (xy 49.821495 76.122312) (xy 50.072905 76.290299) (xy 50.352257 76.406011) (xy 50.648816 76.465) (xy 50.951184 76.465) (xy 51.247743 76.406011) (xy 51.527095 76.290299) (xy 51.778505 76.122312) (xy 51.992312 75.908505) (xy 52.07 75.792237) (xy 52.147688 75.908505) (xy 52.361495 76.122312) (xy 52.612905 76.290299) (xy 52.892257 76.406011) (xy 53.188816 76.465) (xy 53.491184 76.465) (xy 53.787743 76.406011) (xy 54.067095 76.290299) (xy 54.318505 76.122312) (xy 54.532312 75.908505) (xy 54.61 75.792237) (xy 54.687688 75.908505) (xy 54.901495 76.122312) (xy 55.152905 76.290299) (xy 55.432257 76.406011) (xy 55.728816 76.465) (xy 56.031184 76.465) (xy 56.327743 76.406011) (xy 56.344837 76.39893) (xy 68.210926 88.26502) (xy 68.237008 88.396145) (xy 68.303721 88.557205) (xy 68.400574 88.702155) (xy 68.523843 88.825424) (xy 68.668793 88.922277) (xy 68.829853 88.98899) (xy 69.000833 89.023) (xy 69.175163 89.023) (xy 69.346143 88.98899) (xy 69.507203 88.922277) (xy 69.652153 88.825424) (xy 69.775422 88.702155) (xy 69.872275 88.557205) (xy 69.938988 88.396145) (xy 69.972998 88.225165) (xy 69.972998 88.050835) (xy 69.938988 87.879855) (xy 69.872275 87.718795) (xy 69.775422 87.573845) (xy 69.652153 87.450576) (xy 69.507203 87.353723) (xy 69.346143 87.28701) (xy 69.215018 87.260928) (xy 57.348929 75.39484) (xy 57.356011 75.377743) (xy 57.415 75.081184) (xy 57.415 74.778816) (xy 57.356011 74.482257) (xy 57.240299 74.202905) (xy 57.072312 73.951495) (xy 56.858505 73.737688) (xy 56.607095 73.569701) (xy 56.327743 73.453989) (xy 56.031184 73.395) (xy 55.728816 73.395) (xy 55.441581 73.452134) (xy 46.455 64.465554) (xy 46.455 56.998816) (xy 46.885 56.998816) (xy 46.885 57.301184) (xy 46.943989 57.597743) (xy 47.059701 57.877095) (xy 47.227688 58.128505) (xy 47.441495 58.342312) (xy 47.692905 58.510299) (xy 47.972257 58.626011) (xy 48.268816 58.685) (xy 48.571184 58.685) (xy 48.867743 58.626011) (xy 49.147095 58.510299) (xy 49.398505 58.342312) (xy 49.612312 58.128505) (xy 49.67 58.042169) (xy 49.727688 58.128505) (xy 49.941495 58.342312) (xy 50.192905 58.510299) (xy 50.472257 58.626011) (xy 50.768816 58.685) (xy 51.071184 58.685) (xy 51.367743 58.626011) (xy 51.647095 58.510299) (xy 51.898505 58.342312) (xy 52.112312 58.128505) (xy 52.17 58.042169) (xy 52.227688 58.128505) (xy 52.441495 58.342312) (xy 52.692905 58.510299) (xy 52.972257 58.626011) (xy 53.268816 58.685) (xy 53.571184 58.685) (xy 53.867743 58.626011) (xy 54.147095 58.510299) (xy 54.398505 58.342312) (xy 54.612312 58.128505) (xy 54.67 58.042169) (xy 54.727688 58.128505) (xy 54.941495 58.342312) (xy 55.192905 58.510299) (xy 55.472257 58.626011) (xy 55.768816 58.685) (xy 56.071184 58.685) (xy 56.367743 58.626011) (xy 56.647095 58.510299) (xy 56.898505 58.342312) (xy 57.112312 58.128505) (xy 57.17 58.042169) (xy 57.227688 58.128505) (xy 57.441495 58.342312) (xy 57.692905 58.510299) (xy 57.972257 58.626011) (xy 58.268816 58.685) (xy 58.571184 58.685) (xy 58.867743 58.626011) (xy 59.147095 58.510299) (xy 59.398505 58.342312) (xy 59.612312 58.128505) (xy 59.780299 57.877095) (xy 59.896011 57.597743) (xy 59.955 57.301184) (xy 59.955 56.998816) (xy 59.896011 56.702257) (xy 59.780299 56.422905) (xy 59.612312 56.171495) (xy 59.455 56.014183) (xy 59.455 40.864613) (xy 59.513386 40.833405) (xy 59.647962 40.722962) (xy 59.758405 40.588386) (xy 59.840472 40.43485) (xy 59.891008 40.268254) (xy 59.908072 40.095) (xy 59.908072 38.645) (xy 59.891008 38.471746) (xy 59.840472 38.30515) (xy 59.758405 38.151614) (xy 59.647962 38.017038) (xy 59.513386 37.906595) (xy 59.35985 37.824528) (xy 59.193254 37.773992) (xy 59.02 37.756928) (xy 57.82 37.756928) (xy 57.646746 37.773992) (xy 57.48015 37.824528) (xy 57.326614 37.906595) (xy 57.192038 38.017038) (xy 57.081595 38.151614) (xy 57.027223 38.253337) (xy 56.975134 38.189866) (xy 56.749014 38.004294) (xy 56.491034 37.866401) (xy 56.211111 37.781487) (xy 55.92 37.752815) (xy 55.62889 37.781487) (xy 55.348967 37.866401) (xy 55.090987 38.004294) (xy 54.864866 38.189866) (xy 54.679294 38.415986) (xy 54.67 38.433374) (xy 54.660706 38.415986) (xy 54.475134 38.189866) (xy 54.249014 38.004294) (xy 53.991034 37.866401) (xy 53.711111 37.781487) (xy 53.42 37.752815) (xy 53.12889 37.781487) (xy 52.848967 37.866401) (xy 52.590987 38.004294) (xy 52.364866 38.189866) (xy 52.179294 38.415986) (xy 52.17 38.433374) (xy 52.160706 38.415986) (xy 51.975134 38.189866) (xy 51.749014 38.004294) (xy 51.491034 37.866401) (xy 51.211111 37.781487) (xy 50.92 37.752815) (xy 50.62889 37.781487) (xy 50.348967 37.866401) (xy 50.090987 38.004294) (xy 49.864866 38.189866) (xy 49.679294 38.415986) (xy 49.67 38.433374) (xy 49.660706 38.415986) (xy 49.475134 38.189866) (xy 49.249014 38.004294) (xy 48.991034 37.866401) (xy 48.711111 37.781487) (xy 48.42 37.752815) (xy 48.12889 37.781487) (xy 47.848967 37.866401) (xy 47.590987 38.004294) (xy 47.364866 38.189866) (xy 47.179294 38.415986) (xy 47.041401 38.673966) (xy 46.956487 38.953889) (xy 46.935 39.17205) (xy 46.935 39.567949) (xy 46.956487 39.78611) (xy 47.041401 40.066033) (xy 47.179294 40.324013) (xy 47.364866 40.550134) (xy 47.385 40.566658) (xy 47.385001 56.014182) (xy 47.227688 56.171495) (xy 47.059701 56.422905) (xy 46.943989 56.702257) (xy 46.885 56.998816) (xy 46.455 56.998816) (xy 46.455 37.629434) (xy 49.094414 34.99002) (xy 63.331424 34.99002) (xy 63.33498 35.026125) (xy 63.334981 69.113865) (xy 63.331424 69.14998) (xy 63.345615 69.294065) (xy 63.378958 69.403979) (xy 63.387644 69.432613) (xy 63.455894 69.5603) (xy 63.547743 69.672218) (xy 63.575788 69.695234) (xy 68.372134 74.491581) (xy 68.315 74.778816) (xy 68.315 75.081184) (xy 68.373989 75.377743) (xy 68.489701 75.657095) (xy 68.657688 75.908505) (xy 68.871495 76.122312) (xy 69.122905 76.290299) (xy 69.402257 76.406011) (xy 69.698816 76.465) (xy 70.001184 76.465) (xy 70.297743 76.406011) (xy 70.577095 76.290299) (xy 70.828505 76.122312) (xy 71.042312 75.908505) (xy 71.12 75.792237) (xy 71.197688 75.908505) (xy 71.411495 76.122312) (xy 71.662905 76.290299) (xy 71.942257 76.406011) (xy 72.238816 76.465) (xy 72.541184 76.465) (xy 72.837743 76.406011) (xy 73.117095 76.290299) (xy 73.368505 76.122312) (xy 73.582312 75.908505) (xy 73.66 75.792237) (xy 73.737688 75.908505) (xy 73.951495 76.122312) (xy 74.202905 76.290299) (xy 74.482257 76.406011) (xy 74.778816 76.465) (xy 75.081184 76.465) (xy 75.377743 76.406011) (xy 75.39484 76.398929) (xy 88.022929 89.027018) (xy 88.049012 89.158145) (xy 88.115725 89.319205) (xy 88.212578 89.464155) (xy 88.335847 89.587424) (xy 88.480797 89.684277) (xy 88.641857 89.75099) (xy 88.812837 89.785) (xy 88.987167 89.785) (xy 89.158147 89.75099) (xy 89.319207 89.684277) (xy 89.464157 89.587424) (xy 89.587426 89.464155) (xy 89.684279 89.319205) (xy 89.750992 89.158145) (xy 89.785002 88.987165) (xy 89.785002 88.812835) (xy 89.750992 88.641855) (xy 89.684279 88.480795) (xy 89.587426 88.335845) (xy 89.464157 88.212576) (xy 89.319207 88.115723) (xy 89.158147 88.04901) (xy 89.02702 88.022927) (xy 76.39893 75.394837) (xy 76.406011 75.377743) (xy 76.465 75.081184) (xy 76.465 74.778816) (xy 76.406011 74.482257) (xy 76.290299 74.202905) (xy 76.122312 73.951495) (xy 75.908505 73.737688) (xy 75.657095 73.569701) (xy 75.377743 73.453989) (xy 75.081184 73.395) (xy 74.778816 73.395) (xy 74.491581 73.452134) (xy 65.505 64.465554) (xy 65.505 39.674446) (xy 65.985 39.194446) (xy 65.985 39.567949) (xy 66.006487 39.78611) (xy 66.091401 40.066033) (xy 66.229294 40.324013) (xy 66.414866 40.550134) (xy 66.435001 40.566658) (xy 66.435 56.014183) (xy 66.277688 56.171495) (xy 66.109701 56.422905) (xy 65.993989 56.702257) (xy 65.935 56.998816) (xy 65.935 57.301184) (xy 65.993989 57.597743) (xy 66.109701 57.877095) (xy 66.277688 58.128505) (xy 66.491495 58.342312) (xy 66.742905 58.510299) (xy 67.022257 58.626011) (xy 67.318816 58.685) (xy 67.621184 58.685) (xy 67.917743 58.626011) (xy 68.197095 58.510299) (xy 68.448505 58.342312) (xy 68.662312 58.128505) (xy 68.72 58.042169) (xy 68.777688 58.128505) (xy 68.991495 58.342312) (xy 69.242905 58.510299) (xy 69.522257 58.626011) (xy 69.818816 58.685) (xy 70.121184 58.685) (xy 70.417743 58.626011) (xy 70.697095 58.510299) (xy 70.948505 58.342312) (xy 71.162312 58.128505) (xy 71.22 58.042169) (xy 71.277688 58.128505) (xy 71.491495 58.342312) (xy 71.742905 58.510299) (xy 72.022257 58.626011) (xy 72.318816 58.685) (xy 72.621184 58.685) (xy 72.917743 58.626011) (xy 73.197095 58.510299) (xy 73.448505 58.342312) (xy 73.662312 58.128505) (xy 73.72 58.042169) (xy 73.777688 58.128505) (xy 73.991495 58.342312) (xy 74.242905 58.510299) (xy 74.522257 58.626011) (xy 74.818816 58.685) (xy 75.121184 58.685) (xy 75.417743 58.626011) (xy 75.697095 58.510299) (xy 75.948505 58.342312) (xy 76.162312 58.128505) (xy 76.22 58.042169) (xy 76.277688 58.128505) (xy 76.491495 58.342312) (xy 76.742905 58.510299) (xy 77.022257 58.626011) (xy 77.318816 58.685) (xy 77.621184 58.685) (xy 77.917743 58.626011) (xy 78.197095 58.510299) (xy 78.448505 58.342312) (xy 78.662312 58.128505) (xy 78.830299 57.877095) (xy 78.946011 57.597743) (xy 79.005 57.301184) (xy 79.005 56.998816) (xy 78.946011 56.702257) (xy 78.830299 56.422905) (xy 78.662312 56.171495) (xy 78.505 56.014183) (xy 78.505 40.864613) (xy 78.563386 40.833405) (xy 78.697962 40.722962) (xy 78.808405 40.588386) (xy 78.890472 40.43485) (xy 78.941008 40.268254) (xy 78.958072 40.095) (xy 78.958072 38.645) (xy 78.941008 38.471746) (xy 78.890472 38.30515) (xy 78.808405 38.151614) (xy 78.697962 38.017038) (xy 78.563386 37.906595) (xy 78.40985 37.824528) (xy 78.243254 37.773992) (xy 78.07 37.756928) (xy 76.87 37.756928) (xy 76.696746 37.773992) (xy 76.53015 37.824528) (xy 76.376614 37.906595) (xy 76.242038 38.017038) (xy 76.131595 38.151614) (xy 76.077223 38.253337) (xy 76.025134 38.189866) (xy 75.799014 38.004294) (xy 75.541034 37.866401) (xy 75.261111 37.781487) (xy 74.97 37.752815) (xy 74.67889 37.781487) (xy 74.398967 37.866401) (xy 74.140987 38.004294) (xy 73.914866 38.189866) (xy 73.729294 38.415986) (xy 73.72 38.433374) (xy 73.710706 38.415986) (xy 73.525134 38.189866) (xy 73.299014 38.004294) (xy 73.041034 37.866401) (xy 72.761111 37.781487) (xy 72.47 37.752815) (xy 72.17889 37.781487) (xy 71.898967 37.866401) (xy 71.640987 38.004294) (xy 71.414866 38.189866) (xy 71.229294 38.415986) (xy 71.22 38.433374) (xy 71.210706 38.415986) (xy 71.025134 38.189866) (xy 70.799014 38.004294) (xy 70.541034 37.866401) (xy 70.261111 37.781487) (xy 69.97 37.752815) (xy 69.67889 37.781487) (xy 69.398967 37.866401) (xy 69.140987 38.004294) (xy 68.914866 38.189866) (xy 68.729294 38.415986) (xy 68.72 38.433374) (xy 68.710706 38.415986) (xy 68.525134 38.189866) (xy 68.299014 38.004294) (xy 68.041034 37.866401) (xy 67.761111 37.781487) (xy 67.47 37.752815) (xy 67.421893 37.757553) (xy 70.189426 34.99002) (xy 82.381424 34.99002) (xy 82.38498 35.026125) (xy 82.384981 69.113865) (xy 82.381424 69.14998) (xy 82.395615 69.294065) (xy 82.428958 69.403979) (xy 82.437644 69.432613) (xy 82.505894 69.5603) (xy 82.597743 69.672218) (xy 82.625788 69.695234) (xy 87.422134 74.491581) (xy 87.365 74.778816) (xy 87.365 75.081184) (xy 87.423989 75.377743) (xy 87.539701 75.657095) (xy 87.707688 75.908505) (xy 87.921495 76.122312) (xy 88.172905 76.290299) (xy 88.452257 76.406011) (xy 88.748816 76.465) (xy 89.051184 76.465) (xy 89.347743 76.406011) (xy 89.627095 76.290299) (xy 89.878505 76.122312) (xy 90.092312 75.908505) (xy 90.17 75.792237) (xy 90.247688 75.908505) (xy 90.461495 76.122312) (xy 90.712905 76.290299) (xy 90.992257 76.406011) (xy 91.288816 76.465) (xy 91.591184 76.465) (xy 91.887743 76.406011) (xy 92.167095 76.290299) (xy 92.418505 76.122312) (xy 92.632312 75.908505) (xy 92.71 75.792237) (xy 92.787688 75.908505) (xy 93.001495 76.122312) (xy 93.252905 76.290299) (xy 93.27 76.29738) (xy 93.270001 89.004628) (xy 93.195721 89.115795) (xy 93.129008 89.276855) (xy 93.094998 89.447835) (xy 93.094998 89.622165) (xy 93.129008 89.793145) (xy 93.195721 89.954205) (xy 93.292574 90.099155) (xy 93.415843 90.222424) (xy 93.560793 90.319277) (xy 93.721853 90.38599) (xy 93.892833 90.42) (xy 94.067163 90.42) (xy 94.238143 90.38599) (xy 94.399203 90.319277) (xy 94.544153 90.222424) (xy 94.667422 90.099155) (xy 94.764275 89.954205) (xy 94.830988 89.793145) (xy 94.864998 89.622165) (xy 94.864998 89.447835) (xy 94.830988 89.276855) (xy 94.764275 89.115795) (xy 94.69 89.004635) (xy 94.69 80.042418) (xy 95.86 80.042418) (xy 95.862802 80.070864) (xy 95.862747 80.078682) (xy 95.863646 80.087853) (xy 95.889554 80.334357) (xy 95.901589 80.392986) (xy 95.912792 80.451716) (xy 95.915456 80.460538) (xy 95.988751 80.697314) (xy 96.011931 80.752457) (xy 96.034339 80.80792) (xy 96.038665 80.816054) (xy 96.038667 80.816059) (xy 96.03867 80.816064) (xy 96.156553 81.034086) (xy 96.189988 81.083654) (xy 96.222759 81.133735) (xy 96.228584 81.140876) (xy 96.386577 81.331856) (xy 96.429012 81.373995) (xy 96.470875 81.416745) (xy 96.477976 81.422618) (xy 96.670053 81.579273) (xy 96.719875 81.612374) (xy 96.769237 81.646173) (xy 96.777343 81.650556) (xy 96.996191 81.766919) (xy 97.051479 81.789707) (xy 97.106475 81.813279) (xy 97.115278 81.816003) (xy 97.352559 81.887643) (xy 97.411246 81.899264) (xy 97.469752 81.9117) (xy 97.478915 81.912663) (xy 97.478917 81.912663) (xy 97.725595 81.93685) (xy 97.725598 81.93685) (xy 97.757581 81.94) (xy 116.872419 81.94) (xy 116.900865 81.937198) (xy 116.908682 81.937253) (xy 116.917853 81.936354) (xy 117.164357 81.910446) (xy 117.222986 81.898411) (xy 117.281716 81.887208) (xy 117.290532 81.884546) (xy 117.290536 81.884545) (xy 117.290539 81.884544) (xy 117.527314 81.811249) (xy 117.582457 81.788069) (xy 117.63792 81.765661) (xy 117.646054 81.761335) (xy 117.646059 81.761333) (xy 117.646064 81.76133) (xy 117.864086 81.643447) (xy 117.913654 81.610012) (xy 117.963735 81.577241) (xy 117.970876 81.571416) (xy 118.161856 81.413423) (xy 118.203995 81.370988) (xy 118.246745 81.329125) (xy 118.252618 81.322024) (xy 118.409273 81.129947) (xy 118.442374 81.080125) (xy 118.476173 81.030763) (xy 118.480556 81.022657) (xy 118.596919 80.803809) (xy 118.619707 80.748521) (xy 118.643279 80.693525) (xy 118.646003 80.684722) (xy 118.717643 80.447441) (xy 118.729264 80.388754) (xy 118.7417 80.330248) (xy 118.742663 80.321083) (xy 118.76685 80.074405) (xy 118.76685 80.074402) (xy 118.77 80.042419) (xy 118.77 64.737581) (xy 118.767198 64.709135) (xy 118.767253 64.701318) (xy 118.766354 64.692147) (xy 118.740446 64.445644) (xy 118.728414 64.387028) (xy 118.717208 64.328284) (xy 118.714544 64.319462) (xy 118.641249 64.082686) (xy 118.618074 64.027555) (xy 118.595661 63.97208) (xy 118.591334 63.963944) (xy 118.473446 63.745914) (xy 118.440012 63.696346) (xy 118.40724 63.646265) (xy 118.401416 63.639124) (xy 118.243423 63.448144) (xy 118.200988 63.406005) (xy 118.159125 63.363255) (xy 118.152024 63.357381) (xy 117.959946 63.200727) (xy 117.910169 63.167655) (xy 117.860763 63.133826) (xy 117.852657 63.129444) (xy 117.633809 63.013081) (xy 117.578532 62.990298) (xy 117.523525 62.966721) (xy 117.514722 62.963997) (xy 117.277441 62.892357) (xy 117.218754 62.880736) (xy 117.160248 62.8683) (xy 117.151085 62.867337) (xy 117.151083 62.867337) (xy 116.904405 62.84315) (xy 116.904402 62.84315) (xy 116.872419 62.84) (xy 97.757581 62.84) (xy 97.729135 62.842802) (xy 97.721318 62.842747) (xy 97.712147 62.843646) (xy 97.465644 62.869554) (xy 97.407028 62.881586) (xy 97.348284 62.892792) (xy 97.339462 62.895456) (xy 97.102686 62.968751) (xy 97.047555 62.991926) (xy 96.99208 63.014339) (xy 96.983944 63.018666) (xy 96.765914 63.136554) (xy 96.716346 63.169988) (xy 96.666265 63.20276) (xy 96.659124 63.208584) (xy 96.468144 63.366577) (xy 96.426005 63.409012) (xy 96.383255 63.450875) (xy 96.377381 63.457976) (xy 96.220727 63.650054) (xy 96.187655 63.699831) (xy 96.153826 63.749237) (xy 96.149444 63.757343) (xy 96.033081 63.976191) (xy 96.010308 64.031444) (xy 95.986721 64.086475) (xy 95.983997 64.095278) (xy 95.912357 64.332559) (xy 95.900736 64.391246) (xy 95.8883 64.449752) (xy 95.887337 64.458917) (xy 95.86315 64.705595) (xy 95.86315 64.705608) (xy 95.860001 64.737581) (xy 95.86 80.042418) (xy 94.69 80.042418) (xy 94.69 76.29738) (xy 94.707095 76.290299) (xy 94.958505 76.122312) (xy 95.172312 75.908505) (xy 95.340299 75.657095) (xy 95.456011 75.377743) (xy 95.515 75.081184) (xy 95.515 74.778816) (xy 95.456011 74.482257) (xy 95.340299 74.202905) (xy 95.172312 73.951495) (xy 94.958505 73.737688) (xy 94.707095 73.569701) (xy 94.427743 73.453989) (xy 94.131184 73.395) (xy 93.828816 73.395) (xy 93.541581 73.452134) (xy 93.255258 73.165812) (xy 93.232238 73.137762) (xy 93.12032 73.045913) (xy 92.992633 72.977663) (xy 92.854085 72.935635) (xy 92.746105 72.925) (xy 92.71 72.921444) (xy 92.673895 72.925) (xy 90.474447 72.925) (xy 84.555 67.005554) (xy 84.555 65.696758) (xy 87.955 65.696758) (xy 87.955 66.383242) (xy 88.088927 67.056537) (xy 88.351633 67.690766) (xy 88.733024 68.261558) (xy 89.218442 68.746976) (xy 89.789234 69.128367) (xy 90.423463 69.391073) (xy 91.096758 69.525) (xy 91.783242 69.525) (xy 92.456537 69.391073) (xy 93.090766 69.128367) (xy 93.661558 68.746976) (xy 94.146976 68.261558) (xy 94.528367 67.690766) (xy 94.791073 67.056537) (xy 94.925 66.383242) (xy 94.925 65.696758) (xy 94.791073 65.023463) (xy 94.528367 64.389234) (xy 94.146976 63.818442) (xy 93.661558 63.333024) (xy 93.090766 62.951633) (xy 92.456537 62.688927) (xy 91.783242 62.555) (xy 91.096758 62.555) (xy 90.423463 62.688927) (xy 89.789234 62.951633) (xy 89.218442 63.333024) (xy 88.733024 63.818442) (xy 88.351633 64.389234) (xy 88.088927 65.023463) (xy 87.955 65.696758) (xy 84.555 65.696758) (xy 84.555 39.674446) (xy 85.035 39.194446) (xy 85.035 39.567949) (xy 85.056487 39.78611) (xy 85.141401 40.066033) (xy 85.279294 40.324013) (xy 85.464866 40.550134) (xy 85.485001 40.566658) (xy 85.485 56.014183) (xy 85.327688 56.171495) (xy 85.159701 56.422905) (xy 85.043989 56.702257) (xy 84.985 56.998816) (xy 84.985 57.301184) (xy 85.043989 57.597743) (xy 85.159701 57.877095) (xy 85.327688 58.128505) (xy 85.541495 58.342312) (xy 85.792905 58.510299) (xy 86.072257 58.626011) (xy 86.368816 58.685) (xy 86.671184 58.685) (xy 86.967743 58.626011) (xy 87.247095 58.510299) (xy 87.498505 58.342312) (xy 87.712312 58.128505) (xy 87.77 58.042169) (xy 87.827688 58.128505) (xy 88.041495 58.342312) (xy 88.292905 58.510299) (xy 88.572257 58.626011) (xy 88.868816 58.685) (xy 89.171184 58.685) (xy 89.467743 58.626011) (xy 89.747095 58.510299) (xy 89.998505 58.342312) (xy 90.212312 58.128505) (xy 90.27 58.042169) (xy 90.327688 58.128505) (xy 90.541495 58.342312) (xy 90.792905 58.510299) (xy 91.072257 58.626011) (xy 91.368816 58.685) (xy 91.671184 58.685) (xy 91.967743 58.626011) (xy 92.247095 58.510299) (xy 92.498505 58.342312) (xy 92.712312 58.128505) (xy 92.77 58.042169) (xy 92.827688 58.128505) (xy 93.041495 58.342312) (xy 93.292905 58.510299) (xy 93.572257 58.626011) (xy 93.868816 58.685) (xy 94.171184 58.685) (xy 94.467743 58.626011) (xy 94.747095 58.510299) (xy 94.998505 58.342312) (xy 95.212312 58.128505) (xy 95.27 58.042169) (xy 95.327688 58.128505) (xy 95.541495 58.342312) (xy 95.792905 58.510299) (xy 96.072257 58.626011) (xy 96.368816 58.685) (xy 96.671184 58.685) (xy 96.967743 58.626011) (xy 97.247095 58.510299) (xy 97.498505 58.342312) (xy 97.712312 58.128505) (xy 97.880299 57.877095) (xy 97.996011 57.597743) (xy 98.055 57.301184) (xy 98.055 56.998816) (xy 97.996011 56.702257) (xy 97.880299 56.422905) (xy 97.712312 56.171495) (xy 97.555 56.014183) (xy 97.555 52.705) (xy 103.860583 52.705) (xy 103.878153 52.883391) (xy 103.930188 53.054927) (xy 104.014688 53.213015) (xy 104.128405 53.351581) (xy 104.163218 53.380151) (xy 110.241074 59.458008) (xy 110.225 59.538816) (xy 110.225 59.841184) (xy 110.283989 60.137743) (xy 110.399701 60.417095) (xy 110.567688 60.668505) (xy 110.781495 60.882312) (xy 111.032905 61.050299) (xy 111.312257 61.166011) (xy 111.608816 61.225) (xy 111.911184 61.225) (xy 112.207743 61.166011) (xy 112.487095 61.050299) (xy 112.738505 60.882312) (xy 112.952312 60.668505) (xy 112.998086 60.6) (xy 115.601914 60.6) (xy 115.647688 60.668505) (xy 115.861495 60.882312) (xy 116.112905 61.050299) (xy 116.392257 61.166011) (xy 116.688816 61.225) (xy 116.991184 61.225) (xy 117.071993 61.208926) (xy 118.978 63.114934) (xy 118.978001 86.061287) (xy 118.978 86.061297) (xy 118.978001 91.825066) (xy 118.704923 92.098144) (xy 118.619702 92.201985) (xy 118.535202 92.360074) (xy 118.483168 92.531609) (xy 118.465597 92.71) (xy 118.483168 92.888391) (xy 118.535202 93.059926) (xy 118.619702 93.218015) (xy 118.73342 93.35658) (xy 118.871985 93.470298) (xy 119.030074 93.554798) (xy 119.201609 93.606832) (xy 119.38 93.624403) (xy 119.558391 93.606832) (xy 119.729926 93.554798) (xy 119.888015 93.470298) (xy 119.991856 93.385077) (xy 120.499851 92.877083) (xy 120.534581 92.848581) (xy 120.648298 92.710015) (xy 120.732798 92.551927) (xy 120.784833 92.380391) (xy 120.798 92.246704) (xy 120.798 92.246703) (xy 120.802403 92.202001) (xy 120.798 92.157299) (xy 120.798 80.174758) (xy 120.975 80.174758) (xy 120.975 80.861242) (xy 121.108927 81.534537) (xy 121.371633 82.168766) (xy 121.753024 82.739558) (xy 122.238442 83.224976) (xy 122.809234 83.606367) (xy 123.443463 83.869073) (xy 124.116758 84.003) (xy 124.803242 84.003) (xy 125.476537 83.869073) (xy 126.110766 83.606367) (xy 126.681558 83.224976) (xy 127.166976 82.739558) (xy 127.548367 82.168766) (xy 127.811073 81.534537) (xy 127.945 80.861242) (xy 127.945 80.174758) (xy 127.811073 79.501463) (xy 127.548367 78.867234) (xy 127.166976 78.296442) (xy 126.681558 77.811024) (xy 126.110766 77.429633) (xy 125.476537 77.166927) (xy 124.803242 77.033) (xy 124.116758 77.033) (xy 123.443463 77.166927) (xy 122.809234 77.429633) (xy 122.238442 77.811024) (xy 121.753024 78.296442) (xy 121.371633 78.867234) (xy 121.108927 79.501463) (xy 120.975 80.174758) (xy 120.798 80.174758) (xy 120.798 68.236758) (xy 120.975 68.236758) (xy 120.975 68.923242) (xy 121.108927 69.596537) (xy 121.371633 70.230766) (xy 121.753024 70.801558) (xy 122.238442 71.286976) (xy 122.809234 71.668367) (xy 123.443463 71.931073) (xy 124.116758 72.065) (xy 124.803242 72.065) (xy 125.476537 71.931073) (xy 126.110766 71.668367) (xy 126.681558 71.286976) (xy 127.166976 70.801558) (xy 127.548367 70.230766) (xy 127.811073 69.596537) (xy 127.945 68.923242) (xy 127.945 68.236758) (xy 127.811073 67.563463) (xy 127.548367 66.929234) (xy 127.166976 66.358442) (xy 126.681558 65.873024) (xy 126.110766 65.491633) (xy 125.476537 65.228927) (xy 124.803242 65.095) (xy 124.116758 65.095) (xy 123.443463 65.228927) (xy 122.809234 65.491633) (xy 122.238442 65.873024) (xy 121.753024 66.358442) (xy 121.371633 66.929234) (xy 121.108927 67.563463) (xy 120.975 68.236758) (xy 120.798 68.236758) (xy 120.798 62.782702) (xy 120.802403 62.738) (xy 120.798 62.693296) (xy 120.784833 62.559609) (xy 120.732798 62.388073) (xy 120.69384 62.315187) (xy 120.648298 62.229984) (xy 120.608918 62.181999) (xy 120.534581 62.091419) (xy 120.499853 62.062919) (xy 119.191014 60.75408) (xy 121.035525 60.75408) (xy 121.119208 61.008261) (xy 121.391775 61.139158) (xy 121.684642 61.214365) (xy 121.986553 61.230991) (xy 122.285907 61.188397) (xy 122.571199 61.088222) (xy 122.720792 61.008261) (xy 122.804475 60.75408) (xy 121.92 59.869605) (xy 121.035525 60.75408) (xy 119.191014 60.75408) (xy 118.358926 59.921993) (xy 118.375 59.841184) (xy 118.375 59.756553) (xy 120.379009 59.756553) (xy 120.421603 60.055907) (xy 120.521778 60.341199) (xy 120.601739 60.490792) (xy 120.85592 60.574475) (xy 121.740395 59.69) (xy 120.85592 58.805525) (xy 120.601739 58.889208) (xy 120.470842 59.161775) (xy 120.395635 59.454642) (xy 120.379009 59.756553) (xy 118.375 59.756553) (xy 118.375 59.538816) (xy 118.316011 59.242257) (xy 118.200299 58.962905) (xy 118.032312 58.711495) (xy 117.946737 58.62592) (xy 121.035525 58.62592) (xy 121.92 59.510395) (xy 122.804475 58.62592) (xy 122.720792 58.371739) (xy 122.448225 58.240842) (xy 122.155358 58.165635) (xy 121.853447 58.149009) (xy 121.554093 58.191603) (xy 121.268801 58.291778) (xy 121.119208 58.371739) (xy 121.035525 58.62592) (xy 117.946737 58.62592) (xy 117.818505 58.497688) (xy 117.567095 58.329701) (xy 117.287743 58.213989) (xy 116.991184 58.155) (xy 116.688816 58.155) (xy 116.392257 58.213989) (xy 116.112905 58.329701) (xy 115.861495 58.497688) (xy 115.647688 58.711495) (xy 115.601914 58.78) (xy 112.998086 58.78) (xy 112.952312 58.711495) (xy 112.738505 58.497688) (xy 112.487095 58.329701) (xy 112.207743 58.213989) (xy 111.911184 58.155) (xy 111.608816 58.155) (xy 111.528008 58.171074) (xy 105.450087 52.093154) (xy 105.421581 52.058419) (xy 105.283015 51.944702) (xy 105.124927 51.860202) (xy 104.953391 51.808167) (xy 104.819704 51.795) (xy 104.819702 51.795) (xy 104.775 51.790597) (xy 104.730298 51.795) (xy 104.730282 51.795) (xy 104.596595 51.808167) (xy 104.425059 51.860202) (xy 104.266971 51.944702) (xy 104.128405 52.058419) (xy 104.014688 52.196985) (xy 103.930188 52.355073) (xy 103.878153 52.526609) (xy 103.860583 52.705) (xy 97.555 52.705) (xy 97.555 50.204835) (xy 119.544006 50.204835) (xy 119.544006 50.379165) (xy 119.578016 50.550145) (xy 119.644729 50.711205) (xy 119.719007 50.822369) (xy 119.719006 53.000409) (xy 119.715571 53.035284) (xy 119.719006 53.070159) (xy 119.719006 53.07016) (xy 119.729279 53.174467) (xy 119.769878 53.308303) (xy 119.835806 53.431646) (xy 119.924531 53.539758) (xy 119.951623 53.561992) (xy 123.285002 56.895372) (xy 123.285002 58.976651) (xy 123.238261 58.889208) (xy 122.98408 58.805525) (xy 122.099605 59.69) (xy 122.98408 60.574475) (xy 123.238261 60.490792) (xy 123.285001 60.393465) (xy 123.285001 61.688265) (xy 123.281566 61.72314) (xy 123.285001 61.758015) (xy 123.285001 61.758016) (xy 123.295274 61.862323) (xy 123.335873 61.996159) (xy 123.401801 62.119502) (xy 123.490526 62.227614) (xy 123.517618 62.249848) (xy 131.370001 70.102232) (xy 131.37 89.881125) (xy 131.366565 89.916) (xy 131.37 89.950875) (xy 131.37 89.950876) (xy 131.380273 90.055183) (xy 131.420872 90.189019) (xy 131.4868 90.312362) (xy 131.575525 90.420474) (xy 131.602617 90.442708) (xy 138.187927 97.028018) (xy 138.21401 97.159145) (xy 138.280723 97.320205) (xy 138.377576 97.465155) (xy 138.500845 97.588424) (xy 138.645795 97.685277) (xy 138.806855 97.75199) (xy 138.977835 97.786) (xy 139.152165 97.786) (xy 139.323145 97.75199) (xy 139.484205 97.685277) (xy 139.629155 97.588424) (xy 139.752424 97.465155) (xy 139.849277 97.320205) (xy 139.91599 97.159145) (xy 139.95 96.988165) (xy 139.95 96.813835) (xy 139.91599 96.642855) (xy 139.849277 96.481795) (xy 139.78726 96.388981) (xy 139.958145 96.35499) (xy 140.119205 96.288277) (xy 140.264155 96.191424) (xy 140.387424 96.068155) (xy 140.484277 95.923205) (xy 140.536206 95.797835) (xy 145.165 95.797835) (xy 145.165 95.972165) (xy 145.19901 96.143145) (xy 145.265723 96.304205) (xy 145.362576 96.449155) (xy 145.485845 96.572424) (xy 145.630795 96.669277) (xy 145.791855 96.73599) (xy 145.922981 96.762073) (xy 146.442927 97.282019) (xy 146.46901 97.413145) (xy 146.535723 97.574205) (xy 146.632576 97.719155) (xy 146.755845 97.842424) (xy 146.900795 97.939277) (xy 147.061855 98.00599) (xy 147.232835 98.04) (xy 147.407165 98.04) (xy 147.578145 98.00599) (xy 147.739205 97.939277) (xy 147.884155 97.842424) (xy 148.007424 97.719155) (xy 148.104277 97.574205) (xy 148.17099 97.413145) (xy 148.205 97.242165) (xy 148.205 97.067835) (xy 148.17099 96.896855) (xy 148.104277 96.735795) (xy 148.007424 96.590845) (xy 147.884155 96.467576) (xy 147.739205 96.370723) (xy 147.578145 96.30401) (xy 147.447019 96.277927) (xy 147.324092 96.155) (xy 148.856928 96.155) (xy 148.856928 98.155) (xy 148.869188 98.279482) (xy 148.905498 98.39918) (xy 148.964463 98.509494) (xy 149.043815 98.606185) (xy 149.140506 98.685537) (xy 149.25082 98.744502) (xy 149.370518 98.780812) (xy 149.495 98.793072) (xy 151.495 98.793072) (xy 151.619482 98.780812) (xy 151.73918 98.744502) (xy 151.849494 98.685537) (xy 151.946185 98.606185) (xy 152.025537 98.509494) (xy 152.084502 98.39918) (xy 152.120812 98.279482) (xy 152.133072 98.155) (xy 152.133072 96.155) (xy 152.120812 96.030518) (xy 152.084502 95.91082) (xy 152.025537 95.800506) (xy 151.946185 95.703815) (xy 151.849494 95.624463) (xy 151.73918 95.565498) (xy 151.619482 95.529188) (xy 151.495 95.516928) (xy 149.495 95.516928) (xy 149.370518 95.529188) (xy 149.25082 95.565498) (xy 149.140506 95.624463) (xy 149.043815 95.703815) (xy 148.964463 95.800506) (xy 148.905498 95.91082) (xy 148.869188 96.030518) (xy 148.856928 96.155) (xy 147.324092 96.155) (xy 146.927073 95.757981) (xy 146.90099 95.626855) (xy 146.834277 95.465795) (xy 146.737424 95.320845) (xy 146.614155 95.197576) (xy 146.562162 95.162835) (xy 153.42 95.162835) (xy 153.42 95.337165) (xy 153.45401 95.508145) (xy 153.520723 95.669205) (xy 153.617576 95.814155) (xy 153.740845 95.937424) (xy 153.885795 96.034277) (xy 154.046855 96.10099) (xy 154.217835 96.135) (xy 154.392165 96.135) (xy 154.563145 96.10099) (xy 154.662104 96.06) (xy 160.932872 96.06) (xy 161.031855 96.101) (xy 161.202835 96.13501) (xy 161.377165 96.13501) (xy 161.548145 96.101) (xy 161.709205 96.034287) (xy 161.854155 95.937434) (xy 161.977424 95.814165) (xy 162.074277 95.669215) (xy 162.14099 95.508155) (xy 162.175 95.337175) (xy 162.175 95.162845) (xy 162.14099 94.991865) (xy 162.074277 94.830805) (xy 161.977424 94.685855) (xy 161.854155 94.562586) (xy 161.709205 94.465733) (xy 161.548145 94.39902) (xy 161.377165 94.36501) (xy 161.202835 94.36501) (xy 161.031855 94.39902) (xy 160.93292 94.44) (xy 154.662104 94.44) (xy 154.563145 94.39901) (xy 154.392165 94.365) (xy 154.217835 94.365) (xy 154.046855 94.39901) (xy 153.885795 94.465723) (xy 153.740845 94.562576) (xy 153.617576 94.685845) (xy 153.520723 94.830795) (xy 153.45401 94.991855) (xy 153.42 95.162835) (xy 146.562162 95.162835) (xy 146.469205 95.100723) (xy 146.308145 95.03401) (xy 146.137165 95) (xy 145.962835 95) (xy 145.791855 95.03401) (xy 145.630795 95.100723) (xy 145.485845 95.197576) (xy 145.362576 95.320845) (xy 145.265723 95.465795) (xy 145.19901 95.626855) (xy 145.165 95.797835) (xy 140.536206 95.797835) (xy 140.55099 95.762145) (xy 140.585 95.591165) (xy 140.585 95.416835) (xy 140.55099 95.245855) (xy 140.484277 95.084795) (xy 140.387424 94.939845) (xy 140.264155 94.816576) (xy 140.119205 94.719723) (xy 139.958145 94.65301) (xy 139.827018 94.626927) (xy 133.425 88.224909) (xy 133.425 75.477835) (xy 139.45 75.477835) (xy 139.45 75.652165) (xy 139.48401 75.823145) (xy 139.550723 75.984205) (xy 139.625 76.095368) (xy 139.625001 87.595115) (xy 139.621565 87.63) (xy 139.635274 87.769184) (xy 139.675872 87.903019) (xy 139.735351 88.014296) (xy 139.741801 88.026363) (xy 139.830526 88.134475) (xy 139.857616 88.156707) (xy 143.267927 91.567018) (xy 143.29401 91.698145) (xy 143.360723 91.859205) (xy 143.457576 92.004155) (xy 143.580845 92.127424) (xy 143.725795 92.224277) (xy 143.886855 92.29099) (xy 144.057835 92.325) (xy 144.232165 92.325) (xy 144.403145 92.29099) (xy 144.564205 92.224277) (xy 144.709155 92.127424) (xy 144.832424 92.004155) (xy 144.929277 91.859205) (xy 144.99599 91.698145) (xy 145.03 91.527165) (xy 145.03 91.352835) (xy 144.99599 91.181855) (xy 144.929277 91.020795) (xy 144.832424 90.875845) (xy 144.709155 90.752576) (xy 144.616122 90.690413) (xy 149.539192 90.690413) (xy 149.634956 90.954814) (xy 149.924571 91.095704) (xy 150.236108 91.177384) (xy 150.557595 91.196718) (xy 150.876675 91.152961) (xy 151.181088 91.047795) (xy 151.355044 90.954814) (xy 151.450808 90.690413) (xy 150.495 89.734605) (xy 149.539192 90.690413) (xy 144.616122 90.690413) (xy 144.564205 90.655723) (xy 144.403145 90.58901) (xy 144.272018 90.562927) (xy 143.326686 89.617595) (xy 148.853282 89.617595) (xy 148.897039 89.936675) (xy 149.002205 90.241088) (xy 149.095186 90.415044) (xy 149.359587 90.510808) (xy 150.315395 89.555) (xy 150.674605 89.555) (xy 151.630413 90.510808) (xy 151.894814 90.415044) (xy 152.035704 90.125429) (xy 152.117384 89.813892) (xy 152.136718 89.492405) (xy 152.092961 89.173325) (xy 151.987795 88.868912) (xy 151.894814 88.694956) (xy 151.630413 88.599192) (xy 150.674605 89.555) (xy 150.315395 89.555) (xy 149.359587 88.599192) (xy 149.095186 88.694956) (xy 148.954296 88.984571) (xy 148.872616 89.296108) (xy 148.853282 89.617595) (xy 143.326686 89.617595) (xy 141.045 87.335909) (xy 141.045 76.095368) (xy 141.119277 75.984205) (xy 141.18599 75.823145) (xy 141.22 75.652165) (xy 141.22 75.477835) (xy 141.18599 75.306855) (xy 141.119277 75.145795) (xy 141.022424 75.000845) (xy 140.899155 74.877576) (xy 140.754205 74.780723) (xy 140.593145 74.71401) (xy 140.422165 74.68) (xy 140.247835 74.68) (xy 140.076855 74.71401) (xy 139.915795 74.780723) (xy 139.770845 74.877576) (xy 139.647576 75.000845) (xy 139.550723 75.145795) (xy 139.48401 75.306855) (xy 139.45 75.477835) (xy 133.425 75.477835) (xy 133.425 72.283137) (xy 137.16 72.283137) (xy 137.16 72.496863) (xy 137.201696 72.706483) (xy 137.283485 72.90394) (xy 137.402225 73.081647) (xy 137.553353 73.232775) (xy 137.73106 73.351515) (xy 137.928517 73.433304) (xy 138.138137 73.475) (xy 138.351863 73.475) (xy 138.561483 73.433304) (xy 138.75894 73.351515) (xy 138.936647 73.232775) (xy 139.087775 73.081647) (xy 139.206515 72.90394) (xy 139.245 72.811029) (xy 139.283485 72.90394) (xy 139.402225 73.081647) (xy 139.553353 73.232775) (xy 139.73106 73.351515) (xy 139.928517 73.433304) (xy 140.138137 73.475) (xy 140.351863 73.475) (xy 140.561483 73.433304) (xy 140.75894 73.351515) (xy 140.936647 73.232775) (xy 141.087775 73.081647) (xy 141.206515 72.90394) (xy 141.288304 72.706483) (xy 141.33 72.496863) (xy 141.33 72.283137) (xy 141.288304 72.073517) (xy 141.206515 71.87606) (xy 141.087775 71.698353) (xy 140.936647 71.547225) (xy 140.75894 71.428485) (xy 140.561483 71.346696) (xy 140.351863 71.305) (xy 140.138137 71.305) (xy 139.928517 71.346696) (xy 139.73106 71.428485) (xy 139.553353 71.547225) (xy 139.402225 71.698353) (xy 139.283485 71.87606) (xy 139.245 71.968971) (xy 139.206515 71.87606) (xy 139.087775 71.698353) (xy 138.936647 71.547225) (xy 138.75894 71.428485) (xy 138.561483 71.346696) (xy 138.351863 71.305) (xy 138.138137 71.305) (xy 137.928517 71.346696) (xy 137.73106 71.428485) (xy 137.553353 71.547225) (xy 137.402225 71.698353) (xy 137.283485 71.87606) (xy 137.201696 72.073517) (xy 137.16 72.283137) (xy 133.425 72.283137) (xy 133.425 70.053736) (xy 133.428435 70.018861) (xy 133.420728 69.94061) (xy 133.414727 69.879677) (xy 133.374128 69.745841) (xy 133.3082 69.622498) (xy 133.219475 69.514386) (xy 133.192379 69.492149) (xy 125.023989 61.323759) (xy 125.023989 60.75408) (xy 126.115525 60.75408) (xy 126.199208 61.008261) (xy 126.471775 61.139158) (xy 126.764642 61.214365) (xy 127.066553 61.230991) (xy 127.365907 61.188397) (xy 127.651199 61.088222) (xy 127.800792 61.008261) (xy 127.884475 60.75408) (xy 127 59.869605) (xy 126.115525 60.75408) (xy 125.023989 60.75408) (xy 125.023989 59.756553) (xy 125.459009 59.756553) (xy 125.501603 60.055907) (xy 125.601778 60.341199) (xy 125.681739 60.490792) (xy 125.93592 60.574475) (xy 126.820395 59.69) (xy 127.179605 59.69) (xy 128.06408 60.574475) (xy 128.318261 60.490792) (xy 128.449158 60.218225) (xy 128.524365 59.925358) (xy 128.540991 59.623447) (xy 128.52895 59.538816) (xy 130.545 59.538816) (xy 130.545 59.841184) (xy 130.603989 60.137743) (xy 130.719701 60.417095) (xy 130.887688 60.668505) (xy 131.101495 60.882312) (xy 131.352905 61.050299) (xy 131.632257 61.166011) (xy 131.928816 61.225) (xy 132.231184 61.225) (xy 132.527743 61.166011) (xy 132.807095 61.050299) (xy 133.058505 60.882312) (xy 133.272312 60.668505) (xy 133.440299 60.417095) (xy 133.556011 60.137743) (xy 133.615 59.841184) (xy 133.615 59.538816) (xy 135.625 59.538816) (xy 135.625 59.841184) (xy 135.683989 60.137743) (xy 135.799701 60.417095) (xy 135.967688 60.668505) (xy 136.181495 60.882312) (xy 136.432905 61.050299) (xy 136.712257 61.166011) (xy 137.008816 61.225) (xy 137.311184 61.225) (xy 137.607743 61.166011) (xy 137.887095 61.050299) (xy 138.138505 60.882312) (xy 138.352312 60.668505) (xy 138.520299 60.417095) (xy 138.636011 60.137743) (xy 138.695 59.841184) (xy 138.695 59.538816) (xy 138.636011 59.242257) (xy 138.520299 58.962905) (xy 138.352312 58.711495) (xy 138.138505 58.497688) (xy 137.887095 58.329701) (xy 137.607743 58.213989) (xy 137.311184 58.155) (xy 137.008816 58.155) (xy 136.712257 58.213989) (xy 136.432905 58.329701) (xy 136.181495 58.497688) (xy 135.967688 58.711495) (xy 135.799701 58.962905) (xy 135.683989 59.242257) (xy 135.625 59.538816) (xy 133.615 59.538816) (xy 133.556011 59.242257) (xy 133.440299 58.962905) (xy 133.272312 58.711495) (xy 133.058505 58.497688) (xy 132.807095 58.329701) (xy 132.527743 58.213989) (xy 132.231184 58.155) (xy 131.928816 58.155) (xy 131.632257 58.213989) (xy 131.352905 58.329701) (xy 131.101495 58.497688) (xy 130.887688 58.711495) (xy 130.719701 58.962905) (xy 130.603989 59.242257) (xy 130.545 59.538816) (xy 128.52895 59.538816) (xy 128.498397 59.324093) (xy 128.398222 59.038801) (xy 128.318261 58.889208) (xy 128.06408 58.805525) (xy 127.179605 59.69) (xy 126.820395 59.69) (xy 125.93592 58.805525) (xy 125.681739 58.889208) (xy 125.550842 59.161775) (xy 125.475635 59.454642) (xy 125.459009 59.756553) (xy 125.023989 59.756553) (xy 125.023989 58.62592) (xy 126.115525 58.62592) (xy 127 59.510395) (xy 127.884475 58.62592) (xy 127.800792 58.371739) (xy 127.528225 58.240842) (xy 127.235358 58.165635) (xy 126.933447 58.149009) (xy 126.634093 58.191603) (xy 126.348801 58.291778) (xy 126.199208 58.371739) (xy 126.115525 58.62592) (xy 125.023989 58.62592) (xy 125.023989 56.276861) (xy 125.027424 56.241984) (xy 125.013716 56.102799) (xy 124.973117 55.968964) (xy 124.958785 55.942151) (xy 124.907189 55.845621) (xy 124.818464 55.737509) (xy 124.791368 55.715272) (xy 121.61401 52.537914) (xy 121.61401 50.060368) (xy 121.688287 49.949205) (xy 121.755 49.788145) (xy 121.78901 49.617165) (xy 121.78901 49.442835) (xy 121.755 49.271855) (xy 121.688287 49.110795) (xy 121.591434 48.965845) (xy 121.468165 48.842576) (xy 121.323215 48.745723) (xy 121.162155 48.67901) (xy 120.991175 48.645) (xy 120.816845 48.645) (xy 120.645865 48.67901) (xy 120.484805 48.745723) (xy 120.339855 48.842576) (xy 120.216586 48.965845) (xy 120.119733 49.110795) (xy 120.05302 49.271855) (xy 120.01901 49.442835) (xy 120.01901 49.503909) (xy 120.009801 49.507723) (xy 119.864851 49.604576) (xy 119.741582 49.727845) (xy 119.644729 49.872795) (xy 119.578016 50.033855) (xy 119.544006 50.204835) (xy 97.555 50.204835) (xy 97.555 48.172851) (xy 128.655 48.172851) (xy 128.655 48.347181) (xy 128.68901 48.518161) (xy 128.755723 48.679221) (xy 128.852576 48.824171) (xy 128.975845 48.94744) (xy 129.120795 49.044293) (xy 129.219756 49.085284) (xy 142.700001 62.56553) (xy 142.7 85.050212) (xy 142.696081 85.09) (xy 142.7 85.129788) (xy 142.7 85.12979) (xy 142.71172 85.248787) (xy 142.758037 85.401472) (xy 142.786989 85.455637) (xy 142.833251 85.542189) (xy 142.863445 85.57898) (xy 142.934472 85.665528) (xy 142.965388 85.6909) (xy 145.859733 88.585246) (xy 145.900723 88.684205) (xy 145.997576 88.829155) (xy 146.120845 88.952424) (xy 146.265795 89.049277) (xy 146.426855 89.11599) (xy 146.597835 89.15) (xy 146.772165 89.15) (xy 146.943145 89.11599) (xy 147.104205 89.049277) (xy 147.249155 88.952424) (xy 147.372424 88.829155) (xy 147.469277 88.684205) (xy 147.53599 88.523145) (xy 147.57 88.352165) (xy 147.57 88.177835) (xy 147.537661 88.015257) (xy 147.551723 88.049205) (xy 147.648576 88.194155) (xy 147.771845 88.317424) (xy 147.916795 88.414277) (xy 148.077855 88.48099) (xy 148.248835 88.515) (xy 148.423165 88.515) (xy 148.594145 88.48099) (xy 148.742385 88.419587) (xy 149.539192 88.419587) (xy 150.495 89.375395) (xy 151.450808 88.419587) (xy 151.355044 88.155186) (xy 151.065429 88.014296) (xy 150.753892 87.932616) (xy 150.432405 87.913282) (xy 150.113325 87.957039) (xy 149.808912 88.062205) (xy 149.634956 88.155186) (xy 149.539192 88.419587) (xy 148.742385 88.419587) (xy 148.755205 88.414277) (xy 148.900155 88.317424) (xy 149.023424 88.194155) (xy 149.120277 88.049205) (xy 149.18699 87.888145) (xy 149.221 87.717165) (xy 149.221 87.542835) (xy 149.18699 87.371855) (xy 149.120277 87.210795) (xy 149.023424 87.065845) (xy 148.900155 86.942576) (xy 148.755205 86.845723) (xy 148.594145 86.77901) (xy 148.463018 86.752927) (xy 144.982 83.271909) (xy 144.982 61.756862) (xy 144.985435 61.721987) (xy 144.978787 61.654488) (xy 144.971727 61.582804) (xy 144.931128 61.448968) (xy 144.8652 61.325625) (xy 144.776475 61.217513) (xy 144.749384 61.19528) (xy 132.703085 49.148982) (xy 132.677002 49.017855) (xy 132.610289 48.856795) (xy 132.513436 48.711845) (xy 132.390167 48.588576) (xy 132.245217 48.491723) (xy 132.084157 48.42501) (xy 131.913177 48.391) (xy 131.738847 48.391) (xy 131.567867 48.42501) (xy 131.406807 48.491723) (xy 131.261857 48.588576) (xy 131.138588 48.711845) (xy 131.138089 48.712592) (xy 130.365268 47.939772) (xy 130.324277 47.840811) (xy 130.227424 47.695861) (xy 130.104155 47.572592) (xy 129.959205 47.475739) (xy 129.798145 47.409026) (xy 129.627165 47.375016) (xy 129.452835 47.375016) (xy 129.281855 47.409026) (xy 129.120795 47.475739) (xy 128.975845 47.572592) (xy 128.852576 47.695861) (xy 128.755723 47.840811) (xy 128.68901 48.001871) (xy 128.655 48.172851) (xy 97.555 48.172851) (xy 97.555 46.902835) (xy 146.435 46.902835) (xy 146.435 47.077165) (xy 146.46901 47.248145) (xy 146.535723 47.409205) (xy 146.61 47.520368) (xy 146.610001 81.245117) (xy 146.606565 81.280002) (xy 146.620274 81.419186) (xy 146.660872 81.553021) (xy 146.726801 81.676365) (xy 146.742936 81.696025) (xy 146.815526 81.784477) (xy 146.842617 81.80671) (xy 153.300927 88.26502) (xy 153.32701 88.396147) (xy 153.393723 88.557207) (xy 153.490576 88.702157) (xy 153.613845 88.825426) (xy 153.758795 88.922279) (xy 153.919855 88.988992) (xy 154.090835 89.023002) (xy 154.265165 89.023002) (xy 154.436145 88.988992) (xy 154.597205 88.922279) (xy 154.742155 88.825426) (xy 154.865424 88.702157) (xy 154.962277 88.557207) (xy 155.02899 88.396147) (xy 155.063 88.225167) (xy 155.063 88.050837) (xy 155.02899 87.879857) (xy 154.962277 87.718797) (xy 154.865424 87.573847) (xy 154.742155 87.450578) (xy 154.597205 87.353725) (xy 154.436145 87.287012) (xy 154.305018 87.260929) (xy 148.03 80.985911) (xy 148.03 65.696758) (xy 153.995 65.696758) (xy 153.995 66.383242) (xy 154.128927 67.056537) (xy 154.391633 67.690766) (xy 154.773024 68.261558) (xy 155.258442 68.746976) (xy 155.829234 69.128367) (xy 156.463463 69.391073) (xy 157.136758 69.525) (xy 157.823242 69.525) (xy 158.496537 69.391073) (xy 159.130766 69.128367) (xy 159.701558 68.746976) (xy 160.186976 68.261558) (xy 160.568367 67.690766) (xy 160.831073 67.056537) (xy 160.965 66.383242) (xy 160.965 65.696758) (xy 160.831073 65.023463) (xy 160.568367 64.389234) (xy 160.186976 63.818442) (xy 159.701558 63.333024) (xy 159.130766 62.951633) (xy 158.496537 62.688927) (xy 157.823242 62.555) (xy 157.136758 62.555) (xy 156.463463 62.688927) (xy 155.829234 62.951633) (xy 155.258442 63.333024) (xy 154.773024 63.818442) (xy 154.391633 64.389234) (xy 154.128927 65.023463) (xy 153.995 65.696758) (xy 148.03 65.696758) (xy 148.03 56.998816) (xy 151.025 56.998816) (xy 151.025 57.301184) (xy 151.083989 57.597743) (xy 151.199701 57.877095) (xy 151.367688 58.128505) (xy 151.581495 58.342312) (xy 151.832905 58.510299) (xy 152.112257 58.626011) (xy 152.408816 58.685) (xy 152.711184 58.685) (xy 153.007743 58.626011) (xy 153.287095 58.510299) (xy 153.538505 58.342312) (xy 153.752312 58.128505) (xy 153.81 58.042169) (xy 153.867688 58.128505) (xy 154.081495 58.342312) (xy 154.332905 58.510299) (xy 154.612257 58.626011) (xy 154.908816 58.685) (xy 155.211184 58.685) (xy 155.507743 58.626011) (xy 155.787095 58.510299) (xy 156.038505 58.342312) (xy 156.252312 58.128505) (xy 156.31 58.042169) (xy 156.367688 58.128505) (xy 156.581495 58.342312) (xy 156.832905 58.510299) (xy 157.112257 58.626011) (xy 157.408816 58.685) (xy 157.711184 58.685) (xy 158.007743 58.626011) (xy 158.287095 58.510299) (xy 158.538505 58.342312) (xy 158.752312 58.128505) (xy 158.81 58.042169) (xy 158.867688 58.128505) (xy 159.081495 58.342312) (xy 159.332905 58.510299) (xy 159.612257 58.626011) (xy 159.908816 58.685) (xy 160.211184 58.685) (xy 160.507743 58.626011) (xy 160.787095 58.510299) (xy 161.038505 58.342312) (xy 161.252312 58.128505) (xy 161.31 58.042169) (xy 161.367688 58.128505) (xy 161.581495 58.342312) (xy 161.832905 58.510299) (xy 162.112257 58.626011) (xy 162.408816 58.685) (xy 162.711184 58.685) (xy 163.007743 58.626011) (xy 163.287095 58.510299) (xy 163.538505 58.342312) (xy 163.752312 58.128505) (xy 163.857 57.971829) (xy 163.857 68.783553) (xy 159.945566 72.694988) (xy 156.476106 72.694988) (xy 156.440011 72.691433) (xy 156.403916 72.694988) (xy 156.403907 72.694988) (xy 156.295927 72.705623) (xy 156.157379 72.747651) (xy 156.029692 72.815901) (xy 155.917774 72.90775) (xy 155.894758 72.935795) (xy 155.378419 73.452134) (xy 155.091184 73.395) (xy 154.788816 73.395) (xy 154.492257 73.453989) (xy 154.212905 73.569701) (xy 153.961495 73.737688) (xy 153.747688 73.951495) (xy 153.579701 74.202905) (xy 153.463989 74.482257) (xy 153.405 74.778816) (xy 153.405 75.081184) (xy 153.463989 75.377743) (xy 153.579701 75.657095) (xy 153.747688 75.908505) (xy 153.961495 76.122312) (xy 154.212905 76.290299) (xy 154.492257 76.406011) (xy 154.788816 76.465) (xy 155.091184 76.465) (xy 155.387743 76.406011) (xy 155.667095 76.290299) (xy 155.918505 76.122312) (xy 156.132312 75.908505) (xy 156.21 75.792237) (xy 156.287688 75.908505) (xy 156.501495 76.122312) (xy 156.752905 76.290299) (xy 157.032257 76.406011) (xy 157.328816 76.465) (xy 157.631184 76.465) (xy 157.927743 76.406011) (xy 158.207095 76.290299) (xy 158.458505 76.122312) (xy 158.672312 75.908505) (xy 158.75 75.792237) (xy 158.827688 75.908505) (xy 159.041495 76.122312) (xy 159.292905 76.290299) (xy 159.31 76.29738) (xy 159.310001 88.0802) (xy 159.22424 88.115723) (xy 159.07929 88.212576) (xy 158.956021 88.335845) (xy 158.859168 88.480795) (xy 158.792455 88.641855) (xy 158.758445 88.812835) (xy 158.758445 88.987165) (xy 158.792455 89.158145) (xy 158.859168 89.319205) (xy 158.956021 89.464155) (xy 159.07929 89.587424) (xy 159.22424 89.684277) (xy 159.3853 89.75099) (xy 159.55628 89.785) (xy 159.73061 89.785) (xy 159.90159 89.75099) (xy 160.06265 89.684277) (xy 160.2076 89.587424) (xy 160.330869 89.464155) (xy 160.427722 89.319205) (xy 160.494435 89.158145) (xy 160.519531 89.031977) (xy 160.524475 89.02792) (xy 160.6132 88.919808) (xy 160.679128 88.796465) (xy 160.719727 88.662629) (xy 160.73 88.558322) (xy 160.73 88.558321) (xy 160.733435 88.523446) (xy 160.73 88.488571) (xy 160.73 88.317856) (xy 164.723 88.317856) (xy 164.723 88.492186) (xy 164.75701 88.663166) (xy 164.823723 88.824226) (xy 164.920576 88.969176) (xy 165.043845 89.092445) (xy 165.188795 89.189298) (xy 165.349855 89.256011) (xy 165.520835 89.290021) (xy 165.695165 89.290021) (xy 165.866145 89.256011) (xy 166.027205 89.189298) (xy 166.172155 89.092445) (xy 166.295424 88.969176) (xy 166.392277 88.824226) (xy 166.45899 88.663166) (xy 166.485073 88.532039) (xy 178.614369 76.402744) (xy 178.622257 76.406011) (xy 178.918816 76.465) (xy 179.221184 76.465) (xy 179.517743 76.406011) (xy 179.797095 76.290299) (xy 180.048505 76.122312) (xy 180.262312 75.908505) (xy 180.430299 75.657095) (xy 180.546011 75.377743) (xy 180.605 75.081184) (xy 180.605 74.778816) (xy 180.547866 74.491581) (xy 185.090215 69.949232) (xy 185.11826 69.926216) (xy 185.210109 69.814298) (xy 185.278359 69.686611) (xy 185.320387 69.548063) (xy 185.331022 69.440083) (xy 185.331022 69.440074) (xy 185.334577 69.403979) (xy 185.331022 69.367884) (xy 185.331022 34.772116) (xy 185.334577 34.736021) (xy 185.331022 34.699926) (xy 185.331022 34.699917) (xy 185.320387 34.591937) (xy 185.278359 34.453389) (xy 185.210109 34.325702) (xy 185.193536 34.305509) (xy 185.141275 34.241828) (xy 185.141272 34.241825) (xy 185.118259 34.213784) (xy 185.090219 34.190773) (xy 180.505344 29.605897) (xy 180.555 29.35626) (xy 180.555 29.06374) (xy 180.497932 28.776842) (xy 180.38599 28.506589) (xy 180.223475 28.263368) (xy 180.016632 28.056525) (xy 179.773411 27.89401) (xy 179.503158 27.782068) (xy 179.21626 27.725) (xy 178.92374 27.725) (xy 178.636842 27.782068) (xy 178.366589 27.89401) (xy 178.123368 28.056525) (xy 177.916525 28.263368) (xy 177.8 28.43776) (xy 177.683475 28.263368) (xy 177.476632 28.056525) (xy 177.233411 27.89401) (xy 176.963158 27.782068) (xy 176.67626 27.725) (xy 176.38374 27.725) (xy 176.096842 27.782068) (xy 175.826589 27.89401) (xy 175.583368 28.056525) (xy 175.451513 28.18838) (xy 175.429502 28.11582) (xy 175.370537 28.005506) (xy 175.291185 27.908815) (xy 175.194494 27.829463) (xy 175.08418 27.770498) (xy 174.964482 27.734188) (xy 174.84 27.721928) (xy 173.14 27.721928) (xy 173.015518 27.734188) (xy 172.89582 27.770498) (xy 172.785506 27.829463) (xy 172.688815 27.908815) (xy 172.609463 28.005506) (xy 172.550498 28.11582) (xy 172.514188 28.235518) (xy 172.501928 28.36) (xy 172.501928 30.06) (xy 172.514188 30.184482) (xy 172.550498 30.30418) (xy 172.609463 30.414494) (xy 172.688815 30.511185) (xy 172.785506 30.590537) (xy 172.89582 30.649502) (xy 173.015518 30.685812) (xy 173.14 30.698072) (xy 174.438626 30.698072) (xy 181.497481 37.756928) (xy 181.01 37.756928) (xy 180.836746 37.773992) (xy 180.67015 37.824528) (xy 180.516614 37.906595) (xy 180.382038 38.017038) (xy 180.271595 38.151614) (xy 180.217223 38.253337) (xy 180.165134 38.189866) (xy 179.939014 38.004294) (xy 179.681034 37.866401) (xy 179.401111 37.781487) (xy 179.11 37.752815) (xy 178.81889 37.781487) (xy 178.538967 37.866401) (xy 178.280987 38.004294) (xy 178.054866 38.189866) (xy 177.869294 38.415986) (xy 177.86 38.433374) (xy 177.850706 38.415986) (xy 177.665134 38.189866) (xy 177.439014 38.004294) (xy 177.181034 37.866401) (xy 176.901111 37.781487) (xy 176.61 37.752815) (xy 176.31889 37.781487) (xy 176.038967 37.866401) (xy 175.780987 38.004294) (xy 175.554866 38.189866) (xy 175.369294 38.415986) (xy 175.36 38.433374) (xy 175.350706 38.415986) (xy 175.165134 38.189866) (xy 174.939014 38.004294) (xy 174.681034 37.866401) (xy 174.401111 37.781487) (xy 174.11 37.752815) (xy 173.81889 37.781487) (xy 173.538967 37.866401) (xy 173.280987 38.004294) (xy 173.054866 38.189866) (xy 172.869294 38.415986) (xy 172.86 38.433374) (xy 172.850706 38.415986) (xy 172.665134 38.189866) (xy 172.439014 38.004294) (xy 172.181034 37.866401) (xy 171.901111 37.781487) (xy 171.61 37.752815) (xy 171.31889 37.781487) (xy 171.038967 37.866401) (xy 170.780987 38.004294) (xy 170.554866 38.189866) (xy 170.369294 38.415986) (xy 170.231401 38.673966) (xy 170.146487 38.953889) (xy 170.125 39.17205) (xy 170.125 39.567949) (xy 170.146487 39.78611) (xy 170.231401 40.066033) (xy 170.369294 40.324013) (xy 170.554866 40.550134) (xy 170.575 40.566658) (xy 170.575001 56.014182) (xy 170.417688 56.171495) (xy 170.249701 56.422905) (xy 170.133989 56.702257) (xy 170.075 56.998816) (xy 170.075 57.301184) (xy 170.133989 57.597743) (xy 170.249701 57.877095) (xy 170.417688 58.128505) (xy 170.631495 58.342312) (xy 170.882905 58.510299) (xy 171.162257 58.626011) (xy 171.458816 58.685) (xy 171.761184 58.685) (xy 172.057743 58.626011) (xy 172.337095 58.510299) (xy 172.588505 58.342312) (xy 172.802312 58.128505) (xy 172.86 58.042169) (xy 172.917688 58.128505) (xy 173.131495 58.342312) (xy 173.382905 58.510299) (xy 173.662257 58.626011) (xy 173.958816 58.685) (xy 174.261184 58.685) (xy 174.557743 58.626011) (xy 174.837095 58.510299) (xy 175.088505 58.342312) (xy 175.302312 58.128505) (xy 175.36 58.042169) (xy 175.417688 58.128505) (xy 175.631495 58.342312) (xy 175.882905 58.510299) (xy 176.162257 58.626011) (xy 176.458816 58.685) (xy 176.761184 58.685) (xy 177.057743 58.626011) (xy 177.337095 58.510299) (xy 177.588505 58.342312) (xy 177.802312 58.128505) (xy 177.86 58.042169) (xy 177.917688 58.128505) (xy 178.131495 58.342312) (xy 178.382905 58.510299) (xy 178.662257 58.626011) (xy 178.958816 58.685) (xy 179.261184 58.685) (xy 179.557743 58.626011) (xy 179.837095 58.510299) (xy 180.088505 58.342312) (xy 180.302312 58.128505) (xy 180.36 58.042169) (xy 180.417688 58.128505) (xy 180.631495 58.342312) (xy 180.882905 58.510299) (xy 181.162257 58.626011) (xy 181.458816 58.685) (xy 181.761184 58.685) (xy 182.057743 58.626011) (xy 182.337095 58.510299) (xy 182.588505 58.342312) (xy 182.802312 58.128505) (xy 182.970299 57.877095) (xy 183.086011 57.597743) (xy 183.145 57.301184) (xy 183.145 56.998816) (xy 183.086011 56.702257) (xy 182.970299 56.422905) (xy 182.802312 56.171495) (xy 182.645 56.014183) (xy 182.645 40.864613) (xy 182.703386 40.833405) (xy 182.837962 40.722962) (xy 182.948405 40.588386) (xy 183.030472 40.43485) (xy 183.081008 40.268254) (xy 183.098072 40.095) (xy 183.098072 39.357519) (xy 183.161 39.420447) (xy 183.161001 64.719552) (xy 174.428419 73.452134) (xy 174.141184 73.395) (xy 173.838816 73.395) (xy 173.542257 73.453989) (xy 173.262905 73.569701) (xy 173.011495 73.737688) (xy 172.797688 73.951495) (xy 172.629701 74.202905) (xy 172.513989 74.482257) (xy 172.455 74.778816) (xy 172.455 75.081184) (xy 172.513989 75.377743) (xy 172.629701 75.657095) (xy 172.797688 75.908505) (xy 173.011495 76.122312) (xy 173.262905 76.290299) (xy 173.542257 76.406011) (xy 173.838816 76.465) (xy 174.141184 76.465) (xy 174.437743 76.406011) (xy 174.717095 76.290299) (xy 174.968505 76.122312) (xy 175.182312 75.908505) (xy 175.26 75.792237) (xy 175.337688 75.908505) (xy 175.551495 76.122312) (xy 175.802905 76.290299) (xy 176.082257 76.406011) (xy 176.378816 76.465) (xy 176.543929 76.465) (xy 165.480982 87.527948) (xy 165.349855 87.554031) (xy 165.188795 87.620744) (xy 165.043845 87.717597) (xy 164.920576 87.840866) (xy 164.823723 87.985816) (xy 164.75701 88.146876) (xy 164.723 88.317856) (xy 160.73 88.317856) (xy 160.73 76.29738) (xy 160.747095 76.290299) (xy 160.998505 76.122312) (xy 161.212312 75.908505) (xy 161.380299 75.657095) (xy 161.496011 75.377743) (xy 161.555 75.081184) (xy 161.555 74.778816) (xy 161.497866 74.491581) (xy 165.786218 70.203228) (xy 165.814258 70.180217) (xy 165.837271 70.152176) (xy 165.837274 70.152173) (xy 165.906108 70.068299) (xy 165.974358 69.940613) (xy 166.016386 69.802064) (xy 166.030577 69.657979) (xy 166.027021 69.621874) (xy 166.027021 34.518126) (xy 166.030577 34.482021) (xy 166.016386 34.337936) (xy 165.974358 34.199387) (xy 165.906108 34.071701) (xy 165.837274 33.987827) (xy 165.814259 33.959783) (xy 165.786214 33.936767) (xy 161.455344 29.605897) (xy 161.505 29.35626) (xy 161.505 29.06374) (xy 161.447932 28.776842) (xy 161.33599 28.506589) (xy 161.173475 28.263368) (xy 160.966632 28.056525) (xy 160.723411 27.89401) (xy 160.453158 27.782068) (xy 160.16626 27.725) (xy 159.87374 27.725) (xy 159.586842 27.782068) (xy 159.316589 27.89401) (xy 159.073368 28.056525) (xy 158.866525 28.263368) (xy 158.75 28.43776) (xy 158.633475 28.263368) (xy 158.426632 28.056525) (xy 158.183411 27.89401) (xy 157.913158 27.782068) (xy 157.62626 27.725) (xy 157.33374 27.725) (xy 157.046842 27.782068) (xy 156.776589 27.89401) (xy 156.533368 28.056525) (xy 156.401513 28.18838) (xy 156.379502 28.11582) (xy 156.320537 28.005506) (xy 156.241185 27.908815) (xy 156.144494 27.829463) (xy 156.03418 27.770498) (xy 155.914482 27.734188) (xy 155.79 27.721928) (xy 154.09 27.721928) (xy 153.965518 27.734188) (xy 153.84582 27.770498) (xy 153.735506 27.829463) (xy 153.638815 27.908815) (xy 153.559463 28.005506) (xy 153.500498 28.11582) (xy 153.464188 28.235518) (xy 153.451928 28.36) (xy 153.451928 30.06) (xy 153.464188 30.184482) (xy 153.500498 30.30418) (xy 153.559463 30.414494) (xy 153.638815 30.511185) (xy 153.735506 30.590537) (xy 153.84582 30.649502) (xy 153.965518 30.685812) (xy 154.09 30.698072) (xy 155.388626 30.698072) (xy 162.447481 37.756928) (xy 161.96 37.756928) (xy 161.786746 37.773992) (xy 161.62015 37.824528) (xy 161.466614 37.906595) (xy 161.332038 38.017038) (xy 161.221595 38.151614) (xy 161.167223 38.253337) (xy 161.115134 38.189866) (xy 160.889014 38.004294) (xy 160.631034 37.866401) (xy 160.351111 37.781487) (xy 160.06 37.752815) (xy 159.76889 37.781487) (xy 159.488967 37.866401) (xy 159.230987 38.004294) (xy 159.004866 38.189866) (xy 158.819294 38.415986) (xy 158.81 38.433374) (xy 158.800706 38.415986) (xy 158.615134 38.189866) (xy 158.389014 38.004294) (xy 158.131034 37.866401) (xy 157.851111 37.781487) (xy 157.56 37.752815) (xy 157.26889 37.781487) (xy 156.988967 37.866401) (xy 156.730987 38.004294) (xy 156.504866 38.189866) (xy 156.319294 38.415986) (xy 156.31 38.433374) (xy 156.300706 38.415986) (xy 156.115134 38.189866) (xy 155.889014 38.004294) (xy 155.631034 37.866401) (xy 155.351111 37.781487) (xy 155.06 37.752815) (xy 154.76889 37.781487) (xy 154.488967 37.866401) (xy 154.230987 38.004294) (xy 154.004866 38.189866) (xy 153.819294 38.415986) (xy 153.81 38.433374) (xy 153.800706 38.415986) (xy 153.615134 38.189866) (xy 153.389014 38.004294) (xy 153.131034 37.866401) (xy 152.851111 37.781487) (xy 152.56 37.752815) (xy 152.26889 37.781487) (xy 151.988967 37.866401) (xy 151.730987 38.004294) (xy 151.504866 38.189866) (xy 151.319294 38.415986) (xy 151.181401 38.673966) (xy 151.096487 38.953889) (xy 151.075 39.17205) (xy 151.075 39.567949) (xy 151.096487 39.78611) (xy 151.181401 40.066033) (xy 151.319294 40.324013) (xy 151.504866 40.550134) (xy 151.525001 40.566658) (xy 151.525 56.014183) (xy 151.367688 56.171495) (xy 151.199701 56.422905) (xy 151.083989 56.702257) (xy 151.025 56.998816) (xy 148.03 56.998816) (xy 148.03 47.520368) (xy 148.104277 47.409205) (xy 148.17099 47.248145) (xy 148.205 47.077165) (xy 148.205 46.902835) (xy 148.17099 46.731855) (xy 148.104277 46.570795) (xy 148.007424 46.425845) (xy 147.884155 46.302576) (xy 147.739205 46.205723) (xy 147.578145 46.13901) (xy 147.407165 46.105) (xy 147.232835 46.105) (xy 147.061855 46.13901) (xy 146.900795 46.205723) (xy 146.755845 46.302576) (xy 146.632576 46.425845) (xy 146.535723 46.570795) (xy 146.46901 46.731855) (xy 146.435 46.902835) (xy 97.555 46.902835) (xy 97.555 40.864613) (xy 97.613386 40.833405) (xy 97.747962 40.722962) (xy 97.858405 40.588386) (xy 97.940472 40.43485) (xy 97.991008 40.268254) (xy 98.008072 40.095) (xy 98.008072 39.195) (xy 103.152089 39.195) (xy 103.183657 39.515516) (xy 103.277148 39.823715) (xy 103.428969 40.107752) (xy 103.633286 40.356714) (xy 103.882248 40.561031) (xy 104.166285 40.712852) (xy 104.474484 40.806343) (xy 104.714678 40.83) (xy 107.375322 40.83) (xy 107.615516 40.806343) (xy 107.923715 40.712852) (xy 108.207752 40.561031) (xy 108.456714 40.356714) (xy 108.661031 40.107752) (xy 108.812852 39.823715) (xy 108.906343 39.515516) (xy 108.937911 39.195) (xy 108.906343 38.874484) (xy 108.812852 38.566285) (xy 108.661031 38.282248) (xy 108.456714 38.033286) (xy 108.211763 37.832261) (xy 108.22 37.833072) (xy 110.22 37.833072) (xy 110.344482 37.820812) (xy 110.46418 37.784502) (xy 110.574494 37.725537) (xy 110.671185 37.646185) (xy 110.750537 37.549494) (xy 110.809502 37.43918) (xy 110.845812 37.319482) (xy 110.858072 37.195) (xy 110.858072 35.364495) (xy 112.77 35.364495) (xy 112.77 35.755505) (xy 112.846282 36.139003) (xy 112.995915 36.50025) (xy 113.213149 36.825364) (xy 113.489636 37.101851) (xy 113.81475 37.319085) (xy 114.175997 37.468718) (xy 114.559495 37.545) (xy 114.950505 37.545) (xy 115.334003 37.468718) (xy 115.69525 37.319085) (xy 116.020364 37.101851) (xy 116.296851 36.825364) (xy 116.514085 36.50025) (xy 116.585 36.329046) (xy 116.655915 36.50025) (xy 116.873149 36.825364) (xy 117.149636 37.101851) (xy 117.47475 37.319085) (xy 117.835997 37.468718) (xy 118.219495 37.545) (xy 118.610505 37.545) (xy 118.994003 37.468718) (xy 119.35525 37.319085) (xy 119.680364 37.101851) (xy 119.956851 36.825364) (xy 120.174085 36.50025) (xy 120.323718 36.139003) (xy 120.4 35.755505) (xy 120.4 35.364495) (xy 120.323718 34.980997) (xy 120.174085 34.61975) (xy 119.956851 34.294636) (xy 119.872215 34.21) (xy 120.896928 34.21) (xy 120.896928 36.91) (xy 120.909188 37.034482) (xy 120.945498 37.15418) (xy 121.004463 37.264494) (xy 121.083815 37.361185) (xy 121.180506 37.440537) (xy 121.29082 37.499502) (xy 121.410518 37.535812) (xy 121.535 37.548072) (xy 124.235 37.548072) (xy 124.359482 37.535812) (xy 124.47918 37.499502) (xy 124.589494 37.440537) (xy 124.686185 37.361185) (xy 124.715 37.326074) (xy 124.743815 37.361185) (xy 124.840506 37.440537) (xy 124.95082 37.499502) (xy 125.070518 37.535812) (xy 125.195 37.548072) (xy 127.895 37.548072) (xy 128.019482 37.535812) (xy 128.13918 37.499502) (xy 128.249494 37.440537) (xy 128.346185 37.361185) (xy 128.425537 37.264494) (xy 128.484502 37.15418) (xy 128.520812 37.034482) (xy 128.533072 36.91) (xy 128.533072 34.21) (xy 128.520812 34.085518) (xy 128.484502 33.96582) (xy 128.425537 33.855506) (xy 128.346185 33.758815) (xy 128.249494 33.679463) (xy 128.13918 33.620498) (xy 128.019482 33.584188) (xy 127.895 33.571928) (xy 125.195 33.571928) (xy 125.070518 33.584188) (xy 124.95082 33.620498) (xy 124.840506 33.679463) (xy 124.743815 33.758815) (xy 124.715 33.793926) (xy 124.686185 33.758815) (xy 124.589494 33.679463) (xy 124.47918 33.620498) (xy 124.359482 33.584188) (xy 124.235 33.571928) (xy 121.535 33.571928) (xy 121.410518 33.584188) (xy 121.29082 33.620498) (xy 121.180506 33.679463) (xy 121.083815 33.758815) (xy 121.004463 33.855506) (xy 120.945498 33.96582) (xy 120.909188 34.085518) (xy 120.896928 34.21) (xy 119.872215 34.21) (xy 119.680364 34.018149) (xy 119.35525 33.800915) (xy 118.994003 33.651282) (xy 118.610505 33.575) (xy 118.219495 33.575) (xy 117.835997 33.651282) (xy 117.47475 33.800915) (xy 117.149636 34.018149) (xy 116.873149 34.294636) (xy 116.655915 34.61975) (xy 116.585 34.790954) (xy 116.514085 34.61975) (xy 116.296851 34.294636) (xy 116.020364 34.018149) (xy 115.69525 33.800915) (xy 115.334003 33.651282) (xy 114.950505 33.575) (xy 114.559495 33.575) (xy 114.175997 33.651282) (xy 113.81475 33.800915) (xy 113.489636 34.018149) (xy 113.213149 34.294636) (xy 112.995915 34.61975) (xy 112.846282 34.980997) (xy 112.77 35.364495) (xy 110.858072 35.364495) (xy 110.858072 35.195) (xy 110.845812 35.070518) (xy 110.809502 34.95082) (xy 110.750537 34.840506) (xy 110.671185 34.743815) (xy 110.574494 34.664463) (xy 110.46418 34.605498) (xy 110.344482 34.569188) (xy 110.22 34.556928) (xy 108.22 34.556928) (xy 108.095518 34.569188) (xy 107.97582 34.605498) (xy 107.865506 34.664463) (xy 107.768815 34.743815) (xy 107.689463 34.840506) (xy 107.630498 34.95082) (xy 107.594188 35.070518) (xy 107.581928 35.195) (xy 107.581928 37.195) (xy 107.594188 37.319482) (xy 107.630498 37.43918) (xy 107.689463 37.549494) (xy 107.751304 37.624848) (xy 107.615516 37.583657) (xy 107.375322 37.56) (xy 105.012653 37.56) (xy 105.095808 37.330413) (xy 104.14 36.374605) (xy 103.184192 37.330413) (xy 103.279956 37.594814) (xy 103.569571 37.735704) (xy 103.881108 37.817384) (xy 103.901615 37.818617) (xy 103.882248 37.828969) (xy 103.633286 38.033286) (xy 103.428969 38.282248) (xy 103.277148 38.566285) (xy 103.183657 38.874484) (xy 103.152089 39.195) (xy 98.008072 39.195) (xy 98.008072 38.645) (xy 97.991008 38.471746) (xy 97.940472 38.30515) (xy 97.858405 38.151614) (xy 97.747962 38.017038) (xy 97.613386 37.906595) (xy 97.45985 37.824528) (xy 97.293254 37.773992) (xy 97.12 37.756928) (xy 95.92 37.756928) (xy 95.746746 37.773992) (xy 95.58015 37.824528) (xy 95.426614 37.906595) (xy 95.292038 38.017038) (xy 95.181595 38.151614) (xy 95.127223 38.253337) (xy 95.075134 38.189866) (xy 94.849014 38.004294) (xy 94.591034 37.866401) (xy 94.311111 37.781487) (xy 94.02 37.752815) (xy 93.72889 37.781487) (xy 93.448967 37.866401) (xy 93.190987 38.004294) (xy 92.964866 38.189866) (xy 92.779294 38.415986) (xy 92.77 38.433374) (xy 92.760706 38.415986) (xy 92.575134 38.189866) (xy 92.349014 38.004294) (xy 92.091034 37.866401) (xy 91.811111 37.781487) (xy 91.52 37.752815) (xy 91.22889 37.781487) (xy 90.948967 37.866401) (xy 90.690987 38.004294) (xy 90.464866 38.189866) (xy 90.279294 38.415986) (xy 90.27 38.433374) (xy 90.260706 38.415986) (xy 90.075134 38.189866) (xy 89.849014 38.004294) (xy 89.591034 37.866401) (xy 89.311111 37.781487) (xy 89.02 37.752815) (xy 88.72889 37.781487) (xy 88.448967 37.866401) (xy 88.190987 38.004294) (xy 87.964866 38.189866) (xy 87.779294 38.415986) (xy 87.77 38.433374) (xy 87.760706 38.415986) (xy 87.575134 38.189866) (xy 87.349014 38.004294) (xy 87.091034 37.866401) (xy 86.811111 37.781487) (xy 86.52 37.752815) (xy 86.471893 37.757553) (xy 87.907446 36.322) (xy 99.71 36.322) (xy 99.71 37.322) (xy 99.766193 37.638532) (xy 99.883058 37.93802) (xy 100.056105 38.208954) (xy 100.278683 38.440922) (xy 100.542239 38.62501) (xy 100.836645 38.754144) (xy 100.964566 38.785124) (xy 101.218 38.665777) (xy 101.218 36.322) (xy 99.71 36.322) (xy 87.907446 36.322) (xy 89.161446 35.068) (xy 99.71 35.068) (xy 99.71 36.068) (xy 101.218 36.068) (xy 101.218 33.724223) (xy 101.472 33.724223) (xy 101.472 36.068) (xy 101.492 36.068) (xy 101.492 36.322) (xy 101.472 36.322) (xy 101.472 38.665777) (xy 101.725434 38.785124) (xy 101.853355 38.754144) (xy 102.147761 38.62501) (xy 102.411317 38.440922) (xy 102.633895 38.208954) (xy 102.806942 37.93802) (xy 102.923807 37.638532) (xy 102.98 37.322) (xy 102.98 37.141903) (xy 103.004587 37.150808) (xy 103.960395 36.195) (xy 104.319605 36.195) (xy 105.275413 37.150808) (xy 105.539814 37.055044) (xy 105.680704 36.765429) (xy 105.762384 36.453892) (xy 105.781718 36.132405) (xy 105.737961 35.813325) (xy 105.632795 35.508912) (xy 105.539814 35.334956) (xy 105.275413 35.239192) (xy 104.319605 36.195) (xy 103.960395 36.195) (xy 103.004587 35.239192) (xy 102.98 35.248097) (xy 102.98 35.068) (xy 102.978507 35.059587) (xy 103.184192 35.059587) (xy 104.14 36.015395) (xy 105.095808 35.059587) (xy 105.012653 34.83) (xy 105.918 34.83) (xy 105.918 33.322) (xy 106.172 33.322) (xy 106.172 34.83) (xy 107.172 34.83) (xy 107.488532 34.773807) (xy 107.78802 34.656942) (xy 108.058954 34.483895) (xy 108.290922 34.261317) (xy 108.47501 33.997761) (xy 108.604144 33.703355) (xy 108.635124 33.575434) (xy 108.515777 33.322) (xy 106.172 33.322) (xy 105.918 33.322) (xy 103.574223 33.322) (xy 103.454876 33.575434) (xy 103.485856 33.703355) (xy 103.61499 33.997761) (xy 103.799078 34.261317) (xy 104.031046 34.483895) (xy 104.146156 34.557417) (xy 104.077405 34.553282) (xy 103.758325 34.597039) (xy 103.453912 34.702205) (xy 103.279956 34.795186) (xy 103.184192 35.059587) (xy 102.978507 35.059587) (xy 102.923807 34.751468) (xy 102.806942 34.45198) (xy 102.633895 34.181046) (xy 102.411317 33.949078) (xy 102.147761 33.76499) (xy 101.853355 33.635856) (xy 101.725434 33.604876) (xy 101.472 33.724223) (xy 101.218 33.724223) (xy 100.964566 33.604876) (xy 100.836645 33.635856) (xy 100.542239 33.76499) (xy 100.278683 33.949078) (xy 100.056105 34.181046) (xy 99.883058 34.45198) (xy 99.766193 34.751468) (xy 99.71 35.068) (xy 89.161446 35.068) (xy 91.41488 32.814566) (xy 103.454876 32.814566) (xy 103.574223 33.068) (xy 105.918 33.068) (xy 105.918 31.56) (xy 106.172 31.56) (xy 106.172 33.068) (xy 108.515777 33.068) (xy 108.635124 32.814566) (xy 108.604144 32.686645) (xy 108.47501 32.392239) (xy 108.290922 32.128683) (xy 108.058954 31.906105) (xy 107.78802 31.733058) (xy 107.488532 31.616193) (xy 107.172 31.56) (xy 106.172 31.56) (xy 105.918 31.56) (xy 104.918 31.56) (xy 104.601468 31.616193) (xy 104.30198 31.733058) (xy 104.031046 31.906105) (xy 103.799078 32.128683) (xy 103.61499 32.392239) (xy 103.485856 32.686645) (xy 103.454876 32.814566) (xy 91.41488 32.814566) (xy 93.584103 30.645344) (xy 93.83374 30.695) (xy 94.12626 30.695) (xy 94.413158 30.637932) (xy 94.683411 30.52599) (xy 94.926632 30.363475) (xy 95.133475 30.156632) (xy 95.29599 29.913411) (xy 95.407932 29.643158) (xy 95.465 29.35626) (xy 95.465 29.06374) (xy 95.407932 28.776842) (xy 95.29599 28.506589) (xy 95.133475 28.263368) (xy 94.926632 28.056525) (xy 94.683411 27.89401) (xy 94.413158 27.782068) (xy 94.12626 27.725) (xy 93.83374 27.725) (xy 93.546842 27.782068) (xy 93.276589 27.89401) (xy 93.033368 28.056525) (xy 92.826525 28.263368) (xy 92.71 28.43776) (xy 92.593475 28.263368) (xy 92.386632 28.056525) (xy 92.143411 27.89401) (xy 91.873158 27.782068) (xy 91.58626 27.725) (xy 91.29374 27.725) (xy 91.006842 27.782068) (xy 90.736589 27.89401) (xy 90.493368 28.056525) (xy 90.361513 28.18838) (xy 90.339502 28.11582) (xy 90.280537 28.005506) (xy 90.201185 27.908815) (xy 90.104494 27.829463) (xy 89.99418 27.770498) (xy 89.874482 27.734188) (xy 89.75 27.721928) (xy 88.05 27.721928) (xy 87.925518 27.734188) (xy 87.80582 27.770498) (xy 87.695506 27.829463) (xy 87.598815 27.908815) (xy 87.519463 28.005506) (xy 87.460498 28.11582) (xy 87.424188 28.235518) (xy 87.411928 28.36) (xy 87.411928 29.658625) (xy 82.625788 34.444766) (xy 82.597742 34.467783) (xy 82.505893 34.579701) (xy 82.437643 34.707388) (xy 82.417495 34.773807) (xy 82.395615 34.845935) (xy 82.381424 34.99002) (xy 70.189426 34.99002) (xy 74.534103 30.645344) (xy 74.78374 30.695) (xy 75.07626 30.695) (xy 75.363158 30.637932) (xy 75.633411 30.52599) (xy 75.876632 30.363475) (xy 76.083475 30.156632) (xy 76.24599 29.913411) (xy 76.357932 29.643158) (xy 76.415 29.35626) (xy 76.415 29.06374) (xy 76.357932 28.776842) (xy 76.24599 28.506589) (xy 76.083475 28.263368) (xy 75.876632 28.056525) (xy 75.633411 27.89401) (xy 75.363158 27.782068) (xy 75.07626 27.725) (xy 74.78374 27.725) (xy 74.496842 27.782068) (xy 74.226589 27.89401) (xy 73.983368 28.056525) (xy 73.776525 28.263368) (xy 73.66 28.43776) (xy 73.543475 28.263368) (xy 73.336632 28.056525) (xy 73.093411 27.89401) (xy 72.823158 27.782068) (xy 72.53626 27.725) (xy 72.24374 27.725) (xy 71.956842 27.782068) (xy 71.686589 27.89401) (xy 71.443368 28.056525) (xy 71.311513 28.18838) (xy 71.289502 28.11582) (xy 71.230537 28.005506) (xy 71.151185 27.908815) (xy 71.054494 27.829463) (xy 70.94418 27.770498) (xy 70.824482 27.734188) (xy 70.7 27.721928) (xy 69 27.721928) (xy 68.875518 27.734188) (xy 68.75582 27.770498) (xy 68.645506 27.829463) (xy 68.548815 27.908815) (xy 68.469463 28.005506) (xy 68.410498 28.11582) (xy 68.374188 28.235518) (xy 68.361928 28.36) (xy 68.361928 29.658625) (xy 63.575788 34.444766) (xy 63.547742 34.467783) (xy 63.455893 34.579701) (xy 63.387643 34.707388) (xy 63.367495 34.773807) (xy 63.345615 34.845935) (xy 63.331424 34.99002) (xy 49.094414 34.99002) (xy 51.599435 32.485) (xy 53.303895 32.485) (xy 53.34 32.488556) (xy 53.376105 32.485) (xy 53.484085 32.474365) (xy 53.622633 32.432337) (xy 53.75032 32.364087) (xy 53.862238 32.272238) (xy 53.885259 32.244188) (xy 55.484103 30.645344) (xy 55.73374 30.695) (xy 56.02626 30.695) (xy 56.313158 30.637932) (xy 56.583411 30.52599) (xy 56.826632 30.363475) (xy 57.033475 30.156632) (xy 57.19599 29.913411) (xy 57.307932 29.643158) (xy 57.365 29.35626) (xy 57.365 29.06374) (xy 57.307932 28.776842) (xy 57.19599 28.506589) (xy 57.033475 28.263368) (xy 56.826632 28.056525) (xy 56.583411 27.89401) (xy 56.313158 27.782068) (xy 56.02626 27.725) (xy 55.73374 27.725) (xy 55.446842 27.782068) (xy 55.176589 27.89401) (xy 54.933368 28.056525) (xy 54.726525 28.263368) (xy 54.61 28.43776) (xy 54.493475 28.263368) (xy 54.286632 28.056525) (xy 54.043411 27.89401) (xy 53.773158 27.782068) (xy 53.48626 27.725) (xy 53.19374 27.725) (xy 52.906842 27.782068) (xy 52.636589 27.89401) (xy 52.393368 28.056525) (xy 52.261513 28.18838) (xy 52.239502 28.11582) (xy 52.180537 28.005506) (xy 52.101185 27.908815) (xy 52.004494 27.829463) (xy 51.89418 27.770498) (xy 51.774482 27.734188) (xy 51.65 27.721928) (xy 49.95 27.721928) (xy 49.825518 27.734188) (xy 49.70582 27.770498) (xy 49.595506 27.829463) (xy 49.498815 27.908815) (xy 49.419463 28.005506) (xy 49.360498 28.11582) (xy 49.324188 28.235518) (xy 49.311928 28.36) (xy 49.311928 29.658625) (xy 44.525788 34.444766) (xy 44.497742 34.467783) (xy 44.405893 34.579701) (xy 44.337643 34.707388) (xy 44.317495 34.773807) (xy 44.295615 34.845935) (xy 44.281424 34.99002) (xy 26.06 34.99002) (xy 26.06 30.711971) (xy 26.121633 30.860766) (xy 26.503024 31.431558) (xy 26.988442 31.916976) (xy 27.559234 32.298367) (xy 28.193463 32.561073) (xy 28.866758 32.695) (xy 29.553242 32.695) (xy 30.226537 32.561073) (xy 30.860766 32.298367) (xy 31.431558 31.916976) (xy 31.916976 31.431558) (xy 32.298367 30.860766) (xy 32.561073 30.226537) (xy 32.695 29.553242) (xy 32.695 28.866758) (xy 32.5942 28.36) (xy 33.436928 28.36) (xy 33.436928 30.06) (xy 33.449188 30.184482) (xy 33.485498 30.30418) (xy 33.544463 30.414494) (xy 33.623815 30.511185) (xy 33.720506 30.590537) (xy 33.83082 30.649502) (xy 33.950518 30.685812) (xy 34.075 30.698072) (xy 35.775 30.698072) (xy 35.899482 30.685812) (xy 36.01918 30.649502) (xy 36.129494 30.590537) (xy 36.226185 30.511185) (xy 36.305537 30.414494) (xy 36.364502 30.30418) (xy 36.388966 30.223534) (xy 36.464731 30.307588) (xy 36.69808 30.481641) (xy 36.960901 30.606825) (xy 37.10811 30.651476) (xy 37.338 30.530155) (xy 37.338 29.337) (xy 37.318 29.337) (xy 37.318 29.083) (xy 37.338 29.083) (xy 37.338 27.889845) (xy 37.592 27.889845) (xy 37.592 29.083) (xy 37.612 29.083) (xy 37.612 29.337) (xy 37.592 29.337) (xy 37.592 30.530155) (xy 37.82189 30.651476) (xy 37.969099 30.606825) (xy 38.23192 30.481641) (xy 38.465269 30.307588) (xy 38.660178 30.091355) (xy 38.729805 29.974466) (xy 38.851525 30.156632) (xy 39.058368 30.363475) (xy 39.301589 30.52599) (xy 39.571842 30.637932) (xy 39.85874 30.695) (xy 40.15126 30.695) (xy 40.438158 30.637932) (xy 40.708411 30.52599) (xy 40.951632 30.363475) (xy 41.158475 30.156632) (xy 41.32099 29.913411) (xy 41.432932 29.643158) (xy 41.49 29.35626) (xy 41.49 29.06374) (xy 41.432932 28.776842) (xy 41.32099 28.506589) (xy 41.158475 28.263368) (xy 40.951632 28.056525) (xy 40.708411 27.89401) (xy 40.438158 27.782068) (xy 40.15126 27.725) (xy 39.85874 27.725) (xy 39.571842 27.782068) (xy 39.301589 27.89401) (xy 39.058368 28.056525) (xy 38.851525 28.263368) (xy 38.729805 28.445534) (xy 38.660178 28.328645) (xy 38.465269 28.112412) (xy 38.23192 27.938359) (xy 37.969099 27.813175) (xy 37.82189 27.768524) (xy 37.592 27.889845) (xy 37.338 27.889845) (xy 37.10811 27.768524) (xy 36.960901 27.813175) (xy 36.69808 27.938359) (xy 36.464731 28.112412) (xy 36.388966 28.196466) (xy 36.364502 28.11582) (xy 36.305537 28.005506) (xy 36.226185 27.908815) (xy 36.129494 27.829463) (xy 36.01918 27.770498) (xy 35.899482 27.734188) (xy 35.775 27.721928) (xy 34.075 27.721928) (xy 33.950518 27.734188) (xy 33.83082 27.770498) (xy 33.720506 27.829463) (xy 33.623815 27.908815) (xy 33.544463 28.005506) (xy 33.485498 28.11582) (xy 33.449188 28.235518) (xy 33.436928 28.36) (xy 32.5942 28.36) (xy 32.561073 28.193463) (xy 32.298367 27.559234) (xy 31.916976 26.988442) (xy 31.431558 26.503024) (xy 30.860766 26.121633) (xy 30.711971 26.06) (xy 122.958029 26.06) ) ) ) ) ================================================ FILE: electronics/chainlinkDriverTester/chainlinkDriverTester.lib ================================================ EESchema-LIBRARY Version 2.4 #encoding utf-8 # # 74HC165_2_74HC165 # DEF 74HC165_2_74HC165 U 0 40 Y Y 1 F N F0 "U" 150 700 50 H V C CNN F1 "74HC165_2_74HC165" 250 600 50 H V C CNN F2 "MODULE" 600 1200 50 H I C CNN F3 "DOCUMENTATION" 750 1100 50 H I C CNN DRAW S 300 550 -300 -550 0 1 0 f X ~LD 1 -600 350 300 R 50 50 1 1 I X SER 10 -600 -400 300 R 50 50 1 1 I X A 11 600 500 300 L 50 50 1 1 I X B 12 600 400 300 L 50 50 1 1 I X C 13 600 300 300 L 50 50 1 1 I X D 14 600 200 300 L 50 50 1 1 I X CLKIN 15 -600 50 300 R 50 50 1 1 I X VCC 16 0 850 300 D 50 50 1 1 W X CLK 2 -600 150 300 R 50 50 1 1 I X E 3 600 100 300 L 50 50 1 1 I X F 4 600 0 300 L 50 50 1 1 I X G 5 600 -100 300 L 50 50 1 1 I X H 6 600 -200 300 L 50 50 1 1 I X ~QH 7 600 -500 300 L 50 50 1 1 O X GND 8 0 -850 300 U 50 50 1 1 W X QH 9 600 -400 300 L 50 50 1 1 O ENDDRAW ENDDEF # # 74xx_74HC244 # DEF 74xx_74HC244 U 0 20 Y Y 1 F N F0 "U" -300 650 50 H V C CNN F1 "74xx_74HC244" -300 -650 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN ALIAS 74HCT244 74AHC244 74AHCT244 $FPLIST TSSOP*4.4x6.5mm*P0.65mm* SSOP*4.4x6.5mm*P0.65mm* $ENDFPLIST DRAW S -300 600 300 -600 1 1 10 f P 4 1 0 6 50 0 -50 50 -50 -50 50 0 N X 1OE 1 -500 -400 200 R 50 50 1 0 I I X GND 10 0 -800 200 U 50 50 1 0 W X 2A3 11 -500 -200 200 R 50 50 1 0 I X 1Y3 12 500 200 200 L 50 50 1 0 T X 2A2 13 -500 -100 200 R 50 50 1 0 I X 1Y2 14 500 300 200 L 50 50 1 0 T X 2A1 15 -500 0 200 R 50 50 1 0 I X 1Y1 16 500 400 200 L 50 50 1 0 T X 2A0 17 -500 100 200 R 50 50 1 0 I X 1Y0 18 500 500 200 L 50 50 1 0 T X 2OE 19 -500 -500 200 R 50 50 1 0 I I X 1A0 2 -500 500 200 R 50 50 1 0 I X VCC 20 0 800 200 D 50 50 1 0 W X 2Y0 3 500 100 200 L 50 50 1 0 T X 1A1 4 -500 400 200 R 50 50 1 0 I X 2Y1 5 500 0 200 L 50 50 1 0 T X 1A2 6 -500 300 200 R 50 50 1 0 I X 2Y2 7 500 -100 200 L 50 50 1 0 T X 1A3 8 -500 200 200 R 50 50 1 0 I X 2Y3 9 500 -200 200 L 50 50 1 0 T ENDDRAW ENDDEF # # 74xx_74HC595 # DEF 74xx_74HC595 U 0 20 Y Y 1 F N F0 "U" -300 550 50 H V C CNN F1 "74xx_74HC595" -300 -650 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN ALIAS 74LS595 74HCT595 $FPLIST DIP*W7.62mm* SOIC*3.9x9.9mm*P1.27mm* TSSOP*4.4x5mm*P0.65mm* SOIC*5.3x10.2mm*P1.27mm* SOIC*7.5x10.3mm*P1.27mm* $ENDFPLIST DRAW S -300 500 300 -600 1 1 10 f X QB 1 400 300 100 L 50 50 1 0 T X ~SRCLR 10 -400 100 100 R 50 50 1 0 I X SRCLK 11 -400 200 100 R 50 50 1 0 I X RCLK 12 -400 -100 100 R 50 50 1 0 I X ~OE 13 -400 -200 100 R 50 50 1 0 I X SER 14 -400 400 100 R 50 50 1 0 I X QA 15 400 400 100 L 50 50 1 0 T X VCC 16 0 600 100 D 50 50 1 0 W X QC 2 400 200 100 L 50 50 1 0 T X QD 3 400 100 100 L 50 50 1 0 T X QE 4 400 0 100 L 50 50 1 0 T X QF 5 400 -100 100 L 50 50 1 0 T X QG 6 400 -200 100 L 50 50 1 0 T X QH 7 400 -300 100 L 50 50 1 0 T X GND 8 0 -700 100 U 50 50 1 0 W X QH' 9 400 -500 100 L 50 50 1 0 O ENDDRAW ENDDEF # # Analog_ADC_INA219BxD # DEF Analog_ADC_INA219BxD U 0 20 Y Y 1 F N F0 "U" -250 350 50 H V C CNN F1 "Analog_ADC_INA219BxD" 200 350 50 H V C CNN F2 "Package_SO:SOIC-8_3.9x4.9mm_P1.27mm" 800 -350 50 H I C CNN F3 "" 350 -100 50 H I C CNN ALIAS INA219BxD $FPLIST SOIC*3.9x4.9mm*P1.27mm* $ENDFPLIST DRAW S -300 300 300 -300 0 1 10 f X A1 1 400 -100 100 L 50 50 1 1 I X A0 2 400 -200 100 L 50 50 1 1 I X SDA 3 400 200 100 L 50 50 1 1 B X SCL 4 400 100 100 L 50 50 1 1 I X VS 5 0 400 100 D 50 50 1 1 W X GND 6 0 -400 100 U 50 50 1 1 W X IN- 7 -400 -100 100 R 50 50 1 1 I X IN+ 8 -400 100 100 R 50 50 1 1 I ENDDRAW ENDDEF # # Connector_Conn_01x05_Male # DEF Connector_Conn_01x05_Male J 0 40 Y N 1 F N F0 "J" 0 300 50 H V C CNN F1 "Connector_Conn_01x05_Male" 0 -300 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST Connector*:*_1x??_* $ENDFPLIST DRAW S 34 -195 0 -205 1 1 6 F S 34 -95 0 -105 1 1 6 F S 34 5 0 -5 1 1 6 F S 34 105 0 95 1 1 6 F S 34 205 0 195 1 1 6 F P 2 1 1 6 50 -200 34 -200 N P 2 1 1 6 50 -100 34 -100 N P 2 1 1 6 50 0 34 0 N P 2 1 1 6 50 100 34 100 N P 2 1 1 6 50 200 34 200 N X Pin_1 1 200 200 150 L 50 50 1 1 P X Pin_2 2 200 100 150 L 50 50 1 1 P X Pin_3 3 200 0 150 L 50 50 1 1 P X Pin_4 4 200 -100 150 L 50 50 1 1 P X Pin_5 5 200 -200 150 L 50 50 1 1 P ENDDRAW ENDDEF # # Connector_Conn_01x12_Male # DEF Connector_Conn_01x12_Male J 0 40 Y N 1 F N F0 "J" 0 600 50 H V C CNN F1 "Connector_Conn_01x12_Male" 0 -700 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST Connector*:*_1x??_* $ENDFPLIST DRAW S 34 -595 0 -605 1 1 6 F S 34 -495 0 -505 1 1 6 F S 34 -395 0 -405 1 1 6 F S 34 -295 0 -305 1 1 6 F S 34 -195 0 -205 1 1 6 F S 34 -95 0 -105 1 1 6 F S 34 5 0 -5 1 1 6 F S 34 105 0 95 1 1 6 F S 34 205 0 195 1 1 6 F S 34 305 0 295 1 1 6 F S 34 405 0 395 1 1 6 F S 34 505 0 495 1 1 6 F P 2 1 1 6 50 -600 34 -600 N P 2 1 1 6 50 -500 34 -500 N P 2 1 1 6 50 -400 34 -400 N P 2 1 1 6 50 -300 34 -300 N P 2 1 1 6 50 -200 34 -200 N P 2 1 1 6 50 -100 34 -100 N P 2 1 1 6 50 0 34 0 N P 2 1 1 6 50 100 34 100 N P 2 1 1 6 50 200 34 200 N P 2 1 1 6 50 300 34 300 N P 2 1 1 6 50 400 34 400 N P 2 1 1 6 50 500 34 500 N X Pin_1 1 200 500 150 L 50 50 1 1 P X Pin_10 10 200 -400 150 L 50 50 1 1 P X Pin_11 11 200 -500 150 L 50 50 1 1 P X Pin_12 12 200 -600 150 L 50 50 1 1 P X Pin_2 2 200 400 150 L 50 50 1 1 P X Pin_3 3 200 300 150 L 50 50 1 1 P X Pin_4 4 200 200 150 L 50 50 1 1 P X Pin_5 5 200 100 150 L 50 50 1 1 P X Pin_6 6 200 0 150 L 50 50 1 1 P X Pin_7 7 200 -100 150 L 50 50 1 1 P X Pin_8 8 200 -200 150 L 50 50 1 1 P X Pin_9 9 200 -300 150 L 50 50 1 1 P ENDDRAW ENDDEF # # Connector_Screw_Terminal_01x02 # DEF Connector_Screw_Terminal_01x02 J 0 40 Y N 1 F N F0 "J" 0 100 50 H V C CNN F1 "Connector_Screw_Terminal_01x02" 0 -200 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST TerminalBlock*:* $ENDFPLIST DRAW C 0 -100 25 1 1 6 N C 0 0 25 1 1 6 N S -50 50 50 -150 1 1 10 f P 2 1 1 6 -21 -87 13 -120 N P 2 1 1 6 -21 13 13 -20 N P 2 1 1 6 -14 -80 20 -113 N P 2 1 1 6 -14 20 20 -13 N X Pin_1 1 -200 0 150 R 50 50 1 1 P X Pin_2 2 -200 -100 150 R 50 50 1 1 P ENDDRAW ENDDEF # # Connector_Screw_Terminal_01x03 # DEF Connector_Screw_Terminal_01x03 J 0 40 Y N 1 F N F0 "J" 0 200 50 H V C CNN F1 "Connector_Screw_Terminal_01x03" 0 -200 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST TerminalBlock*:* $ENDFPLIST DRAW C 0 -100 25 1 1 6 N C 0 0 25 1 1 6 N C 0 100 25 1 1 6 N S -50 150 50 -150 1 1 10 f P 2 1 1 6 -21 -87 13 -120 N P 2 1 1 6 -21 13 13 -20 N P 2 1 1 6 -21 113 13 80 N P 2 1 1 6 -14 -80 20 -113 N P 2 1 1 6 -14 20 20 -13 N P 2 1 1 6 -14 120 20 87 N X Pin_1 1 -200 100 150 R 50 50 1 1 P X Pin_2 2 -200 0 150 R 50 50 1 1 P X Pin_3 3 -200 -100 150 R 50 50 1 1 P ENDDRAW ENDDEF # # Connector_Screw_Terminal_01x06 # DEF Connector_Screw_Terminal_01x06 J 0 40 Y N 1 F N F0 "J" 0 300 50 H V C CNN F1 "Connector_Screw_Terminal_01x06" 0 -400 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST TerminalBlock*:* $ENDFPLIST DRAW C 0 -300 25 1 1 6 N C 0 -200 25 1 1 6 N C 0 -100 25 1 1 6 N C 0 0 25 1 1 6 N C 0 100 25 1 1 6 N C 0 200 25 1 1 6 N S -50 250 50 -350 1 1 10 f P 2 1 1 6 -21 -287 13 -320 N P 2 1 1 6 -21 -187 13 -220 N P 2 1 1 6 -21 -87 13 -120 N P 2 1 1 6 -21 13 13 -20 N P 2 1 1 6 -21 113 13 80 N P 2 1 1 6 -21 213 13 180 N P 2 1 1 6 -14 -280 20 -313 N P 2 1 1 6 -14 -180 20 -213 N P 2 1 1 6 -14 -80 20 -113 N P 2 1 1 6 -14 20 20 -13 N P 2 1 1 6 -14 120 20 87 N P 2 1 1 6 -14 220 20 187 N X Pin_1 1 -200 200 150 R 50 50 1 1 P X Pin_2 2 -200 100 150 R 50 50 1 1 P X Pin_3 3 -200 0 150 R 50 50 1 1 P X Pin_4 4 -200 -100 150 R 50 50 1 1 P X Pin_5 5 -200 -200 150 R 50 50 1 1 P X Pin_6 6 -200 -300 150 R 50 50 1 1 P ENDDRAW ENDDEF # # CustomPower_+12V_Monitored # DEF CustomPower_+12V_Monitored #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -150 50 H I C CNN F1 "CustomPower_+12V_Monitored" 0 140 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 2 0 1 0 -30 50 0 100 N P 2 0 1 0 0 0 0 100 N P 2 0 1 0 0 100 30 50 N X +12V_Monitored 1 0 0 0 U 50 50 1 1 W N ENDDRAW ENDDEF # # CustomPower_IOVCC # DEF CustomPower_IOVCC #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -150 50 H I C CNN F1 "CustomPower_IOVCC" 0 140 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 2 0 1 0 -30 50 0 100 N P 2 0 1 0 0 0 0 100 N P 2 0 1 0 0 100 30 50 N X IOVCC 1 0 0 0 U 50 50 1 1 W N ENDDRAW ENDDEF # # Device_CP_Small # DEF Device_CP_Small C 0 10 N N 1 F N F0 "C" 10 70 50 H V L CNN F1 "Device_CP_Small" 10 -80 50 H V L CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST CP_* $ENDFPLIST DRAW S -60 -12 60 -27 0 1 0 F S -60 27 60 12 0 1 0 N P 2 0 1 0 -50 60 -30 60 N P 2 0 1 0 -40 50 -40 70 N X ~ 1 0 100 73 D 50 50 1 1 P X ~ 2 0 -100 73 U 50 50 1 1 P ENDDRAW ENDDEF # # Device_C_Small # DEF Device_C_Small C 0 10 N N 1 F N F0 "C" 10 70 50 H V L CNN F1 "Device_C_Small" 10 -80 50 H V L CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST C_* $ENDFPLIST DRAW P 2 0 1 13 -60 -20 60 -20 N P 2 0 1 12 -60 20 60 20 N X ~ 1 0 100 80 D 50 50 1 1 P X ~ 2 0 -100 80 U 50 50 1 1 P ENDDRAW ENDDEF # # Device_Jumper_NO_Small # DEF Device_Jumper_NO_Small JP 0 30 N N 1 F N F0 "JP" 0 80 50 H V C CNN F1 "Device_Jumper_NO_Small" 10 -60 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST SolderJumper*Open* $ENDFPLIST DRAW C -40 0 20 0 1 0 N C 40 0 20 0 1 0 N X 1 1 -100 0 40 R 50 50 0 1 P X 2 2 100 0 40 L 50 50 0 1 P ENDDRAW ENDDEF # # Device_R_Small # DEF Device_R_Small R 0 10 N N 1 F N F0 "R" 30 20 50 H V L CNN F1 "Device_R_Small" 30 -40 50 H V L CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST R_* $ENDFPLIST DRAW S -30 70 30 -70 0 1 8 N X ~ 1 0 100 30 D 50 50 1 1 P X ~ 2 0 -100 30 U 50 50 1 1 P ENDDRAW ENDDEF # # ESP32Modules_D1_32 # DEF ESP32Modules_D1_32 U 0 40 Y Y 1 F N F0 "U" 0 1100 50 H V C CNN F1 "ESP32Modules_D1_32" 0 950 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW S -550 1050 550 -1050 0 1 0 f P 2 0 1 0 -600 -850 -550 -850 N P 2 0 1 0 -600 -650 -550 -650 N P 2 0 1 0 -600 -450 -550 -450 N P 2 0 1 0 -600 -250 -550 -250 N P 2 0 1 0 -600 -50 -550 -50 N P 2 0 1 0 -600 150 -550 150 N P 2 0 1 0 -600 350 -550 350 N P 2 0 1 0 -600 550 -550 550 N P 2 0 1 0 -600 750 -550 750 N P 2 0 1 0 -600 950 -550 950 N P 2 0 1 0 600 -850 550 -850 N P 2 0 1 0 600 -650 550 -650 N P 2 0 1 0 600 -450 550 -450 N P 2 0 1 0 600 -250 550 -250 N P 2 0 1 0 600 -50 550 -50 N P 2 0 1 0 600 150 550 150 N P 2 0 1 0 600 350 550 350 N P 2 0 1 0 600 550 550 550 N P 2 0 1 0 600 750 550 750 N P 2 0 1 0 600 950 550 950 N X GND 1 -700 950 100 R 50 50 1 1 P X GPIO19/D6 10 -650 50 100 R 50 50 1 1 P X GPIO34 11 -700 -50 100 R 50 50 1 1 P X GPIO23/D7 12 -650 -150 100 R 50 50 1 1 P X GPIO14 13 -700 -250 100 R 50 50 1 1 P X GPIO5/D8 14 -650 -350 100 R 50 50 1 1 P X ~ 15 -700 -450 100 R 50 50 1 1 N X 3V3/3V3 16 -650 -550 100 R 50 50 1 1 P X GPIO9 17 -700 -650 100 R 50 50 1 1 P X GPIO13 18 -650 -750 100 R 50 50 1 1 P X GPIO11 19 -700 -850 100 R 50 50 1 1 P X RST 2 -650 850 100 R 50 50 1 1 P X GPIO10 20 -650 -950 100 R 50 50 1 1 P X GND 21 700 950 100 L 50 50 1 1 P X GPIO1/TX 22 650 850 100 L 50 50 1 1 P X GPIO27 23 700 750 100 L 50 50 1 1 P X GPIO3/RX 24 650 650 100 L 50 50 1 1 P X GPIO25 25 700 550 100 L 50 50 1 1 P X GPIO22/D1 26 650 450 100 L 50 50 1 1 P X GPIO32 27 700 350 100 L 50 50 1 1 P X GPIO21/D2 28 650 250 100 L 50 50 1 1 P X GPIO12 29 700 150 100 L 50 50 1 1 P X ~ 3 -700 750 100 R 50 50 1 1 N X GPIO17/D3 30 650 50 100 L 50 50 1 1 P X GPIO4 31 700 -50 100 L 50 50 1 1 P X GPIO16/D4 32 650 -150 100 L 50 50 1 1 P X GPIO0 33 700 -250 100 L 50 50 1 1 P X GND/GND 34 650 -350 100 L 50 50 1 1 P X GPIO2 35 700 -450 100 L 50 50 1 1 P X 5V/5V 36 650 -550 100 L 50 50 1 1 P X GPIO8 37 700 -650 100 L 50 50 1 1 P X GPIO15 38 650 -750 100 L 50 50 1 1 P X GPIO6 39 700 -850 100 L 50 50 1 1 P X GPIO36/A0 4 -650 650 100 R 50 50 1 1 P X GPIO7 40 650 -950 100 L 50 50 1 1 P X GPIO39 5 -700 550 100 R 50 50 1 1 P X GPIO26/D0 6 -650 450 100 R 50 50 1 1 P X GPIO35 7 -700 350 100 R 50 50 1 1 P X GPIO18/D5 8 -650 250 100 R 50 50 1 1 P X GPIO33 9 -700 150 100 R 50 50 1 1 P ENDDRAW ENDDEF # # ESP32Modules_TTGO_TDisplay # DEF ESP32Modules_TTGO_TDisplay U 0 40 Y Y 1 F N F0 "U" -200 750 50 H V C CNN F1 "ESP32Modules_TTGO_TDisplay" 0 650 50 H V C CNN F2 "" -200 50 50 H I C CNN F3 "" -200 50 50 H I C CNN DRAW C -60 -310 0 0 1 0 N C -60 -110 0 0 1 0 N S -400 700 400 -700 0 1 0 f P 2 0 1 0 -60 -290 -60 -300 N P 2 0 1 0 -60 -90 -60 -100 N P 4 0 1 0 -60 -270 -90 -320 -30 -320 -60 -270 N P 4 0 1 0 -60 -70 -90 -120 -30 -120 -60 -70 N P 4 0 1 0 370 100 400 130 400 70 370 100 F P 4 0 1 0 370 200 400 230 400 170 370 200 F P 4 0 1 0 370 300 400 330 400 270 370 300 F P 4 0 1 0 370 400 400 430 400 370 370 400 F X GND 1 -500 500 100 R 50 50 1 1 P X GND 10 -500 -400 100 R 50 50 1 1 P X GND 11 -500 -500 100 R 50 50 1 1 P X 3V3 12 -500 -600 100 R 50 50 1 1 P X 5V 13 500 -600 100 L 50 50 1 1 P X GND 14 500 -500 100 L 50 50 1 1 P X GPIO27 15 500 -400 100 L 50 50 1 1 P X GPIO26 16 500 -300 100 L 50 50 1 1 P X GPIO25 17 500 -200 100 L 50 50 1 1 P X GPIO33 18 500 -100 100 L 50 50 1 1 P X GPIO32 19 500 0 100 L 50 50 1 1 P X GND 2 -500 400 100 R 50 50 1 1 P X GPIO39 20 500 100 100 L 50 50 1 1 P X GPIO38 21 500 200 100 L 50 50 1 1 P X GPIO37 22 500 300 100 L 50 50 1 1 P X GPIO36 23 500 400 100 L 50 50 1 1 P X 3V3 24 500 500 100 L 50 50 1 1 P X GPIO21 3 -500 300 100 R 50 50 1 1 P X GPIO22 4 -500 200 100 R 50 50 1 1 P X GPIO17 5 -500 100 100 R 50 50 1 1 P X GPIO2 6 -500 0 100 R 50 50 1 1 P X GPIO15 7 -500 -100 100 R 50 50 1 1 P X GPIO13 8 -500 -200 100 R 50 50 1 1 P X GPIO12 9 -500 -300 100 R 50 50 1 1 P ENDDRAW ENDDEF # # INA219_Breakout_INA219_Breakout # DEF INA219_Breakout_INA219_Breakout U 0 40 Y Y 1 F N F0 "U" -150 400 50 H V C CNN F1 "INA219_Breakout_INA219_Breakout" 150 0 50 V V C CNN F2 "" -300 50 50 H I C CNN F3 "" -300 50 50 H I C CNN DRAW S -200 350 200 -350 0 1 0 f X VCC 1 -300 250 100 R 50 50 1 1 P X GND 2 -300 150 100 R 50 50 1 1 P X SCL 3 -300 50 100 R 50 50 1 1 P X SDA 4 -300 -50 100 R 50 50 1 1 P X VIN- 5 -300 -150 100 R 50 50 1 1 P X VIN+ 6 -300 -250 100 R 50 50 1 1 w ENDDRAW ENDDEF # # Interface_UART_MAX485E # DEF Interface_UART_MAX485E U 0 20 Y Y 1 F N F0 "U" -240 450 50 H V C CNN F1 "Interface_UART_MAX485E" 30 450 50 H V L CNN F2 "" 0 -700 50 H I C CNN F3 "" 0 50 50 H I C CNN ALIAS MAX483E MAX485E MAX487E MAX1487E MAX3485 MAX3483 MAX3486 $FPLIST DIP*W7.62mm* SOIC*3.9x4.9mm*P1.27mm* $ENDFPLIST DRAW C -12 -145 14 0 1 10 F C -1 59 14 0 1 10 F C 65 75 14 0 1 10 F S -300 400 300 -500 0 1 10 f S 50 125 50 125 0 1 0 N P 2 0 1 10 -160 -200 -75 -200 N P 2 0 1 10 -160 100 -50 100 N P 2 0 1 10 -50 -126 -50 -136 N P 2 0 1 10 -25 -200 210 -200 N P 3 0 1 10 -160 -100 -50 -100 -50 -125 N P 3 0 1 10 0 50 0 0 -160 0 N P 3 0 1 10 50 125 150 125 150 -200 N P 3 0 1 10 100 75 100 -150 0 -150 N P 4 0 1 10 -75 -125 -75 -225 25 -175 -75 -125 N P 4 0 1 10 -50 100 50 150 50 50 -50 100 N P 4 0 1 10 75 75 175 75 175 100 210 100 N X RO 1 -400 100 100 R 50 50 1 1 O X ~RE 2 -400 0 100 R 50 50 1 1 I X DE 3 -400 -100 100 R 50 50 1 1 I X DI 4 -400 -200 100 R 50 50 1 1 I X GND 5 0 -600 100 U 50 50 1 1 W X A 6 400 -200 100 L 50 50 1 1 B X B 7 400 100 100 L 50 50 1 1 B X VCC 8 0 500 100 D 50 50 1 1 W ENDDRAW ENDDEF # # Jumper_SolderJumper_2_Open # DEF Jumper_SolderJumper_2_Open JP 0 0 Y N 1 F N F0 "JP" 0 80 50 H V C CNN F1 "Jumper_SolderJumper_2_Open" 0 -100 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST SolderJumper*Open* $ENDFPLIST DRAW A -10 0 40 901 -901 0 1 0 N -10 40 -10 -40 A -10 0 40 901 -901 0 1 0 F -10 40 -10 -40 A 10 0 40 -899 899 0 1 0 N 10 -40 10 40 A 10 0 40 -899 899 0 1 0 F 10 -40 10 40 P 2 0 1 0 -10 40 -10 -40 N P 2 0 1 0 10 40 10 -40 N X A 1 -150 0 100 R 50 50 1 1 P X B 2 150 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # LCD_ST7789_240x240 # DEF LCD_ST7789_240x240 U 0 40 Y Y 1 F N F0 "U" 0 450 50 H V C CNN F1 "LCD_ST7789_240x240" 50 350 50 H V C CNN F2 "" -150 0 50 H I C CNN F3 "" -150 0 50 H I C CNN DRAW S -300 400 300 -350 0 1 0 f X BLK BLK -600 300 300 R 50 50 1 1 P X DC DC -600 200 300 R 50 50 1 1 P X GND GND -600 -300 300 R 50 50 1 1 P X RES RES -600 100 300 R 50 50 1 1 P X SCL(CLK) SCL -600 -100 300 R 50 50 1 1 P X SDA_(MOSI) SDA -600 0 300 R 50 50 1 1 P X VCC VCC -600 -200 300 R 50 50 1 1 P ENDDRAW ENDDEF # # LCD_ST7789_80x160 # DEF LCD_ST7789_80x160 U 0 40 Y Y 1 F N F0 "U" 0 500 50 H V C CNN F1 "LCD_ST7789_80x160" 50 400 50 H V C CNN F2 "" -150 50 50 H I C CNN F3 "" -150 50 50 H I C CNN DRAW S -300 450 300 -450 0 1 0 f X BLK BLK -600 350 300 R 50 50 1 1 P X CS CS -600 250 300 R 50 50 1 1 P X DC DC -600 150 300 R 50 50 1 1 P X GND GND -600 -350 300 R 50 50 1 1 P X RES RES -600 50 300 R 50 50 1 1 P X SCL(CLK) SCL -600 -150 300 R 50 50 1 1 P X SDA_(MOSI) SDA -600 -50 300 R 50 50 1 1 P X VCC VCC -600 -250 300 R 50 50 1 1 P ENDDRAW ENDDEF # # LevelShifterModule_LevelShifterModule # DEF LevelShifterModule_LevelShifterModule U 0 40 Y Y 1 F N F0 "U" 0 350 50 H V C CNN F1 "LevelShifterModule_LevelShifterModule" 0 400 50 H V C CNN F2 "" -150 50 50 H I C CNN F3 "" -150 50 50 H I C CNN DRAW S -250 300 250 -300 0 0 0 f X LV1 1 -350 250 100 R 50 50 1 1 B X HV 10 350 50 100 L 50 50 1 1 W X HV2 11 350 150 100 L 50 50 1 1 B X HV1 12 350 250 100 L 50 50 1 1 B X LV2 2 -350 150 100 R 50 50 1 1 B X LV 3 -350 50 100 R 50 50 1 1 W X GND 4 -350 -50 100 R 50 50 1 1 W X LV3 5 -350 -150 100 R 50 50 1 1 B X LV4 6 -350 -250 100 R 50 50 1 1 B X HV4 7 350 -250 100 L 50 50 1 1 B X HV3 8 350 -150 100 L 50 50 1 1 B X GND 9 350 -50 100 L 50 50 1 1 W ENDDRAW ENDDEF # # Mechanical_MountingHole # DEF Mechanical_MountingHole H 0 40 Y Y 1 F N F0 "H" 0 200 50 H V C CNN F1 "Mechanical_MountingHole" 0 125 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST MountingHole* $ENDFPLIST DRAW C 0 0 50 0 1 50 N ENDDRAW ENDDEF # # Mega2560Shield_Mega2560Shield # DEF Mega2560Shield_Mega2560Shield U 0 40 Y Y 1 F N F0 "U" 550 50 50 H V C CNN F1 "Mega2560Shield_Mega2560Shield" 350 -100 50 H V C CNN F2 "" -900 100 50 H I C CNN F3 "" -900 100 50 H I C CNN DRAW S 0 0 1100 -9000 0 1 0 f X 3V3 3V3 1200 -300 100 L 50 50 1 1 P X 5V 5V 1200 -400 100 L 50 50 1 1 P X A0 A0 1200 -7400 100 L 50 50 1 1 P X A1 A1 1200 -7500 100 L 50 50 1 1 P X A10 A10 1200 -8400 100 L 50 50 1 1 P X A11 A11 1200 -8500 100 L 50 50 1 1 P X A12 A12 1200 -8600 100 L 50 50 1 1 P X A13 A13 1200 -8700 100 L 50 50 1 1 P X A14 A14 1200 -8800 100 L 50 50 1 1 P X A15 A15 1200 -8900 100 L 50 50 1 1 P X A2 A2 1200 -7600 100 L 50 50 1 1 P X A3 A3 1200 -7700 100 L 50 50 1 1 P X A4 A4 1200 -7800 100 L 50 50 1 1 P X A5 A5 1200 -7900 100 L 50 50 1 1 P X A6 A6 1200 -8000 100 L 50 50 1 1 P X A7 A7 1200 -8100 100 L 50 50 1 1 P X A8 A8 1200 -8200 100 L 50 50 1 1 P X A9 A9 1200 -8300 100 L 50 50 1 1 P X AREF AREF 1200 -1000 100 L 50 50 1 1 P X D0 D0 1200 -1900 100 L 50 50 1 1 P X D1 D1 1200 -2000 100 L 50 50 1 1 P X D10 D10 1200 -2900 100 L 50 50 1 1 P X D11 D11 1200 -3000 100 L 50 50 1 1 P X D12 D12 1200 -3100 100 L 50 50 1 1 P X D13 D13 1200 -3200 100 L 50 50 1 1 P X D14 D14 1200 -3300 100 L 50 50 1 1 P X D15 D15 1200 -3400 100 L 50 50 1 1 P X D16 D16 1200 -3500 100 L 50 50 1 1 P X D17 D17 1200 -3600 100 L 50 50 1 1 P X D18 D18 1200 -3700 100 L 50 50 1 1 P X D19 D19 1200 -3800 100 L 50 50 1 1 P X D2 D2 1200 -2100 100 L 50 50 1 1 P X D20 D20 1200 -3900 100 L 50 50 1 1 P X D21 D21 1200 -4000 100 L 50 50 1 1 P X D22 D22 1200 -4100 100 L 50 50 1 1 P X D23 D23 1200 -4200 100 L 50 50 1 1 P X D24 D24 1200 -4300 100 L 50 50 1 1 P X D25 D25 1200 -4400 100 L 50 50 1 1 P X D26 D26 1200 -4500 100 L 50 50 1 1 P X D27 D27 1200 -4600 100 L 50 50 1 1 P X D28 D28 1200 -4700 100 L 50 50 1 1 P X D29 D29 1200 -4800 100 L 50 50 1 1 P X D3 D3 1200 -2200 100 L 50 50 1 1 P X D30 D30 1200 -4900 100 L 50 50 1 1 P X D31 D31 1200 -5000 100 L 50 50 1 1 P X D32 D32 1200 -5100 100 L 50 50 1 1 P X D33 D33 1200 -5200 100 L 50 50 1 1 P X D34 D34 1200 -5300 100 L 50 50 1 1 P X D35 D35 1200 -5400 100 L 50 50 1 1 P X D36 D36 1200 -5500 100 L 50 50 1 1 P X D37 D37 1200 -5600 100 L 50 50 1 1 P X D38 D38 1200 -5700 100 L 50 50 1 1 P X D39 D39 1200 -5800 100 L 50 50 1 1 P X D4 D4 1200 -2300 100 L 50 50 1 1 P X D40 D40 1200 -5900 100 L 50 50 1 1 P X D41 D41 1200 -6000 100 L 50 50 1 1 P X D42 D42 1200 -6100 100 L 50 50 1 1 P X D43 D43 1200 -6200 100 L 50 50 1 1 P X D44 D44 1200 -6300 100 L 50 50 1 1 P X D45 D45 1200 -6400 100 L 50 50 1 1 P X D46 D46 1200 -6500 100 L 50 50 1 1 P X D47 D47 1200 -6600 100 L 50 50 1 1 P X D48 D48 1200 -6700 100 L 50 50 1 1 P X D49 D49 1200 -6800 100 L 50 50 1 1 P X D5 D5 1200 -2400 100 L 50 50 1 1 P X D50 D50 1200 -6900 100 L 50 50 1 1 P X D51 D51 1200 -7000 100 L 50 50 1 1 P X D52 D52 1200 -7100 100 L 50 50 1 1 P X D53 D53 1200 -7200 100 L 50 50 1 1 P X D6 D6 1200 -2500 100 L 50 50 1 1 P X D7 D7 1200 -2600 100 L 50 50 1 1 P X D8 D8 1200 -2700 100 L 50 50 1 1 P X D9 D9 1200 -2800 100 L 50 50 1 1 P X GND GND 1200 -500 100 L 50 50 1 1 P X ICSP_5V ICSP_5V 1200 -1300 100 L 50 50 1 1 P X ICSP_GND ICSP_GND 1200 -1700 100 L 50 50 1 1 P X ICSP_MISO ICSP_MISO 1200 -1200 100 L 50 50 1 1 P X ICSP_MOSI ICSP_MOSI 1200 -1500 100 L 50 50 1 1 P X ICSP_RESET ICSP_RESET 1200 -1600 100 L 50 50 1 1 P X ICSP_SCK ICSP_SCK 1200 -1400 100 L 50 50 1 1 P X IOREF IOREF 1200 -800 100 L 50 50 1 1 P X NC NC 1200 -100 100 L 50 50 1 1 P X RESET RESET 1200 -900 100 L 50 50 1 1 P X VIN VIN 1200 -600 100 L 50 50 1 1 P ENDDRAW ENDDEF # # RS485Module_RS485Module # DEF RS485Module_RS485Module U 0 40 Y Y 1 F N F0 "U" 0 300 50 H V C CNN F1 "RS485Module_RS485Module" 0 350 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C 150 -100 50 0 1 0 N C 150 100 50 0 1 0 N S -450 250 450 -250 0 1 0 f S 50 200 250 -200 0 1 0 N P 2 0 1 0 100 -100 200 -100 N P 2 0 1 0 100 100 200 100 N P 2 0 1 0 150 -50 150 -150 N P 2 0 1 0 150 150 150 50 N X A A 550 -50 100 L 50 50 1 1 B X B B 550 50 100 L 50 50 1 1 B X DE DE -550 -50 100 R 50 50 1 1 I X DI DI -550 -150 100 R 50 50 1 1 I X GND GND 550 -150 100 L 50 50 1 1 W X RE RE -550 50 100 R 50 50 1 1 I X RO RO -550 150 100 R 50 50 1 1 O X VCC VCC 550 150 100 L 50 50 1 1 W ENDDRAW ENDDEF # # Transistor_Array_ULN2003A # DEF Transistor_Array_ULN2003A U 0 20 Y Y 1 F N F0 "U" 0 625 50 H V C CNN F1 "Transistor_Array_ULN2003A" 0 550 50 H V C CNN F2 "" 50 -550 50 H I L CNN F3 "" 100 -200 50 H I C CNN ALIAS ULN2003A ULN2002 ULN2002A ULN2004 ULN2004A $FPLIST DIP*W7.62mm* SOIC*3.9x9.9mm*P1.27mm* SSOP*4.4x5.2mm*P0.65mm* TSSOP*4.4x5mm*P0.65mm* SOIC*W*5.3x10.2mm*P1.27mm* $ENDFPLIST DRAW C -70 200 10 0 1 0 N C -50 -90 10 0 1 0 F C -50 0 10 0 1 0 F C -50 100 10 0 1 0 F C -20 200 10 0 1 0 F S -300 -500 300 500 0 1 10 f P 2 0 1 0 -180 200 -140 200 N P 2 0 1 0 -60 200 160 200 N P 2 0 1 0 0 265 -40 265 N P 3 0 1 0 -20 200 -20 400 115 400 N P 4 0 1 0 -140 240 -140 160 -80 200 -140 240 N P 4 0 1 0 0 235 -40 235 -20 265 0 235 N X I1 1 -400 200 100 R 50 50 1 1 I X O7 10 400 -400 100 L 50 50 1 1 C X O6 11 400 -300 100 L 50 50 1 1 C X O5 12 400 -200 100 L 50 50 1 1 C X O4 13 400 -100 100 L 50 50 1 1 C X O3 14 400 0 100 L 50 50 1 1 C X O2 15 400 100 100 L 50 50 1 1 C X O1 16 400 200 100 L 50 50 1 1 C X I2 2 -400 100 100 R 50 50 1 1 I X I3 3 -400 0 100 R 50 50 1 1 I X I4 4 -400 -100 100 R 50 50 1 1 I X I5 5 -400 -200 100 R 50 50 1 1 I X I6 6 -400 -300 100 R 50 50 1 1 I X I7 7 -400 -400 100 R 50 50 1 1 I X GND 8 0 -600 100 U 50 50 1 1 W X COM 9 400 400 100 L 50 50 1 1 P ENDDRAW ENDDEF # # Transistor_FET_BSS138 # DEF Transistor_FET_BSS138 Q 0 20 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "Transistor_FET_BSS138" 200 0 50 H V L CNN F2 "Package_TO_SOT_SMD:SOT-23" 200 -75 50 H I L CIN F3 "" 0 0 50 H I L CNN ALIAS 2N7002 2N7002E 2N7002H 2N7002K BS170F BS870 BSN20 BSS123 BSS127S DMG2302U DMG3402L DMG3404L DMG3406L DMG3414U DMG3418L DMN10H220L DMN10H700S DMN13H750S DMN2041L DMN2050L DMN2056U DMN2058U DMN2075U DMN2230U DMN24H11DS DMN24H3D5L DMN3042L DMN3051L DMN30H4D0L DMN3110S DMN3150L DMN3300U DMN3404L DMN6075S DMN6140L DMN67D7L DMN67D8L MMBF170 VN10LF ZVN3306F ZVN3310F ZVN3320F ZVN4106F ZXM61N02F ZXM61N03F ZXMN10A07F ZXMN2A01F ZXMN2A14F ZXMN2B01F ZXMN2B14FH ZXMN2F30FH ZXMN2F34FH ZXMN3A01F ZXMN3A14F ZXMN3B01F ZXMN3B14F ZXMN3F30FH ZXMN6A07F IRLML0030 IRLML2060 $FPLIST SOT?23* $ENDFPLIST DRAW C 65 0 110 0 1 10 N C 100 -70 10 0 1 0 F C 100 70 10 0 1 0 F P 2 0 1 0 10 0 -100 0 N P 2 0 1 10 10 75 10 -75 N P 2 0 1 10 30 -50 30 -90 N P 2 0 1 10 30 20 30 -20 N P 2 0 1 10 30 90 30 50 N P 2 0 1 0 100 100 100 70 N P 3 0 1 0 100 -100 100 0 30 0 N P 4 0 1 0 30 -70 130 -70 130 70 30 70 N P 4 0 1 0 40 0 80 15 80 -15 40 0 F P 4 0 1 0 110 20 115 15 145 15 150 10 N P 4 0 1 0 130 15 115 -10 145 -10 130 15 N X G 1 -200 0 100 R 50 50 1 1 I X S 2 100 -200 100 U 50 50 1 1 P X D 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # ULN2003AModule_ULN2003AModule # DEF ULN2003AModule_ULN2003AModule U 0 40 Y Y 1 F N F0 "U" 100 50 50 H V C CNN F1 "ULN2003AModule_ULN2003AModule" 250 -400 50 V V C CNN F2 "" 200 -250 50 H I C CNN F3 "" 200 -250 50 H I C CNN DRAW S 0 0 800 -800 0 1 0 f X EN_JMP1 EN_JMP1 900 -100 100 L 50 50 1 1 P X EN_JMP2 EN_JMP2 900 -200 100 L 50 50 1 1 P X GND GND 350 -900 100 U 50 50 1 1 P X IN1 IN1 -100 -100 100 R 50 50 1 1 P X IN2 IN2 -100 -200 100 R 50 50 1 1 P X IN3 IN3 -100 -300 100 R 50 50 1 1 P X IN4 IN4 -100 -400 100 R 50 50 1 1 P X IN5 IN5 -100 -500 100 R 50 50 1 1 P X IN6 IN6 -100 -600 100 R 50 50 1 1 P X IN7 IN7 -100 -700 100 R 50 50 1 1 P X VCC VCC 350 100 100 D 50 50 1 1 P ENDDRAW ENDDEF # # oled_SSD1306_I2C # DEF oled_SSD1306_I2C U 0 40 Y Y 1 F N F0 "U" 0 300 50 H V C CNN F1 "oled_SSD1306_I2C" 100 0 50 V V C CNN F2 "" -250 -300 50 H I C CNN F3 "" -250 -300 50 H I C CNN DRAW S -150 250 150 -250 0 1 0 f X SDA 1 -250 150 100 R 50 50 1 1 P X SCL 2 -250 50 100 R 50 50 1 1 P X VCC 3 -250 -50 100 R 50 50 1 1 P X GND 4 -250 -150 100 R 50 50 1 1 P ENDDRAW ENDDEF # # power_+12V # DEF power_+12V #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -150 50 H I C CNN F1 "power_+12V" 0 140 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 2 0 1 0 -30 50 0 100 N P 2 0 1 0 0 0 0 100 N P 2 0 1 0 0 100 30 50 N X +12V 1 0 0 0 U 50 50 1 1 W N ENDDRAW ENDDEF # # power_+5V # DEF power_+5V #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -150 50 H I C CNN F1 "power_+5V" 0 140 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 2 0 1 0 -30 50 0 100 N P 2 0 1 0 0 0 0 100 N P 2 0 1 0 0 100 30 50 N X +5V 1 0 0 0 U 50 50 1 1 W N ENDDRAW ENDDEF # # power_GND # DEF power_GND #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -250 50 H I C CNN F1 "power_GND" 0 -150 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 6 0 1 0 0 0 0 -50 50 -50 0 -100 -50 -50 0 -50 N X GND 1 0 0 0 D 50 50 1 1 W N ENDDRAW ENDDEF # # power_PWR_FLAG # DEF power_PWR_FLAG #FLG 0 0 N N 1 F P F0 "#FLG" 0 75 50 H I C CNN F1 "power_PWR_FLAG" 0 150 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 6 0 1 0 0 0 0 50 -40 75 0 100 40 75 0 50 N X pwr 1 0 0 0 U 50 50 0 0 w ENDDRAW ENDDEF # #End Library ================================================ FILE: electronics/chainlinkDriverTester/chainlinkDriverTester.pro ================================================ update=Fri 02 Apr 2021 09:21:45 AM PDT version=1 last_client=kicad [general] version=1 RootSch= BoardNm= [cvpcb] version=1 NetIExt=net [eeschema] version=1 LibDir= [eeschema/libraries] [schematic_editor] version=1 PageLayoutDescrFile= PlotDirectoryName=./ SubpartIdSeparator=0 SubpartFirstId=65 NetFmtName=Pcbnew SpiceAjustPassiveValues=0 LabSize=50 ERC_TestSimilarLabels=1 [pcbnew] version=1 PageLayoutDescrFile= LastNetListRead= CopperLayerCount=2 BoardThickness=1.6 AllowMicroVias=0 AllowBlindVias=0 RequireCourtyardDefinitions=0 ProhibitOverlappingCourtyards=1 MinTrackWidth=0.127 MinViaDiameter=0.45 MinViaDrill=0.2 MinMicroViaDiameter=0.2 MinMicroViaDrill=0.09999999999999999 MinHoleToHole=0.25 TrackWidth1=0.2 TrackWidth2=0.15 TrackWidth3=0.35 TrackWidth4=0.55 TrackWidth5=2 ViaDiameter1=0.5 ViaDrill1=0.3 dPairWidth1=0.2 dPairGap1=0.25 dPairViaGap1=0.25 SilkLineWidth=0.12 SilkTextSizeV=1 SilkTextSizeH=1 SilkTextSizeThickness=0.15 SilkTextItalic=0 SilkTextUpright=1 CopperLineWidth=0.2 CopperTextSizeV=1.5 CopperTextSizeH=1.5 CopperTextThickness=0.3 CopperTextItalic=0 CopperTextUpright=1 EdgeCutLineWidth=0.05 CourtyardLineWidth=0.05 OthersLineWidth=0.15 OthersTextSizeV=1 OthersTextSizeH=1 OthersTextSizeThickness=0.15 OthersTextItalic=0 OthersTextUpright=1 SolderMaskClearance=0 SolderMaskMinWidth=0 SolderPasteClearance=0 SolderPasteRatio=-0 [pcbnew/Layer.F.Cu] Name=F.Cu Type=0 Enabled=1 [pcbnew/Layer.In1.Cu] Name=In1.Cu Type=0 Enabled=0 [pcbnew/Layer.In2.Cu] Name=In2.Cu Type=0 Enabled=0 [pcbnew/Layer.In3.Cu] Name=In3.Cu Type=0 Enabled=0 [pcbnew/Layer.In4.Cu] Name=In4.Cu Type=0 Enabled=0 [pcbnew/Layer.In5.Cu] Name=In5.Cu Type=0 Enabled=0 [pcbnew/Layer.In6.Cu] Name=In6.Cu Type=0 Enabled=0 [pcbnew/Layer.In7.Cu] Name=In7.Cu Type=0 Enabled=0 [pcbnew/Layer.In8.Cu] Name=In8.Cu Type=0 Enabled=0 [pcbnew/Layer.In9.Cu] Name=In9.Cu Type=0 Enabled=0 [pcbnew/Layer.In10.Cu] Name=In10.Cu Type=0 Enabled=0 [pcbnew/Layer.In11.Cu] Name=In11.Cu Type=0 Enabled=0 [pcbnew/Layer.In12.Cu] Name=In12.Cu Type=0 Enabled=0 [pcbnew/Layer.In13.Cu] Name=In13.Cu Type=0 Enabled=0 [pcbnew/Layer.In14.Cu] Name=In14.Cu Type=0 Enabled=0 [pcbnew/Layer.In15.Cu] Name=In15.Cu Type=0 Enabled=0 [pcbnew/Layer.In16.Cu] Name=In16.Cu Type=0 Enabled=0 [pcbnew/Layer.In17.Cu] Name=In17.Cu Type=0 Enabled=0 [pcbnew/Layer.In18.Cu] Name=In18.Cu Type=0 Enabled=0 [pcbnew/Layer.In19.Cu] Name=In19.Cu Type=0 Enabled=0 [pcbnew/Layer.In20.Cu] Name=In20.Cu Type=0 Enabled=0 [pcbnew/Layer.In21.Cu] Name=In21.Cu Type=0 Enabled=0 [pcbnew/Layer.In22.Cu] Name=In22.Cu Type=0 Enabled=0 [pcbnew/Layer.In23.Cu] Name=In23.Cu Type=0 Enabled=0 [pcbnew/Layer.In24.Cu] Name=In24.Cu Type=0 Enabled=0 [pcbnew/Layer.In25.Cu] Name=In25.Cu Type=0 Enabled=0 [pcbnew/Layer.In26.Cu] Name=In26.Cu Type=0 Enabled=0 [pcbnew/Layer.In27.Cu] Name=In27.Cu Type=0 Enabled=0 [pcbnew/Layer.In28.Cu] Name=In28.Cu Type=0 Enabled=0 [pcbnew/Layer.In29.Cu] Name=In29.Cu Type=0 Enabled=0 [pcbnew/Layer.In30.Cu] Name=In30.Cu Type=0 Enabled=0 [pcbnew/Layer.B.Cu] Name=B.Cu Type=0 Enabled=1 [pcbnew/Layer.B.Adhes] Enabled=1 [pcbnew/Layer.F.Adhes] Enabled=1 [pcbnew/Layer.B.Paste] Enabled=1 [pcbnew/Layer.F.Paste] Enabled=1 [pcbnew/Layer.B.SilkS] Enabled=1 [pcbnew/Layer.F.SilkS] Enabled=1 [pcbnew/Layer.B.Mask] Enabled=1 [pcbnew/Layer.F.Mask] Enabled=1 [pcbnew/Layer.Dwgs.User] Enabled=1 [pcbnew/Layer.Cmts.User] Enabled=1 [pcbnew/Layer.Eco1.User] Enabled=1 [pcbnew/Layer.Eco2.User] Enabled=1 [pcbnew/Layer.Edge.Cuts] Enabled=1 [pcbnew/Layer.Margin] Enabled=1 [pcbnew/Layer.B.CrtYd] Enabled=1 [pcbnew/Layer.F.CrtYd] Enabled=1 [pcbnew/Layer.B.Fab] Enabled=1 [pcbnew/Layer.F.Fab] Enabled=1 [pcbnew/Layer.Rescue] Enabled=0 [pcbnew/Netclasses] [pcbnew/Netclasses/Default] Name=Default Clearance=0.15 TrackWidth=0.2 ViaDiameter=0.5 ViaDrill=0.3 uViaDiameter=0.3 uViaDrill=0.1 dPairWidth=0.2 dPairGap=0.25 dPairViaGap=0.25 [pcbnew/Netclasses/1] Name=motor Clearance=0.2 TrackWidth=0.8 ViaDiameter=0.8 ViaDrill=0.4 uViaDiameter=0.3 uViaDrill=0.1 dPairWidth=0.2 dPairGap=0.25 dPairViaGap=0.25 [pcbnew/Netclasses/2] Name=save Clearance=0.2 TrackWidth=0.25 ViaDiameter=0.8 ViaDrill=0.4 uViaDiameter=0.3 uViaDrill=0.1 dPairWidth=0.2 dPairGap=0.25 dPairViaGap=0.25 ================================================ FILE: electronics/chainlinkDriverTester/chainlinkDriverTester.sch ================================================ EESchema Schematic File Version 4 EELAYER 30 0 EELAYER END $Descr USLedger 17000 11000 encoding utf-8 Sheet 1 1 Title "" Date "" Rev "" Comp "" Comment1 "" Comment2 "" Comment3 "" Comment4 "" $EndDescr $Comp L Mechanical:MountingHole_Pad H1 U 1 1 61902623 P 14800 750 F 0 "H1" H 14900 796 50 0000 L CNN F 1 "MountingHole" H 14900 705 50 0000 L CNN F 2 "MountingHole:MountingHole_3.2mm_M3_ISO7380_Pad" H 14800 750 50 0001 C CNN F 3 "~" H 14800 750 50 0001 C CNN 1 14800 750 1 0 0 -1 $EndComp $Comp L Mechanical:MountingHole_Pad H2 U 1 1 619139E1 P 15050 750 F 0 "H2" H 15150 796 50 0000 L CNN F 1 "MountingHole" H 15150 705 50 0000 L CNN F 2 "MountingHole:MountingHole_3.2mm_M3_ISO7380_Pad" H 15050 750 50 0001 C CNN F 3 "~" H 15050 750 50 0001 C CNN 1 15050 750 1 0 0 -1 $EndComp $Comp L Mechanical:MountingHole_Pad H3 U 1 1 61913E82 P 15300 750 F 0 "H3" H 15400 796 50 0000 L CNN F 1 "MountingHole" H 15400 705 50 0000 L CNN F 2 "MountingHole:MountingHole_3.2mm_M3_ISO7380_Pad" H 15300 750 50 0001 C CNN F 3 "~" H 15300 750 50 0001 C CNN 1 15300 750 1 0 0 -1 $EndComp $Comp L Mechanical:MountingHole_Pad H4 U 1 1 61914268 P 15550 750 F 0 "H4" H 15650 796 50 0000 L CNN F 1 "MountingHole" H 15650 705 50 0000 L CNN F 2 "MountingHole:MountingHole_3.2mm_M3_ISO7380_Pad" H 15550 750 50 0001 C CNN F 3 "~" H 15550 750 50 0001 C CNN 1 15550 750 1 0 0 -1 $EndComp $Comp L Connector:Conn_01x05_Male J3 U 1 1 6072FE6C P 1700 2200 F 0 "J3" H 1672 2132 50 0000 R CNN F 1 "Motor A" H 1672 2223 50 0000 R CNN F 2 "Connector_JST:JST_XH_B5B-XH-A_1x05_P2.50mm_Vertical" H 1700 2200 50 0001 C CNN F 3 "~" H 1700 2200 50 0001 C CNN 1 1700 2200 -1 0 0 -1 $EndComp Text Label 750 2000 0 50 ~ 0 OUT_A_PHASE_A Text Label 750 2100 0 50 ~ 0 OUT_A_PHASE_B Text Label 750 2200 0 50 ~ 0 OUT_A_PHASE_C Text Label 750 2300 0 50 ~ 0 OUT_A_PHASE_D Wire Wire Line 750 2000 1500 2000 Wire Wire Line 750 2100 1500 2100 Wire Wire Line 750 2200 1500 2200 Wire Wire Line 750 2300 1500 2300 $Comp L Connector:Conn_01x05_Male J5 U 1 1 63D07061 P 3100 2200 F 0 "J5" H 3072 2132 50 0000 R CNN F 1 "Motor B" H 3072 2223 50 0000 R CNN F 2 "Connector_JST:JST_XH_B5B-XH-A_1x05_P2.50mm_Vertical" H 3100 2200 50 0001 C CNN F 3 "~" H 3100 2200 50 0001 C CNN 1 3100 2200 -1 0 0 -1 $EndComp Text Label 2150 2000 0 50 ~ 0 OUT_B_PHASE_A Text Label 2150 2100 0 50 ~ 0 OUT_B_PHASE_B Text Label 2150 2200 0 50 ~ 0 OUT_B_PHASE_C Text Label 2150 2300 0 50 ~ 0 OUT_B_PHASE_D Wire Wire Line 2150 2000 2900 2000 Wire Wire Line 2150 2100 2900 2100 Wire Wire Line 2150 2200 2900 2200 Wire Wire Line 2150 2300 2900 2300 $Comp L Connector:Conn_01x05_Male J6 U 1 1 63DADADE P 4500 2200 F 0 "J6" H 4472 2132 50 0000 R CNN F 1 "Motor C" H 4472 2223 50 0000 R CNN F 2 "Connector_JST:JST_XH_B5B-XH-A_1x05_P2.50mm_Vertical" H 4500 2200 50 0001 C CNN F 3 "~" H 4500 2200 50 0001 C CNN 1 4500 2200 -1 0 0 -1 $EndComp Text Label 3550 2000 0 50 ~ 0 OUT_C_PHASE_A Text Label 3550 2100 0 50 ~ 0 OUT_C_PHASE_B Text Label 3550 2200 0 50 ~ 0 OUT_C_PHASE_C Text Label 3550 2300 0 50 ~ 0 OUT_C_PHASE_D Wire Wire Line 3550 2000 4300 2000 Wire Wire Line 3550 2100 4300 2100 Wire Wire Line 3550 2200 4300 2200 Wire Wire Line 3550 2300 4300 2300 $Comp L Connector:Conn_01x05_Male J7 U 1 1 63DADAFC P 5900 2200 F 0 "J7" H 5872 2132 50 0000 R CNN F 1 "Motor D" H 5872 2223 50 0000 R CNN F 2 "Connector_JST:JST_XH_B5B-XH-A_1x05_P2.50mm_Vertical" H 5900 2200 50 0001 C CNN F 3 "~" H 5900 2200 50 0001 C CNN 1 5900 2200 -1 0 0 -1 $EndComp Text Label 4950 2000 0 50 ~ 0 OUT_D_PHASE_A Text Label 4950 2100 0 50 ~ 0 OUT_D_PHASE_B Text Label 4950 2200 0 50 ~ 0 OUT_D_PHASE_C Text Label 4950 2300 0 50 ~ 0 OUT_D_PHASE_D Wire Wire Line 4950 2000 5700 2000 Wire Wire Line 4950 2100 5700 2100 Wire Wire Line 4950 2200 5700 2200 Wire Wire Line 4950 2300 5700 2300 $Comp L power:+12V #PWR015 U 1 1 60F5782B P 1300 750 F 0 "#PWR015" H 1300 600 50 0001 C CNN F 1 "+12V" H 1315 923 50 0000 C CNN F 2 "" H 1300 750 50 0001 C CNN F 3 "" H 1300 750 50 0001 C CNN 1 1300 750 1 0 0 -1 $EndComp $Comp L power:GND #PWR04 U 1 1 60FBE6C2 P 1900 6850 F 0 "#PWR04" H 1900 6600 50 0001 C CNN F 1 "GND" H 1905 6677 50 0000 C CNN F 2 "" H 1900 6850 50 0001 C CNN F 3 "" H 1900 6850 50 0001 C CNN 1 1900 6850 1 0 0 -1 $EndComp $Comp L power:GND #PWR020 U 1 1 60FBEBB8 P 3950 6850 F 0 "#PWR020" H 3950 6600 50 0001 C CNN F 1 "GND" H 3955 6677 50 0000 C CNN F 2 "" H 3950 6850 50 0001 C CNN F 3 "" H 3950 6850 50 0001 C CNN 1 3950 6850 1 0 0 -1 $EndComp Wire Wire Line 1850 6800 1900 6800 Wire Wire Line 1900 6800 1900 6850 Wire Wire Line 3950 6800 3950 6850 Wire Wire Line 1850 6400 2450 6400 Wire Wire Line 1850 6700 2450 6700 Wire Wire Line 1850 6500 2450 6500 Wire Wire Line 1850 6600 2450 6600 Text Label 2450 6400 2 50 ~ 0 CLOCK Text Label 2450 6700 2 50 ~ 0 LATCH Text Label 2450 6500 2 50 ~ 0 MOTOR_DATA Text Label 2450 6600 2 50 ~ 0 SENSOR_DATA Text Label 3250 6700 0 50 ~ 0 LATCH_OUT Text Label 3250 6600 0 50 ~ 0 SENSOR_IN $Comp L Connector:Conn_01x03_Male J8 U 1 1 61119DE9 P 12300 1800 F 0 "J8" H 12272 1732 50 0000 R CNN F 1 "Sensor A" H 12272 1823 50 0000 R CNN F 2 "Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_Vertical" H 12300 1800 50 0001 C CNN F 3 "~" H 12300 1800 50 0001 C CNN 1 12300 1800 -1 0 0 1 $EndComp $Comp L Connector:Conn_01x03_Male J9 U 1 1 6115565C P 12300 2200 F 0 "J9" H 12272 2132 50 0000 R CNN F 1 "Sensor B" H 12272 2223 50 0000 R CNN F 2 "Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_Vertical" H 12300 2200 50 0001 C CNN F 3 "~" H 12300 2200 50 0001 C CNN 1 12300 2200 -1 0 0 1 $EndComp $Comp L Connector:Conn_01x03_Male J10 U 1 1 61155EE4 P 12300 2600 F 0 "J10" H 12272 2532 50 0000 R CNN F 1 "Sensor C" H 12272 2623 50 0000 R CNN F 2 "Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_Vertical" H 12300 2600 50 0001 C CNN F 3 "~" H 12300 2600 50 0001 C CNN 1 12300 2600 -1 0 0 1 $EndComp $Comp L Connector:Conn_01x03_Male J11 U 1 1 61156491 P 12300 3000 F 0 "J11" H 12272 2932 50 0000 R CNN F 1 "Sensor D" H 12272 3023 50 0000 R CNN F 2 "Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_Vertical" H 12300 3000 50 0001 C CNN F 3 "~" H 12300 3000 50 0001 C CNN 1 12300 3000 -1 0 0 1 $EndComp $Comp L Connector:Conn_01x05_Male J12 U 1 1 606B94FD P 7250 2200 F 0 "J12" H 7222 2132 50 0000 R CNN F 1 "Motor E" H 7222 2223 50 0000 R CNN F 2 "Connector_JST:JST_XH_B5B-XH-A_1x05_P2.50mm_Vertical" H 7250 2200 50 0001 C CNN F 3 "~" H 7250 2200 50 0001 C CNN 1 7250 2200 -1 0 0 -1 $EndComp Text Label 6300 2000 0 50 ~ 0 OUT_E_PHASE_A Text Label 6300 2100 0 50 ~ 0 OUT_E_PHASE_B Text Label 6300 2200 0 50 ~ 0 OUT_E_PHASE_C Text Label 6300 2300 0 50 ~ 0 OUT_E_PHASE_D Wire Wire Line 6300 2000 7050 2000 Wire Wire Line 6300 2100 7050 2100 Wire Wire Line 6300 2200 7050 2200 Wire Wire Line 6300 2300 7050 2300 $Comp L Connector:Conn_01x05_Male J13 U 1 1 606B9929 P 8650 2200 F 0 "J13" H 8622 2132 50 0000 R CNN F 1 "Motor F" H 8622 2223 50 0000 R CNN F 2 "Connector_JST:JST_XH_B5B-XH-A_1x05_P2.50mm_Vertical" H 8650 2200 50 0001 C CNN F 3 "~" H 8650 2200 50 0001 C CNN 1 8650 2200 -1 0 0 -1 $EndComp Text Label 7700 2000 0 50 ~ 0 OUT_F_PHASE_A Text Label 7700 2100 0 50 ~ 0 OUT_F_PHASE_B Text Label 7700 2200 0 50 ~ 0 OUT_F_PHASE_C Text Label 7700 2300 0 50 ~ 0 OUT_F_PHASE_D Wire Wire Line 7700 2000 8450 2000 Wire Wire Line 7700 2100 8450 2100 Wire Wire Line 7700 2200 8450 2200 Wire Wire Line 7700 2300 8450 2300 $Comp L Connector:Conn_01x03_Male J14 U 1 1 60A61F26 P 12300 3400 F 0 "J14" H 12272 3332 50 0000 R CNN F 1 "Sensor E" H 12272 3423 50 0000 R CNN F 2 "Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_Vertical" H 12300 3400 50 0001 C CNN F 3 "~" H 12300 3400 50 0001 C CNN 1 12300 3400 -1 0 0 1 $EndComp $Comp L Connector:Conn_01x03_Male J15 U 1 1 60A61F30 P 12300 3800 F 0 "J15" H 12272 3732 50 0000 R CNN F 1 "Sensor F" H 12272 3823 50 0000 R CNN F 2 "Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_Vertical" H 12300 3800 50 0001 C CNN F 3 "~" H 12300 3800 50 0001 C CNN 1 12300 3800 -1 0 0 1 $EndComp $Comp L Mechanical:MountingHole_Pad H5 U 1 1 60AEF190 P 15800 750 F 0 "H5" H 15900 796 50 0000 L CNN F 1 "MountingHole" H 15900 705 50 0000 L CNN F 2 "MountingHole:MountingHole_3.2mm_M3_ISO7380_Pad" H 15800 750 50 0001 C CNN F 3 "~" H 15800 750 50 0001 C CNN 1 15800 750 1 0 0 -1 $EndComp Wire Wire Line 3250 6400 4000 6400 Wire Wire Line 3250 6700 4000 6700 Wire Wire Line 3250 6500 4000 6500 Wire Wire Line 3250 6600 4000 6600 NoConn ~ 14800 850 NoConn ~ 15050 850 NoConn ~ 15300 850 NoConn ~ 15550 850 NoConn ~ 15800 850 Text Label 750 2750 0 50 ~ 0 OUT_A_PHASE_A Text Label 750 2850 0 50 ~ 0 OUT_A_PHASE_B Text Label 750 2950 0 50 ~ 0 OUT_A_PHASE_C Text Label 750 3050 0 50 ~ 0 OUT_A_PHASE_D Wire Wire Line 750 2750 1500 2750 Wire Wire Line 750 2850 1500 2850 Wire Wire Line 750 2950 1500 2950 Wire Wire Line 750 3050 1500 3050 Text Label 2150 2750 0 50 ~ 0 OUT_B_PHASE_A Text Label 2150 2850 0 50 ~ 0 OUT_B_PHASE_B Text Label 2150 2950 0 50 ~ 0 OUT_B_PHASE_C Text Label 2150 3050 0 50 ~ 0 OUT_B_PHASE_D Wire Wire Line 2150 2750 2900 2750 Wire Wire Line 2150 2850 2900 2850 Wire Wire Line 2150 2950 2900 2950 Wire Wire Line 2150 3050 2900 3050 Text Label 3550 2750 0 50 ~ 0 OUT_C_PHASE_A Text Label 3550 2850 0 50 ~ 0 OUT_C_PHASE_B Text Label 3550 2950 0 50 ~ 0 OUT_C_PHASE_C Text Label 3550 3050 0 50 ~ 0 OUT_C_PHASE_D Wire Wire Line 3550 2750 4300 2750 Wire Wire Line 3550 2850 4300 2850 Wire Wire Line 3550 2950 4300 2950 Wire Wire Line 3550 3050 4300 3050 Text Label 4950 2750 0 50 ~ 0 OUT_D_PHASE_A Text Label 4950 2850 0 50 ~ 0 OUT_D_PHASE_B Text Label 4950 2950 0 50 ~ 0 OUT_D_PHASE_C Text Label 4950 3050 0 50 ~ 0 OUT_D_PHASE_D Wire Wire Line 4950 2750 5700 2750 Wire Wire Line 4950 2850 5700 2850 Wire Wire Line 4950 2950 5700 2950 Wire Wire Line 4950 3050 5700 3050 Text Label 6300 2750 0 50 ~ 0 OUT_E_PHASE_A Text Label 6300 2850 0 50 ~ 0 OUT_E_PHASE_B Text Label 6300 2950 0 50 ~ 0 OUT_E_PHASE_C Text Label 6300 3050 0 50 ~ 0 OUT_E_PHASE_D Wire Wire Line 6300 2750 7050 2750 Wire Wire Line 6300 2850 7050 2850 Wire Wire Line 6300 2950 7050 2950 Wire Wire Line 6300 3050 7050 3050 Text Label 7700 2750 0 50 ~ 0 OUT_F_PHASE_A Text Label 7700 2850 0 50 ~ 0 OUT_F_PHASE_B Text Label 7700 2950 0 50 ~ 0 OUT_F_PHASE_C Text Label 7700 3050 0 50 ~ 0 OUT_F_PHASE_D Wire Wire Line 7700 2750 8450 2750 Wire Wire Line 7700 2850 8450 2850 Wire Wire Line 7700 2950 8450 2950 Wire Wire Line 7700 3050 8450 3050 Text Label 750 2400 0 50 ~ 0 OUT_A_COMMON Wire Wire Line 750 2400 1500 2400 Text Label 750 3150 0 50 ~ 0 OUT_A_COMMON Wire Wire Line 750 3150 1500 3150 Text Label 2150 2400 0 50 ~ 0 OUT_B_COMMON Wire Wire Line 2150 2400 2900 2400 Text Label 2150 3150 0 50 ~ 0 OUT_B_COMMON Wire Wire Line 2150 3150 2900 3150 Text Label 3550 2400 0 50 ~ 0 OUT_C_COMMON Wire Wire Line 3550 2400 4300 2400 Text Label 3550 3150 0 50 ~ 0 OUT_C_COMMON Wire Wire Line 3550 3150 4300 3150 Text Label 4950 2400 0 50 ~ 0 OUT_D_COMMON Wire Wire Line 4950 2400 5700 2400 Text Label 4950 3150 0 50 ~ 0 OUT_D_COMMON Wire Wire Line 4950 3150 5700 3150 Text Label 6300 2400 0 50 ~ 0 OUT_E_COMMON Wire Wire Line 6300 2400 7050 2400 Text Label 6300 3150 0 50 ~ 0 OUT_E_COMMON Wire Wire Line 6300 3150 7050 3150 Text Label 7700 2400 0 50 ~ 0 OUT_F_COMMON Wire Wire Line 7700 2400 8450 2400 Text Label 7700 3150 0 50 ~ 0 OUT_F_COMMON Wire Wire Line 7700 3150 8450 3150 $Comp L ESP32Modules:TTGO_TDisplay U2 U 1 1 60D0A4DC P 3100 4600 F 0 "U2" H 3100 5465 50 0000 C CNN F 1 "TTGO_TDisplay" H 3100 5374 50 0000 C CNN F 2 "ESP32:T-DISPLAY_extra_pins" H 2900 4650 50 0001 C CNN F 3 "" H 2900 4650 50 0001 C CNN 1 3100 4600 1 0 0 -1 $EndComp $Comp L power:GND #PWR0101 U 1 1 60D0A4E2 P 1600 4250 F 0 "#PWR0101" H 1600 4000 50 0001 C CNN F 1 "GND" H 1605 4077 50 0000 C CNN F 2 "" H 1600 4250 50 0001 C CNN F 3 "" H 1600 4250 50 0001 C CNN 1 1600 4250 1 0 0 -1 $EndComp Wire Wire Line 1600 4250 1600 4200 Wire Wire Line 1600 4100 2600 4100 Wire Wire Line 2600 4200 1600 4200 Connection ~ 1600 4200 Wire Wire Line 1600 4200 1600 4100 $Comp L power:GND #PWR0102 U 1 1 60D0A4ED P 2400 5350 F 0 "#PWR0102" H 2400 5100 50 0001 C CNN F 1 "GND" H 2405 5177 50 0000 C CNN F 2 "" H 2400 5350 50 0001 C CNN F 3 "" H 2400 5350 50 0001 C CNN 1 2400 5350 1 0 0 -1 $EndComp Wire Wire Line 2600 5000 2400 5000 Wire Wire Line 2400 5000 2400 5100 Wire Wire Line 2600 5100 2400 5100 Connection ~ 2400 5100 Wire Wire Line 2400 5100 2400 5350 $Comp L power:GND #PWR0103 U 1 1 60D0A4F8 P 3700 5300 F 0 "#PWR0103" H 3700 5050 50 0001 C CNN F 1 "GND" H 3705 5127 50 0000 C CNN F 2 "" H 3700 5300 50 0001 C CNN F 3 "" H 3700 5300 50 0001 C CNN 1 3700 5300 1 0 0 -1 $EndComp Wire Wire Line 3600 5100 3700 5100 Wire Wire Line 3700 5100 3700 5300 $Comp L power:+5V #PWR0104 U 1 1 60D0A500 P 3850 5200 F 0 "#PWR0104" H 3850 5050 50 0001 C CNN F 1 "+5V" H 3865 5373 50 0000 C CNN F 2 "" H 3850 5200 50 0001 C CNN F 3 "" H 3850 5200 50 0001 C CNN 1 3850 5200 1 0 0 -1 $EndComp Wire Wire Line 3850 5200 3600 5200 Text Label 4200 4700 2 50 ~ 0 CLOCK Text Label 4200 4600 2 50 ~ 0 MOTOR_DATA Text Label 4200 4800 2 50 ~ 0 LATCH Text Label 4200 4500 2 50 ~ 0 SENSOR_DATA Text Label 1900 4300 0 50 ~ 0 SDA Text Label 1900 4400 0 50 ~ 0 SCL Wire Wire Line 4200 4500 3600 4500 Wire Wire Line 3600 4600 4200 4600 Wire Wire Line 4200 4700 3600 4700 Wire Wire Line 3600 4800 4200 4800 Wire Wire Line 3750 4000 3750 4100 Wire Wire Line 3750 4100 3600 4100 $Comp L power:+3.3V #PWR0105 U 1 1 60D0A51A P 3750 4000 F 0 "#PWR0105" H 3750 3850 50 0001 C CNN F 1 "+3.3V" H 3765 4173 50 0000 C CNN F 2 "" H 3750 4000 50 0001 C CNN F 3 "" H 3750 4000 50 0001 C CNN 1 3750 4000 1 0 0 -1 $EndComp Text Label 4200 4900 2 50 ~ 0 MCP_RESET Wire Wire Line 3600 4900 4200 4900 Wire Wire Line 1900 4300 2600 4300 Wire Wire Line 1900 4400 2600 4400 Wire Wire Line 2600 4800 1900 4800 Text Label 4200 4300 2 50 ~ 0 MCP_INT Wire Wire Line 4200 4300 3600 4300 $Comp L power:PWR_FLAG #FLG0101 U 1 1 60D0A534 P 3750 4000 F 0 "#FLG0101" H 3750 4075 50 0001 C CNN F 1 "PWR_FLAG" V 3750 4128 50 0000 L CNN F 2 "" H 3750 4000 50 0001 C CNN F 3 "~" H 3750 4000 50 0001 C CNN 1 3750 4000 0 1 1 0 $EndComp Connection ~ 3750 4000 $Comp L Device:R_Small R? U 1 1 60D19D91 P 6700 4000 AR Path="/60D00052/60D19D91" Ref="R?" Part="1" AR Path="/60D19D91" Ref="R1" Part="1" F 0 "R1" H 6759 4046 50 0000 L CNN F 1 "1k" H 6759 3955 50 0000 L CNN F 2 "Resistor_SMD:R_0805_2012Metric" H 6700 4000 50 0001 C CNN F 3 "~" H 6700 4000 50 0001 C CNN F 4 "RMCF0805JT1K00CT-ND" H 6700 4000 50 0001 C CNN "DK#" 1 6700 4000 1 0 0 -1 $EndComp $Comp L Device:R_Small R? U 1 1 60D19D97 P 7000 4000 AR Path="/60D00052/60D19D97" Ref="R?" Part="1" AR Path="/60D19D97" Ref="R2" Part="1" F 0 "R2" H 7059 4046 50 0000 L CNN F 1 "1k" H 7059 3955 50 0000 L CNN F 2 "Resistor_SMD:R_0805_2012Metric" H 7000 4000 50 0001 C CNN F 3 "~" H 7000 4000 50 0001 C CNN F 4 "RMCF0805JT1K00CT-ND" H 7000 4000 50 0001 C CNN "DK#" 1 7000 4000 1 0 0 -1 $EndComp $Comp L power:+3.3V #PWR? U 1 1 60D19D9D P 6850 3800 AR Path="/60D00052/60D19D9D" Ref="#PWR?" Part="1" AR Path="/60D19D9D" Ref="#PWR0107" Part="1" F 0 "#PWR0107" H 6850 3650 50 0001 C CNN F 1 "+3.3V" H 6865 3973 50 0000 C CNN F 2 "" H 6850 3800 50 0001 C CNN F 3 "" H 6850 3800 50 0001 C CNN 1 6850 3800 1 0 0 -1 $EndComp Wire Wire Line 6700 3900 6700 3800 Wire Wire Line 6700 3800 6850 3800 Wire Wire Line 6850 3800 7000 3800 Wire Wire Line 7000 3800 7000 3900 Connection ~ 6850 3800 Wire Wire Line 6700 4100 6700 4200 Wire Wire Line 6700 4200 6300 4200 Wire Wire Line 7000 4100 7000 4300 Wire Wire Line 7000 4300 6300 4300 Text Label 6300 4200 0 50 ~ 0 SDA Text Label 6300 4300 0 50 ~ 0 SCL $Comp L Analog_ADC:INA219BxD U? U 1 1 60D3343A P 13950 7250 AR Path="/60D00052/60D3343A" Ref="U?" Part="1" AR Path="/60D3343A" Ref="U5" Part="1" F 0 "U5" H 13850 7800 50 0000 C CNN F 1 "INA219BxD" H 13750 7700 50 0000 C CNN F 2 "Package_SO:SOIC-8_3.9x4.9mm_P1.27mm" H 14750 6900 50 0001 C CNN F 3 "http://www.ti.com/lit/ds/symlink/ina219.pdf" H 14300 7150 50 0001 C CNN F 4 "296-27899-1-ND" H 13950 7250 50 0001 C CNN "DK#" 1 13950 7250 -1 0 0 -1 $EndComp $Comp L Device:C_Small C? U 1 1 60D33440 P 13250 6850 AR Path="/60D00052/60D33440" Ref="C?" Part="1" AR Path="/60D33440" Ref="C7" Part="1" F 0 "C7" H 13158 6804 50 0000 R CNN F 1 "0.1uF" H 13158 6895 50 0000 R CNN F 2 "Capacitor_SMD:C_0805_2012Metric" H 13250 6850 50 0001 C CNN F 3 "~" H 13250 6850 50 0001 C CNN F 4 "1276-2449-1-ND" H 13250 6850 50 0001 C CNN "DK#" 1 13250 6850 -1 0 0 1 $EndComp Wire Wire Line 14350 7150 14500 7150 Wire Wire Line 14500 7350 14350 7350 Connection ~ 14500 7150 Connection ~ 14500 7350 $Comp L Device:LED_Small D? U 1 1 60D3344A P 13250 4950 AR Path="/60D00052/60D3344A" Ref="D?" Part="1" AR Path="/60D3344A" Ref="D1" Part="1" F 0 "D1" V 13300 5100 50 0000 R CNN F 1 "Red" V 13200 5150 50 0000 R CNN F 2 "ModifiedSymbols:LED_0805_2012Metric_Silkscreen" V 13250 4950 50 0001 C CNN F 3 "~" V 13250 4950 50 0001 C CNN F 4 "475-1278-1-ND" H 13250 4950 50 0001 C CNN "DK#" 1 13250 4950 0 -1 -1 0 $EndComp $Comp L power:GND #PWR? U 1 1 60D33450 P 13650 5450 AR Path="/60D00052/60D33450" Ref="#PWR?" Part="1" AR Path="/60D33450" Ref="#PWR0110" Part="1" F 0 "#PWR0110" H 13650 5200 50 0001 C CNN F 1 "GND" H 13655 5277 50 0000 C CNN F 2 "" H 13650 5450 50 0001 C CNN F 3 "" H 13650 5450 50 0001 C CNN 1 13650 5450 1 0 0 -1 $EndComp $Comp L Device:R_Small R? U 1 1 60D33456 P 13250 5200 AR Path="/60D00052/60D33456" Ref="R?" Part="1" AR Path="/60D33456" Ref="R7" Part="1" F 0 "R7" H 13350 5150 50 0000 C CNN F 1 "220" H 13350 5250 50 0000 C CNN F 2 "Resistor_SMD:R_0805_2012Metric" H 13250 5200 50 0001 C CNN F 3 "~" H 13250 5200 50 0001 C CNN F 4 "RMCF0805JT220RCT-ND" H 13250 5200 50 0001 C CNN "DK#" 1 13250 5200 -1 0 0 1 $EndComp Wire Wire Line 13250 5050 13250 5100 Connection ~ 13650 5400 Wire Wire Line 13650 5400 13650 5450 Wire Wire Line 14500 7350 14600 7350 $Comp L power:+3.3V #PWR? U 1 1 60D33469 P 13950 6550 AR Path="/60D00052/60D33469" Ref="#PWR?" Part="1" AR Path="/60D33469" Ref="#PWR0111" Part="1" F 0 "#PWR0111" H 13950 6400 50 0001 C CNN F 1 "+3.3V" H 13965 6723 50 0000 C CNN F 2 "" H 13950 6550 50 0001 C CNN F 3 "" H 13950 6550 50 0001 C CNN 1 13950 6550 1 0 0 -1 $EndComp Wire Wire Line 13950 6550 13950 6650 $Comp L power:GND #PWR? U 1 1 60D33470 P 13950 7700 AR Path="/60D00052/60D33470" Ref="#PWR?" Part="1" AR Path="/60D33470" Ref="#PWR0112" Part="1" F 0 "#PWR0112" H 13950 7450 50 0001 C CNN F 1 "GND" H 13955 7527 50 0000 C CNN F 2 "" H 13950 7700 50 0001 C CNN F 3 "" H 13950 7700 50 0001 C CNN 1 13950 7700 1 0 0 -1 $EndComp Wire Wire Line 13950 7650 13950 7700 Wire Wire Line 13550 7050 12450 7050 Wire Wire Line 13550 7150 12450 7150 $Comp L Device:R_Small R? U 1 1 60D3347A P 14500 7250 AR Path="/60D00052/60D3347A" Ref="R?" Part="1" AR Path="/60D3347A" Ref="R12" Part="1" F 0 "R12" H 14450 7600 50 0000 L CNN F 1 "0.01R 1% 1W" H 14450 7500 50 0000 L CNN F 2 "Resistor_SMD:R_0612_1632Metric" H 14500 7250 50 0001 C CNN F 3 "~" H 14500 7250 50 0001 C CNN F 4 "CFG0612-FX-R010ELFCT-ND" H 14500 7250 50 0001 C CNN "DK#" 1 14500 7250 1 0 0 -1 $EndComp Text Notes 15200 4500 0 50 ~ 0 Violet, 3A, 0.03375 Ohm typ\ne.g. 0297003.WXNV $Comp L Device:Fuse F? U 1 1 60D33482 P 15300 4300 AR Path="/60D00052/60D33482" Ref="F?" Part="1" AR Path="/60D33482" Ref="F2" Part="1" F 0 "F2" V 15450 4250 50 0000 L CNN F 1 "Fuse Holder BK-6013" V 15400 3550 50 0000 L CNN F 2 "BK-6013:BK-6013" V 15230 4300 50 0001 C CNN F 3 "~" H 15300 4300 50 0001 C CNN F 4 "BK-6013-ND" H 15300 4300 50 0001 C CNN "DK#" 1 15300 4300 0 -1 -1 0 $EndComp Text Label 12450 7050 0 50 ~ 0 SDA Text Label 12450 7150 0 50 ~ 0 SCL Text Label 12450 4800 0 50 ~ 0 12V_EN Wire Wire Line 13950 6650 13250 6650 Wire Wire Line 13250 6650 13250 6750 Connection ~ 13950 6650 Wire Wire Line 13950 6650 13950 6850 Wire Wire Line 13250 6950 13250 7650 Wire Wire Line 13250 7650 13450 7650 Connection ~ 13950 7650 Wire Wire Line 13550 7350 13450 7350 Wire Wire Line 13450 7350 13450 7650 Connection ~ 13450 7650 Wire Wire Line 13450 7650 13550 7650 Wire Wire Line 13550 7450 13550 7650 Connection ~ 13550 7650 Wire Wire Line 13550 7650 13950 7650 $Comp L Device:R_Small R? U 1 1 60D3349B P 13400 4800 AR Path="/60D00052/60D3349B" Ref="R?" Part="1" AR Path="/60D3349B" Ref="R3" Part="1" F 0 "R3" V 13300 4800 50 0000 R CNN F 1 "15k" V 13300 4950 50 0000 R CNN F 2 "Resistor_SMD:R_0805_2012Metric" H 13400 4800 50 0001 C CNN F 3 "~" H 13400 4800 50 0001 C CNN F 4 "RMCF0805JT15K0CT-ND" H 13400 4800 50 0001 C CNN "DK#" 1 13400 4800 0 1 1 0 $EndComp Text Notes 13250 7750 0 50 ~ 0 I2C ADDR: 0x40 $Comp L power:PWR_FLAG #FLG? U 1 1 60D334AA P 14600 7350 AR Path="/60D00052/60D334AA" Ref="#FLG?" Part="1" AR Path="/60D334AA" Ref="#FLG0102" Part="1" F 0 "#FLG0102" H 14600 7425 50 0001 C CNN F 1 "PWR_FLAG" H 14850 7450 50 0000 C CNN F 2 "" H 14600 7350 50 0001 C CNN F 3 "~" H 14600 7350 50 0001 C CNN 1 14600 7350 1 0 0 -1 $EndComp Wire Wire Line 13650 5400 13850 5400 $Comp L Device:R_Small R? U 1 1 60D334BD P 13850 5250 AR Path="/60D00052/60D334BD" Ref="R?" Part="1" AR Path="/60D334BD" Ref="R8" Part="1" F 0 "R8" H 14000 5200 50 0000 R CNN F 1 "1k" H 14000 5300 50 0000 R CNN F 2 "Resistor_SMD:R_0805_2012Metric" H 13850 5250 50 0001 C CNN F 3 "~" H 13850 5250 50 0001 C CNN F 4 "RMCF0805JT1K00CT-ND" H 13850 5250 50 0001 C CNN "DK#" 1 13850 5250 -1 0 0 1 $EndComp Wire Wire Line 13850 5100 13850 5150 Wire Wire Line 13850 5350 13850 5400 Connection ~ 13850 5400 Wire Wire Line 13850 5400 14450 5400 $Comp L Device:R_Small R? U 1 1 60D334C7 P 13650 5050 AR Path="/60D00052/60D334C7" Ref="R?" Part="1" AR Path="/60D334C7" Ref="R6" Part="1" F 0 "R6" H 13800 5000 50 0000 R CNN F 1 "15k" H 13800 5100 50 0000 R CNN F 2 "Resistor_SMD:R_0805_2012Metric" H 13650 5050 50 0001 C CNN F 3 "~" H 13650 5050 50 0001 C CNN F 4 "RMCF0805JT15K0CT-ND" H 13650 5050 50 0001 C CNN "DK#" 1 13650 5050 -1 0 0 1 $EndComp Wire Wire Line 13650 4950 13650 4900 Wire Wire Line 13650 4900 13850 4900 Wire Wire Line 13650 5150 13650 5400 Wire Wire Line 13500 4800 13850 4800 Wire Wire Line 13250 5300 13250 5400 Wire Wire Line 13250 5400 13650 5400 Wire Wire Line 13250 4800 13250 4850 Connection ~ 13250 4800 Wire Wire Line 13250 4800 13300 4800 $Comp L Device:LED_Small D? U 1 1 60D334E5 P 15800 5150 AR Path="/60D00052/60D334E5" Ref="D?" Part="1" AR Path="/60D334E5" Ref="D2" Part="1" F 0 "D2" V 15850 5300 50 0000 R CNN F 1 "Red" V 15750 5350 50 0000 R CNN F 2 "ModifiedSymbols:LED_0805_2012Metric_Silkscreen" V 15800 5150 50 0001 C CNN F 3 "~" V 15800 5150 50 0001 C CNN F 4 "475-1278-1-ND" H 15800 5150 50 0001 C CNN "DK#" 1 15800 5150 0 -1 -1 0 $EndComp $Comp L Device:R_Small R? U 1 1 60D334EB P 15800 5400 AR Path="/60D00052/60D334EB" Ref="R?" Part="1" AR Path="/60D334EB" Ref="R9" Part="1" F 0 "R9" H 15900 5350 50 0000 C CNN F 1 "2k" H 15900 5450 50 0000 C CNN F 2 "Resistor_SMD:R_0805_2012Metric" H 15800 5400 50 0001 C CNN F 3 "~" H 15800 5400 50 0001 C CNN F 4 "RMCF0805JT2K00CT-ND" H 15800 5400 50 0001 C CNN "DK#" 1 15800 5400 -1 0 0 1 $EndComp Wire Wire Line 15800 5250 15800 5300 Wire Wire Line 15800 5500 15800 5600 Wire Wire Line 15800 5050 15800 4800 Wire Wire Line 12100 1700 11200 1700 Text Label 11200 1700 0 50 ~ 0 SENSOR_A_SIGNAL Wire Wire Line 12100 1800 11200 1800 Text Label 11200 1800 0 50 ~ 0 SENSOR_A_VCC Wire Wire Line 12100 1900 11200 1900 Text Label 11200 1900 0 50 ~ 0 SENSOR_A_GND Wire Wire Line 12100 2100 11200 2100 Text Label 11200 2100 0 50 ~ 0 SENSOR_B_SIGNAL Wire Wire Line 12100 2200 11200 2200 Text Label 11200 2200 0 50 ~ 0 SENSOR_B_VCC Wire Wire Line 12100 2300 11200 2300 Text Label 11200 2300 0 50 ~ 0 SENSOR_B_GND Wire Wire Line 12100 2500 11200 2500 Text Label 11200 2500 0 50 ~ 0 SENSOR_C_SIGNAL Wire Wire Line 12100 2600 11200 2600 Text Label 11200 2600 0 50 ~ 0 SENSOR_C_VCC Wire Wire Line 12100 2700 11200 2700 Text Label 11200 2700 0 50 ~ 0 SENSOR_C_GND Wire Wire Line 12100 2900 11200 2900 Text Label 11200 2900 0 50 ~ 0 SENSOR_D_SIGNAL Wire Wire Line 12100 3000 11200 3000 Text Label 11200 3000 0 50 ~ 0 SENSOR_D_VCC Wire Wire Line 12100 3100 11200 3100 Text Label 11200 3100 0 50 ~ 0 SENSOR_D_GND Wire Wire Line 12100 3300 11200 3300 Text Label 11200 3300 0 50 ~ 0 SENSOR_E_SIGNAL Wire Wire Line 12100 3400 11200 3400 Text Label 11200 3400 0 50 ~ 0 SENSOR_E_VCC Wire Wire Line 12100 3500 11200 3500 Text Label 11200 3500 0 50 ~ 0 SENSOR_E_GND Wire Wire Line 12100 3700 11200 3700 Text Label 11200 3700 0 50 ~ 0 SENSOR_F_SIGNAL Wire Wire Line 12100 3800 11200 3800 Text Label 11200 3800 0 50 ~ 0 SENSOR_F_VCC Wire Wire Line 12100 3900 11200 3900 Text Label 11200 3900 0 50 ~ 0 SENSOR_F_GND Wire Wire Line 3750 8500 3650 8500 Wire Wire Line 3750 8600 3650 8600 Wire Wire Line 3650 8600 3650 8500 Connection ~ 3650 8500 Wire Wire Line 3750 8300 3500 8300 Wire Wire Line 3500 8300 3500 8400 Wire Wire Line 3750 8400 3500 8400 Connection ~ 3500 8400 Wire Wire Line 3500 8400 3500 8750 $Comp L power:GND #PWR0117 U 1 1 6117B0A6 P 3500 8750 F 0 "#PWR0117" H 3500 8500 50 0001 C CNN F 1 "GND" H 3505 8577 50 0000 C CNN F 2 "" H 3500 8750 50 0001 C CNN F 3 "" H 3500 8750 50 0001 C CNN 1 3500 8750 1 0 0 -1 $EndComp Text Label 2950 8500 0 50 ~ 0 12V_OUTPUT $Comp L power:+12V #PWR0118 U 1 1 61259077 P 15550 4000 F 0 "#PWR0118" H 15550 3850 50 0001 C CNN F 1 "+12V" H 15565 4173 50 0000 C CNN F 2 "" H 15550 4000 50 0001 C CNN F 3 "" H 15550 4000 50 0001 C CNN 1 15550 4000 1 0 0 -1 $EndComp Wire Wire Line 15450 4300 15550 4300 Wire Wire Line 15550 4300 15550 4000 Text Label 16300 7350 2 50 ~ 0 12V_OUTPUT Connection ~ 14600 7350 Wire Wire Line 15050 4900 15050 5000 Wire Wire Line 15050 4800 15050 4900 Connection ~ 15050 4900 Connection ~ 15050 4800 $Comp L VN7007ALHTR:VN7007ALH U? U 1 1 60D334B0 P 14450 4900 AR Path="/60D00052/60D334B0" Ref="U?" Part="1" AR Path="/60D334B0" Ref="U3" Part="1" F 0 "U3" H 14050 5300 50 0000 C CNN F 1 "VN7007ALH" H 14100 5200 50 0000 C CNN F 2 "VN7007ALHTR:VN7007ALHTR" H 14450 4900 50 0001 C CNN F 3 "" H 14450 4900 50 0001 C CNN F 4 "497-16868-1-ND" H 14450 4900 50 0001 C CNN "DK#" 1 14450 4900 1 0 0 -1 $EndComp Wire Wire Line 15150 4300 15000 4300 Wire Wire Line 14450 4300 14450 4550 Wire Wire Line 15050 4800 15250 4800 Connection ~ 15250 4800 Wire Wire Line 15250 4800 15800 4800 $Comp L power:GND #PWR0119 U 1 1 61447FF0 P 15800 5600 F 0 "#PWR0119" H 15800 5350 50 0001 C CNN F 1 "GND" H 15805 5427 50 0000 C CNN F 2 "" H 15800 5600 50 0001 C CNN F 3 "" H 15800 5600 50 0001 C CNN 1 15800 5600 1 0 0 -1 $EndComp Text Notes 14450 7100 0 50 ~ 0 e.g. CFG0612-FX-R010ELF Wire Wire Line 14500 7150 14950 7150 $Comp L Device:D_Schottky_Small D3 U 1 1 614E73C4 P 14950 6750 F 0 "D3" V 14996 6680 50 0000 R CNN F 1 "2A 500mV" V 14905 6680 50 0000 R CNN F 2 "Diode_SMD:D_SOD-128" V 14950 6750 50 0001 C CNN F 3 "~" V 14950 6750 50 0001 C CNN F 4 "1727-1730-1-ND" H 14950 6750 50 0001 C CNN "DK#" 1 14950 6750 0 -1 -1 0 $EndComp Wire Wire Line 14950 6050 14950 6650 Wire Wire Line 14950 6850 14950 7150 Connection ~ 14950 7150 Wire Wire Line 14950 7150 15250 7150 Text Label 12450 6050 0 50 ~ 0 12V_TEST_FEED $Comp L Device:R_Small R? U 1 1 6154C8DA P 14050 6050 AR Path="/60D00052/6154C8DA" Ref="R?" Part="1" AR Path="/6154C8DA" Ref="R11" Part="1" F 0 "R11" V 14250 6150 50 0000 C CNN F 1 "220" V 14150 6100 50 0000 C CNN F 2 "Resistor_SMD:R_0805_2012Metric" H 14050 6050 50 0001 C CNN F 3 "~" H 14050 6050 50 0001 C CNN F 4 "RMCF0805JT220RCT-ND" H 14050 6050 50 0001 C CNN "DK#" 1 14050 6050 0 -1 -1 0 $EndComp Wire Wire Line 12450 6050 13950 6050 Wire Wire Line 14150 6050 14950 6050 Wire Wire Line 14600 7350 16300 7350 $Comp L Device:R_Small R? U 1 1 615A39FB P 12950 5050 AR Path="/60D00052/615A39FB" Ref="R?" Part="1" AR Path="/615A39FB" Ref="R5" Part="1" F 0 "R5" H 13100 5000 50 0000 R CNN F 1 "15k" H 13100 5100 50 0000 R CNN F 2 "Resistor_SMD:R_0805_2012Metric" H 12950 5050 50 0001 C CNN F 3 "~" H 12950 5050 50 0001 C CNN F 4 "RMCF0805JT15K0CT-ND" H 12950 5050 50 0001 C CNN "DK#" 1 12950 5050 -1 0 0 1 $EndComp Wire Wire Line 12950 5150 12950 5400 Wire Wire Line 12950 5400 13250 5400 Connection ~ 13250 5400 Wire Wire Line 12950 4950 12950 4800 Connection ~ 12950 4800 Wire Wire Line 12950 4800 13250 4800 Wire Wire Line 12450 4800 12950 4800 $Comp L Connector:Screw_Terminal_01x02 J22 U 1 1 6162CBA8 P 1600 850 F 0 "J22" H 1680 842 50 0000 L CNN F 1 "Power" H 1680 751 50 0000 L CNN F 2 "ScrewTerminals:Generic-5.08-2P" H 1600 850 50 0001 C CNN F 3 "~" H 1600 850 50 0001 C CNN F 4 "C8465" H 1600 850 50 0001 C CNN "LCSC" F 5 "2.40;0;0" H 1600 850 50 0001 C CNN "JLCPCB_CORRECTION" F 6 "EB147A-02-D" H 1600 850 50 0001 C CNN "DK#" 1 1600 850 1 0 0 -1 $EndComp $Comp L power:GND #PWR0121 U 1 1 6162FFBB P 1300 1050 F 0 "#PWR0121" H 1300 800 50 0001 C CNN F 1 "GND" H 1305 877 50 0000 C CNN F 2 "" H 1300 1050 50 0001 C CNN F 3 "" H 1300 1050 50 0001 C CNN 1 1300 1050 1 0 0 -1 $EndComp Wire Wire Line 1300 950 1400 950 Wire Wire Line 1300 750 1300 800 Wire Wire Line 1300 850 1400 850 $Comp L power:PWR_FLAG #FLG0103 U 1 1 6165DEB7 P 1400 850 F 0 "#FLG0103" H 1400 925 50 0001 C CNN F 1 "PWR_FLAG" H 1450 1000 50 0000 L CNN F 2 "" H 1400 850 50 0001 C CNN F 3 "~" H 1400 850 50 0001 C CNN 1 1400 850 1 0 0 -1 $EndComp Connection ~ 1300 800 Wire Wire Line 1300 800 1300 850 Text Label 4200 5000 2 50 ~ 0 12V_TEST_FEED Wire Wire Line 4200 5000 3600 5000 Text Label 1900 4800 0 50 ~ 0 12V_EN Wire Wire Line 14000 1700 13100 1700 Text Label 13100 1700 0 50 ~ 0 SENSOR_A_SIGNAL Wire Wire Line 14000 1800 13100 1800 Text Label 13100 1800 0 50 ~ 0 SENSOR_A_VCC Wire Wire Line 14000 1900 13100 1900 Text Label 13100 1900 0 50 ~ 0 SENSOR_A_GND Wire Wire Line 14000 2100 13100 2100 Text Label 13100 2100 0 50 ~ 0 SENSOR_B_SIGNAL Wire Wire Line 14000 2200 13100 2200 Text Label 13100 2200 0 50 ~ 0 SENSOR_B_VCC Wire Wire Line 14000 2300 13100 2300 Text Label 13100 2300 0 50 ~ 0 SENSOR_B_GND Wire Wire Line 14000 2500 13100 2500 Text Label 13100 2500 0 50 ~ 0 SENSOR_C_SIGNAL Wire Wire Line 14000 2600 13100 2600 Text Label 13100 2600 0 50 ~ 0 SENSOR_C_VCC Wire Wire Line 14000 2700 13100 2700 Text Label 13100 2700 0 50 ~ 0 SENSOR_C_GND Wire Wire Line 14000 2900 13100 2900 Text Label 13100 2900 0 50 ~ 0 SENSOR_D_SIGNAL Wire Wire Line 14000 3000 13100 3000 Text Label 13100 3000 0 50 ~ 0 SENSOR_D_VCC Wire Wire Line 14000 3100 13100 3100 Text Label 13100 3100 0 50 ~ 0 SENSOR_D_GND Wire Wire Line 14000 3300 13100 3300 Text Label 13100 3300 0 50 ~ 0 SENSOR_E_SIGNAL Wire Wire Line 14000 3400 13100 3400 Text Label 13100 3400 0 50 ~ 0 SENSOR_E_VCC Wire Wire Line 14000 3500 13100 3500 Text Label 13100 3500 0 50 ~ 0 SENSOR_E_GND Wire Wire Line 14000 3700 13100 3700 Text Label 13100 3700 0 50 ~ 0 SENSOR_F_SIGNAL Wire Wire Line 14000 3800 13100 3800 Text Label 13100 3800 0 50 ~ 0 SENSOR_F_VCC Wire Wire Line 14000 3900 13100 3900 Text Label 13100 3900 0 50 ~ 0 SENSOR_F_GND $Comp L Connector:TestPoint TP1 U 1 1 617BCAE2 P 14000 1700 F 0 "TP1" V 14000 1888 50 0000 L CNN F 1 "TestPoint" V 14045 1888 50 0001 L CNN F 2 "pogoPins:pogo1mm" H 14200 1700 50 0001 C CNN F 3 "~" H 14200 1700 50 0001 C CNN 1 14000 1700 0 1 1 0 $EndComp $Comp L Connector:TestPoint TP2 U 1 1 617BD2CD P 14000 1800 F 0 "TP2" V 14000 1988 50 0000 L CNN F 1 "TestPoint" V 14045 1988 50 0001 L CNN F 2 "pogoPins:pogo1mm" H 14200 1800 50 0001 C CNN F 3 "~" H 14200 1800 50 0001 C CNN 1 14000 1800 0 1 1 0 $EndComp $Comp L Connector:TestPoint TP3 U 1 1 617BD90D P 14000 1900 F 0 "TP3" V 14000 2088 50 0000 L CNN F 1 "TestPoint" V 14045 2088 50 0001 L CNN F 2 "pogoPins:pogo1mm" H 14200 1900 50 0001 C CNN F 3 "~" H 14200 1900 50 0001 C CNN 1 14000 1900 0 1 1 0 $EndComp $Comp L Connector:TestPoint TP4 U 1 1 617C1479 P 14000 2100 F 0 "TP4" V 14000 2288 50 0000 L CNN F 1 "TestPoint" V 14045 2288 50 0001 L CNN F 2 "pogoPins:pogo1mm" H 14200 2100 50 0001 C CNN F 3 "~" H 14200 2100 50 0001 C CNN 1 14000 2100 0 1 1 0 $EndComp $Comp L Connector:TestPoint TP5 U 1 1 617C18AF P 14000 2200 F 0 "TP5" V 14000 2388 50 0000 L CNN F 1 "TestPoint" V 14045 2388 50 0001 L CNN F 2 "pogoPins:pogo1mm" H 14200 2200 50 0001 C CNN F 3 "~" H 14200 2200 50 0001 C CNN 1 14000 2200 0 1 1 0 $EndComp $Comp L Connector:TestPoint TP6 U 1 1 617C18B9 P 14000 2300 F 0 "TP6" V 14000 2488 50 0000 L CNN F 1 "TestPoint" V 14045 2488 50 0001 L CNN F 2 "pogoPins:pogo1mm" H 14200 2300 50 0001 C CNN F 3 "~" H 14200 2300 50 0001 C CNN 1 14000 2300 0 1 1 0 $EndComp $Comp L Connector:TestPoint TP7 U 1 1 617DFC93 P 14000 2500 F 0 "TP7" V 14000 2688 50 0000 L CNN F 1 "TestPoint" V 14045 2688 50 0001 L CNN F 2 "pogoPins:pogo1mm" H 14200 2500 50 0001 C CNN F 3 "~" H 14200 2500 50 0001 C CNN 1 14000 2500 0 1 1 0 $EndComp $Comp L Connector:TestPoint TP8 U 1 1 617E00F3 P 14000 2600 F 0 "TP8" V 14000 2788 50 0000 L CNN F 1 "TestPoint" V 14045 2788 50 0001 L CNN F 2 "pogoPins:pogo1mm" H 14200 2600 50 0001 C CNN F 3 "~" H 14200 2600 50 0001 C CNN 1 14000 2600 0 1 1 0 $EndComp $Comp L Connector:TestPoint TP9 U 1 1 617E00FD P 14000 2700 F 0 "TP9" V 14000 2888 50 0000 L CNN F 1 "TestPoint" V 14045 2888 50 0001 L CNN F 2 "pogoPins:pogo1mm" H 14200 2700 50 0001 C CNN F 3 "~" H 14200 2700 50 0001 C CNN 1 14000 2700 0 1 1 0 $EndComp $Comp L Connector:TestPoint TP22 U 1 1 617E0107 P 14000 2900 F 0 "TP22" V 14000 3088 50 0000 L CNN F 1 "TestPoint" V 14045 3088 50 0001 L CNN F 2 "pogoPins:pogo1mm" H 14200 2900 50 0001 C CNN F 3 "~" H 14200 2900 50 0001 C CNN 1 14000 2900 0 1 1 0 $EndComp $Comp L Connector:TestPoint TP29 U 1 1 617E0111 P 14000 3000 F 0 "TP29" V 14000 3188 50 0000 L CNN F 1 "TestPoint" V 14045 3188 50 0001 L CNN F 2 "pogoPins:pogo1mm" H 14200 3000 50 0001 C CNN F 3 "~" H 14200 3000 50 0001 C CNN 1 14000 3000 0 1 1 0 $EndComp $Comp L Connector:TestPoint TP36 U 1 1 617E011B P 14000 3100 F 0 "TP36" V 14000 3288 50 0000 L CNN F 1 "TestPoint" V 14045 3288 50 0001 L CNN F 2 "pogoPins:pogo1mm" H 14200 3100 50 0001 C CNN F 3 "~" H 14200 3100 50 0001 C CNN 1 14000 3100 0 1 1 0 $EndComp $Comp L Connector:TestPoint TP43 U 1 1 617FFC48 P 14000 3300 F 0 "TP43" V 14000 3488 50 0000 L CNN F 1 "TestPoint" V 14045 3488 50 0001 L CNN F 2 "pogoPins:pogo1mm" H 14200 3300 50 0001 C CNN F 3 "~" H 14200 3300 50 0001 C CNN 1 14000 3300 0 1 1 0 $EndComp $Comp L Connector:TestPoint TP44 U 1 1 617FFF58 P 14000 3400 F 0 "TP44" V 14000 3588 50 0000 L CNN F 1 "TestPoint" V 14045 3588 50 0001 L CNN F 2 "pogoPins:pogo1mm" H 14200 3400 50 0001 C CNN F 3 "~" H 14200 3400 50 0001 C CNN 1 14000 3400 0 1 1 0 $EndComp $Comp L Connector:TestPoint TP45 U 1 1 617FFF62 P 14000 3500 F 0 "TP45" V 14000 3688 50 0000 L CNN F 1 "TestPoint" V 14045 3688 50 0001 L CNN F 2 "pogoPins:pogo1mm" H 14200 3500 50 0001 C CNN F 3 "~" H 14200 3500 50 0001 C CNN 1 14000 3500 0 1 1 0 $EndComp $Comp L Connector:TestPoint TP46 U 1 1 617FFF6C P 14000 3700 F 0 "TP46" V 14000 3888 50 0000 L CNN F 1 "TestPoint" V 14045 3888 50 0001 L CNN F 2 "pogoPins:pogo1mm" H 14200 3700 50 0001 C CNN F 3 "~" H 14200 3700 50 0001 C CNN 1 14000 3700 0 1 1 0 $EndComp $Comp L Connector:TestPoint TP47 U 1 1 617FFF76 P 14000 3800 F 0 "TP47" V 14000 3988 50 0000 L CNN F 1 "TestPoint" V 14045 3988 50 0001 L CNN F 2 "pogoPins:pogo1mm" H 14200 3800 50 0001 C CNN F 3 "~" H 14200 3800 50 0001 C CNN 1 14000 3800 0 1 1 0 $EndComp $Comp L Connector:TestPoint TP48 U 1 1 617FFF80 P 14000 3900 F 0 "TP48" V 14000 4088 50 0000 L CNN F 1 "TestPoint" V 14045 4088 50 0001 L CNN F 2 "pogoPins:pogo1mm" H 14200 3900 50 0001 C CNN F 3 "~" H 14200 3900 50 0001 C CNN 1 14000 3900 0 1 1 0 $EndComp $Comp L Connector:TestPoint TP10 U 1 1 6184AD16 P 1500 2750 F 0 "TP10" V 1500 2938 50 0000 L CNN F 1 "TestPoint" V 1545 2938 50 0001 L CNN F 2 "pogoPins:pogo1mm" H 1700 2750 50 0001 C CNN F 3 "~" H 1700 2750 50 0001 C CNN 1 1500 2750 0 1 1 0 $EndComp $Comp L Connector:TestPoint TP16 U 1 1 6184E940 P 1500 2850 F 0 "TP16" V 1500 3038 50 0000 L CNN F 1 "TestPoint" V 1545 3038 50 0001 L CNN F 2 "pogoPins:pogo1mm" H 1700 2850 50 0001 C CNN F 3 "~" H 1700 2850 50 0001 C CNN 1 1500 2850 0 1 1 0 $EndComp $Comp L Connector:TestPoint TP23 U 1 1 6184EC55 P 1500 2950 F 0 "TP23" V 1500 3138 50 0000 L CNN F 1 "TestPoint" V 1545 3138 50 0001 L CNN F 2 "pogoPins:pogo1mm" H 1700 2950 50 0001 C CNN F 3 "~" H 1700 2950 50 0001 C CNN 1 1500 2950 0 1 1 0 $EndComp $Comp L Connector:TestPoint TP30 U 1 1 6184EF40 P 1500 3050 F 0 "TP30" V 1500 3238 50 0000 L CNN F 1 "TestPoint" V 1545 3238 50 0001 L CNN F 2 "pogoPins:pogo1mm" H 1700 3050 50 0001 C CNN F 3 "~" H 1700 3050 50 0001 C CNN 1 1500 3050 0 1 1 0 $EndComp $Comp L Connector:TestPoint TP37 U 1 1 6184F17F P 1500 3150 F 0 "TP37" V 1500 3338 50 0000 L CNN F 1 "TestPoint" V 1545 3338 50 0001 L CNN F 2 "pogoPins:pogo1mm" H 1700 3150 50 0001 C CNN F 3 "~" H 1700 3150 50 0001 C CNN 1 1500 3150 0 1 1 0 $EndComp $Comp L Connector:TestPoint TP11 U 1 1 6184FD3D P 2900 2750 F 0 "TP11" V 2900 2938 50 0000 L CNN F 1 "TestPoint" V 2945 2938 50 0001 L CNN F 2 "pogoPins:pogo1mm" H 3100 2750 50 0001 C CNN F 3 "~" H 3100 2750 50 0001 C CNN 1 2900 2750 0 1 1 0 $EndComp $Comp L Connector:TestPoint TP17 U 1 1 61850029 P 2900 2850 F 0 "TP17" V 2900 3038 50 0000 L CNN F 1 "TestPoint" V 2945 3038 50 0001 L CNN F 2 "pogoPins:pogo1mm" H 3100 2850 50 0001 C CNN F 3 "~" H 3100 2850 50 0001 C CNN 1 2900 2850 0 1 1 0 $EndComp $Comp L Connector:TestPoint TP24 U 1 1 61850033 P 2900 2950 F 0 "TP24" V 2900 3138 50 0000 L CNN F 1 "TestPoint" V 2945 3138 50 0001 L CNN F 2 "pogoPins:pogo1mm" H 3100 2950 50 0001 C CNN F 3 "~" H 3100 2950 50 0001 C CNN 1 2900 2950 0 1 1 0 $EndComp $Comp L Connector:TestPoint TP31 U 1 1 6185003D P 2900 3050 F 0 "TP31" V 2900 3238 50 0000 L CNN F 1 "TestPoint" V 2945 3238 50 0001 L CNN F 2 "pogoPins:pogo1mm" H 3100 3050 50 0001 C CNN F 3 "~" H 3100 3050 50 0001 C CNN 1 2900 3050 0 1 1 0 $EndComp $Comp L Connector:TestPoint TP38 U 1 1 61850047 P 2900 3150 F 0 "TP38" V 2900 3338 50 0000 L CNN F 1 "TestPoint" V 2945 3338 50 0001 L CNN F 2 "pogoPins:pogo1mm" H 3100 3150 50 0001 C CNN F 3 "~" H 3100 3150 50 0001 C CNN 1 2900 3150 0 1 1 0 $EndComp $Comp L Connector:TestPoint TP12 U 1 1 6186D38B P 4300 2750 F 0 "TP12" V 4300 2938 50 0000 L CNN F 1 "TestPoint" V 4345 2938 50 0001 L CNN F 2 "pogoPins:pogo1mm" H 4500 2750 50 0001 C CNN F 3 "~" H 4500 2750 50 0001 C CNN 1 4300 2750 0 1 1 0 $EndComp $Comp L Connector:TestPoint TP18 U 1 1 6186D391 P 4300 2850 F 0 "TP18" V 4300 3038 50 0000 L CNN F 1 "TestPoint" V 4345 3038 50 0001 L CNN F 2 "pogoPins:pogo1mm" H 4500 2850 50 0001 C CNN F 3 "~" H 4500 2850 50 0001 C CNN 1 4300 2850 0 1 1 0 $EndComp $Comp L Connector:TestPoint TP25 U 1 1 6186D397 P 4300 2950 F 0 "TP25" V 4300 3138 50 0000 L CNN F 1 "TestPoint" V 4345 3138 50 0001 L CNN F 2 "pogoPins:pogo1mm" H 4500 2950 50 0001 C CNN F 3 "~" H 4500 2950 50 0001 C CNN 1 4300 2950 0 1 1 0 $EndComp $Comp L Connector:TestPoint TP32 U 1 1 6186D39D P 4300 3050 F 0 "TP32" V 4300 3238 50 0000 L CNN F 1 "TestPoint" V 4345 3238 50 0001 L CNN F 2 "pogoPins:pogo1mm" H 4500 3050 50 0001 C CNN F 3 "~" H 4500 3050 50 0001 C CNN 1 4300 3050 0 1 1 0 $EndComp $Comp L Connector:TestPoint TP39 U 1 1 6186D3A3 P 4300 3150 F 0 "TP39" V 4300 3338 50 0000 L CNN F 1 "TestPoint" V 4345 3338 50 0001 L CNN F 2 "pogoPins:pogo1mm" H 4500 3150 50 0001 C CNN F 3 "~" H 4500 3150 50 0001 C CNN 1 4300 3150 0 1 1 0 $EndComp $Comp L Connector:TestPoint TP13 U 1 1 61887399 P 5700 2750 F 0 "TP13" V 5700 2938 50 0000 L CNN F 1 "TestPoint" V 5745 2938 50 0001 L CNN F 2 "pogoPins:pogo1mm" H 5900 2750 50 0001 C CNN F 3 "~" H 5900 2750 50 0001 C CNN 1 5700 2750 0 1 1 0 $EndComp $Comp L Connector:TestPoint TP19 U 1 1 6188739F P 5700 2850 F 0 "TP19" V 5700 3038 50 0000 L CNN F 1 "TestPoint" V 5745 3038 50 0001 L CNN F 2 "pogoPins:pogo1mm" H 5900 2850 50 0001 C CNN F 3 "~" H 5900 2850 50 0001 C CNN 1 5700 2850 0 1 1 0 $EndComp $Comp L Connector:TestPoint TP26 U 1 1 618873A5 P 5700 2950 F 0 "TP26" V 5700 3138 50 0000 L CNN F 1 "TestPoint" V 5745 3138 50 0001 L CNN F 2 "pogoPins:pogo1mm" H 5900 2950 50 0001 C CNN F 3 "~" H 5900 2950 50 0001 C CNN 1 5700 2950 0 1 1 0 $EndComp $Comp L Connector:TestPoint TP33 U 1 1 618873AB P 5700 3050 F 0 "TP33" V 5700 3238 50 0000 L CNN F 1 "TestPoint" V 5745 3238 50 0001 L CNN F 2 "pogoPins:pogo1mm" H 5900 3050 50 0001 C CNN F 3 "~" H 5900 3050 50 0001 C CNN 1 5700 3050 0 1 1 0 $EndComp $Comp L Connector:TestPoint TP40 U 1 1 618873B1 P 5700 3150 F 0 "TP40" V 5700 3338 50 0000 L CNN F 1 "TestPoint" V 5745 3338 50 0001 L CNN F 2 "pogoPins:pogo1mm" H 5900 3150 50 0001 C CNN F 3 "~" H 5900 3150 50 0001 C CNN 1 5700 3150 0 1 1 0 $EndComp $Comp L Connector:TestPoint TP14 U 1 1 618A0D6D P 7050 2750 F 0 "TP14" V 7050 2938 50 0000 L CNN F 1 "TestPoint" V 7095 2938 50 0001 L CNN F 2 "pogoPins:pogo1mm" H 7250 2750 50 0001 C CNN F 3 "~" H 7250 2750 50 0001 C CNN 1 7050 2750 0 1 1 0 $EndComp $Comp L Connector:TestPoint TP20 U 1 1 618A0D73 P 7050 2850 F 0 "TP20" V 7050 3038 50 0000 L CNN F 1 "TestPoint" V 7095 3038 50 0001 L CNN F 2 "pogoPins:pogo1mm" H 7250 2850 50 0001 C CNN F 3 "~" H 7250 2850 50 0001 C CNN 1 7050 2850 0 1 1 0 $EndComp $Comp L Connector:TestPoint TP27 U 1 1 618A0D79 P 7050 2950 F 0 "TP27" V 7050 3138 50 0000 L CNN F 1 "TestPoint" V 7095 3138 50 0001 L CNN F 2 "pogoPins:pogo1mm" H 7250 2950 50 0001 C CNN F 3 "~" H 7250 2950 50 0001 C CNN 1 7050 2950 0 1 1 0 $EndComp $Comp L Connector:TestPoint TP34 U 1 1 618A0D7F P 7050 3050 F 0 "TP34" V 7050 3238 50 0000 L CNN F 1 "TestPoint" V 7095 3238 50 0001 L CNN F 2 "pogoPins:pogo1mm" H 7250 3050 50 0001 C CNN F 3 "~" H 7250 3050 50 0001 C CNN 1 7050 3050 0 1 1 0 $EndComp $Comp L Connector:TestPoint TP41 U 1 1 618A0D85 P 7050 3150 F 0 "TP41" V 7050 3338 50 0000 L CNN F 1 "TestPoint" V 7095 3338 50 0001 L CNN F 2 "pogoPins:pogo1mm" H 7250 3150 50 0001 C CNN F 3 "~" H 7250 3150 50 0001 C CNN 1 7050 3150 0 1 1 0 $EndComp $Comp L Connector:TestPoint TP15 U 1 1 618BA86F P 8450 2750 F 0 "TP15" V 8450 2938 50 0000 L CNN F 1 "TestPoint" V 8495 2938 50 0001 L CNN F 2 "pogoPins:pogo1mm" H 8650 2750 50 0001 C CNN F 3 "~" H 8650 2750 50 0001 C CNN 1 8450 2750 0 1 1 0 $EndComp $Comp L Connector:TestPoint TP21 U 1 1 618BA875 P 8450 2850 F 0 "TP21" V 8450 3038 50 0000 L CNN F 1 "TestPoint" V 8495 3038 50 0001 L CNN F 2 "pogoPins:pogo1mm" H 8650 2850 50 0001 C CNN F 3 "~" H 8650 2850 50 0001 C CNN 1 8450 2850 0 1 1 0 $EndComp $Comp L Connector:TestPoint TP28 U 1 1 618BA87B P 8450 2950 F 0 "TP28" V 8450 3138 50 0000 L CNN F 1 "TestPoint" V 8495 3138 50 0001 L CNN F 2 "pogoPins:pogo1mm" H 8650 2950 50 0001 C CNN F 3 "~" H 8650 2950 50 0001 C CNN 1 8450 2950 0 1 1 0 $EndComp $Comp L Connector:TestPoint TP35 U 1 1 618BA881 P 8450 3050 F 0 "TP35" V 8450 3238 50 0000 L CNN F 1 "TestPoint" V 8495 3238 50 0001 L CNN F 2 "pogoPins:pogo1mm" H 8650 3050 50 0001 C CNN F 3 "~" H 8650 3050 50 0001 C CNN 1 8450 3050 0 1 1 0 $EndComp $Comp L Connector:TestPoint TP42 U 1 1 618BA887 P 8450 3150 F 0 "TP42" V 8450 3338 50 0000 L CNN F 1 "TestPoint" V 8495 3338 50 0001 L CNN F 2 "pogoPins:pogo1mm" H 8650 3150 50 0001 C CNN F 3 "~" H 8650 3150 50 0001 C CNN 1 8450 3150 0 1 1 0 $EndComp $Comp L Connector:TestPoint TP63 U 1 1 6192AE25 P 3750 8100 F 0 "TP63" V 3750 8288 50 0000 L CNN F 1 "TestPoint" V 3795 8288 50 0001 L CNN F 2 "pogoPins:pogo1mm" H 3950 8100 50 0001 C CNN F 3 "~" H 3950 8100 50 0001 C CNN 1 3750 8100 0 1 1 0 $EndComp $Comp L Connector:TestPoint TP64 U 1 1 6192B1F1 P 3750 8200 F 0 "TP64" V 3750 8388 50 0000 L CNN F 1 "TestPoint" V 3795 8388 50 0001 L CNN F 2 "pogoPins:pogo1mm" H 3950 8200 50 0001 C CNN F 3 "~" H 3950 8200 50 0001 C CNN 1 3750 8200 0 1 1 0 $EndComp $Comp L Connector:TestPoint TP65 U 1 1 6192B1FB P 3750 8300 F 0 "TP65" V 3750 8488 50 0000 L CNN F 1 "TestPoint" V 3795 8488 50 0001 L CNN F 2 "pogoPins:pogo1mm" H 3950 8300 50 0001 C CNN F 3 "~" H 3950 8300 50 0001 C CNN 1 3750 8300 0 1 1 0 $EndComp $Comp L Connector:TestPoint TP66 U 1 1 6192B205 P 3750 8400 F 0 "TP66" V 3750 8588 50 0000 L CNN F 1 "TestPoint" V 3795 8588 50 0001 L CNN F 2 "pogoPins:pogo1mm" H 3950 8400 50 0001 C CNN F 3 "~" H 3950 8400 50 0001 C CNN 1 3750 8400 0 1 1 0 $EndComp $Comp L Connector:TestPoint TP67 U 1 1 6192B20F P 3750 8500 F 0 "TP67" V 3750 8688 50 0000 L CNN F 1 "TestPoint" V 3795 8688 50 0001 L CNN F 2 "pogoPins:pogo1mm" H 3950 8500 50 0001 C CNN F 3 "~" H 3950 8500 50 0001 C CNN 1 3750 8500 0 1 1 0 $EndComp $Comp L Connector:TestPoint TP68 U 1 1 6192B219 P 3750 8600 F 0 "TP68" V 3750 8788 50 0000 L CNN F 1 "TestPoint" V 3795 8788 50 0001 L CNN F 2 "pogoPins:pogo1mm" H 3950 8600 50 0001 C CNN F 3 "~" H 3950 8600 50 0001 C CNN 1 3750 8600 0 1 1 0 $EndComp Wire Wire Line 15250 4800 15250 7150 $Comp L Device:Polyfuse_Small F1 U 1 1 61C29AAB P 8950 1100 F 0 "F1" V 8745 1100 50 0000 C CNN F 1 "50mA (0ZCM0005FF2G)" V 8836 1100 50 0000 C CNN F 2 "Fuse:Fuse_0603_1608Metric" H 9000 900 50 0001 L CNN F 3 "~" H 8950 1100 50 0001 C CNN F 4 "507-1816-1-ND" V 8950 1100 50 0001 C CNN "DK#" 1 8950 1100 0 1 1 0 $EndComp Wire Wire Line 3750 8200 3650 8200 Wire Wire Line 3650 8200 3650 8100 Wire Wire Line 3650 8100 3750 8100 Wire Wire Line 7650 1100 7800 1100 Wire Wire Line 9050 1100 9300 1100 Text Label 9800 1100 2 50 ~ 0 3V3_FUSED Text Label 4200 4200 2 50 ~ 0 3V3_FUSED Text Label 2950 8100 0 50 ~ 0 3V3_FUSED Connection ~ 3650 8100 $Comp L Regulator_Linear:AP7361C-33E U1 U 1 1 61DC2D69 P 7350 1100 F 0 "U1" H 7350 1342 50 0000 C CNN F 1 "AP7361C-33E" H 7350 1251 50 0000 C CNN F 2 "Package_TO_SOT_SMD:SOT-223-3_TabPin2" H 7350 1325 50 0001 C CIN F 3 "https://www.diodes.com/assets/Datasheets/AP7361C.pdf" H 7350 1050 50 0001 C CNN F 4 "AP7361C-33E-13DICT-ND" H 7350 1100 50 0001 C CNN "DK#" 1 7350 1100 1 0 0 -1 $EndComp $Comp L power:GND #PWR0125 U 1 1 61E25D34 P 7350 1500 F 0 "#PWR0125" H 7350 1250 50 0001 C CNN F 1 "GND" H 7355 1327 50 0000 C CNN F 2 "" H 7350 1500 50 0001 C CNN F 3 "" H 7350 1500 50 0001 C CNN 1 7350 1500 1 0 0 -1 $EndComp Wire Wire Line 7350 1400 7350 1450 $Comp L power:+5V #PWR0126 U 1 1 61E45FF5 P 5950 900 F 0 "#PWR0126" H 5950 750 50 0001 C CNN F 1 "+5V" H 5965 1073 50 0000 C CNN F 2 "" H 5950 900 50 0001 C CNN F 3 "" H 5950 900 50 0001 C CNN 1 5950 900 1 0 0 -1 $EndComp Wire Wire Line 5950 900 5950 1100 $Comp L Device:C_Small C? U 1 1 61E8B3EB P 6700 1200 AR Path="/60D00052/61E8B3EB" Ref="C?" Part="1" AR Path="/61E8B3EB" Ref="C2" Part="1" F 0 "C2" H 6608 1154 50 0000 R CNN F 1 "4.7uF" H 6608 1245 50 0000 R CNN F 2 "Capacitor_SMD:C_0805_2012Metric" H 6700 1200 50 0001 C CNN F 3 "~" H 6700 1200 50 0001 C CNN F 4 "1276-1244-1-ND" H 6700 1200 50 0001 C CNN "DK#" 1 6700 1200 -1 0 0 1 $EndComp Connection ~ 6700 1100 Wire Wire Line 6700 1100 7050 1100 Wire Wire Line 6700 1300 6700 1450 Wire Wire Line 6700 1450 7350 1450 Wire Wire Line 5950 1100 6300 1100 Connection ~ 7350 1450 Wire Wire Line 7350 1450 7350 1500 $Comp L Device:C_Small C? U 1 1 61EABA74 P 7800 1200 AR Path="/60D00052/61EABA74" Ref="C?" Part="1" AR Path="/61EABA74" Ref="C4" Part="1" F 0 "C4" H 7708 1154 50 0000 R CNN F 1 "4.7uF" H 7708 1245 50 0000 R CNN F 2 "Capacitor_SMD:C_0805_2012Metric" H 7800 1200 50 0001 C CNN F 3 "~" H 7800 1200 50 0001 C CNN F 4 "1276-1244-1-ND" H 7800 1200 50 0001 C CNN "DK#" 1 7800 1200 -1 0 0 1 $EndComp Connection ~ 7800 1100 Wire Wire Line 7800 1300 7800 1450 Wire Wire Line 7800 1450 7350 1450 $Comp L Device:CP_Small C1 U 1 1 61EC9D69 P 6300 1200 F 0 "C1" H 6388 1246 50 0000 L CNN F 1 "10uF" H 6388 1155 50 0000 L CNN F 2 "Capacitor_SMD:CP_Elec_4x5.3" H 6300 1200 50 0001 C CNN F 3 "~" H 6300 1200 50 0001 C CNN F 4 "C134721" H 6300 1200 50 0001 C CNN "LCSC" F 5 "0;0;180" H 6300 1200 50 0001 C CNN "JLCPCB_CORRECTION" F 6 "732-8430-1-ND" H 6300 1200 50 0001 C CNN "DK#" 1 6300 1200 1 0 0 -1 $EndComp Connection ~ 6300 1100 Wire Wire Line 6300 1300 6300 1450 Wire Wire Line 6300 1450 6700 1450 Connection ~ 6700 1450 $Comp L Device:CP_Small C5 U 1 1 61EEA530 P 8200 1200 F 0 "C5" H 8288 1246 50 0000 L CNN F 1 "10uF" H 8288 1155 50 0000 L CNN F 2 "Capacitor_SMD:CP_Elec_4x5.3" H 8200 1200 50 0001 C CNN F 3 "~" H 8200 1200 50 0001 C CNN F 4 "C134721" H 8200 1200 50 0001 C CNN "LCSC" F 5 "0;0;180" H 8200 1200 50 0001 C CNN "JLCPCB_CORRECTION" F 6 "732-8430-1-ND" H 8200 1200 50 0001 C CNN "DK#" 1 8200 1200 1 0 0 -1 $EndComp Connection ~ 8200 1100 Wire Wire Line 8200 1300 8200 1450 Wire Wire Line 8200 1450 7800 1450 Connection ~ 7800 1450 $Comp L power:PWR_FLAG #FLG0104 U 1 1 61FD14F9 P 15000 4300 F 0 "#FLG0104" H 15000 4375 50 0001 C CNN F 1 "PWR_FLAG" H 15000 4473 50 0000 C CNN F 2 "" H 15000 4300 50 0001 C CNN F 3 "~" H 15000 4300 50 0001 C CNN 1 15000 4300 1 0 0 -1 $EndComp Connection ~ 15000 4300 Wire Wire Line 15000 4300 14450 4300 $Comp L power:PWR_FLAG #FLG0105 U 1 1 61FD230C P 3850 5200 F 0 "#FLG0105" H 3850 5275 50 0001 C CNN F 1 "PWR_FLAG" V 3850 5328 50 0000 L CNN F 2 "" H 3850 5200 50 0001 C CNN F 3 "~" H 3850 5200 50 0001 C CNN 1 3850 5200 0 1 1 0 $EndComp Connection ~ 3850 5200 Text Label 3250 6500 0 50 ~ 0 MOTOR_OUT Text Label 3250 6400 0 50 ~ 0 CLOCK_OUT $Comp L power:PWR_FLAG #FLG0106 U 1 1 6205E226 P 1400 950 F 0 "#FLG0106" H 1400 1025 50 0001 C CNN F 1 "PWR_FLAG" H 1000 1100 50 0000 L CNN F 2 "" H 1400 950 50 0001 C CNN F 3 "~" H 1400 950 50 0001 C CNN 1 1400 950 -1 0 0 1 $EndComp Wire Wire Line 3950 6800 3250 6800 Connection ~ 3950 6800 $Comp L Mechanical:MountingHole_Pad H6 U 1 1 62780377 P 14700 1200 F 0 "H6" H 14800 1246 50 0000 L CNN F 1 "MountingHole" H 14800 1155 50 0000 L CNN F 2 "MountingHole:MountingHole_3.2mm_M3_ISO7380_Pad" H 14700 1200 50 0001 C CNN F 3 "~" H 14700 1200 50 0001 C CNN 1 14700 1200 1 0 0 -1 $EndComp $Comp L Mechanical:MountingHole_Pad H7 U 1 1 627806B3 P 14950 1200 F 0 "H7" H 15050 1246 50 0000 L CNN F 1 "MountingHole" H 15050 1155 50 0000 L CNN F 2 "MountingHole:MountingHole_3.2mm_M3_ISO7380_Pad" H 14950 1200 50 0001 C CNN F 3 "~" H 14950 1200 50 0001 C CNN 1 14950 1200 1 0 0 -1 $EndComp $Comp L Mechanical:MountingHole_Pad H8 U 1 1 627806BD P 15200 1200 F 0 "H8" H 15300 1246 50 0000 L CNN F 1 "MountingHole" H 15300 1155 50 0000 L CNN F 2 "MountingHole:MountingHole_3.2mm_M3_ISO7380_Pad" H 15200 1200 50 0001 C CNN F 3 "~" H 15200 1200 50 0001 C CNN 1 15200 1200 1 0 0 -1 $EndComp $Comp L Mechanical:MountingHole_Pad H9 U 1 1 627806C7 P 15450 1200 F 0 "H9" H 15550 1246 50 0000 L CNN F 1 "MountingHole" H 15550 1155 50 0000 L CNN F 2 "MountingHole:MountingHole_3.2mm_M3_ISO7380_Pad" H 15450 1200 50 0001 C CNN F 3 "~" H 15450 1200 50 0001 C CNN 1 15450 1200 1 0 0 -1 $EndComp NoConn ~ 14700 1300 NoConn ~ 14950 1300 NoConn ~ 15200 1300 NoConn ~ 15450 1300 $Comp L power:GND #PWR0128 U 1 1 61FA72E9 P 10650 7450 F 0 "#PWR0128" H 10650 7200 50 0001 C CNN F 1 "GND" H 10655 7277 50 0000 C CNN F 2 "" H 10650 7450 50 0001 C CNN F 3 "" H 10650 7450 50 0001 C CNN 1 10650 7450 1 0 0 -1 $EndComp $Comp L power:+3V3 #PWR0127 U 1 1 61F87951 P 10100 6400 F 0 "#PWR0127" H 10100 6250 50 0001 C CNN F 1 "+3V3" H 10115 6573 50 0000 C CNN F 2 "" H 10100 6400 50 0001 C CNN F 3 "" H 10100 6400 50 0001 C CNN 1 10100 6400 1 0 0 -1 $EndComp Wire Wire Line 10650 7300 10650 7450 Connection ~ 10650 7300 Wire Wire Line 10650 7200 10650 7300 Connection ~ 10650 7200 Wire Wire Line 10650 7100 10650 7200 Connection ~ 10650 7100 Wire Wire Line 10650 7000 10650 7100 Connection ~ 10650 7000 $Comp L Connector:Conn_01x04_Female J31 U 1 1 61F3AACC P 10850 7100 F 0 "J31" H 10878 7076 50 0000 L CNN F 1 "exp" H 10878 6985 50 0000 L CNN F 2 "Connector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_Vertical" H 10850 7100 50 0001 C CNN F 3 "~" H 10850 7100 50 0001 C CNN 1 10850 7100 1 0 0 -1 $EndComp Wire Wire Line 10650 6900 10650 7000 Connection ~ 10650 6900 Wire Wire Line 10650 6800 10650 6900 Connection ~ 10650 6800 Wire Wire Line 10650 6700 10650 6800 Connection ~ 10650 6700 Wire Wire Line 10650 6600 10650 6700 Connection ~ 10650 6600 $Comp L Connector:Conn_01x04_Female J28 U 1 1 61F3A3F5 P 10850 6700 F 0 "J28" H 10878 6676 50 0000 L CNN F 1 "exp" H 10878 6585 50 0000 L CNN F 2 "Connector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_Vertical" H 10850 6700 50 0001 C CNN F 3 "~" H 10850 6700 50 0001 C CNN 1 10850 6700 1 0 0 -1 $EndComp Wire Wire Line 10650 6400 10650 6600 Wire Wire Line 10100 7200 10100 7300 Connection ~ 10100 7200 Wire Wire Line 10100 7100 10100 7200 Connection ~ 10100 7100 Wire Wire Line 10100 7000 10100 7100 Connection ~ 10100 7000 $Comp L Connector:Conn_01x04_Female J30 U 1 1 61F3928E P 10300 7100 F 0 "J30" H 10328 7076 50 0000 L CNN F 1 "exp" H 10328 6985 50 0000 L CNN F 2 "Connector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_Vertical" H 10300 7100 50 0001 C CNN F 3 "~" H 10300 7100 50 0001 C CNN 1 10300 7100 1 0 0 -1 $EndComp Wire Wire Line 10100 6900 10100 7000 Connection ~ 10100 6900 Wire Wire Line 10100 6800 10100 6900 Connection ~ 10100 6800 Wire Wire Line 10100 6700 10100 6800 Connection ~ 10100 6700 Wire Wire Line 10100 6600 10100 6700 Connection ~ 10100 6600 $Comp L Connector:Conn_01x04_Female J27 U 1 1 61F38C5C P 10300 6700 F 0 "J27" H 10328 6676 50 0000 L CNN F 1 "exp" H 10328 6585 50 0000 L CNN F 2 "Connector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_Vertical" H 10300 6700 50 0001 C CNN F 3 "~" H 10300 6700 50 0001 C CNN 1 10300 6700 1 0 0 -1 $EndComp Wire Wire Line 10100 6400 10100 6600 $Comp L Connector:Conn_01x04_Female J29 U 1 1 61F36F61 P 9750 7100 F 0 "J29" H 9778 7076 50 0000 L CNN F 1 "exp" H 9778 6985 50 0000 L CNN F 2 "Connector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_Vertical" H 9750 7100 50 0001 C CNN F 3 "~" H 9750 7100 50 0001 C CNN 1 9750 7100 1 0 0 -1 $EndComp $Comp L Connector:Conn_01x04_Female J26 U 1 1 61F3688D P 9750 6700 F 0 "J26" H 9778 6676 50 0000 L CNN F 1 "exp" H 9778 6585 50 0000 L CNN F 2 "Connector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_Vertical" H 9750 6700 50 0001 C CNN F 3 "~" H 9750 6700 50 0001 C CNN 1 9750 6700 1 0 0 -1 $EndComp Wire Wire Line 8550 7300 9550 7300 Wire Wire Line 8550 7200 9550 7200 Wire Wire Line 8550 7100 9550 7100 Wire Wire Line 8550 7000 9550 7000 Wire Wire Line 8550 6900 9550 6900 Wire Wire Line 8550 6800 9550 6800 Wire Wire Line 8550 6700 9550 6700 Wire Wire Line 8550 6600 9550 6600 Wire Wire Line 6800 6100 6800 6200 $Comp L power:+3.3V #PWR0123 U 1 1 61B99DBE P 6800 6100 F 0 "#PWR0123" H 6800 5950 50 0001 C CNN F 1 "+3.3V" H 6815 6273 50 0000 C CNN F 2 "" H 6800 6100 50 0001 C CNN F 3 "" H 6800 6100 50 0001 C CNN 1 6800 6100 1 0 0 -1 $EndComp Wire Wire Line 6800 6400 7150 6400 $Comp L Device:R_Small R? U 1 1 61B97817 P 6800 6300 AR Path="/60D00052/61B97817" Ref="R?" Part="1" AR Path="/61B97817" Ref="R4" Part="1" F 0 "R4" H 6950 6250 50 0000 R CNN F 1 "15k" H 6950 6350 50 0000 R CNN F 2 "Resistor_SMD:R_0805_2012Metric" H 6800 6300 50 0001 C CNN F 3 "~" H 6800 6300 50 0001 C CNN F 4 "RMCF0805JT15K0CT-ND" H 6800 6300 50 0001 C CNN "DK#" 1 6800 6300 -1 0 0 1 $EndComp Wire Wire Line 7850 5300 7850 5250 Wire Wire Line 8300 5300 8500 5300 Wire Wire Line 7850 5300 8100 5300 $Comp L power:GND #PWR0120 U 1 1 61ACC6DC P 8500 5300 F 0 "#PWR0120" H 8500 5050 50 0001 C CNN F 1 "GND" H 8505 5127 50 0000 C CNN F 2 "" H 8500 5300 50 0001 C CNN F 3 "" H 8500 5300 50 0001 C CNN 1 8500 5300 1 0 0 -1 $EndComp $Comp L Device:C_Small C? U 1 1 61ACC34E P 8200 5300 AR Path="/60D00052/61ACC34E" Ref="C?" Part="1" AR Path="/61ACC34E" Ref="C6" Part="1" F 0 "C6" V 8300 5350 50 0000 R CNN F 1 "0.1uF" V 8400 5400 50 0000 R CNN F 2 "Capacitor_SMD:C_0805_2012Metric" H 8200 5300 50 0001 C CNN F 3 "~" H 8200 5300 50 0001 C CNN F 4 "1276-2449-1-ND" H 8200 5300 50 0001 C CNN "DK#" 1 8200 5300 0 -1 -1 0 $EndComp Wire Wire Line 7050 7600 7850 7600 Wire Wire Line 8550 5700 9550 5700 Text Label 9550 5700 2 50 ~ 0 SENSOR_A_SIGNAL NoConn ~ 7150 6300 Connection ~ 6800 6400 Wire Wire Line 6150 6400 6800 6400 Text Label 6150 6400 0 50 ~ 0 MCP_INT Text Notes 7050 7550 0 50 ~ 0 I2C ADDR: 0x20 Text Label 6150 6600 0 50 ~ 0 MCP_RESET Wire Wire Line 6600 6600 6150 6600 Wire Wire Line 6600 6600 7150 6600 Connection ~ 6600 6600 Wire Wire Line 6600 6700 6600 6600 Connection ~ 7050 7600 Wire Wire Line 6600 7600 7050 7600 Wire Wire Line 6600 6900 6600 7600 $Comp L Device:R_Small R? U 1 1 60D19DD6 P 6600 6800 AR Path="/60D00052/60D19DD6" Ref="R?" Part="1" AR Path="/60D19DD6" Ref="R10" Part="1" F 0 "R10" H 6659 6846 50 0000 L CNN F 1 "15k" H 6659 6755 50 0000 L CNN F 2 "Resistor_SMD:R_0805_2012Metric" H 6600 6800 50 0001 C CNN F 3 "~" H 6600 6800 50 0001 C CNN F 4 "RMCF0805JT15K0CT-ND" H 6600 6800 50 0001 C CNN "DK#" 1 6600 6800 1 0 0 -1 $EndComp Wire Wire Line 7850 7600 7850 7700 $Comp L power:GND #PWR? U 1 1 60D19DCF P 7850 7700 AR Path="/60D00052/60D19DCF" Ref="#PWR?" Part="1" AR Path="/60D19DCF" Ref="#PWR0109" Part="1" F 0 "#PWR0109" H 7850 7450 50 0001 C CNN F 1 "GND" H 7855 7527 50 0000 C CNN F 2 "" H 7850 7700 50 0001 C CNN F 3 "" H 7850 7700 50 0001 C CNN 1 7850 7700 1 0 0 -1 $EndComp Wire Wire Line 7050 7100 7150 7100 Wire Wire Line 7050 7100 7050 7200 Connection ~ 7050 7200 Wire Wire Line 7150 7200 7050 7200 Wire Wire Line 7050 7600 7050 7300 Wire Wire Line 7050 7200 7050 7300 Connection ~ 7050 7300 Wire Wire Line 7050 7300 7150 7300 Connection ~ 7850 5300 Wire Wire Line 7850 5400 7850 5300 $Comp L power:+3.3V #PWR? U 1 1 60D19DBA P 7850 5250 AR Path="/60D00052/60D19DBA" Ref="#PWR?" Part="1" AR Path="/60D19DBA" Ref="#PWR0108" Part="1" F 0 "#PWR0108" H 7850 5100 50 0001 C CNN F 1 "+3.3V" H 7865 5423 50 0000 C CNN F 2 "" H 7850 5250 50 0001 C CNN F 3 "" H 7850 5250 50 0001 C CNN 1 7850 5250 1 0 0 -1 $EndComp Wire Wire Line 6450 5700 7150 5700 Text Label 6450 5800 0 50 ~ 0 SCL Text Label 6450 5700 0 50 ~ 0 SDA Wire Wire Line 7150 5800 6450 5800 Connection ~ 7850 7600 $Comp L Interface_Expansion:MCP23017_SS U? U 1 1 60D19D8B P 7850 6500 AR Path="/60D00052/60D19D8B" Ref="U?" Part="1" AR Path="/60D19D8B" Ref="U4" Part="1" F 0 "U4" H 7450 7600 50 0000 C CNN F 1 "MCP23017_SS" H 7450 7500 50 0000 C CNN F 2 "Package_SO:SSOP-28_5.3x10.2mm_P0.65mm" H 8050 5500 50 0001 L CNN F 3 "http://ww1.microchip.com/downloads/en/DeviceDoc/20001952C.pdf" H 8050 5400 50 0001 L CNN F 4 "MCP23017-E/SS-ND" H 7850 6500 50 0001 C CNN "DK#" 1 7850 6500 1 0 0 -1 $EndComp Text Label 9550 6400 2 50 ~ 0 SENSOR_F_SIGNAL Text Label 9550 6300 2 50 ~ 0 SENSOR_E_SIGNAL Text Label 9550 6200 2 50 ~ 0 SENSOR_D_SIGNAL Text Label 9550 5900 2 50 ~ 0 SENSOR_C_SIGNAL Text Label 9550 5800 2 50 ~ 0 SENSOR_B_SIGNAL Wire Wire Line 8550 5800 9550 5800 Wire Wire Line 8550 5900 9550 5900 Wire Wire Line 8550 6200 9550 6200 Wire Wire Line 8550 6300 9550 6300 Wire Wire Line 8550 6400 9550 6400 $Comp L Mechanical:MountingHole_Pad H10 U 1 1 62B11681 P 14800 1550 F 0 "H10" H 14900 1596 50 0000 L CNN F 1 "MountingHole" H 14900 1505 50 0000 L CNN F 2 "MountingHole:MountingHole_3.2mm_M3_ISO7380_Pad" H 14800 1550 50 0001 C CNN F 3 "~" H 14800 1550 50 0001 C CNN 1 14800 1550 1 0 0 -1 $EndComp $Comp L Mechanical:MountingHole_Pad H11 U 1 1 62B11A83 P 15050 1550 F 0 "H11" H 15150 1596 50 0000 L CNN F 1 "MountingHole" H 15150 1505 50 0000 L CNN F 2 "MountingHole:MountingHole_3.2mm_M3_ISO7380_Pad" H 15050 1550 50 0001 C CNN F 3 "~" H 15050 1550 50 0001 C CNN 1 15050 1550 1 0 0 -1 $EndComp $Comp L Mechanical:MountingHole_Pad H12 U 1 1 62B11A8D P 15300 1550 F 0 "H12" H 15400 1596 50 0000 L CNN F 1 "MountingHole" H 15400 1505 50 0000 L CNN F 2 "MountingHole:MountingHole_3.2mm_M3_ISO7380_Pad" H 15300 1550 50 0001 C CNN F 3 "~" H 15300 1550 50 0001 C CNN 1 15300 1550 1 0 0 -1 $EndComp $Comp L Mechanical:MountingHole_Pad H13 U 1 1 62B11A97 P 15550 1550 F 0 "H13" H 15650 1596 50 0000 L CNN F 1 "MountingHole" H 15650 1505 50 0000 L CNN F 2 "MountingHole:MountingHole_3.2mm_M3_ISO7380_Pad" H 15550 1550 50 0001 C CNN F 3 "~" H 15550 1550 50 0001 C CNN 1 15550 1550 1 0 0 -1 $EndComp $Comp L Mechanical:MountingHole_Pad H14 U 1 1 62B11AA1 P 15800 1550 F 0 "H14" H 15900 1596 50 0000 L CNN F 1 "MountingHole" H 15900 1505 50 0000 L CNN F 2 "MountingHole:MountingHole_3.2mm_M3_ISO7380_Pad" H 15800 1550 50 0001 C CNN F 3 "~" H 15800 1550 50 0001 C CNN 1 15800 1550 1 0 0 -1 $EndComp NoConn ~ 14800 1650 NoConn ~ 15050 1650 NoConn ~ 15300 1650 NoConn ~ 15550 1650 NoConn ~ 15800 1650 $Comp L Mechanical:MountingHole_Pad H15 U 1 1 62B5CB5E P 15700 1200 F 0 "H15" H 15800 1246 50 0000 L CNN F 1 "MountingHole" H 15800 1155 50 0000 L CNN F 2 "MountingHole:MountingHole_3.2mm_M3_ISO7380_Pad" H 15700 1200 50 0001 C CNN F 3 "~" H 15700 1200 50 0001 C CNN 1 15700 1200 1 0 0 -1 $EndComp $Comp L Mechanical:MountingHole_Pad H16 U 1 1 62B5CEC0 P 15950 1200 F 0 "H16" H 16050 1246 50 0000 L CNN F 1 "MountingHole" H 16050 1155 50 0000 L CNN F 2 "MountingHole:MountingHole_3.2mm_M3_ISO7380_Pad" H 15950 1200 50 0001 C CNN F 3 "~" H 15950 1200 50 0001 C CNN 1 15950 1200 1 0 0 -1 $EndComp NoConn ~ 15700 1300 NoConn ~ 15950 1300 Wire Wire Line 8200 1100 8850 1100 Wire Wire Line 7800 1100 8000 1100 $Comp L Connector:TestPoint TP74 U 1 1 62BE70B7 P 8000 1100 F 0 "TP74" H 8058 1172 50 0000 L CNN F 1 "TestPoint" V 8045 1288 50 0001 L CNN F 2 "TestPoint:TestPoint_THTPad_D2.0mm_Drill1.0mm" H 8200 1100 50 0001 C CNN F 3 "~" H 8200 1100 50 0001 C CNN 1 8000 1100 1 0 0 -1 $EndComp Connection ~ 8000 1100 Wire Wire Line 8000 1100 8200 1100 Text Label 14500 4300 0 50 ~ 0 SW_IN $Comp L Device:LED_Small D? U 1 1 607210C0 P 9300 1200 AR Path="/60D00052/607210C0" Ref="D?" Part="1" AR Path="/607210C0" Ref="D4" Part="1" F 0 "D4" V 9350 1350 50 0000 R CNN F 1 "Red" V 9250 1400 50 0000 R CNN F 2 "ModifiedSymbols:LED_0805_2012Metric_Silkscreen" V 9300 1200 50 0001 C CNN F 3 "~" V 9300 1200 50 0001 C CNN F 4 "475-1278-1-ND" H 9300 1200 50 0001 C CNN "DK#" 1 9300 1200 0 -1 -1 0 $EndComp $Comp L Device:R_Small R? U 1 1 6072153E P 9300 1450 AR Path="/60D00052/6072153E" Ref="R?" Part="1" AR Path="/6072153E" Ref="R13" Part="1" F 0 "R13" H 9400 1400 50 0000 C CNN F 1 "220" H 9400 1500 50 0000 C CNN F 2 "Resistor_SMD:R_0805_2012Metric" H 9300 1450 50 0001 C CNN F 3 "~" H 9300 1450 50 0001 C CNN F 4 "RMCF0805JT220RCT-ND" H 9300 1450 50 0001 C CNN "DK#" 1 9300 1450 -1 0 0 1 $EndComp Wire Wire Line 9300 1300 9300 1350 Wire Wire Line 9300 1550 9300 1650 Connection ~ 9300 1100 Wire Wire Line 9300 1100 9800 1100 $Comp L power:GND #PWR02 U 1 1 6074C1AB P 9300 1650 F 0 "#PWR02" H 9300 1400 50 0001 C CNN F 1 "GND" H 9305 1477 50 0000 C CNN F 2 "" H 9300 1650 50 0001 C CNN F 3 "" H 9300 1650 50 0001 C CNN 1 9300 1650 1 0 0 -1 $EndComp NoConn ~ 2600 5200 Text Label 8800 6600 0 50 ~ 0 GPA0 Text Label 8800 6700 0 50 ~ 0 GPA1 Text Label 8800 6800 0 50 ~ 0 GPA2 Text Label 8800 6900 0 50 ~ 0 GPA3 Text Label 8800 7000 0 50 ~ 0 GPA4 Text Label 8800 7100 0 50 ~ 0 GPA5 Text Label 8800 7200 0 50 ~ 0 GPA6 Text Label 8800 7300 0 50 ~ 0 GPA7 $Comp L Connector:Barrel_Jack_Switch J1 U 1 1 6074305E P 800 900 F 0 "J1" H 857 1217 50 0000 C CNN F 1 "Barrel_Jack_Switch" H 857 1126 50 0000 C CNN F 2 "PJ-202A:PJ-202A" H 850 860 50 0001 C CNN F 3 "~" H 850 860 50 0001 C CNN F 4 "839-1514-ND" H 800 900 50 0001 C CNN "DK#" 1 800 900 1 0 0 -1 $EndComp Wire Wire Line 1100 800 1300 800 Wire Wire Line 1300 950 1300 1000 Wire Wire Line 1100 1000 1200 1000 Connection ~ 1300 1000 Wire Wire Line 1300 1000 1300 1050 Wire Wire Line 1100 900 1200 900 Wire Wire Line 1200 900 1200 1000 Connection ~ 1200 1000 Wire Wire Line 1200 1000 1300 1000 Connection ~ 1400 850 Connection ~ 1400 950 $Comp L Connector:Conn_01x03_Female J2 U 1 1 607CDC54 P 2550 8300 F 0 "J2" H 2442 8585 50 0000 C CNN F 1 "Conn_01x03_Female" H 2442 8494 50 0000 C CNN F 2 "Connector_PinSocket_2.54mm:PinSocket_1x03_P2.54mm_Vertical" H 2550 8300 50 0001 C CNN F 3 "~" H 2550 8300 50 0001 C CNN 1 2550 8300 -1 0 0 -1 $EndComp Wire Wire Line 2750 8200 2750 8100 Wire Wire Line 2750 8100 3650 8100 Wire Wire Line 2750 8300 3500 8300 Connection ~ 3500 8300 Wire Wire Line 2750 8400 2750 8500 Wire Wire Line 2750 8500 3650 8500 $Comp L Device:Buzzer BZ1 U 1 1 606C3416 P 10900 5600 F 0 "BZ1" H 11052 5629 50 0000 L CNN F 1 "Buzzer" H 11052 5538 50 0000 L CNN F 2 "Buzzer_Beeper:Buzzer_12x9.5RM7.6" V 10875 5700 50 0001 C CNN F 3 "~" V 10875 5700 50 0001 C CNN F 4 "668-AI-1224-TWT-5V-R-ND" H 10900 5600 50 0001 C CNN "DK#" 1 10900 5600 1 0 0 -1 $EndComp Wire Wire Line 9550 6000 8550 6000 Text Label 9550 6000 2 50 ~ 0 BUZZER Text Label 10300 5500 0 50 ~ 0 BUZZER Wire Wire Line 10300 5500 10800 5500 $Comp L power:GND #PWR06 U 1 1 60731F39 P 10700 5800 F 0 "#PWR06" H 10700 5550 50 0001 C CNN F 1 "GND" H 10705 5627 50 0000 C CNN F 2 "" H 10700 5800 50 0001 C CNN F 3 "" H 10700 5800 50 0001 C CNN 1 10700 5800 1 0 0 -1 $EndComp Wire Wire Line 10700 5800 10700 5700 Wire Wire Line 10700 5700 10800 5700 $Comp L BuckModule:Buck U7 U 1 1 60777001 P 4150 1300 F 0 "U7" H 4187 1625 50 0000 C CNN F 1 "Buck" H 4187 1534 50 0000 C CNN F 2 "Buck:BuckModuleBackSilk" H 4150 1300 50 0001 C CNN F 3 "" H 4150 1300 50 0001 C CNN 1 4150 1300 1 0 0 -1 $EndComp Text Label 2750 1200 0 50 ~ 0 SW_IN $Comp L power:GND #PWR08 U 1 1 607A4A3C P 3600 1500 F 0 "#PWR08" H 3600 1250 50 0001 C CNN F 1 "GND" H 3605 1327 50 0000 C CNN F 2 "" H 3600 1500 50 0001 C CNN F 3 "" H 3600 1500 50 0001 C CNN 1 3600 1500 1 0 0 -1 $EndComp Wire Wire Line 3600 1500 3600 1400 Wire Wire Line 3600 1400 3700 1400 $Comp L power:GND #PWR09 U 1 1 607C7992 P 4750 1500 F 0 "#PWR09" H 4750 1250 50 0001 C CNN F 1 "GND" H 4755 1327 50 0000 C CNN F 2 "" H 4750 1500 50 0001 C CNN F 3 "" H 4750 1500 50 0001 C CNN 1 4750 1500 1 0 0 -1 $EndComp Wire Wire Line 4750 1500 4750 1400 Wire Wire Line 4750 1400 4650 1400 $Comp L power:+5V #PWR07 U 1 1 607EAE8E P 5300 1000 F 0 "#PWR07" H 5300 850 50 0001 C CNN F 1 "+5V" H 5315 1173 50 0000 C CNN F 2 "" H 5300 1000 50 0001 C CNN F 3 "" H 5300 1000 50 0001 C CNN 1 5300 1000 1 0 0 -1 $EndComp Wire Wire Line 4650 1200 4750 1200 Wire Wire Line 5050 1200 5300 1200 Wire Wire Line 5300 1200 5300 1000 $Comp L Device:D_Schottky_Small D7 U 1 1 6086A699 P 4950 1200 F 0 "D7" H 5000 1050 50 0000 R CNN F 1 "2A 500mV" H 5100 1100 50 0000 R CNN F 2 "Diode_SMD:D_SOD-128" V 4950 1200 50 0001 C CNN F 3 "~" V 4950 1200 50 0001 C CNN F 4 "1727-1730-1-ND" H 4950 1200 50 0001 C CNN "DK#" 1 4950 1200 -1 0 0 1 $EndComp $Comp L no_pin:no_pin Z101 U 1 1 60734BDC P 15400 3400 F 0 "Z101" H 15400 3687 60 0000 C CNN F 1 "Fuse" H 15400 3581 60 0000 C CNN F 2 "Dummy:Dummy" H 15400 3400 60 0001 C CNN F 3 "" H 15400 3400 60 0001 C CNN F 4 "0297003.WXNV" H 15400 3400 50 0001 C CNN "DK#" 1 15400 3400 1 0 0 -1 $EndComp $Comp L Switch:SW_Push SW1 U 1 1 607D9BC7 P 7900 8700 F 0 "SW1" H 7900 8985 50 0000 C CNN F 1 "SW_Push" H 7900 8894 50 0000 C CNN F 2 "SwitchESE13:ESE13V01D" H 7900 8900 50 0001 C CNN F 3 "~" H 7900 8900 50 0001 C CNN F 4 "P13356SCT-ND" H 7900 8700 50 0001 C CNN "DK#" 1 7900 8700 1 0 0 -1 $EndComp Wire Wire Line 7700 8700 6950 8700 $Comp L power:GND #PWR0106 U 1 1 6081A7BE P 8200 8800 F 0 "#PWR0106" H 8200 8550 50 0001 C CNN F 1 "GND" H 8205 8627 50 0000 C CNN F 2 "" H 8200 8800 50 0001 C CNN F 3 "" H 8200 8800 50 0001 C CNN 1 8200 8800 1 0 0 -1 $EndComp Wire Wire Line 8100 8700 8200 8700 Wire Wire Line 8200 8700 8200 8800 Text Label 6950 8700 0 50 ~ 0 DETECT Wire Wire Line 9550 6100 8550 6100 Text Label 9550 6100 2 50 ~ 0 DETECT Wire Wire Line 4200 4200 3600 4200 NoConn ~ 2600 4600 NoConn ~ 2600 4900 NoConn ~ 2600 4700 NoConn ~ 3600 4400 Wire Wire Line 6300 1100 6700 1100 $Comp L Regulator_Linear:LM7805_TO220 U6 U 1 1 618B409A P 3600 750 F 0 "U6" H 3600 992 50 0000 C CNN F 1 "LM7805_TO220" H 3600 901 50 0000 C CNN F 2 "Package_TO_SOT_THT:TO-220-3_Vertical" H 3600 975 50 0001 C CIN F 3 "https://www.onsemi.cn/PowerSolutions/document/MC7800-D.PDF" H 3600 700 50 0001 C CNN 1 3600 750 1 0 0 -1 $EndComp Wire Wire Line 3600 1050 3600 1400 Connection ~ 3600 1400 Wire Wire Line 3300 750 3250 750 Wire Wire Line 3150 750 3150 1200 Wire Wire Line 3150 1200 3700 1200 Wire Wire Line 3150 1200 2750 1200 Connection ~ 3150 1200 Wire Wire Line 3900 750 3950 750 Wire Wire Line 4750 750 4750 1200 Connection ~ 4750 1200 Wire Wire Line 4750 1200 4850 1200 $Comp L Connector:TestPoint TP60 U 1 1 6192832F P 3250 6800 F 0 "TP60" V 3250 6988 50 0000 L CNN F 1 "TestPoint" V 3295 6988 50 0001 L CNN F 2 "pogoPins:pogo1mm" H 3450 6800 50 0001 C CNN F 3 "~" H 3450 6800 50 0001 C CNN 1 3250 6800 0 -1 -1 0 $EndComp $Comp L Connector:TestPoint TP56 U 1 1 618D77B1 P 3250 6700 F 0 "TP56" V 3250 6888 50 0000 L CNN F 1 "TestPoint" V 3295 6888 50 0001 L CNN F 2 "pogoPins:pogo1mm" H 3450 6700 50 0001 C CNN F 3 "~" H 3450 6700 50 0001 C CNN 1 3250 6700 0 -1 -1 0 $EndComp $Comp L Connector:TestPoint TP54 U 1 1 618D77AB P 3250 6600 F 0 "TP54" V 3250 6788 50 0000 L CNN F 1 "TestPoint" V 3295 6788 50 0001 L CNN F 2 "pogoPins:pogo1mm" H 3450 6600 50 0001 C CNN F 3 "~" H 3450 6600 50 0001 C CNN 1 3250 6600 0 -1 -1 0 $EndComp $Comp L Connector:TestPoint TP52 U 1 1 618D77A5 P 3250 6500 F 0 "TP52" V 3250 6688 50 0000 L CNN F 1 "TestPoint" V 3295 6688 50 0001 L CNN F 2 "pogoPins:pogo1mm" H 3450 6500 50 0001 C CNN F 3 "~" H 3450 6500 50 0001 C CNN 1 3250 6500 0 -1 -1 0 $EndComp $Comp L Connector:TestPoint TP50 U 1 1 618D779F P 3250 6400 F 0 "TP50" V 3250 6588 50 0000 L CNN F 1 "TestPoint" V 3295 6588 50 0001 L CNN F 2 "pogoPins:pogo1mm" H 3450 6400 50 0001 C CNN F 3 "~" H 3450 6400 50 0001 C CNN 1 3250 6400 0 -1 -1 0 $EndComp $Comp L Connector:TestPoint TP59 U 1 1 61927B4B P 1850 6800 F 0 "TP59" V 1850 6988 50 0000 L CNN F 1 "TestPoint" V 1895 6988 50 0001 L CNN F 2 "pogoPins:pogo1mm" H 2050 6800 50 0001 C CNN F 3 "~" H 2050 6800 50 0001 C CNN 1 1850 6800 0 -1 -1 0 $EndComp $Comp L Connector:TestPoint TP49 U 1 1 6190E51C P 1850 6400 F 0 "TP49" V 1850 6588 50 0000 L CNN F 1 "TestPoint" V 1895 6588 50 0001 L CNN F 2 "pogoPins:pogo1mm" H 2050 6400 50 0001 C CNN F 3 "~" H 2050 6400 50 0001 C CNN 1 1850 6400 0 -1 -1 0 $EndComp $Comp L Connector:TestPoint TP51 U 1 1 6190E516 P 1850 6500 F 0 "TP51" V 1850 6688 50 0000 L CNN F 1 "TestPoint" V 1895 6688 50 0001 L CNN F 2 "pogoPins:pogo1mm" H 2050 6500 50 0001 C CNN F 3 "~" H 2050 6500 50 0001 C CNN 1 1850 6500 0 -1 -1 0 $EndComp $Comp L Connector:TestPoint TP53 U 1 1 6190E510 P 1850 6600 F 0 "TP53" V 1850 6788 50 0000 L CNN F 1 "TestPoint" V 1895 6788 50 0001 L CNN F 2 "pogoPins:pogo1mm" H 2050 6600 50 0001 C CNN F 3 "~" H 2050 6600 50 0001 C CNN 1 1850 6600 0 -1 -1 0 $EndComp $Comp L Connector:TestPoint TP55 U 1 1 6190E50A P 1850 6700 F 0 "TP55" V 1850 6888 50 0000 L CNN F 1 "TestPoint" V 1895 6888 50 0001 L CNN F 2 "pogoPins:pogo1mm" H 2050 6700 50 0001 C CNN F 3 "~" H 2050 6700 50 0001 C CNN 1 1850 6700 0 -1 -1 0 $EndComp NoConn ~ 2600 4500 $Comp L Connector_Generic:Conn_02x04_Odd_Even J101 U 1 1 619E4686 P 4200 6500 F 0 "J101" H 4250 6817 50 0000 C CNN F 1 "Conn_02x04_Odd_Even" H 4250 6726 50 0000 C CNN F 2 "ModifiedSymbols:IDC-Header_2x04_P2.54mm_Vertical" H 4200 6500 50 0001 C CNN F 3 "~" H 4200 6500 50 0001 C CNN 1 4200 6500 1 0 0 -1 $EndComp Wire Wire Line 4500 6800 4500 6700 Wire Wire Line 3950 6800 4500 6800 Connection ~ 4500 6500 Wire Wire Line 4500 6500 4500 6400 Connection ~ 4500 6600 Wire Wire Line 4500 6600 4500 6500 Connection ~ 4500 6700 Wire Wire Line 4500 6700 4500 6600 $Comp L Device:C_Small C3 U 1 1 61A891A1 P 3250 850 F 0 "C3" H 3000 900 50 0000 L CNN F 1 "10uF" H 3000 800 50 0000 L CNN F 2 "Capacitor_SMD:C_1206_3216Metric" H 3250 850 50 0001 C CNN F 3 "~" H 3250 850 50 0001 C CNN 1 3250 850 1 0 0 -1 $EndComp Connection ~ 3250 750 Wire Wire Line 3250 750 3150 750 $Comp L Device:C_Small C8 U 1 1 61A898F1 P 3950 850 F 0 "C8" H 4042 896 50 0000 L CNN F 1 "22uF" H 4042 805 50 0000 L CNN F 2 "Capacitor_SMD:C_1206_3216Metric" H 3950 850 50 0001 C CNN F 3 "~" H 3950 850 50 0001 C CNN 1 3950 850 1 0 0 -1 $EndComp Connection ~ 3950 750 Wire Wire Line 3950 750 4750 750 Wire Wire Line 3250 950 3250 1050 Wire Wire Line 3250 1050 3600 1050 Connection ~ 3600 1050 Wire Wire Line 3600 1050 3950 1050 Wire Wire Line 3950 1050 3950 950 $EndSCHEMATC ================================================ FILE: electronics/chainlinkDriverTester/fp-lib-table ================================================ (fp_lib_table (lib (name INA219)(type KiCad)(uri ${KIPRJMOD}/../lib/INA219.pretty)(options "")(descr "")) (lib (name ESP32)(type KiCad)(uri ${KIPRJMOD}/../lib/ESP32.pretty)(options "")(descr "")) (lib (name ScrewTerminals)(type KiCad)(uri ${KIPRJMOD}/../lib/ScrewTerminals.pretty)(options "")(descr "")) (lib (name pogoPins)(type KiCad)(uri ${KIPRJMOD}/../lib/pogoPins.pretty)(options "")(descr "")) (lib (name BK-6013)(type KiCad)(uri ${KIPRJMOD}/../lib/BK-6013.pretty)(options "")(descr "")) (lib (name VN7007ALHTR)(type KiCad)(uri ${KIPRJMOD}/../lib/VN7007ALHTR.pretty)(options "")(descr "")) (lib (name PJ-202A)(type KiCad)(uri ${KIPRJMOD}/../lib/PJ-202A.pretty)(options "")(descr "")) (lib (name Buck)(type KiCad)(uri ${KIPRJMOD}/../lib/Buck.pretty)(options "")(descr "")) (lib (name Dummy)(type KiCad)(uri ${KIPRJMOD}/../lib/Dummy.pretty)(options "")(descr "")) (lib (name ModifiedSymbols)(type KiCad)(uri ${KIPRJMOD}/../lib/ModifiedSymbols.pretty)(options "")(descr "")) (lib (name SwitchESE13)(type KiCad)(uri ${KIPRJMOD}/../lib/SwitchESE13.pretty)(options "")(descr "")) ) ================================================ FILE: electronics/chainlinkDriverTester/sym-lib-table ================================================ (sym_lib_table (lib (name ESP32Modules)(type Legacy)(uri ${KIPRJMOD}/../lib/ESP32Modules.lib)(options "")(descr "")) (lib (name VN7007ALHTR)(type Legacy)(uri ${KIPRJMOD}/../lib/VN7007ALHTR.lib)(options "")(descr "")) (lib (name BuckModule)(type Legacy)(uri ${KIPRJMOD}/../lib/BuckModule.lib)(options "")(descr "")) (lib (name no_pin)(type Legacy)(uri ${KIPRJMOD}/../lib/no_pin.lib)(options "")(descr "")) ) ================================================ FILE: electronics/lib/54-00131.STEP ================================================ ISO-10303-21; HEADER; FILE_DESCRIPTION (( 'STEP AP203' ), '1' ); FILE_NAME ('54-00131.STEP', '2018-09-27T23:54:02', ( '' ), ( '' ), 'SwSTEP 2.0', 'SolidWorks 2015', '' ); FILE_SCHEMA (( 'CONFIG_CONTROL_DESIGN' )); ENDSEC; DATA; #1 = CARTESIAN_POINT ( 'NONE', ( 1.050000000000111100, -5.551115123125780200E-014, -13.44999999999999900 ) ) ; #2 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; #3 = ORIENTED_EDGE ( 'NONE', *, *, #3786, .F. ) ; #4 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #118 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #5107, #994, #1977 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); #5 = EDGE_CURVE ( 'NONE', #3306, #3788, #2646, .T. ) ; #6 = CARTESIAN_POINT ( 'NONE', ( -2.362731470142100100, -1.199999999999980200, -9.900000000000000400 ) ) ; #7 = AXIS2_PLACEMENT_3D ( 'NONE', #3976, #4502, #332 ) ; #8 = CARTESIAN_POINT ( 'NONE', ( -2.739999999999950000, -2.559999999999050100, -2.779157999888000100 ) ) ; #9 = ORIENTED_EDGE ( 'NONE', *, *, #2372, .F. ) ; #10 = CARTESIAN_POINT ( 'NONE', ( -4.339999999999969700, -2.559999999999050100, -11.79999999999999900 ) ) ; #11 = ORIENTED_EDGE ( 'NONE', *, *, #3659, .T. ) ; #12 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #13 = CARTESIAN_POINT ( 'NONE', ( -3.149999999999999900, 0.0000000000000000000, -9.400000000000000400 ) ) ; #14 = ORIENTED_EDGE ( 'NONE', *, *, #6790, .T. ) ; #15 = CARTESIAN_POINT ( 'NONE', ( 0.6202885519846446100, -11.14890197946369800, -7.599999999999870900 ) ) ; #16 = ORIENTED_EDGE ( 'NONE', *, *, #5971, .T. ) ; #17 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; #18 = LINE ( 'NONE', #1308, #2104 ) ; #19 = ORIENTED_EDGE ( 'NONE', *, *, #3680, .F. ) ; #20 = ORIENTED_EDGE ( 'NONE', *, *, #2092, .F. ) ; #21 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; #22 = CARTESIAN_POINT ( 'NONE', ( 4.499999999999988500, -6.000000000000060400, -0.4999999999999988300 ) ) ; #23 = ORIENTED_EDGE ( 'NONE', *, *, #4364, .T. ) ; #24 = EDGE_CURVE ( 'NONE', #3505, #1362, #2075, .T. ) ; #25 = VECTOR ( 'NONE', #3634, 1000.000000000000000 ) ; #26 = ORIENTED_EDGE ( 'NONE', *, *, #2194, .T. ) ; #27 = LINE ( 'NONE', #1489, #2649 ) ; #28 = ORIENTED_EDGE ( 'NONE', *, *, #2989, .T. ) ; #29 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; #30 = ORIENTED_EDGE ( 'NONE', *, *, #4516, .F. ) ; #31 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; #32 = ORIENTED_EDGE ( 'NONE', *, *, #3407, .T. ) ; #33 = VECTOR ( 'NONE', #4588, 1000.000000000000000 ) ; #34 = CARTESIAN_POINT ( 'NONE', ( 4.860000000000080300, -10.19999999999910000, -10.80000000000000100 ) ) ; #35 = ORIENTED_EDGE ( 'NONE', *, *, #6081, .F. ) ; #36 = EDGE_CURVE ( 'NONE', #404, #2509, #4700, .T. ) ; #37 = CARTESIAN_POINT ( 'NONE', ( 2.299999999999859900, -2.000000000000110100, -11.79999999999999900 ) ) ; #38 = AXIS2_PLACEMENT_3D ( 'NONE', #5476, #2346, #6608 ) ; #39 = VECTOR ( 'NONE', #4192, 1000.000000000000000 ) ; #40 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #41 = VERTEX_POINT ( 'NONE', #6766 ) ; #42 = CARTESIAN_POINT ( 'NONE', ( 4.500000000000060400, -10.19999999999910000, -9.800000000000000700 ) ) ; #43 = CARTESIAN_POINT ( 'NONE', ( 3.050000000000940000, -5.299999999999280400, -5.600000000000860300 ) ) ; #44 = ORIENTED_EDGE ( 'NONE', *, *, #6112, .T. ) ; #45 = ADVANCED_FACE ( 'NONE', ( #6116 ), #4088, .F. ) ; #46 = CARTESIAN_POINT ( 'NONE', ( -1.479999999999980000, -3.100000000000049800, -13.77999999999999900 ) ) ; #47 = EDGE_CURVE ( 'NONE', #4761, #6569, #2570, .T. ) ; #48 = CIRCLE ( 'NONE', #1766, 0.5000000000000000000 ) ; #49 = ORIENTED_EDGE ( 'NONE', *, *, #5090, .T. ) ; #50 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; #51 = AXIS2_PLACEMENT_3D ( 'NONE', #5233, #208, #4992 ) ; #52 = LINE ( 'NONE', #2278, #5724 ) ; #53 = AXIS2_PLACEMENT_3D ( 'NONE', #2644, #3735, #4242 ) ; #54 = VECTOR ( 'NONE', #3377, 1000.000000000000000 ) ; #55 = CARTESIAN_POINT ( 'NONE', ( -1.550000000000830000, -3.350000000000020100, -13.44999999999999900 ) ) ; #56 = PLANE ( 'NONE', #1410 ) ; #57 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; #58 = VECTOR ( 'NONE', #3516, 1000.000000000000000 ) ; #59 = ORIENTED_EDGE ( 'NONE', *, *, #4651, .F. ) ; #60 = CARTESIAN_POINT ( 'NONE', ( 2.020503613607919700, -3.007089900357980300, -6.347769753040591200 ) ) ; #61 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; #62 = ORIENTED_EDGE ( 'NONE', *, *, #3146, .F. ) ; #63 = CARTESIAN_POINT ( 'NONE', ( 1.479999999999979600, -3.100000000000049400, -13.77999999999999900 ) ) ; #64 = VECTOR ( 'NONE', #4629, 1000.000000000000000 ) ; #65 = LINE ( 'NONE', #4437, #4164 ) ; #66 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; #67 = VERTEX_POINT ( 'NONE', #6173 ) ; #68 = ADVANCED_FACE ( 'NONE', ( #3469 ), #6701, .T. ) ; #69 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; #70 = FACE_OUTER_BOUND ( 'NONE', #2039, .T. ) ; #71 = LINE ( 'NONE', #4035, #64 ) ; #72 = EDGE_CURVE ( 'NONE', #81, #5291, #5367, .T. ) ; #73 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #74 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; #75 = CARTESIAN_POINT ( 'NONE', ( 2.009600286187938100, -3.063158890845682600, -6.648336370488468800 ) ) ; #76 = VECTOR ( 'NONE', #3667, 1000.000000000000000 ) ; #77 = ORIENTED_EDGE ( 'NONE', *, *, #6490, .F. ) ; #78 = CALENDAR_DATE ( 2018, 27, 9 ) ; #79 = EDGE_CURVE ( 'NONE', #4383, #6547, #3302, .T. ) ; #80 = CARTESIAN_POINT ( 'NONE', ( 18.18468237128200100, -2.970259389423802500, -3.494704195690110400 ) ) ; #81 = VERTEX_POINT ( 'NONE', #2009 ) ; #82 = AXIS2_PLACEMENT_3D ( 'NONE', #3012, #3525, #6726 ) ; #83 = DIRECTION ( 'NONE', ( -0.5197153285318708600, -0.8543394976758417200, 0.0000000000000000000 ) ) ; #84 = CARTESIAN_POINT ( 'NONE', ( 1.199999999999930000, 0.0000000000000000000, -13.94999999999999900 ) ) ; #85 = VERTEX_POINT ( 'NONE', #5679 ) ; #86 = ADVANCED_FACE ( 'NONE', ( #107 ), #1500, .T. ) ; #87 = CARTESIAN_POINT ( 'NONE', ( 4.499999999999950300, -6.000000000000060400, -11.80000000000000100 ) ) ; #88 = VERTEX_POINT ( 'NONE', #1943 ) ; #89 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #90 = ORIENTED_EDGE ( 'NONE', *, *, #5399, .T. ) ; #91 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; #92 = CARTESIAN_POINT ( 'NONE', ( 4.499999999999950300, 3.799999999999910100, -11.80000000000000100 ) ) ; #93 = EDGE_LOOP ( 'NONE', ( #3, #5691, #4113, #4945 ) ) ; #94 = CARTESIAN_POINT ( 'NONE', ( 1.249999999999969800, -8.241421356236859500, -7.658578643762999700 ) ) ; #95 = CARTESIAN_POINT ( 'NONE', ( 3.650000000000929800, -5.150000000000099800, -11.79999999999999900 ) ) ; #96 = ORIENTED_EDGE ( 'NONE', *, *, #5359, .T. ) ; #97 = FACE_OUTER_BOUND ( 'NONE', #3412, .T. ) ; #98 = PLANE ( 'NONE', #2034 ) ; #99 = ORIENTED_EDGE ( 'NONE', *, *, #2806, .F. ) ; #100 = VECTOR ( 'NONE', #4641, 1000.000000000000000 ) ; #101 = ORIENTED_EDGE ( 'NONE', *, *, #2312, .T. ) ; #102 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; #103 = CARTESIAN_POINT ( 'NONE', ( 4.000000000000000000, 4.299999999999919900, -11.80000000000000100 ) ) ; #104 = ORIENTED_EDGE ( 'NONE', *, *, #914, .T. ) ; #105 = AXIS2_PLACEMENT_3D ( 'NONE', #2591, #2062, #2110 ) ; #106 = ADVANCED_FACE ( 'NONE', ( #678 ), #5603, .T. ) ; #107 = FACE_OUTER_BOUND ( 'NONE', #6165, .T. ) ; #108 = ORIENTED_EDGE ( 'NONE', *, *, #6344, .T. ) ; #109 = CARTESIAN_POINT ( 'NONE', ( 4.499999999999950300, 0.0000000000000000000, -11.80000000000000100 ) ) ; #110 = LINE ( 'NONE', #3957, #4538 ) ; #111 = EDGE_CURVE ( 'NONE', #634, #2133, #2979, .T. ) ; #112 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; #113 = FACE_OUTER_BOUND ( 'NONE', #5475, .T. ) ; #114 = ORIENTED_EDGE ( 'NONE', *, *, #1551, .T. ) ; #115 = DIRECTION ( 'NONE', ( 0.05997373034769906700, -0.1043403074085951900, 0.9927317119534669900 ) ) ; #116 = CARTESIAN_POINT ( 'NONE', ( 4.499999999999950300, -2.599999999999050200, -9.750000000000000000 ) ) ; #117 = EDGE_LOOP ( 'NONE', ( #4617, #4202, #3312, #3501 ) ) ; #118 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #5107, 'distance_accuracy_value', 'NONE'); #119 = CARTESIAN_POINT ( 'NONE', ( 18.18468237128200100, -3.137993503012869800, -3.603632002693439900 ) ) ; #120 = VERTEX_POINT ( 'NONE', #6284 ) ; #121 = VECTOR ( 'NONE', #2992, 1000.000000000000000 ) ; #122 = EDGE_CURVE ( 'NONE', #3734, #2328, #1925, .T. ) ; #123 = ORIENTED_EDGE ( 'NONE', *, *, #2219, .F. ) ; #124 = ADVANCED_FACE ( 'NONE', ( #3873 ), #5073, .F. ) ; #125 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #126 = AXIS2_PLACEMENT_3D ( 'NONE', #6275, #6711, #5666 ) ; #127 = ORIENTED_EDGE ( 'NONE', *, *, #785, .F. ) ; #128 = CARTESIAN_POINT ( 'NONE', ( 1.992027483134569200, -2.146699123532254100, -5.521499184909296300 ) ) ; #129 = ORIENTED_EDGE ( 'NONE', *, *, #6180, .T. ) ; #130 = CARTESIAN_POINT ( 'NONE', ( -0.04503944985619570700, -2.766308109884399300, -9.994224449313415800 ) ) ; #131 = LINE ( 'NONE', #1707, #4558 ) ; #132 = CARTESIAN_POINT ( 'NONE', ( 2.499999999999949800, 3.799999999999910100, -1.000000000000000000 ) ) ; #133 = CARTESIAN_POINT ( 'NONE', ( -2.299999999999080100, -2.000000000000110100, -11.79999999999999900 ) ) ; #134 = ORIENTED_EDGE ( 'NONE', *, *, #5882, .T. ) ; #135 = AXIS2_PLACEMENT_3D ( 'NONE', #5668, #2538, #5689 ) ; #136 = CIRCLE ( 'NONE', #2157, 1.000000000000000000 ) ; #137 = EDGE_LOOP ( 'NONE', ( #5675, #300, #3617, #6611 ) ) ; #138 = EDGE_CURVE ( 'NONE', #1167, #6358, #6696, .T. ) ; #139 = AXIS2_PLACEMENT_3D ( 'NONE', #1021, #473, #958 ) ; #140 = CARTESIAN_POINT ( 'NONE', ( -1.479999999999979600, -7.635192378864008600, -13.73310889132458200 ) ) ; #141 = CYLINDRICAL_SURFACE ( 'NONE', #704, 1.500000000000000000 ) ; #142 = ORIENTED_EDGE ( 'NONE', *, *, #1131, .F. ) ; #143 = AXIS2_PLACEMENT_3D ( 'NONE', #4330, #4862, #89 ) ; #144 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -9.650000000000000400 ) ) ; #145 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; #146 = PLANE ( 'NONE', #6746 ) ; #147 = ADVANCED_FACE ( 'NONE', ( #2819 ), #3112, .T. ) ; #148 = CARTESIAN_POINT ( 'NONE', ( -4.500000000000060400, -2.599999999999050200, -11.79999999999999900 ) ) ; #149 = LINE ( 'NONE', #539, #3923 ) ; #150 = ORIENTED_EDGE ( 'NONE', *, *, #6106, .F. ) ; #151 = CARTESIAN_POINT ( 'NONE', ( -3.650000000000039900, -5.150000000000099800, -11.79999999999999900 ) ) ; #152 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; #153 = CARTESIAN_POINT ( 'NONE', ( -3.049999999999060600, -5.299999999999280400, -6.100000000000919800 ) ) ; #154 = LINE ( 'NONE', #2680, #4170 ) ; #155 = CARTESIAN_POINT ( 'NONE', ( -3.264504048139597100E-015, -2.699783421336158000, -10.03070813642793600 ) ) ; #156 = VECTOR ( 'NONE', #6345, 1000.000000000000000 ) ; #157 = ORIENTED_EDGE ( 'NONE', *, *, #1162, .F. ) ; #158 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; #159 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; #160 = EDGE_CURVE ( 'NONE', #3615, #2074, #6535, .T. ) ; #161 = VERTEX_POINT ( 'NONE', #2634 ) ; #162 = LINE ( 'NONE', #5677, #4179 ) ; #163 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; #164 = CARTESIAN_POINT ( 'NONE', ( -1.544386251948035400, 2.155080904950319500, -9.900000000000002100 ) ) ; #165 = ORIENTED_EDGE ( 'NONE', *, *, #3588, .F. ) ; #166 = ADVANCED_FACE ( 'NONE', ( #195 ), #278, .T. ) ; #167 = CARTESIAN_POINT ( 'NONE', ( 0.5877149042824160200, -2.857529744987935800, -10.28315502499716400 ) ) ; #168 = PERSON_AND_ORGANIZATION ( #2374, #4427 ) ; #169 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #170 = CARTESIAN_POINT ( 'NONE', ( 2.750000000000909900, -5.500000000000009800, -1.500072740962019800 ) ) ; #171 = EDGE_CURVE ( 'NONE', #6342, #3415, #513, .T. ) ; #172 = CARTESIAN_POINT ( 'NONE', ( -1.000000000000000000, -1.224646799147353200E-016, -2.100000000000049400 ) ) ; #173 = VERTEX_POINT ( 'NONE', #3657 ) ; #174 = CARTESIAN_POINT ( 'NONE', ( 1.340076765067352800, -2.582763714335778900, -11.21899116186152900 ) ) ; #175 = CARTESIAN_POINT ( 'NONE', ( 4.499999999999950300, 3.799999999999910100, -2.700000000000001100 ) ) ; #176 = EDGE_CURVE ( 'NONE', #2333, #1040, #5532, .T. ) ; #177 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, ( #355, #6227, #3039, #4639, #2470, #905 ), .UNSPECIFIED., .F., .F., ( 4, 2, 4 ), ( 0.0000000000000000000, 0.5000000000000000000, 1.000000000000000000 ), .UNSPECIFIED. ) ; #178 = ORIENTED_EDGE ( 'NONE', *, *, #1721, .F. ) ; #179 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000090600, -8.829289321880175100, -8.246446609406152800 ) ) ; #180 = CARTESIAN_POINT ( 'NONE', ( 1.200000000000089900, -1.962141687034497700, -13.77999999999999900 ) ) ; #181 = EDGE_CURVE ( 'NONE', #5163, #4106, #5614, .T. ) ; #182 = EDGE_CURVE ( 'NONE', #4061, #6557, #1757, .T. ) ; #183 = PLANE ( 'NONE', #3156 ) ; #184 = CARTESIAN_POINT ( 'NONE', ( -2.749999999999090100, -2.970259389424510000, -3.494704195690570000 ) ) ; #185 = AXIS2_PLACEMENT_3D ( 'NONE', #5269, #2, #484 ) ; #186 = ORIENTED_EDGE ( 'NONE', *, *, #3339, .T. ) ; #187 = CARTESIAN_POINT ( 'NONE', ( -1.190714193910480100E-014, -9.819999999999989600, -13.42000000000000000 ) ) ; #188 = CARTESIAN_POINT ( 'NONE', ( 3.200000000000979800, -1.199999999999980000, -11.80000000000000100 ) ) ; #189 = ORIENTED_EDGE ( 'NONE', *, *, #1097, .F. ) ; #190 = VECTOR ( 'NONE', #2317, 1000.000000000000000 ) ; #191 = ORIENTED_EDGE ( 'NONE', *, *, #2241, .F. ) ; #192 = ORIENTED_EDGE ( 'NONE', *, *, #3357, .T. ) ; #193 = CARTESIAN_POINT ( 'NONE', ( 1.000000000000000000, -1.999999999999999800, -2.100000000000048900 ) ) ; #194 = CARTESIAN_POINT ( 'NONE', ( 1.554729295461079600, -2.596358395372277500, -11.08964641184124200 ) ) ; #195 = FACE_OUTER_BOUND ( 'NONE', #4165, .T. ) ; #196 = ORIENTED_EDGE ( 'NONE', *, *, #1584, .F. ) ; #197 = FACE_OUTER_BOUND ( 'NONE', #1283, .T. ) ; #198 = EDGE_LOOP ( 'NONE', ( #4798, #2815, #6139, #694 ) ) ; #199 = EDGE_CURVE ( 'NONE', #3299, #3130, #4535, .T. ) ; #200 = ADVANCED_FACE ( 'NONE', ( #4283 ), #357, .T. ) ; #201 = PLANE ( 'NONE', #6272 ) ; #202 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; #203 = LINE ( 'NONE', #3596, #5458 ) ; #204 = ORIENTED_EDGE ( 'NONE', *, *, #6024, .T. ) ; #205 = ORIENTED_EDGE ( 'NONE', *, *, #5345, .F. ) ; #206 = CARTESIAN_POINT ( 'NONE', ( 1.900000000000900100, -5.500000000000009800, -6.968314918796940200 ) ) ; #207 = CARTESIAN_POINT ( 'NONE', ( 0.9738976004154500400, -5.299999999999279500, -4.838292234148009500 ) ) ; #208 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #209 = LINE ( 'NONE', #913, #2502 ) ; #210 = CARTESIAN_POINT ( 'NONE', ( 0.3927855025097859400, -2.658094087435977700, -10.50227053771294200 ) ) ; #211 = ORIENTED_EDGE ( 'NONE', *, *, #1585, .T. ) ; #212 = EDGE_CURVE ( 'NONE', #3015, #1054, #6289, .T. ) ; #213 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #214 = VECTOR ( 'NONE', #385, 1000.000000000000000 ) ; #215 = ORIENTED_EDGE ( 'NONE', *, *, #880, .F. ) ; #216 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #217 = CARTESIAN_POINT ( 'NONE', ( 2.040189090686819600, -3.183017061585673900, -6.248654293829632800 ) ) ; #218 = CYLINDRICAL_SURFACE ( 'NONE', #143, 2.299999999999999800 ) ; #219 = EDGE_CURVE ( 'NONE', #120, #1536, #2898, .T. ) ; #220 = FACE_OUTER_BOUND ( 'NONE', #2212, .T. ) ; #221 = CYLINDRICAL_SURFACE ( 'NONE', #1186, 0.2999999999999999300 ) ; #222 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #223 = EDGE_LOOP ( 'NONE', ( #2922, #1118, #4309, #6801 ) ) ; #224 = CARTESIAN_POINT ( 'NONE', ( 1.249999999999970200, -5.644404444539962800, -7.599999999999871700 ) ) ; #225 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #226 = CARTESIAN_POINT ( 'NONE', ( 18.18468237128200100, -3.137993503012880000, -3.603632002693439900 ) ) ; #227 = CC_DESIGN_PERSON_AND_ORGANIZATION_ASSIGNMENT ( #168, #2557, ( #2946 ) ) ; #228 = FACE_OUTER_BOUND ( 'NONE', #5869, .T. ) ; #229 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; #230 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.6819983600624617300, -0.7313537016192047700 ) ) ; #231 = ORIENTED_EDGE ( 'NONE', *, *, #3593, .F. ) ; #232 = CARTESIAN_POINT ( 'NONE', ( 18.18468237128200100, -2.283098795542556600, -5.375228444583551200 ) ) ; #233 = ADVANCED_FACE ( 'NONE', ( #1422 ), #4366, .T. ) ; #234 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #235 = CARTESIAN_POINT ( 'NONE', ( -1.545531434145879200, -2.649065173960942800, -11.22595972605444600 ) ) ; #236 = LINE ( 'NONE', #394, #6827 ) ; #237 = CARTESIAN_POINT ( 'NONE', ( 1.479999999999978000, -9.819999999999989600, -13.77999999999999900 ) ) ; #238 = ORIENTED_EDGE ( 'NONE', *, *, #3052, .F. ) ; #239 = CARTESIAN_POINT ( 'NONE', ( -2.014344306336695900, -3.071412379794999900, -6.569809668605285100 ) ) ; #240 = EDGE_LOOP ( 'NONE', ( #3269, #6592, #1453 ) ) ; #241 = VECTOR ( 'NONE', #5143, 1000.000000000000000 ) ; #242 = VECTOR ( 'NONE', #5981, 1000.000000000000000 ) ; #243 = CARTESIAN_POINT ( 'NONE', ( -0.4230013043508037400, -11.22642148007351900, -7.800000000000071800 ) ) ; #244 = CARTESIAN_POINT ( 'NONE', ( -1.777709254452038100, -2.659722563033221300, -10.48677662737594200 ) ) ; #245 = FACE_OUTER_BOUND ( 'NONE', #4576, .T. ) ; #246 = CARTESIAN_POINT ( 'NONE', ( 4.499999999999950300, -2.599999999999050200, -9.750000000000000000 ) ) ; #247 = CARTESIAN_POINT ( 'NONE', ( -2.650003848313224000, 2.300336605207435800E-009, -9.900000000000000400 ) ) ; #248 = ORIENTED_EDGE ( 'NONE', *, *, #3111, .T. ) ; #249 = EDGE_CURVE ( 'NONE', #2242, #1711, #5030, .T. ) ; #250 = VECTOR ( 'NONE', #4505, 1000.000000000000000 ) ; #251 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #252 = VERTEX_POINT ( 'NONE', #2200 ) ; #253 = CARTESIAN_POINT ( 'NONE', ( -4.000000000000000000, 4.299999999999912800, -0.4999999999999988300 ) ) ; #254 = EDGE_CURVE ( 'NONE', #377, #3705, #2729, .T. ) ; #255 = CARTESIAN_POINT ( 'NONE', ( -1.575000000000000000, 0.0000000000000000000, -9.900000000000000400 ) ) ; #256 = ORIENTED_EDGE ( 'NONE', *, *, #6219, .T. ) ; #257 = ADVANCED_FACE ( 'NONE', ( #3966 ), #2217, .T. ) ; #258 = AXIS2_PLACEMENT_3D ( 'NONE', #6229, #4595, #3578 ) ; #259 = AXIS2_PLACEMENT_3D ( 'NONE', #6192, #936, #3570 ) ; #260 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; #261 = VERTEX_POINT ( 'NONE', #4768 ) ; #262 = CARTESIAN_POINT ( 'NONE', ( -3.199999999999980200, -2.150000000000039900, -11.80000000000000100 ) ) ; #263 = EDGE_CURVE ( 'NONE', #4473, #436, #1342, .T. ) ; #264 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #265 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; #266 = ORIENTED_EDGE ( 'NONE', *, *, #1721, .T. ) ; #267 = VECTOR ( 'NONE', #3627, 1000.000000000000000 ) ; #268 = ORIENTED_EDGE ( 'NONE', *, *, #5100, .T. ) ; #269 = VECTOR ( 'NONE', #4281, 1000.000000000000000 ) ; #270 = ORIENTED_EDGE ( 'NONE', *, *, #3229, .T. ) ; #271 = CARTESIAN_POINT ( 'NONE', ( -0.3530131966829462300, -2.686225454806093500, -10.23461845595777400 ) ) ; #272 = CARTESIAN_POINT ( 'NONE', ( 2.299999999999859900, -2.000000000000110100, -11.80000000000000100 ) ) ; #273 =( BOUNDED_SURFACE ( ) B_SPLINE_SURFACE ( 3, 3, ( ( #609, #155, #4782, #2711, #4290, #3812, #2737 ), ( #6413, #1741, #4878, #3253, #3311, #1149, #5358 ), ( #5416, #6431, #130, #3783, #5945, #2795, #6484 ), ( #3718, #585, #4248, #1649, #5315, #1315, #1834 ) ), .UNSPECIFIED., .F., .F., .F. ) B_SPLINE_SURFACE_WITH_KNOTS ( ( 4, 4 ), ( 4, 3, 4 ), ( 0.0000000000000000000, 1.000000000000000000 ), ( 0.0000000000000000000, 0.5000000000000000000, 1.000000000000000000 ), .UNSPECIFIED. ) GEOMETRIC_REPRESENTATION_ITEM ( ) RATIONAL_B_SPLINE_SURFACE ( ( ( 1.000000000000000000, 0.8002735016169683100, 0.8002735016169683100, 1.000000000000000000, 0.8002735016169683100, 0.8002735016169683100, 1.000000000000000000), ( 0.9956918674672445800, 0.7968258173095501600, 0.7968258173095501600, 0.9956918674672445800, 0.7968258173095501600, 0.7968258173095501600, 0.9956918674672445800), ( 0.9956918674672445800, 0.7968258173095501600, 0.7968258173095501600, 0.9956918674672445800, 0.7968258173095501600, 0.7968258173095501600, 0.9956918674672445800), ( 1.000000000000000000, 0.8002735016169683100, 0.8002735016169683100, 1.000000000000000000, 0.8002735016169683100, 0.8002735016169683100, 1.000000000000000000) ) ) REPRESENTATION_ITEM ( '' ) SURFACE ( ) ); #274 = AXIS2_PLACEMENT_3D ( 'NONE', #2636, #21, #3682 ) ; #275 = ORIENTED_EDGE ( 'NONE', *, *, #6074, .F. ) ; #276 = CARTESIAN_POINT ( 'NONE', ( -2.989999999999950000, -2.559999999999050100, -2.779157999888000100 ) ) ; #277 = CARTESIAN_POINT ( 'NONE', ( -0.4769906117180109900, -3.044195530146629500, -10.58188272637718800 ) ) ; #278 = CYLINDRICAL_SURFACE ( 'NONE', #1744, 2.299999999999999800 ) ; #279 = ORIENTED_EDGE ( 'NONE', *, *, #4735, .F. ) ; #280 = PLANE ( 'NONE', #750 ) ; #281 = LINE ( 'NONE', #6510, #6538 ) ; #282 = CARTESIAN_POINT ( 'NONE', ( 1.767263979401266600, -2.812972883729163400, -10.94205167027822200 ) ) ; #283 = ORIENTED_EDGE ( 'NONE', *, *, #2148, .T. ) ; #284 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; #285 = LINE ( 'NONE', #2112, #449 ) ; #286 = VERTEX_POINT ( 'NONE', #6463 ) ; #287 = EDGE_LOOP ( 'NONE', ( #4360, #1699, #671, #2933, #701, #6459 ) ) ; #288 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #289 = VECTOR ( 'NONE', #4612, 1000.000000000000000 ) ; #290 = ORIENTED_EDGE ( 'NONE', *, *, #1491, .T. ) ; #291 = ORIENTED_EDGE ( 'NONE', *, *, #160, .T. ) ; #292 = CARTESIAN_POINT ( 'NONE', ( -3.199999999999980600, -2.150000000000039900, -9.750000000000000000 ) ) ; #293 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.8660254037844553600, 0.4999999999999711300 ) ) ; #294 = CIRCLE ( 'NONE', #4432, 0.5000000000000004400 ) ; #295 = EDGE_CURVE ( 'NONE', #3306, #2405, #1165, .T. ) ; #296 = ORIENTED_EDGE ( 'NONE', *, *, #2666, .T. ) ; #297 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; #298 = CARTESIAN_POINT ( 'NONE', ( 2.585478604708581600, -0.5833863010095383700, -9.900000000000000400 ) ) ; #299 = VECTOR ( 'NONE', #159, 1000.000000000000000 ) ; #300 = ORIENTED_EDGE ( 'NONE', *, *, #5436, .F. ) ; #301 = CARTESIAN_POINT ( 'NONE', ( 0.3146152057864107200, -5.215627809397507700, -6.116796583962122100 ) ) ; #302 = EDGE_CURVE ( 'NONE', #4196, #6073, #3060, .T. ) ; #303 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; #304 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; #305 = AXIS2_PLACEMENT_3D ( 'NONE', #935, #3007, #2003 ) ; #306 = LINE ( 'NONE', #1290, #5730 ) ; #307 = EDGE_LOOP ( 'NONE', ( #2650, #2564, #6773 ) ) ; #308 = EDGE_CURVE ( 'NONE', #6361, #6631, #5196, .T. ) ; #309 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; #310 = CARTESIAN_POINT ( 'NONE', ( -3.199999999999980200, -2.599999999999050200, -11.79999999999999900 ) ) ; #311 = AXIS2_PLACEMENT_3D ( 'NONE', #845, #1378, #6137 ) ; #312 = CARTESIAN_POINT ( 'NONE', ( 1.249999999999969800, -9.112132034355555600, -8.387867965643975400 ) ) ; #313 = CARTESIAN_POINT ( 'NONE', ( -2.247557109910129900, -2.199999999999130200, -2.779157999888000100 ) ) ; #314 = CIRCLE ( 'NONE', #6315, 1.575000000000000000 ) ; #315 = EDGE_LOOP ( 'NONE', ( #3026, #3877 ) ) ; #316 = CARTESIAN_POINT ( 'NONE', ( -3.199999999999980200, -1.100000000000100000, -11.80000000000000100 ) ) ; #317 = CARTESIAN_POINT ( 'NONE', ( 3.150000002491314200, -0.5010738569285948500, -9.399999999999998600 ) ) ; #318 = ADVANCED_FACE ( 'NONE', ( #6620 ), #6438, .T. ) ; #319 = VECTOR ( 'NONE', #5845, 1000.000000000000000 ) ; #320 = CARTESIAN_POINT ( 'NONE', ( -1.199999999999930000, -3.100000000000049800, -13.77999999999999900 ) ) ; #321 = CIRCLE ( 'NONE', #6752, 0.2999999999999999300 ) ; #322 = CARTESIAN_POINT ( 'NONE', ( 3.900000000000130000, 0.04999999999993900300, -14.40000000000000200 ) ) ; #323 = ORIENTED_EDGE ( 'NONE', *, *, #5178, .F. ) ; #324 = CARTESIAN_POINT ( 'NONE', ( -1.550000000000830000, -6.350000000000021000, -13.44999999999999900 ) ) ; #325 = CIRCLE ( 'NONE', #6078, 0.6299999999999998900 ) ; #326 = EDGE_LOOP ( 'NONE', ( #549, #6430, #3393, #1429 ) ) ; #327 = EDGE_CURVE ( 'NONE', #3669, #2066, #2413, .T. ) ; #328 = LINE ( 'NONE', #316, #5426 ) ; #329 = CARTESIAN_POINT ( 'NONE', ( 1.249999999999969800, -9.699999999999819900, -7.800000000000070000 ) ) ; #330 = VERTEX_POINT ( 'NONE', #1181 ) ; #331 = ADVANCED_FACE ( 'NONE', ( #3622 ), #2774, .F. ) ; #332 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #333 = CARTESIAN_POINT ( 'NONE', ( 4.149999999999940000, 0.0000000000000000000, -11.80000000000000100 ) ) ; #334 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, ( #2739, #570, #1629, #3190 ), .UNSPECIFIED., .F., .F., ( 4, 4 ), ( 0.0000000000000000000, 1.000000000000000000 ), .UNSPECIFIED. ) ; #335 = CARTESIAN_POINT ( 'NONE', ( -0.9166666666657762300, -4.208264431786403700, -1.955559297685314700 ) ) ; #336 = CARTESIAN_POINT ( 'NONE', ( -4.500000000000061300, -2.150000000000039900, -9.750000000000000000 ) ) ; #337 = EDGE_CURVE ( 'NONE', #173, #1550, #2238, .T. ) ; #338 = ORIENTED_EDGE ( 'NONE', *, *, #346, .T. ) ; #339 = PLANE ( 'NONE', #2720 ) ; #340 = EDGE_CURVE ( 'NONE', #1367, #2747, #4866, .T. ) ; #341 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; #342 = CARTESIAN_POINT ( 'NONE', ( 1.110223024625159900E-013, 0.04999999999993900300, -11.80000000000000100 ) ) ; #343 = CARTESIAN_POINT ( 'NONE', ( -4.500000000000000900, 4.092893218813363100, -0.3284271247461891300 ) ) ; #344 = EDGE_LOOP ( 'NONE', ( #629, #5563, #96 ) ) ; #345 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; #346 = EDGE_CURVE ( 'NONE', #6635, #2682, #6200, .T. ) ; #347 = CARTESIAN_POINT ( 'NONE', ( 4.292893218813453000, 4.092893218813363100, 8.673617379884033500E-016 ) ) ; #348 = AXIS2_PLACEMENT_3D ( 'NONE', #633, #4835, #1701 ) ; #349 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; #350 = AXIS2_PLACEMENT_3D ( 'NONE', #1462, #5084, #884 ) ; #351 = ORIENTED_EDGE ( 'NONE', *, *, #5479, .F. ) ; #352 = FACE_OUTER_BOUND ( 'NONE', #2178, .T. ) ; #353 = ORIENTED_EDGE ( 'NONE', *, *, #5568, .F. ) ; #354 = AXIS2_PLACEMENT_3D ( 'NONE', #5594, #1901, #815 ) ; #355 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000090800, -5.700000000000730300, -7.599999999999934800 ) ) ; #356 = CARTESIAN_POINT ( 'NONE', ( 1.200000000000090100, -1.962141687034070000, -13.77999999999999900 ) ) ; #357 = CYLINDRICAL_SURFACE ( 'NONE', #3493, 0.7999999999999999300 ) ; #358 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; #359 = ORIENTED_EDGE ( 'NONE', *, *, #2675, .F. ) ; #360 = LINE ( 'NONE', #5484, #6291 ) ; #361 = ORIENTED_EDGE ( 'NONE', *, *, #3195, .F. ) ; #362 = CARTESIAN_POINT ( 'NONE', ( -9.662512969806920500, -9.542487113058909300, -13.42000000000000000 ) ) ; #363 = CARTESIAN_POINT ( 'NONE', ( 2.804496749660245800, -1.434328407703449500, -9.692893218813468400 ) ) ; #364 = AXIS2_PLACEMENT_3D ( 'NONE', #4180, #1036, #5252 ) ; #365 = EDGE_LOOP ( 'NONE', ( #381, #2559, #1545, #2698 ) ) ; #366 = VECTOR ( 'NONE', #2932, 1000.000000000000000 ) ; #367 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; #368 = ORIENTED_EDGE ( 'NONE', *, *, #2598, .F. ) ; #369 = ORIENTED_EDGE ( 'NONE', *, *, #996, .F. ) ; #370 = ADVANCED_FACE ( 'NONE', ( #4942, #3381 ), #6394, .T. ) ; #371 = CARTESIAN_POINT ( 'NONE', ( -4.500000000000000900, 3.799999999999910100, -0.4999999999999988900 ) ) ; #372 = EDGE_LOOP ( 'NONE', ( #3947, #6399, #2141, #150, #3125, #2571, #2603, #4277, #871, #3058 ) ) ; #373 = CARTESIAN_POINT ( 'NONE', ( 4.000000000000000000, -6.500000000000060400, -11.80000000000000100 ) ) ; #374 = VECTOR ( 'NONE', #6633, 1000.000000000000000 ) ; #375 = ORIENTED_EDGE ( 'NONE', *, *, #2635, .F. ) ; #376 = CARTESIAN_POINT ( 'NONE', ( 4.000000000000000000, 4.092893218813362200, 8.673617379884035500E-016 ) ) ; #377 = VERTEX_POINT ( 'NONE', #3727 ) ; #378 = EDGE_LOOP ( 'NONE', ( #2764, #11, #2022, #1622 ) ) ; #379 = VECTOR ( 'NONE', #4640, 1000.000000000000000 ) ; #380 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; #381 = ORIENTED_EDGE ( 'NONE', *, *, #1979, .T. ) ; #382 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; #383 = VECTOR ( 'NONE', #4890, 1000.000000000000000 ) ; #384 = EDGE_CURVE ( 'NONE', #3964, #2817, #4272, .T. ) ; #385 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; #386 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.9945218953682842800, 0.1045284632675500500 ) ) ; #387 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, ( #6, #5275, #4156, #1015, #4680, #4193 ), .UNSPECIFIED., .F., .F., ( 4, 2, 4 ), ( 0.0000000000000000000, 0.0004107965738125487500, 0.0008215931476250975000 ), .UNSPECIFIED. ) ; #388 = FACE_OUTER_BOUND ( 'NONE', #1523, .T. ) ; #389 = VERTEX_POINT ( 'NONE', #3789 ) ; #390 = CARTESIAN_POINT ( 'NONE', ( -3.199999999999980200, -5.500000000000009800, -0.9999999999999988900 ) ) ; #391 = CARTESIAN_POINT ( 'NONE', ( 1.609543877736152400, 2.106867234199749200, -9.899999999999996800 ) ) ; #392 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #393 = EDGE_CURVE ( 'NONE', #377, #120, #2152, .T. ) ; #394 = CARTESIAN_POINT ( 'NONE', ( -4.500000000000060400, -2.150000000000039900, -11.80000000000000100 ) ) ; #395 = CARTESIAN_POINT ( 'NONE', ( 1.549203392581526500, -2.653996782865273700, -11.22647805903719800 ) ) ; #396 = VECTOR ( 'NONE', #3206, 1000.000000000000000 ) ; #397 = CARTESIAN_POINT ( 'NONE', ( -1.479999999999979600, -9.539807621135009800, -13.43000000000000000 ) ) ; #398 = ORIENTED_EDGE ( 'NONE', *, *, #4279, .T. ) ; #399 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #400 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #401 = AXIS2_PLACEMENT_3D ( 'NONE', #1843, #2339, #5515 ) ; #402 = FACE_OUTER_BOUND ( 'NONE', #5138, .T. ) ; #403 = LINE ( 'NONE', #80, #724 ) ; #404 = VERTEX_POINT ( 'NONE', #1136 ) ; #405 = EDGE_CURVE ( 'NONE', #6151, #592, #3541, .T. ) ; #406 = CARTESIAN_POINT ( 'NONE', ( 4.000000000000000000, -6.000000000000060400, -0.4999999999999990600 ) ) ; #407 = CARTESIAN_POINT ( 'NONE', ( -2.247557109910108200, -2.199999999999129800, -11.80000000000000100 ) ) ; #408 = AXIS2_PLACEMENT_3D ( 'NONE', #1677, #1728, #820 ) ; #409 = ORIENTED_EDGE ( 'NONE', *, *, #3805, .F. ) ; #410 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; #411 = CIRCLE ( 'NONE', #1189, 0.5000000000000000000 ) ; #412 = CARTESIAN_POINT ( 'NONE', ( 2.846654198151222100, -1.199999999999968000, -9.672767440012249200 ) ) ; #413 = VECTOR ( 'NONE', #4583, 1000.000000000000000 ) ; #414 = AXIS2_PLACEMENT_3D ( 'NONE', #706, #5857, #5948 ) ; #415 = ADVANCED_FACE ( 'NONE', ( #923 ), #3384, .T. ) ; #416 = CARTESIAN_POINT ( 'NONE', ( 2.279011654894470300, 1.362787910974103700, -9.899999999999998600 ) ) ; #417 = VECTOR ( 'NONE', #1221, 1000.000000000000000 ) ; #418 = EDGE_LOOP ( 'NONE', ( #2446, #1132, #4539, #3536 ) ) ; #419 = CARTESIAN_POINT ( 'NONE', ( -2.749999999999090100, -4.689212032310580400, -1.500072740962073100 ) ) ; #420 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; #421 = LINE ( 'NONE', #4075, #3441 ) ; #422 = CARTESIAN_POINT ( 'NONE', ( -1.777709254451546300, -2.659722563033053400, -10.48677662737589800 ) ) ; #423 = CARTESIAN_POINT ( 'NONE', ( 2.499999999999949800, 2.400000000000960000, -2.700000000000000200 ) ) ; #424 = ORIENTED_EDGE ( 'NONE', *, *, #4704, .T. ) ; #425 = CARTESIAN_POINT ( 'NONE', ( 0.9999538012085268400, -5.299999999999280400, -5.230873098269988500 ) ) ; #426 = VERTEX_POINT ( 'NONE', #5511 ) ; #427 = CARTESIAN_POINT ( 'NONE', ( -1.990066374245025500, -2.070595379722730600, -5.437629668569861100 ) ) ; #428 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; #429 = EDGE_CURVE ( 'NONE', #5939, #2609, #5870, .T. ) ; #430 = ORIENTED_EDGE ( 'NONE', *, *, #1937, .T. ) ; #431 = CARTESIAN_POINT ( 'NONE', ( 1.050000000000111100, -5.551115123125780200E-014, -13.40000000000000000 ) ) ; #432 = CARTESIAN_POINT ( 'NONE', ( 0.1794992552197631500, 2.650027624110532700, -9.900000000000000400 ) ) ; #433 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #434 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; #435 = CIRCLE ( 'NONE', #4570, 2.299999999999999800 ) ; #436 = VERTEX_POINT ( 'NONE', #1247 ) ; #437 = LINE ( 'NONE', #2395, #4944 ) ; #438 = EDGE_LOOP ( 'NONE', ( #3537, #5703, #3227, #4232 ) ) ; #439 = EDGE_CURVE ( 'NONE', #4974, #4816, #6360, .T. ) ; #440 = EDGE_CURVE ( 'NONE', #1167, #5348, #2890, .T. ) ; #441 = ADVANCED_FACE ( 'NONE', ( #590 ), #4884, .T. ) ; #442 = AXIS2_PLACEMENT_3D ( 'NONE', #3665, #1075, #662 ) ; #443 = LINE ( 'NONE', #1671, #5868 ) ; #444 = ORIENTED_EDGE ( 'NONE', *, *, #254, .F. ) ; #445 = LINE ( 'NONE', #4763, #3882 ) ; #446 = CARTESIAN_POINT ( 'NONE', ( 4.500000000000060400, -10.19999999999910000, -11.80000000000000100 ) ) ; #447 = CARTESIAN_POINT ( 'NONE', ( 2.750000000000909500, -4.700000144167390200, -1.699608054491449400 ) ) ; #448 = CARTESIAN_POINT ( 'NONE', ( -1.991302127074734000, -2.019538188533934500, -5.332025348941246400 ) ) ; #449 = VECTOR ( 'NONE', #6636, 1000.000000000000000 ) ; #450 = APPROVAL_STATUS ( 'not_yet_approved' ) ; #451 = ORIENTED_EDGE ( 'NONE', *, *, #4335, .F. ) ; #452 = CARTESIAN_POINT ( 'NONE', ( -4.500000000000000000, -6.000000000000059500, -0.2071067811865461800 ) ) ; #453 = FACE_BOUND ( 'NONE', #6584, .T. ) ; #454 = ORIENTED_EDGE ( 'NONE', *, *, #2134, .F. ) ; #455 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -10.15000000000000000 ) ) ; #456 = CARTESIAN_POINT ( 'NONE', ( -3.199999999999980200, -5.500000000000009800, -11.80000000000000100 ) ) ; #457 = ORIENTED_EDGE ( 'NONE', *, *, #1364, .F. ) ; #458 = CARTESIAN_POINT ( 'NONE', ( 18.18468237128200100, -9.699999999999819900, -7.800000000000070000 ) ) ; #459 = VECTOR ( 'NONE', #1573, 1000.000000000000000 ) ; #460 = CLOSED_SHELL ( 'NONE', ( #2779, #2756, #6688, #4313, #5265, #3793, #3679, #2959, #5989, #3300, #4233, #6517, #5258, #6410, #1634, #3205, #3994, #1147, #4385, #3382 ) ) ; #461 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000090600, -8.829289321880175100, -8.246446609406152800 ) ) ; #462 = VECTOR ( 'NONE', #736, 1000.000000000000000 ) ; #463 = ORIENTED_EDGE ( 'NONE', *, *, #2279, .T. ) ; #464 = EDGE_CURVE ( 'NONE', #1202, #4858, #4616, .T. ) ; #465 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000090800, -8.687867965643739900, -8.387867965643890100 ) ) ; #466 = LINE ( 'NONE', #2761, #3018 ) ; #467 = ORIENTED_EDGE ( 'NONE', *, *, #5137, .F. ) ; #468 = CARTESIAN_POINT ( 'NONE', ( 4.149999999999940000, 0.0000000000000000000, -3.499999999999999600 ) ) ; #469 = EDGE_CURVE ( 'NONE', #3778, #404, #4792, .T. ) ; #470 = CARTESIAN_POINT ( 'NONE', ( 1.200000000000089900, 2.300000000000019800, -13.77999999999999900 ) ) ; #471 = ORIENTED_EDGE ( 'NONE', *, *, #1080, .T. ) ; #472 = LINE ( 'NONE', #2975, #3030 ) ; #473 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.5446390350179318700, -0.8386705679435376700 ) ) ; #474 = LINE ( 'NONE', #4371, #2533 ) ; #475 = VERTEX_POINT ( 'NONE', #1776 ) ; #476 = PLANE ( 'NONE', #2568 ) ; #477 = EDGE_CURVE ( 'NONE', #4656, #4650, #2658, .T. ) ; #478 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; #479 = CARTESIAN_POINT ( 'NONE', ( 1.644264407092791600, -2.781668093413520300, -11.23989685449769700 ) ) ; #480 = VECTOR ( 'NONE', #3148, 1000.000000000000000 ) ; #481 = VECTOR ( 'NONE', #5600, 1000.000000000000000 ) ; #482 = ORIENTED_EDGE ( 'NONE', *, *, #6432, .T. ) ; #483 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000060000, -6.350000000000021000, -7.950000000000000200 ) ) ; #484 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; #485 = AXIS2_PLACEMENT_3D ( 'NONE', #2292, #4883, #4964 ) ; #486 = LINE ( 'NONE', #4201, #6005 ) ; #487 = EDGE_CURVE ( 'NONE', #4982, #3295, #5283, .T. ) ; #488 = ORIENTED_EDGE ( 'NONE', *, *, #4814, .T. ) ; #489 = AXIS2_PLACEMENT_3D ( 'NONE', #2484, #5613, #5103 ) ; #490 = CARTESIAN_POINT ( 'NONE', ( 2.750000000000910400, -4.507720758391489100, -1.723128277741430500 ) ) ; #491 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; #492 = APPROVAL_PERSON_ORGANIZATION ( #2626, #5766, #2491 ) ; #493 = AXIS2_PLACEMENT_3D ( 'NONE', #1749, #3849, #6567 ) ; #494 = EDGE_LOOP ( 'NONE', ( #4711, #4648, #5852, #594 ) ) ; #495 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.8660254037844553600, 0.4999999999999711300 ) ) ; #496 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #497 = CARTESIAN_POINT ( 'NONE', ( 0.7620405893244895900, -11.05562143337198900, -7.599999999999869100 ) ) ; #498 = EDGE_LOOP ( 'NONE', ( #3399, #2046 ) ) ; #499 = EDGE_CURVE ( 'NONE', #2747, #4329, #3204, .T. ) ; #500 = EDGE_LOOP ( 'NONE', ( #2563, #3086, #4747, #1794, #4627, #6220, #4880, #3866, #3120 ) ) ; #501 = ORIENTED_EDGE ( 'NONE', *, *, #1618, .F. ) ; #502 = CARTESIAN_POINT ( 'NONE', ( 3.600000000000160000, -6.350000000000021000, -14.40000000000000200 ) ) ; #503 = CARTESIAN_POINT ( 'NONE', ( 4.292893218813453000, -6.292893218813513400, 7.750193272069042900E-016 ) ) ; #504 = ORIENTED_EDGE ( 'NONE', *, *, #1706, .T. ) ; #505 = LINE ( 'NONE', #2118, #6362 ) ; #506 = EDGE_LOOP ( 'NONE', ( #1557, #5072 ) ) ; #507 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; #508 = ORIENTED_EDGE ( 'NONE', *, *, #2456, .T. ) ; #509 = EDGE_CURVE ( 'NONE', #627, #3275, #1096, .T. ) ; #510 = ADVANCED_FACE ( 'NONE', ( #600 ), #4125, .T. ) ; #511 = ORIENTED_EDGE ( 'NONE', *, *, #487, .T. ) ; #512 = ORIENTED_EDGE ( 'NONE', *, *, #5083, .T. ) ; #513 = LINE ( 'NONE', #1524, #25 ) ; #514 = CARTESIAN_POINT ( 'NONE', ( 8.847089727481720200E-013, -5.500000000000009800, -7.400000000000000400 ) ) ; #515 = ORIENTED_EDGE ( 'NONE', *, *, #601, .F. ) ; #516 = FACE_OUTER_BOUND ( 'NONE', #6334, .T. ) ; #517 = EDGE_LOOP ( 'NONE', ( #6455, #6835, #1665, #108, #3925, #3450, #4525, #1802, #1972, #773, #5744, #16, #4928, #751, #4321, #6648, #5849 ) ) ; #518 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #519 = CARTESIAN_POINT ( 'NONE', ( -4.500000000000060400, 0.0000000000000000000, -3.500000000000000000 ) ) ; #520 = CARTESIAN_POINT ( 'NONE', ( -0.5965246171915671300, -11.15011932214561000, -7.599999999999870000 ) ) ; #521 = EDGE_LOOP ( 'NONE', ( #2887, #5010 ) ) ; #522 = AXIS2_PLACEMENT_3D ( 'NONE', #3291, #5424, #2273 ) ; #523 = EDGE_LOOP ( 'NONE', ( #2429, #6108, #6396, #5796 ) ) ; #524 = CIRCLE ( 'NONE', #3819, 0.5000000000000004400 ) ; #525 = EDGE_CURVE ( 'NONE', #5171, #5733, #2496, .T. ) ; #526 = ORIENTED_EDGE ( 'NONE', *, *, #1260, .T. ) ; #527 = EDGE_LOOP ( 'NONE', ( #3175, #6619, #3162, #5337 ) ) ; #528 = EDGE_CURVE ( 'NONE', #3415, #3971, #435, .T. ) ; #529 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.8660254037844039600, 0.5000000000000600600 ) ) ; #530 = CARTESIAN_POINT ( 'NONE', ( 8.847089727481720200E-013, -5.500000000000009800, -7.400000000000000400 ) ) ; #531 = AXIS2_PLACEMENT_3D ( 'NONE', #6143, #2981, #899 ) ; #532 = ORIENTED_EDGE ( 'NONE', *, *, #1842, .F. ) ; #533 = ORIENTED_EDGE ( 'NONE', *, *, #2549, .T. ) ; #534 = VECTOR ( 'NONE', #779, 1000.000000000000000 ) ; #535 = EDGE_LOOP ( 'NONE', ( #1158, #4345, #5489, #5272, #501, #2027, #738, #1800 ) ) ; #536 = PLANE ( 'NONE', #4927 ) ; #537 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; #538 = ORIENTED_EDGE ( 'NONE', *, *, #1080, .F. ) ; #539 = CARTESIAN_POINT ( 'NONE', ( 2.890671664372520300, -2.430323138703160100, -11.80000000000000400 ) ) ; #540 = VECTOR ( 'NONE', #6450, 1000.000000000000000 ) ; #541 = EDGE_LOOP ( 'NONE', ( #6290, #4794, #3471, #4975 ) ) ; #542 = VECTOR ( 'NONE', #5406, 1000.000000000000000 ) ; #543 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000091300, -9.647640122439886700, -7.600000000000069800 ) ) ; #544 = VECTOR ( 'NONE', #4937, 1000.000000000000000 ) ; #545 = EDGE_CURVE ( 'NONE', #161, #1905, #1837, .T. ) ; #546 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; #547 = CARTESIAN_POINT ( 'NONE', ( 1.250000000000133200, -10.04999999999840000, -7.599999999999870900 ) ) ; #548 = LINE ( 'NONE', #1642, #4230 ) ; #549 = ORIENTED_EDGE ( 'NONE', *, *, #6552, .F. ) ; #550 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; #551 = ORIENTED_EDGE ( 'NONE', *, *, #2877, .T. ) ; #552 = CARTESIAN_POINT ( 'NONE', ( -2.749999999999090500, -4.111624435740881500, -1.748839756839469400 ) ) ; #553 = CARTESIAN_POINT ( 'NONE', ( 1.110223024625159900E-013, -5.551115123125780200E-014, -13.44999999999999900 ) ) ; #554 = ADVANCED_FACE ( 'NONE', ( #1256 ), #6762, .T. ) ; #555 = CARTESIAN_POINT ( 'NONE', ( 4.499999999999950300, -2.599999999999050200, -11.80000000000000100 ) ) ; #556 = CIRCLE ( 'NONE', #4010, 0.5000000000000000000 ) ; #557 = ORIENTED_EDGE ( 'NONE', *, *, #2291, .T. ) ; #558 = CARTESIAN_POINT ( 'NONE', ( -4.000000000000000000, -6.000000000000060400, -11.80000000000000100 ) ) ; #559 = EDGE_CURVE ( 'NONE', #2742, #5701, #6707, .T. ) ; #560 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #561 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; #562 = LINE ( 'NONE', #2127, #480 ) ; #563 = ADVANCED_FACE ( 'NONE', ( #4062 ), #1473, .T. ) ; #564 = VECTOR ( 'NONE', #1795, 1000.000000000000000 ) ; #565 = ORIENTED_EDGE ( 'NONE', *, *, #6206, .T. ) ; #566 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #567 = LINE ( 'NONE', #5015, #241 ) ; #568 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #569 = EDGE_CURVE ( 'NONE', #1327, #5185, #1508, .T. ) ; #570 = CARTESIAN_POINT ( 'NONE', ( 1.249999999999970000, -8.155228474982491700, -7.599999999999870900 ) ) ; #571 = CARTESIAN_POINT ( 'NONE', ( -0.5389796670266516800, -11.17810262512373100, -7.599999999999870900 ) ) ; #572 = AXIS2_PLACEMENT_3D ( 'NONE', #4876, #4919, #5434 ) ; #573 = CARTESIAN_POINT ( 'NONE', ( 1.110223024625159900E-013, -5.551115123125780200E-014, -11.80000000000000100 ) ) ; #574 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #575 = LINE ( 'NONE', #2787, #417 ) ; #576 = CARTESIAN_POINT ( 'NONE', ( 1.550000000000050200, -6.350000000000020100, -13.40000000000000000 ) ) ; #577 = EDGE_LOOP ( 'NONE', ( #9, #6216, #3346, #6791, #603, #2047, #1683 ) ) ; #578 = CARTESIAN_POINT ( 'NONE', ( -2.040245204586718300, -3.183566683238796500, -6.248448798714122200 ) ) ; #579 = CARTESIAN_POINT ( 'NONE', ( 18.18468237128200100, -8.099999999999450800, -7.599999999999870000 ) ) ; #580 = CARTESIAN_POINT ( 'NONE', ( 1.249999999999969800, -5.700000000000730300, -7.599999999999934800 ) ) ; #581 = VERTEX_POINT ( 'NONE', #5260 ) ; #582 = CARTESIAN_POINT ( 'NONE', ( 4.000000000000000000, -6.292893218813514300, 7.929538643524974400E-016 ) ) ; #583 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.7071067811864111300, -0.7071067811866840200 ) ) ; #584 = ORIENTED_EDGE ( 'NONE', *, *, #5345, .T. ) ; #585 = CARTESIAN_POINT ( 'NONE', ( -0.1140123099544830500, -2.761658514347422600, -10.00723521517759300 ) ) ; #586 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; #587 = ADVANCED_FACE ( 'NONE', ( #4445 ), #476, .F. ) ; #588 = ORIENTED_EDGE ( 'NONE', *, *, #1316, .T. ) ; #589 = EDGE_CURVE ( 'NONE', #4025, #6539, #3394, .T. ) ; #590 = FACE_OUTER_BOUND ( 'NONE', #5126, .T. ) ; #591 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000060000, -5.350000000000021000, -7.950000000000000200 ) ) ; #592 = VERTEX_POINT ( 'NONE', #2585 ) ; #593 = VECTOR ( 'NONE', #2161, 1000.000000000000100 ) ; #594 = ORIENTED_EDGE ( 'NONE', *, *, #3407, .F. ) ; #595 = CARTESIAN_POINT ( 'NONE', ( -2.596963476719188700, -0.5303144567097648500, -9.900000000000000400 ) ) ; #596 = VERTEX_POINT ( 'NONE', #6364 ) ; #597 = CARTESIAN_POINT ( 'NONE', ( 1.279896855207897300, -2.582763714275671400, -11.21899116183752400 ) ) ; #598 = FACE_OUTER_BOUND ( 'NONE', #6581, .T. ) ; #599 = ORIENTED_EDGE ( 'NONE', *, *, #3339, .F. ) ; #600 = FACE_OUTER_BOUND ( 'NONE', #4187, .T. ) ; #601 = EDGE_CURVE ( 'NONE', #4848, #3802, #3714, .T. ) ; #602 = ORIENTED_EDGE ( 'NONE', *, *, #1797, .T. ) ; #603 = ORIENTED_EDGE ( 'NONE', *, *, #5719, .T. ) ; #604 = ADVANCED_FACE ( 'NONE', ( #97 ), #2125, .F. ) ; #605 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #606 = AXIS2_PLACEMENT_3D ( 'NONE', #3688, #2705, #561 ) ; #607 = ORIENTED_EDGE ( 'NONE', *, *, #5437, .T. ) ; #608 = CYLINDRICAL_SURFACE ( 'NONE', #3466, 1.050000000000000000 ) ; #609 = CARTESIAN_POINT ( 'NONE', ( -3.483180179936815700E-015, -2.699783421336158000, -10.03070813642794000 ) ) ; #610 = ORIENTED_EDGE ( 'NONE', *, *, #870, .T. ) ; #611 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; #612 = CARTESIAN_POINT ( 'NONE', ( 4.499999999999950300, 3.558925565098960000, -2.700000000000000200 ) ) ; #613 = EDGE_CURVE ( 'NONE', #6775, #3483, #1663, .T. ) ; #614 = VECTOR ( 'NONE', #4952, 1000.000000000000000 ) ; #615 = EDGE_LOOP ( 'NONE', ( #5468, #1824, #2387, #1180, #2318, #3664, #4569, #1739, #3044 ) ) ; #616 = AXIS2_PLACEMENT_3D ( 'NONE', #2777, #1746, #2271 ) ; #617 = AXIS2_PLACEMENT_3D ( 'NONE', #1796, #3914, #3934 ) ; #618 = CYLINDRICAL_SURFACE ( 'NONE', #1264, 1.000000000000000900 ) ; #619 = CLOSED_SHELL ( 'NONE', ( #5400, #1324, #4198, #744, #1587, #3239, #3222, #865, #441, #667, #4840, #3355, #3900, #3936, #5325, #2221, #1715, #4056, #5900, #5296, #2360, #5933, #3759, #4803, #695, #5159, #200, #2715, #6105, #2475, #3526, #636, #1825, #233, #4255, #2299, #415, #554, #6589, #5018, #4822, #510, #4758, #954, #4855, #68, #3837, #86, #5883, #4895, #2700, #6727, #4090, #740, #2320, #2504, #3276, #2166 ) ) ; #620 = CARTESIAN_POINT ( 'NONE', ( -2.749999999999090100, -5.299999999999460700, -5.600000000000860300 ) ) ; #621 = FACE_OUTER_BOUND ( 'NONE', #1116, .T. ) ; #622 = ORIENTED_EDGE ( 'NONE', *, *, #697, .F. ) ; #623 = ADVANCED_FACE ( 'NONE', ( #5352 ), #934, .T. ) ; #624 = CARTESIAN_POINT ( 'NONE', ( -2.739999999999950000, -2.559999999999050100, -9.800000000000000700 ) ) ; #625 = CARTESIAN_POINT ( 'NONE', ( 2.750000000000909500, -5.299999999999685400, -2.300000000000010000 ) ) ; #626 = VECTOR ( 'NONE', #4649, 1000.000000000000000 ) ; #627 = VERTEX_POINT ( 'NONE', #3675 ) ; #628 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; #629 = ORIENTED_EDGE ( 'NONE', *, *, #3101, .F. ) ; #630 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #631 = VECTOR ( 'NONE', #297, 1000.000000000000000 ) ; #632 = CIRCLE ( 'NONE', #5950, 1.000000000000000900 ) ; #633 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 1.249999999999970000, -10.15000000000000000 ) ) ; #634 = VERTEX_POINT ( 'NONE', #2058 ) ; #635 = CARTESIAN_POINT ( 'NONE', ( -3.232442890089791000, -2.199999999999099600, -2.779157999888000100 ) ) ; #636 = ADVANCED_FACE ( 'NONE', ( #4953 ), #2331, .F. ) ; #637 = CARTESIAN_POINT ( 'NONE', ( -1.550000000000830000, -2.514439197769060100, -13.40000000000000000 ) ) ; #638 = CIRCLE ( 'NONE', #5099, 0.5000000000000000000 ) ; #639 = FACE_OUTER_BOUND ( 'NONE', #2437, .T. ) ; #640 = ORIENTED_EDGE ( 'NONE', *, *, #3613, .T. ) ; #641 = CARTESIAN_POINT ( 'NONE', ( 3.200000000000979800, -2.150000000000039900, -11.80000000000000100 ) ) ; #642 = EDGE_CURVE ( 'NONE', #5373, #1336, #3552, .T. ) ; #643 = CARTESIAN_POINT ( 'NONE', ( 4.000000000000000000, 3.799999999999910100, 8.673617379884035500E-016 ) ) ; #644 = CARTESIAN_POINT ( 'NONE', ( 1.766867103410036900, -2.647239928044499400, -10.60554096600779100 ) ) ; #645 = VERTEX_POINT ( 'NONE', #13 ) ; #646 = VECTOR ( 'NONE', #2098, 1000.000000000000000 ) ; #647 = EDGE_CURVE ( 'NONE', #2225, #6099, #6036, .T. ) ; #648 = ORIENTED_EDGE ( 'NONE', *, *, #1501, .F. ) ; #649 = AXIS2_PLACEMENT_3D ( 'NONE', #2105, #2652, #496 ) ; #650 = CARTESIAN_POINT ( 'NONE', ( 2.750000000000901100, -4.208418032298772500, -1.955662937369631900 ) ) ; #651 = CIRCLE ( 'NONE', #135, 1.050000000000000000 ) ; #652 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; #653 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; #654 = EDGE_CURVE ( 'NONE', #4528, #2476, #445, .T. ) ; #655 = CARTESIAN_POINT ( 'NONE', ( -1.499999999999830100, -6.350000000000021000, -13.44999999999999900 ) ) ; #656 = CARTESIAN_POINT ( 'NONE', ( 1.900000000000900100, -5.299999999999280400, -7.400000000000000400 ) ) ; #657 = VERTEX_POINT ( 'NONE', #3189 ) ; #658 = ADVANCED_FACE ( 'NONE', ( #1848 ), #4454, .F. ) ; #659 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000060000, -5.350000000000021000, -11.80000000000000100 ) ) ; #660 = CARTESIAN_POINT ( 'NONE', ( 2.660000000000029900, -2.289999999999110100, -2.779157999888000100 ) ) ; #661 = ORIENTED_EDGE ( 'NONE', *, *, #6081, .T. ) ; #662 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #663 = CARTESIAN_POINT ( 'NONE', ( -1.479999999999978400, -8.499999999999738900, -13.23381197846477500 ) ) ; #664 = CARTESIAN_POINT ( 'NONE', ( 2.750000000000909900, -2.926752996890752200, -3.928913857009459900 ) ) ; #665 = EDGE_CURVE ( 'NONE', #5939, #1459, #4628, .T. ) ; #666 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, ( #1396, #2492, #412, #6686, #6187, #928 ), .UNSPECIFIED., .F., .F., ( 4, 2, 4 ), ( 1.788112030672749000E-018, 0.0004108207348722075200, 0.0008216414697444132000 ), .UNSPECIFIED. ) ; #667 = ADVANCED_FACE ( 'NONE', ( #5697 ), #5387, .T. ) ; #668 = ORIENTED_EDGE ( 'NONE', *, *, #3257, .T. ) ; #669 = CARTESIAN_POINT ( 'NONE', ( -3.199999999999980200, -1.199999999999980000, -11.80000000000000100 ) ) ; #670 = LINE ( 'NONE', #5517, #1335 ) ; #671 = ORIENTED_EDGE ( 'NONE', *, *, #1854, .F. ) ; #672 = CARTESIAN_POINT ( 'NONE', ( 1.479999999999979600, -7.460192378863940400, -13.43000000000000000 ) ) ; #673 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; #674 = ORIENTED_EDGE ( 'NONE', *, *, #2939, .T. ) ; #675 = AXIS2_PLACEMENT_3D ( 'NONE', #4605, #1478, #5146 ) ; #676 = ORIENTED_EDGE ( 'NONE', *, *, #647, .F. ) ; #677 = ORIENTED_EDGE ( 'NONE', *, *, #212, .F. ) ; #678 = FACE_OUTER_BOUND ( 'NONE', #4461, .T. ) ; #679 = EDGE_LOOP ( 'NONE', ( #6504, #1302, #1417, #2731 ) ) ; #680 = VECTOR ( 'NONE', #6384, 1000.000000000000000 ) ; #681 = ORIENTED_EDGE ( 'NONE', *, *, #6521, .T. ) ; #682 = CARTESIAN_POINT ( 'NONE', ( -1.978139558449849600, 1.771581917537822700, -9.900000000000002100 ) ) ; #683 = EDGE_CURVE ( 'NONE', #475, #1425, #6623, .T. ) ; #684 = DIRECTION ( 'NONE', ( 0.08810188277373706700, 0.5425211891288382900, -0.8354093712653419800 ) ) ; #685 = ORIENTED_EDGE ( 'NONE', *, *, #3011, .T. ) ; #686 = VECTOR ( 'NONE', #2011, 1000.000000000000000 ) ; #687 = EDGE_CURVE ( 'NONE', #4260, #707, #3968, .T. ) ; #688 = ORIENTED_EDGE ( 'NONE', *, *, #6260, .F. ) ; #689 = CARTESIAN_POINT ( 'NONE', ( 4.499999999999950300, 2.400000000000960000, -1.000000000000000200 ) ) ; #690 = ORIENTED_EDGE ( 'NONE', *, *, #5568, .T. ) ; #691 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; #692 = CARTESIAN_POINT ( 'NONE', ( 4.000000000000000000, -6.000000000000060400, -11.80000000000000100 ) ) ; #693 = CARTESIAN_POINT ( 'NONE', ( -4.000000000000000000, 3.799999999999910100, -0.4999999999999990600 ) ) ; #694 = ORIENTED_EDGE ( 'NONE', *, *, #2017, .F. ) ; #695 = ADVANCED_FACE ( 'NONE', ( #2572 ), #1694, .T. ) ; #696 = VECTOR ( 'NONE', #4776, 1000.000000000000000 ) ; #697 = EDGE_CURVE ( 'NONE', #2509, #3464, #3305, .T. ) ; #698 = ORIENTED_EDGE ( 'NONE', *, *, #6754, .T. ) ; #699 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; #700 = AXIS2_PLACEMENT_3D ( 'NONE', #5920, #6482, #1814 ) ; #701 = ORIENTED_EDGE ( 'NONE', *, *, #2768, .F. ) ; #702 = CARTESIAN_POINT ( 'NONE', ( 4.000000000000000000, -6.500000000000060400, -11.80000000000000100 ) ) ; #703 = CARTESIAN_POINT ( 'NONE', ( -1.499999999999830100, -6.350000000000020100, -7.950000000000000200 ) ) ; #704 = AXIS2_PLACEMENT_3D ( 'NONE', #144, #1119, #3198 ) ; #705 = LINE ( 'NONE', #6273, #4070 ) ; #706 = CARTESIAN_POINT ( 'NONE', ( 4.860000000000080300, -2.559999999999050100, -2.779157999888000100 ) ) ; #707 = VERTEX_POINT ( 'NONE', #6457 ) ; #708 = AXIS2_PLACEMENT_3D ( 'NONE', #655, #630, #2769 ) ; #709 = FACE_OUTER_BOUND ( 'NONE', #1415, .T. ) ; #710 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #711 = LINE ( 'NONE', #853, #6146 ) ; #712 = ADVANCED_FACE ( 'NONE', ( #4133 ), #4285, .F. ) ; #713 = CARTESIAN_POINT ( 'NONE', ( 3.550000000000910200, -5.500000000000009800, -6.100000000000919800 ) ) ; #714 = CARTESIAN_POINT ( 'NONE', ( 0.3692454791660839700, -2.699783421336158500, -10.03070813642794200 ) ) ; #715 = LINE ( 'NONE', #2115, #4401 ) ; #716 = EDGE_LOOP ( 'NONE', ( #3373, #3540, #4582, #2254 ) ) ; #717 = ORIENTED_EDGE ( 'NONE', *, *, #5220, .T. ) ; #718 = CARTESIAN_POINT ( 'NONE', ( -1.000000000000000000, 2.000000000000000400, 1.899999999999948200 ) ) ; #719 = CARTESIAN_POINT ( 'NONE', ( -2.749999999999090900, -2.970259389423802500, -3.494704195690110800 ) ) ; #720 = FACE_OUTER_BOUND ( 'NONE', #2458, .T. ) ; #721 = ORIENTED_EDGE ( 'NONE', *, *, #1817, .T. ) ; #722 = FACE_OUTER_BOUND ( 'NONE', #3904, .T. ) ; #723 = CARTESIAN_POINT ( 'NONE', ( -4.000000000000000000, -6.000000000000060400, -0.4999999999999990600 ) ) ; #724 = VECTOR ( 'NONE', #586, 1000.000000000000000 ) ; #725 = ORIENTED_EDGE ( 'NONE', *, *, #4343, .F. ) ; #726 = CARTESIAN_POINT ( 'NONE', ( 1.110223024625159900E-013, -5.551115123125780200E-014, -11.80000000000000100 ) ) ; #727 = ORIENTED_EDGE ( 'NONE', *, *, #4659, .T. ) ; #728 = EDGE_CURVE ( 'NONE', #5782, #88, #2901, .T. ) ; #729 = VECTOR ( 'NONE', #6477, 1000.000000000000100 ) ; #730 = CARTESIAN_POINT ( 'NONE', ( 0.4011564200356984600, -2.670012035708184200, -10.38887883430447800 ) ) ; #731 = CARTESIAN_POINT ( 'NONE', ( -1.279896855207080000, 13.18406534392610000, 14.95674975082870100 ) ) ; #732 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #733 = MANIFOLD_SOLID_BREP ( 'Imported5', #4938 ) ; #734 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; #735 = VECTOR ( 'NONE', #3077, 1000.000000000000000 ) ; #736 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; #737 = EDGE_CURVE ( 'NONE', #1504, #5122, #1675, .T. ) ; #738 = ORIENTED_EDGE ( 'NONE', *, *, #2103, .F. ) ; #739 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #740 = ADVANCED_FACE ( 'NONE', ( #6119 ), #273, .T. ) ; #741 = AXIS2_PLACEMENT_3D ( 'NONE', #1203, #1175, #4851 ) ; #742 = ORIENTED_EDGE ( 'NONE', *, *, #5437, .F. ) ; #743 = AXIS2_PLACEMENT_3D ( 'NONE', #4123, #546, #6833 ) ; #744 = ADVANCED_FACE ( 'NONE', ( #2732 ), #5452, .T. ) ; #745 = CARTESIAN_POINT ( 'NONE', ( 0.8230144980376428200, -10.99480492006176000, -7.800000000000072700 ) ) ; #746 = CARTESIAN_POINT ( 'NONE', ( 1.249999999999969800, -5.299999999999819500, -7.504719755118549600 ) ) ; #747 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #748 = EDGE_CURVE ( 'NONE', #2961, #866, #360, .T. ) ; #749 = CARTESIAN_POINT ( 'NONE', ( -1.000000000000000000, 1.224646799147353200E-016, -9.150000000000000400 ) ) ; #750 = AXIS2_PLACEMENT_3D ( 'NONE', #373, #4537, #2462 ) ; #751 = ORIENTED_EDGE ( 'NONE', *, *, #3315, .F. ) ; #752 = CARTESIAN_POINT ( 'NONE', ( -0.4023939328100814000, -2.665123045541351900, -10.43539446856489600 ) ) ; #753 = AXIS2_PLACEMENT_3D ( 'NONE', #6254, #3098, #6759 ) ; #754 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; #755 = CARTESIAN_POINT ( 'NONE', ( 0.3692454791660839700, -2.073507570093822600, -10.42204872171019900 ) ) ; #756 = ORIENTED_EDGE ( 'NONE', *, *, #6287, .T. ) ; #757 = ORIENTED_EDGE ( 'NONE', *, *, #6815, .T. ) ; #758 = CARTESIAN_POINT ( 'NONE', ( -2.020252069733337900, -2.963953556936691900, -6.283601273272994400 ) ) ; #759 = VECTOR ( 'NONE', #1799, 1000.000000000000000 ) ; #760 = ORIENTED_EDGE ( 'NONE', *, *, #5502, .F. ) ; #761 = CIRCLE ( 'NONE', #38, 2.299999999999999800 ) ; #762 = ORIENTED_EDGE ( 'NONE', *, *, #858, .T. ) ; #763 = ORIENTED_EDGE ( 'NONE', *, *, #6552, .T. ) ; #764 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #765 = CARTESIAN_POINT ( 'NONE', ( 3.650000000000929800, -5.150000000000099800, -11.80000000000000100 ) ) ; #766 = LINE ( 'NONE', #1361, #5127 ) ; #767 = ORIENTED_EDGE ( 'NONE', *, *, #3211, .T. ) ; #768 = VECTOR ( 'NONE', #5834, 1000.000000000000000 ) ; #769 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.8386705679454968800, -0.5446390350149148400 ) ) ; #770 = LINE ( 'NONE', #2618, #4795 ) ; #771 = CARTESIAN_POINT ( 'NONE', ( -0.3292662169171765000, -2.642074492566184300, -10.65468680171330400 ) ) ; #772 = ORIENTED_EDGE ( 'NONE', *, *, #827, .F. ) ; #773 = ORIENTED_EDGE ( 'NONE', *, *, #5580, .F. ) ; #774 = EDGE_CURVE ( 'NONE', #6099, #3928, #281, .T. ) ; #775 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #776 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.224646799147353200E-016, 1.000000000000000000 ) ) ; #777 = ORIENTED_EDGE ( 'NONE', *, *, #36, .F. ) ; #778 = EDGE_LOOP ( 'NONE', ( #5157, #588, #5910, #361 ) ) ; #779 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #780 = FACE_OUTER_BOUND ( 'NONE', #2980, .T. ) ; #781 = ORIENTED_EDGE ( 'NONE', *, *, #1986, .F. ) ; #782 = CARTESIAN_POINT ( 'NONE', ( -4.500000000000060400, 0.0000000000000000000, -3.500000000000000000 ) ) ; #783 = ORIENTED_EDGE ( 'NONE', *, *, #3912, .T. ) ; #784 = EDGE_CURVE ( 'NONE', #6715, #3782, #5199, .T. ) ; #785 = EDGE_CURVE ( 'NONE', #5317, #4817, #2821, .T. ) ; #786 = LINE ( 'NONE', #5058, #5222 ) ; #787 = ORIENTED_EDGE ( 'NONE', *, *, #2228, .F. ) ; #788 = ORIENTED_EDGE ( 'NONE', *, *, #559, .F. ) ; #789 = CARTESIAN_POINT ( 'NONE', ( 2.750000000000909100, -2.970259389423802500, -3.494704195690110400 ) ) ; #790 = CIRCLE ( 'NONE', #489, 1.479999999999990000 ) ; #791 = ORIENTED_EDGE ( 'NONE', *, *, #3263, .T. ) ; #792 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; #793 = DIRECTION ( 'NONE', ( -0.02524987779172329800, -0.7311205248564568400, -0.6817809192146124800 ) ) ; #794 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.5446390350149148400, -0.8386705679454968800 ) ) ; #795 = VECTOR ( 'NONE', #5334, 1000.000000000000000 ) ; #796 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #797 = ORIENTED_EDGE ( 'NONE', *, *, #3496, .F. ) ; #798 = CARTESIAN_POINT ( 'NONE', ( 0.04594812542929550100, -2.624571100751218900, -10.82122045062610700 ) ) ; #799 = CARTESIAN_POINT ( 'NONE', ( 1.200000000000090100, -3.100000000000049400, -13.42000000000000000 ) ) ; #800 = PLANE ( 'NONE', #5455 ) ; #801 = VECTOR ( 'NONE', #1826, 1000.000000000000000 ) ; #802 = VECTOR ( 'NONE', #2477, 1000.000000000000000 ) ; #803 = CARTESIAN_POINT ( 'NONE', ( -1.705302565824240400E-010, 0.0000000000000000000, -14.15000000001498400 ) ) ; #804 = ORIENTED_EDGE ( 'NONE', *, *, #2267, .T. ) ; #805 = CARTESIAN_POINT ( 'NONE', ( -3.899999999999789900, -6.049999999999999800, -14.40000000000000200 ) ) ; #806 = CARTESIAN_POINT ( 'NONE', ( -1.000000000000000000, 1.224646799147353200E-016, -11.87500000000000000 ) ) ; #807 = VECTOR ( 'NONE', #4229, 1000.000000000000000 ) ; #808 = VECTOR ( 'NONE', #5262, 1000.000000000000000 ) ; #809 = ORIENTED_EDGE ( 'NONE', *, *, #528, .T. ) ; #810 = CARTESIAN_POINT ( 'NONE', ( 1.996148502785768400, -1.987689661813058000, -5.187342758749694300 ) ) ; #811 = CARTESIAN_POINT ( 'NONE', ( -0.4400971163234674300, -11.22015205093456900, -7.800000000000070000 ) ) ; #812 = CARTESIAN_POINT ( 'NONE', ( -4.339999999999969700, -8.187744794624180100, -11.80000000000000100 ) ) ; #813 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #814 = VECTOR ( 'NONE', #2539, 1000.000000000000000 ) ; #815 = DIRECTION ( 'NONE', ( -0.08247831734653142400, 0.9965928592798992700, 0.0000000000000000000 ) ) ; #816 = CARTESIAN_POINT ( 'NONE', ( -0.9999999999991157100, -5.299999999999280400, -4.835740514102221600 ) ) ; #817 = VERTEX_POINT ( 'NONE', #703 ) ; #818 = EDGE_CURVE ( 'NONE', #3464, #3778, #6782, .T. ) ; #819 = DATE_AND_TIME ( #2876, #3110 ) ; #820 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #821 = EDGE_CURVE ( 'NONE', #6604, #6244, #4870, .T. ) ; #822 = ORIENTED_EDGE ( 'NONE', *, *, #2619, .T. ) ; #823 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; #824 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.7071067811866840200, -0.7071067811864111300 ) ) ; #825 = CARTESIAN_POINT ( 'NONE', ( -0.3145951450162871600, -5.215623867448346800, -6.116796583962122100 ) ) ; #826 =( BOUNDED_SURFACE ( ) B_SPLINE_SURFACE ( 3, 3, ( ( #4812, #1719, #6294, #1788 ), ( #2832, #5047, #4112, #193 ), ( #5427, #718, #4352, #1218 ), ( #3851, #4892, #172, #1755 ) ), .UNSPECIFIED., .F., .F., .F. ) B_SPLINE_SURFACE_WITH_KNOTS ( ( 4, 4 ), ( 4, 4 ), ( 0.0000000000000000000, 1.000000000000000000 ), ( 0.0000000000000000000, 1.000000000000000000 ), .UNSPECIFIED. ) GEOMETRIC_REPRESENTATION_ITEM ( ) RATIONAL_B_SPLINE_SURFACE ( ( ( 1.000000000000000000, 0.3333333333333334300, 0.3333333333333334300, 1.000000000000000000), ( 0.3333333333333333700, 0.1111111111111111600, 0.1111111111111111600, 0.3333333333333333700), ( 0.3333333333333333700, 0.1111111111111111600, 0.1111111111111111600, 0.3333333333333333700), ( 1.000000000000000000, 0.3333333333333334300, 0.3333333333333334300, 1.000000000000000000) ) ) REPRESENTATION_ITEM ( '' ) SURFACE ( ) ); #827 = EDGE_CURVE ( 'NONE', #5546, #817, #1346, .T. ) ; #828 = CARTESIAN_POINT ( 'NONE', ( -3.549999999999000200, -5.500000000000008900, -11.90000000000010000 ) ) ; #829 = AXIS2_PLACEMENT_3D ( 'NONE', #4416, #3846, #5999 ) ; #830 = ORIENTED_EDGE ( 'NONE', *, *, #2759, .F. ) ; #831 = AXIS2_PLACEMENT_3D ( 'NONE', #1111, #2692, #3228 ) ; #832 = CARTESIAN_POINT ( 'NONE', ( -2.749999999999090100, -4.652762252679811400, -1.699165706615299900 ) ) ; #833 = AXIS2_PLACEMENT_3D ( 'NONE', #4552, #3427, #264 ) ; #834 = CARTESIAN_POINT ( 'NONE', ( 1.479999999999979600, -8.699999999999894500, -12.93358983848641800 ) ) ; #835 = ORIENTED_EDGE ( 'NONE', *, *, #1883, .F. ) ; #836 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, ( #552, #4151, #5818, #6793 ), .UNSPECIFIED., .F., .F., ( 4, 4 ), ( 0.0000000000000000000, 1.000000000000000000 ), .UNSPECIFIED. ) ; #837 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #838 = EDGE_CURVE ( 'NONE', #6557, #4394, #1013, .T. ) ; #839 = CARTESIAN_POINT ( 'NONE', ( -4.000000000000000000, 4.299999999999919900, -1.000000000000000000 ) ) ; #840 = CARTESIAN_POINT ( 'NONE', ( -2.299999999999080100, 0.0000000000000000000, -9.900000000000000400 ) ) ; #841 = AXIS2_PLACEMENT_3D ( 'NONE', #3277, #5480, #699 ) ; #842 = ORIENTED_EDGE ( 'NONE', *, *, #6380, .T. ) ; #843 = LINE ( 'NONE', #3119, #5864 ) ; #844 = ORIENTED_EDGE ( 'NONE', *, *, #1763, .F. ) ; #845 = CARTESIAN_POINT ( 'NONE', ( 3.900000000000130000, -3.350000000000020100, -14.40000000000000200 ) ) ; #846 = AXIS2_PLACEMENT_3D ( 'NONE', #2730, #2226, #3777 ) ; #847 = EDGE_LOOP ( 'NONE', ( #2558, #1756, #688, #1863, #5962, #2851, #5005, #6462 ) ) ; #848 = VECTOR ( 'NONE', #3766, 1000.000000000000000 ) ; #849 = ORIENTED_EDGE ( 'NONE', *, *, #4291, .F. ) ; #850 = CARTESIAN_POINT ( 'NONE', ( 0.3153220279694224400, -5.212030876511321700, -4.088229105052651100 ) ) ; #851 = LINE ( 'NONE', #6034, #1248 ) ; #852 = ORIENTED_EDGE ( 'NONE', *, *, #728, .T. ) ; #853 = CARTESIAN_POINT ( 'NONE', ( -2.749999999999090100, -4.631753845382112500, -0.9362270953884586100 ) ) ; #854 = ORIENTED_EDGE ( 'NONE', *, *, #4245, .F. ) ; #855 = FACE_OUTER_BOUND ( 'NONE', #2643, .T. ) ; #856 = ORIENTED_EDGE ( 'NONE', *, *, #907, .F. ) ; #857 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000090800, -9.112132034355555600, -8.387867965643975400 ) ) ; #858 = EDGE_CURVE ( 'NONE', #627, #5756, #6451, .T. ) ; #859 = PLANE ( 'NONE', #1631 ) ; #860 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; #861 = LINE ( 'NONE', #6409, #696 ) ; #862 = CARTESIAN_POINT ( 'NONE', ( 2.499999999999949800, 4.299999999999919900, -1.000000000000000000 ) ) ; #863 = CARTESIAN_POINT ( 'NONE', ( -1.899999999998069900, -5.500000000000009800, -7.400000000000000400 ) ) ; #864 = ORIENTED_EDGE ( 'NONE', *, *, #3982, .T. ) ; #865 = ADVANCED_FACE ( 'NONE', ( #5033 ), #4984, .T. ) ; #866 = VERTEX_POINT ( 'NONE', #4920 ) ; #867 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; #868 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #869 = VECTOR ( 'NONE', #5687, 1000.000000000000000 ) ; #870 = EDGE_CURVE ( 'NONE', #330, #2225, #5360, .T. ) ; #871 = ORIENTED_EDGE ( 'NONE', *, *, #3948, .F. ) ; #872 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; #873 = CARTESIAN_POINT ( 'NONE', ( -4.500000000000000900, 3.971572875253719800, -0.2071067811865463200 ) ) ; #874 = VECTOR ( 'NONE', #5009, 1000.000000000000000 ) ; #875 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; #876 = VECTOR ( 'NONE', #2836, 1000.000000000000000 ) ; #877 = AXIS2_PLACEMENT_3D ( 'NONE', #456, #1543, #985 ) ; #878 = CIRCLE ( 'NONE', #3769, 1.050000000000000000 ) ; #879 = ORIENTED_EDGE ( 'NONE', *, *, #2228, .T. ) ; #880 = EDGE_CURVE ( 'NONE', #6549, #3337, #4052, .T. ) ; #881 = ORIENTED_EDGE ( 'NONE', *, *, #346, .F. ) ; #882 = CARTESIAN_POINT ( 'NONE', ( -2.749999999999089200, -4.336487333706865700, -1.811835057709533900 ) ) ; #883 = AXIS2_PLACEMENT_3D ( 'NONE', #3126, #1127, #3949 ) ; #884 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; #885 = CARTESIAN_POINT ( 'NONE', ( 1.050000000000107700, -5.551115123125780200E-014, -13.77999999999999900 ) ) ; #886 = LINE ( 'NONE', #6085, #3828 ) ; #887 = VERTEX_POINT ( 'NONE', #6596 ) ; #888 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; #889 = CARTESIAN_POINT ( 'NONE', ( 2.650000002095831000, -0.4215383240827803600, -9.900000000000000400 ) ) ; #890 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, ( #2229, #4936, #5456, #4314, #1716, #2306, #6454, #5383, #5412, #745, #3808, #2260, #4408, #4875, #2835, #1740, #6554, #1857, #2858, #2380, #3444, #243, #811, #2351, #1368, #3375, #4449, #2895, #5027, #4475, #1339, #2426, #6575, #1921 ), .UNSPECIFIED., .F., .F., ( 4, 1, 1, 2, 2, 2, 1, 1, 2, 2, 2, 1, 1, 2, 2, 2, 1, 1, 2, 2, 4 ), ( 0.0000000000000000000, 0.06249999999999925100, 0.09374999999999957000, 0.1093749999999996900, 0.1249999999999998300, 0.2499999999999994400, 0.3124999999999992200, 0.3437499999999995000, 0.3593749999999995600, 0.3749999999999996700, 0.5000000000000000000, 0.5625000000000001100, 0.5937500000000002200, 0.6093750000000002200, 0.6250000000000002200, 0.7500000000000006700, 0.8125000000000004400, 0.8437500000000003300, 0.8593749999999996700, 0.8749999999999990000, 1.000000000000000000 ), .UNSPECIFIED. ) ; #891 = LINE ( 'NONE', #4274, #2782 ) ; #892 = CARTESIAN_POINT ( 'NONE', ( -4.500000000000060400, -2.150000000000039900, -11.80000000000000100 ) ) ; #893 = LINE ( 'NONE', #5975, #4581 ) ; #894 = DIRECTION ( 'NONE', ( 0.04120792509278378000, -0.8379581950490639900, -0.5441764146484688900 ) ) ; #895 = VERTEX_POINT ( 'NONE', #180 ) ; #896 = CARTESIAN_POINT ( 'NONE', ( 3.200000000000979800, -5.150000000000099800, -11.80000000000000100 ) ) ; #897 = CARTESIAN_POINT ( 'NONE', ( -4.500000000000000000, 4.092893218813362200, -0.4999999999999988300 ) ) ; #898 = VERTEX_POINT ( 'NONE', #5435 ) ; #899 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.8480480961564262900, -0.5299192642332044600 ) ) ; #900 = LINE ( 'NONE', #6004, #5327 ) ; #901 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.7071067811866840200, -0.7071067811864111300 ) ) ; #902 = CARTESIAN_POINT ( 'NONE', ( -1.549999999999049900, -6.500000000000060400, -11.80000000000000100 ) ) ; #903 = CIRCLE ( 'NONE', #1467, 4.150000000000000400 ) ; #904 = ORIENTED_EDGE ( 'NONE', *, *, #4602, .T. ) ; #905 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000090200, -5.500000000000446800, -7.400000000000001200 ) ) ; #906 = CARTESIAN_POINT ( 'NONE', ( 18.18468237128200100, -2.781668093412850200, -11.23989685449769900 ) ) ; #907 = EDGE_CURVE ( 'NONE', #5865, #3580, #1928, .T. ) ; #908 = ORIENTED_EDGE ( 'NONE', *, *, #2081, .F. ) ; #909 = CARTESIAN_POINT ( 'NONE', ( -3.049999999999060600, -5.299999999999280400, -5.600000000000890500 ) ) ; #910 = CARTESIAN_POINT ( 'NONE', ( 2.649955279348981100, 0.1753393383288161000, -9.900000000000000400 ) ) ; #911 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; #912 = ORIENTED_EDGE ( 'NONE', *, *, #3266, .T. ) ; #913 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -1.199999999999980000, -11.80000000000000100 ) ) ; #914 = EDGE_CURVE ( 'NONE', #6715, #6073, #851, .T. ) ; #915 = CARTESIAN_POINT ( 'NONE', ( 4.292893218813452100, 4.299999999999910100, -0.4999999999999991700 ) ) ; #916 = ADVANCED_FACE ( 'NONE', ( #5118 ), #4703, .T. ) ; #917 = ORIENTED_EDGE ( 'NONE', *, *, #1217, .T. ) ; #918 = EDGE_LOOP ( 'NONE', ( #2176, #4055, #5706, #3776 ) ) ; #919 = CARTESIAN_POINT ( 'NONE', ( 3.149999999999999900, -3.857637417314163200E-016, -9.692893218813468400 ) ) ; #920 = AXIS2_PLACEMENT_3D ( 'NONE', #6365, #4228, #6386 ) ; #921 = CARTESIAN_POINT ( 'NONE', ( -1.049999999999892600, -5.538256331734733100E-014, -13.42000000000000000 ) ) ; #922 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; #923 = FACE_OUTER_BOUND ( 'NONE', #2551, .T. ) ; #924 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; #925 = ORIENTED_EDGE ( 'NONE', *, *, #1584, .T. ) ; #926 = CIRCLE ( 'NONE', #3901, 0.6299999999999998900 ) ; #927 = VERTEX_POINT ( 'NONE', #1413 ) ; #928 = CARTESIAN_POINT ( 'NONE', ( 2.362731470142100500, -1.199999999999980200, -9.900000000000000400 ) ) ; #929 = AXIS2_PLACEMENT_3D ( 'NONE', #6032, #2879, #1314 ) ; #930 = ORIENTED_EDGE ( 'NONE', *, *, #6467, .F. ) ; #931 = LINE ( 'NONE', #6076, #33 ) ; #932 = CARTESIAN_POINT ( 'NONE', ( 1.340297720735227300, 2.287692763890882800, -9.900000000000000400 ) ) ; #933 = ORIENTED_EDGE ( 'NONE', *, *, #1120, .T. ) ; #934 = CYLINDRICAL_SURFACE ( 'NONE', #2026, 0.5000000000000000000 ) ; #935 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -9.400000000000000400 ) ) ; #936 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; #937 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; #938 = VECTOR ( 'NONE', #6050, 1000.000000000000000 ) ; #939 = EDGE_LOOP ( 'NONE', ( #6544, #533, #1911, #471 ) ) ; #940 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; #941 = CARTESIAN_POINT ( 'NONE', ( -1.640305038016647700, -2.608556019522823000, -10.97359377019718700 ) ) ; #942 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #943 = LINE ( 'NONE', #2370, #4464 ) ; #944 = VERTEX_POINT ( 'NONE', #5085 ) ; #945 = CARTESIAN_POINT ( 'NONE', ( 1.250000000000133200, -10.04999999999840000, -7.599999999999870900 ) ) ; #946 = EDGE_CURVE ( 'NONE', #4808, #2310, #2240, .T. ) ; #947 = CARTESIAN_POINT ( 'NONE', ( -0.6147765225224490800, -5.299999999999280400, -5.899420476339233900 ) ) ; #948 = CARTESIAN_POINT ( 'NONE', ( -3.650000000000039900, -5.500000000000009800, -5.299999999999999800 ) ) ; #949 = PERSON_AND_ORGANIZATION_ROLE ( 'creator' ) ; #950 = CARTESIAN_POINT ( 'NONE', ( -2.942893219219791400, -0.4681291684452245600, -9.900000000000021700 ) ) ; #951 = ORIENTED_EDGE ( 'NONE', *, *, #5178, .T. ) ; #952 = LINE ( 'NONE', #3909, #3010 ) ; #953 = ORIENTED_EDGE ( 'NONE', *, *, #5536, .T. ) ; #954 = ADVANCED_FACE ( 'NONE', ( #516 ), #5954, .T. ) ; #955 = EDGE_LOOP ( 'NONE', ( #1893, #5242 ) ) ; #956 = LINE ( 'NONE', #6355, #4977 ) ; #957 = ORIENTED_EDGE ( 'NONE', *, *, #4827, .T. ) ; #958 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.8386705679435376700, 0.5446390350179318700 ) ) ; #959 = CARTESIAN_POINT ( 'NONE', ( -0.8710284605817100200, 2.504296248771329400, -9.899999999999996800 ) ) ; #960 = ORIENTED_EDGE ( 'NONE', *, *, #6260, .T. ) ; #961 = EDGE_CURVE ( 'NONE', #436, #5716, #3704, .T. ) ; #962 = CARTESIAN_POINT ( 'NONE', ( 18.18468237128200100, -5.299999999999280400, -2.300000000000010500 ) ) ; #963 = CARTESIAN_POINT ( 'NONE', ( 4.500000000000060400, -11.19999999999910000, -11.80000000000000100 ) ) ; #964 = AXIS2_PLACEMENT_3D ( 'NONE', #4317, #4805, #1668 ) ; #965 = CIRCLE ( 'NONE', #3074, 1.000000000000000000 ) ; #966 = CARTESIAN_POINT ( 'NONE', ( 2.750000000000909900, -5.500000000000008900, -5.600000000000860300 ) ) ; #967 = ORIENTED_EDGE ( 'NONE', *, *, #4954, .F. ) ; #968 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; #969 = ORIENTED_EDGE ( 'NONE', *, *, #3757, .F. ) ; #970 = VECTOR ( 'NONE', #1157, 1000.000000000000000 ) ; #971 = VECTOR ( 'NONE', #867, 1000.000000000000000 ) ; #972 = ORIENTED_EDGE ( 'NONE', *, *, #6153, .T. ) ; #973 = EDGE_CURVE ( 'NONE', #6426, #3855, #2077, .T. ) ; #974 = CARTESIAN_POINT ( 'NONE', ( -3.149999999999998600, 6.299999999999999800, -9.692893218813470200 ) ) ; #975 = VERTEX_POINT ( 'NONE', #6157 ) ; #976 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; #977 = LINE ( 'NONE', #1252, #6412 ) ; #978 = CARTESIAN_POINT ( 'NONE', ( -2.804496749695563700, -1.434328407634393200, -9.692893218813468400 ) ) ; #979 = FACE_OUTER_BOUND ( 'NONE', #6203, .T. ) ; #980 = ORIENTED_EDGE ( 'NONE', *, *, #5937, .T. ) ; #981 = CARTESIAN_POINT ( 'NONE', ( -4.500000000000000900, -6.000000000000061300, -0.4999999999999988300 ) ) ; #982 = VECTOR ( 'NONE', #2209, 1000.000000000000000 ) ; #983 = CARTESIAN_POINT ( 'NONE', ( 2.750000000000909900, -5.500000000000009800, -5.600000000000860300 ) ) ; #984 = EDGE_LOOP ( 'NONE', ( #5259, #1988, #6269, #4117 ) ) ; #985 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #986 = VECTOR ( 'NONE', #4987, 1000.000000000000000 ) ; #987 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, ( #3898, #4932, #282, #4467 ), .UNSPECIFIED., .F., .F., ( 4, 4 ), ( 0.0000000000000000000, 1.000000000000000000 ), .UNSPECIFIED. ) ; #988 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -9.150000000000000400 ) ) ; #989 = ORIENTED_EDGE ( 'NONE', *, *, #2542, .F. ) ; #990 = CARTESIAN_POINT ( 'NONE', ( 4.860000000000080300, -10.19999999999910000, -11.80000000000000100 ) ) ; #991 = CARTESIAN_POINT ( 'NONE', ( 2.750000000000901100, -4.208418032298772500, -1.955662937369631900 ) ) ; #992 = ORIENTED_EDGE ( 'NONE', *, *, #2759, .T. ) ; #993 = CARTESIAN_POINT ( 'NONE', ( 2.299999999999859900, -1.199999999999980000, -9.900000000000000400 ) ) ; #994 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); #995 = CARTESIAN_POINT ( 'NONE', ( -3.150000000434957300, -0.5010738653973367800, -9.692893218813470200 ) ) ; #996 = EDGE_CURVE ( 'NONE', #6556, #1079, #5273, .T. ) ; #997 = EDGE_LOOP ( 'NONE', ( #4978, #463, #1337, #5378, #5410, #1094, #2401, #721, #2633, #565, #2249, #512, #1320, #2506 ) ) ; #998 = ORIENTED_EDGE ( 'NONE', *, *, #2422, .F. ) ; #999 = CARTESIAN_POINT ( 'NONE', ( -4.500000000000000900, -6.171572875253872300, -0.2071067811865467100 ) ) ; #1000 = EDGE_CURVE ( 'NONE', #6361, #5546, #5535, .T. ) ; #1001 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000060000, -5.350000000000021000, -13.44999999999999900 ) ) ; #1002 = PLANE ( 'NONE', #877 ) ; #1003 = ORIENTED_EDGE ( 'NONE', *, *, #2950, .T. ) ; #1004 = LINE ( 'NONE', #993, #6028 ) ; #1005 = ORIENTED_EDGE ( 'NONE', *, *, #3948, .T. ) ; #1006 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -2.599999999999050200, -11.80000000000000100 ) ) ; #1007 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; #1008 = CARTESIAN_POINT ( 'NONE', ( -2.299999999999080100, -2.000000000000110100, -11.80000000000000100 ) ) ; #1009 = AXIS2_PLACEMENT_3D ( 'NONE', #5998, #2362, #3365 ) ; #1010 = EDGE_LOOP ( 'NONE', ( #1659, #2906 ) ) ; #1011 = VECTOR ( 'NONE', #3259, 1000.000000000000000 ) ; #1012 = ORIENTED_EDGE ( 'NONE', *, *, #1386, .F. ) ; #1013 = CIRCLE ( 'NONE', #1810, 0.5000000000000001100 ) ; #1014 = ORIENTED_EDGE ( 'NONE', *, *, #589, .F. ) ; #1015 = CARTESIAN_POINT ( 'NONE', ( -2.847504506484608300, -1.199999999999979700, -9.672224803662292200 ) ) ; #1016 = CARTESIAN_POINT ( 'NONE', ( -4.000000000000000000, -6.000000000000060400, -0.4999999999999990600 ) ) ; #1017 = CLOSED_SHELL ( 'NONE', ( #4874, #2418, #6207, #712, #3906, #5113, #6428, #4967, #1251, #3671, #2173, #5867, #5379, #6480, #1135, #4273, #4908, #6019, #124, #5599, #5354, #1597, #5469, #6331, #3774, #5464, #1225, #2654, #1385, #3564, #2847, #2685, #1069, #604, #1700, #1245, #3184, #6323, #5043, #1187, #1903, #4261, #5307, #3022, #5586, #1625, #5792, #4346, #3048, #623, #45, #5503, #4298, #6439, #587, #4934, #2735, #6651, #1164, #2543, #6585, #2811, #2236, #6051, #6553, #2325, #331, #2844, #3867 ) ) ; #1018 = CYLINDRICAL_SURFACE ( 'NONE', #2638, 0.5000000000000000000 ) ; #1019 = ORIENTED_EDGE ( 'NONE', *, *, #5501, .T. ) ; #1020 = ORIENTED_EDGE ( 'NONE', *, *, #5227, .F. ) ; #1021 = CARTESIAN_POINT ( 'NONE', ( 18.18468237128200100, -3.137993503012869800, -3.603632002693439900 ) ) ; #1022 = LINE ( 'NONE', #2277, #2089 ) ; #1023 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; #1024 = VERTEX_POINT ( 'NONE', #5571 ) ; #1025 = EDGE_CURVE ( 'NONE', #5602, #596, #110, .T. ) ; #1026 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #1027 = CARTESIAN_POINT ( 'NONE', ( 1.249999999999969800, -10.20913117625842200, -7.599999999999869100 ) ) ; #1028 = EDGE_LOOP ( 'NONE', ( #835, #5688, #2100, #1983, #5519, #1371, #1465, #1192, #5526, #4221 ) ) ; #1029 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; #1030 = VECTOR ( 'NONE', #91, 1000.000000000000000 ) ; #1031 = VERTEX_POINT ( 'NONE', #1393 ) ; #1032 = CARTESIAN_POINT ( 'NONE', ( -1.479999999999979600, -7.460192378863940400, -13.77999999999999900 ) ) ; #1033 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; #1034 = FACE_OUTER_BOUND ( 'NONE', #4720, .T. ) ; #1035 = LINE ( 'NONE', #812, #1790 ) ; #1036 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #1037 = EDGE_CURVE ( 'NONE', #161, #2679, #4369, .T. ) ; #1038 = CARTESIAN_POINT ( 'NONE', ( 4.000000000000000000, -6.500000000000060400, -0.4999999999999995600 ) ) ; #1039 = VECTOR ( 'NONE', #382, 1000.000000000000000 ) ; #1040 = VERTEX_POINT ( 'NONE', #6669 ) ; #1041 = EDGE_CURVE ( 'NONE', #4993, #3893, #1085, .T. ) ; #1042 = CARTESIAN_POINT ( 'NONE', ( -4.292893218813452100, -6.500000000000060400, -0.4999999999999996100 ) ) ; #1043 = LINE ( 'NONE', #2311, #5901 ) ; #1044 = ORIENTED_EDGE ( 'NONE', *, *, #3707, .F. ) ; #1045 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; #1046 = EDGE_CURVE ( 'NONE', #5983, #6232, #4205, .T. ) ; #1047 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000059700, -6.350000000000020100, -11.79999999999999900 ) ) ; #1048 = CARTESIAN_POINT ( 'NONE', ( 2.090790021169770100, -2.559999999999050100, -2.779157999888000100 ) ) ; #1049 = AXIS2_PLACEMENT_3D ( 'NONE', #1142, #4819, #5376 ) ; #1050 = CARTESIAN_POINT ( 'NONE', ( 0.03792053185588536300, -2.708194579521920900, -10.02559619667091300 ) ) ; #1051 = FACE_BOUND ( 'NONE', #5772, .T. ) ; #1052 = CIRCLE ( 'NONE', #5641, 1.500000000000000000 ) ; #1053 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; #1054 = VERTEX_POINT ( 'NONE', #885 ) ; #1055 = AXIS2_PLACEMENT_3D ( 'NONE', #1001, #3694, #5898 ) ; #1056 = CARTESIAN_POINT ( 'NONE', ( 4.499999999999950300, 3.799999999999910100, -3.499999999999999600 ) ) ; #1057 = LINE ( 'NONE', #3413, #2691 ) ; #1058 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #1059 = AXIS2_PLACEMENT_3D ( 'NONE', #2056, #5757, #3121 ) ; #1060 = PLANE ( 'NONE', #3673 ) ; #1061 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; #1062 = LINE ( 'NONE', #2021, #2301 ) ; #1063 = ADVANCED_FACE ( 'NONE', ( #3137 ), #2430, .T. ) ; #1064 = ORIENTED_EDGE ( 'NONE', *, *, #6825, .F. ) ; #1065 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; #1066 = CARTESIAN_POINT ( 'NONE', ( 2.499999999999949800, 2.400000000000960000, -2.549999999999999800 ) ) ; #1067 = CARTESIAN_POINT ( 'NONE', ( -1.005621433373144600, -10.81204058932282800, -7.599999999999869100 ) ) ; #1068 = VERTEX_POINT ( 'NONE', #5007 ) ; #1069 = ADVANCED_FACE ( 'NONE', ( #3472 ), #1372, .T. ) ; #1070 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #1071 = CARTESIAN_POINT ( 'NONE', ( -2.299999999999080100, -1.199999999999980000, -11.79999999999999900 ) ) ; #1072 = EDGE_CURVE ( 'NONE', #5163, #1114, #27, .T. ) ; #1073 = DIRECTION ( 'NONE', ( 1.224646799147353200E-016, 1.000000000000000000, 0.0000000000000000000 ) ) ; #1074 = CARTESIAN_POINT ( 'NONE', ( -3.149999999999990100, 0.0000000000000000000, -9.900000000000000400 ) ) ; #1075 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; #1076 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; #1077 = ORIENTED_EDGE ( 'NONE', *, *, #4134, .T. ) ; #1078 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; #1079 = VERTEX_POINT ( 'NONE', #2068 ) ; #1080 = EDGE_CURVE ( 'NONE', #1578, #2891, #2322, .T. ) ; #1081 = VECTOR ( 'NONE', #6724, 1000.000000000000000 ) ; #1082 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000090800, -8.970710678117770300, -8.246446609406030200 ) ) ; #1083 = AXIS2_PLACEMENT_3D ( 'NONE', #313, #358, #3423 ) ; #1084 = EDGE_LOOP ( 'NONE', ( #5357, #359, #2122, #1295 ) ) ; #1085 = LINE ( 'NONE', #2967, #5616 ) ; #1086 = ORIENTED_EDGE ( 'NONE', *, *, #5856, .T. ) ; #1087 = CARTESIAN_POINT ( 'NONE', ( -9.662512969806920500, -8.499999999999765500, -13.23381197846473100 ) ) ; #1088 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #1089 = VERTEX_POINT ( 'NONE', #4074 ) ; #1090 = AXIS2_PLACEMENT_3D ( 'NONE', #4741, #6786, #5717 ) ; #1091 = VERTEX_POINT ( 'NONE', #2997 ) ; #1092 = PLANE ( 'NONE', #3685 ) ; #1093 = CIRCLE ( 'NONE', #1725, 0.5000000000000001100 ) ; #1094 = ORIENTED_EDGE ( 'NONE', *, *, #4428, .T. ) ; #1095 = CARTESIAN_POINT ( 'NONE', ( 3.900000000000130000, -6.350000000000021000, -11.80000000000000100 ) ) ; #1096 = LINE ( 'NONE', #6213, #6371 ) ; #1097 = EDGE_CURVE ( 'NONE', #5023, #5046, #1159, .T. ) ; #1098 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; #1099 = AXIS2_PLACEMENT_3D ( 'NONE', #397, #4631, #6171 ) ; #1100 = EDGE_LOOP ( 'NONE', ( #4296, #5394, #2215, #1936 ) ) ; #1101 = CARTESIAN_POINT ( 'NONE', ( 2.649999999999999900, -3.245314017740486000E-016, -9.400000000000000400 ) ) ; #1102 = ORIENTED_EDGE ( 'NONE', *, *, #5145, .F. ) ; #1103 = FACE_OUTER_BOUND ( 'NONE', #1312, .T. ) ; #1104 = VERTEX_POINT ( 'NONE', #948 ) ; #1105 = CARTESIAN_POINT ( 'NONE', ( 2.299999999999859900, -1.199999999999980000, -11.80000000000000100 ) ) ; #1106 = ORIENTED_EDGE ( 'NONE', *, *, #1892, .T. ) ; #1107 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.5299192642332030100, 0.8480480961564271800 ) ) ; #1108 = LINE ( 'NONE', #5309, #6379 ) ; #1109 = ORIENTED_EDGE ( 'NONE', *, *, #907, .T. ) ; #1110 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.7071067811869580200, 0.7071067811861369000 ) ) ; #1111 = CARTESIAN_POINT ( 'NONE', ( 1.900000000000900100, -5.500000000000009800, -7.400000000000000400 ) ) ; #1112 = LINE ( 'NONE', #1340, #3731 ) ; #1113 = CARTESIAN_POINT ( 'NONE', ( 18.18468237128200100, -9.558578643761777000, -7.658578643762465900 ) ) ; #1114 = VERTEX_POINT ( 'NONE', #6252 ) ; #1115 = VECTOR ( 'NONE', #5824, 1000.000000000000000 ) ; #1116 = EDGE_LOOP ( 'NONE', ( #1932, #1431, #4443, #6307 ) ) ; #1117 = CIRCLE ( 'NONE', #4344, 0.2699999999999998500 ) ; #1118 = ORIENTED_EDGE ( 'NONE', *, *, #5836, .F. ) ; #1119 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #1120 = EDGE_CURVE ( 'NONE', #475, #3971, #3960, .T. ) ; #1121 = CARTESIAN_POINT ( 'NONE', ( 4.500000000000000900, -6.000000000000061300, -0.4999999999999987200 ) ) ; #1122 = VECTOR ( 'NONE', #5492, 1000.000000000000000 ) ; #1123 = CARTESIAN_POINT ( 'NONE', ( 2.018281576592726900, -2.906897123192799400, -6.230395288045441400 ) ) ; #1124 = LINE ( 'NONE', #4589, #5321 ) ; #1125 = ORIENTED_EDGE ( 'NONE', *, *, #5421, .T. ) ; #1126 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; #1127 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; #1128 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000000000, 0.0000000000000000000, -9.150000000000000400 ) ) ; #1129 = FACE_OUTER_BOUND ( 'NONE', #344, .T. ) ; #1130 = LINE ( 'NONE', #2780, #5670 ) ; #1131 = EDGE_CURVE ( 'NONE', #3910, #6569, #5773, .T. ) ; #1132 = ORIENTED_EDGE ( 'NONE', *, *, #1628, .T. ) ; #1133 = CARTESIAN_POINT ( 'NONE', ( -3.199999999999980200, -2.599999999999050200, -11.80000000000000100 ) ) ; #1134 = AXIS2_PLACEMENT_3D ( 'NONE', #6529, #4388, #6010 ) ; #1135 = ADVANCED_FACE ( 'NONE', ( #352 ), #4859, .T. ) ; #1136 = CARTESIAN_POINT ( 'NONE', ( -1.199999999999930000, 1.469576158976738300E-016, -13.94999999999999900 ) ) ; #1137 = VECTOR ( 'NONE', #4160, 1000.000000000000000 ) ; #1138 = CARTESIAN_POINT ( 'NONE', ( -1.479999999999980000, -9.919999999999980400, -13.42000000000000000 ) ) ; #1139 = VERTEX_POINT ( 'NONE', #5752 ) ; #1140 = PLANE ( 'NONE', #6390 ) ; #1141 = CARTESIAN_POINT ( 'NONE', ( -4.339999999999969700, -2.559999999999050100, -11.80000000000000100 ) ) ; #1142 = CARTESIAN_POINT ( 'NONE', ( -3.199999999999980200, -1.199999999999980000, -11.80000000000000100 ) ) ; #1143 = VERTEX_POINT ( 'NONE', #5155 ) ; #1144 = CARTESIAN_POINT ( 'NONE', ( 1.777709254451913100, -2.659722563033234200, -10.48677662737560300 ) ) ; #1145 = CARTESIAN_POINT ( 'NONE', ( -4.000000000000000000, -6.500000000000060400, -11.80000000000000100 ) ) ; #1146 = ORIENTED_EDGE ( 'NONE', *, *, #3707, .T. ) ; #1147 = ADVANCED_FACE ( 'NONE', ( #3616 ), #3076, .T. ) ; #1148 = CARTESIAN_POINT ( 'NONE', ( 2.912473175842135800, -1.200000000000009300, -0.9999999999999988900 ) ) ; #1149 = CARTESIAN_POINT ( 'NONE', ( 0.03841668838713916500, -2.718332285103822100, -10.01911751994678600 ) ) ; #1150 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.8386705679446587700, -0.5446390350162054700 ) ) ; #1151 = CARTESIAN_POINT ( 'NONE', ( 1.549999999999830200, -6.500000000000060400, -11.80000000000000100 ) ) ; #1152 = VERTEX_POINT ( 'NONE', #2536 ) ; #1153 = ORIENTED_EDGE ( 'NONE', *, *, #6106, .T. ) ; #1154 = CARTESIAN_POINT ( 'NONE', ( 3.900000000000130000, -3.350000000000020100, -13.44999999999999900 ) ) ; #1155 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #1156 = EDGE_CURVE ( 'NONE', #5778, #1807, #6612, .T. ) ; #1157 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; #1158 = ORIENTED_EDGE ( 'NONE', *, *, #4837, .F. ) ; #1159 = CIRCLE ( 'NONE', #126, 1.500000000000000000 ) ; #1160 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, ( #4023, #4518, #882, #2425, #6127, #2962, #832, #1390 ), .UNSPECIFIED., .F., .F., ( 4, 2, 2, 4 ), ( 0.0000000000000000000, 0.1897687550213909300, 0.2846531325320864100, 0.3795375100427818600 ), .UNSPECIFIED. ) ; #1161 = ORIENTED_EDGE ( 'NONE', *, *, #4907, .T. ) ; #1162 = EDGE_CURVE ( 'NONE', #120, #4275, #5191, .T. ) ; #1163 = CARTESIAN_POINT ( 'NONE', ( -2.749999999999090100, -4.857665968126699600, -1.715961328315445300 ) ) ; #1164 = ADVANCED_FACE ( 'NONE', ( #2406 ), #4114, .F. ) ; #1165 = LINE ( 'NONE', #1674, #1516 ) ; #1166 = CARTESIAN_POINT ( 'NONE', ( 2.750000000000909900, -5.299999999999280400, -5.600000000000860300 ) ) ; #1167 = VERTEX_POINT ( 'NONE', #3096 ) ; #1168 = PLANE ( 'NONE', #3953 ) ; #1169 = ORIENTED_EDGE ( 'NONE', *, *, #3122, .T. ) ; #1170 = EDGE_CURVE ( 'NONE', #4891, #4336, #5876, .T. ) ; #1171 = EDGE_LOOP ( 'NONE', ( #3136, #3961, #4031, #6821 ) ) ; #1172 = VERTEX_POINT ( 'NONE', #6758 ) ; #1173 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; #1174 = VECTOR ( 'NONE', #5000, 1000.000000000000000 ) ; #1175 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; #1176 = ORIENTED_EDGE ( 'NONE', *, *, #5674, .F. ) ; #1177 = ORIENTED_EDGE ( 'NONE', *, *, #3799, .T. ) ; #1178 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #1179 = CC_DESIGN_APPROVAL ( #5766, ( #1313 ) ) ; #1180 = ORIENTED_EDGE ( 'NONE', *, *, #4335, .T. ) ; #1181 = CARTESIAN_POINT ( 'NONE', ( 1.249999999999969800, -5.500000000000446800, -7.400000000000001200 ) ) ; #1182 = EDGE_CURVE ( 'NONE', #3955, #2364, #1004, .T. ) ; #1183 = CIRCLE ( 'NONE', #4338, 3.149999999999999900 ) ; #1184 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -9.150000000000000400 ) ) ; #1185 = VERTEX_POINT ( 'NONE', #2051 ) ; #1186 = AXIS2_PLACEMENT_3D ( 'NONE', #4613, #1487, #2016 ) ; #1187 = ADVANCED_FACE ( 'NONE', ( #6442 ), #2138, .T. ) ; #1188 = CARTESIAN_POINT ( 'NONE', ( -4.250000000000089700, 3.799999999999910100, -0.4999999999999990600 ) ) ; #1189 = AXIS2_PLACEMENT_3D ( 'NONE', #2826, #776, #732 ) ; #1190 = FACE_OUTER_BOUND ( 'NONE', #2049, .T. ) ; #1191 = DIRECTION ( 'NONE', ( 1.224646799147353500E-016, 0.8480480961564267300, -0.5299192642332036800 ) ) ; #1192 = ORIENTED_EDGE ( 'NONE', *, *, #5604, .F. ) ; #1193 = CARTESIAN_POINT ( 'NONE', ( -2.749999999999090100, -5.225264837846050400, -1.998821328229262800 ) ) ; #1194 = CARTESIAN_POINT ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -13.77999999999999900 ) ) ; #1195 = VECTOR ( 'NONE', #5390, 1000.000000000000000 ) ; #1196 = CARTESIAN_POINT ( 'NONE', ( 2.018281576592562600, -2.906897123192803800, -6.230395288045437900 ) ) ; #1197 = CARTESIAN_POINT ( 'NONE', ( -9.662512969806920500, -9.539807621135009800, -13.43000000000000000 ) ) ; #1198 = VECTOR ( 'NONE', #3858, 1000.000000000000000 ) ; #1199 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #1200 = FACE_OUTER_BOUND ( 'NONE', #6739, .T. ) ; #1201 = CARTESIAN_POINT ( 'NONE', ( 1.249999999999969800, -5.343109238555895100, -7.608794663504204100 ) ) ; #1202 = VERTEX_POINT ( 'NONE', #465 ) ; #1203 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -9.900000000000000400 ) ) ; #1204 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; #1205 = PLANE ( 'NONE', #414 ) ; #1206 = EDGE_CURVE ( 'NONE', #2154, #4891, #505, .T. ) ; #1207 = FACE_OUTER_BOUND ( 'NONE', #287, .T. ) ; #1208 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -13.77999999999999900 ) ) ; #1209 = ORIENTED_EDGE ( 'NONE', *, *, #2931, .F. ) ; #1210 = CARTESIAN_POINT ( 'NONE', ( 4.000000000000000000, 4.299999999999919900, -2.700000000000001100 ) ) ; #1211 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #1212 = CARTESIAN_POINT ( 'NONE', ( 0.4769906117180048300, -2.235173569842741100, -11.08741575439269100 ) ) ; #1213 = VECTOR ( 'NONE', #6241, 1000.000000000000000 ) ; #1214 = LINE ( 'NONE', #6280, #3430 ) ; #1215 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; #1216 = ORIENTED_EDGE ( 'NONE', *, *, #2843, .T. ) ; #1217 = EDGE_CURVE ( 'NONE', #3801, #5891, #4780, .T. ) ; #1218 = CARTESIAN_POINT ( 'NONE', ( -0.9999999999999998900, -1.999999999999999800, -2.100000000000049400 ) ) ; #1219 = CARTESIAN_POINT ( 'NONE', ( 1.737129969052415800, -2.633198919194588200, -10.73913224151095300 ) ) ; #1220 = EDGE_LOOP ( 'NONE', ( #951, #4448, #2167, #5830, #6697, #668, #2893, #5787, #123, #532, #2575, #2345 ) ) ; #1221 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; #1222 = FACE_OUTER_BOUND ( 'NONE', #2088, .T. ) ; #1223 = CARTESIAN_POINT ( 'NONE', ( 3.149999999999999900, 3.857637417314162700E-016, 0.0000000000000000000 ) ) ; #1224 = AXIS2_PLACEMENT_3D ( 'NONE', #3951, #1912, #2662 ) ; #1225 = ADVANCED_FACE ( 'NONE', ( #5022 ), #4643, .T. ) ; #1226 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; #1227 = LINE ( 'NONE', #6132, #5919 ) ; #1228 = CARTESIAN_POINT ( 'NONE', ( -3.599999999999940600, -6.350000000000021000, -11.80000000000000100 ) ) ; #1229 = EDGE_CURVE ( 'NONE', #975, #3910, #1666, .T. ) ; #1230 = CARTESIAN_POINT ( 'NONE', ( 1.900000000000900100, -5.500000000000009800, -7.400000000000000400 ) ) ; #1231 = CARTESIAN_POINT ( 'NONE', ( 2.750000000000909500, -5.500000000000009800, -2.300000000000899500 ) ) ; #1232 = ORIENTED_EDGE ( 'NONE', *, *, #138, .T. ) ; #1233 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.7071067811866840200, 0.7071067811864111300 ) ) ; #1234 = CARTESIAN_POINT ( 'NONE', ( -2.560105494074500500, 0.7074274619731744100, -9.900000000000002100 ) ) ; #1235 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.5299192642332050100, -0.8480480961564259600 ) ) ; #1236 = CARTESIAN_POINT ( 'NONE', ( 1.900000000000900100, -5.500000000000008900, -11.90000000000010000 ) ) ; #1237 = CARTESIAN_POINT ( 'NONE', ( -9.662512969806920500, -8.499999999999920100, -13.23381197846500100 ) ) ; #1238 = CARTESIAN_POINT ( 'NONE', ( 2.173248591432150000, -3.137993503013000800, -3.603632002693479800 ) ) ; #1239 = ORIENTED_EDGE ( 'NONE', *, *, #6395, .T. ) ; #1240 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; #1241 = ORIENTED_EDGE ( 'NONE', *, *, #1713, .F. ) ; #1242 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #1243 = VERTEX_POINT ( 'NONE', #3140 ) ; #1244 = VECTOR ( 'NONE', #968, 1000.000000000000000 ) ; #1245 = ADVANCED_FACE ( 'NONE', ( #3385 ), #6357, .F. ) ; #1246 = ORIENTED_EDGE ( 'NONE', *, *, #4024, .T. ) ; #1247 = CARTESIAN_POINT ( 'NONE', ( 4.499999999999950300, 0.0000000000000000000, -3.499999999999999600 ) ) ; #1248 = VECTOR ( 'NONE', #6579, 1000.000000000000000 ) ; #1249 = EDGE_LOOP ( 'NONE', ( #864, #3202, #5844, #4844 ) ) ; #1250 = CARTESIAN_POINT ( 'NONE', ( -0.09082051499151855300, -2.625380078008650900, -10.81352354616370100 ) ) ; #1251 = ADVANCED_FACE ( 'NONE', ( #3127 ), #1060, .F. ) ; #1252 = CARTESIAN_POINT ( 'NONE', ( -1.550000000000830000, -6.350000000000021000, -14.40000000000000200 ) ) ; #1253 = CIRCLE ( 'NONE', #5324, 0.5000000000000001100 ) ; #1254 = ORIENTED_EDGE ( 'NONE', *, *, #2529, .T. ) ; #1255 = CARTESIAN_POINT ( 'NONE', ( -1.574999999999990000, 0.0000000000000000000, -10.15000000000000000 ) ) ; #1256 = FACE_OUTER_BOUND ( 'NONE', #5521, .T. ) ; #1257 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #1258 = CARTESIAN_POINT ( 'NONE', ( -1.550000000000830000, -6.350000000000020100, -14.40000000000000200 ) ) ; #1259 = CIRCLE ( 'NONE', #6757, 0.2500000000000002200 ) ; #1260 = EDGE_CURVE ( 'NONE', #3984, #5619, #5527, .T. ) ; #1261 = ORIENTED_EDGE ( 'NONE', *, *, #687, .F. ) ; #1262 = ORIENTED_EDGE ( 'NONE', *, *, #3681, .T. ) ; #1263 = CARTESIAN_POINT ( 'NONE', ( 2.750000000000909100, -3.137993503012873400, -3.603632002693442500 ) ) ; #1264 = AXIS2_PLACEMENT_3D ( 'NONE', #6509, #3336, #202 ) ; #1265 = ORIENTED_EDGE ( 'NONE', *, *, #5147, .T. ) ; #1266 = CARTESIAN_POINT ( 'NONE', ( 1.075528555105620000E-013, -5.551115123125780200E-014, -13.77999999999999900 ) ) ; #1267 = ORIENTED_EDGE ( 'NONE', *, *, #5460, .T. ) ; #1268 = CARTESIAN_POINT ( 'NONE', ( 2.289217213497130000, -2.199999999999130200, -9.800000000000000700 ) ) ; #1269 = LINE ( 'NONE', #3244, #2592 ) ; #1270 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -5.150000000000099800, -11.80000000000000100 ) ) ; #1271 = CARTESIAN_POINT ( 'NONE', ( 0.6156797390373929300, -5.299999999999280400, -4.301287885906702100 ) ) ; #1272 = ORIENTED_EDGE ( 'NONE', *, *, #469, .T. ) ; #1273 = AXIS2_PLACEMENT_3D ( 'NONE', #5921, #4266, #1088 ) ; #1274 = LINE ( 'NONE', #1348, #4836 ) ; #1275 = CARTESIAN_POINT ( 'NONE', ( 4.499999999999950300, 2.400000000000960000, -1.000000000000000000 ) ) ; #1276 = CARTESIAN_POINT ( 'NONE', ( -0.2214172874260070800, -2.631457761183785500, -10.75569825339812100 ) ) ; #1277 = CARTESIAN_POINT ( 'NONE', ( -2.650003848313224000, 2.300336605207435800E-009, -9.900000000000000400 ) ) ; #1278 = VECTOR ( 'NONE', #1173, 1000.000000000000000 ) ; #1279 = AXIS2_PLACEMENT_3D ( 'NONE', #390, #6628, #3985 ) ; #1280 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; #1281 = CARTESIAN_POINT ( 'NONE', ( -0.3692454791660876300, -2.073507570093821700, -10.42204872171020100 ) ) ; #1282 = FACE_OUTER_BOUND ( 'NONE', #4072, .T. ) ; #1283 = EDGE_LOOP ( 'NONE', ( #5698, #1752, #1086, #6126, #270 ) ) ; #1284 = ORIENTED_EDGE ( 'NONE', *, *, #961, .F. ) ; #1285 = PLANE ( 'NONE', #4246 ) ; #1286 = ADVANCED_FACE ( 'NONE', ( #4447 ), #5279, .T. ) ; #1287 = VECTOR ( 'NONE', #495, 1000.000000000000000 ) ; #1288 = ORIENTED_EDGE ( 'NONE', *, *, #2464, .F. ) ; #1289 = ORIENTED_EDGE ( 'NONE', *, *, #5421, .F. ) ; #1290 = CARTESIAN_POINT ( 'NONE', ( -4.339999999999969700, -10.19999999999910000, -11.80000000000000100 ) ) ; #1291 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; #1292 = LINE ( 'NONE', #3848, #5328 ) ; #1293 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; #1294 = LINE ( 'NONE', #3387, #6741 ) ; #1295 = ORIENTED_EDGE ( 'NONE', *, *, #72, .F. ) ; #1296 = CARTESIAN_POINT ( 'NONE', ( 4.860000000000080300, -2.559999999999050100, -9.800000000000000700 ) ) ; #1297 = EDGE_CURVE ( 'NONE', #4387, #2042, #1582, .T. ) ; #1298 = LINE ( 'NONE', #6059, #2119 ) ; #1299 = CARTESIAN_POINT ( 'NONE', ( -0.1551495837396253100, -2.627776642823093300, -10.79072175508092700 ) ) ; #1300 = FACE_OUTER_BOUND ( 'NONE', #527, .T. ) ; #1301 = CARTESIAN_POINT ( 'NONE', ( -4.000000000000000000, 3.799999999999910100, -3.499999999999999600 ) ) ; #1302 = ORIENTED_EDGE ( 'NONE', *, *, #1156, .T. ) ; #1303 = CARTESIAN_POINT ( 'NONE', ( 1.110223024625159900E-013, -2.514439197769060100, -13.40000000000000000 ) ) ; #1304 = CARTESIAN_POINT ( 'NONE', ( -1.407875798857693500, -2.582763714234368500, -11.21899116183320700 ) ) ; #1305 = CARTESIAN_POINT ( 'NONE', ( -0.4040832352734432500, -4.760199602987689200, -4.721805525395509100 ) ) ; #1306 = FACE_OUTER_BOUND ( 'NONE', #6743, .T. ) ; #1307 = EDGE_CURVE ( 'NONE', #6237, #4394, #843, .T. ) ; #1308 = CARTESIAN_POINT ( 'NONE', ( -4.500000000000060400, -2.150000000000039900, -9.750000000000000000 ) ) ; #1309 = PRODUCT ( '54-00131', '54-00131', '', ( #3042 ) ) ; #1310 = AXIS2_PLACEMENT_3D ( 'NONE', #5106, #4550, #288 ) ; #1311 = DATE_AND_TIME ( #78, #1400 ) ; #1312 = EDGE_LOOP ( 'NONE', ( #2547, #4669, #757, #3582, #3890 ) ) ; #1313 = PRODUCT_DEFINITION ( 'UNKNOWN', '', #2946, #6018 ) ; #1314 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; #1315 = CARTESIAN_POINT ( 'NONE', ( 0.1140119923364484400, -2.761658987445515300, -10.00723491955309700 ) ) ; #1316 = EDGE_CURVE ( 'NONE', #5122, #2283, #4128, .T. ) ; #1317 = CARTESIAN_POINT ( 'NONE', ( 3.999999999999999100, -6.000000000000060400, 0.0000000000000000000 ) ) ; #1318 = CARTESIAN_POINT ( 'NONE', ( 0.9999999375261770000, -5.299999999999280400, -5.100353481845612400 ) ) ; #1319 = AXIS2_PLACEMENT_3D ( 'NONE', #2091, #5705, #6249 ) ; #1320 = ORIENTED_EDGE ( 'NONE', *, *, #1072, .T. ) ; #1321 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.6819983600626269300, 0.7313537016190508900 ) ) ; #1322 = CARTESIAN_POINT ( 'NONE', ( -1.899999999998069900, -5.500000000000009800, -11.90000000000010000 ) ) ; #1323 = AXIS2_PLACEMENT_3D ( 'NONE', #5158, #3603, #3619 ) ; #1324 = ADVANCED_FACE ( 'NONE', ( #2232 ), #4618, .F. ) ; #1325 = CARTESIAN_POINT ( 'NONE', ( -1.049999999999892600, -5.538256331734733100E-014, -13.77999999999999900 ) ) ; #1326 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; #1327 = VERTEX_POINT ( 'NONE', #1687 ) ; #1328 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; #1329 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, ( #1828, #758, #3945, #2853, #239, #6049 ), .UNSPECIFIED., .F., .F., ( 4, 2, 4 ), ( 0.0000000000000000000, 0.5000000000000000000, 1.000000000000000000 ), .UNSPECIFIED. ) ; #1330 = VERTEX_POINT ( 'NONE', #116 ) ; #1331 = CARTESIAN_POINT ( 'NONE', ( 2.037134352765521200, -3.043296795206297000, -6.084124547720518800 ) ) ; #1332 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #1333 = VECTOR ( 'NONE', #6692, 1000.000000000000000 ) ; #1334 = ORIENTED_EDGE ( 'NONE', *, *, #4681, .F. ) ; #1335 = VECTOR ( 'NONE', #3395, 1000.000000000000000 ) ; #1336 = VERTEX_POINT ( 'NONE', #663 ) ; #1337 = ORIENTED_EDGE ( 'NONE', *, *, #6599, .F. ) ; #1338 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; #1339 = CARTESIAN_POINT ( 'NONE', ( -1.154921657688859200, -10.52857018883112900, -7.800000000000070900 ) ) ; #1340 = CARTESIAN_POINT ( 'NONE', ( 3.900000000000130000, -6.350000000000021000, -11.80000000000000100 ) ) ; #1341 = VERTEX_POINT ( 'NONE', #1194 ) ; #1342 = LINE ( 'NONE', #109, #2486 ) ; #1343 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, ( #4017, #5114, #5627, #419 ), .UNSPECIFIED., .F., .F., ( 4, 4 ), ( 0.0000000000000000000, 1.000000000000000000 ), .UNSPECIFIED. ) ; #1344 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #1345 = ORIENTED_EDGE ( 'NONE', *, *, #6193, .F. ) ; #1346 = LINE ( 'NONE', #2837, #3790 ) ; #1347 = VERTEX_POINT ( 'NONE', #3270 ) ; #1348 = CARTESIAN_POINT ( 'NONE', ( 2.018537944984273700, -2.068363019588706400, -4.883502816590383800 ) ) ; #1349 = CARTESIAN_POINT ( 'NONE', ( 1.249999999999969800, -8.099999999999450800, -7.599999999999920600 ) ) ; #1350 = VECTOR ( 'NONE', #1332, 1000.000000000000000 ) ; #1351 = CARTESIAN_POINT ( 'NONE', ( 4.499999999999950300, 2.400000000000960000, -2.700000000000000200 ) ) ; #1352 = EDGE_LOOP ( 'NONE', ( #3473, #4211, #6040, #4635 ) ) ; #1353 = EDGE_CURVE ( 'NONE', #2560, #2862, #1751, .T. ) ; #1354 = CARTESIAN_POINT ( 'NONE', ( 4.500000000000000900, -1.100000000000100000, -0.4999999999999990600 ) ) ; #1355 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #1356 = CARTESIAN_POINT ( 'NONE', ( 1.250000000000296400, -10.04999999999840000, 21.81166452059000000 ) ) ; #1357 = CIRCLE ( 'NONE', #2196, 0.6099999999999998800 ) ; #1358 = EDGE_CURVE ( 'NONE', #2914, #4679, #2155, .T. ) ; #1359 = ORIENTED_EDGE ( 'NONE', *, *, #6531, .T. ) ; #1360 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; #1361 = CARTESIAN_POINT ( 'NONE', ( -4.500000000000060400, -6.000000000000060400, -11.80000000000000100 ) ) ; #1362 = VERTEX_POINT ( 'NONE', #6427 ) ; #1363 = VERTEX_POINT ( 'NONE', #6503 ) ; #1364 = EDGE_CURVE ( 'NONE', #1031, #5520, #3294, .T. ) ; #1365 = CYLINDRICAL_SURFACE ( 'NONE', #1990, 1.000000000000000000 ) ; #1366 = CARTESIAN_POINT ( 'NONE', ( 2.008945315273840600, -2.014809754593124900, -4.983292211824341700 ) ) ; #1367 = VERTEX_POINT ( 'NONE', #2280 ) ; #1368 = CARTESIAN_POINT ( 'NONE', ( -0.7620405893242855300, -11.05562143337195700, -7.800000000000068200 ) ) ; #1369 = AXIS2_PLACEMENT_3D ( 'NONE', #2595, #3683, #3133 ) ; #1370 = VECTOR ( 'NONE', #1150, 1000.000000000000100 ) ; #1371 = ORIENTED_EDGE ( 'NONE', *, *, #3767, .F. ) ; #1372 = PLANE ( 'NONE', #2854 ) ; #1373 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; #1374 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.7071067811869580200, 0.7071067811861369000 ) ) ; #1375 = FACE_OUTER_BOUND ( 'NONE', #847, .T. ) ; #1376 = ORIENTED_EDGE ( 'NONE', *, *, #5971, .F. ) ; #1377 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.8660254037844553600, -0.4999999999999711300 ) ) ; #1378 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; #1379 = EDGE_LOOP ( 'NONE', ( #2071, #3775, #4159, #2412 ) ) ; #1380 = ORIENTED_EDGE ( 'NONE', *, *, #1446, .T. ) ; #1381 = CARTESIAN_POINT ( 'NONE', ( -0.4769906117180047200, -2.235173569842738400, -11.08741575439269200 ) ) ; #1383 = ORIENTED_EDGE ( 'NONE', *, *, #2974, .F. ) ; #1382 = FACE_OUTER_BOUND ( 'NONE', #4271, .T. ) ; #1384 = ORIENTED_EDGE ( 'NONE', *, *, #3721, .F. ) ; #1385 = ADVANCED_FACE ( 'NONE', ( #2724 ), #146, .T. ) ; #1386 = EDGE_CURVE ( 'NONE', #3782, #5341, #4359, .T. ) ; #1387 = LINE ( 'NONE', #6335, #6161 ) ; #1388 = CIRCLE ( 'NONE', #649, 2.299999999999999800 ) ; #1389 = ORIENTED_EDGE ( 'NONE', *, *, #3660, .T. ) ; #1390 = CARTESIAN_POINT ( 'NONE', ( -2.749999999999090100, -4.700000903659367100, -1.699610252709137700 ) ) ; #1391 = CARTESIAN_POINT ( 'NONE', ( -2.020306852616668500, -2.196195990890824000, -5.053872994618164900 ) ) ; #1392 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; #1393 = CARTESIAN_POINT ( 'NONE', ( -3.199999999999980600, -2.599999999999050200, -9.750000000000000000 ) ) ; #1394 = LINE ( 'NONE', #2086, #3356 ) ; #1395 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; #1396 = CARTESIAN_POINT ( 'NONE', ( 2.912473175842136300, -1.200000000000009300, -9.400000000000000400 ) ) ; #1397 = VERTEX_POINT ( 'NONE', #6405 ) ; #1398 = EDGE_CURVE ( 'NONE', #5725, #6631, #6202, .T. ) ; #1399 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, ( #4838, #1778, #6420, #2297 ), .UNSPECIFIED., .F., .F., ( 4, 4 ), ( 0.0000000000000000000, 1.000000000000000000 ), .UNSPECIFIED. ) ; #1400 = LOCAL_TIME ( 16, 54, 2.000000000000000000, #6423 ) ; #1401 = EDGE_CURVE ( 'NONE', #261, #2182, #2205, .T. ) ; #1402 = ORIENTED_EDGE ( 'NONE', *, *, #4659, .F. ) ; #1403 = CARTESIAN_POINT ( 'NONE', ( 2.650076625558015500, -0.1069511611476109300, -9.900000000000002100 ) ) ; #1404 = CARTESIAN_POINT ( 'NONE', ( 1.549999999999829700, -5.500000000000009800, -11.80000000000000100 ) ) ; #1405 = EDGE_CURVE ( 'NONE', #5736, #5713, #4276, .T. ) ; #1406 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.7071067811866840200, -0.7071067811864111300 ) ) ; #1407 = CARTESIAN_POINT ( 'NONE', ( -1.715450641140988700, -2.625873061647797900, -10.80883312015090200 ) ) ; #1408 = CARTESIAN_POINT ( 'NONE', ( 4.860000000000080300, -2.559999999999050100, -11.80000000000000100 ) ) ; #1409 = ORIENTED_EDGE ( 'NONE', *, *, #1501, .T. ) ; #1410 = AXIS2_PLACEMENT_3D ( 'NONE', #1643, #2183, #2753 ) ; #1411 = CARTESIAN_POINT ( 'NONE', ( 1.990956207485771400, -2.015885629763643400, -5.332869074834335700 ) ) ; #1412 = CC_DESIGN_DATE_AND_TIME_ASSIGNMENT ( #819, #6230, ( #1313 ) ) ; #1413 = CARTESIAN_POINT ( 'NONE', ( 1.050000000000107700, -5.551115123125780200E-014, -13.42000000000000000 ) ) ; #1414 = AXIS2_PLACEMENT_3D ( 'NONE', #6162, #4600, #2001 ) ; #1415 = EDGE_LOOP ( 'NONE', ( #62, #5289, #3662, #5021, #2424, #5208, #5528, #4559 ) ) ; #1416 = LINE ( 'NONE', #4068, #4806 ) ; #1417 = ORIENTED_EDGE ( 'NONE', *, *, #5145, .T. ) ; #1418 = CARTESIAN_POINT ( 'NONE', ( 2.632033191043762000, 0.3572060135528134000, -9.900000000000000400 ) ) ; #1419 = ORIENTED_EDGE ( 'NONE', *, *, #5220, .F. ) ; #1420 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; #1421 = PLANE ( 'NONE', #3459 ) ; #1422 = FACE_OUTER_BOUND ( 'NONE', #2803, .T. ) ; #1423 = VERTEX_POINT ( 'NONE', #719 ) ; #1424 = VECTOR ( 'NONE', #4005, 1000.000000000000000 ) ; #1425 = VERTEX_POINT ( 'NONE', #3853 ) ; #1426 = PLANE ( 'NONE', #4469 ) ; #1427 = ORIENTED_EDGE ( 'NONE', *, *, #6167, .T. ) ; #1428 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; #1429 = ORIENTED_EDGE ( 'NONE', *, *, #4998, .F. ) ; #1430 = VECTOR ( 'NONE', #2973, 1000.000000000000000 ) ; #1431 = ORIENTED_EDGE ( 'NONE', *, *, #559, .T. ) ; #1432 = CARTESIAN_POINT ( 'NONE', ( 1.200000000000089900, -3.100000000000049400, -13.77999999999999900 ) ) ; #1433 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #1434 = EDGE_CURVE ( 'NONE', #4682, #67, #1839, .T. ) ; #1435 = CARTESIAN_POINT ( 'NONE', ( -2.989999999999950000, -2.559999999999050100, -11.80000000000000100 ) ) ; #1436 = ORIENTED_EDGE ( 'NONE', *, *, #4772, .F. ) ; #1437 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #1438 = LINE ( 'NONE', #1910, #4955 ) ; #1439 = APPROVAL_ROLE ( '' ) ; #1440 = CARTESIAN_POINT ( 'NONE', ( 18.18468237128200100, -2.582763714337620100, -11.21899116184400000 ) ) ; #1441 = ORIENTED_EDGE ( 'NONE', *, *, #2974, .T. ) ; #1442 = ADVANCED_FACE ( 'NONE', ( #3545 ), #5449, .F. ) ; #1443 = CARTESIAN_POINT ( 'NONE', ( 0.3530744405371473700, -2.686222669875017100, -10.23464495280700100 ) ) ; #1444 = CARTESIAN_POINT ( 'NONE', ( 2.367049551025112400, 1.204811792319891600, -9.900000000000002100 ) ) ; #1445 = LINE ( 'NONE', #5154, #379 ) ; #1446 = EDGE_CURVE ( 'NONE', #5891, #3386, #987, .T. ) ; #1447 = ORIENTED_EDGE ( 'NONE', *, *, #683, .F. ) ; #1448 = CARTESIAN_POINT ( 'NONE', ( 3.200000000000979800, -5.150000000000099800, -5.299999999999999800 ) ) ; #1449 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #1450 = LINE ( 'NONE', #5486, #4073 ) ; #1451 = AXIS2_PLACEMENT_3D ( 'NONE', #2304, #2888, #3372 ) ; #1452 = CARTESIAN_POINT ( 'NONE', ( 4.860000000000080300, -10.19999999999910000, -9.800000000000000700 ) ) ; #1453 = ORIENTED_EDGE ( 'NONE', *, *, #3286, .F. ) ; #1454 = FACE_OUTER_BOUND ( 'NONE', #2482, .T. ) ; #1455 = CARTESIAN_POINT ( 'NONE', ( 4.000000000000000000, 3.799999999999910100, 8.673617379884035500E-016 ) ) ; #1456 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; #1457 = AXIS2_PLACEMENT_3D ( 'NONE', #6328, #3629, #5179 ) ; #1458 = FACE_OUTER_BOUND ( 'NONE', #4057, .T. ) ; #1459 = VERTEX_POINT ( 'NONE', #6075 ) ; #1460 = EDGE_CURVE ( 'NONE', #2323, #898, #6239, .T. ) ; #1461 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #1462 = CARTESIAN_POINT ( 'NONE', ( -4.339999999999969700, -10.19999999999910000, -11.80000000000000100 ) ) ; #1463 = CARTESIAN_POINT ( 'NONE', ( -1.990811574826971900, -2.031113863166042600, -5.360036102082228000 ) ) ; #1464 = VECTOR ( 'NONE', #5161, 1000.000000000000000 ) ; #1465 = ORIENTED_EDGE ( 'NONE', *, *, #249, .F. ) ; #1466 = CARTESIAN_POINT ( 'NONE', ( 2.804496749660246600, -1.434328407703449500, -9.400000000000000400 ) ) ; #1467 = AXIS2_PLACEMENT_3D ( 'NONE', #1931, #4076, #5551 ) ; #1468 = CYLINDRICAL_SURFACE ( 'NONE', #5683, 0.5000000000000005600 ) ; #1469 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #1470 = CYLINDRICAL_SURFACE ( 'NONE', #51, 1.479999999999990000 ) ; #1471 = CARTESIAN_POINT ( 'NONE', ( 0.7059842354922338800, 2.555685623184715400, -9.899999999999996800 ) ) ; #1472 = ORIENTED_EDGE ( 'NONE', *, *, #4684, .T. ) ; #1473 = PLANE ( 'NONE', #2790 ) ; #1474 = CARTESIAN_POINT ( 'NONE', ( 4.000000000000000000, 4.299999999999912800, -0.4999999999999988300 ) ) ; #1475 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; #1476 = LINE ( 'NONE', #3271, #2949 ) ; #1477 = LINE ( 'NONE', #1325, #3090 ) ; #1478 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.9945218953683004900, -0.1045284632673960500 ) ) ; #1479 = EDGE_CURVE ( 'NONE', #1425, #895, #761, .T. ) ; #1480 = CARTESIAN_POINT ( 'NONE', ( -1.698933170589895300, -2.621244199088407000, -10.85287380554949800 ) ) ; #1481 = ADVANCED_FACE ( 'NONE', ( #1511 ), #1285, .T. ) ; #1482 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000089900, -8.951431429984921800, -8.265725857539040400 ) ) ; #1483 = CARTESIAN_POINT ( 'NONE', ( 2.020389974801648900, -2.196707847678151600, -5.053084804284873500 ) ) ; #1484 = LINE ( 'NONE', #1576, #76 ) ; #1485 = CARTESIAN_POINT ( 'NONE', ( -1.479999999999979600, -9.542487113058909300, -13.42000000000000000 ) ) ; #1486 = ORIENTED_EDGE ( 'NONE', *, *, #3670, .T. ) ; #1487 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #1488 = CARTESIAN_POINT ( 'NONE', ( 0.9999999375261770000, -5.299999999999280400, -5.100353481845612400 ) ) ; #1489 = CARTESIAN_POINT ( 'NONE', ( -4.500000000000060400, -6.000000000000060400, -11.80000000000000100 ) ) ; #1490 = CARTESIAN_POINT ( 'NONE', ( -1.777709254451546500, -2.831868875732335100, -10.76226831563597500 ) ) ; #1491 = EDGE_CURVE ( 'NONE', #252, #2661, #437, .T. ) ; #1492 = ORIENTED_EDGE ( 'NONE', *, *, #5738, .T. ) ; #1493 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; #1494 = CARTESIAN_POINT ( 'NONE', ( -1.188131617774545300, 2.370354038412110200, -9.900000000000000400 ) ) ; #1495 = CARTESIAN_POINT ( 'NONE', ( -3.899999999999789900, -6.049999999999999800, -11.80000000000000100 ) ) ; #1496 = CARTESIAN_POINT ( 'NONE', ( 1.249999999999970200, -8.950941836911733100, -8.266215450612238100 ) ) ; #1497 = PLANE ( 'NONE', #2060 ) ; #1498 = VERTEX_POINT ( 'NONE', #1258 ) ; #1499 = EDGE_CURVE ( 'NONE', #596, #6244, #1329, .T. ) ; #1500 = PLANE ( 'NONE', #1877 ) ; #1501 = EDGE_CURVE ( 'NONE', #5348, #3633, #670, .T. ) ; #1502 = AXIS2_PLACEMENT_3D ( 'NONE', #5006, #3401, #4959 ) ; #1503 = ORIENTED_EDGE ( 'NONE', *, *, #1570, .T. ) ; #1504 = VERTEX_POINT ( 'NONE', #255 ) ; #1505 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #1506 = CARTESIAN_POINT ( 'NONE', ( -1.899999999998069900, -5.299999999999280400, -7.400000000000000400 ) ) ; #1507 = CARTESIAN_POINT ( 'NONE', ( -3.549999999999000200, -5.500000000000009800, -11.90000000000010000 ) ) ; #1508 = LINE ( 'NONE', #3169, #5129 ) ; #1509 = CARTESIAN_POINT ( 'NONE', ( -1.990573261690334700, -2.104591547643897900, -5.482233235153197300 ) ) ; #1510 = EDGE_LOOP ( 'NONE', ( #3308, #3420, #5472, #725 ) ) ; #1511 = FACE_OUTER_BOUND ( 'NONE', #6035, .T. ) ; #1512 = ORIENTED_EDGE ( 'NONE', *, *, #818, .F. ) ; #1513 = CARTESIAN_POINT ( 'NONE', ( -9.662512969806920500, -3.100000000000049800, -13.77999999999999900 ) ) ; #1514 = ORIENTED_EDGE ( 'NONE', *, *, #3606, .F. ) ; #1515 = ORIENTED_EDGE ( 'NONE', *, *, #440, .T. ) ; #1516 = VECTOR ( 'NONE', #3822, 1000.000000000000000 ) ; #1517 = CARTESIAN_POINT ( 'NONE', ( -4.500000000000000900, -6.000000000000062200, -0.5000000000000004400 ) ) ; #1518 = ORIENTED_EDGE ( 'NONE', *, *, #199, .T. ) ; #1519 = VECTOR ( 'NONE', #4960, 1000.000000000000000 ) ; #1520 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #1521 = ORIENTED_EDGE ( 'NONE', *, *, #6809, .T. ) ; #1522 = CYLINDRICAL_SURFACE ( 'NONE', #531, 0.5000000000000005600 ) ; #1523 = EDGE_LOOP ( 'NONE', ( #1125, #6008, #804, #6441, #5718, #5650, #767, #1518, #1559, #192, #5195, #763, #6706, #6625, #1472, #6061 ) ) ; #1524 = CARTESIAN_POINT ( 'NONE', ( -1.199999999999900300, -1.962141687034909100, -13.77999999999999900 ) ) ; #1525 = AXIS2_PLACEMENT_3D ( 'NONE', #5095, #3507, #399 ) ; #1526 = VERTEX_POINT ( 'NONE', #2373 ) ; #1527 = LINE ( 'NONE', #3371, #2910 ) ; #1528 = EDGE_LOOP ( 'NONE', ( #6110, #104, #3639, #1538 ) ) ; #1529 = CARTESIAN_POINT ( 'NONE', ( 2.750000000000909900, -5.299999999999280400, -5.600000000000860300 ) ) ; #1530 = EDGE_CURVE ( 'NONE', #6150, #6381, #2970, .T. ) ; #1531 = CARTESIAN_POINT ( 'NONE', ( 2.890671664372520300, -2.430323138703160100, -9.800000000000004300 ) ) ; #1532 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; #1533 = ORIENTED_EDGE ( 'NONE', *, *, #3618, .F. ) ; #1534 = EDGE_CURVE ( 'NONE', #4863, #645, #4527, .T. ) ; #1535 = VECTOR ( 'NONE', #3095, 1000.000000000000100 ) ; #1536 = VERTEX_POINT ( 'NONE', #828 ) ; #1537 = LINE ( 'NONE', #5447, #3329 ) ; #1538 = ORIENTED_EDGE ( 'NONE', *, *, #5793, .T. ) ; #1539 = CARTESIAN_POINT ( 'NONE', ( -4.500000000000000900, -6.000000000000060400, -0.5000000000000004400 ) ) ; #1540 = CARTESIAN_POINT ( 'NONE', ( 1.549999999999830000, -1.100000000000100000, -11.80000000000000100 ) ) ; #1541 = EDGE_CURVE ( 'NONE', #2645, #2900, #926, .T. ) ; #1542 = CARTESIAN_POINT ( 'NONE', ( -1.199999999999915400, -1.962141687034900000, -13.77999999999999900 ) ) ; #1543 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #1544 = VECTOR ( 'NONE', #3465, 1000.000000000000000 ) ; #1545 = ORIENTED_EDGE ( 'NONE', *, *, #308, .T. ) ; #1546 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; #1547 = CARTESIAN_POINT ( 'NONE', ( 2.750000000000909100, -5.225406742014143000, -1.999397186932822000 ) ) ; #1548 = CC_DESIGN_PERSON_AND_ORGANIZATION_ASSIGNMENT ( #1732, #6186, ( #2946 ) ) ; #1549 = LINE ( 'NONE', #1138, #4661 ) ; #1550 = VERTEX_POINT ( 'NONE', #1894 ) ; #1551 = EDGE_CURVE ( 'NONE', #5341, #6073, #4197, .T. ) ; #1552 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -14.10000000000000000 ) ) ; #1553 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000091300, -8.204397331752264900, -7.621554619278176000 ) ) ; #1554 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #1555 = LINE ( 'NONE', #3794, #4410 ) ; #1556 = LINE ( 'NONE', #1564, #2203 ) ; #1557 = ORIENTED_EDGE ( 'NONE', *, *, #2852, .F. ) ; #1558 = AXIS2_PLACEMENT_3D ( 'NONE', #4923, #2309, #3363 ) ; #1559 = ORIENTED_EDGE ( 'NONE', *, *, #3805, .T. ) ; #1560 =( BOUNDED_SURFACE ( ) B_SPLINE_SURFACE ( 3, 3, ( ( #5092, #2411, #1908, #5561 ), ( #6632, #6114, #2957, #3503 ), ( #897, #343, #873, #2460 ), ( #5069, #371, #4036, #4561 ) ), .UNSPECIFIED., .F., .F., .F. ) B_SPLINE_SURFACE_WITH_KNOTS ( ( 4, 4 ), ( 4, 4 ), ( 0.0000000000000000000, 1.000000000000000000 ), ( 0.0000000000000000000, 1.000000000000000000 ), .UNSPECIFIED. ) GEOMETRIC_REPRESENTATION_ITEM ( ) RATIONAL_B_SPLINE_SURFACE ( ( ( 1.000000000000000000, 0.8047378541243652700, 0.8047378541243652700, 1.000000000000000000), ( 0.8047378541243649400, 0.6476030138606879700, 0.6476030138606879700, 0.8047378541243649400), ( 0.8047378541243649400, 0.6476030138606879700, 0.6476030138606879700, 0.8047378541243649400), ( 1.000000000000000000, 0.8047378541243652700, 0.8047378541243652700, 1.000000000000000000) ) ) REPRESENTATION_ITEM ( '' ) SURFACE ( ) ); #1561 = LINE ( 'NONE', #4512, #5833 ) ; #1562 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; #1563 = ORIENTED_EDGE ( 'NONE', *, *, #3940, .F. ) ; #1564 = CARTESIAN_POINT ( 'NONE', ( -1.199999999999930000, -3.100000000000049800, -13.42000000000000000 ) ) ; #1565 = CARTESIAN_POINT ( 'NONE', ( -0.4785488709735297700, -11.20493010742174000, -7.599999999999869100 ) ) ; #1566 = PERSON_AND_ORGANIZATION ( #2374, #4427 ) ; #1567 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; #1568 = CARTESIAN_POINT ( 'NONE', ( 2.750000000000909900, -5.178849540531037300, -1.930152144294614600 ) ) ; #1569 = CARTESIAN_POINT ( 'NONE', ( 3.229209978830353200, -2.559999999999050100, -9.800000000000000700 ) ) ; #1570 = EDGE_CURVE ( 'NONE', #1550, #3788, #5444, .T. ) ; #1571 = ORIENTED_EDGE ( 'NONE', *, *, #2699, .T. ) ; #1572 = CARTESIAN_POINT ( 'NONE', ( 3.600000000000160000, -6.350000000000021000, -13.44999999999999900 ) ) ; #1573 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; #1574 = ORIENTED_EDGE ( 'NONE', *, *, #3064, .T. ) ; #1575 = CARTESIAN_POINT ( 'NONE', ( -2.024980546198106500, -3.262063269921839900, -6.669242063142889700 ) ) ; #1576 = CARTESIAN_POINT ( 'NONE', ( -2.500000000000060000, 2.400000000000960000, -1.000000000000000000 ) ) ; #1577 = EDGE_CURVE ( 'NONE', #389, #252, #18, .T. ) ; #1578 = VERTEX_POINT ( 'NONE', #1987 ) ; #1579 = AXIS2_PLACEMENT_3D ( 'NONE', #5854, #3762, #2193 ) ; #1580 = ORIENTED_EDGE ( 'NONE', *, *, #528, .F. ) ; #1581 = CARTESIAN_POINT ( 'NONE', ( -2.500000000000060000, 2.400000000000960000, -2.699999999999999700 ) ) ; #1582 = LINE ( 'NONE', #1575, #593 ) ; #1583 = ORIENTED_EDGE ( 'NONE', *, *, #6024, .F. ) ; #1584 = EDGE_CURVE ( 'NONE', #426, #3620, #1416, .T. ) ; #1585 = EDGE_CURVE ( 'NONE', #1779, #6604, #4479, .T. ) ; #1586 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #1587 = ADVANCED_FACE ( 'NONE', ( #3495 ), #1426, .T. ) ; #1588 = ORIENTED_EDGE ( 'NONE', *, *, #2550, .T. ) ; #1589 = VECTOR ( 'NONE', #2129, 1000.000000000000000 ) ; #1590 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; #1591 = ORIENTED_EDGE ( 'NONE', *, *, #5664, .T. ) ; #1592 = VECTOR ( 'NONE', #2382, 1000.000000000000100 ) ; #1593 = ORIENTED_EDGE ( 'NONE', *, *, #4509, .F. ) ; #1594 = CARTESIAN_POINT ( 'NONE', ( 18.18468237128200100, -9.112132034355575200, -8.387867965643994900 ) ) ; #1595 = EDGE_LOOP ( 'NONE', ( #557, #3489, #1924, #1781, #3397, #2354 ) ) ; #1596 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000090200, -5.500000000000446800, -7.400000000000001200 ) ) ; #1597 = ADVANCED_FACE ( 'NONE', ( #5478 ), #3756, .T. ) ; #1598 = VECTOR ( 'NONE', #6675, 1000.000000000000000 ) ; #1599 = DIRECTION ( 'NONE', ( -0.5197153285318708600, -0.8543394976758417200, 0.0000000000000000000 ) ) ; #1600 = PLANE ( 'NONE', #53 ) ; #1601 = VERTEX_POINT ( 'NONE', #5096 ) ; #1602 = CARTESIAN_POINT ( 'NONE', ( 4.500000000000060400, -2.559999999999050100, -11.80000000000000100 ) ) ; #1603 = ORIENTED_EDGE ( 'NONE', *, *, #1854, .T. ) ; #1604 = CYLINDRICAL_SURFACE ( 'NONE', #2427, 0.1999999999999996500 ) ; #1605 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #1606 = ORIENTED_EDGE ( 'NONE', *, *, #5768, .F. ) ; #1607 = CARTESIAN_POINT ( 'NONE', ( 1.220745125442683300, -10.36250397190924300, -7.599999999999870000 ) ) ; #1608 =( BOUNDED_SURFACE ( ) B_SPLINE_SURFACE ( 3, 3, ( ( #6302, #4144, #5692, #4163 ), ( #3102, #4670, #4186, #1042 ), ( #452, #999, #4714, #2630 ), ( #981, #5177, #1517, #1539 ) ), .UNSPECIFIED., .F., .F., .F. ) B_SPLINE_SURFACE_WITH_KNOTS ( ( 4, 4 ), ( 4, 4 ), ( 0.0000000000000000000, 1.000000000000000000 ), ( 0.0000000000000000000, 1.000000000000000000 ), .UNSPECIFIED. ) GEOMETRIC_REPRESENTATION_ITEM ( ) RATIONAL_B_SPLINE_SURFACE ( ( ( 1.000000000000000000, 0.8047378541243652700, 0.8047378541243652700, 1.000000000000000000), ( 0.8047378541243649400, 0.6476030138606879700, 0.6476030138606879700, 0.8047378541243649400), ( 0.8047378541243649400, 0.6476030138606879700, 0.6476030138606879700, 0.8047378541243649400), ( 1.000000000000000000, 0.8047378541243652700, 0.8047378541243652700, 1.000000000000000000) ) ) REPRESENTATION_ITEM ( '' ) SURFACE ( ) ); #1609 = ORIENTED_EDGE ( 'NONE', *, *, #4390, .F. ) ; #1610 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; #1611 = LINE ( 'NONE', #4259, #4721 ) ; #1612 = ORIENTED_EDGE ( 'NONE', *, *, #6624, .T. ) ; #1613 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #1614 = FACE_OUTER_BOUND ( 'NONE', #6029, .T. ) ; #1615 = CARTESIAN_POINT ( 'NONE', ( -1.049999999999889000, -5.538256331734733100E-014, -13.40000000000000000 ) ) ; #1616 = VECTOR ( 'NONE', #216, 1000.000000000000000 ) ; #1617 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #1618 = EDGE_CURVE ( 'NONE', #6788, #1423, #711, .T. ) ; #1619 = CARTESIAN_POINT ( 'NONE', ( 2.750000000000909900, -2.759018883301891800, -3.819986050005609100 ) ) ; #1620 = CARTESIAN_POINT ( 'NONE', ( 4.500000000000000900, -6.000000000000060400, -0.4999999999999995600 ) ) ; #1621 = FACE_OUTER_BOUND ( 'NONE', #4662, .T. ) ; #1622 = ORIENTED_EDGE ( 'NONE', *, *, #171, .F. ) ; #1623 = CARTESIAN_POINT ( 'NONE', ( 2.017425678221966400, -3.061378175213334000, -6.494167143409676200 ) ) ; #1624 = EDGE_LOOP ( 'NONE', ( #4379, #5333, #3935, #1109 ) ) ; #1625 = ADVANCED_FACE ( 'NONE', ( #5061 ), #4542, .F. ) ; #1626 = FACE_OUTER_BOUND ( 'NONE', #6605, .T. ) ; #1627 = EDGE_LOOP ( 'NONE', ( #6716, #5241 ) ) ; #1628 = EDGE_CURVE ( 'NONE', #2900, #6556, #4077, .T. ) ; #1629 = CARTESIAN_POINT ( 'NONE', ( 1.249999999999970000, -8.202368927061627300, -7.619526214587581100 ) ) ; #1630 = PLANE ( 'NONE', #4252 ) ; #1631 = AXIS2_PLACEMENT_3D ( 'NONE', #765, #4521, #1392 ) ; #1632 = CARTESIAN_POINT ( 'NONE', ( 0.1121076653245808700, -2.706528140139976100, -10.04147890228909600 ) ) ; #1633 = LINE ( 'NONE', #4976, #1878 ) ; #1634 = ADVANCED_FACE ( 'NONE', ( #4729 ), #3653, .T. ) ; #1635 = FACE_OUTER_BOUND ( 'NONE', #4912, .T. ) ; #1636 = ORIENTED_EDGE ( 'NONE', *, *, #3719, .T. ) ; #1637 = CARTESIAN_POINT ( 'NONE', ( 1.549999999999830000, -6.500000000000060400, -7.349999999999999600 ) ) ; #1638 = APPROVAL ( #6713, 'UNSPECIFIED' ) ; #1639 = ORIENTED_EDGE ( 'NONE', *, *, #429, .F. ) ; #1640 = VECTOR ( 'NONE', #2439, 1000.000000000000000 ) ; #1641 = LINE ( 'NONE', #3989, #631 ) ; #1642 = CARTESIAN_POINT ( 'NONE', ( 2.090790021169707500, -2.559999999999080300, -2.779157999888000100 ) ) ; #1643 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 1.249999999999970000, -9.150000000000000400 ) ) ; #1644 = CARTESIAN_POINT ( 'NONE', ( 1.110223024625159900E-013, 0.04999999999993900300, -13.40000000000000000 ) ) ; #1645 = FACE_OUTER_BOUND ( 'NONE', #5625, .T. ) ; #1646 = CARTESIAN_POINT ( 'NONE', ( 4.499999999999950300, 3.799999999999910100, -1.000000000000000900 ) ) ; #1647 = ORIENTED_EDGE ( 'NONE', *, *, #5847, .F. ) ; #1648 = LINE ( 'NONE', #1317, #986 ) ; #1649 = CARTESIAN_POINT ( 'NONE', ( -2.758902628921533500E-007, -2.802243067704871300, -9.981875171623595800 ) ) ; #1650 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000197400, -10.04999999999840000, -7.599999999999870900 ) ) ; #1651 = CARTESIAN_POINT ( 'NONE', ( 4.499999999999950300, -2.599999999999050200, -11.79999999999999900 ) ) ; #1652 = ORIENTED_EDGE ( 'NONE', *, *, #3021, .T. ) ; #1653 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; #1654 = EDGE_CURVE ( 'NONE', #3464, #4816, #6233, .T. ) ; #1655 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.8660254037844611300, -0.4999999999999610900 ) ) ; #1656 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; #1657 = CARTESIAN_POINT ( 'NONE', ( 3.650000000000929800, -5.150000000000099800, -5.299999999999999800 ) ) ; #1658 = ADVANCED_FACE ( 'NONE', ( #220 ), #826, .T. ) ; #1659 = ORIENTED_EDGE ( 'NONE', *, *, #3813, .F. ) ; #1660 = CARTESIAN_POINT ( 'NONE', ( 2.037134352765521200, -3.043296795206297000, -6.084124547720518800 ) ) ; #1661 = ORIENTED_EDGE ( 'NONE', *, *, #5758, .T. ) ; #1662 = EDGE_CURVE ( 'NONE', #5736, #6178, #2028, .T. ) ; #1663 = LINE ( 'NONE', #5244, #3063 ) ; #1664 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; #1665 = ORIENTED_EDGE ( 'NONE', *, *, #2529, .F. ) ; #1666 = CIRCLE ( 'NONE', #2281, 3.899999999999999900 ) ; #1667 = VERTEX_POINT ( 'NONE', #5964 ) ; #1668 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #1669 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; #1670 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000091300, -5.595280244880285600, -7.799999999998890500 ) ) ; #1671 = CARTESIAN_POINT ( 'NONE', ( 4.499999999999950300, 3.799999999999910100, -9.750000000000000000 ) ) ; #1672 = VECTOR ( 'NONE', #5860, 1000.000000000000000 ) ; #1673 = VERTEX_POINT ( 'NONE', #2808 ) ; #1674 = CARTESIAN_POINT ( 'NONE', ( 3.200000000000980300, -5.500000000000009800, -0.9999999999999988900 ) ) ; #1675 = CIRCLE ( 'NONE', #741, 1.575000000000000000 ) ; #1676 = EDGE_CURVE ( 'NONE', #3705, #4275, #3332, .T. ) ; #1677 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #1678 = AXIS2_PLACEMENT_3D ( 'NONE', #3585, #1493, #5712 ) ; #1679 = EDGE_LOOP ( 'NONE', ( #1852, #3000, #5445, #1533 ) ) ; #1680 = ADVANCED_FACE ( 'NONE', ( #6479 ), #6502, .T. ) ; #1681 = CARTESIAN_POINT ( 'NONE', ( -2.989999999999950000, -2.559999999999050100, -9.800000000000000700 ) ) ; #1682 = VECTOR ( 'NONE', #2637, 1000.000000000000000 ) ; #1683 = ORIENTED_EDGE ( 'NONE', *, *, #1182, .F. ) ; #1684 = ORIENTED_EDGE ( 'NONE', *, *, #1037, .F. ) ; #1685 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #1686 = CARTESIAN_POINT ( 'NONE', ( 1.050000000000111100, -5.551115123125780200E-014, -11.80000000000000100 ) ) ; #1687 = CARTESIAN_POINT ( 'NONE', ( -4.500000000000060400, 2.400000000000960000, -2.700000000000000600 ) ) ; #1688 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.8386705679435376700, 0.5446390350179318700 ) ) ; #1689 = ORIENTED_EDGE ( 'NONE', *, *, #2950, .F. ) ; #1690 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; #1691 = LINE ( 'NONE', #5542, #121 ) ; #1692 = ORIENTED_EDGE ( 'NONE', *, *, #2103, .T. ) ; #1693 = PLANE ( 'NONE', #5554 ) ; #1694 = PLANE ( 'NONE', #3278 ) ; #1695 = LINE ( 'NONE', #1531, #5720 ) ; #1696 = CARTESIAN_POINT ( 'NONE', ( 2.750000000000909900, -4.689212032310580400, -1.500072740962020000 ) ) ; #1697 = ORIENTED_EDGE ( 'NONE', *, *, #774, .T. ) ; #1698 = VECTOR ( 'NONE', #2740, 1000.000000000000000 ) ; #1699 = ORIENTED_EDGE ( 'NONE', *, *, #295, .F. ) ; #1700 = ADVANCED_FACE ( 'NONE', ( #5647 ), #1717, .T. ) ; #1701 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; #1702 = ORIENTED_EDGE ( 'NONE', *, *, #3670, .F. ) ; #1703 = CARTESIAN_POINT ( 'NONE', ( -1.199999999999930200, -3.100000000000049400, -13.77999999999999900 ) ) ; #1704 = LINE ( 'NONE', #1270, #6142 ) ; #1705 = ORIENTED_EDGE ( 'NONE', *, *, #2359, .F. ) ; #1706 = EDGE_CURVE ( 'NONE', #4650, #2961, #3824, .T. ) ; #1707 = CARTESIAN_POINT ( 'NONE', ( -4.339999999999969700, -2.199999999999130200, -9.800000000000000700 ) ) ; #1708 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000060000, -5.350000000000021000, -13.44999999999999900 ) ) ; #1709 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -14.10000000000000000 ) ) ; #1711 = VERTEX_POINT ( 'NONE', #1228 ) ; #1710 = VECTOR ( 'NONE', #2455, 1000.000000000000000 ) ; #1712 = VERTEX_POINT ( 'NONE', #5972 ) ; #1713 = EDGE_CURVE ( 'NONE', #2820, #5736, #2846, .T. ) ; #1714 = AXIS2_PLACEMENT_3D ( 'NONE', #4124, #3084, #6764 ) ; #1715 = ADVANCED_FACE ( 'NONE', ( #3158 ), #3411, .T. ) ; #1716 = CARTESIAN_POINT ( 'NONE', ( 1.189204713810606100, -10.43571080435742400, -7.800000000000070900 ) ) ; #1717 = PLANE ( 'NONE', #700 ) ; #1718 = LINE ( 'NONE', #1681, #2454 ) ; #1719 = CARTESIAN_POINT ( 'NONE', ( 1.000000000000000000, 2.249639673992787800E-032, -2.100000000000049800 ) ) ; #1720 = LINE ( 'NONE', #2234, #4668 ) ; #1721 = EDGE_CURVE ( 'NONE', #1947, #3615, #5148, .T. ) ; #1722 = ORIENTED_EDGE ( 'NONE', *, *, #1499, .F. ) ; #1723 = EDGE_CURVE ( 'NONE', #4816, #4974, #2272, .T. ) ; #1724 = CARTESIAN_POINT ( 'NONE', ( 3.050000000000940000, -5.500000000000009800, -6.100000000000919800 ) ) ; #1725 = AXIS2_PLACEMENT_3D ( 'NONE', #2298, #2869, #1729 ) ; #1726 = DIRECTION ( 'NONE', ( -0.8543394976758417200, 0.5197153285318708600, 0.0000000000000000000 ) ) ; #1727 = VECTOR ( 'NONE', #2150, 1000.000000000000000 ) ; #1728 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; #1729 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #1730 = ORIENTED_EDGE ( 'NONE', *, *, #4513, .F. ) ; #1731 = CARTESIAN_POINT ( 'NONE', ( 1.644264407092791600, -2.781668093413520300, -11.23989685449769700 ) ) ; #1732 = PERSON_AND_ORGANIZATION ( #2374, #4427 ) ; #1733 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; #1734 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -11.80000000000000100 ) ) ; #1735 = ORIENTED_EDGE ( 'NONE', *, *, #4172, .T. ) ; #1736 = CARTESIAN_POINT ( 'NONE', ( -4.500000000000060400, -6.000000000000060400, -11.80000000000000100 ) ) ; #1737 = ADVANCED_FACE ( 'NONE', ( #2599 ), #618, .T. ) ; #1738 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.8660254037844611300, -0.4999999999999610900 ) ) ; #1739 = ORIENTED_EDGE ( 'NONE', *, *, #589, .T. ) ; #1740 = CARTESIAN_POINT ( 'NONE', ( 0.3126745147828990900, -11.27067752756654400, -7.800000000000071800 ) ) ; #1741 = CARTESIAN_POINT ( 'NONE', ( -0.03841679540950716100, -2.718332125691979200, -10.01911761955835800 ) ) ; #1742 = CARTESIAN_POINT ( 'NONE', ( -1.479999999999979600, -7.457512886940066600, -13.42000000000004800 ) ) ; #1743 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -9.150000000000000400 ) ) ; #1744 = AXIS2_PLACEMENT_3D ( 'NONE', #3129, #2567, #4696 ) ; #1745 = CARTESIAN_POINT ( 'NONE', ( 3.550000000000940000, -5.500000000000009800, -6.100000000000919800 ) ) ; #1746 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; #1747 = EDGE_CURVE ( 'NONE', #3811, #1243, #3995, .T. ) ; #1748 = ADVANCED_FACE ( 'NONE', ( #1454 ), #1958, .T. ) ; #1749 = CARTESIAN_POINT ( 'NONE', ( -4.339999999999969700, -2.199999999999130200, -2.779157999888000100 ) ) ; #1750 = ORIENTED_EDGE ( 'NONE', *, *, #6661, .T. ) ; #1751 = CIRCLE ( 'NONE', #5093, 0.5000000000000001100 ) ; #1752 = ORIENTED_EDGE ( 'NONE', *, *, #3747, .T. ) ; #1753 = EDGE_CURVE ( 'NONE', #3973, #3128, #6563, .T. ) ; #1754 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #1755 = CARTESIAN_POINT ( 'NONE', ( -1.000000000000000000, -1.224646799147353200E-016, -2.100000000000049800 ) ) ; #1756 = ORIENTED_EDGE ( 'NONE', *, *, #4864, .F. ) ; #1757 = LINE ( 'NONE', #3151, #5702 ) ; #1758 = CARTESIAN_POINT ( 'NONE', ( 1.575000000000000000, 1.928818708657081300E-016, -9.900000000000000400 ) ) ; #1759 = ORIENTED_EDGE ( 'NONE', *, *, #6470, .T. ) ; #1760 = CARTESIAN_POINT ( 'NONE', ( -1.575000000000000000, 0.0000000000000000000, -10.15000000000000000 ) ) ; #1761 = VECTOR ( 'NONE', #3880, 1000.000000000000000 ) ; #1762 = ORIENTED_EDGE ( 'NONE', *, *, #6564, .F. ) ; #1763 = EDGE_CURVE ( 'NONE', #6635, #3981, #2553, .T. ) ; #1764 = ORIENTED_EDGE ( 'NONE', *, *, #47, .T. ) ; #1765 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; #1766 = AXIS2_PLACEMENT_3D ( 'NONE', #1016, #3614, #560 ) ; #1767 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; #1768 = LINE ( 'NONE', #272, #366 ) ; #1769 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; #1770 = VERTEX_POINT ( 'NONE', #128 ) ; #1771 = VERTEX_POINT ( 'NONE', #4409 ) ; #1772 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; #1773 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; #1774 = PRODUCT_RELATED_PRODUCT_CATEGORY ( 'detail', '', ( #1309 ) ) ; #1775 = ORIENTED_EDGE ( 'NONE', *, *, #2063, .T. ) ; #1776 = CARTESIAN_POINT ( 'NONE', ( -2.299999999999892400, -5.522948246745391200E-014, -13.77999999999999900 ) ) ; #1777 = LINE ( 'NONE', #5746, #1682 ) ; #1778 = CARTESIAN_POINT ( 'NONE', ( 1.249999999999969800, -9.647640122439886700, -7.600000000000069800 ) ) ; #1779 = VERTEX_POINT ( 'NONE', #5991 ) ; #1780 = AXIS2_PLACEMENT_3D ( 'NONE', #4003, #2399, #6617 ) ; #1781 = ORIENTED_EDGE ( 'NONE', *, *, #2675, .T. ) ; #1782 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #1783 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; #1784 = VERTEX_POINT ( 'NONE', #3359 ) ; #1785 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.7071067811866840200, 0.7071067811864111300 ) ) ; #1786 = VECTOR ( 'NONE', #4355, 1000.000000000000000 ) ; #1787 = ORIENTED_EDGE ( 'NONE', *, *, #3506, .T. ) ; #1788 = CARTESIAN_POINT ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -2.100000000000049800 ) ) ; #1789 = LINE ( 'NONE', #170, #542 ) ; #1790 = VECTOR ( 'NONE', #6056, 1000.000000000000000 ) ; #1791 = ADVANCED_FACE ( 'NONE', ( #2676 ), #6317, .F. ) ; #1792 = CARTESIAN_POINT ( 'NONE', ( -0.2500000000000829900, -6.500000000000061300, -0.4999999999999991700 ) ) ; #1793 = CIRCLE ( 'NONE', #7, 2.299999999999999800 ) ; #1794 = ORIENTED_EDGE ( 'NONE', *, *, #6663, .T. ) ; #1795 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #1796 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -2.100000000000049800 ) ) ; #1797 = EDGE_CURVE ( 'NONE', #5192, #3505, #4898, .T. ) ; #1798 = LINE ( 'NONE', #514, #795 ) ; #1799 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.7071067811869398100, 0.7071067811861552200 ) ) ; #1800 = ORIENTED_EDGE ( 'NONE', *, *, #6478, .T. ) ; #1801 = CARTESIAN_POINT ( 'NONE', ( 0.3812537900073872900, -2.679257543540300500, -10.30091370322527700 ) ) ; #1802 = ORIENTED_EDGE ( 'NONE', *, *, #1541, .T. ) ; #1803 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #1804 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #1805 = FACE_OUTER_BOUND ( 'NONE', #6516, .T. ) ; #1806 = LINE ( 'NONE', #5485, #5829 ) ; #1807 = VERTEX_POINT ( 'NONE', #834 ) ; #1808 = EDGE_CURVE ( 'NONE', #5619, #5756, #4565, .T. ) ; #1809 = CARTESIAN_POINT ( 'NONE', ( 2.035992208946136200, -3.260119889689560200, -6.453199650115856800 ) ) ; #1810 = AXIS2_PLACEMENT_3D ( 'NONE', #723, #1293, #2899 ) ; #1811 = LINE ( 'NONE', #5295, #1727 ) ; #1812 = FACE_OUTER_BOUND ( 'NONE', #5052, .T. ) ; #1813 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #1814 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; #1815 = DIRECTION ( 'NONE', ( -0.05997373034735332300, -0.1043403074087511200, 0.9927317119534714300 ) ) ; #1816 = FACE_OUTER_BOUND ( 'NONE', #438, .T. ) ; #1817 = EDGE_CURVE ( 'NONE', #1526, #2914, #6725, .T. ) ; #1818 = ORIENTED_EDGE ( 'NONE', *, *, #72, .T. ) ; #1819 = AXIS2_PLACEMENT_3D ( 'NONE', #1184, #2218, #5905 ) ; #1820 = CIRCLE ( 'NONE', #2379, 0.3499999999999996400 ) ; #1821 = CARTESIAN_POINT ( 'NONE', ( -0.2016683630636235700, -2.702875720935716200, -10.07620175574058600 ) ) ; #1822 = CARTESIAN_POINT ( 'NONE', ( -2.278857559192756000, 1.363028482461436700, -9.900000000000000400 ) ) ; #1823 = AXIS2_PLACEMENT_3D ( 'NONE', #624, #4759, #4775 ) ; #1824 = ORIENTED_EDGE ( 'NONE', *, *, #6650, .T. ) ; #1825 = ADVANCED_FACE ( 'NONE', ( #5979 ), #4004, .T. ) ; #1826 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; #1827 = CARTESIAN_POINT ( 'NONE', ( 0.5877149042824174600, -1.860708733669011100, -10.90603792430962000 ) ) ; #1828 = CARTESIAN_POINT ( 'NONE', ( -2.018281576592344500, -2.906897123192763400, -6.230395288045460100 ) ) ; #1829 = ORIENTED_EDGE ( 'NONE', *, *, #429, .T. ) ; #1830 = VERTEX_POINT ( 'NONE', #1859 ) ; #1831 = CARTESIAN_POINT ( 'NONE', ( -1.499999999999830100, -5.350000000000021000, -13.44999999999999900 ) ) ; #1832 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #1833 = ORIENTED_EDGE ( 'NONE', *, *, #3250, .T. ) ; #1834 = CARTESIAN_POINT ( 'NONE', ( 0.1127482036563476200, -2.704807641662527700, -10.04275958314768300 ) ) ; #1835 = CARTESIAN_POINT ( 'NONE', ( 3.900000000000130000, -6.049999999999999800, -11.80000000000000100 ) ) ; #1836 = PLANE ( 'NONE', #4350 ) ; #1837 = CIRCLE ( 'NONE', #3860, 4.150000000000000400 ) ; #1838 = EDGE_LOOP ( 'NONE', ( #1402, #101, #2488, #5119, #6277, #3548, #5371, #5366, #912, #290, #1775, #2775, #1952, #5530 ) ) ; #1839 = LINE ( 'NONE', #1238, #2892 ) ; #1840 = ORIENTED_EDGE ( 'NONE', *, *, #4554, .T. ) ; #1841 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; #1842 = EDGE_CURVE ( 'NONE', #261, #3386, #5811, .T. ) ; #1843 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -11.80000000000000100 ) ) ; #1844 = ORIENTED_EDGE ( 'NONE', *, *, #4175, .F. ) ; #1845 = LINE ( 'NONE', #5513, #6448 ) ; #1846 = EDGE_LOOP ( 'NONE', ( #5386, #4999, #6235, #6189 ) ) ; #1847 = CARTESIAN_POINT ( 'NONE', ( 3.900000000000130000, -6.049999999999999800, -13.44999999999999900 ) ) ; #1848 = FACE_OUTER_BOUND ( 'NONE', #716, .T. ) ; #1849 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #1850 = ORIENTED_EDGE ( 'NONE', *, *, #914, .F. ) ; #1851 = ADVANCED_FACE ( 'NONE', ( #4398 ), #4227, .T. ) ; #1852 = ORIENTED_EDGE ( 'NONE', *, *, #3211, .F. ) ; #1853 = VECTOR ( 'NONE', #3439, 1000.000000000000000 ) ; #1854 = EDGE_CURVE ( 'NONE', #2074, #3306, #2519, .T. ) ; #1855 = ORIENTED_EDGE ( 'NONE', *, *, #6155, .F. ) ; #1856 = EDGE_CURVE ( 'NONE', #5055, #6798, #1035, .T. ) ; #1857 = CARTESIAN_POINT ( 'NONE', ( -0.07930211262234429500, -11.30003365094931000, -7.800000000000071800 ) ) ; #1858 = AXIS2_PLACEMENT_3D ( 'NONE', #1197, #4826, #1690 ) ; #1859 = CARTESIAN_POINT ( 'NONE', ( -3.199999999999980200, -5.150000000000099800, -5.299999999999999800 ) ) ; #1860 = CARTESIAN_POINT ( 'NONE', ( -1.479999999999979600, 2.300000000000019800, -13.77999999999999900 ) ) ; #1861 = VECTOR ( 'NONE', #3870, 1000.000000000000000 ) ; #1862 = CARTESIAN_POINT ( 'NONE', ( -0.5033303495298732100, -5.299999999999685400, -4.225990826257533000 ) ) ; #1863 = ORIENTED_EDGE ( 'NONE', *, *, #4286, .F. ) ; #1864 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #1865 = CARTESIAN_POINT ( 'NONE', ( -0.3876320259172518200, -2.655791235122491000, -10.52418071390772700 ) ) ; #1866 = VECTOR ( 'NONE', #3492, 1000.000000000000000 ) ; #1867 = ORIENTED_EDGE ( 'NONE', *, *, #1886, .T. ) ; #1868 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; #1869 = CIRCLE ( 'NONE', #2726, 0.4999999999999995600 ) ; #1870 = ORIENTED_EDGE ( 'NONE', *, *, #5217, .T. ) ; #1871 = CARTESIAN_POINT ( 'NONE', ( 0.8393607821211988000, -5.562844146787725200, -4.088229105052651100 ) ) ; #1872 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; #1873 = CARTESIAN_POINT ( 'NONE', ( 3.050000000000940000, -5.500000000000009800, -6.100000000000919800 ) ) ; #1874 = LINE ( 'NONE', #6528, #6398 ) ; #1875 = EDGE_LOOP ( 'NONE', ( #6513, #2305, #1705, #5573 ) ) ; #1876 = CARTESIAN_POINT ( 'NONE', ( 4.499999999999950300, 3.799999999999910100, -1.000000000000000900 ) ) ; #1877 = AXIS2_PLACEMENT_3D ( 'NONE', #458, #4540, #1406 ) ; #1878 = VECTOR ( 'NONE', #823, 1000.000000000000000 ) ; #1879 = VECTOR ( 'NONE', #1841, 1000.000000000000000 ) ; #1880 = ORIENTED_EDGE ( 'NONE', *, *, #5931, .T. ) ; #1881 = CARTESIAN_POINT ( 'NONE', ( -2.500000000000060000, 2.400000000000960000, -1.000000000000000000 ) ) ; #1882 = ORIENTED_EDGE ( 'NONE', *, *, #3721, .T. ) ; #1883 = EDGE_CURVE ( 'NONE', #5291, #6361, #1112, .T. ) ; #1884 = VECTOR ( 'NONE', #6329, 1000.000000000000000 ) ; #1885 = CARTESIAN_POINT ( 'NONE', ( -0.3877324117204935500, -2.676968690020672600, -10.32269068979336500 ) ) ; #1886 = EDGE_CURVE ( 'NONE', #4127, #6426, #952, .T. ) ; #1887 = VECTOR ( 'NONE', #5389, 1000.000000000000000 ) ; #1888 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -13.94999999810409000 ) ) ; #1889 = ORIENTED_EDGE ( 'NONE', *, *, #509, .T. ) ; #1890 = CALENDAR_DATE ( 2018, 27, 9 ) ; #1891 = FACE_OUTER_BOUND ( 'NONE', #5509, .T. ) ; #1892 = EDGE_CURVE ( 'NONE', #3919, #1946, #5553, .T. ) ; #1893 = ORIENTED_EDGE ( 'NONE', *, *, #3606, .T. ) ; #1894 = CARTESIAN_POINT ( 'NONE', ( 3.650000000000929800, -5.500000000000008900, -5.299999999999999800 ) ) ; #1895 = AXIS2_PLACEMENT_3D ( 'NONE', #1208, #2270, #5439 ) ; #1896 = ORIENTED_EDGE ( 'NONE', *, *, #4509, .T. ) ; #1897 = AXIS2_PLACEMENT_3D ( 'NONE', #4833, #1669, #5336 ) ; #1898 = CARTESIAN_POINT ( 'NONE', ( 1.479999999999979600, -8.299999999999940300, -12.93358983848630000 ) ) ; #1899 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #1900 = EDGE_CURVE ( 'NONE', #5317, #5875, #4973, .T. ) ; #1901 = DIRECTION ( 'NONE', ( 0.9952719235557661000, 0.08236899631855602900, -0.05146986134699781800 ) ) ; #1902 = CARTESIAN_POINT ( 'NONE', ( 1.249999999999969800, -8.970710678117770300, -8.246446609406030200 ) ) ; #1903 = ADVANCED_FACE ( 'NONE', ( #2348 ), #859, .F. ) ; #1904 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, ( #4485, #3889, #1821, #6016, #6042, #271, #5011, #3409, #1885, #3938, #752, #5512, #1865, #2930, #2390, #771, #6001, #2845, #1276, #2336, #1299, #1250, #2886, #798, #4459, #4990, #5529, #4396, #6064, #2905, #3962, #3347, #210, #3864, #730, #4926, #1801, #5467, #1443, #5623, #5111, #5088, #3477, #5039 ), .UNSPECIFIED., .F., .F., ( 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4 ), ( 0.7972514900015473800, 0.8538554155811667300, 0.9104593411607860800, 0.9387613039505948700, 0.9670632667404037700, 1.023667192320023300, 1.051969155109832200, 1.080271117899641100, 1.136875043479260500, 1.165177006269070700, 1.193478969058881200, 1.250082894638501900, 1.306686820218122300, 1.363290745797743200, 1.419894671377363700, 1.448196634167175000, 1.476498596956986200, 1.533102522536606400, 1.561404485326415700, 1.589706448116224900, 1.646310373695844700, 1.702914299275464700 ), .UNSPECIFIED. ) ; #1905 = VERTEX_POINT ( 'NONE', #333 ) ; #1906 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000090800, -9.112132034355555600, -8.387867965643975400 ) ) ; #1907 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; #1908 = CARTESIAN_POINT ( 'NONE', ( -4.000000000000000900, 4.092893218813362200, 8.673617379884035500E-016 ) ) ; #1909 = ORIENTED_EDGE ( 'NONE', *, *, #2140, .T. ) ; #1910 = CARTESIAN_POINT ( 'NONE', ( -9.662512969806920500, -7.635192378864031700, -13.73310889132450000 ) ) ; #1911 = ORIENTED_EDGE ( 'NONE', *, *, #3451, .F. ) ; #1912 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #1913 = CARTESIAN_POINT ( 'NONE', ( -1.723631525457527600, -2.628452443955791900, -10.78429193680585400 ) ) ; #1914 = ORIENTED_EDGE ( 'NONE', *, *, #405, .F. ) ; #1915 = FACE_OUTER_BOUND ( 'NONE', #3153, .T. ) ; #1916 = ORIENTED_EDGE ( 'NONE', *, *, #5894, .F. ) ; #1917 = VERTEX_POINT ( 'NONE', #5506 ) ; #1918 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000091300, -8.743404002370651200, -8.443404002370925800 ) ) ; #1919 = EDGE_CURVE ( 'NONE', #2149, #2682, #786, .T. ) ; #1920 = ADVANCED_FACE ( 'NONE', ( #3571 ), #2353, .T. ) ; #1921 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000197400, -10.04999999999840000, -7.800000000000070900 ) ) ; #1922 = EDGE_CURVE ( 'NONE', #3642, #4553, #3650, .T. ) ; #1923 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; #1924 = ORIENTED_EDGE ( 'NONE', *, *, #79, .T. ) ; #1925 = LINE ( 'NONE', #5247, #1589 ) ; #1926 = CARTESIAN_POINT ( 'NONE', ( 4.500000000000060400, -2.559999999999050100, -11.80000000000000100 ) ) ; #1927 = ORIENTED_EDGE ( 'NONE', *, *, #3266, .F. ) ; #1928 = LINE ( 'NONE', #262, #3625 ) ; #1929 = VERTEX_POINT ( 'NONE', #4433 ) ; #1930 = CARTESIAN_POINT ( 'NONE', ( -2.749999999999090100, -5.299999999999280400, -5.600000000000860300 ) ) ; #1931 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -3.499999999999999600 ) ) ; #1932 = ORIENTED_EDGE ( 'NONE', *, *, #2802, .T. ) ; #1933 = LINE ( 'NONE', #5557, #2246 ) ; #1934 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; #1935 = ORIENTED_EDGE ( 'NONE', *, *, #4254, .F. ) ; #1936 = ORIENTED_EDGE ( 'NONE', *, *, #5795, .F. ) ; #1937 = EDGE_CURVE ( 'NONE', #5629, #389, #4224, .T. ) ; #1938 = CARTESIAN_POINT ( 'NONE', ( 2.650015325608715800, 1.317574454024765800E-008, -9.900000000000000400 ) ) ; #1939 = AXIS2_PLACEMENT_3D ( 'NONE', #2403, #3470, #1899 ) ; #1940 = CARTESIAN_POINT ( 'NONE', ( -2.749999999999090100, -5.500000000000009800, -5.600000000000860300 ) ) ; #1941 = LINE ( 'NONE', #6545, #2744 ) ; #1942 = ORIENTED_EDGE ( 'NONE', *, *, #6777, .F. ) ; #1943 = CARTESIAN_POINT ( 'NONE', ( 1.479999999999979600, -7.635192378863960600, -13.73310889132460800 ) ) ; #1944 = CARTESIAN_POINT ( 'NONE', ( 4.500000000000000900, 3.799999999999909700, -0.4999999999999987200 ) ) ; #1945 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #1946 = VERTEX_POINT ( 'NONE', #6156 ) ; #1947 = VERTEX_POINT ( 'NONE', #5665 ) ; #1948 = EDGE_CURVE ( 'NONE', #6381, #5171, #5804, .T. ) ; #1949 = EDGE_CURVE ( 'NONE', #5055, #3576, #4391, .T. ) ; #1950 = FACE_OUTER_BOUND ( 'NONE', #4499, .T. ) ; #1951 = CARTESIAN_POINT ( 'NONE', ( 2.001021876108324700, -1.990817177375723700, -5.098111484312873600 ) ) ; #1952 = ORIENTED_EDGE ( 'NONE', *, *, #961, .T. ) ; #1953 = VECTOR ( 'NONE', #3817, 1000.000000000000000 ) ; #1954 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -5.625000000000020400 ) ) ; #1955 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; #1956 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #1957 = PLANE ( 'NONE', #5109 ) ; #1958 = CYLINDRICAL_SURFACE ( 'NONE', #1134, 1.000000000000000000 ) ; #1959 = VECTOR ( 'NONE', #2665, 1000.000000000000000 ) ; #1960 = ORIENTED_EDGE ( 'NONE', *, *, #2927, .F. ) ; #1961 = CARTESIAN_POINT ( 'NONE', ( 1.408843649384145900, 2.245997603205085500, -9.900000000000002100 ) ) ; #1962 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.7313537016190507800, -0.6819983600626268200 ) ) ; #1963 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; #1964 = FACE_OUTER_BOUND ( 'NONE', #1379, .T. ) ; #1965 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; #1966 = ORIENTED_EDGE ( 'NONE', *, *, #3572, .F. ) ; #1967 = EDGE_CURVE ( 'NONE', #1536, #4528, #5558, .T. ) ; #1968 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; #1969 = ADVANCED_FACE ( 'NONE', ( #2749 ), #3517, .T. ) ; #1970 = VECTOR ( 'NONE', #3748, 1000.000000000000000 ) ; #1971 = FACE_BOUND ( 'NONE', #6755, .T. ) ; #1972 = ORIENTED_EDGE ( 'NONE', *, *, #4293, .F. ) ; #1973 = CARTESIAN_POINT ( 'NONE', ( 2.649999999999962600, -3.245314017740440100E-016, -9.900000000000000400 ) ) ; #1974 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; #1975 = CARTESIAN_POINT ( 'NONE', ( -0.9739890472424571600, -5.299999999999282200, -5.361783421107745100 ) ) ; #1976 = VECTOR ( 'NONE', #2908, 1000.000000000000000 ) ; #1977 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); #1978 = PLANE ( 'NONE', #6540 ) ; #1979 = EDGE_CURVE ( 'NONE', #5725, #5546, #2838, .T. ) ; #1980 = CARTESIAN_POINT ( 'NONE', ( 1.977918116910374100, 1.771869641109864000, -9.900000000000002100 ) ) ; #1981 = CYLINDRICAL_SURFACE ( 'NONE', #4972, 3.149999999999999900 ) ; #1982 = CARTESIAN_POINT ( 'NONE', ( -9.662512969806920500, -9.364807621135042800, -13.73310889132468300 ) ) ; #1983 = ORIENTED_EDGE ( 'NONE', *, *, #6153, .F. ) ; #1984 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -11.80000000000000100 ) ) ; #1985 = CARTESIAN_POINT ( 'NONE', ( 2.750000000000909500, -4.474850604041482600, -1.502963659025156700 ) ) ; #1986 = EDGE_CURVE ( 'NONE', #1347, #6333, #3807, .T. ) ; #1987 = CARTESIAN_POINT ( 'NONE', ( -1.479999999999990900, -9.819999999999984300, -13.42000000000000000 ) ) ; #1988 = ORIENTED_EDGE ( 'NONE', *, *, #2017, .T. ) ; #1989 = CARTESIAN_POINT ( 'NONE', ( 2.015639733332517100, -2.181405062456607300, -5.120450575515243400 ) ) ; #1990 = AXIS2_PLACEMENT_3D ( 'NONE', #1954, #2035, #6228 ) ; #1991 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #1992 = CC_DESIGN_SECURITY_CLASSIFICATION ( #4474, ( #2946 ) ) ; #1993 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; #1994 = CARTESIAN_POINT ( 'NONE', ( 3.200000000000979800, -1.199999999999980000, -9.750000000000000000 ) ) ; #1995 = CARTESIAN_POINT ( 'NONE', ( -3.549999999999000200, -5.500000000000009800, -6.100000000000919800 ) ) ; #1996 = SECURITY_CLASSIFICATION_LEVEL ( 'unclassified' ) ; #1997 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; #1998 = AXIS2_PLACEMENT_3D ( 'NONE', #4762, #566, #605 ) ; #1999 = ADVANCED_FACE ( 'NONE', ( #1950 ), #1365, .T. ) ; #2000 = ORIENTED_EDGE ( 'NONE', *, *, #5147, .F. ) ; #2001 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #2002 = CARTESIAN_POINT ( 'NONE', ( -0.3571237022616043900, 2.632020153995695600, -9.899999999999998600 ) ) ; #2003 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.552713678800500900E-015, 0.0000000000000000000 ) ) ; #2004 = CARTESIAN_POINT ( 'NONE', ( 3.200000000000979800, -2.599999999999050200, -11.80000000000000100 ) ) ; #2005 = VECTOR ( 'NONE', #3345, 1000.000000000000000 ) ; #2006 = ORIENTED_EDGE ( 'NONE', *, *, #3142, .T. ) ; #2007 = VECTOR ( 'NONE', #74, 1000.000000000000000 ) ; #2008 = ORIENTED_EDGE ( 'NONE', *, *, #5359, .F. ) ; #2009 = CARTESIAN_POINT ( 'NONE', ( 3.600000000000160000, -6.350000000000021000, -14.40000000000000200 ) ) ; #2010 = CARTESIAN_POINT ( 'NONE', ( -1.772090831358321200, -2.649558572393204200, -10.58348053863446700 ) ) ; #2011 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; #2012 = FACE_OUTER_BOUND ( 'NONE', #984, .T. ) ; #2013 = ORIENTED_EDGE ( 'NONE', *, *, #613, .T. ) ; #2014 = VECTOR ( 'NONE', #6327, 1000.000000000000000 ) ; #2015 = CARTESIAN_POINT ( 'NONE', ( 3.150000000000001200, 6.299999999999998900, -9.692893218813470200 ) ) ; #2016 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #2017 = EDGE_CURVE ( 'NONE', #1367, #4956, #1445, .T. ) ; #2018 = CARTESIAN_POINT ( 'NONE', ( -1.993702774913419100, -1.994916574490571200, -5.246201239198602400 ) ) ; #2019 = ORIENTED_EDGE ( 'NONE', *, *, #6790, .F. ) ; #2020 = CYLINDRICAL_SURFACE ( 'NONE', #2151, 4.150000000000000400 ) ; #2021 = CARTESIAN_POINT ( 'NONE', ( 1.549999999999830000, -5.500000000000009800, -7.349999999999999600 ) ) ; #2022 = ORIENTED_EDGE ( 'NONE', *, *, #6305, .T. ) ; #2023 = LINE ( 'NONE', #3296, #6304 ) ; #2024 = EDGE_CURVE ( 'NONE', #3580, #1031, #4149, .T. ) ; #2025 = ORIENTED_EDGE ( 'NONE', *, *, #2927, .T. ) ; #2026 = AXIS2_PLACEMENT_3D ( 'NONE', #3145, #518, #568 ) ; #2027 = ORIENTED_EDGE ( 'NONE', *, *, #5298, .T. ) ; #2028 = CIRCLE ( 'NONE', #6223, 0.5000000000000004400 ) ; #2029 = ORIENTED_EDGE ( 'NONE', *, *, #1922, .F. ) ; #2030 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000089900, -8.927371610872192800, -8.275493304669337700 ) ) ; #2031 = LINE ( 'NONE', #4818, #3491 ) ; #2032 = VERTEX_POINT ( 'NONE', #4111 ) ; #2033 = EDGE_CURVE ( 'NONE', #4394, #3118, #48, .T. ) ; #2034 = AXIS2_PLACEMENT_3D ( 'NONE', #6324, #2672, #1110 ) ; #2035 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #2036 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; #2037 = CYLINDRICAL_SURFACE ( 'NONE', #1059, 3.899999999999999900 ) ; #2038 = ORIENTED_EDGE ( 'NONE', *, *, #4245, .T. ) ; #2039 = EDGE_LOOP ( 'NONE', ( #4506, #23, #1514 ) ) ; #2040 = VECTOR ( 'NONE', #5164, 1000.000000000000000 ) ; #2041 = FACE_OUTER_BOUND ( 'NONE', #939, .T. ) ; #2042 = VERTEX_POINT ( 'NONE', #2966 ) ; #2043 = CIRCLE ( 'NONE', #1224, 1.000000000000000000 ) ; #2044 = FACE_OUTER_BOUND ( 'NONE', #365, .T. ) ; #2045 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; #2046 = ORIENTED_EDGE ( 'NONE', *, *, #6300, .T. ) ; #2047 = ORIENTED_EDGE ( 'NONE', *, *, #4882, .T. ) ; #2048 = VECTOR ( 'NONE', #1078, 1000.000000000000000 ) ; #2049 = EDGE_LOOP ( 'NONE', ( #6347, #1762, #5533, #1750 ) ) ; #2050 = CARTESIAN_POINT ( 'NONE', ( 1.249999999999969800, -8.970710678117649600, -8.246446609405911200 ) ) ; #2051 = CARTESIAN_POINT ( 'NONE', ( 1.050000000000000000, 0.0000000000000000000, -11.80000000000000100 ) ) ; #2052 = FACE_OUTER_BOUND ( 'NONE', #1220, .T. ) ; #2053 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #2054 = EDGE_CURVE ( 'NONE', #1712, #3902, #4312, .T. ) ; #2055 = EDGE_LOOP ( 'NONE', ( #2617, #6489, #5587, #788 ) ) ; #2056 = CARTESIAN_POINT ( 'NONE', ( 1.110223024625159900E-013, 0.04999999999993900300, -13.44999999999999900 ) ) ; #2057 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, ( #4630, #4674, #395, #479 ), .UNSPECIFIED., .F., .F., ( 4, 4 ), ( 0.0000000000000000000, 1.000000000000000000 ), .UNSPECIFIED. ) ; #2058 = CARTESIAN_POINT ( 'NONE', ( -1.050000000000000000, 1.285879139104721000E-016, -10.15000000000000000 ) ) ; #2059 = ORIENTED_EDGE ( 'NONE', *, *, #2991, .F. ) ; #2060 = AXIS2_PLACEMENT_3D ( 'NONE', #2548, #5165, #420 ) ; #2061 = EDGE_CURVE ( 'NONE', #2407, #4966, #2099, .T. ) ; #2062 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #2063 = EDGE_CURVE ( 'NONE', #2661, #4473, #5216, .T. ) ; #2064 = CARTESIAN_POINT ( 'NONE', ( 2.750000000000910800, -5.068685699976391800, -1.819054162984479900 ) ) ; #2065 = PLANE ( 'NONE', #185 ) ; #2066 = VERTEX_POINT ( 'NONE', #3053 ) ; #2067 = CARTESIAN_POINT ( 'NONE', ( 2.750000000000909900, -4.336403626959865100, -1.820305847202250400 ) ) ; #2068 = CARTESIAN_POINT ( 'NONE', ( 4.500000000000060400, -2.559999999999050600, -11.79999999999999900 ) ) ; #2069 = ORIENTED_EDGE ( 'NONE', *, *, #1398, .T. ) ; #2070 = VECTOR ( 'NONE', #3160, 1000.000000000000000 ) ; #2071 = ORIENTED_EDGE ( 'NONE', *, *, #5580, .T. ) ; #2072 = CARTESIAN_POINT ( 'NONE', ( -2.804496749695564200, -1.434328407634393400, -9.400000000000000400 ) ) ; #2073 = ORIENTED_EDGE ( 'NONE', *, *, #5590, .F. ) ; #2074 = VERTEX_POINT ( 'NONE', #3075 ) ; #2075 = LINE ( 'NONE', #4586, #3701 ) ; #2076 = ORIENTED_EDGE ( 'NONE', *, *, #2359, .T. ) ; #2077 = CIRCLE ( 'NONE', #6264, 3.149999999999999900 ) ; #2078 = ORIENTED_EDGE ( 'NONE', *, *, #3052, .T. ) ; #2079 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #2080 = AXIS2_PLACEMENT_3D ( 'NONE', #6259, #1321, #1962 ) ; #2081 = EDGE_CURVE ( 'NONE', #3928, #2817, #5036, .T. ) ; #2082 = CARTESIAN_POINT ( 'NONE', ( 1.000000000000000000, 7.498798913309292100E-033, -2.100000000000049800 ) ) ; #2083 = LINE ( 'NONE', #4719, #3787 ) ; #2084 = ORIENTED_EDGE ( 'NONE', *, *, #838, .T. ) ; #2085 = AXIS2_PLACEMENT_3D ( 'NONE', #46, #5228, #1610 ) ; #2086 = CARTESIAN_POINT ( 'NONE', ( -3.149999999999999900, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #2087 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #2088 = EDGE_LOOP ( 'NONE', ( #4028, #30, #681, #3956 ) ) ; #2089 = VECTOR ( 'NONE', #734, 1000.000000000000000 ) ; #2090 = ORIENTED_EDGE ( 'NONE', *, *, #1229, .F. ) ; #2091 = CARTESIAN_POINT ( 'NONE', ( 1.549999999999830000, -5.500000000000009800, -11.80000000000000100 ) ) ; #2092 = EDGE_CURVE ( 'NONE', #1068, #5055, #705, .T. ) ; #2093 = CARTESIAN_POINT ( 'NONE', ( 4.000000000000000000, 3.799999999999910100, -3.499999999999999600 ) ) ; #2094 = CARTESIAN_POINT ( 'NONE', ( 4.500000000000000900, -6.292893218813512500, -0.3284271247461896200 ) ) ; #2095 = EDGE_LOOP ( 'NONE', ( #5375, #6526, #134, #4495, #3533, #5116, #6571, #6027, #2522, #4138, #1077, #5640 ) ) ; #2096 = ORIENTED_EDGE ( 'NONE', *, *, #6687, .F. ) ; #2097 = EDGE_CURVE ( 'NONE', #2405, #5235, #3231, .T. ) ; #2098 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; #2099 = CIRCLE ( 'NONE', #3235, 0.5000000000000004400 ) ; #2100 = ORIENTED_EDGE ( 'NONE', *, *, #79, .F. ) ; #2101 = VECTOR ( 'NONE', #4393, 1000.000000000000000 ) ; #2102 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #2103 = EDGE_CURVE ( 'NONE', #4044, #6622, #5388, .T. ) ; #2104 = VECTOR ( 'NONE', #4405, 1000.000000000000000 ) ; #2105 = CARTESIAN_POINT ( 'NONE', ( 1.075528555105620000E-013, -5.551115123125780200E-014, -13.42000000000000000 ) ) ; #2106 = CARTESIAN_POINT ( 'NONE', ( 0.3293503164289430800, -11.25707606986530100, -7.599999999999870900 ) ) ; #2107 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, ( #1318, #5976, #207, #4414, #6013, #1271, #4988, #2864, #3862, #4965, #6583, #1862, #6060, #2903, #816, #4482 ), .UNSPECIFIED., .F., .F., ( 4, 2, 2, 2, 2, 2, 2, 4 ), ( 0.003126104531729968000, 0.003516867598196213800, 0.003907630664662459200, 0.004298393731128705500, 0.004689156797594951800, 0.005079919864061197200, 0.005470682930527442600, 0.006252209063459936000 ), .UNSPECIFIED. ) ; #2108 = VECTOR ( 'NONE', #4572, 1000.000000000000100 ) ; #2109 = EDGE_LOOP ( 'NONE', ( #3106, #2262, #3720, #5638 ) ) ; #2110 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #2111 = CARTESIAN_POINT ( 'NONE', ( -3.199999999999980200, -5.500000000000009800, -11.80000000000000100 ) ) ; #2112 = CARTESIAN_POINT ( 'NONE', ( -4.339999999999969700, -2.559999999999050100, -9.800000000000000700 ) ) ; #2113 = FACE_OUTER_BOUND ( 'NONE', #2434, .T. ) ; #2114 = ORIENTED_EDGE ( 'NONE', *, *, #5632, .F. ) ; #2115 = CARTESIAN_POINT ( 'NONE', ( 4.500000000000060400, -2.559999999999050100, -9.800000000000000700 ) ) ; #2116 = AXIS2_PLACEMENT_3D ( 'NONE', #558, #4663, #3643 ) ; #2117 = CARTESIAN_POINT ( 'NONE', ( 2.018537944984616600, -2.068363019588630400, -4.883502816590376700 ) ) ; #2118 = CARTESIAN_POINT ( 'NONE', ( 18.18468237128200100, -2.068363019588650000, -4.883502816590430000 ) ) ; #2119 = VECTOR ( 'NONE', #1373, 1000.000000000000000 ) ; #2120 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000000000, 0.0000000000000000000, -10.15000000000000000 ) ) ; #2121 = FACE_OUTER_BOUND ( 'NONE', #1249, .T. ) ; #2122 = ORIENTED_EDGE ( 'NONE', *, *, #6271, .T. ) ; #2123 = CARTESIAN_POINT ( 'NONE', ( 3.725592231765940000, 3.558925565098960000, -2.700000000000000200 ) ) ; #2124 = LINE ( 'NONE', #2976, #1976 ) ; #2125 = PLANE ( 'NONE', #6263 ) ; #2126 = CARTESIAN_POINT ( 'NONE', ( 2.010880259306693700, -2.283098795542567700, -5.375228444583545000 ) ) ; #2127 = CARTESIAN_POINT ( 'NONE', ( 4.149999999999879600, 0.0000000000000000000, -11.80000000000000100 ) ) ; #2128 = DATE_AND_TIME ( #1890, #2793 ) ; #2129 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; #2130 = LINE ( 'NONE', #4597, #1137 ) ; #2131 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; #2132 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -11.80000000000000100 ) ) ; #2133 = VERTEX_POINT ( 'NONE', #5278 ) ; #2134 = EDGE_CURVE ( 'NONE', #5716, #6667, #294, .T. ) ; #2135 = CARTESIAN_POINT ( 'NONE', ( -4.500000000000060400, 3.799999999999911000, -11.80000000000000100 ) ) ; #2136 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #2137 = ORIENTED_EDGE ( 'NONE', *, *, #6831, .T. ) ; #2138 = PLANE ( 'NONE', #4737 ) ; #2139 = CARTESIAN_POINT ( 'NONE', ( -3.469446951953609900E-015, -2.964743053460099800, -10.45473218451790100 ) ) ; #2140 = EDGE_CURVE ( 'NONE', #5067, #3483, #6719, .T. ) ; #2141 = ORIENTED_EDGE ( 'NONE', *, *, #5904, .F. ) ; #2142 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000090800, -9.558578643762039900, -7.658578643762727900 ) ) ; #2143 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; #2144 = CARTESIAN_POINT ( 'NONE', ( -2.912473175842152300, -1.199999999999970900, -0.9999999999999988900 ) ) ; #2145 = CARTESIAN_POINT ( 'NONE', ( -1.170152050935941100, -10.49009711632200500, -7.599999999999869100 ) ) ; #2146 = VERTEX_POINT ( 'NONE', #5254 ) ; #2147 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #2148 = EDGE_CURVE ( 'NONE', #4441, #4553, #1695, .T. ) ; #2149 = VERTEX_POINT ( 'NONE', #1596 ) ; #2150 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #2151 = AXIS2_PLACEMENT_3D ( 'NONE', #2132, #5819, #5206 ) ; #2152 = CIRCLE ( 'NONE', #829, 0.4999999999999995600 ) ; #2153 = CARTESIAN_POINT ( 'NONE', ( -2.247557109910129900, -2.199999999999130200, -2.779157999888000100 ) ) ; #2154 = VERTEX_POINT ( 'NONE', #2117 ) ; #2155 = LINE ( 'NONE', #1736, #6109 ) ; #2156 = ORIENTED_EDGE ( 'NONE', *, *, #3122, .F. ) ; #2157 = AXIS2_PLACEMENT_3D ( 'NONE', #3051, #4730, #6424 ) ; #2158 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; #2159 = ORIENTED_EDGE ( 'NONE', *, *, #5411, .T. ) ; #2160 = PLANE ( 'NONE', #3857 ) ; #2161 = DIRECTION ( 'NONE', ( 0.05997373034744221700, 0.1043403074085968000, -0.9927317119534823100 ) ) ; #2162 = VECTOR ( 'NONE', #1945, 1000.000000000000000 ) ; #2163 = VERTEX_POINT ( 'NONE', #5800 ) ; #2164 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #2165 = VECTOR ( 'NONE', #3408, 1000.000000000000000 ) ; #2166 = ADVANCED_FACE ( 'NONE', ( #2669 ), #5885, .T. ) ; #2167 = ORIENTED_EDGE ( 'NONE', *, *, #4837, .T. ) ; #2168 = LINE ( 'NONE', #5630, #5540 ) ; #2169 = CARTESIAN_POINT ( 'NONE', ( 18.18468237128200100, -5.900000000000730400, -7.599999999999870000 ) ) ; #2170 = EDGE_LOOP ( 'NONE', ( #6704, #3069, #4402, #4986, #2461, #5136, #1267, #1759, #5514, #3432 ) ) ; #2171 = EDGE_CURVE ( 'NONE', #6715, #1917, #131, .T. ) ; #2172 = CARTESIAN_POINT ( 'NONE', ( -4.500000000000060400, -2.150000000000039900, -11.80000000000000100 ) ) ; #2173 = ADVANCED_FACE ( 'NONE', ( #3004 ), #4280, .F. ) ; #2174 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #2175 = LINE ( 'NONE', #2343, #6634 ) ; #2176 = ORIENTED_EDGE ( 'NONE', *, *, #2417, .T. ) ; #2177 = DIRECTION ( 'NONE', ( 1.000000000000000000, -1.224646799147353500E-016, 0.0000000000000000000 ) ) ; #2178 = EDGE_LOOP ( 'NONE', ( #6806, #4622, #6613, #4146 ) ) ; #2179 = FACE_OUTER_BOUND ( 'NONE', #5606, .T. ) ; #2180 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; #2181 = EDGE_CURVE ( 'NONE', #4808, #2746, #1611, .T. ) ; #2182 = VERTEX_POINT ( 'NONE', #597 ) ; #2183 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #2184 = VERTEX_POINT ( 'NONE', #1686 ) ; #2185 = CARTESIAN_POINT ( 'NONE', ( 18.18468237128200100, -4.699999999999819900, -2.300000000000010000 ) ) ; #2186 = VECTOR ( 'NONE', #3243, 1000.000000000000000 ) ; #2187 = VERTEX_POINT ( 'NONE', #5346 ) ; #2188 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; #2189 = ORIENTED_EDGE ( 'NONE', *, *, #2453, .T. ) ; #2190 = ADVANCED_FACE ( 'NONE', ( #6052, #3815 ), #56, .T. ) ; #2191 = VECTOR ( 'NONE', #2102, 1000.000000000000000 ) ; #2192 = VERTEX_POINT ( 'NONE', #620 ) ; #2193 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #2194 = EDGE_CURVE ( 'NONE', #5443, #634, #4644, .T. ) ; #2195 = ORIENTED_EDGE ( 'NONE', *, *, #1986, .T. ) ; #2196 = AXIS2_PLACEMENT_3D ( 'NONE', #2707, #3755, #2211 ) ; #2197 = CARTESIAN_POINT ( 'NONE', ( -1.899999999998069900, -5.500000000000008900, -11.90000000000010000 ) ) ; #2198 = VECTOR ( 'NONE', #2438, 1000.000000000000000 ) ; #2199 = CIRCLE ( 'NONE', #6666, 1.479999999999990000 ) ; #2200 = CARTESIAN_POINT ( 'NONE', ( 4.499999999999950300, -2.150000000000039900, -9.750000000000000000 ) ) ; #2201 = ORIENTED_EDGE ( 'NONE', *, *, #5758, .F. ) ; #2202 = VECTOR ( 'NONE', #3170, 1000.000000000000000 ) ; #2203 = VECTOR ( 'NONE', #5759, 1000.000000000000000 ) ; #2204 = VERTEX_POINT ( 'NONE', #6404 ) ; #2205 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, ( #1144, #2207, #644, #2728, #3832, #1219, #4845, #5913, #6446, #194, #5932, #2786, #6475, #3298, #174, #4353 ), .UNSPECIFIED., .F., .F., ( 4, 1, 2, 2, 2, 1, 2, 2, 4 ), ( 0.0000000000000000000, 0.1249999999999988100, 0.1874999999999982200, 0.2499999999999976100, 0.5000000000000032200, 0.6250000000000038900, 0.6875000000000043300, 0.7500000000000046600, 1.000000000000000000 ), .UNSPECIFIED. ) ; #2206 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.5299192642332042300, 0.8480480961564265100 ) ) ; #2207 = CARTESIAN_POINT ( 'NONE', ( 1.774910617209668000, -2.654659697125648000, -10.53494657880351100 ) ) ; #2208 = ADVANCED_FACE ( 'NONE', ( #3326, #3152 ), #2160, .T. ) ; #2209 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; #2210 = LINE ( 'NONE', #4524, #3437 ) ; #2211 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #2212 = EDGE_LOOP ( 'NONE', ( #2800, #4407 ) ) ; #2213 = CARTESIAN_POINT ( 'NONE', ( -2.489999999999949600, -2.559999999999050100, -11.80000000000000100 ) ) ; #2214 = APPROVAL_DATE_TIME ( #3602, #1638 ) ; #2215 = ORIENTED_EDGE ( 'NONE', *, *, #337, .T. ) ; #2216 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #2217 = PLANE ( 'NONE', #3611 ) ; #2218 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #2219 = EDGE_CURVE ( 'NONE', #3386, #898, #1269, .T. ) ; #2220 = VERTEX_POINT ( 'NONE', #643 ) ; #2221 = ADVANCED_FACE ( 'NONE', ( #3078 ), #5302, .T. ) ; #2222 = EDGE_CURVE ( 'NONE', #6783, #67, #6639, .T. ) ; #2223 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; #2224 = CARTESIAN_POINT ( 'NONE', ( -2.749999999999090100, -5.004174836108887800, -1.776024520297846400 ) ) ; #2225 = VERTEX_POINT ( 'NONE', #580 ) ; #2226 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; #2227 = CARTESIAN_POINT ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -9.150000000000000400 ) ) ; #2228 = EDGE_CURVE ( 'NONE', #2342, #887, #5335, .T. ) ; #2229 = CARTESIAN_POINT ( 'NONE', ( 1.250000000000133200, -10.04999999999840000, -7.800000000000070900 ) ) ; #2230 = EDGE_LOOP ( 'NONE', ( #1684, #353, #4871, #2451 ) ) ; #2231 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; #2232 = FACE_OUTER_BOUND ( 'NONE', #1875, .T. ) ; #2233 = ORIENTED_EDGE ( 'NONE', *, *, #3374, .F. ) ; #2234 = CARTESIAN_POINT ( 'NONE', ( 3.650000000000929800, -1.100000000000100000, -11.80000000000000100 ) ) ; #2235 = ORIENTED_EDGE ( 'NONE', *, *, #3327, .T. ) ; #2236 = ADVANCED_FACE ( 'NONE', ( #5053 ), #2264, .F. ) ; #2237 = VERTEX_POINT ( 'NONE', #2703 ) ; #2238 = LINE ( 'NONE', #6370, #848 ) ; #2239 = VERTEX_POINT ( 'NONE', #3831 ) ; #2240 = CIRCLE ( 'NONE', #1939, 1.000000000000000000 ) ; #2241 = EDGE_CURVE ( 'NONE', #4633, #5218, #6312, .T. ) ; #2242 = VERTEX_POINT ( 'NONE', #2789 ) ; #2243 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; #2244 = CARTESIAN_POINT ( 'NONE', ( -1.795938270362636500, 1.950461871746316500, -9.900000000000000400 ) ) ; #2245 = CARTESIAN_POINT ( 'NONE', ( 3.600000000000160000, -6.350000000000021000, -14.40000000000000200 ) ) ; #2246 = VECTOR ( 'NONE', #3500, 1000.000000000000100 ) ; #2247 = ORIENTED_EDGE ( 'NONE', *, *, #5361, .T. ) ; #2248 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -1.199999988095949300, -13.94999999999999900 ) ) ; #2249 = ORIENTED_EDGE ( 'NONE', *, *, #3982, .F. ) ; #2250 = AXIS2_PLACEMENT_3D ( 'NONE', #3342, #2332, #6598 ) ; #2251 = CARTESIAN_POINT ( 'NONE', ( -3.549999999999000200, -5.299999999999280400, -11.90000000000010000 ) ) ; #2252 = CARTESIAN_POINT ( 'NONE', ( -2.749999999999090100, -5.299999999999819500, -2.222676532491993900 ) ) ; #2253 = CARTESIAN_POINT ( 'NONE', ( 4.499999999999950300, 3.799999999999910100, -11.80000000000000100 ) ) ; #2254 = ORIENTED_EDGE ( 'NONE', *, *, #3854, .F. ) ; #2255 = CARTESIAN_POINT ( 'NONE', ( -1.479999999999979600, -7.635192378864090300, -13.73310889132460000 ) ) ; #2256 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; #2257 = LINE ( 'NONE', #6615, #3482 ) ; #2258 = ORIENTED_EDGE ( 'NONE', *, *, #3183, .T. ) ; #2259 = ADVANCED_FACE ( 'NONE', ( #6472 ), #5974, .T. ) ; #2260 = CARTESIAN_POINT ( 'NONE', ( 0.5965246171905543800, -11.15011932214623500, -7.800000000000068200 ) ) ; #2261 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; #2262 = ORIENTED_EDGE ( 'NONE', *, *, #1097, .T. ) ; #2263 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; #2264 = CYLINDRICAL_SURFACE ( 'NONE', #5637, 1.050000000000000000 ) ; #2265 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #2266 = ORIENTED_EDGE ( 'NONE', *, *, #1037, .T. ) ; #2267 = EDGE_CURVE ( 'NONE', #5431, #6400, #6138, .T. ) ; #2268 = VECTOR ( 'NONE', #1656, 1000.000000000000000 ) ; #2269 = EDGE_CURVE ( 'NONE', #2609, #2407, #4889, .T. ) ; #2270 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; #2271 = DIRECTION ( 'NONE', ( 1.734723475976806700E-015, 0.0000000000000000000, -1.000000000000000000 ) ) ; #2272 = CIRCLE ( 'NONE', #3035, 1.199999999999930000 ) ; #2273 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; #2274 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; #2275 = LINE ( 'NONE', #2624, #5151 ) ; #2276 = ORIENTED_EDGE ( 'NONE', *, *, #3993, .T. ) ; #2277 = CARTESIAN_POINT ( 'NONE', ( -9.662512969806920500, -3.100000000000049800, -13.77999999999999900 ) ) ; #2278 = CARTESIAN_POINT ( 'NONE', ( 2.009600286187952300, -3.063158890845959300, -6.648336370488501700 ) ) ; #2279 = EDGE_CURVE ( 'NONE', #4061, #85, #1108, .T. ) ; #2280 = CARTESIAN_POINT ( 'NONE', ( 3.050000000000940000, -5.500000000000009800, -5.600000000000860300 ) ) ; #2281 = AXIS2_PLACEMENT_3D ( 'NONE', #1644, #57, #3709 ) ; #2282 = VECTOR ( 'NONE', #1772, 1000.000000000000000 ) ; #2283 = VERTEX_POINT ( 'NONE', #6429 ) ; #2284 = CARTESIAN_POINT ( 'NONE', ( 2.013445691367028000, -2.037005511658155600, -4.931789144405119200 ) ) ; #2285 = VERTEX_POINT ( 'NONE', #95 ) ; #2286 = CARTESIAN_POINT ( 'NONE', ( -3.049999999999060600, -5.500000000000009800, -6.100000000000919800 ) ) ; #2287 = VECTOR ( 'NONE', #6695, 1000.000000000000000 ) ; #2288 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; #2289 = LINE ( 'NONE', #6460, #4013 ) ; #2290 = ORIENTED_EDGE ( 'NONE', *, *, #5795, .T. ) ; #2291 = EDGE_CURVE ( 'NONE', #3669, #975, #861, .T. ) ; #2292 = CARTESIAN_POINT ( 'NONE', ( 4.499999999999950300, 0.0000000000000000000, -11.80000000000000100 ) ) ; #2293 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; #2294 = AXIS2_PLACEMENT_3D ( 'NONE', #3725, #5878, #2714 ) ; #2295 = CARTESIAN_POINT ( 'NONE', ( 1.900000000000900100, -5.500000000000009800, -11.90000000000010000 ) ) ; #2296 = VECTOR ( 'NONE', #1326, 1000.000000000000000 ) ; #2297 = CARTESIAN_POINT ( 'NONE', ( 1.249999999999969800, -9.558578643762039900, -7.658578643762727900 ) ) ; #2298 = CARTESIAN_POINT ( 'NONE', ( -4.000000000000000000, 3.799999999999911000, -0.4999999999999990600 ) ) ; #2299 = ADVANCED_FACE ( 'NONE', ( #1190 ), #5851, .T. ) ; #2300 = CARTESIAN_POINT ( 'NONE', ( -9.662512969806920500, -7.457512886940040000, -13.42000000000000000 ) ) ; #2301 = VECTOR ( 'NONE', #3581, 1000.000000000000000 ) ; #2302 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.5000000000000600600, -0.8660254037844039600 ) ) ; #2303 = ORIENTED_EDGE ( 'NONE', *, *, #3896, .T. ) ; #2304 = CARTESIAN_POINT ( 'NONE', ( -4.339999999999969700, -8.187744794624180100, -10.80000000000000100 ) ) ; #2305 = ORIENTED_EDGE ( 'NONE', *, *, #5591, .T. ) ; #2306 = CARTESIAN_POINT ( 'NONE', ( 1.176405706191792100, -10.47304119650035900, -7.800000000000069100 ) ) ; #2307 = CARTESIAN_POINT ( 'NONE', ( 1.249999999999969400, -5.491205336494505900, -7.756890761442814900 ) ) ; #2308 = CARTESIAN_POINT ( 'NONE', ( -2.749999999999089200, -3.137993503012876500, -3.603632002693444700 ) ) ; #2309 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; #2310 = VERTEX_POINT ( 'NONE', #2227 ) ; #2311 = CARTESIAN_POINT ( 'NONE', ( -4.339999999999969700, -2.199999999999130200, -11.80000000000000100 ) ) ; #2312 = EDGE_CURVE ( 'NONE', #4218, #2609, #4145, .T. ) ; #2313 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.8386705679453540000, 0.5446390350151350000 ) ) ; #2314 = VERTEX_POINT ( 'NONE', #625 ) ; #2315 = CARTESIAN_POINT ( 'NONE', ( 4.500000000000060400, -2.199999999999089800, -9.800000000000000700 ) ) ; #2316 = ORIENTED_EDGE ( 'NONE', *, *, #1046, .T. ) ; #2317 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; #2318 = ORIENTED_EDGE ( 'NONE', *, *, #1405, .F. ) ; #2319 = LINE ( 'NONE', #1151, #2489 ) ; #2320 = ADVANCED_FACE ( 'NONE', ( #3895 ), #2431, .T. ) ; #2321 = ORIENTED_EDGE ( 'NONE', *, *, #4724, .T. ) ; #2322 = LINE ( 'NONE', #6645, #5704 ) ; #2323 = VERTEX_POINT ( 'NONE', #1660 ) ; #2324 = EDGE_CURVE ( 'NONE', #4196, #5091, #1357, .T. ) ; #2325 = ADVANCED_FACE ( 'NONE', ( #4715 ), #1168, .F. ) ; #2326 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #2327 = AXIS2_PLACEMENT_3D ( 'NONE', #153, #1767, #3309 ) ; #2328 = VERTEX_POINT ( 'NONE', #151 ) ; #2329 = CIRCLE ( 'NONE', #3343, 0.2999999999999999300 ) ; #2330 = EDGE_LOOP ( 'NONE', ( #2290, #1503, #551, #4743 ) ) ; #2331 = CYLINDRICAL_SURFACE ( 'NONE', #4038, 0.2999999999999999300 ) ; #2332 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #2333 = VERTEX_POINT ( 'NONE', #1223 ) ; #2334 = CARTESIAN_POINT ( 'NONE', ( 18.18468237128200100, -3.043296795205581200, -6.084124547721278200 ) ) ; #2335 = CIRCLE ( 'NONE', #5686, 1.000000000000000000 ) ; #2336 = CARTESIAN_POINT ( 'NONE', ( -0.1788111859785677700, -2.628894858789093500, -10.78008264084186000 ) ) ; #2337 = ORIENTED_EDGE ( 'NONE', *, *, #870, .F. ) ; #2338 = AXIS2_PLACEMENT_3D ( 'NONE', #4778, #1065, #4288 ) ; #2339 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #2340 = CARTESIAN_POINT ( 'NONE', ( -0.5877149042824230100, -2.857529744987931300, -10.28315502499716800 ) ) ; #2341 = ORIENTED_EDGE ( 'NONE', *, *, #4962, .T. ) ; #2342 = VERTEX_POINT ( 'NONE', #5025 ) ; #2343 = CARTESIAN_POINT ( 'NONE', ( 4.499999999999950300, 3.799999999999910100, -11.80000000000000100 ) ) ; #2344 = LINE ( 'NONE', #2334, #6627 ) ; #2345 = ORIENTED_EDGE ( 'NONE', *, *, #5037, .T. ) ; #2346 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; #2347 = ORIENTED_EDGE ( 'NONE', *, *, #5229, .F. ) ; #2348 = FACE_OUTER_BOUND ( 'NONE', #1100, .T. ) ; #2349 = EDGE_LOOP ( 'NONE', ( #2006, #3573, #3852, #275 ) ) ; #2350 = ORIENTED_EDGE ( 'NONE', *, *, #4746, .T. ) ; #2351 = CARTESIAN_POINT ( 'NONE', ( -0.6202885519842313800, -11.14890197946386300, -7.800000000000070000 ) ) ; #2352 = LINE ( 'NONE', #6154, #58 ) ; #2353 = PLANE ( 'NONE', #4787 ) ; #2354 = ORIENTED_EDGE ( 'NONE', *, *, #327, .F. ) ; #2355 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; #2356 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #2357 = CARTESIAN_POINT ( 'NONE', ( -1.479999999999979600, -3.100000000000049400, -13.77999999999999900 ) ) ; #2358 = VERTEX_POINT ( 'NONE', #329 ) ; #2359 = EDGE_CURVE ( 'NONE', #2366, #2342, #1160, .T. ) ; #2360 = ADVANCED_FACE ( 'NONE', ( #453, #780 ), #2945, .T. ) ; #2361 = VECTOR ( 'NONE', #3779, 1000.000000000000000 ) ; #2362 = DIRECTION ( 'NONE', ( 0.8543394976760290100, 0.5197153285315631000, 0.0000000000000000000 ) ) ; #2363 = CARTESIAN_POINT ( 'NONE', ( -1.549999999999049700, -6.500000000000060400, -7.349999999999999600 ) ) ; #2364 = VERTEX_POINT ( 'NONE', #4546 ) ; #2365 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; #2366 = VERTEX_POINT ( 'NONE', #6152 ) ; #2367 = ORIENTED_EDGE ( 'NONE', *, *, #2291, .F. ) ; #2368 = CIRCLE ( 'NONE', #401, 1.050000000000000000 ) ; #2369 = CIRCLE ( 'NONE', #4257, 0.5000000000000001100 ) ; #2370 = CARTESIAN_POINT ( 'NONE', ( -1.899999999998069900, -5.299999999999280400, -11.90000000000010000 ) ) ; #2371 = VERTEX_POINT ( 'NONE', #2447 ) ; #2372 = EDGE_CURVE ( 'NONE', #4993, #3955, #3728, .T. ) ; #2373 = CARTESIAN_POINT ( 'NONE', ( -4.500000000000060400, 0.0000000000000000000, -3.499999999999999600 ) ) ; #2374 = PERSON ( 'UNSPECIFIED', 'UNSPECIFIED', 'UNSPECIFIED', ('UNSPECIFIED'), ('UNSPECIFIED'), ('UNSPECIFIED') ) ; #2375 = CARTESIAN_POINT ( 'NONE', ( -2.299999999999080100, -1.199999999999980000, -11.80000000000000100 ) ) ; #2376 = LINE ( 'NONE', #6422, #319 ) ; #2377 = FACE_OUTER_BOUND ( 'NONE', #4430, .T. ) ; #2378 = ORIENTED_EDGE ( 'NONE', *, *, #3747, .F. ) ; #2379 = AXIS2_PLACEMENT_3D ( 'NONE', #5550, #1395, #3933 ) ; #2380 = CARTESIAN_POINT ( 'NONE', ( -0.3293503164289595700, -11.25707606986530400, -7.800000000000070000 ) ) ; #2381 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #2382 = DIRECTION ( 'NONE', ( 0.5197153285315629900, -0.8543394976760289000, -0.0000000000000000000 ) ) ; #2383 = VECTOR ( 'NONE', #4310, 1000.000000000000000 ) ; #2384 = EDGE_CURVE ( 'NONE', #3620, #1202, #4263, .T. ) ; #2385 = CARTESIAN_POINT ( 'NONE', ( -4.000000000000000000, 4.299999999999919900, -2.700000000000001100 ) ) ; #2386 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; #2387 = ORIENTED_EDGE ( 'NONE', *, *, #5904, .T. ) ; #2388 = AXIS2_PLACEMENT_3D ( 'NONE', #3082, #4625, #4119 ) ; #2389 = VECTOR ( 'NONE', #4029, 1000.000000000000000 ) ; #2390 = CARTESIAN_POINT ( 'NONE', ( -0.3640011646762044100, -2.648851359080818900, -10.59020922383540300 ) ) ; #2391 = ORIENTED_EDGE ( 'NONE', *, *, #4827, .F. ) ; #2392 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000090800, -5.700000000000730300, -7.599999999999934800 ) ) ; #2393 = CARTESIAN_POINT ( 'NONE', ( 2.454840885827508100, -1.018641820719724800, -9.900000000000002100 ) ) ; #2394 = CARTESIAN_POINT ( 'NONE', ( 1.074996727452463400, -5.210855274965741300, -5.484640381139167100 ) ) ; #2395 = CARTESIAN_POINT ( 'NONE', ( 4.499999999999950300, -2.150000000000039900, -11.80000000000000100 ) ) ; #2396 = ORIENTED_EDGE ( 'NONE', *, *, #1046, .F. ) ; #2397 = CARTESIAN_POINT ( 'NONE', ( 1.992027483134569200, -2.146699123532254100, -5.521499184909296300 ) ) ; #2398 = EDGE_CURVE ( 'NONE', #1770, #2154, #5565, .T. ) ; #2399 = DIRECTION ( 'NONE', ( -0.9952719235557661000, 0.08236899631855602900, -0.05146986134699781800 ) ) ; #2400 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; #2401 = ORIENTED_EDGE ( 'NONE', *, *, #6014, .T. ) ; #2402 = ORIENTED_EDGE ( 'NONE', *, *, #477, .T. ) ; #2403 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -9.150000000000000400 ) ) ; #2404 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; #2405 = VERTEX_POINT ( 'NONE', #4897 ) ; #2406 = FACE_OUTER_BOUND ( 'NONE', #4549, .T. ) ; #2407 = VERTEX_POINT ( 'NONE', #1876 ) ; #2408 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; #2409 = EDGE_LOOP ( 'NONE', ( #1409, #2341, #3874, #1515 ) ) ; #2410 = EDGE_CURVE ( 'NONE', #707, #1807, #1691, .T. ) ; #2411 = CARTESIAN_POINT ( 'NONE', ( -4.000000000000000900, 4.299999999999910100, -0.2071067811865469300 ) ) ; #2412 = ORIENTED_EDGE ( 'NONE', *, *, #3426, .T. ) ; #2413 = LINE ( 'NONE', #1154, #1011 ) ; #2414 = ORIENTED_EDGE ( 'NONE', *, *, #3993, .F. ) ; #2415 = VECTOR ( 'NONE', #1815, 1000.000000000000200 ) ; #2416 = VERTEX_POINT ( 'NONE', #1760 ) ; #2417 = EDGE_CURVE ( 'NONE', #2582, #6588, #3566, .T. ) ; #2418 = ADVANCED_FACE ( 'NONE', ( #5293 ), #3108, .F. ) ; #2419 = EDGE_LOOP ( 'NONE', ( #6452, #2059, #6326, #5351, #917, #1380 ) ) ; #2420 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; #2421 = VECTOR ( 'NONE', #5658, 1000.000000000000000 ) ; #2422 = EDGE_CURVE ( 'NONE', #3758, #1423, #3979, .T. ) ; #2423 = ORIENTED_EDGE ( 'NONE', *, *, #1585, .F. ) ; #2424 = ORIENTED_EDGE ( 'NONE', *, *, #1434, .F. ) ; #2425 = CARTESIAN_POINT ( 'NONE', ( -2.749999999999090500, -4.464352303020275400, -1.745990746103799800 ) ) ; #2426 = CARTESIAN_POINT ( 'NONE', ( -1.220745125442789200, -10.36250397190861200, -7.800000000000069100 ) ) ; #2427 = AXIS2_PLACEMENT_3D ( 'NONE', #6181, #1864, #6107 ) ; #2428 = CARTESIAN_POINT ( 'NONE', ( 1.249999999999970000, -9.749999999998360400, 21.81166452059000000 ) ) ; #2429 = ORIENTED_EDGE ( 'NONE', *, *, #3613, .F. ) ; #2430 = PLANE ( 'NONE', #1083 ) ; #2431 = CYLINDRICAL_SURFACE ( 'NONE', #2896, 0.1999999999999996500 ) ; #2432 = CARTESIAN_POINT ( 'NONE', ( -2.749999999999090500, -4.111624435740881500, -1.748839756839469400 ) ) ; #2433 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; #2434 = EDGE_LOOP ( 'NONE', ( #4215, #3897, #5407 ) ) ; #2435 = CARTESIAN_POINT ( 'NONE', ( 4.000000000000000900, 3.799999999999910100, -0.4999999999999990600 ) ) ; #2436 = VECTOR ( 'NONE', #5105, 1000.000000000000000 ) ; #2437 = EDGE_LOOP ( 'NONE', ( #5711, #3599, #3624, #4450 ) ) ; #2438 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; #2439 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; #2440 = LINE ( 'NONE', #1133, #299 ) ; #2441 = CARTESIAN_POINT ( 'NONE', ( 0.4041090024248559800, -4.760204666243097900, -4.721805525395509100 ) ) ; #2442 = VECTOR ( 'NONE', #2231, 1000.000000000000000 ) ; #2443 = EDGE_CURVE ( 'NONE', #5778, #4873, #5714, .T. ) ; #2444 = CARTESIAN_POINT ( 'NONE', ( 2.750000000000909900, -5.500000000000009800, -5.600000000000860300 ) ) ; #2445 = LINE ( 'NONE', #5642, #6481 ) ; #2446 = ORIENTED_EDGE ( 'NONE', *, *, #4293, .T. ) ; #2447 = CARTESIAN_POINT ( 'NONE', ( -1.199999999999930000, -3.100000000000049400, -13.42000000000000000 ) ) ; #2448 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; #2449 = CARTESIAN_POINT ( 'NONE', ( 1.249999999999969400, -8.978539816339356600, -8.475735931287999800 ) ) ; #2450 = VECTOR ( 'NONE', #6649, 999.9999999999998900 ) ; #2451 = ORIENTED_EDGE ( 'NONE', *, *, #6337, .T. ) ; #2452 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; #2453 = EDGE_CURVE ( 'NONE', #6635, #330, #2257, .T. ) ; #2454 = VECTOR ( 'NONE', #3702, 1000.000000000000000 ) ; #2455 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #2456 = EDGE_CURVE ( 'NONE', #2990, #6237, #4300, .T. ) ; #2457 = LINE ( 'NONE', #132, #2943 ) ; #2458 = EDGE_LOOP ( 'NONE', ( #1265, #6022, #6760, #409 ) ) ; #2459 = CARTESIAN_POINT ( 'NONE', ( 3.650000000000929800, -5.150000000000099800, -5.299999999999999800 ) ) ; #2460 = CARTESIAN_POINT ( 'NONE', ( -4.500000000000000000, 3.799999999999910100, -0.2071067811865463200 ) ) ; #2461 = ORIENTED_EDGE ( 'NONE', *, *, #785, .T. ) ; #2462 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; #2463 = CYLINDRICAL_SURFACE ( 'NONE', #3109, 0.5000000000000001100 ) ; #2464 = EDGE_CURVE ( 'NONE', #3301, #6684, #6464, .T. ) ; #2465 = CARTESIAN_POINT ( 'NONE', ( -9.662512969806920500, -9.539807621135009800, -13.77999999999999900 ) ) ; #2466 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; #2467 = LINE ( 'NONE', #6626, #3598 ) ; #2468 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #2469 = ORIENTED_EDGE ( 'NONE', *, *, #1949, .F. ) ; #2470 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000089900, -5.500000000000739900, -7.455595555460814000 ) ) ; #2471 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #2472 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #2473 = CARTESIAN_POINT ( 'NONE', ( 3.149999999999999900, 1.566164342312048600E-008, -9.692893218813468400 ) ) ; #2474 = AXIS2_PLACEMENT_3D ( 'NONE', #1074, #2554, #29 ) ; #2475 = ADVANCED_FACE ( 'NONE', ( #6131 ), #4963, .T. ) ; #2476 = VERTEX_POINT ( 'NONE', #4571 ) ; #2477 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #2478 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; #2479 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; #2480 = CARTESIAN_POINT ( 'NONE', ( 4.500000000000000000, 3.799999999999910100, -0.4999999999999990600 ) ) ; #2481 = CARTESIAN_POINT ( 'NONE', ( 4.000000000000000000, -6.500000000000061300, -0.4999999999999988300 ) ) ; #2482 = EDGE_LOOP ( 'NONE', ( #5075, #5970, #3262, #6124 ) ) ; #2483 = ORIENTED_EDGE ( 'NONE', *, *, #5479, .T. ) ; #2484 = CARTESIAN_POINT ( 'NONE', ( -1.190714193910480100E-014, -9.819999999999989600, -13.77999999999999900 ) ) ; #2485 = EDGE_CURVE ( 'NONE', #6483, #2752, #3071, .T. ) ; #2486 = VECTOR ( 'NONE', #5879, 1000.000000000000000 ) ; #2487 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #2488 = ORIENTED_EDGE ( 'NONE', *, *, #2269, .T. ) ; #2489 = VECTOR ( 'NONE', #6536, 1000.000000000000000 ) ; #2490 = ORIENTED_EDGE ( 'NONE', *, *, #4941, .F. ) ; #2491 = APPROVAL_ROLE ( '' ) ; #2492 = CARTESIAN_POINT ( 'NONE', ( 2.912473175842148700, -1.199999999999979500, -9.538973087065601300 ) ) ; #2493 = ORIENTED_EDGE ( 'NONE', *, *, #1446, .F. ) ; #2494 = CYLINDRICAL_SURFACE ( 'NONE', #4520, 0.4999999999999995600 ) ; #2495 = ORIENTED_EDGE ( 'NONE', *, *, #3681, .F. ) ; #2496 = LINE ( 'NONE', #1495, #2721 ) ; #2497 = CARTESIAN_POINT ( 'NONE', ( 18.18468237128200100, -2.565897943163849800, -6.596072138855420000 ) ) ; #2498 = EDGE_CURVE ( 'NONE', #3249, #3981, #1527, .T. ) ; #2499 = CARTESIAN_POINT ( 'NONE', ( 4.500000000000060400, -2.559999999999050600, -9.800000000000000700 ) ) ; #2500 = CARTESIAN_POINT ( 'NONE', ( -4.000000000000000000, 4.299999999999919900, -3.499999999999999600 ) ) ; #2501 = CARTESIAN_POINT ( 'NONE', ( 4.000000000000000000, -6.000000000000060400, -11.80000000000000100 ) ) ; #2502 = VECTOR ( 'NONE', #1965, 1000.000000000000000 ) ; #2503 = ORIENTED_EDGE ( 'NONE', *, *, #4724, .F. ) ; #2504 = ADVANCED_FACE ( 'NONE', ( #6797 ), #3894, .T. ) ; #2505 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #2506 = ORIENTED_EDGE ( 'NONE', *, *, #3219, .T. ) ; #2507 = CARTESIAN_POINT ( 'NONE', ( 2.009029822183793000, -2.229518632839390800, -5.325264134545157000 ) ) ; #2508 = AXIS2_PLACEMENT_3D ( 'NONE', #1303, #6020, #3942 ) ; #2509 = VERTEX_POINT ( 'NONE', #2248 ) ; #2510 = EDGE_CURVE ( 'NONE', #1946, #2358, #1941, .T. ) ; #2511 = FACE_OUTER_BOUND ( 'NONE', #3706, .T. ) ; #2512 = VERTEX_POINT ( 'NONE', #4861 ) ; #2513 = CARTESIAN_POINT ( 'NONE', ( 1.110223024625159900E-013, -5.551115123125780200E-014, -13.40000000000000000 ) ) ; #2514 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000060000, -6.350000000000021000, -7.950000000000000200 ) ) ; #2515 = CARTESIAN_POINT ( 'NONE', ( -1.997404010285665800, -1.984442534241352500, -5.157868539008385200 ) ) ; #2516 = APPROVAL_ROLE ( '' ) ; #2517 = CARTESIAN_POINT ( 'NONE', ( -3.149999999999999900, 2.734357112877037000E-009, -9.400000000000000400 ) ) ; #2518 = ORIENTED_EDGE ( 'NONE', *, *, #5090, .F. ) ; #2519 = LINE ( 'NONE', #3954, #6646 ) ; #2520 = ORIENTED_EDGE ( 'NONE', *, *, #2576, .F. ) ; #2521 = LINE ( 'NONE', #579, #1115 ) ; #2522 = ORIENTED_EDGE ( 'NONE', *, *, #1297, .F. ) ; #2523 = PLANE ( 'NONE', #1279 ) ; #2524 = CARTESIAN_POINT ( 'NONE', ( 2.086602978365095700, 1.642490973807657600, -9.899999999999998600 ) ) ; #2525 = CARTESIAN_POINT ( 'NONE', ( 1.249999999999970000, -8.848568570013149800, -8.265725857539040400 ) ) ; #2526 = CIRCLE ( 'NONE', #1678, 0.2999999999999999300 ) ; #2527 = CARTESIAN_POINT ( 'NONE', ( 1.777709254451912000, -2.831868875732265900, -10.76226831563481800 ) ) ; #2528 = EDGE_LOOP ( 'NONE', ( #3713, #3192, #424, #881 ) ) ; #2529 = EDGE_CURVE ( 'NONE', #3224, #2623, #6047, .T. ) ; #2530 = EDGE_LOOP ( 'NONE', ( #677, #2926, #3876, #4220 ) ) ; #2531 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000090200, -8.872628389125878800, -8.275978557906190900 ) ) ; #2532 = LINE ( 'NONE', #637, #6578 ) ; #2533 = VECTOR ( 'NONE', #3261, 1000.000000000000000 ) ; #2534 = EDGE_LOOP ( 'NONE', ( #3842, #6767 ) ) ; #2535 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; #2536 = CARTESIAN_POINT ( 'NONE', ( 1.900000000000900100, -5.299999999999280400, -11.90000000000010000 ) ) ; #2537 = FACE_OUTER_BOUND ( 'NONE', #1171, .T. ) ; #2538 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; #2539 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; #2540 = LINE ( 'NONE', #188, #3023 ) ; #2541 = ORIENTED_EDGE ( 'NONE', *, *, #3314, .F. ) ; #2542 = EDGE_CURVE ( 'NONE', #4607, #3275, #1022, .T. ) ; #2543 = ADVANCED_FACE ( 'NONE', ( #2511, #5380 ), #3924, .F. ) ; #2544 = CARTESIAN_POINT ( 'NONE', ( -3.650000000000039900, -5.150000000000099800, -5.299999999999999800 ) ) ; #2545 = FACE_OUTER_BOUND ( 'NONE', #6609, .T. ) ; #2546 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #2547 = ORIENTED_EDGE ( 'NONE', *, *, #6599, .T. ) ; #2548 = CARTESIAN_POINT ( 'NONE', ( -4.500000000000060400, -2.150000000000039900, -11.80000000000000100 ) ) ; #2549 = EDGE_CURVE ( 'NONE', #3295, #4260, #5880, .T. ) ; #2550 = EDGE_CURVE ( 'NONE', #5235, #4993, #2023, .T. ) ; #2551 = EDGE_LOOP ( 'NONE', ( #323, #4435, #2096, #599 ) ) ; #2552 = AXIS2_PLACEMENT_3D ( 'NONE', #3304, #2188, #1126 ) ; #2553 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, ( #2794, #746, #1201, #2307, #3839, #4850 ), .UNSPECIFIED., .F., .F., ( 4, 2, 4 ), ( 0.0000000000000000000, 0.5000000000000000000, 1.000000000000000000 ), .UNSPECIFIED. ) ; #2554 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; #2555 = CARTESIAN_POINT ( 'NONE', ( 2.750000000000910400, -4.605636422293942500, -1.699198742959720400 ) ) ; #2556 = CARTESIAN_POINT ( 'NONE', ( -2.013207476971863800, -2.035538615005105800, -4.934047967166648600 ) ) ; #2557 = PERSON_AND_ORGANIZATION_ROLE ( 'design_supplier' ) ; #2558 = ORIENTED_EDGE ( 'NONE', *, *, #5229, .T. ) ; #2559 = ORIENTED_EDGE ( 'NONE', *, *, #1000, .F. ) ; #2560 = VERTEX_POINT ( 'NONE', #253 ) ; #2561 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, ( #3370, #1304, #235, #6496 ), .UNSPECIFIED., .F., .F., ( 4, 4 ), ( 0.0000000000000000000, 1.000000000000000000 ), .UNSPECIFIED. ) ; #2562 = CARTESIAN_POINT ( 'NONE', ( 1.075528555105620000E-013, -5.551115123125780200E-014, -13.42000000000000000 ) ) ; #2563 = ORIENTED_EDGE ( 'NONE', *, *, #1072, .F. ) ; #2564 = ORIENTED_EDGE ( 'NONE', *, *, #2456, .F. ) ; #2565 = VECTOR ( 'NONE', #1554, 1000.000000000000000 ) ; #2566 = ORIENTED_EDGE ( 'NONE', *, *, #1229, .T. ) ; #2567 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #2568 = AXIS2_PLACEMENT_3D ( 'NONE', #6279, #1562, #3692 ) ; #2569 = CARTESIAN_POINT ( 'NONE', ( -1.479999999999980000, -3.100000000000049800, -13.77999999999999900 ) ) ; #2570 = LINE ( 'NONE', #3594, #1081 ) ; #2571 = ORIENTED_EDGE ( 'NONE', *, *, #5, .F. ) ; #2572 = FACE_OUTER_BOUND ( 'NONE', #6750, .T. ) ; #2573 = ORIENTED_EDGE ( 'NONE', *, *, #327, .T. ) ; #2574 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #2575 = ORIENTED_EDGE ( 'NONE', *, *, #4480, .F. ) ; #2576 = EDGE_CURVE ( 'NONE', #645, #4127, #1183, .T. ) ; #2577 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; #2578 = CYLINDRICAL_SURFACE ( 'NONE', #3116, 0.3999999999999993000 ) ; #2579 = APPLICATION_CONTEXT ( 'configuration controlled 3d designs of mechanical parts and assemblies' ) ; #2580 = PLANE ( 'NONE', #1323 ) ; #2581 = ORIENTED_EDGE ( 'NONE', *, *, #5585, .F. ) ; #2582 = VERTEX_POINT ( 'NONE', #2315 ) ; #2583 = CARTESIAN_POINT ( 'NONE', ( 1.469576144398566000E-016, 1.199999988095949300, -13.94999999999999900 ) ) ; #2584 = VECTOR ( 'NONE', #2164, 1000.000000000000000 ) ; #2585 = CARTESIAN_POINT ( 'NONE', ( 3.650000000000929800, -5.150000000000099800, -5.299999999999999800 ) ) ; #2586 = EDGE_CURVE ( 'NONE', #581, #6684, #6558, .T. ) ; #2587 = ORIENTED_EDGE ( 'NONE', *, *, #3340, .F. ) ; #2588 = CARTESIAN_POINT ( 'NONE', ( 3.600000000000160000, -6.049999999999999800, -11.80000000000000100 ) ) ; #2589 = CARTESIAN_POINT ( 'NONE', ( 0.3856389984869342300, -11.23923310679882800, -7.599999999999869100 ) ) ; #2590 = AXIS2_PLACEMENT_3D ( 'NONE', #4027, #5547, #1344 ) ; #2591 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -10.15000000000000000 ) ) ; #2592 = VECTOR ( 'NONE', #115, 1000.000000000000000 ) ; #2593 = ORIENTED_EDGE ( 'NONE', *, *, #6432, .F. ) ; #2594 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; #2595 = CARTESIAN_POINT ( 'NONE', ( 1.075528555105620000E-013, -5.551115123125780200E-014, -13.77999999999999900 ) ) ; #2596 = AXIS2_PLACEMENT_3D ( 'NONE', #6038, #2839, #2356 ) ; #2597 = CIRCLE ( 'NONE', #6188, 3.149999999999999900 ) ; #2598 = EDGE_CURVE ( 'NONE', #5716, #5192, #2175, .T. ) ; #2599 = FACE_OUTER_BOUND ( 'NONE', #6458, .T. ) ; #2600 = AXIS2_PLACEMENT_3D ( 'NONE', #3555, #5153, #1993 ) ; #2601 = CARTESIAN_POINT ( 'NONE', ( -1.992223753665456800, -2.004195758556365000, -5.289650849165832700 ) ) ; #2602 = LINE ( 'NONE', #502, #5481 ) ; #2603 = ORIENTED_EDGE ( 'NONE', *, *, #295, .T. ) ; #2604 = CARTESIAN_POINT ( 'NONE', ( -2.942893218813432900, 2.554578096920669500E-009, -9.900000000000023400 ) ) ; #2605 = AXIS2_PLACEMENT_3D ( 'NONE', #6512, #4456, #265 ) ; #2606 = EDGE_LOOP ( 'NONE', ( #2929, #3796, #5391, #5397 ) ) ; #2607 = CARTESIAN_POINT ( 'NONE', ( -1.550000000000830000, -3.350000000000020100, -14.40000000000000200 ) ) ; #2608 = VECTOR ( 'NONE', #4012, 1000.000000000000000 ) ; #2609 = VERTEX_POINT ( 'NONE', #689 ) ; #2610 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; #2611 = PLANE ( 'NONE', #3905 ) ; #2612 = ORIENTED_EDGE ( 'NONE', *, *, #1676, .T. ) ; #2613 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, ( #2142, #3760, #543, #2690 ), .UNSPECIFIED., .F., .F., ( 4, 4 ), ( 0.0000000000000000000, 1.000000000000000000 ), .UNSPECIFIED. ) ; #2614 = FACE_OUTER_BOUND ( 'NONE', #1624, .T. ) ; #2615 = LINE ( 'NONE', #962, #481 ) ; #2616 = CARTESIAN_POINT ( 'NONE', ( 3.650000000000929800, -5.500000000000009800, -11.80000000000000100 ) ) ; #2617 = ORIENTED_EDGE ( 'NONE', *, *, #6700, .T. ) ; #2618 = CARTESIAN_POINT ( 'NONE', ( 1.479999999999983100, -8.499999999999920100, -13.23381197846500100 ) ) ; #2619 = EDGE_CURVE ( 'NONE', #4761, #5128, #3641, .T. ) ; #2620 = ORIENTED_EDGE ( 'NONE', *, *, #509, .F. ) ; #2621 = EDGE_CURVE ( 'NONE', #5067, #2866, #4886, .T. ) ; #2622 = FACE_OUTER_BOUND ( 'NONE', #1595, .T. ) ; #2623 = VERTEX_POINT ( 'NONE', #4442 ) ; #2624 = CARTESIAN_POINT ( 'NONE', ( 2.299999999999859900, 0.0000000000000000000, -9.900000000000000400 ) ) ; #2625 = CARTESIAN_POINT ( 'NONE', ( 18.18468237128200100, -2.781668093414273000, -11.23989685449785000 ) ) ; #2626 = PERSON_AND_ORGANIZATION ( #2374, #4427 ) ; #2627 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.8480480961564268400, 0.5299192642332035700 ) ) ; #2628 = EDGE_CURVE ( 'NONE', #1711, #1139, #4636, .T. ) ; #2629 = ORIENTED_EDGE ( 'NONE', *, *, #6037, .F. ) ; #2630 = CARTESIAN_POINT ( 'NONE', ( -4.500000000000000000, -6.292893218813512500, -0.4999999999999996100 ) ) ; #2631 = AXIS2_PLACEMENT_3D ( 'NONE', #3859, #2860, #2288 ) ; #2632 = CARTESIAN_POINT ( 'NONE', ( 1.154921657688787300, -10.52857018883105400, -7.599999999999871700 ) ) ; #2633 = ORIENTED_EDGE ( 'NONE', *, *, #1358, .T. ) ; #2634 = CARTESIAN_POINT ( 'NONE', ( -4.149999999999995000, 0.0000000000000000000, -11.80000000000000100 ) ) ; #2635 = EDGE_CURVE ( 'NONE', #6400, #2192, #6224, .T. ) ; #2636 = CARTESIAN_POINT ( 'NONE', ( 2.750000000000909900, -5.500000000000009800, -1.500072740962020000 ) ) ; #2637 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; #2638 = AXIS2_PLACEMENT_3D ( 'NONE', #3013, #6222, #942 ) ; #2639 = ORIENTED_EDGE ( 'NONE', *, *, #525, .T. ) ; #2640 = CARTESIAN_POINT ( 'NONE', ( -2.035936095046349900, -3.259570268036264800, -6.453405145231467800 ) ) ; #2641 = CARTESIAN_POINT ( 'NONE', ( -1.992027483134156700, -2.146699123532213300, -5.521499184909321100 ) ) ; #2642 = CARTESIAN_POINT ( 'NONE', ( -9.662512969806920500, -8.299999999999940300, -12.93358983848630000 ) ) ; #2643 = EDGE_LOOP ( 'NONE', ( #1636, #526, #3595, #205 ) ) ; #2644 = CARTESIAN_POINT ( 'NONE', ( -3.650000000000039900, -5.500000000000009800, -11.80000000000000100 ) ) ; #2645 = VERTEX_POINT ( 'NONE', #5071 ) ; #2646 = LINE ( 'NONE', #3032, #5270 ) ; #2647 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #2648 = ORIENTED_EDGE ( 'NONE', *, *, #1000, .T. ) ; #2649 = VECTOR ( 'NONE', #491, 1000.000000000000000 ) ; #2650 = ORIENTED_EDGE ( 'NONE', *, *, #3104, .F. ) ; #2651 = EDGE_CURVE ( 'NONE', #2476, #2918, #943, .T. ) ; #2652 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; #2653 = ORIENTED_EDGE ( 'NONE', *, *, #4541, .T. ) ; #2654 = ADVANCED_FACE ( 'NONE', ( #3403 ), #280, .T. ) ; #2655 = LINE ( 'NONE', #5048, #4451 ) ; #2656 = VERTEX_POINT ( 'NONE', #803 ) ; #2657 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #2658 = CIRCLE ( 'NONE', #5763, 0.7999999999999999300 ) ; #2659 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; #2660 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #2661 = VERTEX_POINT ( 'NONE', #2909 ) ; #2662 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #2663 = VECTOR ( 'NONE', #6268, 1000.000000000000000 ) ; #2664 = ORIENTED_EDGE ( 'NONE', *, *, #3944, .T. ) ; #2665 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #2666 = EDGE_CURVE ( 'NONE', #88, #5875, #1438, .T. ) ; #2667 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #2668 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 1.836970198721029900E-016, -10.15000000000000000 ) ) ; #2669 = FACE_OUTER_BOUND ( 'NONE', #117, .T. ) ; #2670 = ORIENTED_EDGE ( 'NONE', *, *, #1206, .F. ) ; #2671 = FACE_OUTER_BOUND ( 'NONE', #3959, .T. ) ; #2672 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.7071067811861370100, 0.7071067811869581300 ) ) ; #2673 = EDGE_LOOP ( 'NONE', ( #2396, #2829, #3134, #4779 ) ) ; #2674 = CARTESIAN_POINT ( 'NONE', ( 1.075528555105620000E-013, -5.551115123125780200E-014, -13.77999999999999900 ) ) ; #2675 = EDGE_CURVE ( 'NONE', #6547, #1089, #5284, .T. ) ; #2676 = FACE_OUTER_BOUND ( 'NONE', #2530, .T. ) ; #2677 = CARTESIAN_POINT ( 'NONE', ( -1.189204713810699100, -10.43571080435761400, -7.599999999999868200 ) ) ; #2678 = LINE ( 'NONE', #3798, #2186 ) ; #2679 = VERTEX_POINT ( 'NONE', #6606 ) ; #2680 = CARTESIAN_POINT ( 'NONE', ( -1.549999999999049900, -1.100000000000100000, -11.80000000000000100 ) ) ; #2681 = FACE_OUTER_BOUND ( 'NONE', #3509, .T. ) ; #2682 = VERTEX_POINT ( 'NONE', #6679 ) ; #2683 = CARTESIAN_POINT ( 'NONE', ( 4.500000000000000000, -6.000000000000059500, -0.2071067811865461800 ) ) ; #2684 = LINE ( 'NONE', #2902, #2998 ) ; #2685 = ADVANCED_FACE ( 'NONE', ( #6550 ), #3943, .F. ) ; #2686 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; #2687 = LINE ( 'NONE', #635, #5409 ) ; #2688 = ORIENTED_EDGE ( 'NONE', *, *, #5323, .F. ) ; #2689 = CARTESIAN_POINT ( 'NONE', ( 18.18468237128200100, -9.699999999999819900, -7.800000000000070000 ) ) ; #2690 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000090800, -9.699999999999365100, -7.599999999999969400 ) ) ; #2691 = VECTOR ( 'NONE', #1868, 1000.000000000000000 ) ; #2692 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #2693 = LINE ( 'NONE', #4488, #4241 ) ; #2694 = CARTESIAN_POINT ( 'NONE', ( -4.000000000000000000, 3.799999999999910100, -2.700000000000001100 ) ) ; #2695 = CARTESIAN_POINT ( 'NONE', ( 2.010880259306693700, -2.283098795542567700, -5.375228444583545000 ) ) ; #2696 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; #2697 = LINE ( 'NONE', #5215, #3260 ) ; #2698 = ORIENTED_EDGE ( 'NONE', *, *, #1398, .F. ) ; #2699 = EDGE_CURVE ( 'NONE', #3633, #6539, #3559, .T. ) ; #2700 = ADVANCED_FACE ( 'NONE', ( #4217 ), #1522, .T. ) ; #2701 = LINE ( 'NONE', #5008, #4339 ) ; #2702 = CARTESIAN_POINT ( 'NONE', ( -2.454714150587596200, -1.018891355169483600, -9.899999999999996800 ) ) ; #2703 = CARTESIAN_POINT ( 'NONE', ( 0.1121076653245808700, -2.706528140139976100, -10.04147890228909600 ) ) ; #2704 = EDGE_LOOP ( 'NONE', ( #6257, #3546, #2664, #5457 ) ) ; #2705 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; #2706 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; #2707 = CARTESIAN_POINT ( 'NONE', ( -2.739999999999950000, -2.559999999999050100, -11.80000000000000100 ) ) ; #2708 = EDGE_CURVE ( 'NONE', #2187, #4199, #2736, .T. ) ; #2709 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; #2710 = AXIS2_PLACEMENT_3D ( 'NONE', #3438, #5020, #3970 ) ; #2711 = CARTESIAN_POINT ( 'NONE', ( -1.734723475976807100E-015, -2.699783421336157600, -10.03070813642794000 ) ) ; #2712 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #2713 = CC_DESIGN_PERSON_AND_ORGANIZATION_ASSIGNMENT ( #6594, #949, ( #1313 ) ) ; #2714 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; #2715 = ADVANCED_FACE ( 'NONE', ( #2833 ), #3825, .T. ) ; #2716 = ORIENTED_EDGE ( 'NONE', *, *, #4166, .T. ) ; #2717 = CARTESIAN_POINT ( 'NONE', ( 2.890671664372520300, -2.430323138703160100, -2.779157999888000100 ) ) ; #2718 = EDGE_CURVE ( 'NONE', #4118, #5701, #6712, .T. ) ; #2719 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #2720 = AXIS2_PLACEMENT_3D ( 'NONE', #6210, #4557, #1469 ) ; #2721 = VECTOR ( 'NONE', #5693, 1000.000000000000000 ) ; #2722 = CARTESIAN_POINT ( 'NONE', ( 18.18468237128200100, -8.687867965643759400, -8.387867965643870600 ) ) ; #2723 = ORIENTED_EDGE ( 'NONE', *, *, #1948, .F. ) ; #2724 = FACE_OUTER_BOUND ( 'NONE', #1838, .T. ) ; #2725 = ORIENTED_EDGE ( 'NONE', *, *, #5684, .T. ) ; #2726 = AXIS2_PLACEMENT_3D ( 'NONE', #1724, #4267, #4295 ) ; #2727 = CARTESIAN_POINT ( 'NONE', ( -1.499999999999830100, -5.350000000000021000, -7.950000000000000200 ) ) ; #2728 = CARTESIAN_POINT ( 'NONE', ( 1.753055252706017500, -2.640081953633751900, -10.67364454330572900 ) ) ; #2729 = LINE ( 'NONE', #6418, #5450 ) ; #2730 = CARTESIAN_POINT ( 'NONE', ( 1.479999999999979600, -8.499999999999920100, -13.27999999999999900 ) ) ; #2731 = ORIENTED_EDGE ( 'NONE', *, *, #1260, .F. ) ; #2732 = FACE_OUTER_BOUND ( 'NONE', #4292, .T. ) ; #2733 = EDGE_LOOP ( 'NONE', ( #5858, #674, #5596, #99 ) ) ; #2734 = ORIENTED_EDGE ( 'NONE', *, *, #6395, .F. ) ; #2735 = ADVANCED_FACE ( 'NONE', ( #3888 ), #6218, .T. ) ; #2736 = LINE ( 'NONE', #1356, #5709 ) ; #2737 = CARTESIAN_POINT ( 'NONE', ( -2.168404344971008900E-015, -2.699783421336155800, -10.03070813642794200 ) ) ; #2738 = ORIENTED_EDGE ( 'NONE', *, *, #3506, .F. ) ; #2739 = CARTESIAN_POINT ( 'NONE', ( 1.249999999999969800, -8.099999999999450800, -7.599999999999920600 ) ) ; #2740 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; #2741 = EDGE_CURVE ( 'NONE', #6449, #1172, #2168, .T. ) ; #2742 = VERTEX_POINT ( 'NONE', #6723 ) ; #2743 = CARTESIAN_POINT ( 'NONE', ( 1.200000000000090100, -3.100000000000049800, -13.77999999999999900 ) ) ; #2744 = VECTOR ( 'NONE', #1785, 999.9999999999998900 ) ; #2745 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; #2746 = VERTEX_POINT ( 'NONE', #5654 ) ; #2747 = VERTEX_POINT ( 'NONE', #966 ) ; #2748 = EDGE_LOOP ( 'NONE', ( #6389, #1833, #5615, #5761 ) ) ; #2749 = FACE_OUTER_BOUND ( 'NONE', #3324, .T. ) ; #2750 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #2751 = EDGE_CURVE ( 'NONE', #5218, #1947, #209, .T. ) ; #2752 = VERTEX_POINT ( 'NONE', #1452 ) ; #2753 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; #2754 = LINE ( 'NONE', #184, #1370 ) ; #2755 = ORIENTED_EDGE ( 'NONE', *, *, #728, .F. ) ; #2756 = ADVANCED_FACE ( 'NONE', ( #4139, #5134 ), #3009, .F. ) ; #2757 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #2758 = CARTESIAN_POINT ( 'NONE', ( 4.499999999999950300, 2.400000000000960000, -2.549999999999999800 ) ) ; #2759 = EDGE_CURVE ( 'NONE', #1830, #5806, #2904, .T. ) ; #2760 = AXIS2_PLACEMENT_3D ( 'NONE', #4400, #3892, #1804 ) ; #2761 = CARTESIAN_POINT ( 'NONE', ( -1.480000000000000400, -9.539807621135009800, -13.77999999999999900 ) ) ; #2762 = VECTOR ( 'NONE', #2448, 1000.000000000000000 ) ; #2763 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #2764 = ORIENTED_EDGE ( 'NONE', *, *, #5460, .F. ) ; #2765 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #2766 = EDGE_CURVE ( 'NONE', #4790, #6622, #5255, .T. ) ; #2767 = ORIENTED_EDGE ( 'NONE', *, *, #2718, .F. ) ; #2768 = EDGE_CURVE ( 'NONE', #6426, #3615, #1777, .T. ) ; #2769 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #2770 = CARTESIAN_POINT ( 'NONE', ( -3.650000000000039900, -5.500000000000009800, -11.80000000000000100 ) ) ; #2771 = AXIS2_PLACEMENT_3D ( 'NONE', #1008, #4177, #50 ) ; #2772 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, ( #5271, #4752, #2640, #578, #5342, #6354 ), .UNSPECIFIED., .F., .F., ( 4, 2, 4 ), ( 0.0000000000000000000, 0.5000000000000000000, 1.000000000000000000 ), .UNSPECIFIED. ) ; #2773 = FACE_OUTER_BOUND ( 'NONE', #4380, .T. ) ; #2774 = PLANE ( 'NONE', #6820 ) ; #2775 = ORIENTED_EDGE ( 'NONE', *, *, #263, .T. ) ; #2776 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #2777 = CARTESIAN_POINT ( 'NONE', ( 4.000000000000000000, -6.000000000000060400, -0.4999999999999990600 ) ) ; #2778 = VERTEX_POINT ( 'NONE', #3114 ) ; #2779 = ADVANCED_FACE ( 'NONE', ( #5466 ), #608, .F. ) ; #2780 = CARTESIAN_POINT ( 'NONE', ( -2.299999999999080100, -2.000000000000110100, -11.80000000000000100 ) ) ; #2781 = PLANE ( 'NONE', #493 ) ; #2782 = VECTOR ( 'NONE', #69, 1000.000000000000000 ) ; #2783 = LINE ( 'NONE', #1696, #5078 ) ; #2784 = VERTEX_POINT ( 'NONE', #3637 ) ; #2785 = CARTESIAN_POINT ( 'NONE', ( 4.499999999999950300, 0.0000000000000000000, -11.79999999999999900 ) ) ; #2786 = CARTESIAN_POINT ( 'NONE', ( 1.484229079285390100, -2.590127581733371100, -11.14892864364818300 ) ) ; #2787 = CARTESIAN_POINT ( 'NONE', ( -9.662512969806920500, -7.460192378863940400, -13.77999999999999900 ) ) ; #2788 = FACE_OUTER_BOUND ( 'NONE', #6375, .T. ) ; #2789 = CARTESIAN_POINT ( 'NONE', ( -1.499999999999830100, -6.350000000000020100, -11.79999999999999900 ) ) ; #2790 = AXIS2_PLACEMENT_3D ( 'NONE', #6240, #4672, #1045 ) ; #2791 = ORIENTED_EDGE ( 'NONE', *, *, #2651, .F. ) ; #2792 = CARTESIAN_POINT ( 'NONE', ( 1.200000000000090100, -1.962141687034497200, -13.42000000000000000 ) ) ; #2793 = LOCAL_TIME ( 16, 54, 2.000000000000000000, #4183 ) ; #2794 = CARTESIAN_POINT ( 'NONE', ( 1.249999999999969800, -5.299999999999388800, -7.399999999999113100 ) ) ; #2795 = CARTESIAN_POINT ( 'NONE', ( 0.07658512049671839500, -2.739046714313317500, -10.01125925989606500 ) ) ; #2796 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #2797 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000091300, -5.300000000000014000, -7.504719755119168700 ) ) ; #2798 = ORIENTED_EDGE ( 'NONE', *, *, #1747, .T. ) ; #2799 = ADVANCED_FACE ( 'NONE', ( #3068 ), #4066, .T. ) ; #2800 = ORIENTED_EDGE ( 'NONE', *, *, #5548, .F. ) ; #2801 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; #2802 = EDGE_CURVE ( 'NONE', #5373, #2742, #770, .T. ) ; #2803 = EDGE_LOOP ( 'NONE', ( #5707, #1161, #930, #6205 ) ) ; #2804 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.5446390350151350000, 0.8386705679453540000 ) ) ; #2805 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; #2806 = EDGE_CURVE ( 'NONE', #1341, #5029, #5203, .T. ) ; #2807 = CARTESIAN_POINT ( 'NONE', ( 1.050000000000000000, 0.0000000000000000000, -11.80000000000000100 ) ) ; #2808 = CARTESIAN_POINT ( 'NONE', ( -1.499999999999830100, -5.350000000000021000, -11.80000000000000100 ) ) ; #2809 = CARTESIAN_POINT ( 'NONE', ( 4.500000000000060400, -2.559999999999050100, -9.800000000000000700 ) ) ; #2810 = EDGE_CURVE ( 'NONE', #3809, #3576, #1259, .T. ) ; #2811 = ADVANCED_FACE ( 'NONE', ( #3144 ), #2020, .T. ) ; #2812 = CARTESIAN_POINT ( 'NONE', ( 3.200000000000979800, -1.100000000000100000, -11.80000000000000100 ) ) ; #2813 = ORIENTED_EDGE ( 'NONE', *, *, #3618, .T. ) ; #2814 = VECTOR ( 'NONE', #3354, 1000.000000000000100 ) ; #2815 = ORIENTED_EDGE ( 'NONE', *, *, #3531, .T. ) ; #2816 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000059700, -5.350000000000021000, -11.79999999999999900 ) ) ; #2817 = VERTEX_POINT ( 'NONE', #4723 ) ; #2818 = AXIS2_PLACEMENT_3D ( 'NONE', #2053, #4099, #4054 ) ; #2819 = FACE_OUTER_BOUND ( 'NONE', #3687, .T. ) ; #2820 = VERTEX_POINT ( 'NONE', #22 ) ; #2821 = LINE ( 'NONE', #1860, #1761 ) ; #2822 = EDGE_LOOP ( 'NONE', ( #852, #296, #3196, #467 ) ) ; #2823 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; #2824 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, ( #4060, #910, #1418, #3045, #6211, #1444, #416, #2524, #1980, #5652, #6742, #391, #3025, #1961, #932, #6164, #4601, #3565, #1471, #5140, #3003, #432, #5624, #2002, #4103, #6691, #959, #4626, #1494, #3289, #6492, #164, #6002, #3367, #2244, #682, #4372, #1822, #3319, #3865, #1234, #4419, #4397, #1277 ), .UNSPECIFIED., .F., .F., ( 4, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 4 ), ( 0.1168509028977303700, 0.1647432205539318100, 0.2126355382101333100, 0.2605278558663347600, 0.3084201735225362600, 0.3323663323506369500, 0.3563124911787376400, 0.3802586500068383400, 0.4042048088349389800, 0.4281509676630396200, 0.4520971264911402600, 0.4999894441473415900, 0.5478817618035427600, 0.5718279206316434500, 0.5957740794597441400, 0.6197202382878447300, 0.6436663971159454200, 0.6676125559440460000, 0.6915587147721467000, 0.7394510324283479800, 0.7873433500845492500, 0.8352356677407506400, 0.8831279853969519200 ), .UNSPECIFIED. ) ; #2825 = CARTESIAN_POINT ( 'NONE', ( 2.499999999999949800, 2.400000000000960000, -1.000000000000000000 ) ) ; #2826 = CARTESIAN_POINT ( 'NONE', ( -4.000000000000000000, 3.799999999999910100, -0.4999999999999990600 ) ) ; #2827 = ORIENTED_EDGE ( 'NONE', *, *, #5207, .F. ) ; #2828 = FACE_OUTER_BOUND ( 'NONE', #2330, .T. ) ; #2829 = ORIENTED_EDGE ( 'NONE', *, *, #4764, .F. ) ; #2830 = CARTESIAN_POINT ( 'NONE', ( -2.500000000000060000, 4.299999999999919900, -1.000000000000000000 ) ) ; #2831 = CARTESIAN_POINT ( 'NONE', ( -1.479999999999980200, -3.100000000000049400, -13.42000000000000000 ) ) ; #2832 = CARTESIAN_POINT ( 'NONE', ( 1.000000000000000000, 1.999999999999999800, -2.100000000000050300 ) ) ; #2833 = FACE_OUTER_BOUND ( 'NONE', #5198, .T. ) ; #2834 = ORIENTED_EDGE ( 'NONE', *, *, #5923, .F. ) ; #2835 = CARTESIAN_POINT ( 'NONE', ( 0.4785488709736184200, -11.20493010742173500, -7.800000000000070900 ) ) ; #2836 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; #2837 = CARTESIAN_POINT ( 'NONE', ( 3.600000000000160000, -6.350000000000021000, -7.950000000000000200 ) ) ; #2838 = LINE ( 'NONE', #2514, #214 ) ; #2839 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; #2840 = CARTESIAN_POINT ( 'NONE', ( 4.499999999999950300, 3.799999999999910100, -11.80000000000000100 ) ) ; #2841 = VERTEX_POINT ( 'NONE', #6350 ) ; #2842 = LINE ( 'NONE', #4404, #6055 ) ; #2843 = EDGE_CURVE ( 'NONE', #4817, #4604, #3972, .T. ) ; #2844 = ADVANCED_FACE ( 'NONE', ( #1103 ), #2065, .T. ) ; #2845 = CARTESIAN_POINT ( 'NONE', ( -0.2413977487997006300, -2.632935664082447500, -10.74163694659229200 ) ) ; #2846 = LINE ( 'NONE', #3810, #1278 ) ; #2847 = ADVANCED_FACE ( 'NONE', ( #3398 ), #4152, .F. ) ; #2848 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; #2849 = FACE_OUTER_BOUND ( 'NONE', #4713, .T. ) ; #2850 = ORIENTED_EDGE ( 'NONE', *, *, #4746, .F. ) ; #2851 = ORIENTED_EDGE ( 'NONE', *, *, #5448, .T. ) ; #2852 = EDGE_CURVE ( 'NONE', #2310, #4808, #2335, .T. ) ; #2853 = CARTESIAN_POINT ( 'NONE', ( -2.017465759579050800, -3.061770762108269500, -6.494020361184166000 ) ) ; #2854 = AXIS2_PLACEMENT_3D ( 'NONE', #4574, #1955, #5031 ) ; #2855 = FACE_OUTER_BOUND ( 'NONE', #3716, .T. ) ; #2856 = ORIENTED_EDGE ( 'NONE', *, *, #5121, .F. ) ; #2857 = AXIS2_PLACEMENT_3D ( 'NONE', #4994, #5014, #5531 ) ; #2858 = CARTESIAN_POINT ( 'NONE', ( -0.1962934954581544400, -11.28908831120327200, -7.800000000000069100 ) ) ; #2859 = CIRCLE ( 'NONE', #305, 3.149999999999999900 ) ; #2860 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; #2861 = LINE ( 'NONE', #4270, #6071 ) ; #2862 = VERTEX_POINT ( 'NONE', #4678 ) ; #2863 = EDGE_CURVE ( 'NONE', #975, #4383, #5798, .T. ) ; #2864 = CARTESIAN_POINT ( 'NONE', ( 0.2628438422365768100, -5.299999999999279500, -4.126318815617719500 ) ) ; #2865 = AXIS2_PLACEMENT_3D ( 'NONE', #902, #400, #4091 ) ; #2866 = VERTEX_POINT ( 'NONE', #576 ) ; #2867 = VECTOR ( 'NONE', #529, 1000.000000000000100 ) ; #2868 = LINE ( 'NONE', #4302, #970 ) ; #2869 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; #2870 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; #2871 = CARTESIAN_POINT ( 'NONE', ( -3.469446951953610200E-015, -2.699783421336158500, -10.03070813642794200 ) ) ; #2872 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; #2873 = VECTOR ( 'NONE', #6340, 1000.000000000000000 ) ; #2874 = ORIENTED_EDGE ( 'NONE', *, *, #1900, .T. ) ; #2875 = ADVANCED_FACE ( 'NONE', ( #3216 ), #2578, .T. ) ; #2876 = CALENDAR_DATE ( 2018, 27, 9 ) ; #2877 = EDGE_CURVE ( 'NONE', #3788, #6151, #6789, .T. ) ; #2878 = EDGE_LOOP ( 'NONE', ( #90, #5150 ) ) ; #2879 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; #2880 = CARTESIAN_POINT ( 'NONE', ( 1.249999999999969800, -8.687867965643739900, -8.387867965643890100 ) ) ; #2881 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #2882 = DIRECTION ( 'NONE', ( 0.08810188277373559600, -0.5425211891288174200, 0.8354093712653556400 ) ) ; #2883 = ORIENTED_EDGE ( 'NONE', *, *, #5502, .T. ) ; #2884 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #2885 = CARTESIAN_POINT ( 'NONE', ( 18.18468237128200100, -2.906897123192780300, -6.230395288045460100 ) ) ; #2886 = CARTESIAN_POINT ( 'NONE', ( -0.04554613899269914500, -2.624579053178250900, -10.82114478833702300 ) ) ; #2887 = ORIENTED_EDGE ( 'NONE', *, *, #1723, .F. ) ; #2888 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; #2889 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #2890 = LINE ( 'NONE', #2363, #2165 ) ; #2891 = VERTEX_POINT ( 'NONE', #2940 ) ; #2892 = VECTOR ( 'NONE', #4914, 1000.000000000000100 ) ; #2893 = ORIENTED_EDGE ( 'NONE', *, *, #5980, .T. ) ; #2894 = EDGE_CURVE ( 'NONE', #2163, #2645, #285, .T. ) ; #2895 = CARTESIAN_POINT ( 'NONE', ( -1.100119322147173200, -10.64652461718976900, -7.800000000000069100 ) ) ; #2896 = AXIS2_PLACEMENT_3D ( 'NONE', #2689, #4311, #4847 ) ; #2897 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.5299192642332050100, -0.8480480961564259600 ) ) ; #2898 = LINE ( 'NONE', #5788, #5779 ) ; #2899 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #2900 = VERTEX_POINT ( 'NONE', #1569 ) ; #2901 = CIRCLE ( 'NONE', #3067, 0.3499999999999996400 ) ; #2902 = CARTESIAN_POINT ( 'NONE', ( -1.992027483134214400, -2.146699123532246100, -5.521499184909276700 ) ) ; #2903 = CARTESIAN_POINT ( 'NONE', ( -0.8913436791310670500, -5.299999999999282200, -4.576835537239738000 ) ) ; #2904 = LINE ( 'NONE', #3544, #4632 ) ; #2905 = CARTESIAN_POINT ( 'NONE', ( 0.3640211756986571100, -2.648866785766221800, -10.59006244872814800 ) ) ; #2906 = ORIENTED_EDGE ( 'NONE', *, *, #111, .F. ) ; #2907 = ADVANCED_FACE ( 'NONE', ( #4381 ), #5873, .T. ) ; #2908 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; #2909 = CARTESIAN_POINT ( 'NONE', ( 4.499999999999950300, -2.150000000000039900, -11.79999999999999900 ) ) ; #2910 = VECTOR ( 'NONE', #2872, 1000.000000000000000 ) ; #2911 = ORIENTED_EDGE ( 'NONE', *, *, #2549, .F. ) ; #2912 = CARTESIAN_POINT ( 'NONE', ( 2.039893043162158000, -3.123175802448721100, -6.158612927038852500 ) ) ; #2913 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; #2914 = VERTEX_POINT ( 'NONE', #3486 ) ; #2915 = ORIENTED_EDGE ( 'NONE', *, *, #1530, .T. ) ; #2916 = VECTOR ( 'NONE', #6683, 1000.000000000000000 ) ; #2917 = CARTESIAN_POINT ( 'NONE', ( 3.149999999999999900, -3.857637417314162700E-016, -9.400000000000000400 ) ) ; #2918 = VERTEX_POINT ( 'NONE', #3946 ) ; #2919 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.5299192642332050100, 0.8480480961564259600 ) ) ; #2920 = LINE ( 'NONE', #4351, #383 ) ; #2921 = CARTESIAN_POINT ( 'NONE', ( -1.479999999999979600, -7.460192378863940400, -13.43000000000000000 ) ) ; #2922 = ORIENTED_EDGE ( 'NONE', *, *, #4172, .F. ) ; #2923 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000060000, -6.350000000000021000, -13.44999999999999900 ) ) ; #2924 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; #2925 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.1045284632678930300, -0.9945218953682482000 ) ) ; #2926 = ORIENTED_EDGE ( 'NONE', *, *, #6096, .T. ) ; #2927 = EDGE_CURVE ( 'NONE', #4591, #2841, #6374, .T. ) ; #2928 = LINE ( 'NONE', #5544, #1544 ) ; #2929 = ORIENTED_EDGE ( 'NONE', *, *, #5040, .F. ) ; #2930 = CARTESIAN_POINT ( 'NONE', ( -0.3735323091972345700, -2.651245867898090100, -10.56742699425900300 ) ) ; #2931 = EDGE_CURVE ( 'NONE', #6828, #436, #4458, .T. ) ; #2932 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #2933 = ORIENTED_EDGE ( 'NONE', *, *, #160, .F. ) ; #2934 = CARTESIAN_POINT ( 'NONE', ( 3.200000000000979800, -1.199999999999980000, -11.80000000000000100 ) ) ; #2935 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #2936 = LINE ( 'NONE', #1322, #2608 ) ; #2937 = CARTESIAN_POINT ( 'NONE', ( -4.500000000000060400, -2.150000000000039900, -11.80000000000000100 ) ) ; #2938 = ORIENTED_EDGE ( 'NONE', *, *, #2324, .F. ) ; #2939 = EDGE_CURVE ( 'NONE', #2512, #1143, #3717, .T. ) ; #2940 = CARTESIAN_POINT ( 'NONE', ( -1.480000000000001300, -9.819999999999984300, -13.77999999999999900 ) ) ; #2941 = CARTESIAN_POINT ( 'NONE', ( 8.847089727481720200E-013, -5.500000000000009800, -11.90000000000010000 ) ) ; #2942 = LINE ( 'NONE', #43, #807 ) ; #2943 = VECTOR ( 'NONE', #611, 1000.000000000000000 ) ; #2944 = ORIENTED_EDGE ( 'NONE', *, *, #5937, .F. ) ; #2945 = PLANE ( 'NONE', #5365 ) ; #2946 = PRODUCT_DEFINITION_FORMATION_WITH_SPECIFIED_SOURCE ( 'ANY', '', #1309, .NOT_KNOWN. ) ; #2947 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; #2948 = CLOSED_SHELL ( 'NONE', ( #3821, #1680, #563, #1737, #1969, #3475, #1063, #4728, #5648, #3322, #6175, #6351, #3358, #6548, #5339, #1286, #4935, #318, #1442 ) ) ; #2949 = VECTOR ( 'NONE', #4823, 1000.000000000000000 ) ; #2950 = EDGE_CURVE ( 'NONE', #41, #5218, #5374, .T. ) ; #2951 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; #2952 = CARTESIAN_POINT ( 'NONE', ( 2.833265219420220600, -0.9232408236222217100, -9.900000000000025200 ) ) ; #2953 = SHAPE_DEFINITION_REPRESENTATION ( #3920, #4491 ) ; #2954 = CARTESIAN_POINT ( 'NONE', ( -9.662512969806920500, -9.542487113058909300, -13.42000000000000000 ) ) ; #2955 = AXIS2_PLACEMENT_3D ( 'NONE', #1237, #2302, #6520 ) ; #2956 = ORIENTED_EDGE ( 'NONE', *, *, #2621, .F. ) ; #2957 = CARTESIAN_POINT ( 'NONE', ( -4.292893218813453000, 4.092893218813363100, 8.673617379884035500E-016 ) ) ; #2958 = CARTESIAN_POINT ( 'NONE', ( -0.4038174545077519700, -4.761552218842772400, -5.484640381139166200 ) ) ; #2959 = ADVANCED_FACE ( 'NONE', ( #113 ), #4444, .T. ) ; #2960 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.5446390350151350000, -0.8386705679453540000 ) ) ; #2961 = VERTEX_POINT ( 'NONE', #5538 ) ; #2962 = CARTESIAN_POINT ( 'NONE', ( -2.749999999999090100, -4.605638465578715900, -1.704975284425903600 ) ) ; #2963 = EDGE_CURVE ( 'NONE', #4873, #1578, #931, .T. ) ; #2964 = CARTESIAN_POINT ( 'NONE', ( -1.549999999999050400, -6.500000000000060400, -11.80000000000000100 ) ) ; #2965 = EDGE_CURVE ( 'NONE', #6232, #4966, #6125, .T. ) ; #2966 = CARTESIAN_POINT ( 'NONE', ( -1.777709254451546500, -2.831868875732335100, -10.76226831563597500 ) ) ; #2967 = CARTESIAN_POINT ( 'NONE', ( 2.299999999999859900, -1.100000000000100000, -11.80000000000000100 ) ) ; #2968 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; #2969 = EDGE_LOOP ( 'NONE', ( #5063, #5200, #742, #6819 ) ) ; #2970 = LINE ( 'NONE', #805, #5943 ) ; #2971 = ORIENTED_EDGE ( 'NONE', *, *, #601, .T. ) ; #2972 = CARTESIAN_POINT ( 'NONE', ( 3.030782786503116700, -2.199999999999176400, -11.80000000000000200 ) ) ; #2973 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #2974 = EDGE_CURVE ( 'NONE', #1330, #5629, #2655, .T. ) ; #2975 = CARTESIAN_POINT ( 'NONE', ( 4.499999999999950300, 4.299999999999919900, -1.000000000000000000 ) ) ; #2976 = CARTESIAN_POINT ( 'NONE', ( -1.199999999999930200, 2.300000000000019800, -13.77999999999999900 ) ) ; #2977 = ORIENTED_EDGE ( 'NONE', *, *, #2312, .F. ) ; #2978 = ORIENTED_EDGE ( 'NONE', *, *, #3064, .F. ) ; #2979 = CIRCLE ( 'NONE', #105, 1.050000000000000000 ) ; #2980 = EDGE_LOOP ( 'NONE', ( #3797, #256, #1419, #1176, #1436, #6717, #3481, #6243, #4536, #338, #279, #2791, #6421, #1593, #3396, #2019 ) ) ; #2981 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.5299192642332050100, -0.8480480961564259600 ) ) ; #2982 = VECTOR ( 'NONE', #6089, 1000.000000000000000 ) ; #2983 = EDGE_LOOP ( 'NONE', ( #3316, #4688, #6474, #2956, #6030, #1818, #4695, #2648, #4951, #3635, #5204, #6135 ) ) ; #2984 = ORIENTED_EDGE ( 'NONE', *, *, #2619, .F. ) ; #2985 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #2986 = CARTESIAN_POINT ( 'NONE', ( -4.339999999999969700, -2.199999999999129800, -9.800000000000000700 ) ) ; #2987 = AXIS2_PLACEMENT_3D ( 'NONE', #3891, #754, #775 ) ; #2988 = VECTOR ( 'NONE', #1907, 1000.000000000000000 ) ; #2989 = EDGE_CURVE ( 'NONE', #4604, #2371, #3632, .T. ) ; #2990 = VERTEX_POINT ( 'NONE', #2481 ) ; #2991 = EDGE_CURVE ( 'NONE', #4387, #898, #6456, .T. ) ; #2992 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.8660254037844553600, 0.4999999999999711300 ) ) ; #2993 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #2994 = AXIS2_PLACEMENT_3D ( 'NONE', #4584, #937, #5117 ) ; #2995 = ORIENTED_EDGE ( 'NONE', *, *, #384, .T. ) ; #2996 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; #2997 = CARTESIAN_POINT ( 'NONE', ( -2.989999999999950000, -2.559999999999050100, -9.800000000000000700 ) ) ; #2998 = VECTOR ( 'NONE', #793, 1000.000000000000100 ) ; #2999 = CARTESIAN_POINT ( 'NONE', ( -2.018537944984205400, -2.068363019588590500, -4.883502816590402400 ) ) ; #3000 = ORIENTED_EDGE ( 'NONE', *, *, #1967, .T. ) ; #3001 = EDGE_LOOP ( 'NONE', ( #791, #6298, #5815, #854 ) ) ; #3002 = ORIENTED_EDGE ( 'NONE', *, *, #5988, .T. ) ; #3003 = CARTESIAN_POINT ( 'NONE', ( 0.3567013117419060600, 2.632076295261861300, -9.899999999999998600 ) ) ; #3004 = FACE_OUTER_BOUND ( 'NONE', #5863, .T. ) ; #3005 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #3006 = ORIENTED_EDGE ( 'NONE', *, *, #1618, .T. ) ; #3007 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; #3008 = CIRCLE ( 'NONE', #617, 1.000000000000000000 ) ; #3009 = PLANE ( 'NONE', #2994 ) ; #3010 = VECTOR ( 'NONE', #5545, 1000.000000000000000 ) ; #3011 = EDGE_CURVE ( 'NONE', #5250, #4858, #6368, .T. ) ; #3012 = CARTESIAN_POINT ( 'NONE', ( 3.600000000000160000, -6.049999999999999800, -13.44999999999999900 ) ) ; #3013 = CARTESIAN_POINT ( 'NONE', ( -4.000000000000000000, 3.799999999999910100, -11.80000000000000100 ) ) ; #3014 = VECTOR ( 'NONE', #2574, 1000.000000000000000 ) ; #3015 = VERTEX_POINT ( 'NONE', #6195 ) ; #3016 = CARTESIAN_POINT ( 'NONE', ( -3.149999999999999900, 7.715274834628326400E-016, -9.692893218813468400 ) ) ; #3017 = CARTESIAN_POINT ( 'NONE', ( -0.2625541145343425800, -5.299999999999281300, -6.073669182935666400 ) ) ; #3018 = VECTOR ( 'NONE', #1226, 1000.000000000000000 ) ; #3019 = ORIENTED_EDGE ( 'NONE', *, *, #1479, .F. ) ; #3020 = APPLICATION_PROTOCOL_DEFINITION ( 'international standard', 'config_control_design', 1994, #2579 ) ; #3021 = EDGE_CURVE ( 'NONE', #2820, #2990, #524, .T. ) ; #3022 = ADVANCED_FACE ( 'NONE', ( #3476 ), #6148, .F. ) ; #3023 = VECTOR ( 'NONE', #4909, 1000.000000000000000 ) ; #3024 = LINE ( 'NONE', #3883, #6414 ) ; #3025 = CARTESIAN_POINT ( 'NONE', ( 1.544118845424985700, 2.155285500610706800, -9.900000000000000400 ) ) ; #3026 = ORIENTED_EDGE ( 'NONE', *, *, #737, .F. ) ; #3027 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; #3028 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #3029 = LINE ( 'NONE', #1196, #729 ) ; #3030 = VECTOR ( 'NONE', #872, 1000.000000000000000 ) ; #3031 = EDGE_CURVE ( 'NONE', #1362, #1459, #4709, .T. ) ; #3032 = CARTESIAN_POINT ( 'NONE', ( 3.200000000000979800, -5.500000000000009800, -11.80000000000000100 ) ) ; #3033 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; #3034 = CARTESIAN_POINT ( 'NONE', ( -1.479999999999980000, -3.100000000000049800, -13.42000000000000000 ) ) ; #3035 = AXIS2_PLACEMENT_3D ( 'NONE', #5414, #2261, #2763 ) ; #3036 = LINE ( 'NONE', #4896, #2383 ) ; #3037 = CARTESIAN_POINT ( 'NONE', ( 2.649999999999963100, 5.299999999999925200, -9.900000000000000400 ) ) ; #3038 = ORIENTED_EDGE ( 'NONE', *, *, #2410, .T. ) ; #3039 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000089900, -5.597631072938548300, -7.580106704934641100 ) ) ; #3040 = CARTESIAN_POINT ( 'NONE', ( -0.9999999999991161500, -5.299999999999279500, -5.232129742950435000 ) ) ; #3041 = CYLINDRICAL_SURFACE ( 'NONE', #833, 1.050000000000000000 ) ; #3042 = MECHANICAL_CONTEXT ( 'NONE', #2579, 'mechanical' ) ; #3043 = PLANE ( 'NONE', #6276 ) ; #3044 = ORIENTED_EDGE ( 'NONE', *, *, #5632, .T. ) ; #3045 = CARTESIAN_POINT ( 'NONE', ( 2.560112569179692900, 0.7075351077325418000, -9.900000000000002100 ) ) ; #3046 = CARTESIAN_POINT ( 'NONE', ( -3.899999999999790300, -3.350000000000020100, -14.40000000000000200 ) ) ; #3047 = EDGE_LOOP ( 'NONE', ( #3303, #482, #3651, #2971 ) ) ; #3048 = ADVANCED_FACE ( 'NONE', ( #5961 ), #1018, .T. ) ; #3049 = CARTESIAN_POINT ( 'NONE', ( 4.000000000000000000, -6.000000000000060400, -0.4999999999999987200 ) ) ; #3050 = ORIENTED_EDGE ( 'NONE', *, *, #6130, .T. ) ; #3051 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -13.77999999999999900 ) ) ; #3052 = EDGE_CURVE ( 'NONE', #3802, #3964, #4042, .T. ) ; #3053 = CARTESIAN_POINT ( 'NONE', ( 3.900000000000130500, -3.350000000000020100, -14.40000000000000200 ) ) ; #3054 = VECTOR ( 'NONE', #1233, 999.9999999999998900 ) ; #3055 = CARTESIAN_POINT ( 'NONE', ( -3.899999999999789900, -6.049999999999999800, -13.40000000000000000 ) ) ; #3056 = VERTEX_POINT ( 'NONE', #1408 ) ; #3057 = VECTOR ( 'NONE', #4307, 1000.000000000000000 ) ; #3058 = ORIENTED_EDGE ( 'NONE', *, *, #4465, .F. ) ; #3059 = CARTESIAN_POINT ( 'NONE', ( -2.833265217546268500, -0.9232408272609836700, -9.900000000000021700 ) ) ; #3060 = LINE ( 'NONE', #5925, #1672 ) ; #3061 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, ( #4697, #6267, #4677, #1547, #1568, #2064, #6816, #5230, #3349, #5959 ), .UNSPECIFIED., .F., .F., ( 4, 2, 2, 2, 4 ), ( 0.0000000000000000000, 0.1552090104331243200, 0.3104180208662486500, 0.4656270312993730000, 0.6208360417324972900 ), .UNSPECIFIED. ) ; #3062 = EDGE_LOOP ( 'NONE', ( #5780, #1486, #777, #4108 ) ) ; #3063 = VECTOR ( 'NONE', #5810, 1000.000000000000000 ) ; #3064 = EDGE_CURVE ( 'NONE', #4610, #2225, #203, .T. ) ; #3065 = CARTESIAN_POINT ( 'NONE', ( 1.249999999999969800, -8.970710678117770300, -8.246446609406030200 ) ) ; #3066 = CARTESIAN_POINT ( 'NONE', ( 2.660000000000029900, -2.289999999999110100, -11.80000000000000100 ) ) ; #3067 = AXIS2_PLACEMENT_3D ( 'NONE', #672, #653, #2263 ) ; #3068 = FACE_OUTER_BOUND ( 'NONE', #5349, .T. ) ; #3069 = ORIENTED_EDGE ( 'NONE', *, *, #2542, .T. ) ; #3070 = EDGE_CURVE ( 'NONE', #286, #4800, #2824, .T. ) ; #3071 = LINE ( 'NONE', #6499, #3225 ) ; #3072 = ORIENTED_EDGE ( 'NONE', *, *, #5923, .T. ) ; #3073 = CARTESIAN_POINT ( 'NONE', ( -3.549999999999000200, -5.299999999999280400, -6.100000000000919800 ) ) ; #3074 = AXIS2_PLACEMENT_3D ( 'NONE', #3186, #3672, #5872 ) ; #3075 = CARTESIAN_POINT ( 'NONE', ( -3.199999999999980200, -5.500000000000008900, -0.9999999999999991100 ) ) ; #3076 = PLANE ( 'NONE', #6170 ) ; #3077 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #3078 = FACE_OUTER_BOUND ( 'NONE', #4766, .T. ) ; #3079 = ORIENTED_EDGE ( 'NONE', *, *, #6083, .T. ) ; #3080 = LINE ( 'NONE', #1141, #5057 ) ; #3081 = ORIENTED_EDGE ( 'NONE', *, *, #4363, .F. ) ; #3082 = CARTESIAN_POINT ( 'NONE', ( -1.479999999999980000, -9.919999999999980400, -13.77999999999999900 ) ) ; #3083 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #3084 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #3085 = VECTOR ( 'NONE', #3907, 1000.000000000000000 ) ; #3086 = ORIENTED_EDGE ( 'NONE', *, *, #181, .T. ) ; #3087 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #3088 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #3089 = EDGE_CURVE ( 'NONE', #3855, #2405, #5622, .T. ) ; #3090 = VECTOR ( 'NONE', #4947, 1000.000000000000000 ) ; #3092 = ORIENTED_EDGE ( 'NONE', *, *, #946, .T. ) ; #3091 = LINE ( 'NONE', #5956, #4824 ) ; #3093 = ORIENTED_EDGE ( 'NONE', *, *, #4089, .T. ) ; #3094 = CARTESIAN_POINT ( 'NONE', ( -1.199999999999930000, 1.469576158976738300E-016, -14.10000000000000000 ) ) ; #3095 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.5446390350151350000, 0.8386705679453540000 ) ) ; #3096 = CARTESIAN_POINT ( 'NONE', ( -1.549999999999050100, -6.500000000000060400, -7.349999999999999600 ) ) ; #3097 = FACE_OUTER_BOUND ( 'NONE', #521, .T. ) ; #3098 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #3099 = CIRCLE ( 'NONE', #1090, 1.050000000000000000 ) ; #3100 = ORIENTED_EDGE ( 'NONE', *, *, #1967, .F. ) ; #3101 = EDGE_CURVE ( 'NONE', #2862, #4061, #1093, .T. ) ; #3102 = CARTESIAN_POINT ( 'NONE', ( -4.292893218813452100, -6.000000000000059500, 1.318977144128198400E-015 ) ) ; #3103 = CIRCLE ( 'NONE', #2760, 1.050000000000000000 ) ; #3104 = EDGE_CURVE ( 'NONE', #6237, #2820, #5038, .T. ) ; #3105 = CARTESIAN_POINT ( 'NONE', ( 4.499999999999950300, -2.599999999999050200, -11.80000000000000100 ) ) ; #3106 = ORIENTED_EDGE ( 'NONE', *, *, #3660, .F. ) ; #3107 = CARTESIAN_POINT ( 'NONE', ( -0.5000064583869016100, -11.19585006917547400, -7.599999999999869100 ) ) ; #3108 =( BOUNDED_SURFACE ( ) B_SPLINE_SURFACE ( 3, 3, ( ( #2917, #3975, #5968, #6732 ), ( #919, #2015, #974, #3016 ), ( #6198, #5102, #5663, #3554 ), ( #1973, #3037, #6708, #5685 ) ), .UNSPECIFIED., .F., .F., .F. ) B_SPLINE_SURFACE_WITH_KNOTS ( ( 4, 4 ), ( 4, 4 ), ( 0.0000000000000000000, 1.000000000000000000 ), ( 0.0000000000000000000, 1.000000000000000000 ), .UNSPECIFIED. ) GEOMETRIC_REPRESENTATION_ITEM ( ) RATIONAL_B_SPLINE_SURFACE ( ( ( 1.000000000000000000, 0.3333333333333334300, 0.3333333333333334300, 1.000000000000000000), ( 0.8047378541243475100, 0.2682459513747825800, 0.2682459513747825800, 0.8047378541243475100), ( 0.8047378541243475100, 0.2682459513747825800, 0.2682459513747825800, 0.8047378541243475100), ( 1.000000000000000000, 0.3333333333333334300, 0.3333333333333334300, 1.000000000000000000) ) ) REPRESENTATION_ITEM ( '' ) SURFACE ( ) ); #3109 = AXIS2_PLACEMENT_3D ( 'NONE', #3292, #2805, #4422 ) ; #3110 = LOCAL_TIME ( 16, 54, 2.000000000000000000, #3188 ) ; #3111 = EDGE_CURVE ( 'NONE', #657, #4441, #3795, .T. ) ; #3112 = PLANE ( 'NONE', #2085 ) ; #3113 = EDGE_CURVE ( 'NONE', #1089, #2066, #4789, .T. ) ; #3114 = CARTESIAN_POINT ( 'NONE', ( -2.037134352765116700, -3.043296795206258000, -6.084124547720544600 ) ) ; #3115 = ORIENTED_EDGE ( 'NONE', *, *, #647, .T. ) ; #3116 = AXIS2_PLACEMENT_3D ( 'NONE', #5231, #3088, #5765 ) ; #3117 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; #3118 = VERTEX_POINT ( 'NONE', #5598 ) ; #3119 = CARTESIAN_POINT ( 'NONE', ( -4.500000000000060400, -6.000000000000060400, 0.0000000000000000000 ) ) ; #3120 = ORIENTED_EDGE ( 'NONE', *, *, #3885, .T. ) ; #3121 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #3122 = EDGE_CURVE ( 'NONE', #6667, #5487, #4058, .T. ) ; #3123 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; #3124 = CARTESIAN_POINT ( 'NONE', ( 1.145850069176845600, -10.55000645838522800, -7.599999999999871700 ) ) ; #3125 = ORIENTED_EDGE ( 'NONE', *, *, #2877, .F. ) ; #3126 = CARTESIAN_POINT ( 'NONE', ( -1.550000000000830000, -6.350000000000021000, -13.44999999999999900 ) ) ; #3127 = FACE_OUTER_BOUND ( 'NONE', #577, .T. ) ; #3128 = VERTEX_POINT ( 'NONE', #799 ) ; #3129 = CARTESIAN_POINT ( 'NONE', ( 1.075528555105620000E-013, -5.551115123125780200E-014, -13.77999999999999900 ) ) ; #3130 = VERTEX_POINT ( 'NONE', #6065 ) ; #3131 = AXIS2_PLACEMENT_3D ( 'NONE', #4130, #5120, #5656 ) ; #3132 = CARTESIAN_POINT ( 'NONE', ( -3.199999999999980200, -1.199999999999980000, -9.900000000000000400 ) ) ; #3133 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #3134 = ORIENTED_EDGE ( 'NONE', *, *, #2061, .T. ) ; #3135 = VECTOR ( 'NONE', #5292, 1000.000000000000000 ) ; #3136 = ORIENTED_EDGE ( 'NONE', *, *, #687, .T. ) ; #3137 = FACE_OUTER_BOUND ( 'NONE', #1528, .T. ) ; #3138 = ORIENTED_EDGE ( 'NONE', *, *, #3813, .T. ) ; #3139 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; #3140 = CARTESIAN_POINT ( 'NONE', ( -1.549999999999050400, -6.500000000000060400, -11.79999999999999900 ) ) ; #3141 = CIRCLE ( 'NONE', #5723, 0.5000000000000000000 ) ; #3142 = EDGE_CURVE ( 'NONE', #5487, #2204, #3141, .T. ) ; #3143 = ORIENTED_EDGE ( 'NONE', *, *, #3850, .T. ) ; #3144 = FACE_OUTER_BOUND ( 'NONE', #5903, .T. ) ; #3145 = CARTESIAN_POINT ( 'NONE', ( -4.000000000000000000, 3.799999999999910100, -11.80000000000000100 ) ) ; #3146 = EDGE_CURVE ( 'NONE', #6549, #2366, #1933, .T. ) ; #3147 = VERTEX_POINT ( 'NONE', #5012 ) ; #3148 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; #3149 = AXIS2_PLACEMENT_3D ( 'NONE', #1266, #5385, #5482 ) ; #3150 = CARTESIAN_POINT ( 'NONE', ( 1.249999999999969800, -11.29999999999930300, -7.800000000000070000 ) ) ; #3151 = CARTESIAN_POINT ( 'NONE', ( -4.500000000000000900, -6.000000000000060400, -0.4999999999999991700 ) ) ; #3152 = FACE_OUTER_BOUND ( 'NONE', #2170, .T. ) ; #3153 = EDGE_LOOP ( 'NONE', ( #6359, #5973, #114, #1850 ) ) ; #3154 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.8660254037844039600, -0.5000000000000600600 ) ) ; #3155 = ADVANCED_FACE ( 'NONE', ( #855 ), #3431, .T. ) ; #3156 = AXIS2_PLACEMENT_3D ( 'NONE', #4939, #4922, #3861 ) ; #3157 = LINE ( 'NONE', #2840, #2101 ) ; #3158 = FACE_OUTER_BOUND ( 'NONE', #5748, .T. ) ; #3159 = AXIS2_PLACEMENT_3D ( 'NONE', #2954, #4508, #1377 ) ; #3160 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; #3161 = LINE ( 'NONE', #3530, #3335 ) ; #3162 = ORIENTED_EDGE ( 'NONE', *, *, #2324, .T. ) ; #3163 = ADVANCED_FACE ( 'NONE', ( #4212 ), #4950, .T. ) ; #3164 = PLANE ( 'NONE', #3563 ) ; #3165 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #3166 = CARTESIAN_POINT ( 'NONE', ( 4.500000000000060400, -11.19999999999910000, -2.779157999888000100 ) ) ; #3167 = LINE ( 'NONE', #2607, #1464 ) ; #3168 = ORIENTED_EDGE ( 'NONE', *, *, #3896, .F. ) ; #3169 = CARTESIAN_POINT ( 'NONE', ( -4.500000000000060400, -6.000000000000060400, -2.700000000000001100 ) ) ; #3170 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #3171 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; #3172 = LINE ( 'NONE', #4258, #4744 ) ; #3173 = CIRCLE ( 'NONE', #5353, 1.000000000000000000 ) ; #3174 = CARTESIAN_POINT ( 'NONE', ( -1.899999999998069900, -5.500000000000009800, -6.968314918796940200 ) ) ; #3175 = ORIENTED_EDGE ( 'NONE', *, *, #5059, .T. ) ; #3176 = EDGE_CURVE ( 'NONE', #6415, #4682, #3711, .T. ) ; #3177 = CARTESIAN_POINT ( 'NONE', ( -2.500000000000060000, 4.299999999999919900, -2.549999999999999800 ) ) ; #3178 = LINE ( 'NONE', #2300, #4334 ) ; #3179 = CARTESIAN_POINT ( 'NONE', ( 4.000000000000000000, 3.799999999999910100, -11.80000000000000100 ) ) ; #3180 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; #3181 = CARTESIAN_POINT ( 'NONE', ( 2.014287563793959500, -3.071313661000835400, -6.570748915192205600 ) ) ; #3182 = CYLINDRICAL_SURFACE ( 'NONE', #4016, 1.199999999999930000 ) ; #3183 = EDGE_CURVE ( 'NONE', #3893, #4466, #1768, .T. ) ; #3184 = ADVANCED_FACE ( 'NONE', ( #2828 ), #4530, .T. ) ; #3185 = ORIENTED_EDGE ( 'NONE', *, *, #337, .F. ) ; #3186 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -13.77999999999999900 ) ) ; #3187 = AXIS2_PLACEMENT_3D ( 'NONE', #4452, #2881, #5507 ) ; #3188 = COORDINATED_UNIVERSAL_TIME_OFFSET ( 8, 0, .BEHIND. ) ; #3189 = CARTESIAN_POINT ( 'NONE', ( 2.890671664372513700, -2.430323138702938000, -11.80000000000000100 ) ) ; #3190 = CARTESIAN_POINT ( 'NONE', ( 1.249999999999969800, -8.241421356236895000, -7.658578643762964200 ) ) ; #3191 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; #3192 = ORIENTED_EDGE ( 'NONE', *, *, #6564, .T. ) ; #3193 = AXIS2_PLACEMENT_3D ( 'NONE', #6694, #4083, #4063 ) ; #3194 = CARTESIAN_POINT ( 'NONE', ( 8.847089727481720200E-013, -5.500000000000009800, -5.600000000000860300 ) ) ; #3195 = EDGE_CURVE ( 'NONE', #1504, #2416, #3392, .T. ) ; #3196 = ORIENTED_EDGE ( 'NONE', *, *, #1900, .F. ) ; #3197 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; #3198 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #3199 = ORIENTED_EDGE ( 'NONE', *, *, #2863, .F. ) ; #3200 = CARTESIAN_POINT ( 'NONE', ( -3.549999999999000200, -5.500000000000009800, -6.100000000000919800 ) ) ; #3201 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #3202 = ORIENTED_EDGE ( 'NONE', *, *, #5310, .T. ) ; #3203 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; #3204 = LINE ( 'NONE', #983, #1333 ) ; #3205 = ADVANCED_FACE ( 'NONE', ( #598 ), #5065, .T. ) ; #3206 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; #3207 = VERTEX_POINT ( 'NONE', #4033 ) ; #3208 = VECTOR ( 'NONE', #5889, 1000.000000000000000 ) ; #3209 = VERTEX_POINT ( 'NONE', #4971 ) ; #3210 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; #3211 = EDGE_CURVE ( 'NONE', #1536, #3299, #6543, .T. ) ; #3212 = FACE_OUTER_BOUND ( 'NONE', #6196, .T. ) ; #3213 = ORIENTED_EDGE ( 'NONE', *, *, #1570, .F. ) ; #3214 = VECTOR ( 'NONE', #1023, 1000.000000000000000 ) ; #3215 = CARTESIAN_POINT ( 'NONE', ( -3.199999999999980200, -5.500000000000008900, -5.299999999999999800 ) ) ; #3216 = FACE_OUTER_BOUND ( 'NONE', #679, .T. ) ; #3217 = ORIENTED_EDGE ( 'NONE', *, *, #477, .F. ) ; #3218 = CARTESIAN_POINT ( 'NONE', ( -2.024980546198221100, -3.262063269921724000, -6.669242063142882600 ) ) ; #3219 = EDGE_CURVE ( 'NONE', #1114, #6557, #766, .T. ) ; #3220 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; #3221 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #3222 = ADVANCED_FACE ( 'NONE', ( #6705 ), #2494, .T. ) ; #3223 = CARTESIAN_POINT ( 'NONE', ( -3.232442890089802600, -2.199999999999115100, -11.80000000000000100 ) ) ; #3224 = VERTEX_POINT ( 'NONE', #2986 ) ; #3225 = VECTOR ( 'NONE', #5963, 1000.000000000000000 ) ; #3226 = EDGE_CURVE ( 'NONE', #5983, #2220, #1253, .T. ) ; #3227 = ORIENTED_EDGE ( 'NONE', *, *, #122, .F. ) ; #3228 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #3229 = EDGE_CURVE ( 'NONE', #1139, #6381, #2329, .T. ) ; #3230 = EDGE_CURVE ( 'NONE', #5368, #4591, #5786, .T. ) ; #3231 = LINE ( 'NONE', #4707, #6803 ) ; #3232 = PLANE ( 'NONE', #708 ) ; #3233 = CARTESIAN_POINT ( 'NONE', ( 3.600000000000160000, -6.049999999999999800, -14.40000000000000200 ) ) ; #3234 = ORIENTED_EDGE ( 'NONE', *, *, #2894, .F. ) ; #3235 = AXIS2_PLACEMENT_3D ( 'NONE', #5826, #5751, #3645 ) ; #3236 = VECTOR ( 'NONE', #5877, 1000.000000000000000 ) ; #3237 = ORIENTED_EDGE ( 'NONE', *, *, #1551, .F. ) ; #3238 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; #3239 = ADVANCED_FACE ( 'NONE', ( #2012 ), #3528, .T. ) ; #3240 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; #3241 = CIRCLE ( 'NONE', #5906, 0.5000000000000000000 ) ; #3242 = ORIENTED_EDGE ( 'NONE', *, *, #3628, .T. ) ; #3243 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; #3244 = CARTESIAN_POINT ( 'NONE', ( 1.777709254451913300, -2.831868875732408000, -10.76226831563483100 ) ) ; #3245 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #3246 = LINE ( 'NONE', #2459, #3922 ) ; #3247 = CARTESIAN_POINT ( 'NONE', ( -1.550000000000830000, -3.350000000000020100, -14.40000000000000200 ) ) ; #3248 = LINE ( 'NONE', #4969, #1879 ) ; #3249 = VERTEX_POINT ( 'NONE', #3440 ) ; #3250 = EDGE_CURVE ( 'NONE', #5825, #1397, #6033, .T. ) ; #3251 = CARTESIAN_POINT ( 'NONE', ( -4.500000000000061300, -2.599999999999050200, -9.750000000000000000 ) ) ; #3252 = FACE_OUTER_BOUND ( 'NONE', #4204, .T. ) ; #3253 = CARTESIAN_POINT ( 'NONE', ( -9.296206556277940400E-008, -2.732007214669139600, -10.01057247557189600 ) ) ; #3254 = VECTOR ( 'NONE', #4902, 1000.000000000000000 ) ; #3255 = ORIENTED_EDGE ( 'NONE', *, *, #6167, .F. ) ; #3256 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; #3257 = EDGE_CURVE ( 'NONE', #67, #6295, #5771, .T. ) ; #3258 = APPROVAL_DATE_TIME ( #4101, #3863 ) ; #3259 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; #3260 = VECTOR ( 'NONE', #507, 1000.000000000000000 ) ; #3261 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; #3262 = ORIENTED_EDGE ( 'NONE', *, *, #2806, .T. ) ; #3263 = EDGE_CURVE ( 'NONE', #2358, #2187, #3550, .T. ) ; #3264 = CARTESIAN_POINT ( 'NONE', ( 3.550000000000910200, -5.299999999999280400, -6.100000000000919800 ) ) ; #3265 = LINE ( 'NONE', #1930, #4596 ) ; #3266 = EDGE_CURVE ( 'NONE', #1330, #252, #443, .T. ) ; #3267 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; #3268 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; #3269 = ORIENTED_EDGE ( 'NONE', *, *, #4364, .F. ) ; #3270 = CARTESIAN_POINT ( 'NONE', ( -0.9999999999991159300, -5.299999999999279500, -5.100000000001029900 ) ) ; #3271 = CARTESIAN_POINT ( 'NONE', ( -1.549999999999049900, -5.500000000000009800, -11.80000000000000100 ) ) ; #3272 = CARTESIAN_POINT ( 'NONE', ( 4.499999999999950300, 2.400000000000960000, -2.549999999999999800 ) ) ; #3273 = EDGE_CURVE ( 'NONE', #6244, #6182, #2083, .T. ) ; #3274 = AXIS2_PLACEMENT_3D ( 'NONE', #3567, #3605, #4082 ) ; #3275 = VERTEX_POINT ( 'NONE', #63 ) ; #3276 = ADVANCED_FACE ( 'NONE', ( #3212 ), #1092, .T. ) ; #3277 = CARTESIAN_POINT ( 'NONE', ( -1.899999999998069900, -5.500000000000009800, -11.90000000000010000 ) ) ; #3278 = AXIS2_PLACEMENT_3D ( 'NONE', #2169, #3210, #102 ) ; #3279 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; #3280 = CARTESIAN_POINT ( 'NONE', ( 1.479999999999979600, -11.59999999999990000, -13.42000000000000000 ) ) ; #3281 = CARTESIAN_POINT ( 'NONE', ( -2.500000000000060000, 4.299999999999919900, -2.549999999999999800 ) ) ; #3282 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000090600, -5.299999999999388800, -7.399999999999259600 ) ) ; #3283 = AXIS2_PLACEMENT_3D ( 'NONE', #246, #3843, #158 ) ; #3284 = ORIENTED_EDGE ( 'NONE', *, *, #3531, .F. ) ; #3285 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; #3286 = EDGE_CURVE ( 'NONE', #2237, #4598, #4324, .T. ) ; #3287 = CARTESIAN_POINT ( 'NONE', ( -1.199999999999915100, -1.962141687034900000, -13.42000000000000000 ) ) ; #3288 = ORIENTED_EDGE ( 'NONE', *, *, #5620, .T. ) ; #3289 = CARTESIAN_POINT ( 'NONE', ( -1.340042803332178700, 2.287832134855984500, -9.900000000000000400 ) ) ; #3290 = AXIS2_PLACEMENT_3D ( 'NONE', #3179, #2750, #6376 ) ; #3291 = CARTESIAN_POINT ( 'NONE', ( -9.662512969806920500, -7.257512886940040700, -13.42000000000000000 ) ) ; #3292 = CARTESIAN_POINT ( 'NONE', ( -4.000000000000000000, -6.000000000000060400, -0.4999999999999990600 ) ) ; #3293 = ORIENTED_EDGE ( 'NONE', *, *, #613, .F. ) ; #3294 = LINE ( 'NONE', #5347, #3057 ) ; #3295 = VERTEX_POINT ( 'NONE', #6348 ) ; #3296 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -1.199999999999980000, -11.80000000000000100 ) ) ; #3297 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #3298 = CARTESIAN_POINT ( 'NONE', ( 1.398207309542653000, -2.584540673278665800, -11.20208452685869100 ) ) ; #3299 = VERTEX_POINT ( 'NONE', #2197 ) ; #3300 = ADVANCED_FACE ( 'NONE', ( #197 ), #5338, .T. ) ; #3301 = VERTEX_POINT ( 'NONE', #1581 ) ; #3302 = LINE ( 'NONE', #6749, #1244 ) ; #3303 = ORIENTED_EDGE ( 'NONE', *, *, #4879, .T. ) ; #3304 = CARTESIAN_POINT ( 'NONE', ( 18.18468237128200100, -7.799999999999450900, -7.800000000000070000 ) ) ; #3305 = CIRCLE ( 'NONE', #964, 1.199999999999930000 ) ; #3306 = VERTEX_POINT ( 'NONE', #3764 ) ; #3307 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; #3308 = ORIENTED_EDGE ( 'NONE', *, *, #3944, .F. ) ; #3309 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #3310 = VECTOR ( 'NONE', #3388, 1000.000000000000000 ) ; #3311 = CARTESIAN_POINT ( 'NONE', ( 0.02259253834177711900, -2.732007261543663500, -10.01057244628144500 ) ) ; #3312 = ORIENTED_EDGE ( 'NONE', *, *, #5620, .F. ) ; #3313 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; #3314 = EDGE_CURVE ( 'NONE', #6358, #4025, #2319, .T. ) ; #3315 = EDGE_CURVE ( 'NONE', #4553, #2582, #5699, .T. ) ; #3316 = ORIENTED_EDGE ( 'NONE', *, *, #4327, .T. ) ; #3317 = VECTOR ( 'NONE', #4071, 1000.000000000000000 ) ; #3318 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; #3319 = CARTESIAN_POINT ( 'NONE', ( -2.367196389097145900, 1.204470762503243800, -9.899999999999996800 ) ) ; #3320 = ORIENTED_EDGE ( 'NONE', *, *, #6067, .F. ) ; #3321 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, ( #3686, #4278, #4843, #5343, #595, #5866, #6402, #2702, #3732 ), .UNSPECIFIED., .F., .F., ( 4, 1, 2, 2, 4 ), ( 0.8831279853969519200, 0.9123459890477139100, 0.9269549908730949600, 0.9415639926984759000, 1.000000000000000000 ), .UNSPECIFIED. ) ; #3322 = ADVANCED_FACE ( 'NONE', ( #1915 ), #3983, .T. ) ; #3323 = CARTESIAN_POINT ( 'NONE', ( -1.499999999999830100, -5.350000000000021000, -7.950000000000000200 ) ) ; #3324 = EDGE_LOOP ( 'NONE', ( #2469, #5381, #1966, #2938, #5977, #3237, #2303, #2233, #1334, #6383, #5024, #5451, #2073, #369, #1019, #4860, #6437 ) ) ; #3325 = ORIENTED_EDGE ( 'NONE', *, *, #4882, .F. ) ; #3326 = FACE_BOUND ( 'NONE', #2878, .T. ) ; #3327 = EDGE_CURVE ( 'NONE', #2778, #2323, #2344, .T. ) ; #3328 = ORIENTED_EDGE ( 'NONE', *, *, #2751, .T. ) ; #3329 = VECTOR ( 'NONE', #5474, 1000.000000000000000 ) ; #3330 = AXIS2_PLACEMENT_3D ( 'NONE', #5850, #3180, #5257 ) ; #3331 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000090800, -8.687867965643739900, -8.387867965643890100 ) ) ; #3332 = CIRCLE ( 'NONE', #2327, 0.4999999999999995600 ) ; #3333 = AXIS2_PLACEMENT_3D ( 'NONE', #3963, #1280, #6045 ) ; #3334 = CARTESIAN_POINT ( 'NONE', ( -3.899999999999839200, 0.04999999999993923900, -13.40000000000000000 ) ) ; #3335 = VECTOR ( 'NONE', #2535, 1000.000000000000000 ) ; #3336 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #3337 = VERTEX_POINT ( 'NONE', #3455 ) ; #3338 = CARTESIAN_POINT ( 'NONE', ( 1.249999999999969800, -5.500000000000446800, -7.400000000000001200 ) ) ; #3339 = EDGE_CURVE ( 'NONE', #1770, #4336, #1845, .T. ) ; #3340 = EDGE_CURVE ( 'NONE', #1397, #2184, #3875, .T. ) ; #3341 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -5.150000000000099800, -11.80000000000000100 ) ) ; #3342 = CARTESIAN_POINT ( 'NONE', ( 18.18468237128200100, -2.565897943161310000, -6.596072138854779600 ) ) ; #3343 = AXIS2_PLACEMENT_3D ( 'NONE', #5050, #6123, #5607 ) ; #3344 = VECTOR ( 'NONE', #2947, 1000.000000000000000 ) ; #3345 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; #3346 = ORIENTED_EDGE ( 'NONE', *, *, #2097, .F. ) ; #3347 = CARTESIAN_POINT ( 'NONE', ( 0.3876840837781731500, -2.655791678414229500, -10.52417649626857500 ) ) ; #3348 = ORIENTED_EDGE ( 'NONE', *, *, #3417, .F. ) ; #3349 = CARTESIAN_POINT ( 'NONE', ( 2.750000000000909900, -4.777254849451807700, -1.699230326385184000 ) ) ; #3350 = LINE ( 'NONE', #6721, #4580 ) ; #3351 = FACE_OUTER_BOUND ( 'NONE', #5266, .T. ) ; #3352 = ORIENTED_EDGE ( 'NONE', *, *, #5003, .T. ) ; #3353 = CARTESIAN_POINT ( 'NONE', ( 3.550000000000880000, -5.500000000000008900, -11.90000000000010000 ) ) ; #3354 = DIRECTION ( 'NONE', ( -0.5197153285315629900, 0.8543394976760289000, 0.0000000000000000000 ) ) ; #3355 = ADVANCED_FACE ( 'NONE', ( #5609 ), #1604, .F. ) ; #3356 = VECTOR ( 'NONE', #6286, 1000.000000000000000 ) ; #3357 = EDGE_CURVE ( 'NONE', #2149, #330, #6385, .T. ) ; #3358 = ADVANCED_FACE ( 'NONE', ( #2773 ), #3661, .F. ) ; #3359 = CARTESIAN_POINT ( 'NONE', ( 3.200000000000979800, -5.150000000000099800, -11.80000000000000100 ) ) ; #3360 = CARTESIAN_POINT ( 'NONE', ( 1.249999999999969800, -5.597263992460861800, -7.580473785412336500 ) ) ; #3361 = CIRCLE ( 'NONE', #846, 0.3999999999999993000 ) ; #3362 = CARTESIAN_POINT ( 'NONE', ( 3.229209978830353200, -2.559999999999050100, -11.80000000000000100 ) ) ; #3363 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #3364 = ORIENTED_EDGE ( 'NONE', *, *, #2134, .T. ) ; #3365 = DIRECTION ( 'NONE', ( -0.5197153285315629900, 0.8543394976760289000, 0.0000000000000000000 ) ) ; #3366 = CARTESIAN_POINT ( 'NONE', ( -3.650000000000039900, -5.150000000000099800, -5.299999999999999800 ) ) ; #3367 = CARTESIAN_POINT ( 'NONE', ( -1.736094662512164700, 2.003832176099693100, -9.900000000000000400 ) ) ; #3368 = EDGE_CURVE ( 'NONE', #1104, #4619, #1124, .T. ) ; #3369 = ORIENTED_EDGE ( 'NONE', *, *, #6250, .F. ) ; #3370 = CARTESIAN_POINT ( 'NONE', ( -1.279896855207083700, -2.582763714275671400, -11.21899116183752400 ) ) ; #3371 = CARTESIAN_POINT ( 'NONE', ( 1.249999999999970000, -9.749999999998360400, -7.800000000000070900 ) ) ; #3372 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; #3373 = ORIENTED_EDGE ( 'NONE', *, *, #6096, .F. ) ; #3374 = EDGE_CURVE ( 'NONE', #3642, #657, #149, .T. ) ; #3375 = CARTESIAN_POINT ( 'NONE', ( -0.9448049200628631000, -10.87301449803671700, -7.800000000000071800 ) ) ; #3376 = AXIS2_PLACEMENT_3D ( 'NONE', #2921, #6577, #3978 ) ; #3377 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.8660254037844553600, -0.4999999999999711300 ) ) ; #3378 = VERTEX_POINT ( 'NONE', #3410 ) ; #3379 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; #3380 = CARTESIAN_POINT ( 'NONE', ( -4.500000000000030200, -6.000000000000060400, -0.4999999999999987200 ) ) ; #3381 = FACE_OUTER_BOUND ( 'NONE', #5902, .T. ) ; #3382 = ADVANCED_FACE ( 'NONE', ( #6654 ), #3510, .T. ) ; #3383 = ORIENTED_EDGE ( 'NONE', *, *, #2931, .T. ) ; #3384 = PLANE ( 'NONE', #3631 ) ; #3385 = FACE_OUTER_BOUND ( 'NONE', #4316, .T. ) ; #3386 = VERTEX_POINT ( 'NONE', #2527 ) ; #3387 = CARTESIAN_POINT ( 'NONE', ( -3.899999999999888900, 0.04999999999993947500, -13.44999999999999900 ) ) ; #3388 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #3389 = ORIENTED_EDGE ( 'NONE', *, *, #5536, .F. ) ; #3390 = ADVANCED_FACE ( 'NONE', ( #2041 ), #1470, .T. ) ; #3391 = PLANE ( 'NONE', #3678 ) ; #3392 = LINE ( 'NONE', #4460, #1598 ) ; #3393 = ORIENTED_EDGE ( 'NONE', *, *, #4657, .T. ) ; #3394 = LINE ( 'NONE', #1540, #2014 ) ; #3395 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #3396 = ORIENTED_EDGE ( 'NONE', *, *, #1676, .F. ) ; #3397 = ORIENTED_EDGE ( 'NONE', *, *, #3113, .T. ) ; #3398 = FACE_OUTER_BOUND ( 'NONE', #3462, .T. ) ; #3399 = ORIENTED_EDGE ( 'NONE', *, *, #5715, .T. ) ; #3400 = CARTESIAN_POINT ( 'NONE', ( -2.500000000000060000, 4.299999999999919900, -2.699999999999999700 ) ) ; #3401 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #3402 = ORIENTED_EDGE ( 'NONE', *, *, #2024, .F. ) ; #3403 = FACE_OUTER_BOUND ( 'NONE', #3454, .T. ) ; #3404 = CARTESIAN_POINT ( 'NONE', ( -2.749999999999097600, -4.208418032298745900, -1.955662937369615500 ) ) ; #3405 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #3406 = ORIENTED_EDGE ( 'NONE', *, *, #1753, .F. ) ; #3407 = EDGE_CURVE ( 'NONE', #2182, #1779, #3091, .T. ) ; #3408 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; #3409 = CARTESIAN_POINT ( 'NONE', ( -0.3813447435332897300, -2.679244695615587100, -10.30103594306347000 ) ) ; #3410 = CARTESIAN_POINT ( 'NONE', ( -2.299999999999080100, -2.000000000000110100, -9.900000000000000400 ) ) ; #3411 = CYLINDRICAL_SURFACE ( 'NONE', #3511, 0.4999999999999995600 ) ; #3412 = EDGE_LOOP ( 'NONE', ( #1383, #4868, #451, #4839 ) ) ; #3413 = CARTESIAN_POINT ( 'NONE', ( 2.499999999999949800, 4.299999999999919900, -2.549999999999999800 ) ) ; #3414 = LINE ( 'NONE', #103, #1953 ) ; #3415 = VERTEX_POINT ( 'NONE', #3287 ) ; #3416 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; #3417 = EDGE_CURVE ( 'NONE', #3147, #3207, #1399, .T. ) ; #3418 = CIRCLE ( 'NONE', #1998, 1.050000000000000000 ) ; #3419 = ORIENTED_EDGE ( 'NONE', *, *, #2443, .T. ) ; #3420 = ORIENTED_EDGE ( 'NONE', *, *, #2576, .T. ) ; #3421 = PLANE ( 'NONE', #1780 ) ; #3422 = FACE_OUTER_BOUND ( 'NONE', #5186, .T. ) ; #3423 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; #3424 = FACE_OUTER_BOUND ( 'NONE', #4222, .T. ) ; #3425 = EDGE_LOOP ( 'NONE', ( #2977, #231, #4161, #1829 ) ) ; #3426 = EDGE_CURVE ( 'NONE', #4132, #6483, #632, .T. ) ; #3427 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #3428 = AXIS2_PLACEMENT_3D ( 'NONE', #4048, #4095, #6665 ) ; #3429 = CIRCLE ( 'NONE', #6031, 0.7999999999999999300 ) ; #3430 = VECTOR ( 'NONE', #3083, 1000.000000000000000 ) ; #3431 = PLANE ( 'NONE', #6794 ) ; #3432 = ORIENTED_EDGE ( 'NONE', *, *, #1479, .T. ) ; #3433 = PLANE ( 'NONE', #3333 ) ; #3434 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #3435 = ORIENTED_EDGE ( 'NONE', *, *, #4611, .F. ) ; #3436 = CARTESIAN_POINT ( 'NONE', ( -0.8393450718713370000, -5.562833629838788600, -4.088229105052651100 ) ) ; #3437 = VECTOR ( 'NONE', #1374, 1000.000000000000100 ) ; #3438 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -9.400000000000000400 ) ) ; #3439 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; #3440 = CARTESIAN_POINT ( 'NONE', ( 1.249999999999969800, -8.099999999999498700, -7.800000000000022900 ) ) ; #3441 = VECTOR ( 'NONE', #428, 1000.000000000000000 ) ; #3442 = EDGE_CURVE ( 'NONE', #2416, #2283, #314, .T. ) ; #3443 = ORIENTED_EDGE ( 'NONE', *, *, #3113, .F. ) ; #3444 = CARTESIAN_POINT ( 'NONE', ( -0.3856389984869506600, -11.23923310679883200, -7.800000000000072700 ) ) ; #3445 = PLANE ( 'NONE', #354 ) ; #3446 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #3447 = ORIENTED_EDGE ( 'NONE', *, *, #3593, .T. ) ; #3448 = PLANE ( 'NONE', #2388 ) ; #3449 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; #3450 = ORIENTED_EDGE ( 'NONE', *, *, #3588, .T. ) ; #3451 = EDGE_CURVE ( 'NONE', #1578, #4260, #2199, .T. ) ; #3452 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; #3453 = CARTESIAN_POINT ( 'NONE', ( -9.662512969806920500, -11.59999999999990000, -13.42000000000000000 ) ) ; #3454 = EDGE_LOOP ( 'NONE', ( #1840, #4722, #5496, #49, #2798, #1735, #1232, #5402 ) ) ; #3455 = CARTESIAN_POINT ( 'NONE', ( -2.173248591432210800, -3.137993503012871600, -3.603632002693436800 ) ) ; #3456 = EDGE_CURVE ( 'NONE', #2784, #6449, #474, .T. ) ; #3457 = CARTESIAN_POINT ( 'NONE', ( -1.339316329772202600, -2.583207954071966100, -11.21476450310637700 ) ) ; #3458 = CARTESIAN_POINT ( 'NONE', ( 3.550000000000880000, -5.500000000000009800, -11.90000000000010000 ) ) ; #3459 = AXIS2_PLACEMENT_3D ( 'NONE', #4489, #3434, #1355 ) ; #3460 = ORIENTED_EDGE ( 'NONE', *, *, #1041, .T. ) ; #3461 = VECTOR ( 'NONE', #5429, 1000.000000000000000 ) ; #3462 = EDGE_LOOP ( 'NONE', ( #5541, #4638, #2258, #960 ) ) ; #3463 = EDGE_CURVE ( 'NONE', #5122, #1504, #4093, .T. ) ; #3464 = VERTEX_POINT ( 'NONE', #84 ) ; #3465 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; #3466 = AXIS2_PLACEMENT_3D ( 'NONE', #553, #2087, #5791 ) ; #3467 = CARTESIAN_POINT ( 'NONE', ( -4.500000000000060400, 0.0000000000000000000, -11.80000000000000100 ) ) ; #3468 = ORIENTED_EDGE ( 'NONE', *, *, #5946, .T. ) ; #3469 = FACE_OUTER_BOUND ( 'NONE', #2419, .T. ) ; #3470 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #3471 = ORIENTED_EDGE ( 'NONE', *, *, #2464, .T. ) ; #3472 = FACE_OUTER_BOUND ( 'NONE', #5176, .T. ) ; #3473 = ORIENTED_EDGE ( 'NONE', *, *, #4916, .F. ) ; #3474 = CARTESIAN_POINT ( 'NONE', ( 2.942893221140948000, -0.4681291605332870100, -9.900000000000025200 ) ) ; #3475 = ADVANCED_FACE ( 'NONE', ( #1382 ), #6247, .T. ) ; #3476 = FACE_OUTER_BOUND ( 'NONE', #223, .T. ) ; #3477 = CARTESIAN_POINT ( 'NONE', ( 0.1555842578145893700, -2.705195661190749900, -10.05412899864216100 ) ) ; #3478 = CARTESIAN_POINT ( 'NONE', ( -9.662512969806920500, -8.299999999999940300, -12.93358983848630000 ) ) ; #3479 = EDGE_LOOP ( 'NONE', ( #6781, #266, #291, #4881, #830, #5405, #5471, #2503, #3402, #856 ) ) ; #3480 = CARTESIAN_POINT ( 'NONE', ( 2.289217213497130500, -2.199999999999130200, -11.79999999999999900 ) ) ; #3481 = ORIENTED_EDGE ( 'NONE', *, *, #4541, .F. ) ; #3482 = VECTOR ( 'NONE', #4047, 1000.000000000000000 ) ; #3483 = VERTEX_POINT ( 'NONE', #3823 ) ; #3484 = EDGE_CURVE ( 'NONE', #5091, #2623, #2687, .T. ) ; #3485 = CARTESIAN_POINT ( 'NONE', ( 4.000000000000000000, 4.299999999999910100, -0.4999999999999991700 ) ) ; #3486 = CARTESIAN_POINT ( 'NONE', ( -4.500000000000060400, 0.0000000000000000000, -11.80000000000000100 ) ) ; #3487 = VECTOR ( 'NONE', #2256, 1000.000000000000000 ) ; #3488 = CARTESIAN_POINT ( 'NONE', ( 1.989986528518011800, -2.067643595027471600, -5.434449801203467000 ) ) ; #3489 = ORIENTED_EDGE ( 'NONE', *, *, #2863, .T. ) ; #3490 = EDGE_CURVE ( 'NONE', #2146, #3881, #6488, .T. ) ; #3491 = VECTOR ( 'NONE', #1685, 1000.000000000000000 ) ; #3492 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #3493 = AXIS2_PLACEMENT_3D ( 'NONE', #4173, #3087, #4675 ) ; #3494 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.9945218953682480900, 0.1045284632678930200 ) ) ; #3495 = FACE_OUTER_BOUND ( 'NONE', #6832, .T. ) ; #3496 = EDGE_CURVE ( 'NONE', #3669, #6775, #2861, .T. ) ; #3497 = VECTOR ( 'NONE', #4706, 1000.000000000000100 ) ; #3498 = ORIENTED_EDGE ( 'NONE', *, *, #697, .T. ) ; #3499 = CARTESIAN_POINT ( 'NONE', ( 3.900000000000130000, -3.350000000000020100, -13.40000000000000000 ) ) ; #3500 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.5446390350149148400, 0.8386705679454968800 ) ) ; #3501 = ORIENTED_EDGE ( 'NONE', *, *, #2741, .T. ) ; #3502 = CARTESIAN_POINT ( 'NONE', ( 2.009600286187938100, -3.063158890845682600, -6.648336370488468800 ) ) ; #3503 = CARTESIAN_POINT ( 'NONE', ( -4.292893218813452100, 3.799999999999910100, 8.673617379884035500E-016 ) ) ; #3504 = LINE ( 'NONE', #6829, #2191 ) ; #3505 = VERTEX_POINT ( 'NONE', #1210 ) ; #3506 = EDGE_CURVE ( 'NONE', #6565, #4604, #1549, .T. ) ; #3507 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #3508 = CARTESIAN_POINT ( 'NONE', ( -1.756238735710339300, -2.639898253325366100, -10.67539233499004700 ) ) ; #3509 = EDGE_LOOP ( 'NONE', ( #1563, #2013, #6595, #6301 ) ) ; #3510 = PLANE ( 'NONE', #883 ) ; #3511 = AXIS2_PLACEMENT_3D ( 'NONE', #2286, #652, #222 ) ; #3512 = LINE ( 'NONE', #4235, #5077 ) ; #3513 = FACE_OUTER_BOUND ( 'NONE', #918, .T. ) ; #3514 = ORIENTED_EDGE ( 'NONE', *, *, #5856, .F. ) ; #3515 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000091000, -8.978539816339356600, -8.475735931288001600 ) ) ; #3516 = DIRECTION ( 'NONE', ( -0.08810188277370135900, -0.5425211891281137600, 0.8354093712658162700 ) ) ; #3517 = PLANE ( 'NONE', #350 ) ; #3518 = VECTOR ( 'NONE', #824, 999.9999999999998900 ) ; #3519 = PLANE ( 'NONE', #5194 ) ; #3520 = AXIS2_PLACEMENT_3D ( 'NONE', #3736, #1664, #5918 ) ; #3521 = DIRECTION ( 'NONE', ( 1.207984161179196400E-016, 0.9863939235543192100, 0.1643989889723039800 ) ) ; #3522 = LINE ( 'NONE', #3753, #2048 ) ; #3523 = ORIENTED_EDGE ( 'NONE', *, *, #818, .T. ) ; #3524 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; #3525 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #3526 = ADVANCED_FACE ( 'NONE', ( #3424 ), #5572, .T. ) ; #3527 = ORIENTED_EDGE ( 'NONE', *, *, #1577, .T. ) ; #3528 = PLANE ( 'NONE', #6534 ) ; #3529 = CARTESIAN_POINT ( 'NONE', ( 18.18468237128200100, -2.970259389423802500, -3.494704195690110400 ) ) ; #3530 = CARTESIAN_POINT ( 'NONE', ( 3.650000000000929800, -5.150000000000099800, -11.80000000000000100 ) ) ; #3531 = EDGE_CURVE ( 'NONE', #5960, #5953, #6580, .T. ) ; #3532 = CARTESIAN_POINT ( 'NONE', ( 0.2609788390877441100, -5.300000000004744500, -6.074193517161329000 ) ) ; #3533 = ORIENTED_EDGE ( 'NONE', *, *, #6687, .T. ) ; #3534 = CARTESIAN_POINT ( 'NONE', ( -2.000708315904452300, -1.987068999443431800, -5.098176454626181600 ) ) ; #3535 = CARTESIAN_POINT ( 'NONE', ( 3.149999999999999900, 1.566164342312048600E-008, -9.400000000000000400 ) ) ; #3536 = ORIENTED_EDGE ( 'NONE', *, *, #3538, .F. ) ; #3537 = ORIENTED_EDGE ( 'NONE', *, *, #3368, .T. ) ; #3538 = EDGE_CURVE ( 'NONE', #6159, #1079, #65, .T. ) ; #3539 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #3540 = ORIENTED_EDGE ( 'NONE', *, *, #5399, .F. ) ; #3541 = LINE ( 'NONE', #3366, #6546 ) ; #3542 = AXIS2_PLACEMENT_3D ( 'NONE', #2674, #1605, #4167 ) ; #3543 = ORIENTED_EDGE ( 'NONE', *, *, #4998, .T. ) ; #3544 = CARTESIAN_POINT ( 'NONE', ( -3.199999999999980200, -5.500000000000009800, -5.299999999999999800 ) ) ; #3545 = FACE_OUTER_BOUND ( 'NONE', #6689, .T. ) ; #3546 = ORIENTED_EDGE ( 'NONE', *, *, #1534, .T. ) ; #3547 = CARTESIAN_POINT ( 'NONE', ( -3.650000000000039900, -5.150000000000099800, -11.80000000000000100 ) ) ; #3548 = ORIENTED_EDGE ( 'NONE', *, *, #1713, .T. ) ; #3549 = AXIS2_PLACEMENT_3D ( 'NONE', #4532, #2479, #6168 ) ; #3550 = LINE ( 'NONE', #3150, #6209 ) ; #3551 = ORIENTED_EDGE ( 'NONE', *, *, #4501, .F. ) ; #3552 = LINE ( 'NONE', #1087, #768 ) ; #3553 = EDGE_CURVE ( 'NONE', #3910, #5733, #1294, .T. ) ; #3554 = CARTESIAN_POINT ( 'NONE', ( -2.942893218813432900, 7.208009521304641500E-016, -9.900000000000023400 ) ) ; #3555 = CARTESIAN_POINT ( 'NONE', ( 8.847089727481720200E-013, -5.500000000000009800, -6.968314918796940200 ) ) ; #3556 = AXIS2_PLACEMENT_3D ( 'NONE', #5518, #2420, #1872 ) ; #3557 = CARTESIAN_POINT ( 'NONE', ( 0.8735510553763753400, -5.299999999999281300, -5.604100464651938100 ) ) ; #3558 = CARTESIAN_POINT ( 'NONE', ( -9.662512969806920500, -8.700000000000059700, -12.93358983848630600 ) ) ; #3559 = LINE ( 'NONE', #1404, #5631 ) ; #3560 = PERSON_AND_ORGANIZATION_ROLE ( 'design_owner' ) ; #3561 = CARTESIAN_POINT ( 'NONE', ( 3.650000000000929800, -5.500000000000009800, -11.80000000000000100 ) ) ; #3562 = ORIENTED_EDGE ( 'NONE', *, *, #2810, .F. ) ; #3563 = AXIS2_PLACEMENT_3D ( 'NONE', #4223, #583, #5308 ) ; #3564 = ADVANCED_FACE ( 'NONE', ( #4243 ), #6818, .F. ) ; #3565 = CARTESIAN_POINT ( 'NONE', ( 0.8708207506773864000, 2.504395095722070000, -9.900000000000000400 ) ) ; #3566 = CIRCLE ( 'NONE', #3597, 0.3600000000000001000 ) ; #3567 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -13.94999999999999900 ) ) ; #3568 = ORIENTED_EDGE ( 'NONE', *, *, #3767, .T. ) ; #3569 = CARTESIAN_POINT ( 'NONE', ( 1.249999999999970200, -8.872628389125880600, -8.275493304669337700 ) ) ; #3570 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #3571 = FACE_OUTER_BOUND ( 'NONE', #1352, .T. ) ; #3572 = EDGE_CURVE ( 'NONE', #5091, #6798, #1043, .T. ) ; #3573 = ORIENTED_EDGE ( 'NONE', *, *, #4428, .F. ) ; #3574 = EDGE_LOOP ( 'NONE', ( #6494, #5617, #676, #2337 ) ) ; #3575 = LINE ( 'NONE', #2135, #2268 ) ; #3576 = VERTEX_POINT ( 'NONE', #4946 ) ; #3577 = CARTESIAN_POINT ( 'NONE', ( -3.899999999999789900, -6.049999999999999800, -13.44999999999999900 ) ) ; #3578 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; #3579 = FACE_OUTER_BOUND ( 'NONE', #4239, .T. ) ; #3580 = VERTEX_POINT ( 'NONE', #292 ) ; #3581 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; #3582 = ORIENTED_EDGE ( 'NONE', *, *, #2586, .T. ) ; #3583 = EDGE_CURVE ( 'NONE', #4394, #2862, #3248, .T. ) ; #3584 = FACE_BOUND ( 'NONE', #4556, .T. ) ; #3585 = CARTESIAN_POINT ( 'NONE', ( -3.599999999999940100, -6.049999999999999800, -11.80000000000000100 ) ) ; #3586 = LINE ( 'NONE', #5597, #3743 ) ; #3587 = ORIENTED_EDGE ( 'NONE', *, *, #6083, .F. ) ; #3588 = EDGE_CURVE ( 'NONE', #1091, #2163, #4006, .T. ) ; #3589 = CARTESIAN_POINT ( 'NONE', ( -2.749999999999090100, -5.500000000000008900, -5.600000000000860300 ) ) ; #3590 = CARTESIAN_POINT ( 'NONE', ( 1.479999999999979600, -8.299999999999956300, -12.93358983848629200 ) ) ; #3591 = LINE ( 'NONE', #6309, #2202 ) ; #3592 = VECTOR ( 'NONE', #6140, 1000.000000000000000 ) ; #3593 = EDGE_CURVE ( 'NONE', #1459, #4218, #4492, .T. ) ; #3594 = CARTESIAN_POINT ( 'NONE', ( 1.110223024625159900E-013, -3.350000000000020100, -13.40000000000000000 ) ) ; #3595 = ORIENTED_EDGE ( 'NONE', *, *, #1808, .T. ) ; #3596 = CARTESIAN_POINT ( 'NONE', ( 1.249999999999969800, -5.900000000000730400, -7.599999999999870000 ) ) ; #3597 = AXIS2_PLACEMENT_3D ( 'NONE', #2809, #309, #2468 ) ; #3598 = VECTOR ( 'NONE', #3446, 1000.000000000000000 ) ; #3599 = ORIENTED_EDGE ( 'NONE', *, *, #1307, .F. ) ; #3600 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #3601 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000091300, -8.152359877559360900, -7.600000000000069800 ) ) ; #3602 = DATE_AND_TIME ( #6007, #6836 ) ; #3603 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; #3604 = ORIENTED_EDGE ( 'NONE', *, *, #499, .T. ) ; #3605 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #3606 = EDGE_CURVE ( 'NONE', #4598, #2237, #1904, .T. ) ; #3607 = CARTESIAN_POINT ( 'NONE', ( -4.500000000000060400, -2.599999999999050200, -9.750000000000000000 ) ) ; #3608 = ORIENTED_EDGE ( 'NONE', *, *, #2843, .F. ) ; #3609 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; #3610 = ORIENTED_EDGE ( 'NONE', *, *, #2181, .T. ) ; #3611 = AXIS2_PLACEMENT_3D ( 'NONE', #2743, #3744, #4299 ) ; #3612 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; #3613 = EDGE_CURVE ( 'NONE', #6295, #944, #5495, .T. ) ; #3614 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; #3615 = VERTEX_POINT ( 'NONE', #6690 ) ; #3616 = FACE_OUTER_BOUND ( 'NONE', #6435, .T. ) ; #3617 = ORIENTED_EDGE ( 'NONE', *, *, #4681, .T. ) ; #3618 = EDGE_CURVE ( 'NONE', #3299, #2476, #2936, .T. ) ; #3619 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; #3620 = VERTEX_POINT ( 'NONE', #1906 ) ; #3621 = ORIENTED_EDGE ( 'NONE', *, *, #1892, .F. ) ; #3622 = FACE_OUTER_BOUND ( 'NONE', #2969, .T. ) ; #3623 = CARTESIAN_POINT ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -5.625000000000020400 ) ) ; #3624 = ORIENTED_EDGE ( 'NONE', *, *, #6734, .F. ) ; #3625 = VECTOR ( 'NONE', #1437, 1000.000000000000000 ) ; #3626 = ORIENTED_EDGE ( 'NONE', *, *, #1156, .F. ) ; #3627 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #3628 = EDGE_CURVE ( 'NONE', #2220, #6232, #2369, .T. ) ; #3629 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #3630 = CARTESIAN_POINT ( 'NONE', ( -1.176405706191879300, -10.47304119650046400, -7.599999999999869100 ) ) ; #3631 = AXIS2_PLACEMENT_3D ( 'NONE', #2885, #230, #3887 ) ; #3632 = LINE ( 'NONE', #3034, #5280 ) ; #3633 = VERTEX_POINT ( 'NONE', #5651 ) ; #3634 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #3635 = ORIENTED_EDGE ( 'NONE', *, *, #3757, .T. ) ; #3636 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000090600, -5.699999999999819900, -7.799999999999481100 ) ) ; #3637 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000090800, -9.699999999999365100, -7.599999999999969400 ) ) ; #3638 = CC_DESIGN_DATE_AND_TIME_ASSIGNMENT ( #2128, #4140, ( #4474 ) ) ; #3639 = ORIENTED_EDGE ( 'NONE', *, *, #302, .F. ) ; #3640 = EDGE_CURVE ( 'NONE', #2656, #3778, #3586, .T. ) ; #3641 = LINE ( 'NONE', #5446, #5141 ) ; #3642 = VERTEX_POINT ( 'NONE', #2972 ) ; #3643 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #3644 = AXIS2_PLACEMENT_3D ( 'NONE', #1602, #61, #5895 ) ; #3645 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #3646 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; #3647 = VERTEX_POINT ( 'NONE', #6111 ) ; #3648 = CARTESIAN_POINT ( 'NONE', ( -2.620106179956631200, -1.340023918850388600, -9.900000000000023400 ) ) ; #3649 = AXIS2_PLACEMENT_3D ( 'NONE', #34, #2686, #3203 ) ; #3650 = LINE ( 'NONE', #4594, #4304 ) ; #3651 = ORIENTED_EDGE ( 'NONE', *, *, #4254, .T. ) ; #3652 = LINE ( 'NONE', #3739, #874 ) ; #3653 = CYLINDRICAL_SURFACE ( 'NONE', #82, 0.2999999999999999300 ) ; #3654 = CARTESIAN_POINT ( 'NONE', ( -1.499999999999830100, -6.350000000000021000, -11.80000000000000100 ) ) ; #3655 = FACE_OUTER_BOUND ( 'NONE', #4080, .T. ) ; #3656 = ORIENTED_EDGE ( 'NONE', *, *, #4134, .F. ) ; #3657 = CARTESIAN_POINT ( 'NONE', ( 3.650000000000929800, -5.500000000000008900, -11.79999999999999900 ) ) ; #3658 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; #3659 = EDGE_CURVE ( 'NONE', #5916, #2371, #4985, .T. ) ; #3660 = EDGE_CURVE ( 'NONE', #5023, #2146, #6407, .T. ) ; #3661 = CYLINDRICAL_SURFACE ( 'NONE', #4751, 0.2500000000000002200 ) ; #3662 = ORIENTED_EDGE ( 'NONE', *, *, #4162, .F. ) ; #3663 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #3664 = ORIENTED_EDGE ( 'NONE', *, *, #1662, .T. ) ; #3665 = CARTESIAN_POINT ( 'NONE', ( -3.469446951953609900E-015, -10.04999999999840000, 21.81166452059000000 ) ) ; #3666 = LINE ( 'NONE', #3177, #1970 ) ; #3667 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; #3668 = CYLINDRICAL_SURFACE ( 'NONE', #2596, 0.2699999999999998500 ) ; #3669 = VERTEX_POINT ( 'NONE', #3499 ) ; #3670 = EDGE_CURVE ( 'NONE', #2656, #2509, #3833, .T. ) ; #3671 = ADVANCED_FACE ( 'NONE', ( #1207 ), #2523, .F. ) ; #3672 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #3673 = AXIS2_PLACEMENT_3D ( 'NONE', #1105, #537, #31 ) ; #3674 = LINE ( 'NONE', #1, #5747 ) ; #3675 = CARTESIAN_POINT ( 'NONE', ( 1.479999999999980200, -3.100000000000049400, -13.42000000000000000 ) ) ; #3676 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; #3677 = CARTESIAN_POINT ( 'NONE', ( 1.128102625125086300, -10.58897966702491400, -7.599999999999870000 ) ) ; #3678 = AXIS2_PLACEMENT_3D ( 'NONE', #5442, #5425, #2274 ) ; #3679 = ADVANCED_FACE ( 'NONE', ( #1635 ), #339, .T. ) ; #3680 = EDGE_CURVE ( 'NONE', #1905, #4473, #5234, .T. ) ; #3681 = EDGE_CURVE ( 'NONE', #4199, #3147, #5661, .T. ) ; #3682 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; #3683 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #3684 = ORIENTED_EDGE ( 'NONE', *, *, #3250, .F. ) ; #3685 = AXIS2_PLACEMENT_3D ( 'NONE', #5840, #4190, #5264 ) ; #3686 = CARTESIAN_POINT ( 'NONE', ( -2.650003848313224000, 2.300336605207435800E-009, -9.900000000000000400 ) ) ; #3687 = EDGE_LOOP ( 'NONE', ( #6197, #1216, #28, #3869 ) ) ; #3688 = CARTESIAN_POINT ( 'NONE', ( 3.030782786503039900, -2.199999999999130200, -2.779157999888000100 ) ) ; #3689 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #3690 = EDGE_LOOP ( 'NONE', ( #4702, #3806, #4510, #969 ) ) ; #3691 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; #3692 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; #3693 = EDGE_CURVE ( 'NONE', #5443, #1185, #4980, .T. ) ; #3694 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; #3695 = EDGE_LOOP ( 'NONE', ( #4949, #3092, #1882, #6530 ) ) ; #3696 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; #3697 = ORIENTED_EDGE ( 'NONE', *, *, #2802, .F. ) ; #3698 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #3699 = PLANE ( 'NONE', #3771 ) ; #3700 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #3701 = VECTOR ( 'NONE', #4040, 1000.000000000000000 ) ; #3702 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; #3703 = ORIENTED_EDGE ( 'NONE', *, *, #6815, .F. ) ; #3704 = LINE ( 'NONE', #4523, #5369 ) ; #3705 = VERTEX_POINT ( 'NONE', #909 ) ; #3706 = EDGE_LOOP ( 'NONE', ( #4673, #661 ) ) ; #3707 = EDGE_CURVE ( 'NONE', #6798, #3224, #6736, .T. ) ; #3708 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; #3709 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #3710 = ADVANCED_FACE ( 'NONE', ( #3579 ), #4081, .T. ) ; #3711 = LINE ( 'NONE', #4486, #4544 ) ; #3712 = CARTESIAN_POINT ( 'NONE', ( 2.020275923833792400, -2.964644262160363500, -6.284245366314027400 ) ) ; #3713 = ORIENTED_EDGE ( 'NONE', *, *, #1763, .T. ) ; #3714 = LINE ( 'NONE', #6343, #6026 ) ; #3715 = PLANE ( 'NONE', #5423 ) ; #3716 = EDGE_LOOP ( 'NONE', ( #1647, #5314, #14, #444 ) ) ; #3717 = LINE ( 'NONE', #806, #1350 ) ; #3718 = CARTESIAN_POINT ( 'NONE', ( -0.1127481932547634000, -2.704807173809259200, -10.04275987549485200 ) ) ; #3719 = EDGE_CURVE ( 'NONE', #6565, #3984, #6325, .T. ) ; #3720 = ORIENTED_EDGE ( 'NONE', *, *, #6121, .T. ) ; #3721 = EDGE_CURVE ( 'NONE', #2310, #5626, #4903, .T. ) ; #3722 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; #3723 = ORIENTED_EDGE ( 'NONE', *, *, #6014, .F. ) ; #3724 = AXIS2_PLACEMENT_3D ( 'NONE', #2428, #5028, #4477 ) ; #3725 = CARTESIAN_POINT ( 'NONE', ( -1.550000000000830000, -6.350000000000021000, -14.40000000000000200 ) ) ; #3726 = ORIENTED_EDGE ( 'NONE', *, *, #2384, .T. ) ; #3727 = CARTESIAN_POINT ( 'NONE', ( -3.049999999999060600, -5.500000000000009800, -5.600000000000890500 ) ) ; #3728 = LINE ( 'NONE', #6100, #5209 ) ; #3729 = ORIENTED_EDGE ( 'NONE', *, *, #1856, .F. ) ; #3730 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.4999999999999610900, -0.8660254037844611300 ) ) ; #3731 = VECTOR ( 'NONE', #2400, 1000.000000000000000 ) ; #3732 = CARTESIAN_POINT ( 'NONE', ( -2.362731470142100100, -1.199999999999980200, -9.900000000000000400 ) ) ; #3733 = CIRCLE ( 'NONE', #6616, 1.050000000000000000 ) ; #3734 = VERTEX_POINT ( 'NONE', #2544 ) ; #3735 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #3736 = CARTESIAN_POINT ( 'NONE', ( -1.899999999998069900, -5.500000000000009800, -7.400000000000000400 ) ) ; #3737 = FACE_OUTER_BOUND ( 'NONE', #3047, .T. ) ; #3738 = EDGE_LOOP ( 'NONE', ( #1359, #1389, #4319, #5802 ) ) ; #3739 = CARTESIAN_POINT ( 'NONE', ( 1.479999999999979600, 2.300000000000019800, -13.77999999999999900 ) ) ; #3740 = CARTESIAN_POINT ( 'NONE', ( -0.1121088177076749900, -2.706526339254925700, -10.04149831957635200 ) ) ; #3741 = FACE_BOUND ( 'NONE', #6256, .T. ) ; #3742 = ADVANCED_FACE ( 'NONE', ( #6242 ), #3448, .T. ) ; #3743 = VECTOR ( 'NONE', #3521, 1000.000000000000100 ) ; #3744 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; #3745 = ORIENTED_EDGE ( 'NONE', *, *, #2054, .T. ) ; #3746 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #3747 = EDGE_CURVE ( 'NONE', #6150, #5128, #3167, .T. ) ; #3748 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; #3749 = LINE ( 'NONE', #2245, #242 ) ; #3750 = LINE ( 'NONE', #6652, #801 ) ; #3751 = ORIENTED_EDGE ( 'NONE', *, *, #2061, .F. ) ; #3752 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; #3753 = CARTESIAN_POINT ( 'NONE', ( -4.500000000000060400, -2.150000000000039900, -11.80000000000000100 ) ) ; #3754 = LINE ( 'NONE', #1145, #2873 ) ; #3755 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; #3756 =( BOUNDED_SURFACE ( ) B_SPLINE_SURFACE ( 3, 3, ( ( #6194, #2480, #6097, #1944 ), ( #5149, #4606, #5605, #6657 ), ( #915, #5074, #347, #4587 ), ( #3485, #6174, #376, #1455 ) ), .UNSPECIFIED., .F., .F., .T. ) B_SPLINE_SURFACE_WITH_KNOTS ( ( 4, 4 ), ( 4, 4 ), ( 0.0000000000000000000, 1.000000000000000000 ), ( 0.0000000000000000000, 1.000000000000000000 ), .UNSPECIFIED. ) GEOMETRIC_REPRESENTATION_ITEM ( ) RATIONAL_B_SPLINE_SURFACE ( ( ( 1.000000000000000000, 0.8047378541243649400, 0.8047378541243649400, 1.000000000000000000), ( 0.8047378541243649400, 0.6476030138606876400, 0.6476030138606876400, 0.8047378541243649400), ( 0.8047378541243649400, 0.6476030138606876400, 0.6476030138606876400, 0.8047378541243649400), ( 1.000000000000000000, 0.8047378541243649400, 0.8047378541243649400, 1.000000000000000000) ) ) REPRESENTATION_ITEM ( '' ) SURFACE ( ) ); #3757 = EDGE_CURVE ( 'NONE', #817, #2242, #4655, .T. ) ; #3758 = VERTEX_POINT ( 'NONE', #5197 ) ; #3759 = ADVANCED_FACE ( 'NONE', ( #4815 ), #6761, .T. ) ; #3760 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000091300, -9.595602668246961300, -7.621554619278196400 ) ) ; #3761 = APPROVAL_PERSON_ORGANIZATION ( #5175, #1638, #1439 ) ; #3762 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; #3763 = ORIENTED_EDGE ( 'NONE', *, *, #5805, .T. ) ; #3764 = CARTESIAN_POINT ( 'NONE', ( 3.200000000000979800, -5.500000000000008900, -0.9999999999999991100 ) ) ; #3765 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, ( #75, #3181, #1623, #60, #3712, #1123 ), .UNSPECIFIED., .F., .F., ( 4, 2, 4 ), ( 0.0000000000000000000, 0.5000000000000000000, 1.000000000000000000 ), .UNSPECIFIED. ) ; #3766 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #3767 = EDGE_CURVE ( 'NONE', #1711, #5171, #2526, .T. ) ; #3768 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #3769 = AXIS2_PLACEMENT_3D ( 'NONE', #2513, #1433, #2993 ) ; #3770 = ORIENTED_EDGE ( 'NONE', *, *, #4200, .T. ) ; #3771 = AXIS2_PLACEMENT_3D ( 'NONE', #1637, #1007, #2594 ) ; #3772 = CARTESIAN_POINT ( 'NONE', ( -2.749999999999090100, -4.700000903659367100, -1.699610252709137700 ) ) ; #3773 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; #3774 = ADVANCED_FACE ( 'NONE', ( #2113 ), #1608, .T. ) ; #3775 = ORIENTED_EDGE ( 'NONE', *, *, #3538, .T. ) ; #3776 = ORIENTED_EDGE ( 'NONE', *, *, #5436, .T. ) ; #3777 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; #3778 = VERTEX_POINT ( 'NONE', #2583 ) ; #3779 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; #3780 = VERTEX_POINT ( 'NONE', #431 ) ; #3781 = VECTOR ( 'NONE', #410, 1000.000000000000000 ) ; #3782 = VERTEX_POINT ( 'NONE', #4687 ) ; #3783 = CARTESIAN_POINT ( 'NONE', ( -1.853233911816576100E-007, -2.766308203330536800, -9.994224390921790000 ) ) ; #3784 = CARTESIAN_POINT ( 'NONE', ( 2.164999999999927600, -2.970259389424274600, -3.494704195690407500 ) ) ; #3785 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #3786 = EDGE_CURVE ( 'NONE', #3969, #4044, #4575, .T. ) ; #3787 = VECTOR ( 'NONE', #3171, 1000.000000000000000 ) ; #3788 = VERTEX_POINT ( 'NONE', #6278 ) ; #3789 = CARTESIAN_POINT ( 'NONE', ( 3.200000000000979800, -2.150000000000039900, -9.750000000000000000 ) ) ; #3790 = VECTOR ( 'NONE', #1769, 1000.000000000000000 ) ; #3791 = ORIENTED_EDGE ( 'NONE', *, *, #4207, .F. ) ; #3792 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -9.900000000000000400 ) ) ; #3793 = ADVANCED_FACE ( 'NONE', ( #1626 ), #2037, .T. ) ; #3794 = CARTESIAN_POINT ( 'NONE', ( -2.164999999999973400, -2.970259389424511700, -3.494704195690560700 ) ) ; #3795 = LINE ( 'NONE', #4438, #4877 ) ; #3796 = ORIENTED_EDGE ( 'NONE', *, *, #1491, .F. ) ; #3797 = ORIENTED_EDGE ( 'NONE', *, *, #4814, .F. ) ; #3798 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000091300, -11.29999999999930300, -7.800000000000070000 ) ) ; #3799 = EDGE_CURVE ( 'NONE', #1425, #2239, #3504, .T. ) ; #3800 = CARTESIAN_POINT ( 'NONE', ( -2.749999999999090500, -5.178855303676295200, -1.930251896830331300 ) ) ; #3801 = VERTEX_POINT ( 'NONE', #4828 ) ; #3802 = VERTEX_POINT ( 'NONE', #1082 ) ; #3803 = ORIENTED_EDGE ( 'NONE', *, *, #2510, .T. ) ; #3804 = VECTOR ( 'NONE', #4109, 1000.000000000000000 ) ; #3805 = EDGE_CURVE ( 'NONE', #3130, #2149, #1798, .T. ) ; #3806 = ORIENTED_EDGE ( 'NONE', *, *, #4034, .F. ) ; #3807 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, ( #4573, #3040, #1975, #5644, #5132, #947, #6184, #3017, #4096, #6710, #3532, #5174, #6199, #4548, #3557, #4615, #425, #1488 ), .UNSPECIFIED., .F., .F., ( 4, 2, 2, 2, 2, 2, 2, 2, 4 ), ( 0.0000000000000000000, 0.0003907630664662460000, 0.0007815261329324920000, 0.001172289199398737900, 0.001563052265864984000, 0.001953815332331230000, 0.002344578398797475900, 0.002735341465263722200, 0.003126104531729968000 ), .UNSPECIFIED. ) ; #3808 = CARTESIAN_POINT ( 'NONE', ( 0.7243921280120404500, -11.07528999022734200, -7.800000000000066400 ) ) ; #3809 = VERTEX_POINT ( 'NONE', #2213 ) ; #3810 = CARTESIAN_POINT ( 'NONE', ( 4.499999999999950300, -6.000000000000061300, -11.80000000000000100 ) ) ; #3811 = VERTEX_POINT ( 'NONE', #6411 ) ; #3812 = CARTESIAN_POINT ( 'NONE', ( -9.657998985626868100E-016, -2.699783421336156200, -10.03070813642793800 ) ) ; #3813 = EDGE_CURVE ( 'NONE', #2133, #634, #3418, .T. ) ; #3814 = EDGE_CURVE ( 'NONE', #3056, #3647, #6158, .T. ) ; #3815 = FACE_BOUND ( 'NONE', #506, .T. ) ; #3816 = CARTESIAN_POINT ( 'NONE', ( 18.18468237128200100, -5.699999999999819900, -7.799999999998890500 ) ) ; #3817 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; #3818 = ORIENTED_EDGE ( 'NONE', *, *, #1401, .F. ) ; #3819 = AXIS2_PLACEMENT_3D ( 'NONE', #3049, #6728, #2505 ) ; #3820 = LINE ( 'NONE', #5922, #3236 ) ; #3821 = ADVANCED_FACE ( 'NONE', ( #1964 ), #1693, .T. ) ; #3822 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; #3823 = CARTESIAN_POINT ( 'NONE', ( 1.550000000000050200, -3.350000000000020100, -14.40000000000000200 ) ) ; #3824 = LINE ( 'NONE', #4340, #544 ) ; #3825 =( BOUNDED_SURFACE ( ) B_SPLINE_SURFACE ( 3, 3, ( ( #1871, #850, #6118, #3436 ), ( #4039, #2441, #1305, #5534 ), ( #2394, #4979, #2958, #4494 ), ( #6072, #301, #825, #5017 ) ), .UNSPECIFIED., .F., .F., .F. ) B_SPLINE_SURFACE_WITH_KNOTS ( ( 4, 4 ), ( 4, 4 ), ( 0.0000000000000000000, 1.000000000000000000 ), ( 0.0000000000000000000, 1.000000000000000000 ), .UNSPECIFIED. ) GEOMETRIC_REPRESENTATION_ITEM ( ) RATIONAL_B_SPLINE_SURFACE ( ( ( 1.000000000000000000, 0.8873253512002458000, 0.8873253512002458000, 1.000000000000000000), ( 0.8864161810976789500, 0.7865395492020786900, 0.7865395492020786900, 0.8864161810976789500), ( 0.8864161810976789500, 0.7865395492020786900, 0.7865395492020786900, 0.8864161810976789500), ( 1.000000000000000000, 0.8873253512002458000, 0.8873253512002458000, 1.000000000000000000) ) ) REPRESENTATION_ITEM ( '' ) SURFACE ( ) ); #3826 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; #3827 = CARTESIAN_POINT ( 'NONE', ( -0.5877149042824142400, -1.860708733669007400, -10.90603792430962400 ) ) ; #3828 = VECTOR ( 'NONE', #2919, 1000.000000000000000 ) ; #3829 = EDGE_LOOP ( 'NONE', ( #5079, #2813, #4069, #2000 ) ) ; #3830 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; #3831 = CARTESIAN_POINT ( 'NONE', ( 2.300000000000107300, -5.551115123125780200E-014, -13.42000000000000000 ) ) ; #3832 = CARTESIAN_POINT ( 'NONE', ( 1.742565499591246500, -2.635368147286672800, -10.71849341485848100 ) ) ; #3833 = LINE ( 'NONE', #4032, #2450 ) ; #3834 = ORIENTED_EDGE ( 'NONE', *, *, #3146, .T. ) ; #3835 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; #3836 = EDGE_CURVE ( 'NONE', #1341, #2512, #965, .T. ) ; #3837 = ADVANCED_FACE ( 'NONE', ( #3737 ), #98, .T. ) ; #3838 = CARTESIAN_POINT ( 'NONE', ( 1.249999999999969800, -8.687867965643739900, -8.387867965643890100 ) ) ; #3839 = CARTESIAN_POINT ( 'NONE', ( 1.249999999999969800, -5.595280244880159500, -7.799999999998892300 ) ) ; #3840 = FACE_OUTER_BOUND ( 'NONE', #3965, .T. ) ; #3841 = FACE_OUTER_BOUND ( 'NONE', #5610, .T. ) ; #3842 = ORIENTED_EDGE ( 'NONE', *, *, #4726, .T. ) ; #3843 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; #3844 = CARTESIAN_POINT ( 'NONE', ( 3.030782786503039900, -2.199999999999130200, -11.80000000000000100 ) ) ; #3845 = AXIS2_PLACEMENT_3D ( 'NONE', #5267, #2657, #574 ) ; #3846 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; #3847 = LINE ( 'NONE', #4995, #2296 ) ; #3848 = CARTESIAN_POINT ( 'NONE', ( 1.200000000000090100, -3.100000000000049800, -13.42000000000000000 ) ) ; #3849 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; #3850 = EDGE_CURVE ( 'NONE', #3209, #2784, #2613, .T. ) ; #3851 = CARTESIAN_POINT ( 'NONE', ( -1.000000000000000000, 1.224646799147353200E-016, -2.100000000000049800 ) ) ; #3852 = ORIENTED_EDGE ( 'NONE', *, *, #6425, .T. ) ; #3853 = CARTESIAN_POINT ( 'NONE', ( 2.300000000000107300, -5.551115123125780200E-014, -13.77999999999999900 ) ) ; #3854 = EDGE_CURVE ( 'NONE', #4213, #927, #4738, .T. ) ; #3855 = VERTEX_POINT ( 'NONE', #1148 ) ; #3856 = CARTESIAN_POINT ( 'NONE', ( 1.550000000000050000, -3.350000000000020100, -13.44999999999999900 ) ) ; #3857 = AXIS2_PLACEMENT_3D ( 'NONE', #5330, #3268, #3708 ) ; #3858 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #3859 = CARTESIAN_POINT ( 'NONE', ( 3.550000000000880000, -5.500000000000009800, -11.90000000000010000 ) ) ; #3860 = AXIS2_PLACEMENT_3D ( 'NONE', #5112, #6166, #2546 ) ; #3861 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.7071067811864111300, -0.7071067811866840200 ) ) ; #3862 = CARTESIAN_POINT ( 'NONE', ( 0.1328947605470659500, -5.299999999999281300, -4.100135148236461200 ) ) ; #3863 = APPROVAL ( #450, 'UNSPECIFIED' ) ; #3864 = CARTESIAN_POINT ( 'NONE', ( 0.4023726119711265600, -2.665138565892111200, -10.43524680229129900 ) ) ; #3865 = CARTESIAN_POINT ( 'NONE', ( -2.506131082811232400, 0.8794543800383490800, -9.900000000000000400 ) ) ; #3866 = ORIENTED_EDGE ( 'NONE', *, *, #1747, .F. ) ; #3867 = ADVANCED_FACE ( 'NONE', ( #5313 ), #3715, .T. ) ; #3868 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.8480480961564262900, -0.5299192642332044600 ) ) ; #3869 = ORIENTED_EDGE ( 'NONE', *, *, #3659, .F. ) ; #3870 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; #3871 = PLANE ( 'NONE', #2955 ) ; #3872 = CARTESIAN_POINT ( 'NONE', ( 3.650000000000929800, -5.500000000000009800, -5.299999999999999800 ) ) ; #3873 = FACE_OUTER_BOUND ( 'NONE', #6630, .T. ) ; #3874 = ORIENTED_EDGE ( 'NONE', *, *, #138, .F. ) ; #3875 = CIRCLE ( 'NONE', #4614, 1.050000000000000000 ) ; #3876 = ORIENTED_EDGE ( 'NONE', *, *, #6831, .F. ) ; #3877 = ORIENTED_EDGE ( 'NONE', *, *, #3463, .F. ) ; #3878 = CARTESIAN_POINT ( 'NONE', ( 2.299999999999859900, -1.199999999999980000, -9.900000000000000400 ) ) ; #3879 = VECTOR ( 'NONE', #341, 1000.000000000000000 ) ; #3880 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; #3881 = VERTEX_POINT ( 'NONE', #1128 ) ; #3882 = VECTOR ( 'NONE', #6306, 1000.000000000000000 ) ; #3883 = CARTESIAN_POINT ( 'NONE', ( -4.500000000000060400, 4.299999999999919900, -1.000000000000000000 ) ) ; #3884 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #3885 = EDGE_CURVE ( 'NONE', #3811, #1114, #3241, .T. ) ; #3886 = ORIENTED_EDGE ( 'NONE', *, *, #5261, .F. ) ; #3887 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.7313537016192047700, 0.6819983600624617300 ) ) ; #3888 = FACE_OUTER_BOUND ( 'NONE', #5152, .T. ) ; #3889 = CARTESIAN_POINT ( 'NONE', ( -0.1558934014741672800, -2.705180532542822200, -10.05427293811224000 ) ) ; #3890 = ORIENTED_EDGE ( 'NONE', *, *, #5101, .T. ) ; #3891 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -10.15000000000000000 ) ) ; #3892 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #3893 = VERTEX_POINT ( 'NONE', #37 ) ; #3894 = PLANE ( 'NONE', #6703 ) ; #3895 = FACE_OUTER_BOUND ( 'NONE', #4086, .T. ) ; #3896 = EDGE_CURVE ( 'NONE', #5341, #657, #1117, .T. ) ; #3897 = ORIENTED_EDGE ( 'NONE', *, *, #838, .F. ) ; #3898 = CARTESIAN_POINT ( 'NONE', ( 1.644264407092791600, -2.781668093413520300, -11.23989685449769700 ) ) ; #3899 = CONICAL_SURFACE ( 'NONE', #2605, 1.199999999471401700, 1.405647647690330300 ) ; #3900 = ADVANCED_FACE ( 'NONE', ( #720 ), #4736, .T. ) ; #3901 = AXIS2_PLACEMENT_3D ( 'NONE', #4496, #5564, #739 ) ; #3902 = VERTEX_POINT ( 'NONE', #650 ) ; #3903 = VECTOR ( 'NONE', #3033, 1000.000000000000000 ) ; #3904 = EDGE_LOOP ( 'NONE', ( #3834, #2076, #879, #488, #375, #6408, #4796, #4693, #3255, #3006, #2350 ) ) ; #3905 = AXIS2_PLACEMENT_3D ( 'NONE', #1048, #4718, #4209 ) ; #3906 = ADVANCED_FACE ( 'NONE', ( #228 ), #5821, .F. ) ; #3907 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; #3908 = LINE ( 'NONE', #2964, #6320 ) ; #3909 = CARTESIAN_POINT ( 'NONE', ( -2.912473175842155400, -1.199999999999962000, 0.0000000000000000000 ) ) ; #3910 = VERTEX_POINT ( 'NONE', #3334 ) ; #3911 = CARTESIAN_POINT ( 'NONE', ( 1.249999999999970200, -5.519893295065988200, -7.502368927062207100 ) ) ; #3912 = EDGE_CURVE ( 'NONE', #1104, #3734, #6572, .T. ) ; #3913 = CARTESIAN_POINT ( 'NONE', ( -1.777709254451546300, -2.659722563033053400, -10.48677662737589800 ) ) ; #3914 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; #3915 = LINE ( 'NONE', #1792, #2361 ) ; #3916 = ORIENTED_EDGE ( 'NONE', *, *, #3456, .T. ) ; #3917 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #3918 = AXIS2_PLACEMENT_3D ( 'NONE', #483, #3658, #1098 ) ; #3919 = VERTEX_POINT ( 'NONE', #3838 ) ; #3920 = PRODUCT_DEFINITION_SHAPE ( 'NONE', 'NONE', #1313 ) ; #3921 = CARTESIAN_POINT ( 'NONE', ( -1.549999999999049700, -5.500000000000008900, -7.349999999999999600 ) ) ; #3922 = VECTOR ( 'NONE', #911, 1000.000000000000000 ) ; #3923 = VECTOR ( 'NONE', #1599, 1000.000000000000100 ) ; #3924 = PLANE ( 'NONE', #5762 ) ; #3925 = ORIENTED_EDGE ( 'NONE', *, *, #5750, .F. ) ; #3926 = LINE ( 'NONE', #6214, #6336 ) ; #3927 = LINE ( 'NONE', #896, #2040 ) ; #3928 = VERTEX_POINT ( 'NONE', #5940 ) ; #3929 = CARTESIAN_POINT ( 'NONE', ( -2.010880259306311300, -2.283098795542530800, -5.375228444583565400 ) ) ; #3930 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -11.87500000000000000 ) ) ; #3931 = CARTESIAN_POINT ( 'NONE', ( 18.18468237128200100, -3.137993503012876900, -3.603632002693444700 ) ) ; #3932 = VECTOR ( 'NONE', #6133, 1000.000000000000000 ) ; #3933 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.982541115402067300E-014, -1.000000000000000000 ) ) ; #3934 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #3935 = ORIENTED_EDGE ( 'NONE', *, *, #4602, .F. ) ; #3936 = ADVANCED_FACE ( 'NONE', ( #5488 ), #5990, .T. ) ; #3937 = VECTOR ( 'NONE', #1956, 1000.000000000000000 ) ; #3938 = CARTESIAN_POINT ( 'NONE', ( -0.4011364763332872500, -2.670014415160290700, -10.38885619532994800 ) ) ; #3939 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.4999999999999711300, 0.8660254037844553600 ) ) ; #3940 = EDGE_CURVE ( 'NONE', #6775, #2866, #1874, .T. ) ; #3941 = ORIENTED_EDGE ( 'NONE', *, *, #1662, .F. ) ; #3942 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; #3943 = PLANE ( 'NONE', #6397 ) ; #3944 = EDGE_CURVE ( 'NONE', #645, #4800, #556, .T. ) ; #3945 = CARTESIAN_POINT ( 'NONE', ( -2.020463532250947700, -3.006697313462885400, -6.347916535266192800 ) ) ; #3946 = CARTESIAN_POINT ( 'NONE', ( -1.899999999998069900, -5.299999999999280400, -7.400000000000000400 ) ) ; #3947 = ORIENTED_EDGE ( 'NONE', *, *, #1937, .F. ) ; #3948 = EDGE_CURVE ( 'NONE', #1771, #5235, #5896, .T. ) ; #3949 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; #3950 = CARTESIAN_POINT ( 'NONE', ( 1.990505233562101600, -2.102621765406396100, -5.480396383500242100 ) ) ; #3951 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -10.15000000000000000 ) ) ; #3952 = CARTESIAN_POINT ( 'NONE', ( -2.009053559820080700, -2.230205965792041700, -5.325905082892768800 ) ) ; #3953 = AXIS2_PLACEMENT_3D ( 'NONE', #3272, #4472, #6640 ) ; #3954 = CARTESIAN_POINT ( 'NONE', ( -3.199999999999980200, -5.500000000000009800, -0.9999999999999988900 ) ) ; #3955 = VERTEX_POINT ( 'NONE', #3878 ) ; #3956 = ORIENTED_EDGE ( 'NONE', *, *, #748, .F. ) ; #3957 = CARTESIAN_POINT ( 'NONE', ( 18.18468237128200100, -2.906897123192780300, -6.230395288045460100 ) ) ; #3958 = CARTESIAN_POINT ( 'NONE', ( 2.750000000000909500, -4.689212032310580400, -1.500072740962072900 ) ) ; #3959 = EDGE_LOOP ( 'NONE', ( #6094, #19, #4781, #3383 ) ) ; #3960 = LINE ( 'NONE', #5189, #5356 ) ; #3961 = ORIENTED_EDGE ( 'NONE', *, *, #6744, .F. ) ; #3962 = CARTESIAN_POINT ( 'NONE', ( 0.3736698151592854300, -2.651278361297988900, -10.56711784021001100 ) ) ; #3963 = CARTESIAN_POINT ( 'NONE', ( -2.500000000000060000, 2.400000000000960000, -2.549999999999999800 ) ) ; #3964 = VERTEX_POINT ( 'NONE', #179 ) ; #3965 = EDGE_LOOP ( 'NONE', ( #3364, #4142, #6299, #368 ) ) ; #3966 = FACE_OUTER_BOUND ( 'NONE', #4094, .T. ) ; #3967 = ORIENTED_EDGE ( 'NONE', *, *, #5298, .F. ) ; #3968 = LINE ( 'NONE', #3280, #680 ) ; #3969 = VERTEX_POINT ( 'NONE', #1263 ) ; #3970 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #3971 = VERTEX_POINT ( 'NONE', #4337 ) ; #3972 = LINE ( 'NONE', #2569, #39 ) ; #3973 = VERTEX_POINT ( 'NONE', #2792 ) ; #3974 = ORIENTED_EDGE ( 'NONE', *, *, #182, .T. ) ; #3975 = CARTESIAN_POINT ( 'NONE', ( 3.150000000000000800, 6.299999999999998900, -9.400000000000000400 ) ) ; #3976 = CARTESIAN_POINT ( 'NONE', ( 1.075528555105620000E-013, -5.551115123125780200E-014, -13.42000000000000000 ) ) ; #3977 = ORIENTED_EDGE ( 'NONE', *, *, #4513, .T. ) ; #3978 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; #3979 = LINE ( 'NONE', #3529, #3317 ) ; #3980 = CARTESIAN_POINT ( 'NONE', ( 2.750000000000901100, -4.208418032298772500, -1.955662937369631900 ) ) ; #3981 = VERTEX_POINT ( 'NONE', #4356 ) ; #3982 = EDGE_CURVE ( 'NONE', #5520, #4905, #5653, .T. ) ; #3983 = PLANE ( 'NONE', #1009 ) ; #3984 = VERTEX_POINT ( 'NONE', #5433 ) ; #3985 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; #3986 = CARTESIAN_POINT ( 'NONE', ( 8.847089727481720200E-013, -5.500000000000009800, -11.90000000000010000 ) ) ; #3987 = VECTOR ( 'NONE', #6319, 1000.000000000000000 ) ; #3988 = ORIENTED_EDGE ( 'NONE', *, *, #2269, .F. ) ; #3989 = CARTESIAN_POINT ( 'NONE', ( -2.489999999999949600, -2.559999999999050100, -2.779157999888000100 ) ) ; #3990 = CARTESIAN_POINT ( 'NONE', ( 2.640453492209004200, -0.2665615384595704200, -9.900000000000003900 ) ) ; #3991 = CYLINDRICAL_SURFACE ( 'NONE', #4712, 0.09999999999999939500 ) ; #3992 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, ( #5288, #5740, #4691, #6834, #2677, #3630, #2145, #5785, #1067, #5813, #6281, #520, #571, #3107, #1565, #5246, #5838, #4189, #4742, #2106, #2589, #4169, #5223, #15, #497, #6346, #6811, #6366, #3677, #3124, #2632, #1607, #1027, #547 ), .UNSPECIFIED., .F., .F., ( 4, 1, 1, 2, 2, 2, 1, 1, 2, 2, 2, 1, 1, 2, 2, 2, 1, 1, 2, 2, 4 ), ( 0.0000000000000000000, 0.06249999999999657200, 0.09374999999999419900, 0.1093749999999936700, 0.1249999999999931400, 0.2499999999999947300, 0.3124999999999955000, 0.3437499999999959500, 0.3593749999999958900, 0.3749999999999957800, 0.4999999999999942300, 0.5624999999999934500, 0.5937499999999931200, 0.6093749999999930100, 0.6249999999999928900, 0.7499999999999936700, 0.8124999999999942300, 0.8437499999999943400, 0.8593749999999950000, 0.8749999999999957800, 1.000000000000000000 ), .UNSPECIFIED. ) ; #3993 = EDGE_CURVE ( 'NONE', #2891, #4118, #466, .T. ) ; #3994 = ADVANCED_FACE ( 'NONE', ( #2681 ), #201, .T. ) ; #3995 = LINE ( 'NONE', #702, #1198 ) ; #3996 = CARTESIAN_POINT ( 'NONE', ( -1.397446874247518100, -2.584984913014852100, -11.19785786810355100 ) ) ; #3997 = CARTESIAN_POINT ( 'NONE', ( 4.000000000000000000, 4.299999999999919900, -11.80000000000000100 ) ) ; #3998 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #3999 = VECTOR ( 'NONE', #6318, 1000.000000000000000 ) ; #4000 = ORIENTED_EDGE ( 'NONE', *, *, #5003, .F. ) ; #4001 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; #4002 = CC_DESIGN_PERSON_AND_ORGANIZATION_ASSIGNMENT ( #5589, #4666, ( #4474 ) ) ; #4003 = CARTESIAN_POINT ( 'NONE', ( -1.777709254452030100, 13.22368666611149900, 14.93199160091300100 ) ) ; #4004 = PLANE ( 'NONE', #3724 ) ; #4005 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #4006 = CIRCLE ( 'NONE', #5104, 0.2500000000000002200 ) ; #4007 = ORIENTED_EDGE ( 'NONE', *, *, #1541, .F. ) ; #4008 = EDGE_CURVE ( 'NONE', #2187, #1172, #890, .T. ) ; #4009 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000090800, -8.099999999999498700, -7.800000000000022900 ) ) ; #4010 = AXIS2_PLACEMENT_3D ( 'NONE', #4849, #3307, #2326 ) ; #4011 = LINE ( 'NONE', #963, #1213 ) ; #4012 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; #4013 = VECTOR ( 'NONE', #4807, 1000.000000000000000 ) ; #4014 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #4015 = ORIENTED_EDGE ( 'NONE', *, *, #176, .F. ) ; #4016 = AXIS2_PLACEMENT_3D ( 'NONE', #1709, #4333, #2757 ) ; #4017 = CARTESIAN_POINT ( 'NONE', ( -2.749999999999090500, -4.111624435740881500, -1.748839756839469400 ) ) ; #4018 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; #4019 = VECTOR ( 'NONE', #4176, 1000.000000000000000 ) ; #4020 = ORIENTED_EDGE ( 'NONE', *, *, #1401, .T. ) ; #4021 = CARTESIAN_POINT ( 'NONE', ( -1.568970896155440900, -2.597545611314866500, -11.07835080667755700 ) ) ; #4022 = ORIENTED_EDGE ( 'NONE', *, *, #2194, .F. ) ; #4023 = CARTESIAN_POINT ( 'NONE', ( -2.749999999999097600, -4.208418032298745900, -1.955662937369615500 ) ) ; #4024 = EDGE_CURVE ( 'NONE', #3118, #2990, #3915, .T. ) ; #4025 = VERTEX_POINT ( 'NONE', #4431 ) ; #4026 = EDGE_CURVE ( 'NONE', #944, #6783, #4543, .T. ) ; #4027 = CARTESIAN_POINT ( 'NONE', ( 4.000000000000000000, 3.799999999999910100, -0.4999999999999990600 ) ) ; #4028 = ORIENTED_EDGE ( 'NONE', *, *, #1706, .F. ) ; #4029 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; #4030 = CARTESIAN_POINT ( 'NONE', ( 2.551282793227117400, -0.8313547249890744800, -9.900000000000000400 ) ) ; #4031 = ORIENTED_EDGE ( 'NONE', *, *, #2963, .T. ) ; #4032 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -1.199999999471401700, -13.94999999810409000 ) ) ; #4033 = CARTESIAN_POINT ( 'NONE', ( 1.249999999999969800, -9.558578643762039900, -7.658578643762727900 ) ) ; #4034 = EDGE_CURVE ( 'NONE', #1673, #4446, #4406, .T. ) ; #4035 = CARTESIAN_POINT ( 'NONE', ( 18.18468237128200100, -8.829289321879981500, -8.246446609406350000 ) ) ; #4036 = CARTESIAN_POINT ( 'NONE', ( -4.500000000000000900, 3.799999999999910100, -0.4999999999999985000 ) ) ; #4037 = ORIENTED_EDGE ( 'NONE', *, *, #2498, .T. ) ; #4038 = AXIS2_PLACEMENT_3D ( 'NONE', #5221, #2079, #5737 ) ; #4039 = CARTESIAN_POINT ( 'NONE', ( 1.075704258665263400, -5.209798377160858300, -4.721805525395510900 ) ) ; #4040 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; #4041 = CARTESIAN_POINT ( 'NONE', ( -1.279896855207083700, -2.582763714275671400, -11.21899116183752400 ) ) ; #4042 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, ( #5169, #1482, #2030, #2531, #6751, #461 ), .UNSPECIFIED., .F., .F., ( 4, 2, 4 ), ( 0.0000000000000000000, 0.5000000000000000000, 1.000000000000000000 ), .UNSPECIFIED. ) ; #4043 = ORIENTED_EDGE ( 'NONE', *, *, #6744, .T. ) ; #4044 = VERTEX_POINT ( 'NONE', #789 ) ; #4045 = EDGE_CURVE ( 'NONE', #4132, #4287, #306, .T. ) ; #4046 = EDGE_CURVE ( 'NONE', #3483, #2066, #4315, .T. ) ; #4047 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; #4048 = CARTESIAN_POINT ( 'NONE', ( -4.000000000000000000, -6.000000000000060400, -0.4999999999999987200 ) ) ; #4049 = AXIS2_PLACEMENT_3D ( 'NONE', #3792, #2823, #3746 ) ; #4050 = VECTOR ( 'NONE', #3285, 1000.000000000000000 ) ; #4051 = ORIENTED_EDGE ( 'NONE', *, *, #2410, .F. ) ; #4052 = LINE ( 'NONE', #3931, #5781 ) ; #4053 = EDGE_LOOP ( 'NONE', ( #6765, #3328, #1521, #904, #5949, #690, #4478, #5934, #5987, #5567, #1005, #1588, #3460, #1880 ) ) ; #4054 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #4055 = ORIENTED_EDGE ( 'NONE', *, *, #4200, .F. ) ; #4056 = ADVANCED_FACE ( 'NONE', ( #2855 ), #4519, .T. ) ; #4057 = EDGE_LOOP ( 'NONE', ( #1272, #5559, #6288, #4710, #3523 ) ) ; #4058 = LINE ( 'NONE', #5926, #3879 ) ; #4059 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -11.80000000000000100 ) ) ; #4060 = CARTESIAN_POINT ( 'NONE', ( 2.650015325608715800, 1.317574454024765800E-008, -9.900000000000000400 ) ) ; #4061 = VERTEX_POINT ( 'NONE', #5504 ) ; #4062 = FACE_OUTER_BOUND ( 'NONE', #517, .T. ) ; #4063 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #4064 = ORIENTED_EDGE ( 'NONE', *, *, #24, .T. ) ; #4065 = VERTEX_POINT ( 'NONE', #3400 ) ; #4066 = CYLINDRICAL_SURFACE ( 'NONE', #1369, 2.299999999999999800 ) ; #4067 = ORIENTED_EDGE ( 'NONE', *, *, #3850, .F. ) ; #4068 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000091300, -9.699999999999819900, -7.800000000000070000 ) ) ; #4069 = ORIENTED_EDGE ( 'NONE', *, *, #2651, .T. ) ; #4070 = VECTOR ( 'NONE', #4137, 1000.000000000000000 ) ; #4071 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; #4072 = EDGE_LOOP ( 'NONE', ( #1571, #1014, #2541, #5465 ) ) ; #4073 = VECTOR ( 'NONE', #2386, 1000.000000000000000 ) ; #4074 = CARTESIAN_POINT ( 'NONE', ( 3.900000000000130000, -6.049999999999999800, -14.40000000000000200 ) ) ; #4075 = CARTESIAN_POINT ( 'NONE', ( 1.200000000000090100, -1.962141687034070000, -13.77999999999999900 ) ) ; #4076 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; #4077 = LINE ( 'NONE', #5657, #3903 ) ; #4078 = EDGE_CURVE ( 'NONE', #2784, #3147, #2928, .T. ) ; #4079 = FACE_OUTER_BOUND ( 'NONE', #2673, .T. ) ; #4080 = EDGE_LOOP ( 'NONE', ( #5226, #6447, #3568, #2723 ) ) ; #4081 = PLANE ( 'NONE', #3159 ) ; #4082 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #4083 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; #4084 = CARTESIAN_POINT ( 'NONE', ( -3.725592231765940000, 4.299999999999919900, -2.700000000000000200 ) ) ; #4085 = VECTOR ( 'NONE', #6780, 1000.000000000000000 ) ; #4086 = EDGE_LOOP ( 'NONE', ( #3143, #6015, #5428, #2593 ) ) ; #4087 = EDGE_CURVE ( 'NONE', #2042, #6604, #886, .T. ) ; #4088 = PLANE ( 'NONE', #3131 ) ; #4089 = EDGE_CURVE ( 'NONE', #2239, #3973, #1793, .T. ) ; #4090 = ADVANCED_FACE ( 'NONE', ( #4483 ), #3421, .T. ) ; #4091 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #4092 = VECTOR ( 'NONE', #5560, 1000.000000000000100 ) ; #4093 = CIRCLE ( 'NONE', #4049, 1.575000000000000000 ) ; #4094 = EDGE_LOOP ( 'NONE', ( #989, #6117, #980, #1889 ) ) ; #4095 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; #4096 = CARTESIAN_POINT ( 'NONE', ( -0.1309623325766021700, -5.299999999999279500, -6.099930602357624700 ) ) ; #4097 = CARTESIAN_POINT ( 'NONE', ( -1.992027483134156700, -2.146699123532213300, -5.521499184909321100 ) ) ; #4098 = LINE ( 'NONE', #3323, #6830 ) ; #4099 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #4100 = FACE_OUTER_BOUND ( 'NONE', #5329, .T. ) ; #4101 = DATE_AND_TIME ( #5331, #5839 ) ; #4102 = CARTESIAN_POINT ( 'NONE', ( -1.499999999999830100, -6.350000000000021000, -13.44999999999999900 ) ) ; #4103 = CARTESIAN_POINT ( 'NONE', ( -0.6192374509270509600, 2.578205349620104900, -9.900000000000002100 ) ) ; #4104 = CYLINDRICAL_SURFACE ( 'NONE', #2250, 0.5000000000000004400 ) ; #4105 = DIRECTION ( 'NONE', ( 1.000000000000000000, 1.776356839400250500E-015, 0.0000000000000000000 ) ) ; #4106 = VERTEX_POINT ( 'NONE', #310 ) ; #4107 = CARTESIAN_POINT ( 'NONE', ( 1.249999999999969800, -8.927371610872191000, -8.275978557906190900 ) ) ; #4108 = ORIENTED_EDGE ( 'NONE', *, *, #469, .F. ) ; #4109 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.8660254037844553600, -0.4999999999999711300 ) ) ; #4110 = EDGE_CURVE ( 'NONE', #5825, #3780, #878, .T. ) ; #4111 = CARTESIAN_POINT ( 'NONE', ( -1.550000000000830000, -6.350000000000020100, -13.40000000000000000 ) ) ; #4112 = CARTESIAN_POINT ( 'NONE', ( 0.9999999999999998900, -1.999999999999998000, 1.899999999999949500 ) ) ; #4113 = ORIENTED_EDGE ( 'NONE', *, *, #3176, .F. ) ; #4114 = PLANE ( 'NONE', #258 ) ; #4115 = CARTESIAN_POINT ( 'NONE', ( -3.032656903150972900, -0.9882141109573395800, -9.400000000000000400 ) ) ; #4116 = ORIENTED_EDGE ( 'NONE', *, *, #5768, .T. ) ; #4117 = ORIENTED_EDGE ( 'NONE', *, *, #499, .F. ) ; #4118 = VERTEX_POINT ( 'NONE', #6682 ) ; #4119 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #4120 = CARTESIAN_POINT ( 'NONE', ( 2.750000000000909500, -4.700000000000730300, -2.300000000000900000 ) ) ; #4121 = ORIENTED_EDGE ( 'NONE', *, *, #1842, .T. ) ; #4122 = EDGE_CURVE ( 'NONE', #3118, #6557, #4158, .T. ) ; #4123 = CARTESIAN_POINT ( 'NONE', ( 4.500000000000060400, -2.559999999999050100, -2.779157999888000100 ) ) ; #4124 = CARTESIAN_POINT ( 'NONE', ( 4.000000000000000000, 3.799999999999910100, -11.80000000000000100 ) ) ; #4125 = CYLINDRICAL_SURFACE ( 'NONE', #6485, 0.7000000000000000700 ) ; #4126 = AXIS2_PLACEMENT_3D ( 'NONE', #55, #2223, #2180 ) ; #4127 = VERTEX_POINT ( 'NONE', #6009 ) ; #4128 = LINE ( 'NONE', #6378, #2007 ) ; #4129 = ORIENTED_EDGE ( 'NONE', *, *, #3219, .F. ) ; #4130 = CARTESIAN_POINT ( 'NONE', ( -4.500000000000060400, 0.0000000000000000000, -3.500000000000000000 ) ) ; #4131 = VECTOR ( 'NONE', #6311, 1000.000000000000000 ) ; #4132 = VERTEX_POINT ( 'NONE', #446 ) ; #4133 = FACE_OUTER_BOUND ( 'NONE', #778, .T. ) ; #4134 = EDGE_CURVE ( 'NONE', #2778, #944, #6149, .T. ) ; #4135 = PLANE ( 'NONE', #4136 ) ; #4136 = AXIS2_PLACEMENT_3D ( 'NONE', #5727, #3600, #1058 ) ; #4137 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; #4138 = ORIENTED_EDGE ( 'NONE', *, *, #5754, .T. ) ; #4139 = FACE_BOUND ( 'NONE', #4284, .T. ) ; #4140 = DATE_TIME_ROLE ( 'classification_date' ) ; #4141 = CARTESIAN_POINT ( 'NONE', ( -3.150000000434956900, -0.5010738653973366700, -9.400000000000000400 ) ) ; #4142 = ORIENTED_EDGE ( 'NONE', *, *, #4645, .F. ) ; #4143 = EDGE_LOOP ( 'NONE', ( #2189, #610, #2978, #5552, #4000, #4412, #1935, #3348, #2495, #5700, #4484, #5662, #3621, #5459, #4037, #844 ) ) ; #4144 = CARTESIAN_POINT ( 'NONE', ( -4.000000000000000900, -6.292893218813514300, 7.929538643524980300E-016 ) ) ; #4145 = LINE ( 'NONE', #2758, #2584 ) ; #4146 = ORIENTED_EDGE ( 'NONE', *, *, #3226, .T. ) ; #4147 = CARTESIAN_POINT ( 'NONE', ( -4.000000000000000000, 4.299999999999919900, -11.80000000000000100 ) ) ; #4148 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #4149 = LINE ( 'NONE', #6735, #869 ) ; #4150 = ORIENTED_EDGE ( 'NONE', *, *, #6380, .F. ) ; #4151 = CARTESIAN_POINT ( 'NONE', ( -0.9166666666630164400, -4.104541919161928100, -1.748062269079890400 ) ) ; #4152 = PLANE ( 'NONE', #2771 ) ; #4153 = EDGE_CURVE ( 'NONE', #3295, #2891, #790, .T. ) ; #4154 = VECTOR ( 'NONE', #1773, 1000.000000000000000 ) ; #4155 = ORIENTED_EDGE ( 'NONE', *, *, #6663, .F. ) ; #4156 = CARTESIAN_POINT ( 'NONE', ( -2.637889295228168500, -1.199999999999980000, -9.854007882616821600 ) ) ; #4157 = CARTESIAN_POINT ( 'NONE', ( 3.900000000000130000, -3.350000000000020100, -13.44999999999999900 ) ) ; #4158 = CIRCLE ( 'NONE', #3428, 0.5000000000000000000 ) ; #4159 = ORIENTED_EDGE ( 'NONE', *, *, #5590, .T. ) ; #4160 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; #4161 = ORIENTED_EDGE ( 'NONE', *, *, #665, .F. ) ; #4162 = EDGE_CURVE ( 'NONE', #6783, #3337, #2352, .T. ) ; #4163 = CARTESIAN_POINT ( 'NONE', ( -4.000000000000000000, -6.500000000000060400, -0.4999999999999995600 ) ) ; #4164 = VECTOR ( 'NONE', #2408, 1000.000000000000000 ) ; #4165 = EDGE_LOOP ( 'NONE', ( #1447, #933, #842, #6699 ) ) ; #4166 = EDGE_CURVE ( 'NONE', #6099, #2149, #177, .T. ) ; #4167 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #4168 = CARTESIAN_POINT ( 'NONE', ( -3.899999999999789900, -3.350000000000020100, -13.44999999999999900 ) ) ; #4169 = CARTESIAN_POINT ( 'NONE', ( 0.4230013043507853100, -11.22642148007352100, -7.599999999999869100 ) ) ; #4170 = VECTOR ( 'NONE', #4793, 1000.000000000000000 ) ; #4171 = FACE_OUTER_BOUND ( 'NONE', #4053, .T. ) ; #4172 = EDGE_CURVE ( 'NONE', #1243, #1167, #3908, .T. ) ; #4173 = CARTESIAN_POINT ( 'NONE', ( 18.18468237128200100, -4.700000000000730300, -2.300000000000900000 ) ) ; #4174 = ORIENTED_EDGE ( 'NONE', *, *, #6574, .F. ) ; #4175 = EDGE_CURVE ( 'NONE', #592, #2285, #3161, .T. ) ; #4176 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #4177 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; #4178 = AXIS2_PLACEMENT_3D ( 'NONE', #2501, #5094, #3028 ) ; #4179 = VECTOR ( 'NONE', #3524, 1000.000000000000000 ) ; #4180 = CARTESIAN_POINT ( 'NONE', ( -1.479999999999979600, -8.499999999999920100, -13.27999999999999900 ) ) ; #4181 = CARTESIAN_POINT ( 'NONE', ( 4.499999999999950300, 3.799999999999910100, -11.80000000000000100 ) ) ; #4182 = CARTESIAN_POINT ( 'NONE', ( 4.292893218813453000, -6.500000000000059500, -0.2071067811865473800 ) ) ; #4183 = COORDINATED_UNIVERSAL_TIME_OFFSET ( 8, 0, .BEHIND. ) ; #4184 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; #4185 = ORIENTED_EDGE ( 'NONE', *, *, #6155, .T. ) ; #4186 = CARTESIAN_POINT ( 'NONE', ( -4.292893218813453000, -6.500000000000061300, -0.2071067811865476000 ) ) ; #4187 = EDGE_LOOP ( 'NONE', ( #6017, #4933, #4734, #4493 ) ) ; #4188 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; #4189 = CARTESIAN_POINT ( 'NONE', ( 0.07930211262233705100, -11.30003365094930800, -7.599999999999870900 ) ) ; #4190 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; #4191 = PLANE ( 'NONE', #5823 ) ; #4192 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; #4193 = CARTESIAN_POINT ( 'NONE', ( -2.912473175842152300, -1.199999999999971100, -9.400000000000000400 ) ) ; #4194 = EDGE_CURVE ( 'NONE', #6635, #5951, #6391, .T. ) ; #4195 = CARTESIAN_POINT ( 'NONE', ( 4.500000000000000000, -6.292893218813512500, -0.4999999999999996100 ) ) ; #4196 = VERTEX_POINT ( 'NONE', #407 ) ; #4197 = LINE ( 'NONE', #6523, #2814 ) ; #4198 = ADVANCED_FACE ( 'NONE', ( #388 ), #6733, .T. ) ; #4199 = VERTEX_POINT ( 'NONE', #945 ) ; #4200 = EDGE_CURVE ( 'NONE', #3056, #6588, #2445, .T. ) ; #4201 = CARTESIAN_POINT ( 'NONE', ( -4.500000000000060400, -2.599999999999050200, -11.80000000000000100 ) ) ; #4202 = ORIENTED_EDGE ( 'NONE', *, *, #2708, .T. ) ; #4203 = VECTOR ( 'NONE', #1070, 1000.000000000000000 ) ; #4204 = EDGE_LOOP ( 'NONE', ( #3234, #4470, #5592, #3081 ) ) ; #4205 = CIRCLE ( 'NONE', #2590, 0.5000000000000004400 ) ; #4206 = ORIENTED_EDGE ( 'NONE', *, *, #6193, .T. ) ; #4207 = EDGE_CURVE ( 'NONE', #4441, #3782, #5062, .T. ) ; #4208 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -1.100000000000100000, -11.80000000000000100 ) ) ; #4209 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; #4210 = ORIENTED_EDGE ( 'NONE', *, *, #3553, .T. ) ; #4211 = ORIENTED_EDGE ( 'NONE', *, *, #6825, .T. ) ; #4212 = FACE_OUTER_BOUND ( 'NONE', #3062, .T. ) ; #4213 = VERTEX_POINT ( 'NONE', #921 ) ; #4214 = CARTESIAN_POINT ( 'NONE', ( 3.200000000000979800, -1.199999999999980000, -5.299999999999999800 ) ) ; #4215 = ORIENTED_EDGE ( 'NONE', *, *, #2033, .F. ) ; #4216 = PLANE ( 'NONE', #5224 ) ; #4217 = FACE_OUTER_BOUND ( 'NONE', #6778, .T. ) ; #4218 = VERTEX_POINT ( 'NONE', #4592 ) ; #4219 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; #4220 = ORIENTED_EDGE ( 'NONE', *, *, #4457, .F. ) ; #4221 = ORIENTED_EDGE ( 'NONE', *, *, #308, .F. ) ; #4222 = EDGE_LOOP ( 'NONE', ( #5944, #186, #5016, #2670 ) ) ; #4223 = CARTESIAN_POINT ( 'NONE', ( 18.18468237128200100, -8.687867965643759400, -8.387867965643870600 ) ) ; #4224 = LINE ( 'NONE', #1994, #5473 ) ; #4225 = ORIENTED_EDGE ( 'NONE', *, *, #3426, .F. ) ; #4226 = LINE ( 'NONE', #641, #6236 ) ; #4227 = CYLINDRICAL_SURFACE ( 'NONE', #5051, 1.000000000000000000 ) ; #4228 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; #4229 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; #4230 = VECTOR ( 'NONE', #4238, 1000.000000000000000 ) ; #4231 = CARTESIAN_POINT ( 'NONE', ( 0.07589082440355603100, -2.707637758017457300, -10.03089399940033600 ) ) ; #4232 = ORIENTED_EDGE ( 'NONE', *, *, #3912, .F. ) ; #4233 = ADVANCED_FACE ( 'NONE', ( #3655 ), #221, .T. ) ; #4234 = EDGE_CURVE ( 'NONE', #3984, #5778, #4733, .T. ) ; #4235 = CARTESIAN_POINT ( 'NONE', ( 8.847089727481720200E-013, -5.500000000000009800, -5.600000000000860300 ) ) ; #4236 = VECTOR ( 'NONE', #1765, 1000.000000000000000 ) ; #4237 = ORIENTED_EDGE ( 'NONE', *, *, #2965, .T. ) ; #4238 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; #4239 = EDGE_LOOP ( 'NONE', ( #3419, #4043, #3038, #3626 ) ) ; #4240 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #4241 = VECTOR ( 'NONE', #6566, 1000.000000000000000 ) ; #4242 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #4243 = FACE_OUTER_BOUND ( 'NONE', #6115, .T. ) ; #4244 = ORIENTED_EDGE ( 'NONE', *, *, #6754, .F. ) ; #4245 = EDGE_CURVE ( 'NONE', #2358, #426, #5649, .T. ) ; #4246 = AXIS2_PLACEMENT_3D ( 'NONE', #5497, #1849, #6593 ) ; #4247 = VECTOR ( 'NONE', #5745, 1000.000000000000000 ) ; #4248 = CARTESIAN_POINT ( 'NONE', ( -0.06705006636455447500, -2.802242928591945700, -9.981875258550999800 ) ) ; #4249 = LINE ( 'NONE', #5928, #4092 ) ; #4250 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; #4251 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; #4252 = AXIS2_PLACEMENT_3D ( 'NONE', #4765, #4251, #3191 ) ; #4253 = LINE ( 'NONE', #94, #6258 ) ; #4254 = EDGE_CURVE ( 'NONE', #3207, #4848, #4899, .T. ) ; #4255 = ADVANCED_FACE ( 'NONE', ( #2849 ), #4135, .T. ) ; #4256 = ORIENTED_EDGE ( 'NONE', *, *, #1534, .F. ) ; #4257 = AXIS2_PLACEMENT_3D ( 'NONE', #2435, #6136, #6718 ) ; #4258 = CARTESIAN_POINT ( 'NONE', ( 18.18468237128200100, -3.137993503012869800, -3.603632002693439900 ) ) ; #4259 = CARTESIAN_POINT ( 'NONE', ( -1.000000000000000000, 1.224646799147353200E-016, -5.625000000000020400 ) ) ; #4260 = VERTEX_POINT ( 'NONE', #6769 ) ; #4261 = ADVANCED_FACE ( 'NONE', ( #1282 ), #4755, .F. ) ; #4262 = CARTESIAN_POINT ( 'NONE', ( 1.550000000000050200, -6.350000000000020100, -14.40000000000000200 ) ) ; #4263 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, ( #857, #6664, #3515, #5054, #1918, #3331 ), .UNSPECIFIED., .F., .F., ( 4, 2, 4 ), ( 0.0000000000000000000, 0.5000000000000000000, 1.000000000000000000 ), .UNSPECIFIED. ) ; #4264 = ORIENTED_EDGE ( 'NONE', *, *, #4363, .T. ) ; #4265 = DIRECTION ( 'NONE', ( -1.000000000000000000, 1.606225440719266700E-015, 0.0000000000000000000 ) ) ; #4266 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #4267 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; #4268 = ORIENTED_EDGE ( 'NONE', *, *, #5, .T. ) ; #4269 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000089900, -8.829289321880420300, -8.246446609405909500 ) ) ; #4270 = CARTESIAN_POINT ( 'NONE', ( 1.110223024625159900E-013, -3.350000000000020100, -13.40000000000000000 ) ) ; #4271 = EDGE_LOOP ( 'NONE', ( #4007, #4264, #4857, #6369 ) ) ; #4272 = LINE ( 'NONE', #4269, #759 ) ; #4273 = ADVANCED_FACE ( 'NONE', ( #5814, #1375 ), #5749, .F. ) ; #4274 = CARTESIAN_POINT ( 'NONE', ( 2.912473175842123800, -1.200000000000038600, 0.0000000000000000000 ) ) ; #4275 = VERTEX_POINT ( 'NONE', #3073 ) ; #4276 = LINE ( 'NONE', #2253, #3461 ) ; #4277 = ORIENTED_EDGE ( 'NONE', *, *, #2097, .T. ) ; #4278 = CARTESIAN_POINT ( 'NONE', ( -2.650039738463540100, -0.1072076052648073500, -9.899999999999998600 ) ) ; #4279 = EDGE_CURVE ( 'NONE', #1946, #3620, #6812, .T. ) ; #4280 = PLANE ( 'NONE', #1049 ) ; #4281 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; #4282 = ORIENTED_EDGE ( 'NONE', *, *, #3836, .F. ) ; #4283 = FACE_OUTER_BOUND ( 'NONE', #4900, .T. ) ; #4284 = EDGE_LOOP ( 'NONE', ( #6560, #2587 ) ) ; #4285 = CYLINDRICAL_SURFACE ( 'NONE', #5182, 1.575000000000000000 ) ; #4286 = EDGE_CURVE ( 'NONE', #3955, #4466, #2275, .T. ) ; #4287 = VERTEX_POINT ( 'NONE', #990 ) ; #4288 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #4289 = ORIENTED_EDGE ( 'NONE', *, *, #545, .F. ) ; #4290 = CARTESIAN_POINT ( 'NONE', ( -1.516047344179588100E-015, -2.699783421336156200, -10.03070813642793600 ) ) ; #4291 = EDGE_CURVE ( 'NONE', #404, #4974, #5401, .T. ) ; #4292 = EDGE_LOOP ( 'NONE', ( #2402, #504, #2725, #6466 ) ) ; #4293 = EDGE_CURVE ( 'NONE', #6159, #2900, #715, .T. ) ; #4294 = CARTESIAN_POINT ( 'NONE', ( 1.549999999999830000, -5.500000000000008900, -11.79999999999999900 ) ) ; #4295 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #4296 = ORIENTED_EDGE ( 'NONE', *, *, #4175, .T. ) ; #4297 = ORIENTED_EDGE ( 'NONE', *, *, #5591, .F. ) ; #4298 = ADVANCED_FACE ( 'NONE', ( #1621 ), #4568, .T. ) ; #4299 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; #4300 = CIRCLE ( 'NONE', #5263, 0.5000000000000000000 ) ; #4301 = ORIENTED_EDGE ( 'NONE', *, *, #5173, .F. ) ; #4302 = CARTESIAN_POINT ( 'NONE', ( 3.900000000000130000, -5.350000000000021000, -11.80000000000000100 ) ) ; #4303 = ORIENTED_EDGE ( 'NONE', *, *, #2384, .F. ) ; #4304 = VECTOR ( 'NONE', #6668, 1000.000000000000000 ) ; #4305 = CARTESIAN_POINT ( 'NONE', ( 2.299999999999859900, -2.000000000000110100, -9.900000000000000400 ) ) ; #4306 = ORIENTED_EDGE ( 'NONE', *, *, #5491, .F. ) ; #4307 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; #4308 = LINE ( 'NONE', #6487, #4154 ) ; #4309 = ORIENTED_EDGE ( 'NONE', *, *, #5207, .T. ) ; #4310 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; #4311 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #4312 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, ( #447, #2555, #490, #6338, #2067, #6771, #6251, #991 ), .UNSPECIFIED., .F., .F., ( 4, 2, 2, 4 ), ( 0.6208360417324972900, 0.8104180208662479200, 0.9052090104331239600, 1.000000000000000000 ), .UNSPECIFIED. ) ; #4313 = ADVANCED_FACE ( 'NONE', ( #6647 ), #536, .T. ) ; #4314 = CARTESIAN_POINT ( 'NONE', ( 1.207031902993951800, -10.37946201445057600, -7.800000000000070900 ) ) ; #4315 = LINE ( 'NONE', #5569, #3344 ) ; #4316 = EDGE_LOOP ( 'NONE', ( #6248, #1844, #1914, #1153 ) ) ; #4317 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -13.94999999999999900 ) ) ; #4318 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; #4319 = ORIENTED_EDGE ( 'NONE', *, *, #4726, .F. ) ; #4320 = VECTOR ( 'NONE', #3318, 1000.000000000000000 ) ; #4321 = ORIENTED_EDGE ( 'NONE', *, *, #2148, .F. ) ; #4322 = EDGE_LOOP ( 'NONE', ( #2159, #4116, #6134, #4981 ) ) ; #4323 = EDGE_CURVE ( 'NONE', #5274, #4127, #387, .T. ) ; #4324 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, ( #1632, #4231, #1050, #4767, #5290, #3740 ), .UNSPECIFIED., .F., .F., ( 4, 2, 4 ), ( 0.7029142992754646700, 0.7500828946385060800, 0.7972514900015474900 ), .UNSPECIFIED. ) ; #4325 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; #4326 = LINE ( 'NONE', #5862, #6659 ) ; #4327 = EDGE_CURVE ( 'NONE', #1139, #1498, #2602, .T. ) ; #4328 = CYLINDRICAL_SURFACE ( 'NONE', #1273, 0.5000000000000000000 ) ; #4329 = VERTEX_POINT ( 'NONE', #1529 ) ; #4330 = CARTESIAN_POINT ( 'NONE', ( 1.075528555105620000E-013, -5.551115123125780200E-014, -13.77999999999999900 ) ) ; #4331 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; #4332 = ADVANCED_FACE ( 'NONE', ( #1458 ), #5982, .T. ) ; #4333 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #4334 = VECTOR ( 'NONE', #5493, 1000.000000000000000 ) ; #4335 = EDGE_CURVE ( 'NONE', #5483, #5713, #5225, .T. ) ; #4336 = VERTEX_POINT ( 'NONE', #2641 ) ; #4337 = CARTESIAN_POINT ( 'NONE', ( -2.299999999999892400, -5.522948246745391200E-014, -13.42000000000000000 ) ) ; #4338 = AXIS2_PLACEMENT_3D ( 'NONE', #6519, #4403, #4930 ) ; #4339 = VECTOR ( 'NONE', #2924, 1000.000000000000000 ) ; #4340 = CARTESIAN_POINT ( 'NONE', ( 18.18468237128200100, -4.710787967690877500, -1.500072740962231900 ) ) ; #4341 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #4342 = ORIENTED_EDGE ( 'NONE', *, *, #2852, .T. ) ; #4343 = EDGE_CURVE ( 'NONE', #4800, #5274, #3321, .T. ) ; #4344 = AXIS2_PLACEMENT_3D ( 'NONE', #4804, #6382, #4265 ) ; #4345 = ORIENTED_EDGE ( 'NONE', *, *, #1206, .T. ) ; #4346 = ADVANCED_FACE ( 'NONE', ( #4079 ), #5305, .T. ) ; #4347 = CARTESIAN_POINT ( 'NONE', ( 18.18468237128200100, -2.068363019588650000, -4.883502816590430000 ) ) ; #4348 = CARTESIAN_POINT ( 'NONE', ( 0.4769906117180040500, -3.044195530146632100, -10.58188272637718600 ) ) ; #4349 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; #4350 = AXIS2_PLACEMENT_3D ( 'NONE', #226, #769, #794 ) ; #4351 = CARTESIAN_POINT ( 'NONE', ( 1.900000000000900100, -5.299999999999280400, -11.90000000000010000 ) ) ; #4352 = CARTESIAN_POINT ( 'NONE', ( -1.000000000000000000, -1.999999999999998700, 1.899999999999949500 ) ) ; #4353 = CARTESIAN_POINT ( 'NONE', ( 1.279896855207897300, -2.582763714275671400, -11.21899116183752400 ) ) ; #4354 = CARTESIAN_POINT ( 'NONE', ( -4.500000000000060400, 3.799999999999910600, -2.700000000000001100 ) ) ; #4355 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; #4356 = CARTESIAN_POINT ( 'NONE', ( 1.249999999999969800, -5.699999999999819900, -7.799999999999481100 ) ) ; #4357 = ORIENTED_EDGE ( 'NONE', *, *, #821, .T. ) ; #4358 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #4359 = LINE ( 'NONE', #5377, #269 ) ; #4360 = ORIENTED_EDGE ( 'NONE', *, *, #3089, .T. ) ; #4361 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; #4362 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #4363 = EDGE_CURVE ( 'NONE', #2645, #6443, #548, .T. ) ; #4364 = EDGE_CURVE ( 'NONE', #6025, #2237, #6730, .T. ) ; #4365 = ORIENTED_EDGE ( 'NONE', *, *, #3786, .T. ) ; #4366 = CYLINDRICAL_SURFACE ( 'NONE', #4904, 0.1999999999999996500 ) ; #4367 = ORIENTED_EDGE ( 'NONE', *, *, #3628, .F. ) ; #4368 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000091300, -8.687867965643759400, -8.387867965643870600 ) ) ; #4369 = LINE ( 'NONE', #6129, #2982 ) ; #4370 = ORIENTED_EDGE ( 'NONE', *, *, #2699, .F. ) ; #4371 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000091300, -9.699999999998910400, -7.599999999999870000 ) ) ; #4372 = CARTESIAN_POINT ( 'NONE', ( -2.086870168755020400, 1.642169909400280200, -9.899999999999998600 ) ) ; #4373 = ORIENTED_EDGE ( 'NONE', *, *, #4089, .F. ) ; #4374 = CARTESIAN_POINT ( 'NONE', ( -2.749999999999090100, -5.500000000000009800, -1.500072740962020000 ) ) ; #4375 = CARTESIAN_POINT ( 'NONE', ( -3.549999999999000200, -5.500000000000009800, -11.90000000000010000 ) ) ; #4376 = VECTOR ( 'NONE', #6681, 1000.000000000000000 ) ; #4377 = EDGE_LOOP ( 'NONE', ( #4367, #5168, #2316 ) ) ; #4378 = EDGE_CURVE ( 'NONE', #3928, #4610, #2521, .T. ) ; #4379 = ORIENTED_EDGE ( 'NONE', *, *, #5310, .F. ) ; #4380 = EDGE_LOOP ( 'NONE', ( #3320, #165, #3587, #3562 ) ) ; #4381 = FACE_OUTER_BOUND ( 'NONE', #2822, .T. ) ; #4382 = ORIENTED_EDGE ( 'NONE', *, *, #4286, .T. ) ; #4383 = VERTEX_POINT ( 'NONE', #5846 ) ; #4384 = AXIS2_PLACEMENT_3D ( 'NONE', #4374, #1803, #5470 ) ; #4385 = ADVANCED_FACE ( 'NONE', ( #1200 ), #5911, .T. ) ; #4386 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #4387 = VERTEX_POINT ( 'NONE', #3218 ) ; #4388 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #4389 = MANIFOLD_SOLID_BREP ( 'Imported4', #460 ) ; #4390 = EDGE_CURVE ( 'NONE', #6768, #1327, #956, .T. ) ; #4391 = LINE ( 'NONE', #1435, #2436 ) ; #4392 = CARTESIAN_POINT ( 'NONE', ( -3.899999999999789900, -3.350000000000020100, -13.40000000000000000 ) ) ; #4393 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; #4394 = VERTEX_POINT ( 'NONE', #5886 ) ; #4395 = FACE_OUTER_BOUND ( 'NONE', #5370, .T. ) ; #4396 = CARTESIAN_POINT ( 'NONE', ( 0.2977340779085070900, -2.637997261278767400, -10.69347906614599200 ) ) ; #4397 = CARTESIAN_POINT ( 'NONE', ( -2.649955175658354800, 0.1757279835150178700, -9.899999999999998600 ) ) ; #4398 = FACE_OUTER_BOUND ( 'NONE', #2733, .T. ) ; #4399 = CARTESIAN_POINT ( 'NONE', ( -3.199999999999980200, -2.150000000000039900, -11.80000000000000100 ) ) ; #4400 = CARTESIAN_POINT ( 'NONE', ( 1.075528555105620000E-013, -5.551115123125780200E-014, -13.77999999999999900 ) ) ; #4401 = VECTOR ( 'NONE', #4219, 1000.000000000000000 ) ; #4402 = ORIENTED_EDGE ( 'NONE', *, *, #4748, .T. ) ; #4403 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; #4404 = CARTESIAN_POINT ( 'NONE', ( 3.550000000000880000, -5.500000000000009800, -6.968314918796940200 ) ) ; #4405 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #4406 = LINE ( 'NONE', #1831, #3085 ) ; #4407 = ORIENTED_EDGE ( 'NONE', *, *, #4783, .F. ) ; #4408 = CARTESIAN_POINT ( 'NONE', ( 0.5389796670259954200, -11.17810262512412900, -7.800000000000070900 ) ) ; #4409 = CARTESIAN_POINT ( 'NONE', ( 3.200000000000979800, -2.150000000000039900, -11.79999999999999900 ) ) ; #4410 = VECTOR ( 'NONE', #684, 1000.000000000000000 ) ; #4411 = LINE ( 'NONE', #4168, #808 ) ; #4412 = ORIENTED_EDGE ( 'NONE', *, *, #6250, .T. ) ; #4413 = CARTESIAN_POINT ( 'NONE', ( 1.249999999999969800, -5.299999999999388800, -7.399999999999113100 ) ) ; #4414 = CARTESIAN_POINT ( 'NONE', ( 0.8743575954329471100, -5.299999999999279500, -4.597539766637941000 ) ) ; #4415 = ADVANCED_FACE ( 'NONE', ( #6568 ), #141, .T. ) ; #4416 = CARTESIAN_POINT ( 'NONE', ( -3.049999999999060600, -5.500000000000009800, -6.100000000000919800 ) ) ; #4417 = CARTESIAN_POINT ( 'NONE', ( -2.739999999999950000, -2.559999999999050100, -9.800000000000000700 ) ) ; #4418 = CIRCLE ( 'NONE', #4957, 3.899999999999999900 ) ; #4419 = CARTESIAN_POINT ( 'NONE', ( -2.632106234019835300, 0.3568147159707406600, -9.899999999999998600 ) ) ; #4420 = EDGE_CURVE ( 'NONE', #1172, #426, #2678, .T. ) ; #4421 = ADVANCED_FACE ( 'NONE', ( #1614 ), #218, .T. ) ; #4422 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #4423 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; #4424 = LINE ( 'NONE', #5892, #982 ) ; #4425 = ORIENTED_EDGE ( 'NONE', *, *, #2963, .F. ) ; #4426 = CARTESIAN_POINT ( 'NONE', ( 2.031622174406817000, -3.273618154450979500, -6.559304680505897000 ) ) ; #4427 = ORGANIZATION ( 'UNSPECIFIED', 'UNSPECIFIED', '' ) ; #4428 = EDGE_CURVE ( 'NONE', #5185, #2204, #3575, .T. ) ; #4429 = EDGE_CURVE ( 'NONE', #6443, #3809, #3080, .T. ) ; #4430 = EDGE_LOOP ( 'NONE', ( #953, #3763, #3703, #2883, #1942, #4237, #4185, #607, #5213, #6282, #1169, #6573 ) ) ; #4431 = CARTESIAN_POINT ( 'NONE', ( 1.549999999999830200, -6.500000000000060400, -11.79999999999999900 ) ) ; #4432 = AXIS2_PLACEMENT_3D ( 'NONE', #2093, #2136, #5211 ) ; #4433 = CARTESIAN_POINT ( 'NONE', ( -1.549999999999049700, -5.500000000000008900, -11.79999999999999900 ) ) ; #4434 = CARTESIAN_POINT ( 'NONE', ( 1.249999999999969800, -5.700000000000730300, -7.599999999999934800 ) ) ; #4435 = ORIENTED_EDGE ( 'NONE', *, *, #1025, .T. ) ; #4436 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; #4437 = CARTESIAN_POINT ( 'NONE', ( 4.500000000000060400, -2.559999999999051000, -2.779157999888000100 ) ) ; #4438 = CARTESIAN_POINT ( 'NONE', ( 2.890671664372313400, -2.430323138703034000, -2.779157999888000100 ) ) ; #4439 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; #4440 = CARTESIAN_POINT ( 'NONE', ( 1.479999999999980700, -8.499999999999868500, -13.23381197846491200 ) ) ; #4441 = VERTEX_POINT ( 'NONE', #5301 ) ; #4442 = CARTESIAN_POINT ( 'NONE', ( -3.232442890089802600, -2.199999999999115100, -9.800000000000000700 ) ) ; #4443 = ORIENTED_EDGE ( 'NONE', *, *, #5261, .T. ) ; #4444 = PLANE ( 'NONE', #3556 ) ; #4445 = FACE_OUTER_BOUND ( 'NONE', #2230, .T. ) ; #4446 = VERTEX_POINT ( 'NONE', #2727 ) ; #4447 = FACE_OUTER_BOUND ( 'NONE', #137, .T. ) ; #4448 = ORIENTED_EDGE ( 'NONE', *, *, #2398, .T. ) ; #4449 = CARTESIAN_POINT ( 'NONE', ( -1.025289990228113600, -10.77439212801153400, -7.800000000000070000 ) ) ; #4450 = ORIENTED_EDGE ( 'NONE', *, *, #6112, .F. ) ; #4451 = VECTOR ( 'NONE', #1428, 1000.000000000000000 ) ; #4452 = CARTESIAN_POINT ( 'NONE', ( 18.18468237128200100, -4.700000000000730300, -2.300000000000900000 ) ) ; #4453 = ORIENTED_EDGE ( 'NONE', *, *, #4087, .T. ) ; #4454 = CYLINDRICAL_SURFACE ( 'NONE', #3542, 1.050000000000000000 ) ; #4455 = CARTESIAN_POINT ( 'NONE', ( 0.9166666666675542500, -4.208264431786403700, -1.955559297685314700 ) ) ; #4456 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -7.228014486420626900E-016, 1.000000000000000000 ) ) ; #4457 = EDGE_CURVE ( 'NONE', #1054, #927, #2031, .T. ) ; #4458 = LINE ( 'NONE', #782, #4551 ) ; #4459 = CARTESIAN_POINT ( 'NONE', ( 0.09051672567883381500, -2.625375500825529100, -10.81356709515210600 ) ) ; #4460 = CARTESIAN_POINT ( 'NONE', ( -1.575000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #4461 = EDGE_LOOP ( 'NONE', ( #2276, #5927, #511, #5655 ) ) ; #4462 = CARTESIAN_POINT ( 'NONE', ( 2.362731470142100500, -1.199999999999980200, -9.900000000000000400 ) ) ; #4463 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; #4464 = VECTOR ( 'NONE', #875, 1000.000000000000000 ) ; #4465 = EDGE_CURVE ( 'NONE', #389, #1771, #4226, .T. ) ; #4466 = VERTEX_POINT ( 'NONE', #4305 ) ; #4467 = CARTESIAN_POINT ( 'NONE', ( 1.777709254451912000, -2.831868875732265900, -10.76226831563481800 ) ) ; #4468 = CARTESIAN_POINT ( 'NONE', ( -9.662512969806920500, -7.460192378863940400, -13.43000000000000000 ) ) ; #4469 = AXIS2_PLACEMENT_3D ( 'NONE', #2444, #5680, #2466 ) ; #4470 = ORIENTED_EDGE ( 'NONE', *, *, #6067, .T. ) ; #4471 = VECTOR ( 'NONE', #73, 1000.000000000000000 ) ; #4472 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; #4473 = VERTEX_POINT ( 'NONE', #2785 ) ; #4474 = SECURITY_CLASSIFICATION ( '', '', #1996 ) ; #4475 = CARTESIAN_POINT ( 'NONE', ( -1.145850069176970200, -10.55000645838523900, -7.800000000000068200 ) ) ; #4476 = CIRCLE ( 'NONE', #6401, 1.500000000000000000 ) ; #4477 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; #4478 = ORIENTED_EDGE ( 'NONE', *, *, #545, .T. ) ; #4479 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, ( #4041, #4566, #3457, #3996, #5634, #4514, #4021, #941, #5588, #1480, #1407, #1913, #3508, #2010, #422 ), .UNSPECIFIED., .F., .F., ( 4, 2, 2, 2, 1, 2, 2, 4 ), ( 0.0000000000000000000, 0.1249999999999997800, 0.2499999999999995600, 0.4999999999999997800, 0.6249999999999998900, 0.6875000000000000000, 0.7500000000000001100, 1.000000000000000000 ), .UNSPECIFIED. ) ; #4480 = EDGE_CURVE ( 'NONE', #6182, #261, #52, .T. ) ; #4481 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; #4482 = CARTESIAN_POINT ( 'NONE', ( -0.9999999999991159300, -5.299999999999279500, -5.100000000001029900 ) ) ; #4483 = FACE_OUTER_BOUND ( 'NONE', #2095, .T. ) ; #4484 = ORIENTED_EDGE ( 'NONE', *, *, #3263, .F. ) ; #4485 = CARTESIAN_POINT ( 'NONE', ( -0.1121088177076749900, -2.706526339254925700, -10.04149831957635200 ) ) ; #4486 = CARTESIAN_POINT ( 'NONE', ( 2.164999999999907700, -2.970259389424511300, -3.494704195690555300 ) ) ; #4487 = AXIS2_PLACEMENT_3D ( 'NONE', #4375, #2848, #1783 ) ; #4488 = CARTESIAN_POINT ( 'NONE', ( -4.000000000000000000, 4.299999999999919900, -11.80000000000000100 ) ) ; #4489 = CARTESIAN_POINT ( 'NONE', ( -4.500000000000060400, -6.000000000000060400, -11.80000000000000100 ) ) ; #4490 = FACE_OUTER_BOUND ( 'NONE', #372, .T. ) ; #4491 = ADVANCED_BREP_SHAPE_REPRESENTATION ( '54-00131', ( #5621, #4599, #6602, #4389, #733, #5320, #2818 ), #4 ) ; #4493 = ORIENTED_EDGE ( 'NONE', *, *, #2991, .T. ) ; #4492 = LINE ( 'NONE', #1351, #5162 ) ; #4494 = CARTESIAN_POINT ( 'NONE', ( -1.074976606823609700, -5.210841805566252200, -5.484640381139167100 ) ) ; #4495 = ORIENTED_EDGE ( 'NONE', *, *, #1170, .T. ) ; #4496 = CARTESIAN_POINT ( 'NONE', ( 2.660000000000029900, -2.289999999999110100, -9.800000000000000700 ) ) ; #4497 = VECTOR ( 'NONE', #5820, 1000.000000000000000 ) ; #4498 = LINE ( 'NONE', #519, #6255 ) ; #4499 = EDGE_LOOP ( 'NONE', ( #4342, #3610, #5799, #1384 ) ) ; #4500 = CARTESIAN_POINT ( 'NONE', ( 1.998320026930424000, -1.986181802448812700, -5.142938950091376200 ) ) ; #4501 = EDGE_CURVE ( 'NONE', #4591, #5960, #2842, .T. ) ; #4502 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; #4503 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; #4504 = CYLINDRICAL_SURFACE ( 'NONE', #1714, 0.5000000000000004400 ) ; #4505 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; #4506 = ORIENTED_EDGE ( 'NONE', *, *, #5080, .F. ) ; #4507 = APPROVAL_DATE_TIME ( #1311, #5766 ) ; #4508 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.4999999999999711300, 0.8660254037844553600 ) ) ; #4509 = EDGE_CURVE ( 'NONE', #4275, #4528, #5393, .T. ) ; #4510 = ORIENTED_EDGE ( 'NONE', *, *, #5604, .T. ) ; #4511 = PLANE ( 'NONE', #2508 ) ; #4512 = CARTESIAN_POINT ( 'NONE', ( 2.750000000000909900, -5.500000000000009800, -6.968314918796940200 ) ) ; #4513 = EDGE_CURVE ( 'NONE', #1185, #2133, #5978, .T. ) ; #4514 = CARTESIAN_POINT ( 'NONE', ( -1.514497543125084000, -2.591887722870009900, -11.13218201938332000 ) ) ; #4515 = ORIENTED_EDGE ( 'NONE', *, *, #4864, .T. ) ; #4516 = EDGE_CURVE ( 'NONE', #4790, #4650, #1789, .T. ) ; #4517 = EDGE_CURVE ( 'NONE', #2841, #5953, #6643, .T. ) ; #4518 = CARTESIAN_POINT ( 'NONE', ( -2.749999999999089600, -4.265383018320004100, -1.874408384885764700 ) ) ; #4519 = PLANE ( 'NONE', #929 ) ; #4520 = AXIS2_PLACEMENT_3D ( 'NONE', #1873, #5539, #3998 ) ; #4521 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; #4522 = ORIENTED_EDGE ( 'NONE', *, *, #2766, .T. ) ; #4523 = CARTESIAN_POINT ( 'NONE', ( 4.499999999999950300, 3.799999999999910100, -3.499999999999999600 ) ) ; #4524 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000091300, -8.970710678117649600, -8.246446609405911200 ) ) ; #4525 = ORIENTED_EDGE ( 'NONE', *, *, #2894, .T. ) ; #4526 = ORIENTED_EDGE ( 'NONE', *, *, #6219, .F. ) ; #4527 = CIRCLE ( 'NONE', #2710, 3.149999999999999900 ) ; #4528 = VERTEX_POINT ( 'NONE', #2251 ) ; #4529 = CARTESIAN_POINT ( 'NONE', ( 1.249999999999969800, -9.699999999998910400, -7.599999999999870000 ) ) ; #4530 = PLANE ( 'NONE', #5232 ) ; #4531 = EDGE_LOOP ( 'NONE', ( #6006, #6641, #3974, #2084 ) ) ; #4532 = CARTESIAN_POINT ( 'NONE', ( -2.739999999999950000, -2.559999999999050100, -2.779157999888000100 ) ) ; #4533 = CARTESIAN_POINT ( 'NONE', ( -2.749999999999090100, -5.500000000000009800, -2.300000000000899500 ) ) ; #4534 = EDGE_LOOP ( 'NONE', ( #4802, #2156, #454, #1284, #1209, #5887, #5210, #3723 ) ) ; #4535 = LINE ( 'NONE', #3174, #4203 ) ; #4536 = ORIENTED_EDGE ( 'NONE', *, *, #4194, .F. ) ; #4537 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; #4538 = VECTOR ( 'NONE', #6185, 1000.000000000000000 ) ; #4539 = ORIENTED_EDGE ( 'NONE', *, *, #996, .T. ) ; #4540 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.7071067811864111300, -0.7071067811866840200 ) ) ; #4541 = EDGE_CURVE ( 'NONE', #1152, #2841, #2920, .T. ) ; #4542 = PLANE ( 'NONE', #4918 ) ; #4543 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, ( #3929, #3952, #6102, #6642, #1391, #6054 ), .UNSPECIFIED., .F., .F., ( 4, 2, 4 ), ( 0.0000000000000000000, 0.5000000000000000000, 1.000000000000000000 ), .UNSPECIFIED. ) ; #4544 = VECTOR ( 'NONE', #894, 1000.000000000000100 ) ; #4545 = ORIENTED_EDGE ( 'NONE', *, *, #1948, .T. ) ; #4546 = CARTESIAN_POINT ( 'NONE', ( 2.362731470142100500, -1.199999999999980200, -9.900000000000000400 ) ) ; #4547 = CARTESIAN_POINT ( 'NONE', ( 2.660000000000029900, -2.289999999999110100, -9.800000000000000700 ) ) ; #4548 = CARTESIAN_POINT ( 'NONE', ( 0.8001292759841762700, -5.299999999999278600, -5.714179919878192000 ) ) ; #4549 = EDGE_LOOP ( 'NONE', ( #1639, #77, #1855, #3751, #3988 ) ) ; #4550 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #4551 = VECTOR ( 'NONE', #284, 1000.000000000000000 ) ; #4552 = CARTESIAN_POINT ( 'NONE', ( 1.110223024625159900E-013, -5.551115123125780200E-014, -13.44999999999999900 ) ) ; #4553 = VERTEX_POINT ( 'NONE', #5930 ) ; #4554 = EDGE_CURVE ( 'NONE', #4025, #6178, #4647, .T. ) ; #4555 = ORIENTED_EDGE ( 'NONE', *, *, #1353, .T. ) ; #4556 = EDGE_LOOP ( 'NONE', ( #2137, #6283 ) ) ; #4557 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #4558 = VECTOR ( 'NONE', #3220, 1000.000000000000000 ) ; #4559 = ORIENTED_EDGE ( 'NONE', *, *, #6680, .T. ) ; #4560 = CARTESIAN_POINT ( 'NONE', ( 1.249999999999969800, -8.829289321880066800, -8.246446609406263000 ) ) ; #4561 = CARTESIAN_POINT ( 'NONE', ( -4.500000000000000900, 3.799999999999909700, -0.4999999999999987200 ) ) ; #4562 = LINE ( 'NONE', #3844, #6316 ) ; #4563 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; #4564 = EDGE_CURVE ( 'NONE', #4607, #3128, #1537, .T. ) ; #4565 = LINE ( 'NONE', #1898, #54 ) ; #4566 = CARTESIAN_POINT ( 'NONE', ( -1.309821414171277600, -2.582763714336700400, -11.21899116185274200 ) ) ; #4567 = ADVANCED_FACE ( 'NONE', ( #621 ), #3871, .T. ) ; #4568 = CYLINDRICAL_SURFACE ( 'NONE', #2116, 0.5000000000000000000 ) ; #4569 = ORIENTED_EDGE ( 'NONE', *, *, #4554, .F. ) ; #4570 = AXIS2_PLACEMENT_3D ( 'NONE', #2562, #6785, #4105 ) ; #4571 = CARTESIAN_POINT ( 'NONE', ( -1.899999999998069900, -5.299999999999280400, -11.90000000000010000 ) ) ; #4572 = DIRECTION ( 'NONE', ( 0.02524987779192788500, 0.7311205248579250000, 0.6817809192130306300 ) ) ; #4573 = CARTESIAN_POINT ( 'NONE', ( -0.9999999999991159300, -5.299999999999279500, -5.100000000001029900 ) ) ; #4574 = CARTESIAN_POINT ( 'NONE', ( 4.499999999999950300, -2.599999999999050200, -9.750000000000000000 ) ) ; #4575 = LINE ( 'NONE', #6807, #6062 ) ; #4576 = EDGE_LOOP ( 'NONE', ( #5767, #5142, #6388, #3079 ) ) ; #4577 = APPROVAL_STATUS ( 'not_yet_approved' ) ; #4578 = CARTESIAN_POINT ( 'NONE', ( 2.942893218813433400, 1.463191872351499200E-008, -9.900000000000023400 ) ) ; #4579 = AXIS2_PLACEMENT_3D ( 'NONE', #1552, #5769, #3663 ) ; #4580 = VECTOR ( 'NONE', #1475, 1000.000000000000000 ) ; #4581 = VECTOR ( 'NONE', #3313, 1000.000000000000000 ) ; #4582 = ORIENTED_EDGE ( 'NONE', *, *, #4457, .T. ) ; #4583 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #4584 = CARTESIAN_POINT ( 'NONE', ( 3.900000000000130000, -6.049999999999999800, -11.80000000000000100 ) ) ; #4585 = VECTOR ( 'NONE', #2659, 1000.000000000000000 ) ; #4586 = CARTESIAN_POINT ( 'NONE', ( 3.725592231765940000, 4.299999999999919900, -2.700000000000000200 ) ) ; #4587 = CARTESIAN_POINT ( 'NONE', ( 4.292893218813452100, 3.799999999999910100, 8.673617379884035500E-016 ) ) ; #4588 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; #4589 = CARTESIAN_POINT ( 'NONE', ( -3.650000000000039900, -5.500000000000009800, -11.80000000000000100 ) ) ; #4590 = FACE_OUTER_BOUND ( 'NONE', #494, .T. ) ; #4591 = VERTEX_POINT ( 'NONE', #3353 ) ; #4592 = CARTESIAN_POINT ( 'NONE', ( 4.499999999999950300, 2.400000000000960000, -2.699999999999999700 ) ) ; #4593 = EDGE_CURVE ( 'NONE', #2512, #1341, #136, .T. ) ; #4594 = CARTESIAN_POINT ( 'NONE', ( 3.030782786503039900, -2.199999999999130200, -2.779157999888000100 ) ) ; #4595 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #4596 = VECTOR ( 'NONE', #6671, 1000.000000000000000 ) ; #4597 = CARTESIAN_POINT ( 'NONE', ( 18.18468237128200100, -8.241421356236928700, -7.658578643762929500 ) ) ; #4598 = VERTEX_POINT ( 'NONE', #6501 ) ; #4599 = MANIFOLD_SOLID_BREP ( 'Imported2', #619 ) ; #4600 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #4601 = CARTESIAN_POINT ( 'NONE', ( 1.032528193925337000, 2.445250724579017800, -9.900000000000000400 ) ) ; #4602 = EDGE_CURVE ( 'NONE', #5865, #4679, #5562, .T. ) ; #4603 = CARTESIAN_POINT ( 'NONE', ( 1.249999999999969800, -8.829289321880066800, -8.246446609406263000 ) ) ; #4604 = VERTEX_POINT ( 'NONE', #2831 ) ; #4605 = CARTESIAN_POINT ( 'NONE', ( 18.18468237128200100, -3.262063269921839900, -6.669242063142889700 ) ) ; #4606 = CARTESIAN_POINT ( 'NONE', ( 4.500000000000000900, 4.092893218813363100, -0.3284271247461890700 ) ) ; #4607 = VERTEX_POINT ( 'NONE', #1432 ) ; #4608 = CARTESIAN_POINT ( 'NONE', ( 2.026786536416744300, -2.236097133178126800, -4.992430623593719500 ) ) ; #4609 = AXIS2_PLACEMENT_3D ( 'NONE', #4347, #2313, #2804 ) ; #4610 = VERTEX_POINT ( 'NONE', #1349 ) ; #4611 = EDGE_CURVE ( 'NONE', #1040, #2333, #2597, .T. ) ; #4612 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #4613 = CARTESIAN_POINT ( 'NONE', ( -3.599999999999940100, -6.049999999999999800, -13.44999999999999900 ) ) ; #4614 = AXIS2_PLACEMENT_3D ( 'NONE', #573, #2216, #3165 ) ; #4615 = CARTESIAN_POINT ( 'NONE', ( 0.9740146494347984300, -5.299999999999280400, -5.361733046246675900 ) ) ; #4616 = LINE ( 'NONE', #4368, #3054 ) ; #4617 = ORIENTED_EDGE ( 'NONE', *, *, #4008, .F. ) ; #4618 = CYLINDRICAL_SURFACE ( 'NONE', #6610, 0.5999999999999998700 ) ; #4619 = VERTEX_POINT ( 'NONE', #2770 ) ; #4620 = CARTESIAN_POINT ( 'NONE', ( -2.650000000365879200, -0.4215383312072774600, -9.900000000000000400 ) ) ; #4621 = AXIS2_PLACEMENT_3D ( 'NONE', #2139, #2627, #1107 ) ; #4622 = ORIENTED_EDGE ( 'NONE', *, *, #3104, .T. ) ; #4623 = ORIENTED_EDGE ( 'NONE', *, *, #3693, .F. ) ; #4624 = VECTOR ( 'NONE', #6702, 1000.000000000000000 ) ; #4625 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #4626 = CARTESIAN_POINT ( 'NONE', ( -1.032900235697520300, 2.445100542779978300, -9.900000000000000400 ) ) ; #4627 = ORIENTED_EDGE ( 'NONE', *, *, #5403, .T. ) ; #4628 = LINE ( 'NONE', #1066, #3214 ) ; #4629 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #4630 = CARTESIAN_POINT ( 'NONE', ( 1.279896855207897300, -2.582763714275671400, -11.21899116183752400 ) ) ; #4631 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #4632 = VECTOR ( 'NONE', #5678, 1000.000000000000000 ) ; #4633 = VERTEX_POINT ( 'NONE', #133 ) ; #4634 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #4635 = ORIENTED_EDGE ( 'NONE', *, *, #4564, .F. ) ; #4636 = LINE ( 'NONE', #6590, #5969 ) ; #4637 = CARTESIAN_POINT ( 'NONE', ( -2.500000000000060000, 2.400000000000960000, -2.549999999999999800 ) ) ; #4638 = ORIENTED_EDGE ( 'NONE', *, *, #5931, .F. ) ; #4639 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000090200, -5.519526214588302600, -7.502736007539902600 ) ) ; #4640 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; #4641 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; #4642 = CARTESIAN_POINT ( 'NONE', ( 1.479999999999979600, -9.539807621135009800, -13.77999999999999900 ) ) ; #4643 =( BOUNDED_SURFACE ( ) B_SPLINE_SURFACE ( 3, 3, ( ( #1121, #4757, #6339, #1620 ), ( #2683, #6823, #2094, #4195 ), ( #5801, #503, #4182, #4708 ), ( #5237, #582, #4773, #1038 ) ), .UNSPECIFIED., .F., .F., .F. ) B_SPLINE_SURFACE_WITH_KNOTS ( ( 4, 4 ), ( 4, 4 ), ( 0.0000000000000000000, 1.000000000000000000 ), ( 0.0000000000000000000, 1.000000000000000000 ), .UNSPECIFIED. ) GEOMETRIC_REPRESENTATION_ITEM ( ) RATIONAL_B_SPLINE_SURFACE ( ( ( 1.000000000000000000, 0.8047378541243649400, 0.8047378541243649400, 1.000000000000000000), ( 0.8047378541243649400, 0.6476030138606876400, 0.6476030138606876400, 0.8047378541243649400), ( 0.8047378541243649400, 0.6476030138606876400, 0.6476030138606876400, 0.8047378541243649400), ( 1.000000000000000000, 0.8047378541243649400, 0.8047378541243649400, 1.000000000000000000) ) ) REPRESENTATION_ITEM ( '' ) SURFACE ( ) ); #4644 = LINE ( 'NONE', #5888, #4471 ) ; #4645 = EDGE_CURVE ( 'NONE', #3505, #6667, #3414, .T. ) ; #4646 = EDGE_LOOP ( 'NONE', ( #1003, #191, #4174, #4515 ) ) ; #4647 = LINE ( 'NONE', #4913, #4725 ) ; #4648 = ORIENTED_EDGE ( 'NONE', *, *, #1217, .F. ) ; #4649 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #4650 = VERTEX_POINT ( 'NONE', #6434 ) ; #4651 = EDGE_CURVE ( 'NONE', #81, #1089, #5807, .T. ) ; #4652 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; #4653 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; #4654 = CARTESIAN_POINT ( 'NONE', ( 2.018281576592726900, -2.906897123192799400, -6.230395288045441400 ) ) ; #4655 = LINE ( 'NONE', #4102, #4085 ) ; #4656 = VERTEX_POINT ( 'NONE', #1231 ) ; #4657 = EDGE_CURVE ( 'NONE', #5951, #1152, #4894, .T. ) ; #4658 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; #4659 = EDGE_CURVE ( 'NONE', #4218, #5192, #5219, .T. ) ; #4660 = CYLINDRICAL_SURFACE ( 'NONE', #3193, 3.149999999999999900 ) ; #4661 = VECTOR ( 'NONE', #6491, 1000.000000000000000 ) ; #4662 = EDGE_LOOP ( 'NONE', ( #5202, #2518, #6053, #4129 ) ) ; #4663 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #4664 = ORIENTED_EDGE ( 'NONE', *, *, #3484, .F. ) ; #4665 = LINE ( 'NONE', #3654, #1884 ) ; #4666 = PERSON_AND_ORGANIZATION_ROLE ( 'classification_officer' ) ; #4667 = CARTESIAN_POINT ( 'NONE', ( -2.359338535458139800, -1.206657231819393300, -9.900000000000000400 ) ) ; #4668 = VECTOR ( 'NONE', #3722, 1000.000000000000000 ) ; #4669 = ORIENTED_EDGE ( 'NONE', *, *, #5019, .T. ) ; #4670 = CARTESIAN_POINT ( 'NONE', ( -4.292893218813453000, -6.292893218813513400, 8.108884014980910800E-016 ) ) ; #4671 = LINE ( 'NONE', #840, #3932 ) ; #4672 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #4673 = ORIENTED_EDGE ( 'NONE', *, *, #3442, .T. ) ; #4674 = CARTESIAN_POINT ( 'NONE', ( 1.417072792506313600, -2.582763714234390200, -11.21899116183310600 ) ) ; #4675 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #4676 = AXIS2_PLACEMENT_3D ( 'NONE', #2616, #1567, #2045 ) ; #4677 = CARTESIAN_POINT ( 'NONE', ( 2.750000000000910400, -5.285081348402685300, -2.142488533569190300 ) ) ; #4678 = CARTESIAN_POINT ( 'NONE', ( -4.000000000000000000, 3.799999999999910600, 8.673617379884035500E-016 ) ) ; #4679 = VERTEX_POINT ( 'NONE', #2172 ) ; #4680 = CARTESIAN_POINT ( 'NONE', ( -2.912473175842149600, -1.199999999999971100, -9.539270397983603500 ) ) ; #4681 = EDGE_CURVE ( 'NONE', #3647, #3642, #4562, .T. ) ; #4682 = VERTEX_POINT ( 'NONE', #4853 ) ; #4683 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #4684 = EDGE_CURVE ( 'NONE', #5960, #1367, #1869, .T. ) ; #4685 = CARTESIAN_POINT ( 'NONE', ( -1.767385659580523100, -2.813193008876101200, -10.93995731940471400 ) ) ; #4686 = EDGE_LOOP ( 'NONE', ( #6537, #4699, #2738, #584, #4970, #2944, #3406, #4373, #4150, #1580 ) ) ; #4687 = CARTESIAN_POINT ( 'NONE', ( 2.429328335627641200, -2.430323138702813700, -9.800000000000000700 ) ) ; #4688 = ORIENTED_EDGE ( 'NONE', *, *, #5988, .F. ) ; #4689 = EDGE_CURVE ( 'NONE', #3337, #3758, #3820, .T. ) ; #4690 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #4691 = CARTESIAN_POINT ( 'NONE', ( -1.239029422041104900, -10.24644242615458200, -7.599999999999870900 ) ) ; #4692 = AXIS2_PLACEMENT_3D ( 'NONE', #2295, #4436, #4968 ) ; #4693 = ORIENTED_EDGE ( 'NONE', *, *, #748, .T. ) ; #4694 = VECTOR ( 'NONE', #3201, 1000.000000000000000 ) ; #4695 = ORIENTED_EDGE ( 'NONE', *, *, #1883, .T. ) ; #4696 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #4697 = CARTESIAN_POINT ( 'NONE', ( 2.750000000000909500, -5.299999999999685400, -2.300000000000010000 ) ) ; #4698 = CC_DESIGN_APPROVAL ( #3863, ( #4474 ) ) ; #4699 = ORIENTED_EDGE ( 'NONE', *, *, #2989, .F. ) ; #4700 = CIRCLE ( 'NONE', #1525, 1.199999999999930000 ) ; #4701 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, ( #4560, #2525, #3569, #4107, #1496, #3065 ), .UNSPECIFIED., .F., .F., ( 4, 2, 4 ), ( 0.0000000000000000000, 0.5000000000000000000, 1.000000000000000000 ), .UNSPECIFIED. ) ; #4702 = ORIENTED_EDGE ( 'NONE', *, *, #5491, .T. ) ; #4703 = CYLINDRICAL_SURFACE ( 'NONE', #1310, 1.000000000000000000 ) ; #4704 = EDGE_CURVE ( 'NONE', #5250, #2682, #5049, .T. ) ; #4705 = CLOSED_SHELL ( 'NONE', ( #1999, #5917, #1851, #4332, #4788, #916, #2190, #1658, #4415, #370, #1748, #5681, #5123, #3163 ) ) ; #4706 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.7071067811869580200, -0.7071067811861369000 ) ) ; #4707 = CARTESIAN_POINT ( 'NONE', ( 3.200000000000979800, -1.199999999999980000, -11.80000000000000100 ) ) ; #4708 = CARTESIAN_POINT ( 'NONE', ( 4.292893218813452100, -6.500000000000060400, -0.4999999999999996100 ) ) ; #4709 = LINE ( 'NONE', #423, #686 ) ; #4710 = ORIENTED_EDGE ( 'NONE', *, *, #1654, .F. ) ; #4711 = ORIENTED_EDGE ( 'NONE', *, *, #5585, .T. ) ; #4712 = AXIS2_PLACEMENT_3D ( 'NONE', #5997, #6559, #3405 ) ; #4713 = EDGE_LOOP ( 'NONE', ( #6087, #5422, #685, #5303, #4303, #196, #6500, #5110, #4739, #4067, #4774, #2078, #2995, #908, #5498, #2716 ) ) ; #4714 = CARTESIAN_POINT ( 'NONE', ( -4.500000000000000900, -6.292893218813513400, -0.3284271247461899000 ) ) ; #4715 = FACE_OUTER_BOUND ( 'NONE', #3425, .T. ) ; #4716 = ORIENTED_EDGE ( 'NONE', *, *, #5173, .T. ) ; #4717 = CARTESIAN_POINT ( 'NONE', ( -3.899999999999789900, -6.049999999999999800, -14.40000000000000200 ) ) ; #4718 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; #4719 = CARTESIAN_POINT ( 'NONE', ( 18.18468237128200100, -3.063158890845463200, -6.648336370488450200 ) ) ; #4720 = EDGE_LOOP ( 'NONE', ( #1702, #5871, #1512, #622 ) ) ; #4721 = VECTOR ( 'NONE', #2667, 1000.000000000000000 ) ; #4722 = ORIENTED_EDGE ( 'NONE', *, *, #5816, .T. ) ; #4723 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000090600, -8.241421356236895000, -7.658578643762965900 ) ) ; #4724 = EDGE_CURVE ( 'NONE', #1031, #4106, #2440, .T. ) ; #4725 = VECTOR ( 'NONE', #1754, 1000.000000000000000 ) ; #4726 = EDGE_CURVE ( 'NONE', #3881, #2146, #4476, .T. ) ; #4727 = CARTESIAN_POINT ( 'NONE', ( 1.479999999999979600, -7.460192378863940400, -13.77999999999999900 ) ) ; #4728 = ADVANCED_FACE ( 'NONE', ( #6476 ), #1205, .T. ) ; #4729 = FACE_OUTER_BOUND ( 'NONE', #1084, .T. ) ; #4730 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #4731 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000090600, -8.241421356236895000, -7.658578643762965900 ) ) ; #4732 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; #4733 = CIRCLE ( 'NONE', #364, 0.3999999999999993000 ) ; #4734 = ORIENTED_EDGE ( 'NONE', *, *, #5754, .F. ) ; #4735 = EDGE_CURVE ( 'NONE', #2918, #2682, #4308, .T. ) ; #4736 = PLANE ( 'NONE', #3520 ) ; #4737 = AXIS2_PLACEMENT_3D ( 'NONE', #1657, #3646, #4732 ) ; #4738 = CIRCLE ( 'NONE', #2338, 1.050000000000000000 ) ; #4739 = ORIENTED_EDGE ( 'NONE', *, *, #3456, .F. ) ; #4740 = CARTESIAN_POINT ( 'NONE', ( 18.18468237128200100, -5.700000000000730300, -7.599999999999999600 ) ) ; #4741 = CARTESIAN_POINT ( 'NONE', ( 1.110223024625159900E-013, -5.551115123125780200E-014, -13.40000000000000000 ) ) ; #4742 = CARTESIAN_POINT ( 'NONE', ( 0.1962934954581458900, -11.28908831120327200, -7.599999999999870000 ) ) ; #4743 = ORIENTED_EDGE ( 'NONE', *, *, #405, .T. ) ; #4744 = VECTOR ( 'NONE', #5884, 1000.000000000000000 ) ; #4745 = LINE ( 'NONE', #5812, #156 ) ; #4746 = EDGE_CURVE ( 'NONE', #1423, #6549, #2754, .T. ) ; #4747 = ORIENTED_EDGE ( 'NONE', *, *, #5253, .T. ) ; #4748 = EDGE_CURVE ( 'NONE', #3275, #5782, #3652, .T. ) ; #4749 = CARTESIAN_POINT ( 'NONE', ( -1.479999999999976200, -8.499999999999920100, -13.23381197846500100 ) ) ; #4750 = CARTESIAN_POINT ( 'NONE', ( -2.739999999999950000, -2.559999999999050100, -11.80000000000000100 ) ) ; #4751 = AXIS2_PLACEMENT_3D ( 'NONE', #8, #145, #4885 ) ; #4752 = CARTESIAN_POINT ( 'NONE', ( -2.031542734847105800, -3.273479948138926500, -6.560619625727921000 ) ) ; #4753 = LINE ( 'NONE', #5628, #3518 ) ; #4754 = AXIS2_PLACEMENT_3D ( 'NONE', #3233, #1178, #5363 ) ; #4755 = PLANE ( 'NONE', #1319 ) ; #4756 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000090800, -8.099999999999450800, -7.599999999999920600 ) ) ; #4757 = CARTESIAN_POINT ( 'NONE', ( 4.500000000000000000, -6.000000000000059500, -0.4999999999999992200 ) ) ; #4758 = ADVANCED_FACE ( 'NONE', ( #4395 ), #3991, .F. ) ; #4759 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; #4760 = VECTOR ( 'NONE', #1738, 1000.000000000000000 ) ; #4761 = VERTEX_POINT ( 'NONE', #5462 ) ; #4762 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -10.15000000000000000 ) ) ; #4763 = CARTESIAN_POINT ( 'NONE', ( -3.549999999999000200, -5.299999999999280400, -11.90000000000010000 ) ) ; #4764 = EDGE_CURVE ( 'NONE', #2407, #5983, #3157, .T. ) ; #4765 = CARTESIAN_POINT ( 'NONE', ( -9.662512969806920500, 2.300000000000019800, -13.77999999999999900 ) ) ; #4766 = EDGE_LOOP ( 'NONE', ( #5082, #5859, #1896, #3100 ) ) ; #4767 = CARTESIAN_POINT ( 'NONE', ( -0.03832251829251623300, -2.708201206355845600, -10.02553314655777200 ) ) ; #4768 = CARTESIAN_POINT ( 'NONE', ( 1.777709254451913100, -2.659722563033234200, -10.48677662737560300 ) ) ; #4769 = CARTESIAN_POINT ( 'NONE', ( -2.362731470142100100, -1.199999999999980200, -9.900000000000000400 ) ) ; #4770 = CARTESIAN_POINT ( 'NONE', ( -3.899999999999839200, 0.04999999999993923900, -11.80000000000000100 ) ) ; #4771 = CARTESIAN_POINT ( 'NONE', ( 4.499999999999950300, -2.599999999999050200, -11.80000000000000100 ) ) ; #4772 = EDGE_CURVE ( 'NONE', #5953, #4956, #5890, .T. ) ; #4773 = CARTESIAN_POINT ( 'NONE', ( 4.000000000000000000, -6.500000000000060400, -0.2071067811865473200 ) ) ; #4774 = ORIENTED_EDGE ( 'NONE', *, *, #4879, .F. ) ; #4775 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #4776 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; #4777 = VECTOR ( 'NONE', #2696, 1000.000000000000000 ) ; #4778 = CARTESIAN_POINT ( 'NONE', ( 1.075528555105620000E-013, -5.551115123125780200E-014, -13.42000000000000000 ) ) ; #4779 = ORIENTED_EDGE ( 'NONE', *, *, #2965, .F. ) ; #4780 = LINE ( 'NONE', #2625, #2070 ) ; #4781 = ORIENTED_EDGE ( 'NONE', *, *, #5664, .F. ) ; #4782 = CARTESIAN_POINT ( 'NONE', ( -1.734723475976806900E-015, -2.699783421336158000, -10.03070813642793600 ) ) ; #4783 = EDGE_CURVE ( 'NONE', #2746, #5626, #3008, .T. ) ; #4784 = CARTESIAN_POINT ( 'NONE', ( -4.500000000000060400, -6.000000000000060400, 0.0000000000000000000 ) ) ; #4785 = CARTESIAN_POINT ( 'NONE', ( -1.479999999999976900, -9.364807621134991300, -13.73310889132465500 ) ) ; #4786 = ORIENTED_EDGE ( 'NONE', *, *, #3183, .F. ) ; #4787 = AXIS2_PLACEMENT_3D ( 'NONE', #356, #2471, #2996 ) ; #4788 = ADVANCED_FACE ( 'NONE', ( #1034 ), #3899, .T. ) ; #4789 = LINE ( 'NONE', #322, #2988 ) ; #4790 = VERTEX_POINT ( 'NONE', #3958 ) ; #4791 = CARTESIAN_POINT ( 'NONE', ( 18.18468237128200100, -5.299999999999280400, -7.399999999998890100 ) ) ; #4792 = CIRCLE ( 'NONE', #3274, 1.199999999999930000 ) ; #4793 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; #4794 = ORIENTED_EDGE ( 'NONE', *, *, #5045, .T. ) ; #4795 = VECTOR ( 'NONE', #3154, 1000.000000000000100 ) ; #4796 = ORIENTED_EDGE ( 'NONE', *, *, #5684, .F. ) ; #4797 = CARTESIAN_POINT ( 'NONE', ( -2.749999999999090100, -5.286026330804757500, -2.148310976961231400 ) ) ; #4798 = ORIENTED_EDGE ( 'NONE', *, *, #4684, .F. ) ; #4799 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #4800 = VERTEX_POINT ( 'NONE', #247 ) ; #4801 = VECTOR ( 'NONE', #6046, 1000.000000000000000 ) ; #4802 = ORIENTED_EDGE ( 'NONE', *, *, #3142, .F. ) ; #4803 = ADVANCED_FACE ( 'NONE', ( #709 ), #1836, .T. ) ; #4804 = CARTESIAN_POINT ( 'NONE', ( 2.660000000000029900, -2.289999999999110100, -11.80000000000000100 ) ) ; #4805 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #4806 = VECTOR ( 'NONE', #901, 999.9999999999998900 ) ; #4807 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; #4808 = VERTEX_POINT ( 'NONE', #749 ) ; #4809 = ORIENTED_EDGE ( 'NONE', *, *, #5980, .F. ) ; #4810 = VECTOR ( 'NONE', #691, 1000.000000000000000 ) ; #4811 = ORIENTED_EDGE ( 'NONE', *, *, #5019, .F. ) ; #4812 = CARTESIAN_POINT ( 'NONE', ( 1.000000000000000000, 2.249639673992787800E-032, -2.100000000000049800 ) ) ; #4813 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #4814 = EDGE_CURVE ( 'NONE', #887, #2192, #1450, .T. ) ; #4815 = FACE_OUTER_BOUND ( 'NONE', #93, .T. ) ; #4816 = VERTEX_POINT ( 'NONE', #5523 ) ; #4817 = VERTEX_POINT ( 'NONE', #2357 ) ; #4818 = CARTESIAN_POINT ( 'NONE', ( 1.050000000000107700, -5.551115123125780200E-014, -13.77999999999999900 ) ) ; #4819 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; #4820 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #4821 = CYLINDRICAL_SURFACE ( 'NONE', #6658, 1.500000000000000000 ) ; #4822 = ADVANCED_FACE ( 'NONE', ( #5297 ), #4104, .F. ) ; #4823 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #4824 = VECTOR ( 'NONE', #163, 1000.000000000000000 ) ; #4825 = ORIENTED_EDGE ( 'NONE', *, *, #3940, .T. ) ; #4826 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #4827 = EDGE_CURVE ( 'NONE', #6333, #1347, #2107, .T. ) ; #4828 = CARTESIAN_POINT ( 'NONE', ( -1.644264407091930100, -2.781668093413510500, -11.23989685449770300 ) ) ; #4829 = AXIS2_PLACEMENT_3D ( 'NONE', #6058, #747, #5993 ) ; #4830 = LINE ( 'NONE', #5695, #6253 ) ; #4831 = FACE_BOUND ( 'NONE', #1627, .T. ) ; #4832 = VERTEX_POINT ( 'NONE', #6039 ) ; #4833 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -1.100000000000100000, -11.80000000000000100 ) ) ; #4834 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000091000, -5.343109238556174000, -7.608794663504618900 ) ) ; #4835 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; #4836 = VECTOR ( 'NONE', #2882, 1000.000000000000000 ) ; #4837 = EDGE_CURVE ( 'NONE', #2154, #6415, #1274, .T. ) ; #4838 = CARTESIAN_POINT ( 'NONE', ( 1.249999999999969800, -9.699999999999365100, -7.599999999999969400 ) ) ; #4839 = ORIENTED_EDGE ( 'NONE', *, *, #6784, .T. ) ; #4840 = ADVANCED_FACE ( 'NONE', ( #6722 ), #1957, .T. ) ; #4841 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; #4842 = LINE ( 'NONE', #839, #250 ) ; #4843 = CARTESIAN_POINT ( 'NONE', ( -2.640414268656837500, -0.2669783659187773800, -9.900000000000002100 ) ) ; #4844 = ORIENTED_EDGE ( 'NONE', *, *, #1364, .T. ) ; #4845 = CARTESIAN_POINT ( 'NONE', ( 1.702244961332086500, -2.620912352370299700, -10.85603111616850700 ) ) ; #4846 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.5446390350179318700, -0.8386705679435376700 ) ) ; #4847 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #4848 = VERTEX_POINT ( 'NONE', #1902 ) ; #4849 = CARTESIAN_POINT ( 'NONE', ( -2.649999999999999900, 0.0000000000000000000, -9.400000000000000400 ) ) ; #4850 = CARTESIAN_POINT ( 'NONE', ( 1.249999999999969800, -5.699999999999819900, -7.799999999999481100 ) ) ; #4851 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #4852 = PLANE ( 'NONE', #5543 ) ; #4853 = CARTESIAN_POINT ( 'NONE', ( 2.173248591432329000, -3.137993503012957800, -3.603632002693466500 ) ) ; #4854 = EDGE_CURVE ( 'NONE', #2679, #6828, #903, .T. ) ; #4855 = ADVANCED_FACE ( 'NONE', ( #5842, #5248 ), #3519, .T. ) ; #4856 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; #4857 = ORIENTED_EDGE ( 'NONE', *, *, #5501, .F. ) ; #4858 = VERTEX_POINT ( 'NONE', #4009 ) ; #4859 = CYLINDRICAL_SURFACE ( 'NONE', #5809, 0.5000000000000001100 ) ; #4860 = ORIENTED_EDGE ( 'NONE', *, *, #4429, .T. ) ; #4861 = CARTESIAN_POINT ( 'NONE', ( -1.000000000000000000, 1.224646799147353200E-016, -13.77999999999999900 ) ) ; #4862 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #4863 = VERTEX_POINT ( 'NONE', #5087 ) ; #4864 = EDGE_CURVE ( 'NONE', #3378, #41, #4671, .T. ) ; #4865 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #4866 = LINE ( 'NONE', #3194, #5525 ) ; #4867 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.5446390350149148400, -0.8386705679454968800 ) ) ; #4868 = ORIENTED_EDGE ( 'NONE', *, *, #6514, .F. ) ; #4869 = CARTESIAN_POINT ( 'NONE', ( -2.299999999999080100, -1.100000000000100000, -11.80000000000000100 ) ) ; #4870 = LINE ( 'NONE', #244, #2415 ) ; #4871 = ORIENTED_EDGE ( 'NONE', *, *, #1817, .F. ) ; #4872 = EDGE_CURVE ( 'NONE', #4832, #1830, #2467, .T. ) ; #4873 = VERTEX_POINT ( 'NONE', #5618 ) ; #4874 = ADVANCED_FACE ( 'NONE', ( #2545 ), #6507, .F. ) ; #4875 = CARTESIAN_POINT ( 'NONE', ( 0.5000064583865309100, -11.19585006917569100, -7.800000000000072700 ) ) ; #4876 = CARTESIAN_POINT ( 'NONE', ( 4.500000000000060400, -2.559999999999050100, -2.779157999888000100 ) ) ; #4877 = VECTOR ( 'NONE', #5398, 1000.000000000000000 ) ; #4878 = CARTESIAN_POINT ( 'NONE', ( -0.02259272426590824800, -2.732007167794616700, -10.01057250486234900 ) ) ; #4879 = EDGE_CURVE ( 'NONE', #3802, #3209, #2210, .T. ) ; #4880 = ORIENTED_EDGE ( 'NONE', *, *, #5836, .T. ) ; #4881 = ORIENTED_EDGE ( 'NONE', *, *, #6656, .T. ) ; #4882 = EDGE_CURVE ( 'NONE', #1363, #2364, #666, .T. ) ; #4883 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; #4884 = PLANE ( 'NONE', #4692 ) ; #4885 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #4886 = LINE ( 'NONE', #6570, #534 ) ; #4887 = ORIENTED_EDGE ( 'NONE', *, *, #5227, .T. ) ; #4888 = CARTESIAN_POINT ( 'NONE', ( -4.339999999999969700, -2.199999999999130200, -9.800000000000000700 ) ) ; #4889 = LINE ( 'NONE', #1646, #1786 ) ; #4890 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; #4891 = VERTEX_POINT ( 'NONE', #2999 ) ; #4892 = CARTESIAN_POINT ( 'NONE', ( -1.000000000000000000, 1.224646799147353200E-016, -2.100000000000049400 ) ) ; #4893 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; #4894 = LINE ( 'NONE', #656, #1195 ) ; #4895 = ADVANCED_FACE ( 'NONE', ( #4590 ), #1978, .T. ) ; #4896 = CARTESIAN_POINT ( 'NONE', ( -1.899999999998069900, -5.500000000000009800, -7.400000000000000400 ) ) ; #4897 = CARTESIAN_POINT ( 'NONE', ( 3.200000000000979800, -1.199999999999979700, -0.9999999999999991100 ) ) ; #4898 = CIRCLE ( 'NONE', #1502, 0.5000000000000004400 ) ; #4899 = LINE ( 'NONE', #2050, #3497 ) ; #4900 = EDGE_LOOP ( 'NONE', ( #4522, #3967, #1427, #6796 ) ) ; #4901 = CARTESIAN_POINT ( 'NONE', ( 1.249999999999970000, -5.500000000000739900, -7.454857911324285000 ) ) ; #4902 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; #4903 = LINE ( 'NONE', #3623, #626 ) ; #4904 = AXIS2_PLACEMENT_3D ( 'NONE', #6792, #3698, #5205 ) ; #4905 = VERTEX_POINT ( 'NONE', #336 ) ; #4906 = CARTESIAN_POINT ( 'NONE', ( 18.18468237128200100, -2.487698303561229900, -5.155822334097729600 ) ) ; #4907 = EDGE_CURVE ( 'NONE', #2817, #1601, #2130, .T. ) ; #4908 = ADVANCED_FACE ( 'NONE', ( #1645 ), #5690, .F. ) ; #4909 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; #4910 = FACE_OUTER_BOUND ( 'NONE', #6103, .T. ) ; #4911 = FACE_OUTER_BOUND ( 'NONE', #6048, .T. ) ; #4912 = EDGE_LOOP ( 'NONE', ( #2915, #4545, #2639, #6285, #5817, #5097 ) ) ; #4913 = CARTESIAN_POINT ( 'NONE', ( 4.000000000000000000, -6.500000000000060400, -11.80000000000000100 ) ) ; #4914 = DIRECTION ( 'NONE', ( -0.08810188277370385700, 0.5425211891281630500, -0.8354093712657839600 ) ) ; #4915 = LINE ( 'NONE', #4749, #2867 ) ; #4916 = EDGE_CURVE ( 'NONE', #895, #4607, #6511, .T. ) ; #4917 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -11.80000000000000100 ) ) ; #4918 = AXIS2_PLACEMENT_3D ( 'NONE', #3547, #1968, #6147 ) ; #4919 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; #4920 = CARTESIAN_POINT ( 'NONE', ( -2.749999999999090100, -4.689212032310580400, -1.500072740962073100 ) ) ; #4921 = LINE ( 'NONE', #1513, #4997 ) ; #4922 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.7071067811866840200, 0.7071067811864111300 ) ) ; #4923 = CARTESIAN_POINT ( 'NONE', ( 3.050000000000940000, -5.299999999999280400, -6.100000000000919800 ) ) ; #4924 = ORIENTED_EDGE ( 'NONE', *, *, #1808, .F. ) ; #4925 = CARTESIAN_POINT ( 'NONE', ( 1.479999999999979600, -9.539807621135009800, -13.77999999999999900 ) ) ; #4926 = CARTESIAN_POINT ( 'NONE', ( 0.3876794884815915100, -2.676969264732556500, -10.32268522177505700 ) ) ; #4927 = AXIS2_PLACEMENT_3D ( 'NONE', #1572, #3139, #3612 ) ; #4928 = ORIENTED_EDGE ( 'NONE', *, *, #2417, .F. ) ; #4929 = PLANE ( 'NONE', #4384 ) ; #4930 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #4931 = CARTESIAN_POINT ( 'NONE', ( -3.549999999999000200, -5.299999999999280400, -6.100000000000919800 ) ) ; #4932 = CARTESIAN_POINT ( 'NONE', ( 1.719922170848961200, -2.795337660295407200, -11.10983961325904600 ) ) ; #4933 = ORIENTED_EDGE ( 'NONE', *, *, #3327, .F. ) ; #4934 = ADVANCED_FACE ( 'NONE', ( #6341 ), #3043, .F. ) ; #4935 = ADVANCED_FACE ( 'NONE', ( #245 ), #2580, .T. ) ; #4936 = CARTESIAN_POINT ( 'NONE', ( 1.249999999999969600, -10.12938721587652500, -7.800000000000070000 ) ) ; #4937 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #4938 = CLOSED_SHELL ( 'NONE', ( #1791, #166, #4421, #2208, #658, #257, #1920, #2799, #6393, #147, #3742, #2907, #1481, #5957, #5841, #3155, #4567, #2875, #2259, #3710, #106, #5432, #3390 ) ) ; #4939 = CARTESIAN_POINT ( 'NONE', ( 18.18468237128200100, -8.241421356236859500, -7.658578643762999700 ) ) ; #4940 = ORIENTED_EDGE ( 'NONE', *, *, #2033, .T. ) ; #4941 = EDGE_CURVE ( 'NONE', #4619, #1929, #5672, .T. ) ; #4942 = FACE_BOUND ( 'NONE', #498, .T. ) ; #4943 = ORIENTED_EDGE ( 'NONE', *, *, #1886, .F. ) ; #4944 = VECTOR ( 'NONE', #1360, 1000.000000000000000 ) ; #4945 = ORIENTED_EDGE ( 'NONE', *, *, #6478, .F. ) ; #4946 = CARTESIAN_POINT ( 'NONE', ( -2.989999999999950000, -2.559999999999050100, -11.80000000000000100 ) ) ; #4947 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #4948 = CARTESIAN_POINT ( 'NONE', ( -0.3692454791660909100, -2.699783421336158000, -10.03070813642794300 ) ) ; #4949 = ORIENTED_EDGE ( 'NONE', *, *, #2181, .F. ) ; #4950 = CONICAL_SURFACE ( 'NONE', #6436, 1.199999999471401700, 1.405647647690330300 ) ; #4951 = ORIENTED_EDGE ( 'NONE', *, *, #827, .T. ) ; #4952 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; #4953 = FACE_OUTER_BOUND ( 'NONE', #523, .T. ) ; #4954 = EDGE_CURVE ( 'NONE', #2042, #3801, #6293, .T. ) ; #4955 = VECTOR ( 'NONE', #345, 1000.000000000000000 ) ; #4956 = VERTEX_POINT ( 'NONE', #6802 ) ; #4957 = AXIS2_PLACEMENT_3D ( 'NONE', #342, #1420, #6677 ) ; #4958 = ORIENTED_EDGE ( 'NONE', *, *, #6180, .F. ) ; #4959 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #4960 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; #4961 = ORIENTED_EDGE ( 'NONE', *, *, #3463, .T. ) ; #4962 = EDGE_CURVE ( 'NONE', #3633, #6358, #1062, .T. ) ; #4963 = CYLINDRICAL_SURFACE ( 'NONE', #5413, 0.4000000000000001900 ) ; #4964 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; #4965 = CARTESIAN_POINT ( 'NONE', ( -0.1308530057019595100, -5.299999999999280400, -4.099865893956574900 ) ) ; #4966 = VERTEX_POINT ( 'NONE', #6776 ) ; #4967 = ADVANCED_FACE ( 'NONE', ( #6419 ), #5935, .F. ) ; #4968 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; #4969 = CARTESIAN_POINT ( 'NONE', ( -4.000000000000000000, -6.000000000000060400, 0.0000000000000000000 ) ) ; #4970 = ORIENTED_EDGE ( 'NONE', *, *, #858, .F. ) ; #4971 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000090800, -9.558578643762039900, -7.658578643762727900 ) ) ; #4972 = AXIS2_PLACEMENT_3D ( 'NONE', #4799, #5803, #3689 ) ; #4973 = CIRCLE ( 'NONE', #3376, 0.3499999999999996400 ) ; #4974 = VERTEX_POINT ( 'NONE', #5135 ) ; #4975 = ORIENTED_EDGE ( 'NONE', *, *, #2586, .F. ) ; #4976 = CARTESIAN_POINT ( 'NONE', ( -4.500000000000060400, -6.000000000000060400, -3.499999999999999600 ) ) ; #4977 = VECTOR ( 'NONE', #3267, 1000.000000000000000 ) ; #4978 = ORIENTED_EDGE ( 'NONE', *, *, #182, .F. ) ; #4979 = CARTESIAN_POINT ( 'NONE', ( 0.4038432047111391600, -4.761557278767887700, -5.484640381139166200 ) ) ; #4980 = CIRCLE ( 'NONE', #1414, 1.050000000000000000 ) ; #4981 = ORIENTED_EDGE ( 'NONE', *, *, #6661, .F. ) ; #4982 = VERTEX_POINT ( 'NONE', #4642 ) ; #4983 = FACE_OUTER_BOUND ( 'NONE', #535, .T. ) ; #4984 = PLANE ( 'NONE', #2631 ) ; #4985 = LINE ( 'NONE', #320, #802 ) ; #4986 = ORIENTED_EDGE ( 'NONE', *, *, #5137, .T. ) ; #4987 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; #4988 = CARTESIAN_POINT ( 'NONE', ( 0.5046502304208467800, -5.299999999999280400, -4.226804672963380600 ) ) ; #4989 = FACE_OUTER_BOUND ( 'NONE', #5044, .T. ) ; #4990 = CARTESIAN_POINT ( 'NONE', ( 0.1772968622549983300, -2.628601053549802100, -10.78287801096702800 ) ) ; #4991 = LINE ( 'NONE', #1230, #2282 ) ; #4992 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #4993 = VERTEX_POINT ( 'NONE', #6826 ) ; #4994 = CARTESIAN_POINT ( 'NONE', ( 18.18468237128200100, -4.699999999999819900, -2.300000000000010000 ) ) ; #4995 = CARTESIAN_POINT ( 'NONE', ( -3.650000000000039900, -1.100000000000100000, -11.80000000000000100 ) ) ; #4996 =( BOUNDED_SURFACE ( ) B_SPLINE_SURFACE ( 3, 3, ( ( #6021, #2871, #6469, #6542 ), ( #714, #755, #1281, #4948 ), ( #167, #1827, #3827, #2340 ), ( #4348, #1212, #1381, #277 ) ), .UNSPECIFIED., .F., .F., .F. ) B_SPLINE_SURFACE_WITH_KNOTS ( ( 4, 4 ), ( 4, 4 ), ( 0.0000000000000000000, 1.000000000000000000 ), ( 0.0000000000000000000, 1.000000000000000000 ), .UNSPECIFIED. ) GEOMETRIC_REPRESENTATION_ITEM ( ) RATIONAL_B_SPLINE_SURFACE ( ( ( 1.000000000000000000, 0.3333333333333334300, 0.3333333333333334300, 1.000000000000000000), ( 0.7277763031966852900, 0.2425921010655618400, 0.2425921010655618400, 0.7277763031966852900), ( 0.7277763031966852900, 0.2425921010655618400, 0.2425921010655618400, 0.7277763031966852900), ( 1.000000000000000000, 0.3333333333333334300, 0.3333333333333334300, 1.000000000000000000) ) ) REPRESENTATION_ITEM ( '' ) SURFACE ( ) ); #4997 = VECTOR ( 'NONE', #4184, 1000.000000000000000 ) ; #4998 = EDGE_CURVE ( 'NONE', #5368, #1152, #2697, .T. ) ; #4999 = ORIENTED_EDGE ( 'NONE', *, *, #6372, .F. ) ; #5000 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; #5001 = COORDINATED_UNIVERSAL_TIME_OFFSET ( 8, 0, .BEHIND. ) ; #5002 = EDGE_CURVE ( 'NONE', #4817, #5916, #4921, .T. ) ; #5003 = EDGE_CURVE ( 'NONE', #6215, #1601, #4253, .T. ) ; #5004 = CARTESIAN_POINT ( 'NONE', ( 2.018537944984616600, -2.068363019588630400, -4.883502816590376700 ) ) ; #5005 = ORIENTED_EDGE ( 'NONE', *, *, #3070, .T. ) ; #5006 = CARTESIAN_POINT ( 'NONE', ( 4.000000000000000000, 3.799999999999910100, -2.700000000000001100 ) ) ; #5007 = CARTESIAN_POINT ( 'NONE', ( -4.339999999999969700, -2.559999999999050100, -9.800000000000000700 ) ) ; #5008 = CARTESIAN_POINT ( 'NONE', ( 3.200000000000979800, -2.599999999999050200, -11.80000000000000100 ) ) ; #5009 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; #5010 = ORIENTED_EDGE ( 'NONE', *, *, #439, .F. ) ; #5011 = CARTESIAN_POINT ( 'NONE', ( -0.3647301138596855700, -2.683712534754995300, -10.25852729316827100 ) ) ; #5012 = CARTESIAN_POINT ( 'NONE', ( 1.249999999999969800, -9.699999999999365100, -7.599999999999969400 ) ) ; #5013 = ORIENTED_EDGE ( 'NONE', *, *, #2372, .T. ) ; #5014 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #5015 = CARTESIAN_POINT ( 'NONE', ( 3.149999999999999900, 3.857637417314162700E-016, 0.0000000000000000000 ) ) ; #5016 = ORIENTED_EDGE ( 'NONE', *, *, #1170, .F. ) ; #5017 = CARTESIAN_POINT ( 'NONE', ( -0.8374636057402740100, -5.565644207361504700, -6.116796583962123000 ) ) ; #5018 = ADVANCED_FACE ( 'NONE', ( #5089 ), #3164, .T. ) ; #5019 = EDGE_CURVE ( 'NONE', #85, #1024, #6179, .T. ) ; #5020 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; #5021 = ORIENTED_EDGE ( 'NONE', *, *, #2222, .T. ) ; #5022 = FACE_OUTER_BOUND ( 'NONE', #307, .T. ) ; #5023 = VERTEX_POINT ( 'NONE', #2668 ) ; #5024 = ORIENTED_EDGE ( 'NONE', *, *, #6037, .T. ) ; #5025 = CARTESIAN_POINT ( 'NONE', ( -2.749999999999090100, -4.700000903659367100, -1.699610252709137700 ) ) ; #5026 = AXIS2_PLACEMENT_3D ( 'NONE', #2465, #6145, #4658 ) ; #5027 = CARTESIAN_POINT ( 'NONE', ( -1.128102625125252800, -10.58897966702492800, -7.800000000000071800 ) ) ; #5028 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; #5029 = VERTEX_POINT ( 'NONE', #5239 ) ; #5030 = LINE ( 'NONE', #1095, #4050 ) ; #5031 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; #5032 = ORIENTED_EDGE ( 'NONE', *, *, #3111, .F. ) ; #5033 = FACE_OUTER_BOUND ( 'NONE', #5633, .T. ) ; #5034 = ORIENTED_EDGE ( 'NONE', *, *, #6470, .F. ) ; #5035 = CARTESIAN_POINT ( 'NONE', ( -2.026786536416339800, -2.236097133178088100, -4.992430623593745200 ) ) ; #5036 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, ( #4756, #3601, #1553, #4731 ), .UNSPECIFIED., .F., .F., ( 4, 4 ), ( 0.0000000000000000000, 1.000000000000000000 ), .UNSPECIFIED. ) ; #5037 = EDGE_CURVE ( 'NONE', #6182, #5602, #3765, .T. ) ; #5038 = CIRCLE ( 'NONE', #616, 0.5000000000000001100 ) ; #5039 = CARTESIAN_POINT ( 'NONE', ( 0.1121076653245808700, -2.706528140139976100, -10.04147890228909600 ) ) ; #5040 = EDGE_CURVE ( 'NONE', #2661, #1771, #3522, .T. ) ; #5041 = ORIENTED_EDGE ( 'NONE', *, *, #2485, .F. ) ; #5042 = ORIENTED_EDGE ( 'NONE', *, *, #6344, .F. ) ; #5043 = ADVANCED_FACE ( 'NONE', ( #1816 ), #1600, .F. ) ; #5044 = EDGE_LOOP ( 'NONE', ( #5256, #6144, #457, #2321 ) ) ; #5045 = EDGE_CURVE ( 'NONE', #4065, #3301, #5508, .T. ) ; #5046 = VERTEX_POINT ( 'NONE', #2120 ) ; #5047 = CARTESIAN_POINT ( 'NONE', ( 0.9999999999999998900, 2.000000000000000400, 1.899999999999948200 ) ) ; #5048 = CARTESIAN_POINT ( 'NONE', ( 4.499999999999950300, -2.599999999999050200, -9.750000000000000000 ) ) ; #5049 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, ( #6387, #1670, #6417, #4834, #2797, #3282 ), .UNSPECIFIED., .F., .F., ( 4, 2, 4 ), ( 0.0000000000000000000, 0.5000000000000000000, 1.000000000000000000 ), .UNSPECIFIED. ) ; #5050 = CARTESIAN_POINT ( 'NONE', ( -3.599999999999940100, -6.049999999999999800, -14.40000000000000200 ) ) ; #5051 = AXIS2_PLACEMENT_3D ( 'NONE', #3930, #1832, #2381 ) ; #5052 = EDGE_LOOP ( 'NONE', ( #4297, #2688, #4526, #787 ) ) ; #5053 = FACE_OUTER_BOUND ( 'NONE', #5306, .T. ) ; #5054 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000091000, -8.821460183659882000, -8.475735931287980300 ) ) ; #5055 = VERTEX_POINT ( 'NONE', #10 ) ; #5056 = CARTESIAN_POINT ( 'NONE', ( -2.037134352765185500, -3.043296795206646500, -6.084124547720120900 ) ) ; #5057 = VECTOR ( 'NONE', #2158, 1000.000000000000000 ) ; #5058 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000089900, -5.499999999999279700, -7.400000000000000400 ) ) ; #5059 = EDGE_CURVE ( 'NONE', #2623, #1917, #6090, .T. ) ; #5060 = CARTESIAN_POINT ( 'NONE', ( 2.289217213497130000, -2.199999999999130200, -9.800000000000000700 ) ) ; #5061 = FACE_OUTER_BOUND ( 'NONE', #5611, .T. ) ; #5062 = CIRCLE ( 'NONE', #6493, 0.2699999999999998500 ) ; #5063 = ORIENTED_EDGE ( 'NONE', *, *, #665, .T. ) ; #5064 = CARTESIAN_POINT ( 'NONE', ( -4.339999999999969700, -2.199999999999130200, -2.779157999888000100 ) ) ; #5065 = PLANE ( 'NONE', #311 ) ; #5066 = AXIS2_PLACEMENT_3D ( 'NONE', #119, #4846, #1688 ) ; #5067 = VERTEX_POINT ( 'NONE', #4262 ) ; #5068 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000000000, 0.0000000000000000000, -9.650000000000000400 ) ) ; #5069 = CARTESIAN_POINT ( 'NONE', ( -4.500000000000000900, 3.799999999999910100, -0.4999999999999989500 ) ) ; #5070 = VECTOR ( 'NONE', #5139, 1000.000000000000000 ) ; #5071 = CARTESIAN_POINT ( 'NONE', ( 2.090790021169699900, -2.559999999999065200, -9.800000000000000700 ) ) ; #5072 = ORIENTED_EDGE ( 'NONE', *, *, #946, .F. ) ; #5073 = PLANE ( 'NONE', #4676 ) ; #5074 = CARTESIAN_POINT ( 'NONE', ( 4.292893218813453000, 4.299999999999910100, -0.2071067811865469100 ) ) ; #5075 = ORIENTED_EDGE ( 'NONE', *, *, #2939, .F. ) ; #5076 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #5077 = VECTOR ( 'NONE', #5326, 1000.000000000000000 ) ; #5078 = VECTOR ( 'NONE', #5362, 1000.000000000000000 ) ; #5079 = ORIENTED_EDGE ( 'NONE', *, *, #199, .F. ) ; #5080 = EDGE_CURVE ( 'NONE', #6025, #4598, #5170, .T. ) ; #5081 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #5082 = ORIENTED_EDGE ( 'NONE', *, *, #219, .F. ) ; #5083 = EDGE_CURVE ( 'NONE', #5520, #5163, #486, .T. ) ; #5084 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; #5085 = CARTESIAN_POINT ( 'NONE', ( -2.010880259306311300, -2.283098795542530800, -5.375228444583565400 ) ) ; #5086 = LINE ( 'NONE', #1166, #4247 ) ; #5087 = CARTESIAN_POINT ( 'NONE', ( 3.149999999999999900, 3.857637417314162700E-016, -9.400000000000000400 ) ) ; #5088 = CARTESIAN_POINT ( 'NONE', ( 0.2018746573666212700, -2.702858777890325900, -10.07636295804939900 ) ) ; #5089 = FACE_OUTER_BOUND ( 'NONE', #4322, .T. ) ; #5090 = EDGE_CURVE ( 'NONE', #3118, #3811, #3754, .T. ) ; #5091 = VERTEX_POINT ( 'NONE', #3223 ) ; #5092 = CARTESIAN_POINT ( 'NONE', ( -4.000000000000000000, 4.299999999999910100, -0.4999999999999988300 ) ) ; #5093 = AXIS2_PLACEMENT_3D ( 'NONE', #693, #3221, #4893 ) ; #5094 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #5095 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -13.94999999999999900 ) ) ; #5096 = CARTESIAN_POINT ( 'NONE', ( 1.249999999999969800, -8.241421356236895000, -7.658578643762964200 ) ) ; #5097 = ORIENTED_EDGE ( 'NONE', *, *, #6287, .F. ) ; #5098 = CARTESIAN_POINT ( 'NONE', ( 4.000000000000000000, 3.799999999999910100, -0.4999999999999990600 ) ) ; #5099 = AXIS2_PLACEMENT_3D ( 'NONE', #1101, #1073, #2177 ) ; #5100 = EDGE_CURVE ( 'NONE', #4287, #2752, #5332, .T. ) ; #5101 = EDGE_CURVE ( 'NONE', #6684, #6768, #1484, .T. ) ; #5102 = CARTESIAN_POINT ( 'NONE', ( 2.942893218813433400, 5.885786437626863200, -9.900000000000023400 ) ) ; #5103 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #5104 = AXIS2_PLACEMENT_3D ( 'NONE', #4417, #2365, #6561 ) ; #5105 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #5106 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -5.625000000000020400 ) ) ; #5107 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); #5108 = CARTESIAN_POINT ( 'NONE', ( 2.649999999999963100, 1.317566823873239600E-008, -9.900000000000000400 ) ) ; #5109 = AXIS2_PLACEMENT_3D ( 'NONE', #863, #2433, #2968 ) ; #5110 = ORIENTED_EDGE ( 'NONE', *, *, #2741, .F. ) ; #5111 = CARTESIAN_POINT ( 'NONE', ( 0.2800335523344023600, -2.696685305249880000, -10.13509962669882300 ) ) ; #5112 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -11.80000000000000100 ) ) ; #5113 = ADVANCED_FACE ( 'NONE', ( #6753 ), #1981, .F. ) ; #5114 = CARTESIAN_POINT ( 'NONE', ( -2.749999999999090100, -4.263156855141443400, -1.596347211953935000 ) ) ; #5115 = VECTOR ( 'NONE', #1053, 1000.000000000000000 ) ; #5116 = ORIENTED_EDGE ( 'NONE', *, *, #1499, .T. ) ; #5117 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; #5118 = FACE_OUTER_BOUND ( 'NONE', #3695, .T. ) ; #5119 = ORIENTED_EDGE ( 'NONE', *, *, #4764, .T. ) ; #5120 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #5121 = EDGE_CURVE ( 'NONE', #1336, #5875, #5915, .T. ) ; #5122 = VERTEX_POINT ( 'NONE', #1758 ) ; #5123 = ADVANCED_FACE ( 'NONE', ( #1306 ), #3182, .T. ) ; #5124 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000089900, -5.499999999999279700, -7.800000000000070900 ) ) ; #5125 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; #5126 = EDGE_LOOP ( 'NONE', ( #6551, #3543, #2653, #1960 ) ) ; #5127 = VECTOR ( 'NONE', #5076, 1000.000000000000000 ) ; #5128 = VERTEX_POINT ( 'NONE', #3247 ) ; #5129 = VECTOR ( 'NONE', #5285, 1000.000000000000000 ) ; #5130 = CARTESIAN_POINT ( 'NONE', ( 18.18468237128200100, -5.699999999999819900, -7.399999999998890100 ) ) ; #5131 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; #5132 = CARTESIAN_POINT ( 'NONE', ( -0.7993101283198632600, -5.299999999999279500, -5.714919986176916200 ) ) ; #5133 = CARTESIAN_POINT ( 'NONE', ( -1.990616932436605900, -2.038239429780247700, -5.375203189306622800 ) ) ; #5134 = FACE_OUTER_BOUND ( 'NONE', #1028, .T. ) ; #5135 = CARTESIAN_POINT ( 'NONE', ( -1.199999999999930000, 1.469576158976738300E-016, -13.77999999999999900 ) ) ; #5136 = ORIENTED_EDGE ( 'NONE', *, *, #5002, .T. ) ; #5137 = EDGE_CURVE ( 'NONE', #5782, #5317, #575, .T. ) ; #5138 = EDGE_LOOP ( 'NONE', ( #2423, #6600, #967, #4453 ) ) ; #5139 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; #5140 = CARTESIAN_POINT ( 'NONE', ( 0.6192365151811132200, 2.578180903858287500, -9.899999999999998600 ) ) ; #5141 = VECTOR ( 'NONE', #4423, 1000.000000000000000 ) ; #5142 = ORIENTED_EDGE ( 'NONE', *, *, #2092, .T. ) ; #5143 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; #5144 = CARTESIAN_POINT ( 'NONE', ( 2.750000000000909500, -4.263156855141459400, -1.596347211953927900 ) ) ; #5145 = EDGE_CURVE ( 'NONE', #1807, #5619, #3361, .T. ) ; #5146 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.1045284632673960400, -0.9945218953683003800 ) ) ; #5147 = EDGE_CURVE ( 'NONE', #3130, #2918, #3036, .T. ) ; #5148 = LINE ( 'NONE', #669, #2442 ) ; #5149 = CARTESIAN_POINT ( 'NONE', ( 4.500000000000000000, 4.092893218813362200, -0.4999999999999990600 ) ) ; #5150 = ORIENTED_EDGE ( 'NONE', *, *, #212, .T. ) ; #5151 = VECTOR ( 'NONE', #3117, 1000.000000000000000 ) ; #5152 = EDGE_LOOP ( 'NONE', ( #3941, #1241, #1652, #6541 ) ) ; #5153 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; #5154 = CARTESIAN_POINT ( 'NONE', ( 3.050000000000940000, -5.500000000000009800, -5.600000000000860300 ) ) ; #5155 = CARTESIAN_POINT ( 'NONE', ( -1.000000000000000000, 1.224646799147353200E-016, -10.15000000000000000 ) ) ; #5156 = VECTOR ( 'NONE', #1240, 1000.000000000000000 ) ; #5157 = ORIENTED_EDGE ( 'NONE', *, *, #737, .T. ) ; #5158 = CARTESIAN_POINT ( 'NONE', ( -2.989999999999950000, -2.559999999999050100, -2.779157999888000100 ) ) ; #5159 = ADVANCED_FACE ( 'NONE', ( #1891 ), #5936, .T. ) ; #5160 = VECTOR ( 'NONE', #5907, 1000.000000000000000 ) ; #5161 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; #5162 = VECTOR ( 'NONE', #251, 1000.000000000000000 ) ; #5163 = VERTEX_POINT ( 'NONE', #148 ) ; #5164 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; #5165 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; #5166 = FACE_OUTER_BOUND ( 'NONE', #1679, .T. ) ; #5167 = CYLINDRICAL_SURFACE ( 'NONE', #2857, 0.5999999999999998700 ) ; #5168 = ORIENTED_EDGE ( 'NONE', *, *, #3226, .F. ) ; #5169 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000090800, -8.970710678117770300, -8.246446609406030200 ) ) ; #5170 = CIRCLE ( 'NONE', #4621, 0.5000000000138523600 ) ; #5171 = VERTEX_POINT ( 'NONE', #5914 ) ; #5172 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #5173 = EDGE_CURVE ( 'NONE', #5806, #1104, #4424, .T. ) ; #5174 = CARTESIAN_POINT ( 'NONE', ( 0.5031179749632339600, -5.300000000004742700, -5.974091108866725900 ) ) ; #5175 = PERSON_AND_ORGANIZATION ( #2374, #4427 ) ; #5176 = EDGE_LOOP ( 'NONE', ( #1927, #1441, #430, #3527 ) ) ; #5177 = CARTESIAN_POINT ( 'NONE', ( -4.500000000000000900, -6.000000000000062200, -0.4999999999999993900 ) ) ; #5178 = EDGE_CURVE ( 'NONE', #5602, #1770, #3029, .T. ) ; #5179 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #5180 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; #5181 = ORIENTED_EDGE ( 'NONE', *, *, #4689, .F. ) ; #5182 = AXIS2_PLACEMENT_3D ( 'NONE', #5874, #628, #2765 ) ; #5183 = CARTESIAN_POINT ( 'NONE', ( 4.000000000000000000, -6.500000000000060400, -7.349999999999999600 ) ) ; #5184 = CARTESIAN_POINT ( 'NONE', ( 3.900000000000130000, 0.04999999999993900300, -13.44999999999999900 ) ) ; #5185 = VERTEX_POINT ( 'NONE', #4354 ) ; #5186 = EDGE_LOOP ( 'NONE', ( #1288, #698, #1609, #6392 ) ) ; #5187 = EDGE_CURVE ( 'NONE', #3902, #3969, #5499, .T. ) ; #5188 = ORIENTED_EDGE ( 'NONE', *, *, #6130, .F. ) ; #5189 = CARTESIAN_POINT ( 'NONE', ( -2.299999999999892400, -5.522948246745391200E-014, -13.77999999999999900 ) ) ; #5190 = ORIENTED_EDGE ( 'NONE', *, *, #1316, .F. ) ; #5191 = LINE ( 'NONE', #1995, #3781 ) ; #5192 = VERTEX_POINT ( 'NONE', #175 ) ; #5193 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; #5194 = AXIS2_PLACEMENT_3D ( 'NONE', #1440, #386, #6672 ) ; #5195 = ORIENTED_EDGE ( 'NONE', *, *, #6372, .T. ) ; #5196 = LINE ( 'NONE', #659, #3135 ) ; #5197 = CARTESIAN_POINT ( 'NONE', ( -2.164999999999992900, -2.970259389424275000, -3.494704195690411000 ) ) ; #5198 = EDGE_LOOP ( 'NONE', ( #781, #2391 ) ) ; #5199 = LINE ( 'NONE', #1268, #1592 ) ; #5200 = ORIENTED_EDGE ( 'NONE', *, *, #3031, .F. ) ; #5201 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #5202 = ORIENTED_EDGE ( 'NONE', *, *, #3885, .F. ) ; #5203 = LINE ( 'NONE', #6817, #2663 ) ; #5204 = ORIENTED_EDGE ( 'NONE', *, *, #249, .T. ) ; #5205 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #5206 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #5207 = EDGE_CURVE ( 'NONE', #1929, #5348, #1476, .T. ) ; #5208 = ORIENTED_EDGE ( 'NONE', *, *, #5855, .F. ) ; #5209 = VECTOR ( 'NONE', #380, 1000.000000000000000 ) ; #5210 = ORIENTED_EDGE ( 'NONE', *, *, #6337, .F. ) ; #5211 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #5212 = CARTESIAN_POINT ( 'NONE', ( -2.008575457553394700, -2.012714930059361400, -4.987091724889037200 ) ) ; #5213 = ORIENTED_EDGE ( 'NONE', *, *, #24, .F. ) ; #5214 = ORIENTED_EDGE ( 'NONE', *, *, #4078, .F. ) ; #5215 = CARTESIAN_POINT ( 'NONE', ( 1.900000000000900100, -5.500000000000009800, -11.90000000000010000 ) ) ; #5216 = LINE ( 'NONE', #4181, #459 ) ; #5217 = EDGE_CURVE ( 'NONE', #3780, #2184, #3674, .T. ) ; #5218 = VERTEX_POINT ( 'NONE', #1071 ) ; #5219 = LINE ( 'NONE', #612, #1698 ) ; #5220 = EDGE_CURVE ( 'NONE', #4329, #2314, #5086, .T. ) ; #5221 = CARTESIAN_POINT ( 'NONE', ( 18.18468237128200100, -2.487698303561229900, -5.155822334097729600 ) ) ; #5222 = VECTOR ( 'NONE', #1291, 1000.000000000000000 ) ; #5223 = CARTESIAN_POINT ( 'NONE', ( 0.4400971163233964300, -11.22015205093459200, -7.599999999999870000 ) ) ; #5224 = AXIS2_PLACEMENT_3D ( 'NONE', #6373, #3730, #1655 ) ; #5225 = LINE ( 'NONE', #4771, #1959 ) ; #5226 = ORIENTED_EDGE ( 'NONE', *, *, #3229, .F. ) ; #5227 = EDGE_CURVE ( 'NONE', #1040, #645, #1394, .T. ) ; #5228 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; #5229 = EDGE_CURVE ( 'NONE', #5274, #41, #6000, .T. ) ; #5230 = CARTESIAN_POINT ( 'NONE', ( 2.750000000000910800, -4.857135088588630200, -1.715786339578214900 ) ) ; #5231 = CARTESIAN_POINT ( 'NONE', ( -9.662512969806920500, -8.499999999999920100, -13.27999999999999900 ) ) ; #5232 = AXIS2_PLACEMENT_3D ( 'NONE', #6629, #1934, #3449 ) ; #5233 = CARTESIAN_POINT ( 'NONE', ( -1.190714193910480100E-014, -9.819999999999989600, -13.77999999999999900 ) ) ; #5234 = LINE ( 'NONE', #4059, #5070 ) ; #5235 = VERTEX_POINT ( 'NONE', #6314 ) ; #5236 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; #5237 = CARTESIAN_POINT ( 'NONE', ( 4.000000000000000000, -6.000000000000061300, 1.301042606982605300E-015 ) ) ; #5238 = VECTOR ( 'NONE', #1520, 1000.000000000000000 ) ; #5239 = CARTESIAN_POINT ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -10.15000000000000000 ) ) ; #5240 = FACE_OUTER_BOUND ( 'NONE', #3690, .T. ) ; #5241 = ORIENTED_EDGE ( 'NONE', *, *, #176, .T. ) ; #5242 = ORIENTED_EDGE ( 'NONE', *, *, #3286, .T. ) ; #5243 = FACE_OUTER_BOUND ( 'NONE', #4531, .T. ) ; #5244 = CARTESIAN_POINT ( 'NONE', ( 1.550000000000050000, -3.350000000000020100, -13.44999999999999900 ) ) ; #5245 = PLANE ( 'NONE', #6177 ) ; #5246 = CARTESIAN_POINT ( 'NONE', ( -0.3126745147837315900, -11.27067752756654600, -7.599999999999870000 ) ) ; #5247 = CARTESIAN_POINT ( 'NONE', ( -3.650000000000039900, -5.150000000000099800, -11.80000000000000100 ) ) ; #5248 = FACE_BOUND ( 'NONE', #955, .T. ) ; #5249 = PLANE ( 'NONE', #3918 ) ; #5250 = VERTEX_POINT ( 'NONE', #3636 ) ; #5251 = CARTESIAN_POINT ( 'NONE', ( 1.479999999999979600, -7.457512886940066600, -13.42000000000004800 ) ) ; #5252 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; #5253 = EDGE_CURVE ( 'NONE', #4106, #4832, #5584, .T. ) ; #5254 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 1.836970198721029900E-016, -9.150000000000000400 ) ) ; #5255 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, ( #6747, #1985, #5144, #6217 ), .UNSPECIFIED., .F., .F., ( 4, 4 ), ( 0.0000000000000000000, 1.000000000000000000 ), .UNSPECIFIED. ) ; #5256 = ORIENTED_EDGE ( 'NONE', *, *, #181, .F. ) ; #5257 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; #5258 = ADVANCED_FACE ( 'NONE', ( #2788 ), #5249, .F. ) ; #5259 = ORIENTED_EDGE ( 'NONE', *, *, #340, .F. ) ; #5260 = CARTESIAN_POINT ( 'NONE', ( -2.500000000000060000, 4.299999999999919900, -1.000000000000000000 ) ) ; #5261 = EDGE_CURVE ( 'NONE', #5701, #1336, #4915, .T. ) ; #5262 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; #5263 = AXIS2_PLACEMENT_3D ( 'NONE', #406, #1461, #1991 ) ; #5264 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; #5265 = ADVANCED_FACE ( 'NONE', ( #2622 ), #4191, .T. ) ; #5266 = EDGE_LOOP ( 'NONE', ( #1012, #3791, #5032, #3168 ) ) ; #5267 = CARTESIAN_POINT ( 'NONE', ( 1.075528555105620000E-013, -5.551115123125780200E-014, -13.77999999999999900 ) ) ; #5268 = CARTESIAN_POINT ( 'NONE', ( 3.900000000000130000, 0.04999999999993900300, -13.44999999999999900 ) ) ; #5269 = CARTESIAN_POINT ( 'NONE', ( -4.000000000000000000, 4.299999999999919900, -1.000000000000000000 ) ) ; #5270 = VECTOR ( 'NONE', #940, 1000.000000000000000 ) ; #5271 = CARTESIAN_POINT ( 'NONE', ( -2.024980546198221100, -3.262063269921724000, -6.669242063142882600 ) ) ; #5272 = ORIENTED_EDGE ( 'NONE', *, *, #2422, .T. ) ; #5273 = LINE ( 'NONE', #1926, #6698 ) ; #5274 = VERTEX_POINT ( 'NONE', #4769 ) ; #5275 = CARTESIAN_POINT ( 'NONE', ( -2.501536146639999900, -1.199999999999980600, -9.900000000000009200 ) ) ; #5276 = AXIS2_PLACEMENT_3D ( 'NONE', #6444, #1191, #2206 ) ; #5277 = EDGE_LOOP ( 'NONE', ( #2834, #3002, #3514, #2984 ) ) ; #5278 = CARTESIAN_POINT ( 'NONE', ( 1.050000000000000000, 0.0000000000000000000, -10.15000000000000000 ) ) ; #5279 = PLANE ( 'NONE', #606 ) ; #5280 = VECTOR ( 'NONE', #1456, 1000.000000000000000 ) ; #5281 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #5282 = ORIENTED_EDGE ( 'NONE', *, *, #6777, .T. ) ; #5283 = LINE ( 'NONE', #4925, #5861 ) ; #5284 = LINE ( 'NONE', #1847, #374 ) ; #5285 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; #5286 = ORIENTED_EDGE ( 'NONE', *, *, #36, .T. ) ; #5287 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; #5288 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000197400, -10.04999999999840000, -7.599999999999870900 ) ) ; #5289 = ORIENTED_EDGE ( 'NONE', *, *, #880, .T. ) ; #5290 = CARTESIAN_POINT ( 'NONE', ( -0.07562566498322383100, -2.707643179307453400, -10.03084241927149900 ) ) ; #5291 = VERTEX_POINT ( 'NONE', #5790 ) ; #5292 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; #5293 = FACE_OUTER_BOUND ( 'NONE', #2704, .T. ) ; #5294 = ORIENTED_EDGE ( 'NONE', *, *, #4046, .T. ) ; #5295 = CARTESIAN_POINT ( 'NONE', ( -4.500000000000060400, -2.150000000000039900, -9.750000000000000000 ) ) ; #5296 = ADVANCED_FACE ( 'NONE', ( #1222 ), #5764, .T. ) ; #5297 = FACE_OUTER_BOUND ( 'NONE', #6655, .T. ) ; #5298 = EDGE_CURVE ( 'NONE', #6788, #6622, #836, .T. ) ; #5299 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.8660254037846177900, -0.4999999999996895800 ) ) ; #5300 = VECTOR ( 'NONE', #260, 1000.000000000000000 ) ; #5301 = CARTESIAN_POINT ( 'NONE', ( 2.890671664372513700, -2.430323138702938000, -9.800000000000000700 ) ) ; #5302 = PLANE ( 'NONE', #6576 ) ; #5303 = ORIENTED_EDGE ( 'NONE', *, *, #464, .F. ) ; #5304 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; #5305 = CYLINDRICAL_SURFACE ( 'NONE', #3290, 0.5000000000000004400 ) ; #5306 = EDGE_LOOP ( 'NONE', ( #4022, #1583, #3977, #3138 ) ) ; #5307 = ADVANCED_FACE ( 'NONE', ( #6505 ), #3699, .T. ) ; #5308 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.7071067811866840200, 0.7071067811864111300 ) ) ; #5309 = CARTESIAN_POINT ( 'NONE', ( -4.500000000000060400, 3.799999999999911000, -11.80000000000000100 ) ) ; #5310 = EDGE_CURVE ( 'NONE', #4905, #3580, #1811, .T. ) ; #5311 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #5312 = AXIS2_PLACEMENT_3D ( 'NONE', #6621, #2472, #813 ) ; #5313 = FACE_OUTER_BOUND ( 'NONE', #5364, .T. ) ; #5314 = ORIENTED_EDGE ( 'NONE', *, *, #2635, .T. ) ; #5315 = CARTESIAN_POINT ( 'NONE', ( 0.06704951458402869100, -2.802243206817797400, -9.981875084696190100 ) ) ; #5316 = CARTESIAN_POINT ( 'NONE', ( -2.749999999999090100, -4.700000000000730300, -2.300000000000900000 ) ) ; #5317 = VERTEX_POINT ( 'NONE', #1032 ) ; #5318 = AXIS2_PLACEMENT_3D ( 'NONE', #3453, #1963, #5582 ) ; #5319 = CIRCLE ( 'NONE', #2987, 1.575000000000000000 ) ; #5320 = MANIFOLD_SOLID_BREP ( 'Imported6', #1017 ) ; #5321 = VECTOR ( 'NONE', #5125, 1000.000000000000000 ) ; #5322 = ORIENTED_EDGE ( 'NONE', *, *, #3496, .T. ) ; #5323 = EDGE_CURVE ( 'NONE', #2314, #1712, #3061, .T. ) ; #5324 = AXIS2_PLACEMENT_3D ( 'NONE', #5098, #349, #2913 ) ; #5325 = ADVANCED_FACE ( 'NONE', ( #5166 ), #5843, .T. ) ; #5326 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; #5327 = VECTOR ( 'NONE', #6518, 1000.000000000000000 ) ; #5328 = VECTOR ( 'NONE', #4325, 1000.000000000000000 ) ; #5329 = EDGE_LOOP ( 'NONE', ( #5322, #4825, #6367, #3072, #1764, #142, #2090, #2367 ) ) ; #5330 = CARTESIAN_POINT ( 'NONE', ( -9.662512969806920500, 2.300000000000019800, -13.77999999999999900 ) ) ; #5331 = CALENDAR_DATE ( 2018, 27, 9 ) ; #5332 = CIRCLE ( 'NONE', #3649, 1.000000000000000900 ) ; #5333 = ORIENTED_EDGE ( 'NONE', *, *, #6206, .F. ) ; #5334 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #5335 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, ( #3772, #5408, #1163, #2224, #6445, #3800, #1193, #4797, #2252, #6356 ), .UNSPECIFIED., .F., .F., ( 4, 2, 2, 2, 4 ), ( 0.3795375100427818600, 0.5346531325320864600, 0.6897687550213909000, 0.8448843775106955600, 1.000000000000000000 ), .UNSPECIFIED. ) ; #5336 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; #5337 = ORIENTED_EDGE ( 'NONE', *, *, #3484, .T. ) ; #5338 = PLANE ( 'NONE', #2294 ) ; #5339 = ADVANCED_FACE ( 'NONE', ( #6670 ), #2781, .T. ) ; #5340 = CARTESIAN_POINT ( 'NONE', ( 2.499999999999949800, 2.400000000000960000, -2.549999999999999800 ) ) ; #5341 = VERTEX_POINT ( 'NONE', #5516 ) ; #5342 = CARTESIAN_POINT ( 'NONE', ( -2.039926438902935700, -3.124142789761836300, -6.159514657296564400 ) ) ; #5343 = CARTESIAN_POINT ( 'NONE', ( -2.616278500006705300, -0.4251881505321204500, -9.900000000000002100 ) ) ; #5344 = ORIENTED_EDGE ( 'NONE', *, *, #1979, .F. ) ; #5345 = EDGE_CURVE ( 'NONE', #6565, #5756, #3178, .T. ) ; #5346 = CARTESIAN_POINT ( 'NONE', ( 1.250000000000133200, -10.04999999999840000, -7.800000000000070900 ) ) ; #5347 = CARTESIAN_POINT ( 'NONE', ( 4.499999999999950300, -2.599999999999050200, -9.750000000000000000 ) ) ; #5348 = VERTEX_POINT ( 'NONE', #3921 ) ; #5349 = EDGE_LOOP ( 'NONE', ( #5593, #5034, #6638, #809 ) ) ; #5350 = EDGE_CURVE ( 'NONE', #4982, #4118, #900, .T. ) ; #5351 = ORIENTED_EDGE ( 'NONE', *, *, #4954, .T. ) ; #5352 = FACE_OUTER_BOUND ( 'NONE', #2349, .T. ) ; #5353 = AXIS2_PLACEMENT_3D ( 'NONE', #455, #4690, #5201 ) ; #5354 = ADVANCED_FACE ( 'NONE', ( #6172 ), #3391, .F. ) ; #5355 = ORIENTED_EDGE ( 'NONE', *, *, #5045, .F. ) ; #5356 = VECTOR ( 'NONE', #4683, 1000.000000000000000 ) ; #5357 = ORIENTED_EDGE ( 'NONE', *, *, #4651, .T. ) ; #5358 = CARTESIAN_POINT ( 'NONE', ( 0.03799085093867619200, -2.699176050829013900, -10.03108766364310800 ) ) ; #5359 = EDGE_CURVE ( 'NONE', #2560, #4061, #411, .T. ) ; #5360 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, ( #3338, #4901, #3911, #3360, #224, #4434 ), .UNSPECIFIED., .F., .F., ( 4, 2, 4 ), ( 0.0000000000000000000, 0.5000000000000000000, 1.000000000000000000 ), .UNSPECIFIED. ) ; #5361 = EDGE_CURVE ( 'NONE', #4446, #5725, #4098, .T. ) ; #5362 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; #5363 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #5364 = EDGE_LOOP ( 'NONE', ( #3447, #727, #602, #4064, #6737 ) ) ; #5365 = AXIS2_PLACEMENT_3D ( 'NONE', #6506, #4001, #1338 ) ; #5366 = ORIENTED_EDGE ( 'NONE', *, *, #6514, .T. ) ; #5367 = LINE ( 'NONE', #6221, #6779 ) ; #5368 = VERTEX_POINT ( 'NONE', #1236 ) ; #5369 = VECTOR ( 'NONE', #6104, 1000.000000000000000 ) ; #5370 = EDGE_LOOP ( 'NONE', ( #4958, #238, #515, #3369 ) ) ; #5371 = ORIENTED_EDGE ( 'NONE', *, *, #1405, .T. ) ; #5372 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -9.650000000000000400 ) ) ; #5373 = VERTEX_POINT ( 'NONE', #4440 ) ; #5374 = LINE ( 'NONE', #2375, #1174 ) ; #5375 = ORIENTED_EDGE ( 'NONE', *, *, #4162, .T. ) ; #5376 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; #5377 = CARTESIAN_POINT ( 'NONE', ( 2.429328335627759700, -2.430323138703008200, -2.779157999888000100 ) ) ; #5378 = ORIENTED_EDGE ( 'NONE', *, *, #4390, .T. ) ; #5379 = ADVANCED_FACE ( 'NONE', ( #5243 ), #2463, .T. ) ; #5380 = FACE_BOUND ( 'NONE', #1010, .T. ) ; #5381 = ORIENTED_EDGE ( 'NONE', *, *, #1856, .T. ) ; #5382 = EDGE_CURVE ( 'NONE', #1779, #3801, #2561, .T. ) ; #5383 = CARTESIAN_POINT ( 'NONE', ( 1.098901979466057300, -10.67028855198222600, -7.800000000000070000 ) ) ; #5384 = ORIENTED_EDGE ( 'NONE', *, *, #111, .T. ) ; #5385 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #5386 = ORIENTED_EDGE ( 'NONE', *, *, #6607, .F. ) ; #5387 = PLANE ( 'NONE', #831 ) ; #5388 = LINE ( 'NONE', #1619, #1535 ) ; #5389 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #5390 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; #5391 = ORIENTED_EDGE ( 'NONE', *, *, #1577, .F. ) ; #5392 = AXIS2_PLACEMENT_3D ( 'NONE', #4148, #1029, #6349 ) ; #5393 = LINE ( 'NONE', #4931, #4810 ) ; #5394 = ORIENTED_EDGE ( 'NONE', *, *, #6453, .F. ) ; #5395 = AXIS2_PLACEMENT_3D ( 'NONE', #2717, #1726, #83 ) ; #5396 = CARTESIAN_POINT ( 'NONE', ( 4.500000000000060400, -10.19999999999910000, -10.80000000000000100 ) ) ; #5397 = ORIENTED_EDGE ( 'NONE', *, *, #4465, .T. ) ; #5398 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; #5399 = EDGE_CURVE ( 'NONE', #1054, #3015, #3103, .T. ) ; #5400 = ADVANCED_FACE ( 'NONE', ( #70 ), #4996, .T. ) ; #5401 = LINE ( 'NONE', #3094, #3999 ) ; #5402 = ORIENTED_EDGE ( 'NONE', *, *, #3314, .T. ) ; #5403 = EDGE_CURVE ( 'NONE', #2328, #4619, #3847, .T. ) ; #5404 = CARTESIAN_POINT ( 'NONE', ( 18.18468237128200100, -11.29999999999930300, -7.800000000000070000 ) ) ; #5405 = ORIENTED_EDGE ( 'NONE', *, *, #4872, .F. ) ; #5406 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; #5407 = ORIENTED_EDGE ( 'NONE', *, *, #4122, .F. ) ; #5408 = CARTESIAN_POINT ( 'NONE', ( -2.749999999999090100, -4.777225975806541000, -1.699310089715351200 ) ) ; #5409 = VECTOR ( 'NONE', #4856, 1000.000000000000000 ) ; #5410 = ORIENTED_EDGE ( 'NONE', *, *, #569, .T. ) ; #5411 = EDGE_CURVE ( 'NONE', #3249, #3919, #4753, .T. ) ; #5412 = CARTESIAN_POINT ( 'NONE', ( 1.005621433374612300, -10.81204058932187500, -7.800000000000070900 ) ) ; #5413 = AXIS2_PLACEMENT_3D ( 'NONE', #5130, #1505, #6225 ) ; #5414 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -13.77999999999999900 ) ) ; #5415 = LINE ( 'NONE', #6787, #5238 ) ; #5416 = CARTESIAN_POINT ( 'NONE', ( -0.07573619045900184500, -2.700857722887389100, -10.03512239021845300 ) ) ; #5417 = FACE_OUTER_BOUND ( 'NONE', #378, .T. ) ; #5418 = ORIENTED_EDGE ( 'NONE', *, *, #4854, .T. ) ; #5419 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #5420 = VECTOR ( 'NONE', #4867, 1000.000000000000100 ) ; #5421 = EDGE_CURVE ( 'NONE', #2747, #4656, #1561, .T. ) ; #5422 = ORIENTED_EDGE ( 'NONE', *, *, #4704, .F. ) ; #5423 = AXIS2_PLACEMENT_3D ( 'NONE', #2123, #2647, #3691 ) ; #5424 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; #5425 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; #5426 = VECTOR ( 'NONE', #888, 1000.000000000000000 ) ; #5427 = CARTESIAN_POINT ( 'NONE', ( -0.9999999999999998900, 1.999999999999999800, -2.100000000000050300 ) ) ; #5428 = ORIENTED_EDGE ( 'NONE', *, *, #3417, .T. ) ; #5429 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; #5430 = CARTESIAN_POINT ( 'NONE', ( 1.992512554540781400, -1.998896359596419100, -5.275585499906072500 ) ) ; #5431 = VERTEX_POINT ( 'NONE', #4533 ) ; #5432 = ADVANCED_FACE ( 'NONE', ( #2537 ), #6141, .T. ) ; #5433 = CARTESIAN_POINT ( 'NONE', ( -1.479999999999979600, -8.299999999999956300, -12.93358983848629200 ) ) ; #5434 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; #5435 = CARTESIAN_POINT ( 'NONE', ( 2.024980546198863300, -3.262063269921744000, -6.669242063142871000 ) ) ; #5436 = EDGE_CURVE ( 'NONE', #3647, #2582, #6586, .T. ) ; #5437 = EDGE_CURVE ( 'NONE', #6795, #1362, #1057, .T. ) ; #5438 = ORIENTED_EDGE ( 'NONE', *, *, #1041, .F. ) ; #5439 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #5440 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -10.15000000000000000 ) ) ; #5441 = CARTESIAN_POINT ( 'NONE', ( 4.860000000000080300, -1.949999999999100000, -9.800000000000000700 ) ) ; #5442 = CARTESIAN_POINT ( 'NONE', ( -2.299999999999080100, -1.199999999999980000, -11.80000000000000100 ) ) ; #5443 = VERTEX_POINT ( 'NONE', #6095 ) ; #5444 = LINE ( 'NONE', #3872, #190 ) ; #5445 = ORIENTED_EDGE ( 'NONE', *, *, #654, .T. ) ; #5446 = CARTESIAN_POINT ( 'NONE', ( -1.550000000000830000, -3.350000000000020100, -13.44999999999999900 ) ) ; #5447 = CARTESIAN_POINT ( 'NONE', ( 1.200000000000090100, -3.100000000000049800, -13.77999999999999900 ) ) ; #5448 = EDGE_CURVE ( 'NONE', #2364, #286, #6246, .T. ) ; #5449 = PLANE ( 'NONE', #1451 ) ; #5450 = VECTOR ( 'NONE', #1653, 1000.000000000000000 ) ; #5451 = ORIENTED_EDGE ( 'NONE', *, *, #4045, .F. ) ; #5452 = CYLINDRICAL_SURFACE ( 'NONE', #3187, 0.7999999999999999300 ) ; #5453 = ORIENTED_EDGE ( 'NONE', *, *, #3572, .T. ) ; #5454 = ORIENTED_EDGE ( 'NONE', *, *, #3273, .T. ) ; #5455 = AXIS2_PLACEMENT_3D ( 'NONE', #2934, #6068, #4439 ) ; #5456 = CARTESIAN_POINT ( 'NONE', ( 1.239029422040988300, -10.24644242615417200, -7.800000000000070000 ) ) ; #5457 = ORIENTED_EDGE ( 'NONE', *, *, #3070, .F. ) ; #5458 = VECTOR ( 'NONE', #6190, 1000.000000000000000 ) ; #5459 = ORIENTED_EDGE ( 'NONE', *, *, #5411, .F. ) ; #5460 = EDGE_CURVE ( 'NONE', #5916, #6342, #2124, .T. ) ; #5461 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -10.15000000000000000 ) ) ; #5462 = CARTESIAN_POINT ( 'NONE', ( -1.550000000000830000, -3.350000000000020100, -13.40000000000000000 ) ) ; #5463 = AXIS2_PLACEMENT_3D ( 'NONE', #4906, #4813, #2719 ) ; #5464 = ADVANCED_FACE ( 'NONE', ( #5667 ), #1421, .T. ) ; #5465 = ORIENTED_EDGE ( 'NONE', *, *, #4962, .F. ) ; #5466 = FACE_OUTER_BOUND ( 'NONE', #2748, .T. ) ; #5467 = CARTESIAN_POINT ( 'NONE', ( 0.3645356171466352900, -2.683772506088364800, -10.25795670404578200 ) ) ; #5468 = ORIENTED_EDGE ( 'NONE', *, *, #6453, .T. ) ; #5469 = ADVANCED_FACE ( 'NONE', ( #1129 ), #1560, .T. ) ; #5470 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #5471 = ORIENTED_EDGE ( 'NONE', *, *, #5253, .F. ) ; #5472 = ORIENTED_EDGE ( 'NONE', *, *, #4323, .F. ) ; #5473 = VECTOR ( 'NONE', #922, 1000.000000000000000 ) ; #5474 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; #5475 = EDGE_LOOP ( 'NONE', ( #2247, #2069, #3468, #5941 ) ) ; #5476 = CARTESIAN_POINT ( 'NONE', ( 1.075528555105620000E-013, -5.551115123125780200E-014, -13.77999999999999900 ) ) ; #5477 = LINE ( 'NONE', #3341, #6591 ) ; #5478 = FACE_OUTER_BOUND ( 'NONE', #4377, .T. ) ; #5479 = EDGE_CURVE ( 'NONE', #2333, #4863, #567, .T. ) ; #5480 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; #5481 = VECTOR ( 'NONE', #1617, 1000.000000000000000 ) ; #5482 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #5483 = VERTEX_POINT ( 'NONE', #2004 ) ; #5484 = CARTESIAN_POINT ( 'NONE', ( -2.749999999999090100, -5.500000000000009800, -1.500072740962020000 ) ) ; #5485 = CARTESIAN_POINT ( 'NONE', ( 18.18468237128200100, -8.099999999999450800, -7.800000000000070000 ) ) ; #5486 = CARTESIAN_POINT ( 'NONE', ( -2.749999999999090100, -5.299999999999820400, -1.500072740962020000 ) ) ; #5487 = VERTEX_POINT ( 'NONE', #2500 ) ; #5488 = FACE_OUTER_BOUND ( 'NONE', #3829, .T. ) ; #5489 = ORIENTED_EDGE ( 'NONE', *, *, #5882, .F. ) ; #5490 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #5491 = EDGE_CURVE ( 'NONE', #817, #4446, #3926, .T. ) ; #5492 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; #5493 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; #5494 = LINE ( 'NONE', #5441, #5160 ) ; #5495 = LINE ( 'NONE', #232, #5735 ) ; #5496 = ORIENTED_EDGE ( 'NONE', *, *, #4024, .F. ) ; #5497 = CARTESIAN_POINT ( 'NONE', ( 1.479999999999980000, -3.100000000000049800, -13.77999999999999900 ) ) ; #5498 = ORIENTED_EDGE ( 'NONE', *, *, #774, .F. ) ; #5499 = LINE ( 'NONE', #664, #5420 ) ; #5500 = LINE ( 'NONE', #5581, #2198 ) ; #5501 = EDGE_CURVE ( 'NONE', #6556, #6443, #325, .T. ) ; #5502 = EDGE_CURVE ( 'NONE', #1024, #2560, #162, .T. ) ; #5503 = ADVANCED_FACE ( 'NONE', ( #3840 ), #4504, .T. ) ; #5504 = CARTESIAN_POINT ( 'NONE', ( -4.500000000000015100, 3.799999999999910600, -0.4999999999999988300 ) ) ; #5505 = APPROVAL_PERSON_ORGANIZATION ( #5671, #3863, #2516 ) ; #5506 = CARTESIAN_POINT ( 'NONE', ( -2.247557109910107700, -2.199999999999130200, -9.800000000000000700 ) ) ; #5507 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #5508 = LINE ( 'NONE', #5828, #646 ) ; #5509 = EDGE_LOOP ( 'NONE', ( #215, #2850, #998, #5181 ) ) ; #5510 = VECTOR ( 'NONE', #4481, 1000.000000000000000 ) ; #5511 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000091300, -9.699999999999819900, -7.800000000000070000 ) ) ; #5512 = CARTESIAN_POINT ( 'NONE', ( -0.3927622376276576600, -2.658098358158985400, -10.50222990449776400 ) ) ; #5513 = CARTESIAN_POINT ( 'NONE', ( 18.18468237128200100, -2.146699123532180800, -5.521499184909366400 ) ) ; #5514 = ORIENTED_EDGE ( 'NONE', *, *, #683, .T. ) ; #5515 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #5516 = CARTESIAN_POINT ( 'NONE', ( 2.429328335627641200, -2.430323138702813700, -11.80000000000000100 ) ) ; #5517 = CARTESIAN_POINT ( 'NONE', ( 3.650000000000929800, -5.500000000000009800, -7.349999999999999600 ) ) ; #5518 = CARTESIAN_POINT ( 'NONE', ( -1.499999999999830100, -5.350000000000021000, -13.44999999999999900 ) ) ; #5519 = ORIENTED_EDGE ( 'NONE', *, *, #525, .F. ) ; #5520 = VERTEX_POINT ( 'NONE', #3607 ) ; #5521 = EDGE_LOOP ( 'NONE', ( #4809, #640, #3656, #2235 ) ) ; #5522 = CARTESIAN_POINT ( 'NONE', ( -4.500000000000060400, 2.400000000000960000, -1.000000000000000000 ) ) ; #5523 = CARTESIAN_POINT ( 'NONE', ( 1.199999999999930000, 0.0000000000000000000, -13.77999999999999900 ) ) ; #5524 = EDGE_CURVE ( 'NONE', #2032, #2866, #5415, .T. ) ; #5525 = VECTOR ( 'NONE', #66, 1000.000000000000000 ) ; #5526 = ORIENTED_EDGE ( 'NONE', *, *, #5946, .F. ) ; #5527 = LINE ( 'NONE', #2642, #4694 ) ; #5528 = ORIENTED_EDGE ( 'NONE', *, *, #5187, .F. ) ; #5529 = CARTESIAN_POINT ( 'NONE', ( 0.2224827988011531500, -2.631244268475885700, -10.75772950082941800 ) ) ; #5530 = ORIENTED_EDGE ( 'NONE', *, *, #2598, .T. ) ; #5531 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #5532 = CIRCLE ( 'NONE', #5392, 3.149999999999999900 ) ; #5533 = ORIENTED_EDGE ( 'NONE', *, *, #2498, .F. ) ; #5534 = CARTESIAN_POINT ( 'NONE', ( -1.075684124793604600, -5.209784898896207200, -4.721805525395510900 ) ) ; #5535 = LINE ( 'NONE', #2923, #1424 ) ; #5536 = EDGE_CURVE ( 'NONE', #6729, #4065, #6330, .T. ) ; #5537 = CARTESIAN_POINT ( 'NONE', ( 2.024980546198863300, -3.262063269921744000, -6.669242063142871000 ) ) ; #5538 = CARTESIAN_POINT ( 'NONE', ( -2.749999999999090100, -4.710787967683030400, -1.500072740962126000 ) ) ; #5539 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; #5540 = VECTOR ( 'NONE', #4563, 1000.000000000000000 ) ; #5541 = ORIENTED_EDGE ( 'NONE', *, *, #6574, .T. ) ; #5542 = CARTESIAN_POINT ( 'NONE', ( 1.479999999999979600, -9.542487113058909300, -13.42000000000000000 ) ) ; #5543 = AXIS2_PLACEMENT_3D ( 'NONE', #4784, #4250, #5287 ) ; #5544 = CARTESIAN_POINT ( 'NONE', ( 18.18468237128200100, -9.699999999999819900, -7.600000000000069800 ) ) ; #5545 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; #5546 = VERTEX_POINT ( 'NONE', #6169 ) ; #5547 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.224646799147353200E-016, 1.000000000000000000 ) ) ; #5548 = EDGE_CURVE ( 'NONE', #5626, #2746, #6824, .T. ) ; #5549 = VECTOR ( 'NONE', #169, 1000.000000000000000 ) ; #5550 = CARTESIAN_POINT ( 'NONE', ( 1.479999999999979600, -9.539807621135009800, -13.43000000000000000 ) ) ; #5551 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #5552 = ORIENTED_EDGE ( 'NONE', *, *, #6467, .T. ) ; #5553 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, ( #2880, #6088, #6644, #2449, #6618, #312 ), .UNSPECIFIED., .F., .F., ( 4, 2, 4 ), ( 0.0000000000000000000, 0.5000000000000000000, 1.000000000000000000 ), .UNSPECIFIED. ) ; #5554 = AXIS2_PLACEMENT_3D ( 'NONE', #3166, #12, #5808 ) ; #5555 = CARTESIAN_POINT ( 'NONE', ( 3.030782786503039900, -2.199999999999130200, -9.800000000000000700 ) ) ; #5556 = ORIENTED_EDGE ( 'NONE', *, *, #5719, .F. ) ; #5557 = CARTESIAN_POINT ( 'NONE', ( -2.749999999999090100, -4.799487958970535000, -1.045154902391326200 ) ) ; #5558 = LINE ( 'NONE', #1507, #2916 ) ; #5559 = ORIENTED_EDGE ( 'NONE', *, *, #4291, .T. ) ; #5560 = DIRECTION ( 'NONE', ( 0.02524987779192877600, -0.7311205248579296700, -0.6817809192130255300 ) ) ; #5561 = CARTESIAN_POINT ( 'NONE', ( -4.000000000000000000, 3.799999999999910100, 8.673617379884035500E-016 ) ) ; #5562 = LINE ( 'NONE', #892, #462 ) ; #5563 = ORIENTED_EDGE ( 'NONE', *, *, #1353, .F. ) ; #5564 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; #5565 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, ( #2397, #3950, #3488, #1411, #5430, #810, #4500, #1951, #6084, #5612, #1366, #2284, #5004 ), .UNSPECIFIED., .F., .F., ( 4, 2, 2, 1, 2, 2, 4 ), ( 0.0000000000000000000, 0.2500000000000009400, 0.5000000000000018900, 0.6250000000000006700, 0.6875000000000000000, 0.7499999999999993300, 1.000000000000000000 ), .UNSPECIFIED. ) ; #5566 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; #5567 = ORIENTED_EDGE ( 'NONE', *, *, #5040, .T. ) ; #5568 = EDGE_CURVE ( 'NONE', #2914, #161, #5576, .T. ) ; #5569 = CARTESIAN_POINT ( 'NONE', ( 3.900000000000130000, -3.350000000000020100, -14.40000000000000200 ) ) ; #5570 = CARTESIAN_POINT ( 'NONE', ( 1.777709254451912900, 13.22368666611103000, 14.93199160091321600 ) ) ; #5571 = CARTESIAN_POINT ( 'NONE', ( -4.000000000000000000, 4.299999999999919900, -1.000000000000000700 ) ) ; #5572 = CYLINDRICAL_SURFACE ( 'NONE', #5463, 0.4999999999999995600 ) ; #5573 = ORIENTED_EDGE ( 'NONE', *, *, #6680, .F. ) ; #5574 = CARTESIAN_POINT ( 'NONE', ( -4.339999999999969700, -2.199999999999129800, -11.79999999999999900 ) ) ; #5575 = CARTESIAN_POINT ( 'NONE', ( 2.620106179923635400, -1.340023918914905000, -9.900000000000023400 ) ) ; #5576 = LINE ( 'NONE', #1984, #6079 ) ; #5577 = FACE_OUTER_BOUND ( 'NONE', #541, .T. ) ; #5578 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; #5579 = ORIENTED_EDGE ( 'NONE', *, *, #4234, .F. ) ; #5580 = EDGE_CURVE ( 'NONE', #6483, #6159, #3350, .T. ) ; #5581 = CARTESIAN_POINT ( 'NONE', ( 4.860000000000080300, -10.19999999999910000, -11.80000000000000100 ) ) ; #5582 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; #5583 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; #5584 = LINE ( 'NONE', #2111, #4585 ) ; #5585 = EDGE_CURVE ( 'NONE', #2182, #5891, #2057, .T. ) ; #5586 = ADVANCED_FACE ( 'NONE', ( #2614 ), #1497, .F. ) ; #5587 = ORIENTED_EDGE ( 'NONE', *, *, #2718, .T. ) ; #5588 = CARTESIAN_POINT ( 'NONE', ( -1.672341820579260000, -2.614540586871838100, -10.91665441533777100 ) ) ; #5589 = PERSON_AND_ORGANIZATION ( #2374, #4427 ) ; #5590 = EDGE_CURVE ( 'NONE', #1079, #4132, #4011, .T. ) ; #5591 = EDGE_CURVE ( 'NONE', #1712, #2342, #4830, .T. ) ; #5592 = ORIENTED_EDGE ( 'NONE', *, *, #4429, .F. ) ; #5593 = ORIENTED_EDGE ( 'NONE', *, *, #1120, .F. ) ; #5594 = CARTESIAN_POINT ( 'NONE', ( 2.164999999999909900, 9.858136524117119500, 17.03502073695930000 ) ) ; #5595 = CARTESIAN_POINT ( 'NONE', ( 2.359338535428428400, -1.206657231877488200, -9.900000000000000400 ) ) ; #5596 = ORIENTED_EDGE ( 'NONE', *, *, #5715, .F. ) ; #5597 = CARTESIAN_POINT ( 'NONE', ( 1.469576158329477600E-016, 1.199999999471401700, -13.94999999810409000 ) ) ; #5598 = CARTESIAN_POINT ( 'NONE', ( -4.000000000000000000, -6.500000000000061300, -0.4999999999999988300 ) ) ; #5599 = ADVANCED_FACE ( 'NONE', ( #5992 ), #1002, .F. ) ; #5600 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; #5601 = CARTESIAN_POINT ( 'NONE', ( 4.500000000000060400, -2.199999999999049800, -2.779157999888000100 ) ) ; #5602 = VERTEX_POINT ( 'NONE', #4654 ) ; #5603 = PLANE ( 'NONE', #5026 ) ; #5604 = EDGE_CURVE ( 'NONE', #1673, #2242, #4665, .T. ) ; #5605 = CARTESIAN_POINT ( 'NONE', ( 4.500000000000000900, 3.971572875253719800, -0.2071067811865460500 ) ) ; #5606 = EDGE_LOOP ( 'NONE', ( #3684, #2734, #1870, #1612 ) ) ; #5607 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #5608 = ORIENTED_EDGE ( 'NONE', *, *, #4480, .T. ) ; #5609 = FACE_OUTER_BOUND ( 'NONE', #3574, .T. ) ; #5610 = EDGE_LOOP ( 'NONE', ( #6745, #129, #3352, #5794 ) ) ; #5611 = EDGE_LOOP ( 'NONE', ( #5188, #6461, #4155, #6234 ) ) ; #5612 = CARTESIAN_POINT ( 'NONE', ( 2.004059692062433800, -1.998517246843733300, -5.051691970603983800 ) ) ; #5613 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; #5614 = LINE ( 'NONE', #1006, #5952 ) ; #5615 = ORIENTED_EDGE ( 'NONE', *, *, #3340, .T. ) ; #5616 = VECTOR ( 'NONE', #4503, 1000.000000000000000 ) ; #5617 = ORIENTED_EDGE ( 'NONE', *, *, #4166, .F. ) ; #5618 = CARTESIAN_POINT ( 'NONE', ( -1.479999999999979600, -9.542487113058909300, -13.42000000000000000 ) ) ; #5619 = VERTEX_POINT ( 'NONE', #3590 ) ; #5620 = EDGE_CURVE ( 'NONE', #6449, #4199, #3992, .T. ) ; #5621 = MANIFOLD_SOLID_BREP ( 'Imported1', #2948 ) ; #5622 = LINE ( 'NONE', #6562, #3310 ) ; #5623 = CARTESIAN_POINT ( 'NONE', ( 0.3144194974402821900, -2.692748808353869500, -10.17255289284042500 ) ) ; #5624 = CARTESIAN_POINT ( 'NONE', ( -0.1792620329498615400, 2.649972417633792900, -9.899999999999998600 ) ) ; #5625 = EDGE_LOOP ( 'NONE', ( #4786, #5438, #5013, #4382 ) ) ; #5626 = VERTEX_POINT ( 'NONE', #2082 ) ; #5627 = CARTESIAN_POINT ( 'NONE', ( -2.749999999999090100, -4.474850604041474600, -1.502963659025156900 ) ) ; #5628 = CARTESIAN_POINT ( 'NONE', ( 1.249999999999969800, -8.687867965643759400, -8.387867965643870600 ) ) ; #5629 = VERTEX_POINT ( 'NONE', #5760 ) ; #5630 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000303300, -10.04999999999840000, 21.81166452059000000 ) ) ; #5631 = VECTOR ( 'NONE', #5583, 1000.000000000000000 ) ; #5632 = EDGE_CURVE ( 'NONE', #6539, #173, #3591, .T. ) ; #5633 = EDGE_LOOP ( 'NONE', ( #3551, #2025, #5696, #3284 ) ) ; #5634 = CARTESIAN_POINT ( 'NONE', ( -1.424183961387005100, -2.586198025314405700, -11.18631587556169300 ) ) ; #5635 = CARTESIAN_POINT ( 'NONE', ( 18.18468237128200100, -3.262063269921631600, -6.669242063142868400 ) ) ; #5636 = ORIENTED_EDGE ( 'NONE', *, *, #3374, .T. ) ; #5637 = AXIS2_PLACEMENT_3D ( 'NONE', #1734, #4240, #5848 ) ; #5638 = ORIENTED_EDGE ( 'NONE', *, *, #3490, .F. ) ; #5639 = VECTOR ( 'NONE', #2985, 1000.000000000000000 ) ; #5640 = ORIENTED_EDGE ( 'NONE', *, *, #4026, .T. ) ; #5641 = AXIS2_PLACEMENT_3D ( 'NONE', #5461, #4341, #2796 ) ; #5642 = CARTESIAN_POINT ( 'NONE', ( 4.860000000000080300, -2.559999999999050100, -2.779157999888000100 ) ) ; #5643 = VECTOR ( 'NONE', #3297, 1000.000000000000000 ) ; #5644 = CARTESIAN_POINT ( 'NONE', ( -0.8736021328327514500, -5.299999999999280400, -5.603988628071990200 ) ) ; #5645 = APPLICATION_CONTEXT ( 'configuration controlled 3d designs of mechanical parts and assemblies' ) ; #5646 = CARTESIAN_POINT ( 'NONE', ( 3.150000002491314600, -0.5010738569285947400, -9.692893218813472000 ) ) ; #5647 = FACE_OUTER_BOUND ( 'NONE', #615, .T. ) ; #5648 = ADVANCED_FACE ( 'NONE', ( #3252 ), #2611, .T. ) ; #5649 = LINE ( 'NONE', #6756, #2762 ) ; #5650 = ORIENTED_EDGE ( 'NONE', *, *, #219, .T. ) ; #5651 = CARTESIAN_POINT ( 'NONE', ( 1.549999999999830000, -5.500000000000008900, -7.349999999999999600 ) ) ; #5652 = CARTESIAN_POINT ( 'NONE', ( 1.796170039943238300, 1.950228345891318800, -9.899999999999996800 ) ) ; #5653 = LINE ( 'NONE', #3251, #4236 ) ; #5654 = CARTESIAN_POINT ( 'NONE', ( -1.000000000000000000, 1.224646799147353200E-016, -2.100000000000049800 ) ) ; #5655 = ORIENTED_EDGE ( 'NONE', *, *, #4153, .T. ) ; #5656 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; #5657 = CARTESIAN_POINT ( 'NONE', ( 3.229209978830339900, -2.559999999999050100, -2.779157999888000100 ) ) ; #5658 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; #5659 = CARTESIAN_POINT ( 'NONE', ( 2.009611629564478800, -2.198463853681559100, -5.264315698723822700 ) ) ; #5660 = CYLINDRICAL_SURFACE ( 'NONE', #3549, 0.6099999999999998800 ) ; #5661 = LINE ( 'NONE', #4529, #971 ) ; #5662 = ORIENTED_EDGE ( 'NONE', *, *, #2510, .F. ) ; #5663 = CARTESIAN_POINT ( 'NONE', ( -2.942893218813431100, 5.885786437626864000, -9.900000000000023400 ) ) ; #5664 = EDGE_CURVE ( 'NONE', #6828, #1905, #562, .T. ) ; #5665 = CARTESIAN_POINT ( 'NONE', ( -3.199999999999980200, -1.199999999999980000, -11.79999999999999900 ) ) ; #5666 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #5667 = FACE_OUTER_BOUND ( 'NONE', #997, .T. ) ; #5668 = CARTESIAN_POINT ( 'NONE', ( 1.075528555105620000E-013, -5.551115123125780200E-014, -13.42000000000000000 ) ) ; #5669 = CARTESIAN_POINT ( 'NONE', ( -1.720813919354108300, -2.795498778140268900, -11.10830667936294900 ) ) ; #5670 = VECTOR ( 'NONE', #6440, 1000.000000000000000 ) ; #5671 = PERSON_AND_ORGANIZATION ( #2374, #4427 ) ; #5672 = LINE ( 'NONE', #3561, #735 ) ; #5673 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; #5674 = EDGE_CURVE ( 'NONE', #4956, #4329, #2942, .T. ) ; #5675 = ORIENTED_EDGE ( 'NONE', *, *, #3315, .T. ) ; #5676 = CARTESIAN_POINT ( 'NONE', ( -2.009600286187298100, -3.063158890845662600, -6.648336370488483000 ) ) ; #5677 = CARTESIAN_POINT ( 'NONE', ( -4.000000000000000000, 4.299999999999919900, -11.80000000000000100 ) ) ; #5678 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; #5679 = CARTESIAN_POINT ( 'NONE', ( -4.500000000000060400, 3.799999999999910600, -1.000000000000000700 ) ) ; #5680 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; #5681 = ADVANCED_FACE ( 'NONE', ( #1051, #3097 ), #1630, .F. ) ; #5682 = ORIENTED_EDGE ( 'NONE', *, *, #3273, .F. ) ; #5683 = AXIS2_PLACEMENT_3D ( 'NONE', #731, #1235, #3868 ) ; #5684 = EDGE_CURVE ( 'NONE', #2961, #5431, #3429, .T. ) ; #5685 = CARTESIAN_POINT ( 'NONE', ( -2.649999999999962600, 6.490628035480880200E-016, -9.900000000000000400 ) ) ; #5686 = AXIS2_PLACEMENT_3D ( 'NONE', #988, #2660, #3700 ) ; #5687 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; #5688 = ORIENTED_EDGE ( 'NONE', *, *, #6271, .F. ) ; #5689 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #5690 = PLANE ( 'NONE', #753 ) ; #5691 = ORIENTED_EDGE ( 'NONE', *, *, #5855, .T. ) ; #5692 = CARTESIAN_POINT ( 'NONE', ( -4.000000000000000900, -6.500000000000060400, -0.2071067811865476300 ) ) ; #5693 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; #5694 = CARTESIAN_POINT ( 'NONE', ( 4.000000000000000000, -6.000000000000060400, 1.070649645329435600E-015 ) ) ; #5695 = CARTESIAN_POINT ( 'NONE', ( 18.18468237128200100, -4.699999999999819900, -1.700000000000010200 ) ) ; #5696 = ORIENTED_EDGE ( 'NONE', *, *, #4517, .T. ) ; #5697 = FACE_OUTER_BOUND ( 'NONE', #326, .T. ) ; #5698 = ORIENTED_EDGE ( 'NONE', *, *, #1530, .F. ) ; #5699 = LINE ( 'NONE', #5555, #6774 ) ; #5700 = ORIENTED_EDGE ( 'NONE', *, *, #2708, .F. ) ; #5701 = VERTEX_POINT ( 'NONE', #4785 ) ; #5702 = VECTOR ( 'NONE', #550, 1000.000000000000000 ) ; #5703 = ORIENTED_EDGE ( 'NONE', *, *, #5403, .F. ) ; #5704 = VECTOR ( 'NONE', #2577, 1000.000000000000000 ) ; #5705 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; #5706 = ORIENTED_EDGE ( 'NONE', *, *, #3814, .T. ) ; #5707 = ORIENTED_EDGE ( 'NONE', *, *, #2081, .T. ) ; #5708 = CARTESIAN_POINT ( 'NONE', ( -2.018537944984205400, -2.068363019588590500, -4.883502816590402400 ) ) ; #5709 = VECTOR ( 'NONE', #1328, 1000.000000000000000 ) ; #5710 = APPLICATION_PROTOCOL_DEFINITION ( 'international standard', 'config_control_design', 1994, #5645 ) ; #5711 = ORIENTED_EDGE ( 'NONE', *, *, #3583, .F. ) ; #5712 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #5713 = VERTEX_POINT ( 'NONE', #1651 ) ; #5714 = LINE ( 'NONE', #1485, #3804 ) ; #5715 = EDGE_CURVE ( 'NONE', #5029, #1143, #2043, .T. ) ; #5716 = VERTEX_POINT ( 'NONE', #1056 ) ; #5717 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #5718 = ORIENTED_EDGE ( 'NONE', *, *, #393, .T. ) ; #5719 = EDGE_CURVE ( 'NONE', #3855, #1363, #891, .T. ) ; #5720 = VECTOR ( 'NONE', #5728, 1000.000000000000100 ) ; #5721 = ORIENTED_EDGE ( 'NONE', *, *, #6656, .F. ) ; #5722 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; #5723 = AXIS2_PLACEMENT_3D ( 'NONE', #1301, #4014, #868 ) ; #5724 = VECTOR ( 'NONE', #6473, 1000.000000000000000 ) ; #5725 = VERTEX_POINT ( 'NONE', #591 ) ; #5726 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, ( #3980, #4455, #335, #3404 ), .UNSPECIFIED., .F., .F., ( 4, 4 ), ( 0.0000000000000000000, 1.000000000000000000 ), .UNSPECIFIED. ) ; #5727 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000089900, -5.499999999999279700, 21.81166452059000000 ) ) ; #5728 = DIRECTION ( 'NONE', ( 0.5197153285318708600, 0.8543394976758417200, -0.0000000000000000000 ) ) ; #5729 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #5730 = VECTOR ( 'NONE', #764, 1000.000000000000000 ) ; #5731 = ORIENTED_EDGE ( 'NONE', *, *, #5187, .T. ) ; #5732 = CARTESIAN_POINT ( 'NONE', ( -3.725592231765940000, 3.558925565098960000, -2.700000000000000200 ) ) ; #5733 = VERTEX_POINT ( 'NONE', #4770 ) ; #5734 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.8386705679446587700, 0.5446390350162054700 ) ) ; #5735 = VECTOR ( 'NONE', #3917, 1000.000000000000000 ) ; #5736 = VERTEX_POINT ( 'NONE', #87 ) ; #5737 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #5738 = EDGE_CURVE ( 'NONE', #4863, #286, #638, .T. ) ; #5739 = CARTESIAN_POINT ( 'NONE', ( 1.549999999999830200, -6.500000000000060400, -7.349999999999999600 ) ) ; #5740 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000091300, -10.12938721587675400, -7.599999999999870000 ) ) ; #5741 = ORIENTED_EDGE ( 'NONE', *, *, #6425, .F. ) ; #5742 = VECTOR ( 'NONE', #112, 1000.000000000000000 ) ; #5743 = CIRCLE ( 'NONE', #920, 2.299999999999999800 ) ; #5744 = ORIENTED_EDGE ( 'NONE', *, *, #2485, .T. ) ; #5745 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; #5746 = CARTESIAN_POINT ( 'NONE', ( -3.199999999999980200, -1.199999999999979700, -0.9999999999999988900 ) ) ; #5747 = VECTOR ( 'NONE', #1586, 1000.000000000000000 ) ; #5748 = EDGE_LOOP ( 'NONE', ( #6208, #6066, #2612, #157 ) ) ; #5749 = PLANE ( 'NONE', #2474 ) ; #5750 = EDGE_CURVE ( 'NONE', #1091, #1068, #1718, .T. ) ; #5751 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #5752 = CARTESIAN_POINT ( 'NONE', ( -3.599999999999940100, -6.350000000000021000, -14.40000000000000200 ) ) ; #5753 = LINE ( 'NONE', #362, #3937 ) ; #5754 = EDGE_CURVE ( 'NONE', #4387, #2778, #2772, .T. ) ; #5755 = CARTESIAN_POINT ( 'NONE', ( -3.032656903150973400, -0.9882141109573395800, -9.692893218813470200 ) ) ; #5756 = VERTEX_POINT ( 'NONE', #5251 ) ; #5757 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #5758 = EDGE_CURVE ( 'NONE', #5373, #88, #4326, .T. ) ; #5759 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; #5760 = CARTESIAN_POINT ( 'NONE', ( 3.200000000000979800, -2.599999999999050200, -9.750000000000000000 ) ) ; #5761 = ORIENTED_EDGE ( 'NONE', *, *, #5217, .F. ) ; #5762 = AXIS2_PLACEMENT_3D ( 'NONE', #1255, #1733, #5929 ) ; #5763 = AXIS2_PLACEMENT_3D ( 'NONE', #4120, #796, #3005 ) ; #5764 = PLANE ( 'NONE', #274 ) ; #5765 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; #5766 = APPROVAL ( #4577, 'UNSPECIFIED' ) ; #5767 = ORIENTED_EDGE ( 'NONE', *, *, #5750, .T. ) ; #5768 = EDGE_CURVE ( 'NONE', #3919, #1202, #5908, .T. ) ; #5769 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #5770 = AXIS2_PLACEMENT_3D ( 'NONE', #4917, #125, #1199 ) ; #5771 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, ( #4608, #1483, #1989, #5659, #2507, #2695 ), .UNSPECIFIED., .F., .F., ( 4, 2, 4 ), ( 0.0000000000000000000, 0.5000000000000000000, 1.000000000000000000 ), .UNSPECIFIED. ) ; #5772 = EDGE_LOOP ( 'NONE', ( #4282, #5924 ) ) ; #5773 = LINE ( 'NONE', #3055, #100 ) ; #5774 = ORIENTED_EDGE ( 'NONE', *, *, #3719, .F. ) ; #5775 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.7071067811864111300, 0.7071067811866840200 ) ) ; #5776 = AXIS2_PLACEMENT_3D ( 'NONE', #6322, #1061, #5281 ) ; #5777 = ORIENTED_EDGE ( 'NONE', *, *, #1723, .T. ) ; #5778 = VERTEX_POINT ( 'NONE', #5797 ) ; #5779 = VECTOR ( 'NONE', #1546, 1000.000000000000000 ) ; #5780 = ORIENTED_EDGE ( 'NONE', *, *, #3640, .F. ) ; #5781 = VECTOR ( 'NONE', #792, 1000.000000000000000 ) ; #5782 = VERTEX_POINT ( 'NONE', #4727 ) ; #5783 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; #5784 = PLANE ( 'NONE', #1457 ) ; #5785 = CARTESIAN_POINT ( 'NONE', ( -1.098901979466136100, -10.67028855198164000, -7.599999999999869100 ) ) ; #5786 = LINE ( 'NONE', #2941, #2162 ) ; #5787 = ORIENTED_EDGE ( 'NONE', *, *, #1460, .T. ) ; #5788 = CARTESIAN_POINT ( 'NONE', ( -3.549999999999000200, -5.500000000000009800, -6.968314918796940200 ) ) ; #5789 = ORIENTED_EDGE ( 'NONE', *, *, #2443, .F. ) ; #5790 = CARTESIAN_POINT ( 'NONE', ( 3.600000000000160000, -6.350000000000021000, -11.80000000000000100 ) ) ; #5791 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #5792 = ADVANCED_FACE ( 'NONE', ( #4989 ), #1140, .F. ) ; #5793 = EDGE_CURVE ( 'NONE', #4196, #1917, #6497, .T. ) ; #5794 = ORIENTED_EDGE ( 'NONE', *, *, #4907, .F. ) ; #5795 = EDGE_CURVE ( 'NONE', #592, #1550, #1387, .T. ) ; #5796 = ORIENTED_EDGE ( 'NONE', *, *, #4026, .F. ) ; #5797 = CARTESIAN_POINT ( 'NONE', ( -1.479999999999979600, -8.699999999999894500, -12.93358983848641800 ) ) ; #5798 = LINE ( 'NONE', #5184, #6041 ) ; #5799 = ORIENTED_EDGE ( 'NONE', *, *, #4783, .T. ) ; #5800 = CARTESIAN_POINT ( 'NONE', ( -2.489999999999949600, -2.559999999999050100, -9.800000000000000700 ) ) ; #5801 = CARTESIAN_POINT ( 'NONE', ( 4.292893218813452100, -6.000000000000059500, 1.283108069837012300E-015 ) ) ; #5802 = ORIENTED_EDGE ( 'NONE', *, *, #6121, .F. ) ; #5803 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; #5804 = LINE ( 'NONE', #3577, #1866 ) ; #5805 = EDGE_CURVE ( 'NONE', #4065, #581, #3666, .T. ) ; #5806 = VERTEX_POINT ( 'NONE', #3215 ) ; #5807 = CIRCLE ( 'NONE', #4754, 0.2999999999999999300 ) ; #5808 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #5809 = AXIS2_PLACEMENT_3D ( 'NONE', #6800, #924, #2036 ) ; #5810 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; #5811 = LINE ( 'NONE', #5570, #6808 ) ; #5812 = CARTESIAN_POINT ( 'NONE', ( -4.339999999999969700, -8.187744794624180100, -9.800000000000000700 ) ) ; #5813 = CARTESIAN_POINT ( 'NONE', ( -0.8230144980384339600, -10.99480492006128400, -7.599999999999872600 ) ) ; #5814 = FACE_BOUND ( 'NONE', #315, .T. ) ; #5815 = ORIENTED_EDGE ( 'NONE', *, *, #4420, .T. ) ; #5816 = EDGE_CURVE ( 'NONE', #6178, #2990, #2376, .T. ) ; #5817 = ORIENTED_EDGE ( 'NONE', *, *, #1131, .T. ) ; #5818 = CARTESIAN_POINT ( 'NONE', ( 0.9166666666703168200, -4.104541919161933400, -1.748062269079880600 ) ) ; #5819 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #5820 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; #5821 = CYLINDRICAL_SURFACE ( 'NONE', #5770, 1.050000000000000000 ) ; #5822 = ORIENTED_EDGE ( 'NONE', *, *, #1307, .T. ) ; #5823 = AXIS2_PLACEMENT_3D ( 'NONE', #5268, #3609, #2131 ) ; #5824 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; #5825 = VERTEX_POINT ( 'NONE', #1615 ) ; #5826 = CARTESIAN_POINT ( 'NONE', ( 4.000000000000000000, 3.799999999999910100, -1.000000000000000900 ) ) ; #5827 = CYLINDRICAL_SURFACE ( 'NONE', #6310, 0.5000000000000001100 ) ; #5828 = CARTESIAN_POINT ( 'NONE', ( -2.500000000000060000, 3.558925565098960000, -2.700000000000000200 ) ) ; #5829 = VECTOR ( 'NONE', #2452, 1000.000000000000000 ) ; #5830 = ORIENTED_EDGE ( 'NONE', *, *, #3176, .T. ) ; #5831 = ORIENTED_EDGE ( 'NONE', *, *, #47, .F. ) ; #5832 = CARTESIAN_POINT ( 'NONE', ( -3.650000000000039900, -5.500000000000009800, -5.299999999999999800 ) ) ; #5833 = VECTOR ( 'NONE', #2935, 1000.000000000000000 ) ; #5834 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; #5835 = VECTOR ( 'NONE', #3452, 1000.000000000000000 ) ; #5836 = EDGE_CURVE ( 'NONE', #1929, #1243, #154, .T. ) ; #5837 = CARTESIAN_POINT ( 'NONE', ( 2.090790021169699900, -2.559999999999065200, -11.80000000000000100 ) ) ; #5838 = CARTESIAN_POINT ( 'NONE', ( -0.1586042252446849000, -11.29993269809748000, -7.599999999999869100 ) ) ; #5839 = LOCAL_TIME ( 16, 54, 2.000000000000000000, #6508 ) ; #5840 = CARTESIAN_POINT ( 'NONE', ( 18.18468237128200100, -9.699999999998910400, -7.599999999999870000 ) ) ; #5841 = ADVANCED_FACE ( 'NONE', ( #4910 ), #4216, .T. ) ; #5842 = FACE_OUTER_BOUND ( 'NONE', #6082, .T. ) ; #5843 = PLANE ( 'NONE', #4487 ) ; #5844 = ORIENTED_EDGE ( 'NONE', *, *, #2024, .T. ) ; #5845 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #5846 = CARTESIAN_POINT ( 'NONE', ( 3.900000000000130000, 0.04999999999993899600, -11.80000000000000100 ) ) ; #5847 = EDGE_CURVE ( 'NONE', #6400, #377, #3512, .T. ) ; #5848 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #5849 = ORIENTED_EDGE ( 'NONE', *, *, #784, .F. ) ; #5850 = CARTESIAN_POINT ( 'NONE', ( -3.650000000000039900, -5.150000000000099800, -11.80000000000000100 ) ) ; #5851 = PLANE ( 'NONE', #2552 ) ; #5852 = ORIENTED_EDGE ( 'NONE', *, *, #5382, .F. ) ; #5853 = CARTESIAN_POINT ( 'NONE', ( -4.000000000000000000, -6.000000000000060400, -11.80000000000000100 ) ) ; #5854 = CARTESIAN_POINT ( 'NONE', ( 1.075528555105620000E-013, -5.551115123125780200E-014, -13.77999999999999900 ) ) ; #5855 = EDGE_CURVE ( 'NONE', #3969, #4682, #3172, .T. ) ; #5856 = EDGE_CURVE ( 'NONE', #5128, #1498, #977, .T. ) ; #5857 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; #5858 = ORIENTED_EDGE ( 'NONE', *, *, #3836, .T. ) ; #5859 = ORIENTED_EDGE ( 'NONE', *, *, #1162, .T. ) ; #5860 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; #5861 = VECTOR ( 'NONE', #5673, 1000.000000000000000 ) ; #5862 = CARTESIAN_POINT ( 'NONE', ( 1.479999999999980000, -8.499999999999920100, -13.23381197846500100 ) ) ; #5863 = EDGE_LOOP ( 'NONE', ( #6226, #1867, #6057, #178, #5938, #1689, #2347 ) ) ; #5864 = VECTOR ( 'NONE', #5304, 1000.000000000000000 ) ; #5865 = VERTEX_POINT ( 'NONE', #4399 ) ; #5866 = CARTESIAN_POINT ( 'NONE', ( -2.585508219391129200, -0.5832636528070401800, -9.900000000000000400 ) ) ; #5867 = ADVANCED_FACE ( 'NONE', ( #1805 ), #5827, .T. ) ; #5868 = VECTOR ( 'NONE', #3696, 1000.000000000000000 ) ; #5869 = EDGE_LOOP ( 'NONE', ( #4623, #26, #5384, #1730 ) ) ; #5870 = LINE ( 'NONE', #1275, #2005 ) ; #5871 = ORIENTED_EDGE ( 'NONE', *, *, #3640, .T. ) ; #5872 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #5873 = CYLINDRICAL_SURFACE ( 'NONE', #6086, 0.3499999999999996400 ) ; #5874 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #5875 = VERTEX_POINT ( 'NONE', #140 ) ; #5876 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, ( #5708, #2556, #5212, #3534, #2515, #2018, #2601, #448, #1463, #5133, #427, #1509, #4097 ), .UNSPECIFIED., .F., .F., ( 4, 2, 2, 1, 2, 2, 4 ), ( 0.0000000000000000000, 0.2499999999999987800, 0.4999999999999975600, 0.6249999999999970000, 0.6874999999999968900, 0.7499999999999965600, 1.000000000000000000 ), .UNSPECIFIED. ) ; #5877 = DIRECTION ( 'NONE', ( 0.04120792509276909000, 0.8379581950489878300, 0.5441764146485872400 ) ) ; #5878 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; #5879 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; #5880 = LINE ( 'NONE', #237, #5549 ) ; #5881 = EDGE_LOOP ( 'NONE', ( #783, #3050, #992, #4716 ) ) ; #5882 = EDGE_CURVE ( 'NONE', #3758, #4891, #1555, .T. ) ; #5883 = ADVANCED_FACE ( 'NONE', ( #402 ), #1468, .T. ) ; #5884 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; #5885 = CYLINDRICAL_SURFACE ( 'NONE', #442, 1.250000000000300000 ) ; #5886 = CARTESIAN_POINT ( 'NONE', ( -4.000000000000000000, -6.000000000000060400, 1.057097118173366800E-015 ) ) ; #5887 = ORIENTED_EDGE ( 'NONE', *, *, #4854, .F. ) ; #5888 = CARTESIAN_POINT ( 'NONE', ( -1.050000000000000000, 1.285879139104721000E-016, -11.80000000000000100 ) ) ; #5889 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; #5890 = CIRCLE ( 'NONE', #1558, 0.4999999999999995600 ) ; #5891 = VERTEX_POINT ( 'NONE', #1731 ) ; #5892 = CARTESIAN_POINT ( 'NONE', ( 3.650000000000929800, -5.500000000000009800, -5.299999999999999800 ) ) ; #5893 = CARTESIAN_POINT ( 'NONE', ( -2.749999999999090100, -5.500000000000009800, -6.968314918796940200 ) ) ; #5894 = EDGE_CURVE ( 'NONE', #5067, #81, #3749, .T. ) ; #5895 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #5896 = LINE ( 'NONE', #2812, #5156 ) ; #5897 = ORIENTED_EDGE ( 'NONE', *, *, #5323, .T. ) ; #5898 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; #5899 = FACE_OUTER_BOUND ( 'NONE', #3738, .T. ) ; #5900 = ADVANCED_FACE ( 'NONE', ( #722 ), #4929, .T. ) ; #5902 = EDGE_LOOP ( 'NONE', ( #6555, #189 ) ) ; #5901 = VECTOR ( 'NONE', #6601, 1000.000000000000000 ) ; #5903 = EDGE_LOOP ( 'NONE', ( #4289, #2266, #5418, #1591 ) ) ; #5904 = EDGE_CURVE ( 'NONE', #1784, #5483, #2540, .T. ) ; #5905 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #5906 = AXIS2_PLACEMENT_3D ( 'NONE', #5853, #2709, #5311 ) ; #5907 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; #5908 = LINE ( 'NONE', #2722, #4497 ) ; #5909 = LINE ( 'NONE', #6763, #3592 ) ; #5910 = ORIENTED_EDGE ( 'NONE', *, *, #3442, .F. ) ; #5911 = PLANE ( 'NONE', #4126 ) ; #5912 = CARTESIAN_POINT ( 'NONE', ( 18.18468237128200100, -2.236097133178220000, -4.992430623593798500 ) ) ; #5913 = CARTESIAN_POINT ( 'NONE', ( 1.663975999309621700, -2.612232828076756600, -10.93861127358664500 ) ) ; #5914 = CARTESIAN_POINT ( 'NONE', ( -3.899999999999789900, -6.049999999999999800, -11.80000000000000100 ) ) ; #5915 = LINE ( 'NONE', #2255, #4760 ) ; #5916 = VERTEX_POINT ( 'NONE', #1703 ) ; #5917 = ADVANCED_FACE ( 'NONE', ( #5899 ), #4821, .T. ) ; #5918 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; #5919 = VECTOR ( 'NONE', #2951, 1000.000000000000000 ) ; #5920 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -1.100000000000100000, -11.80000000000000100 ) ) ; #5921 = CARTESIAN_POINT ( 'NONE', ( -0.2500000000000829900, -6.000000000000060400, -0.4999999999999990600 ) ) ; #5922 = CARTESIAN_POINT ( 'NONE', ( -2.173248591432206800, -3.137993503012869400, -3.603632002693433200 ) ) ; #5923 = EDGE_CURVE ( 'NONE', #2032, #4761, #2532, .T. ) ; #5924 = ORIENTED_EDGE ( 'NONE', *, *, #4593, .F. ) ; #5925 = CARTESIAN_POINT ( 'NONE', ( -4.339999999999969700, -2.199999999999129800, -11.80000000000000100 ) ) ; #5926 = CARTESIAN_POINT ( 'NONE', ( -4.000000000000000000, 4.299999999999919900, -3.499999999999999600 ) ) ; #5927 = ORIENTED_EDGE ( 'NONE', *, *, #5350, .F. ) ; #5928 = CARTESIAN_POINT ( 'NONE', ( 2.010880259306436500, -2.283098795542578800, -5.375228444583536100 ) ) ; #5929 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; #5930 = CARTESIAN_POINT ( 'NONE', ( 3.030782786503116700, -2.199999999999176400, -9.800000000000002500 ) ) ; #5931 = EDGE_CURVE ( 'NONE', #3893, #4633, #1130, .T. ) ; #5932 = CARTESIAN_POINT ( 'NONE', ( 1.512926452664616200, -2.592488668649371800, -11.12646440222124300 ) ) ; #5933 = ADVANCED_FACE ( 'NONE', ( #4983 ), #5958, .T. ) ; #5934 = ORIENTED_EDGE ( 'NONE', *, *, #3680, .T. ) ; #5935 =( BOUNDED_SURFACE ( ) B_SPLINE_SURFACE ( 3, 3, ( ( #2517, #4141, #4115, #2072 ), ( #6231, #995, #5755, #978 ), ( #2604, #950, #3059, #3648 ), ( #6204, #4620, #6297, #4667 ) ), .UNSPECIFIED., .F., .F., .F. ) B_SPLINE_SURFACE_WITH_KNOTS ( ( 4, 4 ), ( 4, 4 ), ( 0.0000000000000000000, 1.000000000000000000 ), ( 0.0000000000000000000, 1.000000000000000000 ), .UNSPECIFIED. ) GEOMETRIC_REPRESENTATION_ITEM ( ) RATIONAL_B_SPLINE_SURFACE ( ( ( 1.000000000000000000, 0.9814616519177050700, 0.9814616519177050700, 1.000000000000000000), ( 0.8047378541243475100, 0.7898193436695912800, 0.7898193436695912800, 0.8047378541243475100), ( 0.8047378541243475100, 0.7898193436695912800, 0.7898193436695912800, 0.8047378541243475100), ( 1.000000000000000000, 0.9814616519177050700, 0.9814616519177050700, 1.000000000000000000) ) ) REPRESENTATION_ITEM ( '' ) SURFACE ( ) ); #5936 = PLANE ( 'NONE', #5066 ) ; #5937 = EDGE_CURVE ( 'NONE', #3128, #627, #1292, .T. ) ; #5938 = ORIENTED_EDGE ( 'NONE', *, *, #2751, .F. ) ; #5939 = VERTEX_POINT ( 'NONE', #2825 ) ; #5940 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000090800, -8.099999999999450800, -7.599999999999920600 ) ) ; #5941 = ORIENTED_EDGE ( 'NONE', *, *, #4034, .T. ) ; #5942 = CARTESIAN_POINT ( 'NONE', ( 1.200000000000090100, -1.962141687034070000, -13.42000000000000000 ) ) ; #5943 = VECTOR ( 'NONE', #303, 1000.000000000000000 ) ; #5944 = ORIENTED_EDGE ( 'NONE', *, *, #2398, .F. ) ; #5945 = CARTESIAN_POINT ( 'NONE', ( 0.04503907920941311500, -2.766308296776673400, -9.994224332530160700 ) ) ; #5946 = EDGE_CURVE ( 'NONE', #6631, #1673, #2868, .T. ) ; #5947 = CARTESIAN_POINT ( 'NONE', ( 2.750000000000909500, -4.111624435740911700, -1.748839756839456500 ) ) ; #5948 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; #5949 = ORIENTED_EDGE ( 'NONE', *, *, #1358, .F. ) ; #5950 = AXIS2_PLACEMENT_3D ( 'NONE', #5396, #2243, #2801 ) ; #5951 = VERTEX_POINT ( 'NONE', #6495 ) ; #5952 = VECTOR ( 'NONE', #6266, 1000.000000000000000 ) ; #5953 = VERTEX_POINT ( 'NONE', #3264 ) ; #5954 = CYLINDRICAL_SURFACE ( 'NONE', #5312, 0.2999999999999999300 ) ; #5955 = ORIENTED_EDGE ( 'NONE', *, *, #1654, .T. ) ; #5956 = CARTESIAN_POINT ( 'NONE', ( 18.18468237128200100, -2.582763714337614800, -11.21899116184405200 ) ) ; #5957 = ADVANCED_FACE ( 'NONE', ( #3584, #6070 ), #6468, .T. ) ; #5958 = PLANE ( 'NONE', #4609 ) ; #5959 = CARTESIAN_POINT ( 'NONE', ( 2.750000000000909500, -4.700000144167390200, -1.699608054491449400 ) ) ; #5960 = VERTEX_POINT ( 'NONE', #713 ) ; #5961 = FACE_OUTER_BOUND ( 'NONE', #5985, .T. ) ; #5962 = ORIENTED_EDGE ( 'NONE', *, *, #1182, .T. ) ; #5963 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; #5964 = CARTESIAN_POINT ( 'NONE', ( 1.900000000000900100, -5.500000000000008900, -7.400000000000000400 ) ) ; #5965 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; #5966 = ORIENTED_EDGE ( 'NONE', *, *, #5121, .T. ) ; #5967 = EDGE_LOOP ( 'NONE', ( #351, #3435, #4887, #4256 ) ) ; #5968 = CARTESIAN_POINT ( 'NONE', ( -3.149999999999998600, 6.299999999999998900, -9.400000000000000400 ) ) ; #5969 = VECTOR ( 'NONE', #3416, 1000.000000000000000 ) ; #5970 = ORIENTED_EDGE ( 'NONE', *, *, #4593, .T. ) ; #5971 = EDGE_CURVE ( 'NONE', #2752, #6588, #5494, .T. ) ; #5972 = CARTESIAN_POINT ( 'NONE', ( 2.750000000000909500, -4.700000144167390200, -1.699608054491449400 ) ) ; #5973 = ORIENTED_EDGE ( 'NONE', *, *, #1386, .T. ) ; #5974 = CYLINDRICAL_SURFACE ( 'NONE', #1858, 0.3499999999999996400 ) ; #5975 = CARTESIAN_POINT ( 'NONE', ( -2.299999999999080100, -2.000000000000110100, -11.80000000000000100 ) ) ; #5976 = CARTESIAN_POINT ( 'NONE', ( 1.000046073843827300, -5.299999999999279500, -4.969833865421236400 ) ) ; #5977 = ORIENTED_EDGE ( 'NONE', *, *, #302, .T. ) ; #5978 = LINE ( 'NONE', #2807, #5643 ) ; #5979 = FACE_OUTER_BOUND ( 'NONE', #4143, .T. ) ; #5980 = EDGE_CURVE ( 'NONE', #6295, #2323, #4249, .T. ) ; #5981 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #5982 = CYLINDRICAL_SURFACE ( 'NONE', #4579, 1.199999999999930000 ) ; #5983 = VERTEX_POINT ( 'NONE', #6113 ) ; #5984 = CARTESIAN_POINT ( 'NONE', ( 3.550000000000880000, -5.299999999999280400, -11.90000000000010000 ) ) ; #5985 = EDGE_LOOP ( 'NONE', ( #2008, #760, #4811, #6363 ) ) ; #5986 = VECTOR ( 'NONE', #367, 1000.000000000000000 ) ; #5987 = ORIENTED_EDGE ( 'NONE', *, *, #2063, .F. ) ; #5988 = EDGE_CURVE ( 'NONE', #2032, #1498, #6245, .T. ) ; #5989 = ADVANCED_FACE ( 'NONE', ( #3741, #4100 ), #4511, .T. ) ; #5990 = PLANE ( 'NONE', #841 ) ; #5991 = CARTESIAN_POINT ( 'NONE', ( -1.279896855207083700, -2.582763714275671400, -11.21899116183752400 ) ) ; #5992 = FACE_OUTER_BOUND ( 'NONE', #3479, .T. ) ; #5993 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #5994 = FACE_OUTER_BOUND ( 'NONE', #500, .T. ) ; #5995 = EDGE_LOOP ( 'NONE', ( #6353, #4244, #5355, #3389, #5741 ) ) ; #5996 = PLANE ( 'NONE', #6709 ) ; #5997 = CARTESIAN_POINT ( 'NONE', ( 18.18468237128200100, -8.899999999998739100, -8.175735931287990300 ) ) ; #5998 = CARTESIAN_POINT ( 'NONE', ( 2.289217213497130000, -2.199999999999130200, -2.779157999888000100 ) ) ; #5999 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #6000 = LINE ( 'NONE', #3132, #4019 ) ; #6001 = CARTESIAN_POINT ( 'NONE', ( -0.2973713648706999300, -2.637958727882377300, -10.69384568692290900 ) ) ; #6002 = CARTESIAN_POINT ( 'NONE', ( -1.609819416659721300, 2.106664882464508000, -9.900000000000002100 ) ) ; #6003 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; #6004 = CARTESIAN_POINT ( 'NONE', ( -9.662512969806920500, -9.539807621135009800, -13.77999999999999900 ) ) ; #6005 = VECTOR ( 'NONE', #2706, 1000.000000000000000 ) ; #6006 = ORIENTED_EDGE ( 'NONE', *, *, #3583, .T. ) ; #6007 = CALENDAR_DATE ( 2018, 27, 9 ) ; #6008 = ORIENTED_EDGE ( 'NONE', *, *, #6822, .T. ) ; #6009 = CARTESIAN_POINT ( 'NONE', ( -2.912473175842152300, -1.199999999999971100, -9.400000000000000400 ) ) ; #6010 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #6011 = CARTESIAN_POINT ( 'NONE', ( 1.479999999999980000, -3.100000000000049800, -13.42000000000000000 ) ) ; #6012 = PLANE ( 'NONE', #485 ) ; #6013 = CARTESIAN_POINT ( 'NONE', ( 0.7999055883944151700, -5.299999999999280400, -4.485871648662406000 ) ) ; #6014 = EDGE_CURVE ( 'NONE', #2204, #1526, #1633, .T. ) ; #6015 = ORIENTED_EDGE ( 'NONE', *, *, #4078, .T. ) ; #6016 = CARTESIAN_POINT ( 'NONE', ( -0.2801178528518194500, -2.696669062917768300, -10.13525416216610600 ) ) ; #6017 = ORIENTED_EDGE ( 'NONE', *, *, #1460, .F. ) ; #6018 = DESIGN_CONTEXT ( 'detailed design', #5645, 'design' ) ; #6019 = ADVANCED_FACE ( 'NONE', ( #4490 ), #800, .F. ) ; #6020 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; #6021 = CARTESIAN_POINT ( 'NONE', ( -3.469446951953609900E-015, -2.699783421336158500, -10.03070813642794200 ) ) ; #6022 = ORIENTED_EDGE ( 'NONE', *, *, #4735, .T. ) ; #6023 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; #6024 = EDGE_CURVE ( 'NONE', #1185, #5443, #2368, .T. ) ; #6025 = VERTEX_POINT ( 'NONE', #6603 ) ; #6026 = VECTOR ( 'NONE', #40, 1000.000000000000000 ) ; #6027 = ORIENTED_EDGE ( 'NONE', *, *, #4087, .F. ) ; #6028 = VECTOR ( 'NONE', #5729, 1000.000000000000000 ) ; #6029 = EDGE_LOOP ( 'NONE', ( #3019, #1177, #3093, #1064 ) ) ; #6030 = ORIENTED_EDGE ( 'NONE', *, *, #5894, .T. ) ; #6031 = AXIS2_PLACEMENT_3D ( 'NONE', #5316, #2293, #3884 ) ; #6032 = CARTESIAN_POINT ( 'NONE', ( -2.749999999999090100, -5.500000000000009800, -5.600000000000860300 ) ) ; #6033 = LINE ( 'NONE', #6637, #4624 ) ; #6034 = CARTESIAN_POINT ( 'NONE', ( 2.289217213497129600, -2.199999999999130200, -2.779157999888000100 ) ) ; #6035 = EDGE_LOOP ( 'NONE', ( #1102, #4051, #1261, #2911, #6533, #6720, #3697, #1661, #2755, #6098, #2620, #762, #4924 ) ) ; #6036 = LINE ( 'NONE', #4740, #267 ) ; #6037 = EDGE_CURVE ( 'NONE', #3056, #4287, #5500, .T. ) ; #6038 = CARTESIAN_POINT ( 'NONE', ( 2.660000000000029900, -2.289999999999110100, -2.779157999888000100 ) ) ; #6039 = CARTESIAN_POINT ( 'NONE', ( -3.199999999999980200, -5.150000000000099800, -11.79999999999999900 ) ) ; #6040 = ORIENTED_EDGE ( 'NONE', *, *, #1753, .T. ) ; #6041 = VECTOR ( 'NONE', #1033, 1000.000000000000000 ) ; #6042 = CARTESIAN_POINT ( 'NONE', ( -0.3143554653290218100, -2.692767512363859700, -10.17237493607260900 ) ) ; #6043 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #6044 = ORIENTED_EDGE ( 'NONE', *, *, #5037, .F. ) ; #6045 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; #6046 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; #6047 = LINE ( 'NONE', #4888, #1861 ) ; #6048 = EDGE_LOOP ( 'NONE', ( #4015, #2483, #1345, #5556, #6292, #4943, #2520, #1020 ) ) ; #6049 = CARTESIAN_POINT ( 'NONE', ( -2.009600286187298100, -3.063158890845662600, -6.648336370488483000 ) ) ; #6050 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; #6051 = ADVANCED_FACE ( 'NONE', ( #3422 ), #3433, .F. ) ; #6052 = FACE_OUTER_BOUND ( 'NONE', #2534, .T. ) ; #6053 = ORIENTED_EDGE ( 'NONE', *, *, #4122, .T. ) ; #6054 = CARTESIAN_POINT ( 'NONE', ( -2.026786536416339800, -2.236097133178088100, -4.992430623593745200 ) ) ; #6055 = VECTOR ( 'NONE', #1257, 1000.000000000000000 ) ; #6056 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; #6057 = ORIENTED_EDGE ( 'NONE', *, *, #2768, .T. ) ; #6058 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -13.94999999999999900 ) ) ; #6059 = CARTESIAN_POINT ( 'NONE', ( -3.199999999999980200, -5.500000000000009800, -11.80000000000000100 ) ) ; #6060 = CARTESIAN_POINT ( 'NONE', ( -0.6141406617979390200, -5.299999999999281300, -4.300075066096915100 ) ) ; #6061 = ORIENTED_EDGE ( 'NONE', *, *, #340, .T. ) ; #6062 = VECTOR ( 'NONE', #5734, 1000.000000000000100 ) ; #6063 = ORIENTED_EDGE ( 'NONE', *, *, #5448, .F. ) ; #6064 = CARTESIAN_POINT ( 'NONE', ( 0.3291227966523266300, -2.642048192393626800, -10.65493703114022100 ) ) ; #6065 = CARTESIAN_POINT ( 'NONE', ( -1.899999999998069900, -5.500000000000008900, -7.400000000000000400 ) ) ; #6066 = ORIENTED_EDGE ( 'NONE', *, *, #254, .T. ) ; #6067 = EDGE_CURVE ( 'NONE', #2163, #3809, #1641, .T. ) ; #6068 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; #6069 = CARTESIAN_POINT ( 'NONE', ( 2.525062168252601800, -0.8295123224881515400, -9.900000000000000400 ) ) ; #6070 = FACE_OUTER_BOUND ( 'NONE', #4686, .T. ) ; #6071 = VECTOR ( 'NONE', #2745, 1000.000000000000000 ) ; #6072 = CARTESIAN_POINT ( 'NONE', ( 0.8374792807742265100, -5.565654700735771100, -6.116796583962123000 ) ) ; #6073 = VERTEX_POINT ( 'NONE', #3480 ) ; #6074 = EDGE_CURVE ( 'NONE', #5487, #6729, #2693, .T. ) ; #6075 = CARTESIAN_POINT ( 'NONE', ( 2.499999999999949800, 2.400000000000960000, -2.699999999999999700 ) ) ; #6076 = CARTESIAN_POINT ( 'NONE', ( -1.479999999999979600, -11.59999999999990000, -13.42000000000000000 ) ) ; #6077 = CARTESIAN_POINT ( 'NONE', ( 3.050000000000940000, -5.500000000000009800, -5.600000000000860300 ) ) ; #6078 = AXIS2_PLACEMENT_3D ( 'NONE', #3066, #5180, #1449 ) ; #6079 = VECTOR ( 'NONE', #434, 1000.000000000000000 ) ; #6080 = LINE ( 'NONE', #1113, #1887 ) ; #6081 = EDGE_CURVE ( 'NONE', #2283, #2416, #5319, .T. ) ; #6082 = EDGE_LOOP ( 'NONE', ( #32, #211, #4357, #5454, #5608, #4020 ) ) ; #6083 = EDGE_CURVE ( 'NONE', #3576, #1091, #6740, .T. ) ; #6084 = CARTESIAN_POINT ( 'NONE', ( 2.002940958900980100, -1.995272590502808800, -5.068132361100497400 ) ) ; #6085 = CARTESIAN_POINT ( 'NONE', ( -1.777709254451055100, 13.22368666611137100, 14.93199160091300100 ) ) ; #6086 = AXIS2_PLACEMENT_3D ( 'NONE', #4468, #2889, #6122 ) ; #6087 = ORIENTED_EDGE ( 'NONE', *, *, #1919, .T. ) ; #6088 = CARTESIAN_POINT ( 'NONE', ( 1.249999999999969800, -8.743404002370651200, -8.443404002370924000 ) ) ; #6089 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #6090 = CIRCLE ( 'NONE', #1823, 0.6099999999999998800 ) ; #6091 = CARTESIAN_POINT ( 'NONE', ( -4.250000000000089700, 4.299999999999911000, -0.4999999999999990600 ) ) ; #6092 = CARTESIAN_POINT ( 'NONE', ( 3.032656905156805300, -0.9882141070624987900, -9.692893218813472000 ) ) ; #6093 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -7.228014486420626900E-016, 1.000000000000000000 ) ) ; #6094 = ORIENTED_EDGE ( 'NONE', *, *, #263, .F. ) ; #6095 = CARTESIAN_POINT ( 'NONE', ( -1.050000000000000000, 1.285879139104721000E-016, -11.80000000000000100 ) ) ; #6096 = EDGE_CURVE ( 'NONE', #3015, #4213, #1477, .T. ) ; #6097 = CARTESIAN_POINT ( 'NONE', ( 4.500000000000000000, 3.799999999999910100, -0.4999999999999985000 ) ) ; #6098 = ORIENTED_EDGE ( 'NONE', *, *, #4748, .F. ) ; #6099 = VERTEX_POINT ( 'NONE', #2392 ) ; #6100 = CARTESIAN_POINT ( 'NONE', ( 2.299999999999859900, -1.199999999999980000, -11.80000000000000100 ) ) ; #6101 = EDGE_CURVE ( 'NONE', #2820, #5983, #6406, .T. ) ; #6102 = CARTESIAN_POINT ( 'NONE', ( -2.009664795269813500, -2.199060483617061300, -5.264242441779104300 ) ) ; #6103 = EDGE_LOOP ( 'NONE', ( #2201, #6403, #5966, #6274 ) ) ; #6104 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; #6105 = ADVANCED_FACE ( 'NONE', ( #1812 ), #5167, .F. ) ; #6106 = EDGE_CURVE ( 'NONE', #6151, #1784, #3927, .T. ) ; #6107 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #6108 = ORIENTED_EDGE ( 'NONE', *, *, #3257, .F. ) ; #6109 = VECTOR ( 'NONE', #3773, 1000.000000000000000 ) ; #6110 = ORIENTED_EDGE ( 'NONE', *, *, #2171, .F. ) ; #6111 = CARTESIAN_POINT ( 'NONE', ( 4.500000000000060400, -2.199999999999089800, -11.80000000000000100 ) ) ; #6112 = EDGE_CURVE ( 'NONE', #2862, #2220, #3750, .T. ) ; #6113 = CARTESIAN_POINT ( 'NONE', ( 4.499999999999988500, 3.799999999999910100, -0.4999999999999988300 ) ) ; #6114 = CARTESIAN_POINT ( 'NONE', ( -4.292893218813453000, 4.299999999999910100, -0.2071067811865469100 ) ) ; #6115 = EDGE_LOOP ( 'NONE', ( #5190, #4961, #6693, #35 ) ) ; #6116 = FACE_OUTER_BOUND ( 'NONE', #4534, .T. ) ; #6117 = ORIENTED_EDGE ( 'NONE', *, *, #4564, .T. ) ; #6118 = CARTESIAN_POINT ( 'NONE', ( -0.3153019221302880700, -5.212026925706082300, -4.088229105052651100 ) ) ; #6119 = FACE_OUTER_BOUND ( 'NONE', #240, .T. ) ; #6120 = EDGE_LOOP ( 'NONE', ( #3886, #2767, #2414, #538, #4425, #5789, #5579, #5774, #1787, #3608, #127, #2874, #2856 ) ) ; #6121 = EDGE_CURVE ( 'NONE', #5046, #3881, #6748, .T. ) ; #6122 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; #6123 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; #6124 = ORIENTED_EDGE ( 'NONE', *, *, #6300, .F. ) ; #6125 = LINE ( 'NONE', #3997, #4376 ) ; #6126 = ORIENTED_EDGE ( 'NONE', *, *, #4327, .F. ) ; #6127 = CARTESIAN_POINT ( 'NONE', ( -2.749999999999090100, -4.511620620306681300, -1.728323193272890900 ) ) ; #6128 = CC_DESIGN_APPROVAL ( #1638, ( #2946 ) ) ; #6129 = CARTESIAN_POINT ( 'NONE', ( -4.149999999999989700, 0.0000000000000000000, -11.80000000000000100 ) ) ; #6130 = EDGE_CURVE ( 'NONE', #3734, #1830, #3246, .T. ) ; #6131 = FACE_OUTER_BOUND ( 'NONE', #2528, .T. ) ; #6132 = CARTESIAN_POINT ( 'NONE', ( -3.725592231765940000, 2.400000000000960000, -2.700000000000000200 ) ) ; #6133 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; #6134 = ORIENTED_EDGE ( 'NONE', *, *, #464, .T. ) ; #6135 = ORIENTED_EDGE ( 'NONE', *, *, #2628, .T. ) ; #6136 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; #6137 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; #6138 = LINE ( 'NONE', #5893, #540 ) ; #6139 = ORIENTED_EDGE ( 'NONE', *, *, #4772, .T. ) ; #6140 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; #6141 = PLANE ( 'NONE', #5318 ) ; #6142 = VECTOR ( 'NONE', #673, 1000.000000000000000 ) ; #6143 = CARTESIAN_POINT ( 'NONE', ( 1.279896855207900000, 13.18406534392610000, 14.95674975082870100 ) ) ; #6144 = ORIENTED_EDGE ( 'NONE', *, *, #5083, .F. ) ; #6145 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; #6146 = VECTOR ( 'NONE', #2960, 1000.000000000000100 ) ; #6147 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; #6148 = PLANE ( 'NONE', #2865 ) ; #6149 = LINE ( 'NONE', #5056, #2108 ) ; #6150 = VERTEX_POINT ( 'NONE', #3046 ) ; #6151 = VERTEX_POINT ( 'NONE', #1448 ) ; #6152 = CARTESIAN_POINT ( 'NONE', ( -2.749999999999097600, -4.208418032298745900, -1.955662937369615500 ) ) ; #6153 = EDGE_CURVE ( 'NONE', #5733, #4383, #4418, .T. ) ; #6154 = CARTESIAN_POINT ( 'NONE', ( -2.026786536416642200, -2.236097133178305700, -4.992430623593916600 ) ) ; #6155 = EDGE_CURVE ( 'NONE', #4966, #6795, #472, .T. ) ; #6156 = CARTESIAN_POINT ( 'NONE', ( 1.249999999999969800, -9.112132034355555600, -8.387867965643975400 ) ) ; #6157 = CARTESIAN_POINT ( 'NONE', ( 3.900000000000130000, 0.04999999999993900300, -13.40000000000000000 ) ) ; #6158 = CIRCLE ( 'NONE', #3644, 0.3600000000000001000 ) ; #6159 = VERTEX_POINT ( 'NONE', #2499 ) ; #6160 = CARTESIAN_POINT ( 'NONE', ( 4.000000000000000000, 4.299999999999919900, -3.499999999999999600 ) ) ; #6161 = VECTOR ( 'NONE', #1590, 1000.000000000000000 ) ; #6162 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -11.80000000000000100 ) ) ; #6163 = LINE ( 'NONE', #3816, #564 ) ; #6164 = CARTESIAN_POINT ( 'NONE', ( 1.187977493298882900, 2.370398666075154800, -9.900000000000000400 ) ) ; #6165 = EDGE_LOOP ( 'NONE', ( #3803, #2038, #925, #6814 ) ) ; #6166 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; #6167 = EDGE_CURVE ( 'NONE', #6788, #866, #1343, .T. ) ; #6168 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #6169 = CARTESIAN_POINT ( 'NONE', ( 1.500000000000059700, -6.350000000000020100, -7.950000000000000200 ) ) ; #6170 = AXIS2_PLACEMENT_3D ( 'NONE', #4157, #976, #1532 ) ; #6171 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; #6172 = FACE_OUTER_BOUND ( 'NONE', #4646, .T. ) ; #6173 = CARTESIAN_POINT ( 'NONE', ( 2.026786536416744300, -2.236097133178126800, -4.992430623593719500 ) ) ; #6174 = CARTESIAN_POINT ( 'NONE', ( 4.000000000000000000, 4.299999999999910100, -0.2071067811865468800 ) ) ; #6175 = ADVANCED_FACE ( 'NONE', ( #1300 ), #5660, .T. ) ; #6176 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; #6177 = AXIS2_PLACEMENT_3D ( 'NONE', #4208, #4188, #2610 ) ; #6178 = VERTEX_POINT ( 'NONE', #6191 ) ; #6179 = CIRCLE ( 'NONE', #5776, 0.5000000000000000000 ) ; #6180 = EDGE_CURVE ( 'NONE', #3964, #6215, #71, .T. ) ; #6181 = CARTESIAN_POINT ( 'NONE', ( 18.18468237128200100, -5.700000000000730300, -7.400000000000000400 ) ) ; #6182 = VERTEX_POINT ( 'NONE', #3502 ) ; #6183 = AXIS2_PLACEMENT_3D ( 'NONE', #660, #6465, #6515 ) ; #6184 = CARTESIAN_POINT ( 'NONE', ( -0.5032122397321402400, -5.299999999999281300, -5.973924357505072000 ) ) ; #6185 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; #6186 = PERSON_AND_ORGANIZATION_ROLE ( 'creator' ) ; #6187 = CARTESIAN_POINT ( 'NONE', ( 2.501356718615850700, -1.199999999999979100, -9.900000000000009200 ) ) ; #6188 = AXIS2_PLACEMENT_3D ( 'NONE', #4362, #3256, #3785 ) ; #6189 = ORIENTED_EDGE ( 'NONE', *, *, #4194, .T. ) ; #6190 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; #6191 = CARTESIAN_POINT ( 'NONE', ( 4.000000000000000000, -6.500000000000060400, -11.80000000000000100 ) ) ; #6192 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -2.100000000000049800 ) ) ; #6193 = EDGE_CURVE ( 'NONE', #1363, #4863, #2859, .T. ) ; #6194 = CARTESIAN_POINT ( 'NONE', ( 4.500000000000000900, 3.799999999999910100, -0.4999999999999990600 ) ) ; #6195 = CARTESIAN_POINT ( 'NONE', ( -1.049999999999892600, -5.538256331734733100E-014, -13.77999999999999900 ) ) ; #6196 = EDGE_LOOP ( 'NONE', ( #3916, #3288, #1262, #5214 ) ) ; #6197 = ORIENTED_EDGE ( 'NONE', *, *, #5002, .F. ) ; #6198 = CARTESIAN_POINT ( 'NONE', ( 2.942893218813432900, -3.604004760652320700E-016, -9.900000000000023400 ) ) ; #6199 = CARTESIAN_POINT ( 'NONE', ( 0.6133581890837828100, -5.299999999999281300, -5.900759367196201300 ) ) ; #6200 = LINE ( 'NONE', #4791, #4777 ) ; #6201 = ORIENTED_EDGE ( 'NONE', *, *, #5100, .F. ) ; #6202 = LINE ( 'NONE', #1708, #3208 ) ; #6203 = EDGE_LOOP ( 'NONE', ( #5822, #4940, #1246, #508 ) ) ; #6204 = CARTESIAN_POINT ( 'NONE', ( -2.649999999999962600, 2.300332174325093800E-009, -9.900000000000000400 ) ) ; #6205 = ORIENTED_EDGE ( 'NONE', *, *, #4378, .F. ) ; #6206 = EDGE_CURVE ( 'NONE', #4679, #4905, #236, .T. ) ; #6207 = ADVANCED_FACE ( 'NONE', ( #4911 ), #4660, .F. ) ; #6208 = ORIENTED_EDGE ( 'NONE', *, *, #393, .F. ) ; #6209 = VECTOR ( 'NONE', #17, 1000.000000000000000 ) ; #6210 = CARTESIAN_POINT ( 'NONE', ( -3.899999999999789900, -6.049999999999999800, -13.44999999999999900 ) ) ; #6211 = CARTESIAN_POINT ( 'NONE', ( 2.506042611943417200, 0.8795934882266177600, -9.900000000000000400 ) ) ; #6212 = ORIENTED_EDGE ( 'NONE', *, *, #1025, .F. ) ; #6213 = CARTESIAN_POINT ( 'NONE', ( 1.479999999999980000, -3.100000000000049800, -13.77999999999999900 ) ) ; #6214 = CARTESIAN_POINT ( 'NONE', ( -1.499999999999830100, -6.350000000000021000, -7.950000000000000200 ) ) ; #6215 = VERTEX_POINT ( 'NONE', #4603 ) ; #6216 = ORIENTED_EDGE ( 'NONE', *, *, #2550, .F. ) ; #6217 = CARTESIAN_POINT ( 'NONE', ( 2.750000000000909500, -4.111624435740911700, -1.748839756839456500 ) ) ; #6218 = CYLINDRICAL_SURFACE ( 'NONE', #4178, 0.5000000000000004400 ) ; #6219 = EDGE_CURVE ( 'NONE', #887, #2314, #2615, .T. ) ; #6220 = ORIENTED_EDGE ( 'NONE', *, *, #4941, .T. ) ; #6221 = CARTESIAN_POINT ( 'NONE', ( 3.600000000000160000, -6.350000000000021000, -13.44999999999999900 ) ) ; #6222 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #6223 = AXIS2_PLACEMENT_3D ( 'NONE', #692, #3279, #4358 ) ; #6224 = LINE ( 'NONE', #1940, #4801 ) ; #6225 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #6226 = ORIENTED_EDGE ( 'NONE', *, *, #4323, .T. ) ; #6227 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000089900, -5.645142088676490900, -7.599999999999870900 ) ) ; #6228 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #6229 = CARTESIAN_POINT ( 'NONE', ( 4.499999999999950300, 3.799999999999910100, -1.000000000000000000 ) ) ; #6230 = DATE_TIME_ROLE ( 'creation_date' ) ; #6231 = CARTESIAN_POINT ( 'NONE', ( -3.149999999999999900, 2.734357112877036100E-009, -9.692893218813468400 ) ) ; #6232 = VERTEX_POINT ( 'NONE', #1474 ) ; #6233 = LINE ( 'NONE', #6522, #1616 ) ; #6234 = ORIENTED_EDGE ( 'NONE', *, *, #4872, .T. ) ; #6235 = ORIENTED_EDGE ( 'NONE', *, *, #2453, .F. ) ; #6236 = VECTOR ( 'NONE', #3752, 1000.000000000000000 ) ; #6237 = VERTEX_POINT ( 'NONE', #5694 ) ; #6238 = CARTESIAN_POINT ( 'NONE', ( -1.479999999999979600, -8.299999999999940300, -12.93358983848630000 ) ) ; #6239 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, ( #1331, #2912, #217, #1809, #4426, #5537 ), .UNSPECIFIED., .F., .F., ( 4, 2, 4 ), ( 0.0000000000000000000, 0.5000000000000000000, 1.000000000000000000 ), .UNSPECIFIED. ) ; #6240 = CARTESIAN_POINT ( 'NONE', ( -4.339999999999969700, -1.949999999999100000, -9.800000000000000700 ) ) ; #6241 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; #6242 = FACE_OUTER_BOUND ( 'NONE', #6120, .T. ) ; #6243 = ORIENTED_EDGE ( 'NONE', *, *, #4657, .F. ) ; #6244 = VERTEX_POINT ( 'NONE', #5676 ) ; #6245 = LINE ( 'NONE', #324, #1122 ) ; #6246 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, ( #4462, #2393, #6069, #298, #6678, #6653, #3990, #1403, #1938 ), .UNSPECIFIED., .F., .F., ( 4, 2, 2, 1, 4 ), ( 0.0000000000000000000, 0.05842545144886521200, 0.07303181431108150800, 0.08763817717329780400, 0.1168509028977303700 ), .UNSPECIFIED. ) ; #6247 = CYLINDRICAL_SURFACE ( 'NONE', #6183, 0.6299999999999998900 ) ; #6248 = ORIENTED_EDGE ( 'NONE', *, *, #6650, .F. ) ; #6249 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; #6250 = EDGE_CURVE ( 'NONE', #6215, #4848, #4701, .T. ) ; #6251 = CARTESIAN_POINT ( 'NONE', ( 2.750000000000909500, -4.235543867672605600, -1.916968391678838300 ) ) ; #6252 = CARTESIAN_POINT ( 'NONE', ( -4.500000000000060400, -6.000000000000060400, -11.80000000000000100 ) ) ; #6253 = VECTOR ( 'NONE', #6262, 1000.000000000000000 ) ; #6254 = CARTESIAN_POINT ( 'NONE', ( 2.299999999999859900, -2.000000000000110100, -11.80000000000000100 ) ) ; #6255 = VECTOR ( 'NONE', #478, 1000.000000000000000 ) ; #6256 = EDGE_LOOP ( 'NONE', ( #1239, #6770 ) ) ; #6257 = ORIENTED_EDGE ( 'NONE', *, *, #5738, .F. ) ; #6258 = VECTOR ( 'NONE', #5775, 999.9999999999998900 ) ; #6259 = CARTESIAN_POINT ( 'NONE', ( 18.18468237128200100, -2.283098795542540100, -5.375228444583569900 ) ) ; #6260 = EDGE_CURVE ( 'NONE', #4466, #3378, #5909, .T. ) ; #6261 = PLANE ( 'NONE', #1055 ) ; #6262 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #6263 = AXIS2_PLACEMENT_3D ( 'NONE', #3105, #2143, #5783 ) ; #6264 = AXIS2_PLACEMENT_3D ( 'NONE', #6685, #860, #2487 ) ; #6265 = LINE ( 'NONE', #6582, #2389 ) ; #6266 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; #6267 = CARTESIAN_POINT ( 'NONE', ( 2.750000000000910400, -5.299999999999819500, -2.218840913485523800 ) ) ; #6268 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #6269 = ORIENTED_EDGE ( 'NONE', *, *, #5674, .T. ) ; #6270 = AXIS2_PLACEMENT_3D ( 'NONE', #2694, #6416, #2712 ) ; #6271 = EDGE_CURVE ( 'NONE', #6547, #5291, #321, .T. ) ; #6272 = AXIS2_PLACEMENT_3D ( 'NONE', #3856, #4386, #1813 ) ; #6273 = CARTESIAN_POINT ( 'NONE', ( -4.339999999999969700, -2.559999999999050100, -2.779157999888000100 ) ) ; #6274 = ORIENTED_EDGE ( 'NONE', *, *, #2666, .F. ) ; #6275 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -10.15000000000000000 ) ) ; #6276 = AXIS2_PLACEMENT_3D ( 'NONE', #5732, #1997, #5193 ) ; #6277 = ORIENTED_EDGE ( 'NONE', *, *, #6101, .F. ) ; #6278 = CARTESIAN_POINT ( 'NONE', ( 3.200000000000979800, -5.500000000000008900, -5.299999999999999800 ) ) ; #6279 = CARTESIAN_POINT ( 'NONE', ( -4.149999999999989700, 0.0000000000000000000, -11.80000000000000100 ) ) ; #6280 = CARTESIAN_POINT ( 'NONE', ( 8.847089727481720200E-013, -5.500000000000009800, -7.400000000000000400 ) ) ; #6281 = CARTESIAN_POINT ( 'NONE', ( -0.7243921280133924800, -11.07528999022651400, -7.599999999999871700 ) ) ; #6282 = ORIENTED_EDGE ( 'NONE', *, *, #4645, .T. ) ; #6283 = ORIENTED_EDGE ( 'NONE', *, *, #3854, .T. ) ; #6284 = CARTESIAN_POINT ( 'NONE', ( -3.549999999999000200, -5.500000000000009800, -6.100000000000919800 ) ) ; #6285 = ORIENTED_EDGE ( 'NONE', *, *, #3553, .F. ) ; #6286 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; #6287 = EDGE_CURVE ( 'NONE', #6150, #6569, #4411, .T. ) ; #6288 = ORIENTED_EDGE ( 'NONE', *, *, #439, .T. ) ; #6289 = CIRCLE ( 'NONE', #3845, 1.050000000000000000 ) ; #6290 = ORIENTED_EDGE ( 'NONE', *, *, #5805, .F. ) ; #6291 = VECTOR ( 'NONE', #3379, 1000.000000000000000 ) ; #6292 = ORIENTED_EDGE ( 'NONE', *, *, #973, .F. ) ; #6293 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, ( #1490, #4685, #5669, #6738 ), .UNSPECIFIED., .F., .F., ( 4, 4 ), ( 0.0000000000000000000, 1.000000000000000000 ), .UNSPECIFIED. ) ; #6294 = CARTESIAN_POINT ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -2.100000000000049800 ) ) ; #6295 = VERTEX_POINT ( 'NONE', #2126 ) ; #6296 = VECTOR ( 'NONE', #6176, 1000.000000000000000 ) ; #6297 = CARTESIAN_POINT ( 'NONE', ( -2.551282791539671600, -0.8313547282656867900, -9.900000000000000400 ) ) ; #6298 = ORIENTED_EDGE ( 'NONE', *, *, #4008, .T. ) ; #6299 = ORIENTED_EDGE ( 'NONE', *, *, #1797, .F. ) ; #6300 = EDGE_CURVE ( 'NONE', #1143, #5029, #3173, .T. ) ; #6301 = ORIENTED_EDGE ( 'NONE', *, *, #2621, .T. ) ; #6302 = CARTESIAN_POINT ( 'NONE', ( -4.000000000000000000, -6.000000000000061300, 1.301042606982605300E-015 ) ) ; #6303 = EDGE_LOOP ( 'NONE', ( #1376, #6201, #2629, #3770 ) ) ; #6304 = VECTOR ( 'NONE', #4349, 1000.000000000000000 ) ; #6305 = EDGE_CURVE ( 'NONE', #2371, #3415, #1556, .T. ) ; #6306 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; #6307 = ORIENTED_EDGE ( 'NONE', *, *, #642, .F. ) ; #6308 = PLANE ( 'NONE', #6527 ) ; #6309 = CARTESIAN_POINT ( 'NONE', ( 3.650000000000929800, -5.500000000000009800, -11.80000000000000100 ) ) ; #6310 = AXIS2_PLACEMENT_3D ( 'NONE', #1188, #234, #3826 ) ; #6311 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #6312 = LINE ( 'NONE', #4869, #3487 ) ; #6313 = ORIENTED_EDGE ( 'NONE', *, *, #4045, .T. ) ; #6314 = CARTESIAN_POINT ( 'NONE', ( 3.200000000000979800, -1.199999999999980000, -11.79999999999999900 ) ) ; #6315 = AXIS2_PLACEMENT_3D ( 'NONE', #5440, #3238, #3768 ) ; #6316 = VECTOR ( 'NONE', #4318, 1000.000000000000000 ) ; #6317 = CYLINDRICAL_SURFACE ( 'NONE', #3149, 1.050000000000000000 ) ; #6318 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #6319 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; #6320 = VECTOR ( 'NONE', #5172, 1000.000000000000000 ) ; #6321 = ORIENTED_EDGE ( 'NONE', *, *, #4046, .F. ) ; #6322 = CARTESIAN_POINT ( 'NONE', ( -4.000000000000000000, 3.799999999999910100, -1.000000000000000900 ) ) ; #6323 = ADVANCED_FACE ( 'NONE', ( #5994 ), #5245, .T. ) ; #6324 = CARTESIAN_POINT ( 'NONE', ( 18.18468237128200100, -8.970710678117649600, -8.246446609405911200 ) ) ; #6325 = LINE ( 'NONE', #6238, #1287 ) ; #6326 = ORIENTED_EDGE ( 'NONE', *, *, #1297, .T. ) ; #6327 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; #6328 = CARTESIAN_POINT ( 'NONE', ( -1.199999999999930000, -3.100000000000049800, -13.77999999999999900 ) ) ; #6329 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; #6330 = LINE ( 'NONE', #4084, #2287 ) ; #6331 = ADVANCED_FACE ( 'NONE', ( #2377 ), #6308, .T. ) ; #6332 = LINE ( 'NONE', #206, #3254 ) ; #6333 = VERTEX_POINT ( 'NONE', #6810 ) ; #6334 = EDGE_LOOP ( 'NONE', ( #1106, #398, #3726, #1606 ) ) ; #6335 = CARTESIAN_POINT ( 'NONE', ( 3.650000000000929800, -5.150000000000099800, -5.299999999999999800 ) ) ; #6336 = VECTOR ( 'NONE', #3027, 1000.000000000000000 ) ; #6337 = EDGE_CURVE ( 'NONE', #1526, #2679, #4498, .T. ) ; #6338 = CARTESIAN_POINT ( 'NONE', ( 2.750000000000909100, -4.377608002528971200, -1.791462437402051100 ) ) ; #6339 = CARTESIAN_POINT ( 'NONE', ( 4.500000000000000000, -6.000000000000059500, -0.5000000000000001100 ) ) ; #6340 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; #6341 = FACE_OUTER_BOUND ( 'NONE', #5995, .T. ) ; #6342 = VERTEX_POINT ( 'NONE', #1542 ) ; #6343 = CARTESIAN_POINT ( 'NONE', ( 18.18468237128200100, -8.970710678117889400, -8.246446609406149300 ) ) ; #6344 = EDGE_CURVE ( 'NONE', #3224, #1068, #4745, .T. ) ; #6345 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; #6346 = CARTESIAN_POINT ( 'NONE', ( 0.9448049200626990100, -10.87301449803669800, -7.599999999999871700 ) ) ; #6347 = ORIENTED_EDGE ( 'NONE', *, *, #3011, .F. ) ; #6348 = CARTESIAN_POINT ( 'NONE', ( 1.479999999999978700, -9.819999999999989600, -13.77999999999999900 ) ) ; #6349 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #6350 = CARTESIAN_POINT ( 'NONE', ( 3.550000000000880000, -5.299999999999280400, -11.90000000000010000 ) ) ; #6351 = ADVANCED_FACE ( 'NONE', ( #3513 ), #6498, .T. ) ; #6352 = CC_DESIGN_PERSON_AND_ORGANIZATION_ASSIGNMENT ( #1566, #3560, ( #1309 ) ) ; #6353 = ORIENTED_EDGE ( 'NONE', *, *, #569, .F. ) ; #6354 = CARTESIAN_POINT ( 'NONE', ( -2.037134352765116700, -3.043296795206258000, -6.084124547720544600 ) ) ; #6355 = CARTESIAN_POINT ( 'NONE', ( -4.500000000000060400, 2.400000000000960000, -2.549999999999999800 ) ) ; #6356 = CARTESIAN_POINT ( 'NONE', ( -2.749999999999090100, -5.299999999999685400, -2.300000000000010000 ) ) ; #6357 = PLANE ( 'NONE', #3330 ) ; #6358 = VERTEX_POINT ( 'NONE', #5739 ) ; #6359 = ORIENTED_EDGE ( 'NONE', *, *, #784, .T. ) ; #6360 = CIRCLE ( 'NONE', #1895, 1.199999999999930000 ) ; #6361 = VERTEX_POINT ( 'NONE', #1047 ) ; #6362 = VECTOR ( 'NONE', #1076, 1000.000000000000000 ) ; #6363 = ORIENTED_EDGE ( 'NONE', *, *, #2279, .F. ) ; #6364 = CARTESIAN_POINT ( 'NONE', ( -2.018281576592344500, -2.906897123192763400, -6.230395288045460100 ) ) ; #6365 = CARTESIAN_POINT ( 'NONE', ( 1.075528555105620000E-013, -5.551115123125780200E-014, -13.77999999999999900 ) ) ; #6366 = CARTESIAN_POINT ( 'NONE', ( 1.100119322146952500, -10.64652461718974800, -7.599999999999870000 ) ) ; #6367 = ORIENTED_EDGE ( 'NONE', *, *, #5524, .F. ) ; #6368 = LINE ( 'NONE', #5124, #2421 ) ; #6369 = ORIENTED_EDGE ( 'NONE', *, *, #1628, .F. ) ; #6370 = CARTESIAN_POINT ( 'NONE', ( 3.650000000000929800, -5.500000000000009800, -11.80000000000000100 ) ) ; #6371 = VECTOR ( 'NONE', #4652, 1000.000000000000000 ) ; #6372 = EDGE_CURVE ( 'NONE', #330, #1667, #1214, .T. ) ; #6373 = CARTESIAN_POINT ( 'NONE', ( -9.662512969806920500, -7.635192378864090300, -13.73310889132460000 ) ) ; #6374 = LINE ( 'NONE', #3458, #1853 ) ; #6375 = EDGE_LOOP ( 'NONE', ( #5344, #6813, #4306, #772 ) ) ; #6376 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #6377 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #6378 = CARTESIAN_POINT ( 'NONE', ( 1.575000000000000000, 1.928818708657081300E-016, 0.0000000000000000000 ) ) ; #6379 = VECTOR ( 'NONE', #3835, 1000.000000000000000 ) ; #6380 = EDGE_CURVE ( 'NONE', #3971, #2239, #1388, .T. ) ; #6381 = VERTEX_POINT ( 'NONE', #4717 ) ; #6382 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; #6383 = ORIENTED_EDGE ( 'NONE', *, *, #3814, .F. ) ; #6384 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; #6385 = LINE ( 'NONE', #530, #5639 ) ; #6386 = DIRECTION ( 'NONE', ( 1.000000000000000000, 1.776356839400250500E-015, 0.0000000000000000000 ) ) ; #6387 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000090600, -5.699999999999819900, -7.799999999999481100 ) ) ; #6388 = ORIENTED_EDGE ( 'NONE', *, *, #1949, .T. ) ; #6389 = ORIENTED_EDGE ( 'NONE', *, *, #4110, .F. ) ; #6390 = AXIS2_PLACEMENT_3D ( 'NONE', #555, #3197, #3240 ) ; #6391 = LINE ( 'NONE', #1506, #1039 ) ; #6392 = ORIENTED_EDGE ( 'NONE', *, *, #5101, .F. ) ; #6393 = ADVANCED_FACE ( 'NONE', ( #5417 ), #5784, .T. ) ; #6394 = PLANE ( 'NONE', #348 ) ; #6395 = EDGE_CURVE ( 'NONE', #3780, #5825, #3099, .T. ) ; #6396 = ORIENTED_EDGE ( 'NONE', *, *, #2222, .F. ) ; #6397 = AXIS2_PLACEMENT_3D ( 'NONE', #2937, #4463, #4018 ) ; #6398 = VECTOR ( 'NONE', #152, 1000.000000000000000 ) ; #6399 = ORIENTED_EDGE ( 'NONE', *, *, #6784, .F. ) ; #6400 = VERTEX_POINT ( 'NONE', #3589 ) ; #6401 = AXIS2_PLACEMENT_3D ( 'NONE', #1743, #5419, #2265 ) ; #6402 = CARTESIAN_POINT ( 'NONE', ( -2.524934841833427000, -0.8297446384836089100, -9.900000000000002100 ) ) ; #6403 = ORIENTED_EDGE ( 'NONE', *, *, #642, .T. ) ; #6404 = CARTESIAN_POINT ( 'NONE', ( -4.500000000000060400, 3.799999999999910600, -3.499999999999999600 ) ) ; #6405 = CARTESIAN_POINT ( 'NONE', ( -1.049999999999889000, -5.538256331734733100E-014, -11.80000000000000100 ) ) ; #6406 = LINE ( 'NONE', #1354, #6587 ) ; #6407 = LINE ( 'NONE', #6674, #1710 ) ; #6408 = ORIENTED_EDGE ( 'NONE', *, *, #2267, .F. ) ; #6409 = CARTESIAN_POINT ( 'NONE', ( 3.900000000000130000, 0.04999999999993900300, -13.40000000000000000 ) ) ; #6410 = ADVANCED_FACE ( 'NONE', ( #2044 ), #6261, .T. ) ; #6411 = CARTESIAN_POINT ( 'NONE', ( -4.000000000000000000, -6.500000000000060400, -11.80000000000000100 ) ) ; #6412 = VECTOR ( 'NONE', #6003, 1000.000000000000000 ) ; #6413 = CARTESIAN_POINT ( 'NONE', ( -0.03799084743383512900, -2.699175893184430700, -10.03108776215037200 ) ) ; #6414 = VECTOR ( 'NONE', #1204, 1000.000000000000000 ) ; #6415 = VERTEX_POINT ( 'NONE', #3784 ) ; #6416 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; #6417 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000091000, -5.491205336494750200, -7.756890761442921400 ) ) ; #6418 = CARTESIAN_POINT ( 'NONE', ( -3.049999999999060600, -5.500000000000009800, -5.600000000000919800 ) ) ; #6419 = FACE_OUTER_BOUND ( 'NONE', #1510, .T. ) ; #6420 = CARTESIAN_POINT ( 'NONE', ( 1.249999999999969800, -9.595602668246961300, -7.621554619278196400 ) ) ; #6421 = ORIENTED_EDGE ( 'NONE', *, *, #654, .F. ) ; #6422 = CARTESIAN_POINT ( 'NONE', ( 4.000000000000000000, -6.500000000000060400, -11.80000000000000100 ) ) ; #6423 = COORDINATED_UNIVERSAL_TIME_OFFSET ( 8, 0, .BEHIND. ) ; #6424 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #6425 = EDGE_CURVE ( 'NONE', #5185, #6729, #6660, .T. ) ; #6426 = VERTEX_POINT ( 'NONE', #2144 ) ; #6427 = CARTESIAN_POINT ( 'NONE', ( 2.499999999999949800, 4.299999999999919900, -2.699999999999999700 ) ) ; #6428 = ADVANCED_FACE ( 'NONE', ( #639, #4831 ), #4852, .F. ) ; #6429 = CARTESIAN_POINT ( 'NONE', ( 1.575000000000000000, 1.928818708657081300E-016, -10.15000000000000000 ) ) ; #6430 = ORIENTED_EDGE ( 'NONE', *, *, #6607, .T. ) ; #6431 = CARTESIAN_POINT ( 'NONE', ( -0.07658533384984986300, -2.739046396519780700, -10.01125945847550400 ) ) ; #6432 = EDGE_CURVE ( 'NONE', #3209, #3207, #6080, .T. ) ; #6433 = PLANE ( 'NONE', #1897 ) ; #6434 = CARTESIAN_POINT ( 'NONE', ( 2.750000000000909500, -4.710787967683021500, -1.500072740962125700 ) ) ; #6435 = EDGE_LOOP ( 'NONE', ( #797, #2573, #6321, #3293 ) ) ; #6436 = AXIS2_PLACEMENT_3D ( 'NONE', #1888, #6093, #5578 ) ; #6437 = ORIENTED_EDGE ( 'NONE', *, *, #2810, .T. ) ; #6438 = PLANE ( 'NONE', #5395 ) ; #6439 = ADVANCED_FACE ( 'NONE', ( #4171, #1971 ), #6433, .T. ) ; #6440 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; #6441 = ORIENTED_EDGE ( 'NONE', *, *, #5847, .T. ) ; #6442 = FACE_OUTER_BOUND ( 'NONE', #5881, .T. ) ; #6443 = VERTEX_POINT ( 'NONE', #5837 ) ; #6444 = CARTESIAN_POINT ( 'NONE', ( -3.469446951953609900E-015, -2.964743053460101600, -10.45473218451790300 ) ) ; #6445 = CARTESIAN_POINT ( 'NONE', ( -2.749999999999090100, -5.068412703218808000, -1.818882634000823700 ) ) ; #6446 = CARTESIAN_POINT ( 'NONE', ( 1.592802486440426000, -2.601212411141895900, -11.04346353674248600 ) ) ; #6447 = ORIENTED_EDGE ( 'NONE', *, *, #2628, .F. ) ; #6448 = VECTOR ( 'NONE', #6043, 1000.000000000000000 ) ; #6449 = VERTEX_POINT ( 'NONE', #1650 ) ; #6450 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; #6451 = LINE ( 'NONE', #6011, #1519 ) ; #6452 = ORIENTED_EDGE ( 'NONE', *, *, #2219, .T. ) ; #6453 = EDGE_CURVE ( 'NONE', #173, #2285, #1720, .T. ) ; #6454 = CARTESIAN_POINT ( 'NONE', ( 1.170152050935864900, -10.49009711632192900, -7.800000000000069100 ) ) ; #6455 = ORIENTED_EDGE ( 'NONE', *, *, #2171, .T. ) ; #6456 = LINE ( 'NONE', #5635, #6296 ) ; #6457 = CARTESIAN_POINT ( 'NONE', ( 1.479999999999979600, -9.542487113058909300, -13.42000000000000000 ) ) ; #6458 = EDGE_LOOP ( 'NONE', ( #268, #5041, #4225, #6313 ) ) ; #6459 = ORIENTED_EDGE ( 'NONE', *, *, #973, .T. ) ; #6460 = CARTESIAN_POINT ( 'NONE', ( 4.499999999999950300, -2.599999999999050200, -11.80000000000000100 ) ) ; #6461 = ORIENTED_EDGE ( 'NONE', *, *, #122, .T. ) ; #6462 = ORIENTED_EDGE ( 'NONE', *, *, #4343, .T. ) ; #6463 = CARTESIAN_POINT ( 'NONE', ( 2.650015325608715800, 1.317574454024765800E-008, -9.900000000000000400 ) ) ; #6464 = LINE ( 'NONE', #4637, #289 ) ; #6465 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; #6466 = ORIENTED_EDGE ( 'NONE', *, *, #6822, .F. ) ; #6467 = EDGE_CURVE ( 'NONE', #4610, #1601, #334, .T. ) ; #6468 = PLANE ( 'NONE', #522 ) ; #6469 = CARTESIAN_POINT ( 'NONE', ( -1.597912347182305700E-016, -2.699783421336157600, -10.03070813642794300 ) ) ; #6470 = EDGE_CURVE ( 'NONE', #6342, #475, #5743, .T. ) ; #6471 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; #6472 = FACE_OUTER_BOUND ( 'NONE', #2055, .T. ) ; #6473 = DIRECTION ( 'NONE', ( -0.05997373034761339900, 0.1043403074087495000, -0.9927317119534560000 ) ) ; #6474 = ORIENTED_EDGE ( 'NONE', *, *, #5524, .T. ) ; #6475 = CARTESIAN_POINT ( 'NONE', ( 1.468308783406580000, -2.588983070638179100, -11.15981793932976100 ) ) ; #6476 = FACE_OUTER_BOUND ( 'NONE', #6303, .T. ) ; #6477 = DIRECTION ( 'NONE', ( -0.02524987779172246600, 0.7311205248564474100, 0.6817809192146228000 ) ) ; #6478 = EDGE_CURVE ( 'NONE', #4044, #6415, #403, .T. ) ; #6479 = FACE_OUTER_BOUND ( 'NONE', #418, .T. ) ; #6480 = ADVANCED_FACE ( 'NONE', ( #979 ), #4328, .T. ) ; #6481 = VECTOR ( 'NONE', #1974, 1000.000000000000000 ) ; #6482 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; #6483 = VERTEX_POINT ( 'NONE', #42 ) ; #6484 = CARTESIAN_POINT ( 'NONE', ( 0.07573619744604158400, -2.700858037157828100, -10.03512219384048800 ) ) ; #6485 = AXIS2_PLACEMENT_3D ( 'NONE', #2497, #392, #433 ) ; #6486 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; #6487 = CARTESIAN_POINT ( 'NONE', ( -1.899999999998069900, -5.299999999999280400, -7.400000000000000400 ) ) ; #6488 = CIRCLE ( 'NONE', #1819, 1.500000000000000000 ) ; #6489 = ORIENTED_EDGE ( 'NONE', *, *, #5350, .T. ) ; #6490 = EDGE_CURVE ( 'NONE', #6795, #5939, #2457, .T. ) ; #6491 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; #6492 = CARTESIAN_POINT ( 'NONE', ( -1.408928838953738900, 2.245912288528748100, -9.900000000000000400 ) ) ; #6493 = AXIS2_PLACEMENT_3D ( 'NONE', #4547, #5131, #5081 ) ; #6494 = ORIENTED_EDGE ( 'NONE', *, *, #3357, .F. ) ; #6495 = CARTESIAN_POINT ( 'NONE', ( 1.900000000000900100, -5.299999999999280400, -7.400000000000000400 ) ) ; #6496 = CARTESIAN_POINT ( 'NONE', ( -1.644264407091930100, -2.781668093413510500, -11.23989685449770300 ) ) ; #6497 = LINE ( 'NONE', #2153, #5742 ) ; #6498 = CYLINDRICAL_SURFACE ( 'NONE', #743, 0.3600000000000001000 ) ; #6499 = CARTESIAN_POINT ( 'NONE', ( -4.339999999999969700, -10.19999999999910000, -9.800000000000000700 ) ) ; #6500 = ORIENTED_EDGE ( 'NONE', *, *, #4420, .F. ) ; #6501 = CARTESIAN_POINT ( 'NONE', ( -0.1121088177076749900, -2.706526339254925700, -10.04149831957635200 ) ) ; #6502 = PLANE ( 'NONE', #572 ) ; #6503 = CARTESIAN_POINT ( 'NONE', ( 2.912473175842136300, -1.200000000000009300, -9.400000000000000400 ) ) ; #6504 = ORIENTED_EDGE ( 'NONE', *, *, #4234, .T. ) ; #6505 = FACE_OUTER_BOUND ( 'NONE', #2409, .T. ) ; #6506 = CARTESIAN_POINT ( 'NONE', ( 18.18468237128200100, -5.299999999999280400, -11.90000000000010000 ) ) ; #6507 =( BOUNDED_SURFACE ( ) B_SPLINE_SURFACE ( 3, 3, ( ( #1466, #6714, #317, #3535 ), ( #363, #6092, #5646, #2473 ), ( #5575, #2952, #3474, #4578 ), ( #5595, #4030, #889, #5108 ) ), .UNSPECIFIED., .F., .F., .F. ) B_SPLINE_SURFACE_WITH_KNOTS ( ( 4, 4 ), ( 4, 4 ), ( 0.0000000000000000000, 1.000000000000000000 ), ( 0.0000000000000000000, 1.000000000000000000 ), .UNSPECIFIED. ) GEOMETRIC_REPRESENTATION_ITEM ( ) RATIONAL_B_SPLINE_SURFACE ( ( ( 1.000000000000000000, 0.9814616515954282000, 0.9814616515954282000, 1.000000000000000000), ( 0.8047378541243475100, 0.7898193434102428500, 0.7898193434102428500, 0.8047378541243475100), ( 0.8047378541243475100, 0.7898193434102428500, 0.7898193434102428500, 0.8047378541243475100), ( 1.000000000000000000, 0.9814616515954282000, 0.9814616515954282000, 1.000000000000000000) ) ) REPRESENTATION_ITEM ( '' ) SURFACE ( ) ); #6508 = COORDINATED_UNIVERSAL_TIME_OFFSET ( 8, 0, .BEHIND. ) ; #6509 = CARTESIAN_POINT ( 'NONE', ( -4.339999999999969700, -10.19999999999910000, -10.80000000000000100 ) ) ; #6510 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000091300, -5.900000000000730400, -7.599999999999870000 ) ) ; #6511 = LINE ( 'NONE', #470, #814 ) ; #6512 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -13.94999999810409000 ) ) ; #6513 = ORIENTED_EDGE ( 'NONE', *, *, #2054, .F. ) ; #6514 = EDGE_CURVE ( 'NONE', #5713, #1330, #2289, .T. ) ; #6515 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #6516 = EDGE_LOOP ( 'NONE', ( #44, #3242, #5282, #4555 ) ) ; #6517 = ADVANCED_FACE ( 'NONE', ( #5240 ), #3232, .T. ) ; #6518 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; #6519 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -9.400000000000000400 ) ) ; #6520 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.8660254037844039600, 0.5000000000000600600 ) ) ; #6521 = EDGE_CURVE ( 'NONE', #4790, #866, #2783, .T. ) ; #6522 = CARTESIAN_POINT ( 'NONE', ( 1.199999999999930000, 0.0000000000000000000, -14.10000000000000000 ) ) ; #6523 = CARTESIAN_POINT ( 'NONE', ( 2.289217213497130000, -2.199999999999130200, -11.80000000000000100 ) ) ; #6524 = ORIENTED_EDGE ( 'NONE', *, *, #2766, .F. ) ; #6525 = ORIENTED_EDGE ( 'NONE', *, *, #3368, .F. ) ; #6526 = ORIENTED_EDGE ( 'NONE', *, *, #4689, .T. ) ; #6527 = AXIS2_PLACEMENT_3D ( 'NONE', #4147, #3123, #4653 ) ; #6528 = CARTESIAN_POINT ( 'NONE', ( 1.550000000000050000, -2.514439197769060100, -13.40000000000000000 ) ) ; #6529 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -11.87500000000000000 ) ) ; #6530 = ORIENTED_EDGE ( 'NONE', *, *, #5548, .T. ) ; #6531 = EDGE_CURVE ( 'NONE', #5046, #5023, #1052, .T. ) ; #6532 = PLANE ( 'NONE', #3283 ) ; #6533 = ORIENTED_EDGE ( 'NONE', *, *, #487, .F. ) ; #6534 = AXIS2_PLACEMENT_3D ( 'NONE', #6077, #304, #5566 ) ; #6535 = LINE ( 'NONE', #6837, #5115 ) ; #6536 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; #6537 = ORIENTED_EDGE ( 'NONE', *, *, #6305, .F. ) ; #6538 = VECTOR ( 'NONE', #2355, 1000.000000000000000 ) ; #6539 = VERTEX_POINT ( 'NONE', #4294 ) ; #6540 = AXIS2_PLACEMENT_3D ( 'NONE', #906, #2925, #3494 ) ; #6541 = ORIENTED_EDGE ( 'NONE', *, *, #5816, .F. ) ; #6542 = CARTESIAN_POINT ( 'NONE', ( -3.469446951953609900E-015, -2.699783421336157600, -10.03070813642794300 ) ) ; #6543 = LINE ( 'NONE', #3986, #1430 ) ; #6544 = ORIENTED_EDGE ( 'NONE', *, *, #4153, .F. ) ; #6545 = CARTESIAN_POINT ( 'NONE', ( 1.249999999999969800, -9.699999999999819900, -7.800000000000070000 ) ) ; #6546 = VECTOR ( 'NONE', #710, 1000.000000000000000 ) ; #6547 = VERTEX_POINT ( 'NONE', #1835 ) ; #6548 = ADVANCED_FACE ( 'NONE', ( #3351 ), #3668, .F. ) ; #6549 = VERTEX_POINT ( 'NONE', #2308 ) ; #6550 = FACE_OUTER_BOUND ( 'NONE', #2606, .T. ) ; #6551 = ORIENTED_EDGE ( 'NONE', *, *, #3230, .F. ) ; #6552 = EDGE_CURVE ( 'NONE', #1667, #5368, #6332, .T. ) ; #6553 = ADVANCED_FACE ( 'NONE', ( #5577 ), #5996, .F. ) ; #6554 = CARTESIAN_POINT ( 'NONE', ( 0.1586042252446774600, -11.29993269809748000, -7.800000000000069100 ) ) ; #6555 = ORIENTED_EDGE ( 'NONE', *, *, #6531, .F. ) ; #6556 = VERTEX_POINT ( 'NONE', #3362 ) ; #6557 = VERTEX_POINT ( 'NONE', #3380 ) ; #6558 = LINE ( 'NONE', #2830, #614 ) ; #6559 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #6560 = ORIENTED_EDGE ( 'NONE', *, *, #6624, .F. ) ; #6561 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #6562 = CARTESIAN_POINT ( 'NONE', ( 2.299999999999859900, -1.199999999999980000, -0.9999999999999991100 ) ) ; #6563 = LINE ( 'NONE', #5942, #876 ) ; #6564 = EDGE_CURVE ( 'NONE', #3981, #5250, #6163, .T. ) ; #6565 = VERTEX_POINT ( 'NONE', #1742 ) ; #6566 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; #6567 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; #6568 = FACE_OUTER_BOUND ( 'NONE', #2109, .T. ) ; #6569 = VERTEX_POINT ( 'NONE', #4392 ) ; #6570 = CARTESIAN_POINT ( 'NONE', ( 1.550000000000050000, -6.350000000000021000, -13.44999999999999900 ) ) ; #6571 = ORIENTED_EDGE ( 'NONE', *, *, #821, .F. ) ; #6572 = LINE ( 'NONE', #5832, #396 ) ; #6573 = ORIENTED_EDGE ( 'NONE', *, *, #6074, .T. ) ; #6574 = EDGE_CURVE ( 'NONE', #3378, #4633, #893, .T. ) ; #6575 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000091500, -10.20913117625780200, -7.800000000000072700 ) ) ; #6576 = AXIS2_PLACEMENT_3D ( 'NONE', #3200, #4865, #6377 ) ; #6577 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; #6578 = VECTOR ( 'NONE', #4841, 1000.000000000000000 ) ; #6579 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; #6580 = LINE ( 'NONE', #1745, #4320 ) ; #6581 = EDGE_LOOP ( 'NONE', ( #1916, #1909, #5294, #3443, #59 ) ) ; #6582 = CARTESIAN_POINT ( 'NONE', ( 8.847089727481720200E-013, -5.500000000000009800, -2.300000000000899500 ) ) ; #6583 = CARTESIAN_POINT ( 'NONE', ( -0.2606901748114399100, -5.299999999999683600, -4.125693010750277200 ) ) ; #6584 = EDGE_LOOP ( 'NONE', ( #2195, #957 ) ) ; #6585 = ADVANCED_FACE ( 'NONE', ( #2121 ), #6532, .T. ) ; #6586 = LINE ( 'NONE', #5601, #1640 ) ; #6587 = VECTOR ( 'NONE', #2870, 1000.000000000000000 ) ; #6588 = VERTEX_POINT ( 'NONE', #1296 ) ; #6589 = ADVANCED_FACE ( 'NONE', ( #3841 ), #183, .T. ) ; #6590 = CARTESIAN_POINT ( 'NONE', ( -3.599999999999940600, -6.350000000000021000, -13.44999999999999900 ) ) ; #6591 = VECTOR ( 'NONE', #2404, 1000.000000000000000 ) ; #6592 = ORIENTED_EDGE ( 'NONE', *, *, #5080, .T. ) ; #6593 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; #6594 = PERSON_AND_ORGANIZATION ( #2374, #4427 ) ; #6595 = ORIENTED_EDGE ( 'NONE', *, *, #2140, .F. ) ; #6596 = CARTESIAN_POINT ( 'NONE', ( -2.749999999999090100, -5.299999999999685400, -2.300000000000010000 ) ) ; #6597 = CARTESIAN_POINT ( 'NONE', ( 1.550000000000050200, -3.350000000000020100, -13.40000000000000000 ) ) ; #6598 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #6599 = EDGE_CURVE ( 'NONE', #6768, #85, #3024, .T. ) ; #6600 = ORIENTED_EDGE ( 'NONE', *, *, #5382, .T. ) ; #6601 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; #6602 = MANIFOLD_SOLID_BREP ( 'Imported3', #4705 ) ; #6603 = CARTESIAN_POINT ( 'NONE', ( -3.469446951953609900E-015, -2.699783421336157600, -10.03070813642794000 ) ) ; #6604 = VERTEX_POINT ( 'NONE', #3913 ) ; #6605 = EDGE_LOOP ( 'NONE', ( #2566, #4210, #972, #3199 ) ) ; #6606 = CARTESIAN_POINT ( 'NONE', ( -4.149999999999995000, 0.0000000000000000000, -3.499999999999999600 ) ) ; #6607 = EDGE_CURVE ( 'NONE', #1667, #5951, #4991, .T. ) ; #6608 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #6609 = EDGE_LOOP ( 'NONE', ( #4206, #1492, #6063, #3325 ) ) ; #6610 = AXIS2_PLACEMENT_3D ( 'NONE', #2185, #3245, #4820 ) ; #6611 = ORIENTED_EDGE ( 'NONE', *, *, #1922, .T. ) ; #6612 = LINE ( 'NONE', #3558, #2565 ) ; #6613 = ORIENTED_EDGE ( 'NONE', *, *, #6101, .T. ) ; #6614 = ORIENTED_EDGE ( 'NONE', *, *, #3693, .T. ) ; #6615 = CARTESIAN_POINT ( 'NONE', ( 1.249999999999970000, -9.749999999998360400, -7.399999999998890100 ) ) ; #6616 = AXIS2_PLACEMENT_3D ( 'NONE', #726, #1242, #225 ) ; #6617 = DIRECTION ( 'NONE', ( -0.08247831734653142400, -0.9965928592798992700, 0.0000000000000000000 ) ) ; #6618 = CARTESIAN_POINT ( 'NONE', ( 1.249999999999969800, -9.056595997628592800, -8.443404002370959600 ) ) ; #6619 = ORIENTED_EDGE ( 'NONE', *, *, #5793, .F. ) ; #6620 = FACE_OUTER_BOUND ( 'NONE', #6804, .T. ) ; #6621 = CARTESIAN_POINT ( 'NONE', ( 18.18468237128200100, -8.899999999999650400, -8.175735931287990300 ) ) ; #6622 = VERTEX_POINT ( 'NONE', #5947 ) ; #6623 = CIRCLE ( 'NONE', #1579, 2.299999999999999800 ) ; #6624 = EDGE_CURVE ( 'NONE', #2184, #1397, #3733, .T. ) ; #6625 = ORIENTED_EDGE ( 'NONE', *, *, #4501, .T. ) ; #6626 = CARTESIAN_POINT ( 'NONE', ( -3.199999999999980200, -5.150000000000099800, -11.80000000000000100 ) ) ; #6627 = VECTOR ( 'NONE', #2884, 1000.000000000000000 ) ; #6628 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #6629 = CARTESIAN_POINT ( 'NONE', ( 3.650000000000929800, -5.150000000000099800, -5.299999999999999800 ) ) ; #6630 = EDGE_LOOP ( 'NONE', ( #6525, #4301, #5721, #1603, #4268, #3213, #3185, #2114, #4370, #648, #2827, #2490 ) ) ; #6631 = VERTEX_POINT ( 'NONE', #2816 ) ; #6632 = CARTESIAN_POINT ( 'NONE', ( -4.292893218813452100, 4.299999999999910100, -0.4999999999999988300 ) ) ; #6633 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; #6634 = VECTOR ( 'NONE', #6023, 1000.000000000000000 ) ; #6635 = VERTEX_POINT ( 'NONE', #4413 ) ; #6636 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; #6637 = CARTESIAN_POINT ( 'NONE', ( -1.049999999999889000, -5.538256331734733100E-014, -13.44999999999999900 ) ) ; #6638 = ORIENTED_EDGE ( 'NONE', *, *, #171, .T. ) ; #6639 = LINE ( 'NONE', #5912, #1030 ) ; #6640 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; #6641 = ORIENTED_EDGE ( 'NONE', *, *, #3101, .T. ) ; #6642 = CARTESIAN_POINT ( 'NONE', ( -2.015586567627309000, -2.180808432521078400, -5.120523832460049700 ) ) ; #6643 = LINE ( 'NONE', #5984, #6805 ) ; #6644 = CARTESIAN_POINT ( 'NONE', ( 1.249999999999969800, -8.821460183659880300, -8.475735931287983900 ) ) ; #6645 = CARTESIAN_POINT ( 'NONE', ( -1.480000000000002000, -9.819999999999980700, -13.77999999999999900 ) ) ; #6646 = VECTOR ( 'NONE', #1923, 1000.000000000000000 ) ; #6647 = FACE_OUTER_BOUND ( 'NONE', #2983, .T. ) ; #6648 = ORIENTED_EDGE ( 'NONE', *, *, #4207, .T. ) ; #6649 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.9863939235543196500, 0.1643989889723025700 ) ) ; #6650 = EDGE_CURVE ( 'NONE', #2285, #1784, #1704, .T. ) ; #6651 = ADVANCED_FACE ( 'NONE', ( #2671 ), #6012, .F. ) ; #6652 = CARTESIAN_POINT ( 'NONE', ( -4.500000000000060400, 3.799999999999911000, 0.0000000000000000000 ) ) ; #6653 = CARTESIAN_POINT ( 'NONE', ( 2.616292216570252000, -0.4249473395117477300, -9.900000000000000400 ) ) ; #6654 = FACE_OUTER_BOUND ( 'NONE', #5277, .T. ) ; #6655 = EDGE_LOOP ( 'NONE', ( #6212, #6044, #5682, #1722 ) ) ; #6656 = EDGE_CURVE ( 'NONE', #2074, #5806, #1298, .T. ) ; #6657 = CARTESIAN_POINT ( 'NONE', ( 4.500000000000000000, 3.799999999999910100, -0.2071067811865463200 ) ) ; #6658 = AXIS2_PLACEMENT_3D ( 'NONE', #5372, #1211, #1782 ) ; #6659 = VECTOR ( 'NONE', #5299, 1000.000000000000100 ) ; #6660 = CIRCLE ( 'NONE', #6270, 0.5000000000000000000 ) ; #6661 = EDGE_CURVE ( 'NONE', #3249, #4858, #1806, .T. ) ; #6662 = EDGE_LOOP ( 'NONE', ( #1254, #4664, #5453, #1146 ) ) ; #6663 = EDGE_CURVE ( 'NONE', #4832, #2328, #5477, .T. ) ; #6664 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000091300, -9.056595997628591000, -8.443404002370957800 ) ) ; #6665 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #6666 = AXIS2_PLACEMENT_3D ( 'NONE', #187, #1155, #2776 ) ; #6667 = VERTEX_POINT ( 'NONE', #6160 ) ; #6668 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; #6669 = CARTESIAN_POINT ( 'NONE', ( -3.149999999999999900, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #6670 = FACE_OUTER_BOUND ( 'NONE', #6662, .T. ) ; #6671 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; #6672 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.1045284632675500400, 0.9945218953682841700 ) ) ; #6673 = LINE ( 'NONE', #6091, #5510 ) ; #6674 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 1.836970198721029900E-016, -9.650000000000000400 ) ) ; #6675 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; #6676 = ORIENTED_EDGE ( 'NONE', *, *, #4378, .T. ) ; #6677 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #6678 = CARTESIAN_POINT ( 'NONE', ( 2.596954001191139400, -0.5302657454888033400, -9.900000000000000400 ) ) ; #6679 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000090600, -5.299999999999388800, -7.399999999999259600 ) ) ; #6680 = EDGE_CURVE ( 'NONE', #3902, #2366, #5726, .T. ) ; #6681 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; #6682 = CARTESIAN_POINT ( 'NONE', ( -1.479999999999990000, -9.539807621135009800, -13.77999999999999900 ) ) ; #6683 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; #6684 = VERTEX_POINT ( 'NONE', #1881 ) ; #6685 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -0.9999999999999988900 ) ) ; #6686 = CARTESIAN_POINT ( 'NONE', ( 2.639585225719496300, -1.199999999999968200, -9.852731110126004700 ) ) ; #6687 = EDGE_CURVE ( 'NONE', #4336, #596, #2684, .T. ) ; #6688 = ADVANCED_FACE ( 'NONE', ( #2179 ), #3041, .F. ) ; #6689 = EDGE_LOOP ( 'NONE', ( #3729, #20, #5042, #1044 ) ) ; #6690 = CARTESIAN_POINT ( 'NONE', ( -3.199999999999980200, -1.199999999999979700, -0.9999999999999991100 ) ) ; #6691 = CARTESIAN_POINT ( 'NONE', ( -0.7058364889465083000, 2.555716555574423200, -9.900000000000000400 ) ) ; #6692 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; #6693 = ORIENTED_EDGE ( 'NONE', *, *, #3195, .T. ) ; #6694 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #6695 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; #6696 = LINE ( 'NONE', #5183, #4131 ) ; #6697 = ORIENTED_EDGE ( 'NONE', *, *, #1434, .T. ) ; #6698 = VECTOR ( 'NONE', #837, 1000.000000000000000 ) ; #6699 = ORIENTED_EDGE ( 'NONE', *, *, #3799, .F. ) ; #6700 = EDGE_CURVE ( 'NONE', #2742, #4982, #1820, .T. ) ; #6701 = PLANE ( 'NONE', #675 ) ; #6702 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #6703 = AXIS2_PLACEMENT_3D ( 'NONE', #5404, #6471, #1215 ) ; #6704 = ORIENTED_EDGE ( 'NONE', *, *, #4916, .T. ) ; #6705 = FACE_OUTER_BOUND ( 'NONE', #198, .T. ) ; #6706 = ORIENTED_EDGE ( 'NONE', *, *, #3230, .T. ) ; #6707 = LINE ( 'NONE', #1982, #6772 ) ; #6708 = CARTESIAN_POINT ( 'NONE', ( -2.649999999999961700, 5.299999999999926100, -9.900000000000000400 ) ) ; #6709 = AXIS2_PLACEMENT_3D ( 'NONE', #3281, #4361, #6486 ) ; #6710 = CARTESIAN_POINT ( 'NONE', ( 0.1299003691411360900, -5.299999999999280400, -6.100069115702832600 ) ) ; #6711 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #6712 = CIRCLE ( 'NONE', #1099, 0.3499999999999996400 ) ; #6713 = APPROVAL_STATUS ( 'not_yet_approved' ) ; #6714 = CARTESIAN_POINT ( 'NONE', ( 3.032656905156804400, -0.9882141070624984600, -9.399999999999998600 ) ) ; #6715 = VERTEX_POINT ( 'NONE', #5060 ) ; #6716 = ORIENTED_EDGE ( 'NONE', *, *, #4611, .T. ) ; #6717 = ORIENTED_EDGE ( 'NONE', *, *, #4517, .F. ) ; #6718 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -8.673617379884033500E-016, -1.000000000000000000 ) ) ; #6719 = LINE ( 'NONE', #6799, #3987 ) ; #6720 = ORIENTED_EDGE ( 'NONE', *, *, #6700, .F. ) ; #6721 = CARTESIAN_POINT ( 'NONE', ( 4.500000000000060400, -11.19999999999910000, -9.800000000000000700 ) ) ; #6722 = FACE_OUTER_BOUND ( 'NONE', #1846, .T. ) ; #6723 = CARTESIAN_POINT ( 'NONE', ( 1.479999999999980400, -9.364807621134991300, -13.73310889132465500 ) ) ; #6724 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; #6725 = LINE ( 'NONE', #3467, #5300 ) ; #6726 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #6727 = ADVANCED_FACE ( 'NONE', ( #2052 ), #3445, .T. ) ; #6728 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; #6729 = VERTEX_POINT ( 'NONE', #2385 ) ; #6730 = CIRCLE ( 'NONE', #5276, 0.5000000000138528100 ) ; #6731 = ORIENTED_EDGE ( 'NONE', *, *, #4516, .T. ) ; #6732 = CARTESIAN_POINT ( 'NONE', ( -3.149999999999999900, 7.715274834628325400E-016, -9.400000000000000400 ) ) ; #6733 = PLANE ( 'NONE', #2600 ) ; #6734 = EDGE_CURVE ( 'NONE', #2220, #6237, #1648, .T. ) ; #6735 = CARTESIAN_POINT ( 'NONE', ( -3.199999999999980600, -2.599999999999050200, -9.750000000000000000 ) ) ; #6736 = LINE ( 'NONE', #5064, #5986 ) ; #6737 = ORIENTED_EDGE ( 'NONE', *, *, #3031, .T. ) ; #6738 = CARTESIAN_POINT ( 'NONE', ( -1.644264407091930100, -2.781668093413510500, -11.23989685449770300 ) ) ; #6739 = EDGE_LOOP ( 'NONE', ( #5831, #822, #2378, #756 ) ) ; #6740 = LINE ( 'NONE', #276, #5835 ) ; #6741 = VECTOR ( 'NONE', #5490, 1000.000000000000000 ) ; #6742 = CARTESIAN_POINT ( 'NONE', ( 1.735968810939981800, 2.003906271150293100, -9.899999999999998600 ) ) ; #6743 = EDGE_LOOP ( 'NONE', ( #849, #5286, #3498, #5955, #5777 ) ) ; #6744 = EDGE_CURVE ( 'NONE', #4873, #707, #5753, .T. ) ; #6745 = ORIENTED_EDGE ( 'NONE', *, *, #384, .F. ) ; #6746 = AXIS2_PLACEMENT_3D ( 'NONE', #92, #5965, #4331 ) ; #6747 = CARTESIAN_POINT ( 'NONE', ( 2.750000000000909500, -4.689212032310580400, -1.500072740962072900 ) ) ; #6748 = LINE ( 'NONE', #5068, #413 ) ; #6749 = CARTESIAN_POINT ( 'NONE', ( 3.900000000000130000, -6.049999999999999800, -11.80000000000000100 ) ) ; #6750 = EDGE_LOOP ( 'NONE', ( #1574, #3115, #1697, #6676 ) ) ; #6751 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000089900, -8.849058163086342100, -8.266215450612238100 ) ) ; #6752 = AXIS2_PLACEMENT_3D ( 'NONE', #2588, #3676, #1026 ) ; #6753 = FACE_OUTER_BOUND ( 'NONE', #5967, .T. ) ; #6754 = EDGE_CURVE ( 'NONE', #3301, #1327, #1227, .T. ) ; #6755 = EDGE_LOOP ( 'NONE', ( #204, #6614 ) ) ; #6756 = CARTESIAN_POINT ( 'NONE', ( 18.18468237128200100, -9.699999999999819900, -7.800000000000070000 ) ) ; #6757 = AXIS2_PLACEMENT_3D ( 'NONE', #4750, #5722, #1613 ) ; #6758 = CARTESIAN_POINT ( 'NONE', ( -1.250000000000197400, -10.04999999999840000, -7.800000000000070900 ) ) ; #6759 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #6760 = ORIENTED_EDGE ( 'NONE', *, *, #1919, .F. ) ; #6761 = PLANE ( 'NONE', #139 ) ; #6762 = PLANE ( 'NONE', #2080 ) ; #6763 = CARTESIAN_POINT ( 'NONE', ( -3.149999999999990100, -2.000000000000110100, -9.900000000000000400 ) ) ; #6764 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #6765 = ORIENTED_EDGE ( 'NONE', *, *, #2241, .T. ) ; #6766 = CARTESIAN_POINT ( 'NONE', ( -2.299999999999080100, -1.199999999999980000, -9.900000000000000400 ) ) ; #6767 = ORIENTED_EDGE ( 'NONE', *, *, #3490, .T. ) ; #6768 = VERTEX_POINT ( 'NONE', #5522 ) ; #6769 = CARTESIAN_POINT ( 'NONE', ( 1.479999999999978700, -9.819999999999989600, -13.42000000000000000 ) ) ; #6770 = ORIENTED_EDGE ( 'NONE', *, *, #4110, .T. ) ; #6771 = CARTESIAN_POINT ( 'NONE', ( 2.750000000000909900, -4.266566286430367500, -1.882159706854672000 ) ) ; #6772 = VECTOR ( 'NONE', #2478, 1000.000000000000000 ) ; #6773 = ORIENTED_EDGE ( 'NONE', *, *, #3021, .F. ) ; #6774 = VECTOR ( 'NONE', #229, 1000.000000000000000 ) ; #6775 = VERTEX_POINT ( 'NONE', #6597 ) ; #6776 = CARTESIAN_POINT ( 'NONE', ( 4.000000000000000000, 4.299999999999919900, -1.000000000000000700 ) ) ; #6777 = EDGE_CURVE ( 'NONE', #6232, #2560, #6673, .T. ) ; #6778 = EDGE_LOOP ( 'NONE', ( #2493, #2581, #3818, #4121 ) ) ; #6779 = VECTOR ( 'NONE', #4634, 1000.000000000000000 ) ; #6780 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; #6781 = ORIENTED_EDGE ( 'NONE', *, *, #6809, .F. ) ; #6782 = CIRCLE ( 'NONE', #4829, 1.199999999999930000 ) ; #6783 = VERTEX_POINT ( 'NONE', #5035 ) ; #6784 = EDGE_CURVE ( 'NONE', #5483, #5629, #2701, .T. ) ; #6785 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; #6786 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; #6787 = CARTESIAN_POINT ( 'NONE', ( 3.600000000000160000, -6.350000000000021000, -13.40000000000000000 ) ) ; #6788 = VERTEX_POINT ( 'NONE', #2432 ) ; #6789 = LINE ( 'NONE', #4214, #938 ) ; #6790 = EDGE_CURVE ( 'NONE', #2192, #3705, #3265, .T. ) ; #6791 = ORIENTED_EDGE ( 'NONE', *, *, #3089, .F. ) ; #6792 = CARTESIAN_POINT ( 'NONE', ( 18.18468237128200100, -8.099999999999450800, -7.800000000000070000 ) ) ; #6793 = CARTESIAN_POINT ( 'NONE', ( 2.750000000000909500, -4.111624435740911700, -1.748839756839456500 ) ) ; #6794 = AXIS2_PLACEMENT_3D ( 'NONE', #3478, #3939, #293 ) ; #6795 = VERTEX_POINT ( 'NONE', #862 ) ; #6796 = ORIENTED_EDGE ( 'NONE', *, *, #6521, .F. ) ; #6797 = FACE_OUTER_BOUND ( 'NONE', #3001, .T. ) ; #6798 = VERTEX_POINT ( 'NONE', #5574 ) ; #6799 = CARTESIAN_POINT ( 'NONE', ( 1.550000000000050000, -3.350000000000020100, -14.40000000000000200 ) ) ; #6800 = CARTESIAN_POINT ( 'NONE', ( 4.000000000000000000, -1.100000000000100000, -0.4999999999999990600 ) ) ; #6801 = ORIENTED_EDGE ( 'NONE', *, *, #440, .F. ) ; #6802 = CARTESIAN_POINT ( 'NONE', ( 3.050000000000940000, -5.299999999999280400, -5.600000000000860300 ) ) ; #6803 = VECTOR ( 'NONE', #5236, 1000.000000000000000 ) ; #6804 = EDGE_LOOP ( 'NONE', ( #283, #2029, #5636, #248 ) ) ; #6805 = VECTOR ( 'NONE', #3830, 1000.000000000000000 ) ; #6806 = ORIENTED_EDGE ( 'NONE', *, *, #6734, .T. ) ; #6807 = CARTESIAN_POINT ( 'NONE', ( 2.750000000000909900, -3.137993503012869800, -3.603632002693439900 ) ) ; #6808 = VECTOR ( 'NONE', #2897, 1000.000000000000000 ) ; #6809 = EDGE_CURVE ( 'NONE', #1947, #5865, #328, .T. ) ; #6810 = CARTESIAN_POINT ( 'NONE', ( 0.9999999375261770000, -5.299999999999280400, -5.100353481845612400 ) ) ; #6811 = CARTESIAN_POINT ( 'NONE', ( 1.025289990227852100, -10.77439212801150800, -7.599999999999869100 ) ) ; #6812 = LINE ( 'NONE', #1594, #3014 ) ; #6813 = ORIENTED_EDGE ( 'NONE', *, *, #5361, .F. ) ; #6814 = ORIENTED_EDGE ( 'NONE', *, *, #4279, .F. ) ; #6815 = EDGE_CURVE ( 'NONE', #1024, #581, #4842, .T. ) ; #6816 = CARTESIAN_POINT ( 'NONE', ( 2.750000000000909900, -5.004342809587908100, -1.776181002041200600 ) ) ; #6817 = CARTESIAN_POINT ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -11.87500000000000000 ) ) ; #6819 = ORIENTED_EDGE ( 'NONE', *, *, #6490, .T. ) ; #6818 = CYLINDRICAL_SURFACE ( 'NONE', #408, 1.575000000000000000 ) ; #6820 = AXIS2_PLACEMENT_3D ( 'NONE', #5340, #2147, #2174 ) ; #6821 = ORIENTED_EDGE ( 'NONE', *, *, #3451, .T. ) ; #6822 = EDGE_CURVE ( 'NONE', #4656, #5431, #6265, .T. ) ; #6823 = CARTESIAN_POINT ( 'NONE', ( 4.500000000000000900, -6.171572875253872300, -0.2071067811865467100 ) ) ; #6824 = CIRCLE ( 'NONE', #259, 1.000000000000000000 ) ; #6825 = EDGE_CURVE ( 'NONE', #895, #3973, #421, .T. ) ; #6826 = CARTESIAN_POINT ( 'NONE', ( 2.299999999999859900, -1.199999999999980000, -11.79999999999999900 ) ) ; #6827 = VECTOR ( 'NONE', #3539, 1000.000000000000000 ) ; #6828 = VERTEX_POINT ( 'NONE', #468 ) ; #6829 = CARTESIAN_POINT ( 'NONE', ( 2.300000000000107300, -5.551115123125780200E-014, -13.77999999999999900 ) ) ; #6830 = VECTOR ( 'NONE', #213, 1000.000000000000000 ) ; #6831 = EDGE_CURVE ( 'NONE', #927, #4213, #651, .T. ) ; #6832 = EDGE_LOOP ( 'NONE', ( #3604, #717, #5897, #3745, #5731, #4365, #1692, #6524, #6731, #3217, #1289 ) ) ; #6833 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; #6834 = CARTESIAN_POINT ( 'NONE', ( -1.207031902994051700, -10.37946201445087400, -7.599999999999869100 ) ) ; #6835 = ORIENTED_EDGE ( 'NONE', *, *, #5059, .F. ) ; #6836 = LOCAL_TIME ( 16, 54, 2.000000000000000000, #5001 ) ; #6837 = CARTESIAN_POINT ( 'NONE', ( -3.199999999999980200, -5.500000000000009800, -0.9999999999999988900 ) ) ; ENDSEC; END-ISO-10303-21; ================================================ FILE: electronics/lib/74HC125.dcm ================================================ EESchema-DOCLIB Version 2.0 # #End Doc Library ================================================ FILE: electronics/lib/74HC125.lib ================================================ EESchema-LIBRARY Version 2.4 #encoding utf-8 # # 74HC125 # DEF 74HC125 U 0 40 Y Y 1 F N F0 "U" -300 650 50 H V C CNN F1 "74HC125" 250 650 50 H V C CNN F2 "" 0 100 50 H I C CNN F3 "" 0 100 50 H I C CNN DRAW S -300 600 300 -600 0 1 0 f P 4 0 1 0 -50 350 -50 250 50 300 -50 350 N P 4 1 1 0 -50 -250 -50 -350 50 -300 -50 -250 N P 4 1 1 0 -50 -50 -50 -150 50 -100 -50 -50 N P 4 1 1 0 -50 150 -50 50 50 100 -50 150 N X 1nOE 1 -400 250 100 R 50 50 1 1 I X 3nOE 10 -400 -150 100 R 50 50 1 1 I X 4Y 11 400 -300 100 L 50 50 1 1 T X 4A 12 -400 -250 100 R 50 50 1 1 I X 4nOE 13 -400 -350 100 R 50 50 1 1 I X VCC 14 0 700 100 D 50 50 1 1 W X 1A 2 -400 350 100 R 50 50 1 1 I X 1Y 3 400 300 100 L 50 50 1 1 T X 2nOE 4 -400 50 100 R 50 50 1 1 I X 2A 5 -400 150 100 R 50 50 1 1 I X 2Y 6 400 100 100 L 50 50 1 1 T X GND 7 0 -700 100 U 50 50 1 1 W X 3Y 8 400 -100 100 L 50 50 1 1 T X 3A 9 -400 -50 100 R 50 50 1 1 I ENDDRAW ENDDEF # #End Library ================================================ FILE: electronics/lib/74HC165-DIP.pretty/74HC165_DIP-16_W7.62mm.kicad_mod ================================================ (module 74HC165_DIP-16_W7.62mm (layer F.Cu) (tedit 5F7C351F) (descr "16-lead dip package, row spacing 7.62 mm (300 mils)") (tags "dil dip 2.54 300") (fp_text reference U3 (at 3.81 20.32) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value 74HC165 (at 3.81 8.89 270) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 1.27 -1.27) (end 2.81 -1.27) (layer F.SilkS) (width 0.15)) (fp_line (start 6.35 -1.27) (end 4.81 -1.27) (layer F.SilkS) (width 0.15)) (fp_arc (start 3.81 -1.27) (end 4.81 -1.27) (angle 180) (layer F.SilkS) (width 0.15)) (fp_line (start 6.35 -1.27) (end 6.35 19.05) (layer F.SilkS) (width 0.15)) (fp_line (start 1.27 19.05) (end 6.35 19.05) (layer F.SilkS) (width 0.15)) (fp_line (start 1.27 19.05) (end 1.27 -1.27) (layer F.SilkS) (width 0.15)) (fp_line (start -1.05 -1.905) (end -1.05 19.685) (layer F.CrtYd) (width 0.05)) (fp_line (start 8.65 -1.905) (end 8.65 19.685) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.05 -1.905) (end 8.65 -1.905) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.05 19.685) (end 8.65 19.685) (layer F.CrtYd) (width 0.05)) (pad 1 thru_hole oval (at 0 0) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask F.SilkS)) (pad 2 thru_hole oval (at 0 2.54) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask F.SilkS)) (pad 3 thru_hole oval (at 0 5.08) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask F.SilkS)) (pad 4 thru_hole oval (at 0 7.62) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask F.SilkS)) (pad 5 thru_hole oval (at 0 10.16) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask F.SilkS)) (pad 6 thru_hole oval (at 0 12.7) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask F.SilkS)) (pad 7 thru_hole oval (at 0 15.24) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask F.SilkS)) (pad 8 thru_hole oval (at 0 17.78) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask F.SilkS)) (pad 9 thru_hole oval (at 7.62 17.78) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask F.SilkS)) (pad 10 thru_hole oval (at 7.62 15.24) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask F.SilkS)) (pad 11 thru_hole oval (at 7.62 12.7) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask F.SilkS)) (pad 12 thru_hole oval (at 7.62 10.16) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask F.SilkS)) (pad 13 thru_hole oval (at 7.62 7.62) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask F.SilkS)) (pad 14 thru_hole oval (at 7.62 5.08) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask F.SilkS)) (pad 15 thru_hole oval (at 7.62 2.54) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask F.SilkS)) (pad 16 thru_hole oval (at 7.62 0) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask F.SilkS)) (model Housings_DIP.3dshapes/DIP-16_W7.62mm.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) ================================================ FILE: electronics/lib/74HC165.lib ================================================ EESchema-LIBRARY Version 2.2 Date: 30/09/2017-22:29:58 # # 74HC165 # DEF 74HC165 U 0 40 Y Y 1 0 N F0 "U" 0 -100 50 H V C C F1 "74HC165" 0 100 50 H V C C F2 "MODULE" 0 0 50 H I C C F3 "DOCUMENTATION" 0 0 50 H I C C DRAW S -450 -550 450 550 1 0 0 N X ~LD 1 -750 350 300 R 50 50 1 1 I X CLK 2 -750 250 300 R 50 50 1 1 I X E 3 -750 150 300 R 50 50 1 1 I X F 4 -750 50 300 R 50 50 1 1 I X G 5 -750 -50 300 R 50 50 1 1 I X H 6 -750 -150 300 R 50 50 1 1 I X ~QH 7 -750 -250 300 R 50 50 1 1 O X GND 8 -750 -350 300 R 50 50 1 1 W X QH 9 750 -350 300 L 50 50 1 1 O X SER 10 750 -250 300 L 50 50 1 1 I X A 11 750 -150 300 L 50 50 1 1 I X B 12 750 -50 300 L 50 50 1 1 I X C 13 750 50 300 L 50 50 1 1 I X D 14 750 150 300 L 50 50 1 1 I X CLKIN 15 750 250 300 L 50 50 1 1 I X VCC 16 750 350 300 L 50 50 1 1 W ENDDRAW ENDDEF # #End Library ================================================ FILE: electronics/lib/74HC165_2.dcm ================================================ EESchema-DOCLIB Version 2.0 # #End Doc Library ================================================ FILE: electronics/lib/74HC165_2.lib ================================================ EESchema-LIBRARY Version 2.4 #encoding utf-8 # # 74HC165 # DEF 74HC165 U 0 40 Y Y 1 F N F0 "U" 150 700 50 H V C CNN F1 "74HC165" 250 600 50 H V C CNN F2 "MODULE" 600 1200 50 H I C CNN F3 "DOCUMENTATION" 750 1100 50 H I C CNN DRAW S 300 550 -300 -550 0 1 0 f X ~LD 1 -600 350 300 R 50 50 1 1 I X SER 10 -600 -400 300 R 50 50 1 1 I X A 11 600 500 300 L 50 50 1 1 I X B 12 600 400 300 L 50 50 1 1 I X C 13 600 300 300 L 50 50 1 1 I X D 14 600 200 300 L 50 50 1 1 I X CLKIN 15 -600 50 300 R 50 50 1 1 I X VCC 16 0 850 300 D 50 50 1 1 W X CLK 2 -600 150 300 R 50 50 1 1 I X E 3 600 100 300 L 50 50 1 1 I X F 4 600 0 300 L 50 50 1 1 I X G 5 600 -100 300 L 50 50 1 1 I X H 6 600 -200 300 L 50 50 1 1 I X ~QH 7 600 -500 300 L 50 50 1 1 O X GND 8 0 -850 300 U 50 50 1 1 W X QH 9 600 -400 300 L 50 50 1 1 O ENDDRAW ENDDEF # #End Library ================================================ FILE: electronics/lib/ArduinoUnoShield.pretty/arduino_uno_shield.kicad_mod ================================================ (module arduino_uno_shield (layer F.Cu) (tedit 5B96F2A4) (fp_text reference U1 (at 21.844 -43.18) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value arduino_uno_shield (at 44.958 1.016) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_circle (center 66.04 -35.56) (end 69.215 -35.56) (layer F.SilkS) (width 0.15)) (fp_circle (center 66.04 -7.62) (end 69.215 -7.62) (layer F.SilkS) (width 0.15)) (pad "" thru_hole circle (at 66.04 -7.62) (size 3.6 3.6) (drill 3.2) (layers *.Cu *.Mask)) (pad GND thru_hole circle (at 43.18 -2.54) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask)) (pad VIN thru_hole circle (at 45.72 -2.54) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask)) (pad ISP6 thru_hole circle (at 66.18 -25.35) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask)) (pad ISP5 thru_hole circle (at 63.64 -25.35) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask)) (pad ISP4 thru_hole circle (at 66.18 -27.89) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask)) (pad ISP3 thru_hole circle (at 63.64 -27.89) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask)) (pad ISP2 thru_hole circle (at 66.18 -30.43) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask)) (pad ISP1 thru_hole circle (at 63.64 -30.43) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask)) (pad D6 thru_hole circle (at 48.26 -50.8) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask)) (pad D5 thru_hole circle (at 50.8 -50.8) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask)) (pad D4 thru_hole circle (at 53.34 -50.8) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask)) (pad "" thru_hole circle (at 66.04 -35.56) (size 3.6 3.6) (drill 3.2) (layers *.Cu *.Mask)) ) ================================================ FILE: electronics/lib/BK-6013.models/Memory_Protection_Devices_-_BK-6013.step ================================================ ISO-10303-21; HEADER; FILE_DESCRIPTION( ( '' ), ' ' ); FILE_NAME( '/vol/tmp/translate-16711847959468192611/5be15f8d5737e615062cd873.step', '2018-11-06T09:31:57', ( '' ), ( '' ), ' ', ' ', ' ' ); FILE_SCHEMA( ( 'AUTOMOTIVE_DESIGN { 1 0 10303 214 1 1 1 1 }' ) ); ENDSEC; DATA; #1 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION( ' ', ( #14, #15, #16, #17, #18, #19, #20, #21, #22, #23, #24, #25, #26, #27, #28, #29, #30, #31, #32, #33, #34, #35, #36, #37, #38, #39, #40, #41, #42, #43, #44, #45, #46, #47, #48, #49, #50, #51, #52, #53, #54, #55, #56, #57, #58, #59, #60, #61, #62, #63, #64, #65, #66, #67, #68, #69, #70, #71, #72, #73, #74, #75, #76, #77, #78, #79, #80, #81, #82, #83, #84, #85, #86, #87, #88, #89, #90, #91, #92, #93, #94, #95, #96, #97, #98, #99, #100, #101, #102, #103, #104, #105, #106, #107, #108, #109, #110, #111, #112, #113, #114, #115, #116, #117, #118, #119, #120, #121, #122, #123, #124, #125, #126, #127, #128, #129, #130, #131, #132, #133, #134, #135, #136, #137, #138, #139, #140, #141, #142, #143, #144, #145, #146, #147, #148, #149, #150, #151, #152, #153, #154, #155, #156, #157, #158, #159, #160, #161, #162, #163, #164, #165, #166, #167, #168, #169, #170, #171, #172, #173, #174, #175, #176, #177, #178, #179, #180, #181, #182, #183, #184, #185, #186, #187, #188, #189, #190, #191, #192, #193, #194, #195, #196, #197, #198, #199, #200, #201, #202, #203, #204, #205, #206, #207, #208, #209, #210, #211, #212, #213, #214, #215, #216, #217, #218, #219, #220, #221, #222, #223, #224, #225, #226, #227, #228, #229, #230, #231 ), #10 ); #2 = PRODUCT_DEFINITION_CONTEXT( '', #232, 'design' ); #3 = APPLICATION_PROTOCOL_DEFINITION( 'international standard', 'automotive_design', 2001, #232 ); #4 = PRODUCT_CATEGORY_RELATIONSHIP( 'NONE', 'NONE', #233, #234 ); #5 = SHAPE_DEFINITION_REPRESENTATION( #235, #236 ); #6 = PRODUCT_CATEGORY_RELATIONSHIP( 'NONE', 'NONE', #233, #237 ); #7 = SHAPE_DEFINITION_REPRESENTATION( #238, #239 ); #8 = PRODUCT_CATEGORY_RELATIONSHIP( 'NONE', 'NONE', #233, #240 ); #9 = SHAPE_DEFINITION_REPRESENTATION( #241, #242 ); #10 = ( GEOMETRIC_REPRESENTATION_CONTEXT( 3 )GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT( ( #245 ) )GLOBAL_UNIT_ASSIGNED_CONTEXT( ( #247, #248, #249 ) )REPRESENTATION_CONTEXT( 'NONE', 'WORKSPACE' ) ); #14 = STYLED_ITEM( '', ( #251 ), #252 ); #15 = STYLED_ITEM( '', ( #253 ), #254 ); #16 = STYLED_ITEM( '', ( #255 ), #256 ); #17 = STYLED_ITEM( '', ( #257 ), #258 ); #18 = STYLED_ITEM( '', ( #259 ), #260 ); #19 = STYLED_ITEM( '', ( #261 ), #262 ); #20 = STYLED_ITEM( '', ( #263 ), #264 ); #21 = STYLED_ITEM( '', ( #265 ), #266 ); #22 = STYLED_ITEM( '', ( #267 ), #268 ); #23 = STYLED_ITEM( '', ( #269 ), #270 ); #24 = STYLED_ITEM( '', ( #271 ), #272 ); #25 = STYLED_ITEM( '', ( #273 ), #274 ); #26 = STYLED_ITEM( '', ( #275 ), #276 ); #27 = STYLED_ITEM( '', ( #277 ), #278 ); #28 = STYLED_ITEM( '', ( #279 ), #280 ); #29 = STYLED_ITEM( '', ( #281 ), #282 ); #30 = STYLED_ITEM( '', ( #283 ), #284 ); #31 = STYLED_ITEM( '', ( #285 ), #286 ); #32 = STYLED_ITEM( '', ( #287 ), #288 ); #33 = STYLED_ITEM( '', ( #289 ), #290 ); #34 = STYLED_ITEM( '', ( #291 ), #292 ); #35 = STYLED_ITEM( '', ( #293 ), #294 ); #36 = STYLED_ITEM( '', ( #295 ), #296 ); #37 = STYLED_ITEM( '', ( #297 ), #298 ); #38 = STYLED_ITEM( '', ( #299 ), #300 ); #39 = STYLED_ITEM( '', ( #301 ), #302 ); #40 = STYLED_ITEM( '', ( #303 ), #304 ); #41 = STYLED_ITEM( '', ( #305 ), #306 ); #42 = STYLED_ITEM( '', ( #307 ), #308 ); #43 = STYLED_ITEM( '', ( #309 ), #310 ); #44 = STYLED_ITEM( '', ( #311 ), #312 ); #45 = STYLED_ITEM( '', ( #313 ), #314 ); #46 = STYLED_ITEM( '', ( #315 ), #316 ); #47 = STYLED_ITEM( '', ( #317 ), #318 ); #48 = STYLED_ITEM( '', ( #319 ), #320 ); #49 = STYLED_ITEM( '', ( #321 ), #322 ); #50 = STYLED_ITEM( '', ( #323 ), #324 ); #51 = STYLED_ITEM( '', ( #325 ), #326 ); #52 = STYLED_ITEM( '', ( #327 ), #328 ); #53 = STYLED_ITEM( '', ( #329 ), #330 ); #54 = STYLED_ITEM( '', ( #331 ), #332 ); #55 = STYLED_ITEM( '', ( #333 ), #334 ); #56 = STYLED_ITEM( '', ( #335 ), #336 ); #57 = STYLED_ITEM( '', ( #337 ), #338 ); #58 = STYLED_ITEM( '', ( #339 ), #340 ); #59 = STYLED_ITEM( '', ( #341 ), #342 ); #60 = STYLED_ITEM( '', ( #343 ), #344 ); #61 = STYLED_ITEM( '', ( #345 ), #346 ); #62 = STYLED_ITEM( '', ( #347 ), #348 ); #63 = STYLED_ITEM( '', ( #349 ), #350 ); #64 = STYLED_ITEM( '', ( #351 ), #352 ); #65 = STYLED_ITEM( '', ( #353 ), #354 ); #66 = STYLED_ITEM( '', ( #355 ), #356 ); #67 = STYLED_ITEM( '', ( #357 ), #358 ); #68 = STYLED_ITEM( '', ( #359 ), #360 ); #69 = STYLED_ITEM( '', ( #361 ), #362 ); #70 = STYLED_ITEM( '', ( #363 ), #364 ); #71 = STYLED_ITEM( '', ( #365 ), #366 ); #72 = STYLED_ITEM( '', ( #367 ), #368 ); #73 = STYLED_ITEM( '', ( #369 ), #370 ); #74 = STYLED_ITEM( '', ( #371 ), #372 ); #75 = STYLED_ITEM( '', ( #373 ), #374 ); #76 = STYLED_ITEM( '', ( #375 ), #376 ); #77 = STYLED_ITEM( '', ( #377 ), #378 ); #78 = STYLED_ITEM( '', ( #379 ), #380 ); #79 = STYLED_ITEM( '', ( #381 ), #382 ); #80 = STYLED_ITEM( '', ( #383 ), #384 ); #81 = STYLED_ITEM( '', ( #385 ), #386 ); #82 = STYLED_ITEM( '', ( #387 ), #388 ); #83 = STYLED_ITEM( '', ( #389 ), #390 ); #84 = STYLED_ITEM( '', ( #391 ), #392 ); #85 = STYLED_ITEM( '', ( #393 ), #394 ); #86 = STYLED_ITEM( '', ( #395 ), #396 ); #87 = STYLED_ITEM( '', ( #397 ), #398 ); #88 = STYLED_ITEM( '', ( #399 ), #400 ); #89 = STYLED_ITEM( '', ( #401 ), #402 ); #90 = STYLED_ITEM( '', ( #403 ), #404 ); #91 = STYLED_ITEM( '', ( #405 ), #406 ); #92 = STYLED_ITEM( '', ( #407 ), #408 ); #93 = STYLED_ITEM( '', ( #409 ), #410 ); #94 = STYLED_ITEM( '', ( #411 ), #412 ); #95 = STYLED_ITEM( '', ( #413 ), #414 ); #96 = STYLED_ITEM( '', ( #415 ), #416 ); #97 = STYLED_ITEM( '', ( #417 ), #418 ); #98 = STYLED_ITEM( '', ( #419 ), #420 ); #99 = STYLED_ITEM( '', ( #421 ), #422 ); #100 = STYLED_ITEM( '', ( #423 ), #424 ); #101 = STYLED_ITEM( '', ( #425 ), #426 ); #102 = STYLED_ITEM( '', ( #427 ), #428 ); #103 = STYLED_ITEM( '', ( #429 ), #430 ); #104 = STYLED_ITEM( '', ( #431 ), #432 ); #105 = STYLED_ITEM( '', ( #433 ), #434 ); #106 = STYLED_ITEM( '', ( #435 ), #436 ); #107 = STYLED_ITEM( '', ( #437 ), #438 ); #108 = STYLED_ITEM( '', ( #439 ), #440 ); #109 = STYLED_ITEM( '', ( #441 ), #442 ); #110 = STYLED_ITEM( '', ( #443 ), #444 ); #111 = STYLED_ITEM( '', ( #445 ), #446 ); #112 = STYLED_ITEM( '', ( #447 ), #448 ); #113 = STYLED_ITEM( '', ( #449 ), #450 ); #114 = STYLED_ITEM( '', ( #451 ), #452 ); #115 = STYLED_ITEM( '', ( #453 ), #454 ); #116 = STYLED_ITEM( '', ( #455 ), #456 ); #117 = STYLED_ITEM( '', ( #457 ), #458 ); #118 = STYLED_ITEM( '', ( #459 ), #460 ); #119 = STYLED_ITEM( '', ( #461 ), #462 ); #120 = STYLED_ITEM( '', ( #463 ), #464 ); #121 = STYLED_ITEM( '', ( #465 ), #466 ); #122 = STYLED_ITEM( '', ( #467 ), #468 ); #123 = STYLED_ITEM( '', ( #469 ), #470 ); #124 = STYLED_ITEM( '', ( #471 ), #472 ); #125 = STYLED_ITEM( '', ( #473 ), #474 ); #126 = STYLED_ITEM( '', ( #475 ), #476 ); #127 = STYLED_ITEM( '', ( #477 ), #478 ); #128 = STYLED_ITEM( '', ( #479 ), #480 ); #129 = STYLED_ITEM( '', ( #481 ), #482 ); #130 = STYLED_ITEM( '', ( #483 ), #484 ); #131 = STYLED_ITEM( '', ( #485 ), #486 ); #132 = STYLED_ITEM( '', ( #487 ), #488 ); #133 = STYLED_ITEM( '', ( #489 ), #490 ); #134 = STYLED_ITEM( '', ( #491 ), #492 ); #135 = STYLED_ITEM( '', ( #493 ), #494 ); #136 = STYLED_ITEM( '', ( #495 ), #496 ); #137 = STYLED_ITEM( '', ( #497 ), #498 ); #138 = STYLED_ITEM( '', ( #499 ), #500 ); #139 = STYLED_ITEM( '', ( #501 ), #502 ); #140 = STYLED_ITEM( '', ( #503 ), #504 ); #141 = STYLED_ITEM( '', ( #505 ), #506 ); #142 = STYLED_ITEM( '', ( #507 ), #508 ); #143 = STYLED_ITEM( '', ( #509 ), #510 ); #144 = STYLED_ITEM( '', ( #511 ), #512 ); #145 = STYLED_ITEM( '', ( #513 ), #514 ); #146 = STYLED_ITEM( '', ( #515 ), #516 ); #147 = STYLED_ITEM( '', ( #517 ), #518 ); #148 = STYLED_ITEM( '', ( #519 ), #520 ); #149 = STYLED_ITEM( '', ( #521 ), #522 ); #150 = STYLED_ITEM( '', ( #523 ), #524 ); #151 = STYLED_ITEM( '', ( #525 ), #526 ); #152 = STYLED_ITEM( '', ( #527 ), #528 ); #153 = STYLED_ITEM( '', ( #529 ), #530 ); #154 = STYLED_ITEM( '', ( #531 ), #532 ); #155 = STYLED_ITEM( '', ( #533 ), #534 ); #156 = STYLED_ITEM( '', ( #535 ), #536 ); #157 = STYLED_ITEM( '', ( #537 ), #538 ); #158 = STYLED_ITEM( '', ( #539 ), #540 ); #159 = STYLED_ITEM( '', ( #541 ), #542 ); #160 = STYLED_ITEM( '', ( #543 ), #544 ); #161 = STYLED_ITEM( '', ( #545 ), #546 ); #162 = STYLED_ITEM( '', ( #547 ), #548 ); #163 = STYLED_ITEM( '', ( #549 ), #550 ); #164 = STYLED_ITEM( '', ( #551 ), #552 ); #165 = STYLED_ITEM( '', ( #553 ), #554 ); #166 = STYLED_ITEM( '', ( #555 ), #556 ); #167 = STYLED_ITEM( '', ( #557 ), #558 ); #168 = STYLED_ITEM( '', ( #559 ), #560 ); #169 = STYLED_ITEM( '', ( #561 ), #562 ); #170 = STYLED_ITEM( '', ( #563 ), #564 ); #171 = STYLED_ITEM( '', ( #565 ), #566 ); #172 = STYLED_ITEM( '', ( #567 ), #568 ); #173 = STYLED_ITEM( '', ( #569 ), #570 ); #174 = STYLED_ITEM( '', ( #571 ), #572 ); #175 = STYLED_ITEM( '', ( #573 ), #574 ); #176 = STYLED_ITEM( '', ( #575 ), #576 ); #177 = STYLED_ITEM( '', ( #577 ), #578 ); #178 = STYLED_ITEM( '', ( #579 ), #580 ); #179 = STYLED_ITEM( '', ( #581 ), #582 ); #180 = STYLED_ITEM( '', ( #583 ), #584 ); #181 = STYLED_ITEM( '', ( #585 ), #586 ); #182 = STYLED_ITEM( '', ( #587 ), #588 ); #183 = STYLED_ITEM( '', ( #589 ), #590 ); #184 = STYLED_ITEM( '', ( #591 ), #592 ); #185 = STYLED_ITEM( '', ( #593 ), #594 ); #186 = STYLED_ITEM( '', ( #595 ), #596 ); #187 = STYLED_ITEM( '', ( #597 ), #598 ); #188 = STYLED_ITEM( '', ( #599 ), #600 ); #189 = STYLED_ITEM( '', ( #601 ), #602 ); #190 = STYLED_ITEM( '', ( #603 ), #604 ); #191 = STYLED_ITEM( '', ( #605 ), #606 ); #192 = STYLED_ITEM( '', ( #607 ), #608 ); #193 = STYLED_ITEM( '', ( #609 ), #610 ); #194 = STYLED_ITEM( '', ( #611 ), #612 ); #195 = STYLED_ITEM( '', ( #613 ), #614 ); #196 = STYLED_ITEM( '', ( #615 ), #616 ); #197 = STYLED_ITEM( '', ( #617 ), #618 ); #198 = STYLED_ITEM( '', ( #619 ), #620 ); #199 = STYLED_ITEM( '', ( #621 ), #622 ); #200 = STYLED_ITEM( '', ( #623 ), #624 ); #201 = STYLED_ITEM( '', ( #625 ), #626 ); #202 = STYLED_ITEM( '', ( #627 ), #628 ); #203 = STYLED_ITEM( '', ( #629 ), #630 ); #204 = STYLED_ITEM( '', ( #631 ), #632 ); #205 = STYLED_ITEM( '', ( #633 ), #634 ); #206 = STYLED_ITEM( '', ( #635 ), #636 ); #207 = STYLED_ITEM( '', ( #637 ), #638 ); #208 = STYLED_ITEM( '', ( #639 ), #640 ); #209 = STYLED_ITEM( '', ( #641 ), #642 ); #210 = STYLED_ITEM( '', ( #643 ), #644 ); #211 = STYLED_ITEM( '', ( #645 ), #646 ); #212 = STYLED_ITEM( '', ( #647 ), #648 ); #213 = STYLED_ITEM( '', ( #649 ), #650 ); #214 = STYLED_ITEM( '', ( #651 ), #652 ); #215 = STYLED_ITEM( '', ( #653 ), #654 ); #216 = STYLED_ITEM( '', ( #655 ), #656 ); #217 = STYLED_ITEM( '', ( #657 ), #658 ); #218 = STYLED_ITEM( '', ( #659 ), #660 ); #219 = STYLED_ITEM( '', ( #661 ), #662 ); #220 = STYLED_ITEM( '', ( #663 ), #664 ); #221 = STYLED_ITEM( '', ( #665 ), #666 ); #222 = STYLED_ITEM( '', ( #667 ), #668 ); #223 = STYLED_ITEM( '', ( #669 ), #670 ); #224 = STYLED_ITEM( '', ( #671 ), #672 ); #225 = STYLED_ITEM( '', ( #673 ), #674 ); #226 = STYLED_ITEM( '', ( #675 ), #676 ); #227 = STYLED_ITEM( '', ( #677 ), #678 ); #228 = STYLED_ITEM( '', ( #679 ), #680 ); #229 = STYLED_ITEM( '', ( #681 ), #682 ); #230 = STYLED_ITEM( '', ( #683 ), #684 ); #231 = STYLED_ITEM( '', ( #685 ), #686 ); #232 = APPLICATION_CONTEXT( 'core data for automotive mechanical design processes' ); #233 = PRODUCT_CATEGORY( 'part', 'NONE' ); #234 = PRODUCT_RELATED_PRODUCT_CATEGORY( 'detail', ' ', ( #687 ) ); #235 = PRODUCT_DEFINITION_SHAPE( 'NONE', 'NONE', #688 ); #236 = ADVANCED_BREP_SHAPE_REPRESENTATION( 'Open CASCADE STEP translator 6.8 2', ( #689, #690 ), #10 ); #237 = PRODUCT_RELATED_PRODUCT_CATEGORY( 'detail', ' ', ( #691 ) ); #238 = PRODUCT_DEFINITION_SHAPE( 'NONE', 'NONE', #692 ); #239 = ADVANCED_BREP_SHAPE_REPRESENTATION( 'Open CASCADE STEP translator 6.8 2', ( #693, #694 ), #10 ); #240 = PRODUCT_RELATED_PRODUCT_CATEGORY( 'detail', ' ', ( #695 ) ); #241 = PRODUCT_DEFINITION_SHAPE( 'NONE', 'NONE', #696 ); #242 = ADVANCED_BREP_SHAPE_REPRESENTATION( 'Open CASCADE STEP translator 6.8 1', ( #697, #698 ), #10 ); #245 = UNCERTAINTY_MEASURE_WITH_UNIT( LENGTH_MEASURE( 1.00000000000000E-06 ), #247, '', '' ); #247 = ( CONVERSION_BASED_UNIT( 'METRE', #701 )LENGTH_UNIT( )NAMED_UNIT( #704 ) ); #248 = ( NAMED_UNIT( #706 )PLANE_ANGLE_UNIT( )SI_UNIT( $, .RADIAN. ) ); #249 = ( NAMED_UNIT( #706 )SI_UNIT( $, .STERADIAN. )SOLID_ANGLE_UNIT( ) ); #251 = PRESENTATION_STYLE_ASSIGNMENT( ( #712 ) ); #252 = EDGE_CURVE( '', #713, #714, #715, .T. ); #253 = PRESENTATION_STYLE_ASSIGNMENT( ( #716 ) ); #254 = EDGE_CURVE( '', #717, #718, #719, .T. ); #255 = PRESENTATION_STYLE_ASSIGNMENT( ( #720 ) ); #256 = EDGE_CURVE( '', #721, #722, #723, .T. ); #257 = PRESENTATION_STYLE_ASSIGNMENT( ( #724 ) ); #258 = ADVANCED_FACE( '', ( #725 ), #726, .F. ); #259 = PRESENTATION_STYLE_ASSIGNMENT( ( #727 ) ); #260 = ADVANCED_FACE( '', ( #728 ), #729, .T. ); #261 = PRESENTATION_STYLE_ASSIGNMENT( ( #730 ) ); #262 = EDGE_CURVE( '', #731, #732, #733, .T. ); #263 = PRESENTATION_STYLE_ASSIGNMENT( ( #734 ) ); #264 = EDGE_CURVE( '', #735, #736, #737, .T. ); #265 = PRESENTATION_STYLE_ASSIGNMENT( ( #738 ) ); #266 = EDGE_CURVE( '', #739, #740, #741, .T. ); #267 = PRESENTATION_STYLE_ASSIGNMENT( ( #742 ) ); #268 = ADVANCED_FACE( '', ( #743 ), #744, .F. ); #269 = PRESENTATION_STYLE_ASSIGNMENT( ( #745 ) ); #270 = EDGE_CURVE( '', #746, #747, #748, .T. ); #271 = PRESENTATION_STYLE_ASSIGNMENT( ( #749 ) ); #272 = ADVANCED_FACE( '', ( #750 ), #751, .F. ); #273 = PRESENTATION_STYLE_ASSIGNMENT( ( #752 ) ); #274 = ADVANCED_FACE( '', ( #753 ), #754, .F. ); #275 = PRESENTATION_STYLE_ASSIGNMENT( ( #755 ) ); #276 = ADVANCED_FACE( '', ( #756 ), #757, .T. ); #277 = PRESENTATION_STYLE_ASSIGNMENT( ( #758 ) ); #278 = ADVANCED_FACE( '', ( #759 ), #760, .T. ); #279 = PRESENTATION_STYLE_ASSIGNMENT( ( #761 ) ); #280 = EDGE_CURVE( '', #762, #763, #764, .T. ); #281 = PRESENTATION_STYLE_ASSIGNMENT( ( #765 ) ); #282 = EDGE_CURVE( '', #766, #767, #768, .T. ); #283 = PRESENTATION_STYLE_ASSIGNMENT( ( #769 ) ); #284 = EDGE_CURVE( '', #770, #771, #772, .T. ); #285 = PRESENTATION_STYLE_ASSIGNMENT( ( #773 ) ); #286 = EDGE_CURVE( '', #774, #775, #776, .T. ); #287 = PRESENTATION_STYLE_ASSIGNMENT( ( #777 ) ); #288 = EDGE_CURVE( '', #778, #779, #780, .T. ); #289 = PRESENTATION_STYLE_ASSIGNMENT( ( #781 ) ); #290 = EDGE_CURVE( '', #717, #782, #783, .T. ); #291 = PRESENTATION_STYLE_ASSIGNMENT( ( #784 ) ); #292 = EDGE_CURVE( '', #785, #786, #787, .T. ); #293 = PRESENTATION_STYLE_ASSIGNMENT( ( #788 ) ); #294 = EDGE_CURVE( '', #789, #790, #791, .T. ); #295 = PRESENTATION_STYLE_ASSIGNMENT( ( #792 ) ); #296 = EDGE_CURVE( '', #763, #793, #794, .T. ); #297 = PRESENTATION_STYLE_ASSIGNMENT( ( #795 ) ); #298 = EDGE_CURVE( '', #796, #797, #798, .T. ); #299 = PRESENTATION_STYLE_ASSIGNMENT( ( #799 ) ); #300 = EDGE_CURVE( '', #767, #713, #800, .T. ); #301 = PRESENTATION_STYLE_ASSIGNMENT( ( #801 ) ); #302 = EDGE_CURVE( '', #796, #802, #803, .T. ); #303 = PRESENTATION_STYLE_ASSIGNMENT( ( #804 ) ); #304 = EDGE_CURVE( '', #805, #747, #806, .T. ); #305 = PRESENTATION_STYLE_ASSIGNMENT( ( #807 ) ); #306 = ADVANCED_FACE( '', ( #808 ), #809, .F. ); #307 = PRESENTATION_STYLE_ASSIGNMENT( ( #810 ) ); #308 = EDGE_CURVE( '', #811, #722, #812, .T. ); #309 = PRESENTATION_STYLE_ASSIGNMENT( ( #813 ) ); #310 = EDGE_CURVE( '', #736, #814, #815, .T. ); #311 = PRESENTATION_STYLE_ASSIGNMENT( ( #816 ) ); #312 = EDGE_CURVE( '', #817, #818, #819, .T. ); #313 = PRESENTATION_STYLE_ASSIGNMENT( ( #820 ) ); #314 = EDGE_CURVE( '', #821, #822, #823, .T. ); #315 = PRESENTATION_STYLE_ASSIGNMENT( ( #824 ) ); #316 = EDGE_CURVE( '', #825, #826, #827, .T. ); #317 = PRESENTATION_STYLE_ASSIGNMENT( ( #828 ) ); #318 = EDGE_CURVE( '', #821, #793, #829, .T. ); #319 = PRESENTATION_STYLE_ASSIGNMENT( ( #830 ) ); #320 = EDGE_CURVE( '', #831, #832, #833, .T. ); #321 = PRESENTATION_STYLE_ASSIGNMENT( ( #834 ) ); #322 = EDGE_CURVE( '', #835, #836, #837, .T. ); #323 = PRESENTATION_STYLE_ASSIGNMENT( ( #838 ) ); #324 = EDGE_CURVE( '', #839, #840, #841, .T. ); #325 = PRESENTATION_STYLE_ASSIGNMENT( ( #842 ) ); #326 = EDGE_CURVE( '', #843, #844, #845, .T. ); #327 = PRESENTATION_STYLE_ASSIGNMENT( ( #846 ) ); #328 = EDGE_CURVE( '', #843, #731, #847, .T. ); #329 = PRESENTATION_STYLE_ASSIGNMENT( ( #848 ) ); #330 = EDGE_CURVE( '', #849, #739, #850, .T. ); #331 = PRESENTATION_STYLE_ASSIGNMENT( ( #851 ) ); #332 = EDGE_CURVE( '', #835, #793, #852, .T. ); #333 = PRESENTATION_STYLE_ASSIGNMENT( ( #853 ) ); #334 = ADVANCED_FACE( '', ( #854 ), #855, .T. ); #335 = PRESENTATION_STYLE_ASSIGNMENT( ( #856 ) ); #336 = EDGE_CURVE( '', #844, #747, #857, .T. ); #337 = PRESENTATION_STYLE_ASSIGNMENT( ( #858 ) ); #338 = EDGE_CURVE( '', #859, #860, #861, .T. ); #339 = PRESENTATION_STYLE_ASSIGNMENT( ( #862 ) ); #340 = EDGE_CURVE( '', #840, #863, #864, .T. ); #341 = PRESENTATION_STYLE_ASSIGNMENT( ( #865 ) ); #342 = EDGE_CURVE( '', #866, #867, #868, .T. ); #343 = PRESENTATION_STYLE_ASSIGNMENT( ( #869 ) ); #344 = EDGE_CURVE( '', #736, #870, #871, .T. ); #345 = PRESENTATION_STYLE_ASSIGNMENT( ( #872 ) ); #346 = ADVANCED_FACE( '', ( #873 ), #874, .F. ); #347 = PRESENTATION_STYLE_ASSIGNMENT( ( #875 ) ); #348 = EDGE_CURVE( '', #876, #877, #878, .T. ); #349 = PRESENTATION_STYLE_ASSIGNMENT( ( #879 ) ); #350 = EDGE_CURVE( '', #880, #826, #881, .T. ); #351 = PRESENTATION_STYLE_ASSIGNMENT( ( #882 ) ); #352 = ADVANCED_FACE( '', ( #883 ), #884, .F. ); #353 = PRESENTATION_STYLE_ASSIGNMENT( ( #885 ) ); #354 = EDGE_CURVE( '', #886, #887, #888, .T. ); #355 = PRESENTATION_STYLE_ASSIGNMENT( ( #889 ) ); #356 = EDGE_CURVE( '', #890, #891, #892, .T. ); #357 = PRESENTATION_STYLE_ASSIGNMENT( ( #893 ) ); #358 = ADVANCED_FACE( '', ( #894 ), #895, .T. ); #359 = PRESENTATION_STYLE_ASSIGNMENT( ( #896 ) ); #360 = EDGE_CURVE( '', #897, #767, #898, .T. ); #361 = PRESENTATION_STYLE_ASSIGNMENT( ( #899 ) ); #362 = ADVANCED_FACE( '', ( #900 ), #901, .F. ); #363 = PRESENTATION_STYLE_ASSIGNMENT( ( #902 ) ); #364 = EDGE_CURVE( '', #903, #886, #904, .T. ); #365 = PRESENTATION_STYLE_ASSIGNMENT( ( #905 ) ); #366 = ADVANCED_FACE( '', ( #906 ), #907, .T. ); #367 = PRESENTATION_STYLE_ASSIGNMENT( ( #908 ) ); #368 = EDGE_CURVE( '', #909, #910, #911, .T. ); #369 = PRESENTATION_STYLE_ASSIGNMENT( ( #912 ) ); #370 = EDGE_CURVE( '', #818, #913, #914, .T. ); #371 = PRESENTATION_STYLE_ASSIGNMENT( ( #915 ) ); #372 = ADVANCED_FACE( '', ( #916 ), #917, .T. ); #373 = PRESENTATION_STYLE_ASSIGNMENT( ( #918 ) ); #374 = ADVANCED_FACE( '', ( #919 ), #920, .T. ); #375 = PRESENTATION_STYLE_ASSIGNMENT( ( #921 ) ); #376 = EDGE_CURVE( '', #785, #922, #923, .T. ); #377 = PRESENTATION_STYLE_ASSIGNMENT( ( #924 ) ); #378 = ADVANCED_FACE( '', ( #925 ), #926, .F. ); #379 = PRESENTATION_STYLE_ASSIGNMENT( ( #927 ) ); #380 = EDGE_CURVE( '', #928, #929, #930, .T. ); #381 = PRESENTATION_STYLE_ASSIGNMENT( ( #931 ) ); #382 = EDGE_CURVE( '', #763, #932, #933, .T. ); #383 = PRESENTATION_STYLE_ASSIGNMENT( ( #934 ) ); #384 = EDGE_CURVE( '', #935, #811, #936, .T. ); #385 = PRESENTATION_STYLE_ASSIGNMENT( ( #937 ) ); #386 = EDGE_CURVE( '', #938, #939, #940, .T. ); #387 = PRESENTATION_STYLE_ASSIGNMENT( ( #941 ) ); #388 = ADVANCED_FACE( '', ( #942 ), #943, .F. ); #389 = PRESENTATION_STYLE_ASSIGNMENT( ( #944 ) ); #390 = EDGE_CURVE( '', #814, #945, #946, .T. ); #391 = PRESENTATION_STYLE_ASSIGNMENT( ( #947 ) ); #392 = EDGE_CURVE( '', #790, #771, #948, .T. ); #393 = PRESENTATION_STYLE_ASSIGNMENT( ( #949 ) ); #394 = EDGE_CURVE( '', #779, #831, #950, .T. ); #395 = PRESENTATION_STYLE_ASSIGNMENT( ( #951 ) ); #396 = EDGE_CURVE( '', #952, #953, #954, .T. ); #397 = PRESENTATION_STYLE_ASSIGNMENT( ( #955 ) ); #398 = ADVANCED_FACE( '', ( #956 ), #957, .F. ); #399 = PRESENTATION_STYLE_ASSIGNMENT( ( #958 ) ); #400 = ADVANCED_FACE( '', ( #959 ), #960, .F. ); #401 = PRESENTATION_STYLE_ASSIGNMENT( ( #961 ) ); #402 = ADVANCED_FACE( '', ( #962 ), #963, .F. ); #403 = PRESENTATION_STYLE_ASSIGNMENT( ( #964 ) ); #404 = EDGE_CURVE( '', #965, #966, #967, .T. ); #405 = PRESENTATION_STYLE_ASSIGNMENT( ( #968 ) ); #406 = ADVANCED_FACE( '', ( #969 ), #970, .T. ); #407 = PRESENTATION_STYLE_ASSIGNMENT( ( #971 ) ); #408 = EDGE_CURVE( '', #717, #740, #972, .T. ); #409 = PRESENTATION_STYLE_ASSIGNMENT( ( #973 ) ); #410 = EDGE_CURVE( '', #826, #859, #974, .T. ); #411 = PRESENTATION_STYLE_ASSIGNMENT( ( #975 ) ); #412 = ADVANCED_FACE( '', ( #976 ), #977, .T. ); #413 = PRESENTATION_STYLE_ASSIGNMENT( ( #978 ) ); #414 = ADVANCED_FACE( '', ( #979 ), #980, .T. ); #415 = PRESENTATION_STYLE_ASSIGNMENT( ( #981 ) ); #416 = ADVANCED_FACE( '', ( #982 ), #983, .T. ); #417 = PRESENTATION_STYLE_ASSIGNMENT( ( #984 ) ); #418 = EDGE_CURVE( '', #922, #839, #985, .T. ); #419 = PRESENTATION_STYLE_ASSIGNMENT( ( #986 ) ); #420 = EDGE_CURVE( '', #778, #987, #988, .T. ); #421 = PRESENTATION_STYLE_ASSIGNMENT( ( #989 ) ); #422 = EDGE_CURVE( '', #877, #805, #990, .T. ); #423 = PRESENTATION_STYLE_ASSIGNMENT( ( #991 ) ); #424 = ADVANCED_FACE( '', ( #992 ), #993, .F. ); #425 = PRESENTATION_STYLE_ASSIGNMENT( ( #994 ) ); #426 = ADVANCED_FACE( '', ( #995 ), #996, .F. ); #427 = PRESENTATION_STYLE_ASSIGNMENT( ( #997 ) ); #428 = EDGE_CURVE( '', #987, #831, #998, .T. ); #429 = PRESENTATION_STYLE_ASSIGNMENT( ( #999 ) ); #430 = ADVANCED_FACE( '', ( #1000 ), #1001, .T. ); #431 = PRESENTATION_STYLE_ASSIGNMENT( ( #1002 ) ); #432 = EDGE_CURVE( '', #746, #826, #1003, .T. ); #433 = PRESENTATION_STYLE_ASSIGNMENT( ( #1004 ) ); #434 = EDGE_CURVE( '', #782, #713, #1005, .T. ); #435 = PRESENTATION_STYLE_ASSIGNMENT( ( #1006 ) ); #436 = EDGE_CURVE( '', #863, #721, #1007, .T. ); #437 = PRESENTATION_STYLE_ASSIGNMENT( ( #1008 ) ); #438 = EDGE_CURVE( '', #929, #965, #1009, .T. ); #439 = PRESENTATION_STYLE_ASSIGNMENT( ( #1010 ) ); #440 = EDGE_CURVE( '', #797, #779, #1011, .T. ); #441 = PRESENTATION_STYLE_ASSIGNMENT( ( #1012 ) ); #442 = ADVANCED_FACE( '', ( #1013 ), #1014, .F. ); #443 = PRESENTATION_STYLE_ASSIGNMENT( ( #1015 ) ); #444 = ADVANCED_FACE( '', ( #1016 ), #1017, .T. ); #445 = PRESENTATION_STYLE_ASSIGNMENT( ( #1018 ) ); #446 = EDGE_CURVE( '', #840, #849, #1019, .T. ); #447 = PRESENTATION_STYLE_ASSIGNMENT( ( #1020 ) ); #448 = EDGE_CURVE( '', #1021, #897, #1022, .T. ); #449 = PRESENTATION_STYLE_ASSIGNMENT( ( #1023 ) ); #450 = ADVANCED_FACE( '', ( #1024 ), #1025, .F. ); #451 = PRESENTATION_STYLE_ASSIGNMENT( ( #1026 ) ); #452 = ADVANCED_FACE( '', ( #1027 ), #1028, .F. ); #453 = PRESENTATION_STYLE_ASSIGNMENT( ( #1029 ) ); #454 = ADVANCED_FACE( '', ( #1030 ), #1031, .T. ); #455 = PRESENTATION_STYLE_ASSIGNMENT( ( #1032 ) ); #456 = EDGE_CURVE( '', #860, #746, #1033, .T. ); #457 = PRESENTATION_STYLE_ASSIGNMENT( ( #1034 ) ); #458 = EDGE_CURVE( '', #1035, #785, #1036, .T. ); #459 = PRESENTATION_STYLE_ASSIGNMENT( ( #1037 ) ); #460 = ADVANCED_FACE( '', ( #1038 ), #1039, .T. ); #461 = PRESENTATION_STYLE_ASSIGNMENT( ( #1040 ) ); #462 = EDGE_CURVE( '', #1041, #762, #1042, .T. ); #463 = PRESENTATION_STYLE_ASSIGNMENT( ( #1043 ) ); #464 = EDGE_CURVE( '', #1044, #714, #1045, .T. ); #465 = PRESENTATION_STYLE_ASSIGNMENT( ( #1046 ) ); #466 = ADVANCED_FACE( '', ( #1047 ), #1048, .T. ); #467 = PRESENTATION_STYLE_ASSIGNMENT( ( #1049 ) ); #468 = ADVANCED_FACE( '', ( #1050 ), #1051, .T. ); #469 = PRESENTATION_STYLE_ASSIGNMENT( ( #1052 ) ); #470 = EDGE_CURVE( '', #731, #1053, #1054, .T. ); #471 = PRESENTATION_STYLE_ASSIGNMENT( ( #1055 ) ); #472 = ADVANCED_FACE( '', ( #1056 ), #1057, .F. ); #473 = PRESENTATION_STYLE_ASSIGNMENT( ( #1058 ) ); #474 = ADVANCED_FACE( '', ( #1059 ), #1060, .T. ); #475 = PRESENTATION_STYLE_ASSIGNMENT( ( #1061 ) ); #476 = EDGE_CURVE( '', #1062, #863, #1063, .T. ); #477 = PRESENTATION_STYLE_ASSIGNMENT( ( #1064 ) ); #478 = EDGE_CURVE( '', #1065, #802, #1066, .T. ); #479 = PRESENTATION_STYLE_ASSIGNMENT( ( #1067 ) ); #480 = EDGE_CURVE( '', #722, #714, #1068, .T. ); #481 = PRESENTATION_STYLE_ASSIGNMENT( ( #1069 ) ); #482 = EDGE_CURVE( '', #763, #876, #1070, .T. ); #483 = PRESENTATION_STYLE_ASSIGNMENT( ( #1071 ) ); #484 = EDGE_CURVE( '', #1072, #782, #1073, .T. ); #485 = PRESENTATION_STYLE_ASSIGNMENT( ( #1074 ) ); #486 = EDGE_CURVE( '', #825, #735, #1075, .T. ); #487 = PRESENTATION_STYLE_ASSIGNMENT( ( #1076 ) ); #488 = EDGE_CURVE( '', #860, #1077, #1078, .T. ); #489 = PRESENTATION_STYLE_ASSIGNMENT( ( #1079 ) ); #490 = EDGE_CURVE( '', #1065, #835, #1080, .T. ); #491 = PRESENTATION_STYLE_ASSIGNMENT( ( #1081 ) ); #492 = ADVANCED_FACE( '', ( #1082 ), #1083, .F. ); #493 = PRESENTATION_STYLE_ASSIGNMENT( ( #1084 ) ); #494 = EDGE_CURVE( '', #1085, #778, #1086, .T. ); #495 = PRESENTATION_STYLE_ASSIGNMENT( ( #1087 ) ); #496 = EDGE_CURVE( '', #913, #929, #1088, .T. ); #497 = PRESENTATION_STYLE_ASSIGNMENT( ( #1089 ) ); #498 = ADVANCED_FACE( '', ( #1090 ), #1091, .T. ); #499 = PRESENTATION_STYLE_ASSIGNMENT( ( #1092 ) ); #500 = EDGE_CURVE( '', #903, #938, #1093, .T. ); #501 = PRESENTATION_STYLE_ASSIGNMENT( ( #1094 ) ); #502 = EDGE_CURVE( '', #987, #1041, #1095, .T. ); #503 = PRESENTATION_STYLE_ASSIGNMENT( ( #1096 ) ); #504 = ADVANCED_FACE( '', ( #1097 ), #1098, .T. ); #505 = PRESENTATION_STYLE_ASSIGNMENT( ( #1099 ) ); #506 = EDGE_CURVE( '', #876, #880, #1100, .T. ); #507 = PRESENTATION_STYLE_ASSIGNMENT( ( #1101 ) ); #508 = EDGE_CURVE( '', #928, #910, #1102, .T. ); #509 = PRESENTATION_STYLE_ASSIGNMENT( ( #1103 ) ); #510 = EDGE_CURVE( '', #1104, #866, #1105, .T. ); #511 = PRESENTATION_STYLE_ASSIGNMENT( ( #1106 ) ); #512 = EDGE_CURVE( '', #891, #1107, #1108, .T. ); #513 = PRESENTATION_STYLE_ASSIGNMENT( ( #1109 ) ); #514 = EDGE_CURVE( '', #952, #1065, #1110, .T. ); #515 = PRESENTATION_STYLE_ASSIGNMENT( ( #1111 ) ); #516 = EDGE_CURVE( '', #775, #1112, #1113, .T. ); #517 = PRESENTATION_STYLE_ASSIGNMENT( ( #1114 ) ); #518 = ADVANCED_FACE( '', ( #1115 ), #1116, .F. ); #519 = PRESENTATION_STYLE_ASSIGNMENT( ( #1117 ) ); #520 = EDGE_CURVE( '', #817, #718, #1118, .T. ); #521 = PRESENTATION_STYLE_ASSIGNMENT( ( #1119 ) ); #522 = EDGE_CURVE( '', #891, #786, #1120, .T. ); #523 = PRESENTATION_STYLE_ASSIGNMENT( ( #1121 ) ); #524 = EDGE_CURVE( '', #721, #1044, #1122, .T. ); #525 = PRESENTATION_STYLE_ASSIGNMENT( ( #1123 ) ); #526 = EDGE_CURVE( '', #939, #1124, #1125, .T. ); #527 = PRESENTATION_STYLE_ASSIGNMENT( ( #1126 ) ); #528 = EDGE_CURVE( '', #1104, #732, #1127, .T. ); #529 = PRESENTATION_STYLE_ASSIGNMENT( ( #1128 ) ); #530 = ADVANCED_FACE( '', ( #1129 ), #1130, .F. ); #531 = PRESENTATION_STYLE_ASSIGNMENT( ( #1131 ) ); #532 = EDGE_CURVE( '', #922, #886, #1132, .T. ); #533 = PRESENTATION_STYLE_ASSIGNMENT( ( #1133 ) ); #534 = ADVANCED_FACE( '', ( #1134 ), #1135, .F. ); #535 = PRESENTATION_STYLE_ASSIGNMENT( ( #1136 ) ); #536 = EDGE_CURVE( '', #762, #836, #1137, .T. ); #537 = PRESENTATION_STYLE_ASSIGNMENT( ( #1138 ) ); #538 = EDGE_CURVE( '', #965, #928, #1139, .T. ); #539 = PRESENTATION_STYLE_ASSIGNMENT( ( #1140 ) ); #540 = EDGE_CURVE( '', #1141, #1142, #1143, .T. ); #541 = PRESENTATION_STYLE_ASSIGNMENT( ( #1144 ) ); #542 = EDGE_CURVE( '', #775, #789, #1145, .T. ); #543 = PRESENTATION_STYLE_ASSIGNMENT( ( #1146 ) ); #544 = EDGE_CURVE( '', #774, #1147, #1148, .T. ); #545 = PRESENTATION_STYLE_ASSIGNMENT( ( #1149 ) ); #546 = ADVANCED_FACE( '', ( #1150 ), #1151, .T. ); #547 = PRESENTATION_STYLE_ASSIGNMENT( ( #1152 ) ); #548 = EDGE_CURVE( '', #771, #1147, #1153, .T. ); #549 = PRESENTATION_STYLE_ASSIGNMENT( ( #1154 ) ); #550 = EDGE_CURVE( '', #1155, #821, #1156, .T. ); #551 = PRESENTATION_STYLE_ASSIGNMENT( ( #1157 ) ); #552 = EDGE_CURVE( '', #1077, #732, #1158, .T. ); #553 = PRESENTATION_STYLE_ASSIGNMENT( ( #1159 ) ); #554 = EDGE_CURVE( '', #928, #1021, #1160, .T. ); #555 = PRESENTATION_STYLE_ASSIGNMENT( ( #1161 ) ); #556 = ADVANCED_FACE( '', ( #1162 ), #1163, .F. ); #557 = PRESENTATION_STYLE_ASSIGNMENT( ( #1164 ) ); #558 = EDGE_CURVE( '', #910, #1072, #1165, .T. ); #559 = PRESENTATION_STYLE_ASSIGNMENT( ( #1166 ) ); #560 = ADVANCED_FACE( '', ( #1167 ), #1168, .T. ); #561 = PRESENTATION_STYLE_ASSIGNMENT( ( #1169 ) ); #562 = ADVANCED_FACE( '', ( #1170 ), #1171, .T. ); #563 = PRESENTATION_STYLE_ASSIGNMENT( ( #1172 ) ); #564 = EDGE_CURVE( '', #945, #735, #1173, .T. ); #565 = PRESENTATION_STYLE_ASSIGNMENT( ( #1174 ) ); #566 = EDGE_CURVE( '', #1147, #1112, #1175, .T. ); #567 = PRESENTATION_STYLE_ASSIGNMENT( ( #1176 ) ); #568 = EDGE_CURVE( '', #932, #832, #1177, .T. ); #569 = PRESENTATION_STYLE_ASSIGNMENT( ( #1178 ) ); #570 = EDGE_CURVE( '', #836, #952, #1179, .T. ); #571 = PRESENTATION_STYLE_ASSIGNMENT( ( #1180 ) ); #572 = EDGE_CURVE( '', #1107, #811, #1181, .T. ); #573 = PRESENTATION_STYLE_ASSIGNMENT( ( #1182 ) ); #574 = EDGE_CURVE( '', #1141, #935, #1183, .T. ); #575 = PRESENTATION_STYLE_ASSIGNMENT( ( #1184 ) ); #576 = EDGE_CURVE( '', #887, #903, #1185, .T. ); #577 = PRESENTATION_STYLE_ASSIGNMENT( ( #1186 ) ); #578 = EDGE_CURVE( '', #739, #1124, #1187, .T. ); #579 = PRESENTATION_STYLE_ASSIGNMENT( ( #1188 ) ); #580 = EDGE_CURVE( '', #953, #1041, #1189, .T. ); #581 = PRESENTATION_STYLE_ASSIGNMENT( ( #1190 ) ); #582 = EDGE_CURVE( '', #945, #859, #1191, .T. ); #583 = PRESENTATION_STYLE_ASSIGNMENT( ( #1192 ) ); #584 = EDGE_CURVE( '', #732, #870, #1193, .T. ); #585 = PRESENTATION_STYLE_ASSIGNMENT( ( #1194 ) ); #586 = EDGE_CURVE( '', #825, #1155, #1195, .T. ); #587 = PRESENTATION_STYLE_ASSIGNMENT( ( #1196 ) ); #588 = EDGE_CURVE( '', #1044, #717, #1197, .T. ); #589 = PRESENTATION_STYLE_ASSIGNMENT( ( #1198 ) ); #590 = EDGE_CURVE( '', #786, #887, #1199, .T. ); #591 = PRESENTATION_STYLE_ASSIGNMENT( ( #1200 ) ); #592 = ADVANCED_FACE( '', ( #1201 ), #1202, .F. ); #593 = PRESENTATION_STYLE_ASSIGNMENT( ( #1203 ) ); #594 = ADVANCED_FACE( '', ( #1204 ), #1205, .F. ); #595 = PRESENTATION_STYLE_ASSIGNMENT( ( #1206 ) ); #596 = EDGE_CURVE( '', #1053, #860, #1207, .T. ); #597 = PRESENTATION_STYLE_ASSIGNMENT( ( #1208 ) ); #598 = EDGE_CURVE( '', #870, #1104, #1209, .T. ); #599 = PRESENTATION_STYLE_ASSIGNMENT( ( #1210 ) ); #600 = ADVANCED_FACE( '', ( #1211 ), #1212, .F. ); #601 = PRESENTATION_STYLE_ASSIGNMENT( ( #1213 ) ); #602 = EDGE_CURVE( '', #843, #866, #1214, .T. ); #603 = PRESENTATION_STYLE_ASSIGNMENT( ( #1215 ) ); #604 = EDGE_CURVE( '', #880, #805, #1216, .T. ); #605 = PRESENTATION_STYLE_ASSIGNMENT( ( #1217 ) ); #606 = EDGE_CURVE( '', #766, #1072, #1218, .T. ); #607 = PRESENTATION_STYLE_ASSIGNMENT( ( #1219 ) ); #608 = EDGE_CURVE( '', #770, #774, #1220, .T. ); #609 = PRESENTATION_STYLE_ASSIGNMENT( ( #1221 ) ); #610 = ADVANCED_FACE( '', ( #1222 ), #1223, .F. ); #611 = PRESENTATION_STYLE_ASSIGNMENT( ( #1224 ) ); #612 = ADVANCED_FACE( '', ( #1225 ), #1226, .T. ); #613 = PRESENTATION_STYLE_ASSIGNMENT( ( #1227 ) ); #614 = ADVANCED_FACE( '', ( #1228 ), #1229, .T. ); #615 = PRESENTATION_STYLE_ASSIGNMENT( ( #1230 ) ); #616 = EDGE_CURVE( '', #1124, #966, #1231, .T. ); #617 = PRESENTATION_STYLE_ASSIGNMENT( ( #1232 ) ); #618 = ADVANCED_FACE( '', ( #1233 ), #1234, .T. ); #619 = PRESENTATION_STYLE_ASSIGNMENT( ( #1235 ) ); #620 = EDGE_CURVE( '', #718, #1072, #1236, .T. ); #621 = PRESENTATION_STYLE_ASSIGNMENT( ( #1237 ) ); #622 = EDGE_CURVE( '', #1085, #796, #1238, .T. ); #623 = PRESENTATION_STYLE_ASSIGNMENT( ( #1239 ) ); #624 = EDGE_CURVE( '', #909, #817, #1240, .T. ); #625 = PRESENTATION_STYLE_ASSIGNMENT( ( #1241 ) ); #626 = ADVANCED_FACE( '', ( #1242 ), #1243, .T. ); #627 = PRESENTATION_STYLE_ASSIGNMENT( ( #1244 ) ); #628 = EDGE_CURVE( '', #1085, #953, #1245, .T. ); #629 = PRESENTATION_STYLE_ASSIGNMENT( ( #1246 ) ); #630 = EDGE_CURVE( '', #1062, #1035, #1247, .T. ); #631 = PRESENTATION_STYLE_ASSIGNMENT( ( #1248 ) ); #632 = EDGE_CURVE( '', #1053, #844, #1249, .T. ); #633 = PRESENTATION_STYLE_ASSIGNMENT( ( #1250 ) ); #634 = EDGE_CURVE( '', #1142, #890, #1251, .T. ); #635 = PRESENTATION_STYLE_ASSIGNMENT( ( #1252 ) ); #636 = EDGE_CURVE( '', #966, #897, #1253, .T. ); #637 = PRESENTATION_STYLE_ASSIGNMENT( ( #1254 ) ); #638 = EDGE_CURVE( '', #1112, #790, #1255, .T. ); #639 = PRESENTATION_STYLE_ASSIGNMENT( ( #1256 ) ); #640 = ADVANCED_FACE( '', ( #1257 ), #1258, .T. ); #641 = PRESENTATION_STYLE_ASSIGNMENT( ( #1259 ) ); #642 = ADVANCED_FACE( '', ( #1260 ), #1261, .T. ); #643 = PRESENTATION_STYLE_ASSIGNMENT( ( #1262 ) ); #644 = EDGE_CURVE( '', #814, #1077, #1263, .T. ); #645 = PRESENTATION_STYLE_ASSIGNMENT( ( #1264 ) ); #646 = EDGE_CURVE( '', #939, #849, #1265, .T. ); #647 = PRESENTATION_STYLE_ASSIGNMENT( ( #1266 ) ); #648 = EDGE_CURVE( '', #832, #877, #1267, .T. ); #649 = PRESENTATION_STYLE_ASSIGNMENT( ( #1268 ) ); #650 = EDGE_CURVE( '', #839, #1035, #1269, .T. ); #651 = PRESENTATION_STYLE_ASSIGNMENT( ( #1270 ) ); #652 = EDGE_CURVE( '', #1107, #863, #1271, .T. ); #653 = PRESENTATION_STYLE_ASSIGNMENT( ( #1272 ) ); #654 = EDGE_CURVE( '', #1141, #938, #1273, .T. ); #655 = PRESENTATION_STYLE_ASSIGNMENT( ( #1274 ) ); #656 = EDGE_CURVE( '', #740, #818, #1275, .T. ); #657 = PRESENTATION_STYLE_ASSIGNMENT( ( #1276 ) ); #658 = EDGE_CURVE( '', #890, #935, #1277, .T. ); #659 = PRESENTATION_STYLE_ASSIGNMENT( ( #1278 ) ); #660 = EDGE_CURVE( '', #1142, #887, #1279, .T. ); #661 = PRESENTATION_STYLE_ASSIGNMENT( ( #1280 ) ); #662 = EDGE_CURVE( '', #867, #1155, #1281, .T. ); #663 = PRESENTATION_STYLE_ASSIGNMENT( ( #1282 ) ); #664 = ADVANCED_FACE( '', ( #1283 ), #1284, .F. ); #665 = PRESENTATION_STYLE_ASSIGNMENT( ( #1285 ) ); #666 = EDGE_CURVE( '', #867, #822, #1286, .T. ); #667 = PRESENTATION_STYLE_ASSIGNMENT( ( #1287 ) ); #668 = ADVANCED_FACE( '', ( #1288 ), #1289, .T. ); #669 = PRESENTATION_STYLE_ASSIGNMENT( ( #1290 ) ); #670 = EDGE_CURVE( '', #1021, #766, #1291, .T. ); #671 = PRESENTATION_STYLE_ASSIGNMENT( ( #1292 ) ); #672 = ADVANCED_FACE( '', ( #1293 ), #1294, .F. ); #673 = PRESENTATION_STYLE_ASSIGNMENT( ( #1295 ) ); #674 = EDGE_CURVE( '', #789, #770, #1296, .T. ); #675 = PRESENTATION_STYLE_ASSIGNMENT( ( #1297 ) ); #676 = ADVANCED_FACE( '', ( #1298 ), #1299, .T. ); #677 = PRESENTATION_STYLE_ASSIGNMENT( ( #1300 ) ); #678 = EDGE_CURVE( '', #822, #797, #1301, .T. ); #679 = PRESENTATION_STYLE_ASSIGNMENT( ( #1302 ) ); #680 = EDGE_CURVE( '', #802, #1085, #1303, .T. ); #681 = PRESENTATION_STYLE_ASSIGNMENT( ( #1304 ) ); #682 = EDGE_CURVE( '', #913, #909, #1305, .T. ); #683 = PRESENTATION_STYLE_ASSIGNMENT( ( #1306 ) ); #684 = EDGE_CURVE( '', #891, #1062, #1307, .T. ); #685 = PRESENTATION_STYLE_ASSIGNMENT( ( #1308 ) ); #686 = EDGE_CURVE( '', #932, #1041, #1309, .T. ); #687 = PRODUCT( 'Open CASCADE STEP translator 6.8 2', 'Open CASCADE STEP translator 6.8 2', 'PART-Open CASCADE STEP translator 6.8 2-DESC', ( #1310 ) ); #688 = PRODUCT_DEFINITION( 'NONE', 'NONE', #1311, #2 ); #689 = MANIFOLD_SOLID_BREP( 'Open CASCADE STEP translator 6.8 2', #1312 ); #690 = AXIS2_PLACEMENT_3D( '', #1313, #1314, #1315 ); #691 = PRODUCT( 'Open CASCADE STEP translator 6.8 2', 'Open CASCADE STEP translator 6.8 2', 'PART-Open CASCADE STEP translator 6.8 2-DESC', ( #1310 ) ); #692 = PRODUCT_DEFINITION( 'NONE', 'NONE', #1316, #2 ); #693 = MANIFOLD_SOLID_BREP( 'Open CASCADE STEP translator 6.8 2', #1317 ); #694 = AXIS2_PLACEMENT_3D( '', #1318, #1319, #1320 ); #695 = PRODUCT( 'Open CASCADE STEP translator 6.8 1', 'Open CASCADE STEP translator 6.8 1', 'PART-Open CASCADE STEP translator 6.8 1-DESC', ( #1310 ) ); #696 = PRODUCT_DEFINITION( 'NONE', 'NONE', #1321, #2 ); #697 = MANIFOLD_SOLID_BREP( 'Open CASCADE STEP translator 6.8 1', #1322 ); #698 = AXIS2_PLACEMENT_3D( '', #1323, #1324, #1325 ); #701 = LENGTH_MEASURE_WITH_UNIT( LENGTH_MEASURE( 1.00000000000000 ), #1326 ); #704 = DIMENSIONAL_EXPONENTS( 1.00000000000000, 0.00000000000000, 0.00000000000000, 0.00000000000000, 0.00000000000000, 0.00000000000000, 0.00000000000000 ); #706 = DIMENSIONAL_EXPONENTS( 0.00000000000000, 0.00000000000000, 0.00000000000000, 0.00000000000000, 0.00000000000000, 0.00000000000000, 0.00000000000000 ); #712 = CURVE_STYLE( '', #1327, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1328 ); #713 = VERTEX_POINT( '', #1329 ); #714 = VERTEX_POINT( '', #1330 ); #715 = LINE( '', #1331, #1332 ); #716 = CURVE_STYLE( '', #1333, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1334 ); #717 = VERTEX_POINT( '', #1335 ); #718 = VERTEX_POINT( '', #1336 ); #719 = LINE( '', #1337, #1338 ); #720 = CURVE_STYLE( '', #1339, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1340 ); #721 = VERTEX_POINT( '', #1341 ); #722 = VERTEX_POINT( '', #1342 ); #723 = LINE( '', #1343, #1344 ); #724 = SURFACE_STYLE_USAGE( .BOTH., #1345 ); #725 = FACE_OUTER_BOUND( '', #1346, .T. ); #726 = PLANE( '', #1347 ); #727 = SURFACE_STYLE_USAGE( .BOTH., #1348 ); #728 = FACE_OUTER_BOUND( '', #1349, .T. ); #729 = PLANE( '', #1350 ); #730 = CURVE_STYLE( '', #1351, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1352 ); #731 = VERTEX_POINT( '', #1353 ); #732 = VERTEX_POINT( '', #1354 ); #733 = CIRCLE( '', #1355, 0.000700000000000000 ); #734 = CURVE_STYLE( '', #1356, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1357 ); #735 = VERTEX_POINT( '', #1358 ); #736 = VERTEX_POINT( '', #1359 ); #737 = LINE( '', #1360, #1361 ); #738 = CURVE_STYLE( '', #1362, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1363 ); #739 = VERTEX_POINT( '', #1364 ); #740 = VERTEX_POINT( '', #1365 ); #741 = LINE( '', #1366, #1367 ); #742 = SURFACE_STYLE_USAGE( .BOTH., #1368 ); #743 = FACE_OUTER_BOUND( '', #1369, .T. ); #744 = PLANE( '', #1370 ); #745 = CURVE_STYLE( '', #1371, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1372 ); #746 = VERTEX_POINT( '', #1373 ); #747 = VERTEX_POINT( '', #1374 ); #748 = LINE( '', #1375, #1376 ); #749 = SURFACE_STYLE_USAGE( .BOTH., #1377 ); #750 = FACE_OUTER_BOUND( '', #1378, .T. ); #751 = PLANE( '', #1379 ); #752 = SURFACE_STYLE_USAGE( .BOTH., #1380 ); #753 = FACE_OUTER_BOUND( '', #1381, .T. ); #754 = PLANE( '', #1382 ); #755 = SURFACE_STYLE_USAGE( .BOTH., #1383 ); #756 = FACE_OUTER_BOUND( '', #1384, .T. ); #757 = PLANE( '', #1385 ); #758 = SURFACE_STYLE_USAGE( .BOTH., #1386 ); #759 = FACE_OUTER_BOUND( '', #1387, .T. ); #760 = PLANE( '', #1388 ); #761 = CURVE_STYLE( '', #1389, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1390 ); #762 = VERTEX_POINT( '', #1391 ); #763 = VERTEX_POINT( '', #1392 ); #764 = LINE( '', #1393, #1394 ); #765 = CURVE_STYLE( '', #1395, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1396 ); #766 = VERTEX_POINT( '', #1397 ); #767 = VERTEX_POINT( '', #1398 ); #768 = LINE( '', #1399, #1400 ); #769 = CURVE_STYLE( '', #1401, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1402 ); #770 = VERTEX_POINT( '', #1403 ); #771 = VERTEX_POINT( '', #1404 ); #772 = LINE( '', #1405, #1406 ); #773 = CURVE_STYLE( '', #1407, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1408 ); #774 = VERTEX_POINT( '', #1409 ); #775 = VERTEX_POINT( '', #1410 ); #776 = LINE( '', #1411, #1412 ); #777 = CURVE_STYLE( '', #1413, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1414 ); #778 = VERTEX_POINT( '', #1415 ); #779 = VERTEX_POINT( '', #1416 ); #780 = LINE( '', #1417, #1418 ); #781 = CURVE_STYLE( '', #1419, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1420 ); #782 = VERTEX_POINT( '', #1421 ); #783 = LINE( '', #1422, #1423 ); #784 = CURVE_STYLE( '', #1424, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1425 ); #785 = VERTEX_POINT( '', #1426 ); #786 = VERTEX_POINT( '', #1427 ); #787 = LINE( '', #1428, #1429 ); #788 = CURVE_STYLE( '', #1430, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1431 ); #789 = VERTEX_POINT( '', #1432 ); #790 = VERTEX_POINT( '', #1433 ); #791 = LINE( '', #1434, #1435 ); #792 = CURVE_STYLE( '', #1436, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1437 ); #793 = VERTEX_POINT( '', #1438 ); #794 = LINE( '', #1439, #1440 ); #795 = CURVE_STYLE( '', #1441, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1442 ); #796 = VERTEX_POINT( '', #1443 ); #797 = VERTEX_POINT( '', #1444 ); #798 = LINE( '', #1445, #1446 ); #799 = CURVE_STYLE( '', #1447, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1448 ); #800 = CIRCLE( '', #1449, 0.000350000000000000 ); #801 = CURVE_STYLE( '', #1450, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1451 ); #802 = VERTEX_POINT( '', #1452 ); #803 = LINE( '', #1453, #1454 ); #804 = CURVE_STYLE( '', #1455, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1456 ); #805 = VERTEX_POINT( '', #1457 ); #806 = LINE( '', #1458, #1459 ); #807 = SURFACE_STYLE_USAGE( .BOTH., #1460 ); #808 = FACE_OUTER_BOUND( '', #1461, .T. ); #809 = PLANE( '', #1462 ); #810 = CURVE_STYLE( '', #1463, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1464 ); #811 = VERTEX_POINT( '', #1465 ); #812 = LINE( '', #1466, #1467 ); #813 = CURVE_STYLE( '', #1468, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1469 ); #814 = VERTEX_POINT( '', #1470 ); #815 = LINE( '', #1471, #1472 ); #816 = CURVE_STYLE( '', #1473, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1474 ); #817 = VERTEX_POINT( '', #1475 ); #818 = VERTEX_POINT( '', #1476 ); #819 = LINE( '', #1477, #1478 ); #820 = CURVE_STYLE( '', #1479, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1480 ); #821 = VERTEX_POINT( '', #1481 ); #822 = VERTEX_POINT( '', #1482 ); #823 = LINE( '', #1483, #1484 ); #824 = CURVE_STYLE( '', #1485, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1486 ); #825 = VERTEX_POINT( '', #1487 ); #826 = VERTEX_POINT( '', #1488 ); #827 = LINE( '', #1489, #1490 ); #828 = CURVE_STYLE( '', #1491, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1492 ); #829 = LINE( '', #1493, #1494 ); #830 = CURVE_STYLE( '', #1495, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1496 ); #831 = VERTEX_POINT( '', #1497 ); #832 = VERTEX_POINT( '', #1498 ); #833 = CIRCLE( '', #1499, 0.000350000000000000 ); #834 = CURVE_STYLE( '', #1500, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1501 ); #835 = VERTEX_POINT( '', #1502 ); #836 = VERTEX_POINT( '', #1503 ); #837 = LINE( '', #1504, #1505 ); #838 = CURVE_STYLE( '', #1506, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1507 ); #839 = VERTEX_POINT( '', #1508 ); #840 = VERTEX_POINT( '', #1509 ); #841 = LINE( '', #1510, #1511 ); #842 = CURVE_STYLE( '', #1512, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1513 ); #843 = VERTEX_POINT( '', #1514 ); #844 = VERTEX_POINT( '', #1515 ); #845 = LINE( '', #1516, #1517 ); #846 = CURVE_STYLE( '', #1518, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1519 ); #847 = LINE( '', #1520, #1521 ); #848 = CURVE_STYLE( '', #1522, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1523 ); #849 = VERTEX_POINT( '', #1524 ); #850 = LINE( '', #1525, #1526 ); #851 = CURVE_STYLE( '', #1527, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1528 ); #852 = LINE( '', #1529, #1530 ); #853 = SURFACE_STYLE_USAGE( .BOTH., #1531 ); #854 = FACE_OUTER_BOUND( '', #1532, .T. ); #855 = PLANE( '', #1533 ); #856 = CURVE_STYLE( '', #1534, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1535 ); #857 = CIRCLE( '', #1536, 0.000350000000000000 ); #858 = CURVE_STYLE( '', #1537, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1538 ); #859 = VERTEX_POINT( '', #1539 ); #860 = VERTEX_POINT( '', #1540 ); #861 = LINE( '', #1541, #1542 ); #862 = CURVE_STYLE( '', #1543, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1544 ); #863 = VERTEX_POINT( '', #1545 ); #864 = LINE( '', #1546, #1547 ); #865 = CURVE_STYLE( '', #1548, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1549 ); #866 = VERTEX_POINT( '', #1550 ); #867 = VERTEX_POINT( '', #1551 ); #868 = LINE( '', #1552, #1553 ); #869 = CURVE_STYLE( '', #1554, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1555 ); #870 = VERTEX_POINT( '', #1556 ); #871 = LINE( '', #1557, #1558 ); #872 = SURFACE_STYLE_USAGE( .BOTH., #1559 ); #873 = FACE_OUTER_BOUND( '', #1560, .T. ); #874 = PLANE( '', #1561 ); #875 = CURVE_STYLE( '', #1562, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1563 ); #876 = VERTEX_POINT( '', #1564 ); #877 = VERTEX_POINT( '', #1565 ); #878 = LINE( '', #1566, #1567 ); #879 = CURVE_STYLE( '', #1568, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1569 ); #880 = VERTEX_POINT( '', #1570 ); #881 = LINE( '', #1571, #1572 ); #882 = SURFACE_STYLE_USAGE( .BOTH., #1573 ); #883 = FACE_OUTER_BOUND( '', #1574, .T. ); #884 = PLANE( '', #1575 ); #885 = CURVE_STYLE( '', #1576, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1577 ); #886 = VERTEX_POINT( '', #1578 ); #887 = VERTEX_POINT( '', #1579 ); #888 = LINE( '', #1580, #1581 ); #889 = CURVE_STYLE( '', #1582, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1583 ); #890 = VERTEX_POINT( '', #1584 ); #891 = VERTEX_POINT( '', #1585 ); #892 = CIRCLE( '', #1586, 0.000350000000000000 ); #893 = SURFACE_STYLE_USAGE( .BOTH., #1587 ); #894 = FACE_OUTER_BOUND( '', #1588, .T. ); #895 = PLANE( '', #1589 ); #896 = CURVE_STYLE( '', #1590, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1591 ); #897 = VERTEX_POINT( '', #1592 ); #898 = LINE( '', #1593, #1594 ); #899 = SURFACE_STYLE_USAGE( .BOTH., #1595 ); #900 = FACE_OUTER_BOUND( '', #1596, .T. ); #901 = PLANE( '', #1597 ); #902 = CURVE_STYLE( '', #1598, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1599 ); #903 = VERTEX_POINT( '', #1600 ); #904 = LINE( '', #1601, #1602 ); #905 = SURFACE_STYLE_USAGE( .BOTH., #1603 ); #906 = FACE_OUTER_BOUND( '', #1604, .T. ); #907 = PLANE( '', #1605 ); #908 = CURVE_STYLE( '', #1606, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1607 ); #909 = VERTEX_POINT( '', #1608 ); #910 = VERTEX_POINT( '', #1609 ); #911 = LINE( '', #1610, #1611 ); #912 = CURVE_STYLE( '', #1612, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1613 ); #913 = VERTEX_POINT( '', #1614 ); #914 = LINE( '', #1615, #1616 ); #915 = SURFACE_STYLE_USAGE( .BOTH., #1617 ); #916 = FACE_OUTER_BOUND( '', #1618, .T. ); #917 = PLANE( '', #1619 ); #918 = SURFACE_STYLE_USAGE( .BOTH., #1620 ); #919 = FACE_OUTER_BOUND( '', #1621, .T. ); #920 = PLANE( '', #1622 ); #921 = CURVE_STYLE( '', #1623, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1624 ); #922 = VERTEX_POINT( '', #1625 ); #923 = LINE( '', #1626, #1627 ); #924 = SURFACE_STYLE_USAGE( .BOTH., #1628 ); #925 = FACE_OUTER_BOUND( '', #1629, .T. ); #926 = PLANE( '', #1630 ); #927 = CURVE_STYLE( '', #1631, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1632 ); #928 = VERTEX_POINT( '', #1633 ); #929 = VERTEX_POINT( '', #1634 ); #930 = LINE( '', #1635, #1636 ); #931 = CURVE_STYLE( '', #1637, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1638 ); #932 = VERTEX_POINT( '', #1639 ); #933 = LINE( '', #1640, #1641 ); #934 = CURVE_STYLE( '', #1642, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1643 ); #935 = VERTEX_POINT( '', #1644 ); #936 = CIRCLE( '', #1645, 0.000350000000000000 ); #937 = CURVE_STYLE( '', #1646, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1647 ); #938 = VERTEX_POINT( '', #1648 ); #939 = VERTEX_POINT( '', #1649 ); #940 = LINE( '', #1650, #1651 ); #941 = SURFACE_STYLE_USAGE( .BOTH., #1652 ); #942 = FACE_OUTER_BOUND( '', #1653, .T. ); #943 = PLANE( '', #1654 ); #944 = CURVE_STYLE( '', #1655, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1656 ); #945 = VERTEX_POINT( '', #1657 ); #946 = LINE( '', #1658, #1659 ); #947 = CURVE_STYLE( '', #1660, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1661 ); #948 = LINE( '', #1662, #1663 ); #949 = CURVE_STYLE( '', #1664, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1665 ); #950 = LINE( '', #1666, #1667 ); #951 = CURVE_STYLE( '', #1668, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1669 ); #952 = VERTEX_POINT( '', #1670 ); #953 = VERTEX_POINT( '', #1671 ); #954 = LINE( '', #1672, #1673 ); #955 = SURFACE_STYLE_USAGE( .BOTH., #1674 ); #956 = FACE_OUTER_BOUND( '', #1675, .T. ); #957 = PLANE( '', #1676 ); #958 = SURFACE_STYLE_USAGE( .BOTH., #1677 ); #959 = FACE_OUTER_BOUND( '', #1678, .T. ); #960 = PLANE( '', #1679 ); #961 = SURFACE_STYLE_USAGE( .BOTH., #1680 ); #962 = FACE_OUTER_BOUND( '', #1681, .T. ); #963 = PLANE( '', #1682 ); #964 = CURVE_STYLE( '', #1683, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1684 ); #965 = VERTEX_POINT( '', #1685 ); #966 = VERTEX_POINT( '', #1686 ); #967 = LINE( '', #1687, #1688 ); #968 = SURFACE_STYLE_USAGE( .BOTH., #1689 ); #969 = FACE_OUTER_BOUND( '', #1690, .T. ); #970 = PLANE( '', #1691 ); #971 = CURVE_STYLE( '', #1692, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1693 ); #972 = LINE( '', #1694, #1695 ); #973 = CURVE_STYLE( '', #1696, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1697 ); #974 = LINE( '', #1698, #1699 ); #975 = SURFACE_STYLE_USAGE( .BOTH., #1700 ); #976 = FACE_OUTER_BOUND( '', #1701, .T. ); #977 = PLANE( '', #1702 ); #978 = SURFACE_STYLE_USAGE( .BOTH., #1703 ); #979 = FACE_OUTER_BOUND( '', #1704, .T. ); #980 = PLANE( '', #1705 ); #981 = SURFACE_STYLE_USAGE( .BOTH., #1706 ); #982 = FACE_OUTER_BOUND( '', #1707, .T. ); #983 = PLANE( '', #1708 ); #984 = CURVE_STYLE( '', #1709, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1710 ); #985 = LINE( '', #1711, #1712 ); #986 = CURVE_STYLE( '', #1713, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1714 ); #987 = VERTEX_POINT( '', #1715 ); #988 = LINE( '', #1716, #1717 ); #989 = CURVE_STYLE( '', #1718, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1719 ); #990 = LINE( '', #1720, #1721 ); #991 = SURFACE_STYLE_USAGE( .BOTH., #1722 ); #992 = FACE_OUTER_BOUND( '', #1723, .T. ); #993 = PLANE( '', #1724 ); #994 = SURFACE_STYLE_USAGE( .BOTH., #1725 ); #995 = FACE_OUTER_BOUND( '', #1726, .T. ); #996 = PLANE( '', #1727 ); #997 = CURVE_STYLE( '', #1728, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1729 ); #998 = LINE( '', #1730, #1731 ); #999 = SURFACE_STYLE_USAGE( .BOTH., #1732 ); #1000 = FACE_OUTER_BOUND( '', #1733, .T. ); #1001 = PLANE( '', #1734 ); #1002 = CURVE_STYLE( '', #1735, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1736 ); #1003 = LINE( '', #1737, #1738 ); #1004 = CURVE_STYLE( '', #1739, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1740 ); #1005 = LINE( '', #1741, #1742 ); #1006 = CURVE_STYLE( '', #1743, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1744 ); #1007 = LINE( '', #1745, #1746 ); #1008 = CURVE_STYLE( '', #1747, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1748 ); #1009 = LINE( '', #1749, #1750 ); #1010 = CURVE_STYLE( '', #1751, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1752 ); #1011 = CIRCLE( '', #1753, 0.000700000000000000 ); #1012 = SURFACE_STYLE_USAGE( .BOTH., #1754 ); #1013 = FACE_OUTER_BOUND( '', #1755, .T. ); #1014 = PLANE( '', #1756 ); #1015 = SURFACE_STYLE_USAGE( .BOTH., #1757 ); #1016 = FACE_OUTER_BOUND( '', #1758, .T. ); #1017 = PLANE( '', #1759 ); #1018 = CURVE_STYLE( '', #1760, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1761 ); #1019 = LINE( '', #1762, #1763 ); #1020 = CURVE_STYLE( '', #1764, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1765 ); #1021 = VERTEX_POINT( '', #1766 ); #1022 = LINE( '', #1767, #1768 ); #1023 = SURFACE_STYLE_USAGE( .BOTH., #1769 ); #1024 = FACE_OUTER_BOUND( '', #1770, .T. ); #1025 = PLANE( '', #1771 ); #1026 = SURFACE_STYLE_USAGE( .BOTH., #1772 ); #1027 = FACE_OUTER_BOUND( '', #1773, .T. ); #1028 = CYLINDRICAL_SURFACE( '', #1774, 0.000350000000000000 ); #1029 = SURFACE_STYLE_USAGE( .BOTH., #1775 ); #1030 = FACE_OUTER_BOUND( '', #1776, .T. ); #1031 = PLANE( '', #1777 ); #1032 = CURVE_STYLE( '', #1778, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1779 ); #1033 = CIRCLE( '', #1780, 0.000350000000000000 ); #1034 = CURVE_STYLE( '', #1781, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1782 ); #1035 = VERTEX_POINT( '', #1783 ); #1036 = LINE( '', #1784, #1785 ); #1037 = SURFACE_STYLE_USAGE( .BOTH., #1786 ); #1038 = FACE_OUTER_BOUND( '', #1787, .T. ); #1039 = PLANE( '', #1788 ); #1040 = CURVE_STYLE( '', #1789, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1790 ); #1041 = VERTEX_POINT( '', #1791 ); #1042 = LINE( '', #1792, #1793 ); #1043 = CURVE_STYLE( '', #1794, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1795 ); #1044 = VERTEX_POINT( '', #1796 ); #1045 = LINE( '', #1797, #1798 ); #1046 = SURFACE_STYLE_USAGE( .BOTH., #1799 ); #1047 = FACE_OUTER_BOUND( '', #1800, .T. ); #1048 = PLANE( '', #1801 ); #1049 = SURFACE_STYLE_USAGE( .BOTH., #1802 ); #1050 = FACE_OUTER_BOUND( '', #1803, .T. ); #1051 = CYLINDRICAL_SURFACE( '', #1804, 0.000700000000000000 ); #1052 = CURVE_STYLE( '', #1805, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1806 ); #1053 = VERTEX_POINT( '', #1807 ); #1054 = LINE( '', #1808, #1809 ); #1055 = SURFACE_STYLE_USAGE( .BOTH., #1810 ); #1056 = FACE_OUTER_BOUND( '', #1811, .T. ); #1057 = PLANE( '', #1812 ); #1058 = SURFACE_STYLE_USAGE( .BOTH., #1813 ); #1059 = FACE_OUTER_BOUND( '', #1814, .T. ); #1060 = PLANE( '', #1815 ); #1061 = CURVE_STYLE( '', #1816, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1817 ); #1062 = VERTEX_POINT( '', #1818 ); #1063 = LINE( '', #1819, #1820 ); #1064 = CURVE_STYLE( '', #1821, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1822 ); #1065 = VERTEX_POINT( '', #1823 ); #1066 = LINE( '', #1824, #1825 ); #1067 = CURVE_STYLE( '', #1826, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1827 ); #1068 = LINE( '', #1828, #1829 ); #1069 = CURVE_STYLE( '', #1830, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1831 ); #1070 = LINE( '', #1832, #1833 ); #1071 = CURVE_STYLE( '', #1834, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1835 ); #1072 = VERTEX_POINT( '', #1836 ); #1073 = CIRCLE( '', #1837, 0.000350000000000000 ); #1074 = CURVE_STYLE( '', #1838, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1839 ); #1075 = LINE( '', #1840, #1841 ); #1076 = CURVE_STYLE( '', #1842, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1843 ); #1077 = VERTEX_POINT( '', #1844 ); #1078 = LINE( '', #1845, #1846 ); #1079 = CURVE_STYLE( '', #1847, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1848 ); #1080 = LINE( '', #1849, #1850 ); #1081 = SURFACE_STYLE_USAGE( .BOTH., #1851 ); #1082 = FACE_OUTER_BOUND( '', #1852, .T. ); #1083 = PLANE( '', #1853 ); #1084 = CURVE_STYLE( '', #1854, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1855 ); #1085 = VERTEX_POINT( '', #1856 ); #1086 = CIRCLE( '', #1857, 0.000700000000000000 ); #1087 = CURVE_STYLE( '', #1858, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1859 ); #1088 = LINE( '', #1860, #1861 ); #1089 = SURFACE_STYLE_USAGE( .BOTH., #1862 ); #1090 = FACE_OUTER_BOUND( '', #1863, .T. ); #1091 = PLANE( '', #1864 ); #1092 = CURVE_STYLE( '', #1865, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1866 ); #1093 = LINE( '', #1867, #1868 ); #1094 = CURVE_STYLE( '', #1869, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1870 ); #1095 = CIRCLE( '', #1871, 0.000350000000000000 ); #1096 = SURFACE_STYLE_USAGE( .BOTH., #1872 ); #1097 = FACE_OUTER_BOUND( '', #1873, .T. ); #1098 = PLANE( '', #1874 ); #1099 = CURVE_STYLE( '', #1875, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1876 ); #1100 = LINE( '', #1877, #1878 ); #1101 = CURVE_STYLE( '', #1879, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1880 ); #1102 = LINE( '', #1881, #1882 ); #1103 = CURVE_STYLE( '', #1883, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1884 ); #1104 = VERTEX_POINT( '', #1885 ); #1105 = LINE( '', #1886, #1887 ); #1106 = CURVE_STYLE( '', #1888, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1889 ); #1107 = VERTEX_POINT( '', #1890 ); #1108 = CIRCLE( '', #1891, 0.000350000000000000 ); #1109 = CURVE_STYLE( '', #1892, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1893 ); #1110 = LINE( '', #1894, #1895 ); #1111 = CURVE_STYLE( '', #1896, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1897 ); #1112 = VERTEX_POINT( '', #1898 ); #1113 = LINE( '', #1899, #1900 ); #1114 = SURFACE_STYLE_USAGE( .BOTH., #1901 ); #1115 = FACE_OUTER_BOUND( '', #1902, .T. ); #1116 = PLANE( '', #1903 ); #1117 = CURVE_STYLE( '', #1904, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1905 ); #1118 = LINE( '', #1906, #1907 ); #1119 = CURVE_STYLE( '', #1908, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1909 ); #1120 = LINE( '', #1910, #1911 ); #1121 = CURVE_STYLE( '', #1912, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1913 ); #1122 = LINE( '', #1914, #1915 ); #1123 = CURVE_STYLE( '', #1916, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1917 ); #1124 = VERTEX_POINT( '', #1918 ); #1125 = LINE( '', #1919, #1920 ); #1126 = CURVE_STYLE( '', #1921, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1922 ); #1127 = CIRCLE( '', #1923, 0.000700000000000000 ); #1128 = SURFACE_STYLE_USAGE( .BOTH., #1924 ); #1129 = FACE_OUTER_BOUND( '', #1925, .T. ); #1130 = PLANE( '', #1926 ); #1131 = CURVE_STYLE( '', #1927, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1928 ); #1132 = LINE( '', #1929, #1930 ); #1133 = SURFACE_STYLE_USAGE( .BOTH., #1931 ); #1134 = FACE_OUTER_BOUND( '', #1932, .T. ); #1135 = PLANE( '', #1933 ); #1136 = CURVE_STYLE( '', #1934, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1935 ); #1137 = LINE( '', #1936, #1937 ); #1138 = CURVE_STYLE( '', #1938, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1939 ); #1139 = CIRCLE( '', #1940, 0.000700000000000000 ); #1140 = CURVE_STYLE( '', #1941, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1942 ); #1141 = VERTEX_POINT( '', #1943 ); #1142 = VERTEX_POINT( '', #1944 ); #1143 = LINE( '', #1945, #1946 ); #1144 = CURVE_STYLE( '', #1947, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1948 ); #1145 = LINE( '', #1949, #1950 ); #1146 = CURVE_STYLE( '', #1951, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1952 ); #1147 = VERTEX_POINT( '', #1953 ); #1148 = LINE( '', #1954, #1955 ); #1149 = SURFACE_STYLE_USAGE( .BOTH., #1956 ); #1150 = FACE_OUTER_BOUND( '', #1957, .T. ); #1151 = PLANE( '', #1958 ); #1152 = CURVE_STYLE( '', #1959, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1960 ); #1153 = LINE( '', #1961, #1962 ); #1154 = CURVE_STYLE( '', #1963, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1964 ); #1155 = VERTEX_POINT( '', #1965 ); #1156 = LINE( '', #1966, #1967 ); #1157 = CURVE_STYLE( '', #1968, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1969 ); #1158 = LINE( '', #1970, #1971 ); #1159 = CURVE_STYLE( '', #1972, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1973 ); #1160 = CIRCLE( '', #1974, 0.000700000000000000 ); #1161 = SURFACE_STYLE_USAGE( .BOTH., #1975 ); #1162 = FACE_OUTER_BOUND( '', #1976, .T. ); #1163 = PLANE( '', #1977 ); #1164 = CURVE_STYLE( '', #1978, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1979 ); #1165 = LINE( '', #1980, #1981 ); #1166 = SURFACE_STYLE_USAGE( .BOTH., #1982 ); #1167 = FACE_OUTER_BOUND( '', #1983, .T. ); #1168 = PLANE( '', #1984 ); #1169 = SURFACE_STYLE_USAGE( .BOTH., #1985 ); #1170 = FACE_OUTER_BOUND( '', #1986, .T. ); #1171 = PLANE( '', #1987 ); #1172 = CURVE_STYLE( '', #1988, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1989 ); #1173 = LINE( '', #1990, #1991 ); #1174 = CURVE_STYLE( '', #1992, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1993 ); #1175 = LINE( '', #1994, #1995 ); #1176 = CURVE_STYLE( '', #1996, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #1997 ); #1177 = LINE( '', #1998, #1999 ); #1178 = CURVE_STYLE( '', #2000, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #2001 ); #1179 = LINE( '', #2002, #2003 ); #1180 = CURVE_STYLE( '', #2004, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #2005 ); #1181 = LINE( '', #2006, #2007 ); #1182 = CURVE_STYLE( '', #2008, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #2009 ); #1183 = LINE( '', #2010, #2011 ); #1184 = CURVE_STYLE( '', #2012, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #2013 ); #1185 = CIRCLE( '', #2014, 0.000700000000000000 ); #1186 = CURVE_STYLE( '', #2015, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #2016 ); #1187 = LINE( '', #2017, #2018 ); #1188 = CURVE_STYLE( '', #2019, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #2020 ); #1189 = LINE( '', #2021, #2022 ); #1190 = CURVE_STYLE( '', #2023, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #2024 ); #1191 = LINE( '', #2025, #2026 ); #1192 = CURVE_STYLE( '', #2027, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #2028 ); #1193 = LINE( '', #2029, #2030 ); #1194 = CURVE_STYLE( '', #2031, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #2032 ); #1195 = LINE( '', #2033, #2034 ); #1196 = CURVE_STYLE( '', #2035, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #2036 ); #1197 = LINE( '', #2037, #2038 ); #1198 = CURVE_STYLE( '', #2039, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #2040 ); #1199 = LINE( '', #2041, #2042 ); #1200 = SURFACE_STYLE_USAGE( .BOTH., #2043 ); #1201 = FACE_OUTER_BOUND( '', #2044, .T. ); #1202 = CYLINDRICAL_SURFACE( '', #2045, 0.000350000000000000 ); #1203 = SURFACE_STYLE_USAGE( .BOTH., #2046 ); #1204 = FACE_OUTER_BOUND( '', #2047, .T. ); #1205 = CYLINDRICAL_SURFACE( '', #2048, 0.000350000000000000 ); #1206 = CURVE_STYLE( '', #2049, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #2050 ); #1207 = CIRCLE( '', #2051, 0.000350000000000000 ); #1208 = CURVE_STYLE( '', #2052, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #2053 ); #1209 = LINE( '', #2054, #2055 ); #1210 = SURFACE_STYLE_USAGE( .BOTH., #2056 ); #1211 = FACE_OUTER_BOUND( '', #2057, .T. ); #1212 = CYLINDRICAL_SURFACE( '', #2058, 0.000350000000000000 ); #1213 = CURVE_STYLE( '', #2059, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #2060 ); #1214 = CIRCLE( '', #2061, 0.000700000000000000 ); #1215 = CURVE_STYLE( '', #2062, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #2063 ); #1216 = LINE( '', #2064, #2065 ); #1217 = CURVE_STYLE( '', #2066, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #2067 ); #1218 = CIRCLE( '', #2068, 0.000350000000000000 ); #1219 = CURVE_STYLE( '', #2069, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #2070 ); #1220 = LINE( '', #2071, #2072 ); #1221 = SURFACE_STYLE_USAGE( .BOTH., #2073 ); #1222 = FACE_OUTER_BOUND( '', #2074, .T. ); #1223 = PLANE( '', #2075 ); #1224 = SURFACE_STYLE_USAGE( .BOTH., #2076 ); #1225 = FACE_OUTER_BOUND( '', #2077, .T. ); #1226 = PLANE( '', #2078 ); #1227 = SURFACE_STYLE_USAGE( .BOTH., #2079 ); #1228 = FACE_OUTER_BOUND( '', #2080, .T. ); #1229 = PLANE( '', #2081 ); #1230 = CURVE_STYLE( '', #2082, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #2083 ); #1231 = LINE( '', #2084, #2085 ); #1232 = SURFACE_STYLE_USAGE( .BOTH., #2086 ); #1233 = FACE_OUTER_BOUND( '', #2087, .T. ); #1234 = CYLINDRICAL_SURFACE( '', #2088, 0.000700000000000000 ); #1235 = CURVE_STYLE( '', #2089, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #2090 ); #1236 = LINE( '', #2091, #2092 ); #1237 = CURVE_STYLE( '', #2093, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #2094 ); #1238 = CIRCLE( '', #2095, 0.000700000000000000 ); #1239 = CURVE_STYLE( '', #2096, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #2097 ); #1240 = LINE( '', #2098, #2099 ); #1241 = SURFACE_STYLE_USAGE( .BOTH., #2100 ); #1242 = FACE_OUTER_BOUND( '', #2101, .T. ); #1243 = PLANE( '', #2102 ); #1244 = CURVE_STYLE( '', #2103, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #2104 ); #1245 = LINE( '', #2105, #2106 ); #1246 = CURVE_STYLE( '', #2107, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #2108 ); #1247 = LINE( '', #2109, #2110 ); #1248 = CURVE_STYLE( '', #2111, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #2112 ); #1249 = LINE( '', #2113, #2114 ); #1250 = CURVE_STYLE( '', #2115, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #2116 ); #1251 = LINE( '', #2117, #2118 ); #1252 = CURVE_STYLE( '', #2119, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #2120 ); #1253 = CIRCLE( '', #2121, 0.000700000000000000 ); #1254 = CURVE_STYLE( '', #2122, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #2123 ); #1255 = LINE( '', #2124, #2125 ); #1256 = SURFACE_STYLE_USAGE( .BOTH., #2126 ); #1257 = FACE_OUTER_BOUND( '', #2127, .T. ); #1258 = PLANE( '', #2128 ); #1259 = SURFACE_STYLE_USAGE( .BOTH., #2129 ); #1260 = FACE_OUTER_BOUND( '', #2130, .T. ); #1261 = CYLINDRICAL_SURFACE( '', #2131, 0.000700000000000000 ); #1262 = CURVE_STYLE( '', #2132, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #2133 ); #1263 = LINE( '', #2134, #2135 ); #1264 = CURVE_STYLE( '', #2136, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #2137 ); #1265 = LINE( '', #2138, #2139 ); #1266 = CURVE_STYLE( '', #2140, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #2141 ); #1267 = LINE( '', #2142, #2143 ); #1268 = CURVE_STYLE( '', #2144, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #2145 ); #1269 = LINE( '', #2146, #2147 ); #1270 = CURVE_STYLE( '', #2148, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #2149 ); #1271 = LINE( '', #2150, #2151 ); #1272 = CURVE_STYLE( '', #2152, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #2153 ); #1273 = CIRCLE( '', #2154, 0.000700000000000000 ); #1274 = CURVE_STYLE( '', #2155, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #2156 ); #1275 = LINE( '', #2157, #2158 ); #1276 = CURVE_STYLE( '', #2159, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #2160 ); #1277 = LINE( '', #2161, #2162 ); #1278 = CURVE_STYLE( '', #2163, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #2164 ); #1279 = CIRCLE( '', #2165, 0.000700000000000000 ); #1280 = CURVE_STYLE( '', #2166, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #2167 ); #1281 = LINE( '', #2168, #2169 ); #1282 = SURFACE_STYLE_USAGE( .BOTH., #2170 ); #1283 = FACE_OUTER_BOUND( '', #2171, .T. ); #1284 = PLANE( '', #2172 ); #1285 = CURVE_STYLE( '', #2173, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #2174 ); #1286 = LINE( '', #2175, #2176 ); #1287 = SURFACE_STYLE_USAGE( .BOTH., #2177 ); #1288 = FACE_OUTER_BOUND( '', #2178, .T. ); #1289 = PLANE( '', #2179 ); #1290 = CURVE_STYLE( '', #2180, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #2181 ); #1291 = LINE( '', #2182, #2183 ); #1292 = SURFACE_STYLE_USAGE( .BOTH., #2184 ); #1293 = FACE_OUTER_BOUND( '', #2185, .T. ); #1294 = PLANE( '', #2186 ); #1295 = CURVE_STYLE( '', #2187, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #2188 ); #1296 = LINE( '', #2189, #2190 ); #1297 = SURFACE_STYLE_USAGE( .BOTH., #2191 ); #1298 = FACE_OUTER_BOUND( '', #2192, .T. ); #1299 = CYLINDRICAL_SURFACE( '', #2193, 0.000700000000000000 ); #1300 = CURVE_STYLE( '', #2194, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #2195 ); #1301 = LINE( '', #2196, #2197 ); #1302 = CURVE_STYLE( '', #2198, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #2199 ); #1303 = LINE( '', #2200, #2201 ); #1304 = CURVE_STYLE( '', #2202, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #2203 ); #1305 = LINE( '', #2204, #2205 ); #1306 = CURVE_STYLE( '', #2206, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #2207 ); #1307 = LINE( '', #2208, #2209 ); #1308 = CURVE_STYLE( '', #2210, POSITIVE_LENGTH_MEASURE( 1.00000000000000E-06 ), #2211 ); #1309 = CIRCLE( '', #2212, 0.000350000000000000 ); #1310 = PRODUCT_CONTEXT( '', #232, 'mechanical' ); #1311 = PRODUCT_DEFINITION_FORMATION_WITH_SPECIFIED_SOURCE( ' ', 'NONE', #687, .NOT_KNOWN. ); #1312 = CLOSED_SHELL( '', ( #592, #450, #414, #668, #372, #594, #278, #676, #358, #562, #626, #276, #454, #474, #374, #412, #466, #498, #560, #260, #504, #424, #612, #618, #518, #430, #546, #366 ) ); #1313 = CARTESIAN_POINT( '', ( 0.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #1314 = DIRECTION( '', ( 0.00000000000000, 0.00000000000000, 1.00000000000000 ) ); #1315 = DIRECTION( '', ( 1.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #1316 = PRODUCT_DEFINITION_FORMATION_WITH_SPECIFIED_SOURCE( ' ', 'NONE', #691, .NOT_KNOWN. ); #1317 = CLOSED_SHELL( '', ( #534, #642, #600, #610, #442, #614, #268, #664, #492, #378, #398, #388, #272, #306, #530, #346, #274, #362, #334, #402, #258, #352, #400, #452, #468, #556, #426, #672 ) ); #1318 = CARTESIAN_POINT( '', ( 0.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #1319 = DIRECTION( '', ( 0.00000000000000, 0.00000000000000, 1.00000000000000 ) ); #1320 = DIRECTION( '', ( 1.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #1321 = PRODUCT_DEFINITION_FORMATION_WITH_SPECIFIED_SOURCE( ' ', 'NONE', #695, .NOT_KNOWN. ); #1322 = CLOSED_SHELL( '', ( #416, #460, #640, #472, #444, #406 ) ); #1323 = CARTESIAN_POINT( '', ( 0.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #1324 = DIRECTION( '', ( 0.00000000000000, 0.00000000000000, 1.00000000000000 ) ); #1325 = DIRECTION( '', ( 1.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #1326 = ( LENGTH_UNIT( )NAMED_UNIT( #704 )SI_UNIT( $, .METRE. ) ); #1327 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1328 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #1329 = CARTESIAN_POINT( '', ( 0.00238500000000000, -0.000249146917588000, 0.00840000000000000 ) ); #1330 = CARTESIAN_POINT( '', ( 0.00238500000003400, 0.000825802106005000, 0.00840000000000000 ) ); #1331 = CARTESIAN_POINT( '', ( 0.00238500000001000, -0.000249146917598000, 0.00840000000001000 ) ); #1332 = VECTOR( '', #2214, 1.00000000000000 ); #1333 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1334 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #1335 = CARTESIAN_POINT( '', ( 0.00238500000003400, 0.000700000000000000, 0.00340000000000000 ) ); #1336 = CARTESIAN_POINT( '', ( 0.00243500000000000, 0.000700000000000000, 0.00340000000000000 ) ); #1337 = CARTESIAN_POINT( '', ( 0.00203500000001000, 0.000700000000010000, 0.00340000000001000 ) ); #1338 = VECTOR( '', #2215, 1.00000000000000 ); #1339 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1340 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #1341 = CARTESIAN_POINT( '', ( 0.00574500000000000, 0.000825802106005000, 0.00340000000000000 ) ); #1342 = CARTESIAN_POINT( '', ( 0.00574500000000000, 0.000825802106005000, 0.00840000000000000 ) ); #1343 = CARTESIAN_POINT( '', ( 0.00574500000001000, 0.000825802106015000, 0.00340000000001000 ) ); #1344 = VECTOR( '', #2216, 1.00000000000000 ); #1345 = SURFACE_SIDE_STYLE( '', ( #2217 ) ); #1346 = EDGE_LOOP( '', ( #2218, #2219, #2220 ) ); #1347 = AXIS2_PLACEMENT_3D( '', #2221, #2222, #2223 ); #1348 = SURFACE_SIDE_STYLE( '', ( #2224 ) ); #1349 = EDGE_LOOP( '', ( #2225, #2226, #2227, #2228, #2229 ) ); #1350 = AXIS2_PLACEMENT_3D( '', #2230, #2231, #2232 ); #1351 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1352 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #1353 = CARTESIAN_POINT( '', ( -0.00343500000002800, -0.000249146917588000, 0.00340000000000000 ) ); #1354 = CARTESIAN_POINT( '', ( -0.00219952684653300, -0.000700000000000000, 0.00340000000000000 ) ); #1355 = AXIS2_PLACEMENT_3D( '', #2233, #2234, #2235 ); #1356 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1357 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #1358 = CARTESIAN_POINT( '', ( -0.00203500000000000, 0.000700000000000000, -0.00230000000000000 ) ); #1359 = CARTESIAN_POINT( '', ( -0.00203500000000000, -0.000700000000000000, -0.00230000000000000 ) ); #1360 = CARTESIAN_POINT( '', ( -0.00203500000001000, -0.000700000000010000, -0.00230000000001000 ) ); #1361 = VECTOR( '', #2236, 1.00000000000000 ); #1362 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1363 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #1364 = CARTESIAN_POINT( '', ( 0.00203500000000000, 0.00117580210603200, 0.00340000000000000 ) ); #1365 = CARTESIAN_POINT( '', ( 0.00203500000000000, 0.000700000000000000, 0.00340000000000000 ) ); #1366 = CARTESIAN_POINT( '', ( 0.00203500000001000, 0.000229945838234000, 0.00340000000001000 ) ); #1367 = VECTOR( '', #2237, 1.00000000000000 ); #1368 = SURFACE_SIDE_STYLE( '', ( #2238 ) ); #1369 = EDGE_LOOP( '', ( #2239, #2240, #2241, #2242, #2243, #2244, #2245, #2246 ) ); #1370 = AXIS2_PLACEMENT_3D( '', #2247, #2248, #2249 ); #1371 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1372 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #1373 = CARTESIAN_POINT( '', ( -0.00238500000000000, -0.000249146917588000, 0.00340000000000000 ) ); #1374 = CARTESIAN_POINT( '', ( -0.00238500000000000, -0.000249146917588000, 0.00840000000000000 ) ); #1375 = CARTESIAN_POINT( '', ( -0.00238500000001000, -0.000249146917598000, 0.00340000000001000 ) ); #1376 = VECTOR( '', #2250, 1.00000000000000 ); #1377 = SURFACE_SIDE_STYLE( '', ( #2251 ) ); #1378 = EDGE_LOOP( '', ( #2252, #2253, #2254, #2255 ) ); #1379 = AXIS2_PLACEMENT_3D( '', #2256, #2257, #2258 ); #1380 = SURFACE_SIDE_STYLE( '', ( #2259 ) ); #1381 = EDGE_LOOP( '', ( #2260, #2261, #2262, #2263 ) ); #1382 = AXIS2_PLACEMENT_3D( '', #2264, #2265, #2266 ); #1383 = SURFACE_SIDE_STYLE( '', ( #2267 ) ); #1384 = EDGE_LOOP( '', ( #2268, #2269, #2270, #2271, #2272 ) ); #1385 = AXIS2_PLACEMENT_3D( '', #2273, #2274, #2275 ); #1386 = SURFACE_SIDE_STYLE( '', ( #2276 ) ); #1387 = EDGE_LOOP( '', ( #2277, #2278, #2279, #2280 ) ); #1388 = AXIS2_PLACEMENT_3D( '', #2281, #2282, #2283 ); #1389 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1390 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #1391 = CARTESIAN_POINT( '', ( -0.00569500000000000, 0.000700000000000000, 0.00340000000000000 ) ); #1392 = CARTESIAN_POINT( '', ( -0.00574500000000000, 0.000700000000000000, 0.00340000000000000 ) ); #1393 = CARTESIAN_POINT( '', ( -0.00569500000001000, 0.000700000000010000, 0.00340000000001000 ) ); #1394 = VECTOR( '', #2284, 1.00000000000000 ); #1395 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1396 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #1397 = CARTESIAN_POINT( '', ( 0.00308500000002800, -0.000249146917588000, 0.00340000000000000 ) ); #1398 = CARTESIAN_POINT( '', ( 0.00308500000002800, -0.000249146917588000, 0.00840000000000000 ) ); #1399 = CARTESIAN_POINT( '', ( 0.00308500000003800, -0.000249146917598000, 0.00340000000001000 ) ); #1400 = VECTOR( '', #2285, 1.00000000000000 ); #1401 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1402 = COLOUR_RGB( '', 0.227450981700000, 0.227450981700000, 0.227450981700000 ); #1403 = CARTESIAN_POINT( '', ( -0.00735000000000000, -0.00237500000000000, 0.00000000000000 ) ); #1404 = CARTESIAN_POINT( '', ( -0.00735000000000000, -0.00237500000000000, 0.00320000000000000 ) ); #1405 = CARTESIAN_POINT( '', ( -0.00735000000001000, -0.00237500000001000, 0.00000000000000 ) ); #1406 = VECTOR( '', #2286, 1.00000000000000 ); #1407 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1408 = COLOUR_RGB( '', 0.227450981700000, 0.227450981700000, 0.227450981700000 ); #1409 = CARTESIAN_POINT( '', ( 0.00735000000000000, -0.00237500000000000, 0.00000000000000 ) ); #1410 = CARTESIAN_POINT( '', ( 0.00735000000000000, 0.00237500000000000, 0.00000000000000 ) ); #1411 = CARTESIAN_POINT( '', ( 0.00735000000001000, -0.00237500000001000, 0.00000000000000 ) ); #1412 = VECTOR( '', #2287, 1.00000000000000 ); #1413 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1414 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #1415 = CARTESIAN_POINT( '', ( -0.00469499999997200, -0.000249146917588000, 0.00340000000000000 ) ); #1416 = CARTESIAN_POINT( '', ( -0.00469499999997200, -0.000249146917588000, 0.00840000000000000 ) ); #1417 = CARTESIAN_POINT( '', ( -0.00469499999998200, -0.000249146917598000, 0.00340000000001000 ) ); #1418 = VECTOR( '', #2288, 1.00000000000000 ); #1419 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1420 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #1421 = CARTESIAN_POINT( '', ( 0.00238500000000000, -0.000249146917588000, 0.00340000000000000 ) ); #1422 = CARTESIAN_POINT( '', ( 0.00238500000004400, 0.000825802106015000, 0.00340000000001000 ) ); #1423 = VECTOR( '', #2289, 1.00000000000000 ); #1424 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1425 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #1426 = CARTESIAN_POINT( '', ( 0.00569500000000000, -0.000700000000000000, -0.00230000000000000 ) ); #1427 = CARTESIAN_POINT( '', ( 0.00569500000000000, -0.000700000000000000, 0.00340000000000000 ) ); #1428 = CARTESIAN_POINT( '', ( 0.00569500000001000, -0.000700000000010000, 0.00000000000000 ) ); #1429 = VECTOR( '', #2290, 1.00000000000000 ); #1430 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1431 = COLOUR_RGB( '', 0.227450981700000, 0.227450981700000, 0.227450981700000 ); #1432 = CARTESIAN_POINT( '', ( -0.00735000000000000, 0.00237500000000000, 0.00000000000000 ) ); #1433 = CARTESIAN_POINT( '', ( -0.00735000000000000, 0.00237500000000000, 0.00320000000000000 ) ); #1434 = CARTESIAN_POINT( '', ( -0.00735000000001000, 0.00237500000001000, 0.00000000000000 ) ); #1435 = VECTOR( '', #2291, 1.00000000000000 ); #1436 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1437 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #1438 = CARTESIAN_POINT( '', ( -0.00609500000000000, 0.000700000000000000, 0.00340000000000000 ) ); #1439 = CARTESIAN_POINT( '', ( -0.00569500000001000, 0.000700000000010000, 0.00340000000001000 ) ); #1440 = VECTOR( '', #2292, 1.00000000000000 ); #1441 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1442 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #1443 = CARTESIAN_POINT( '', ( -0.00609500000000000, -0.000249146917588000, 0.00340000000000000 ) ); #1444 = CARTESIAN_POINT( '', ( -0.00609500000000000, -0.000249146917588000, 0.00840000000000000 ) ); #1445 = CARTESIAN_POINT( '', ( -0.00609500000001000, -0.000249146917598000, 0.00340000000001000 ) ); #1446 = VECTOR( '', #2293, 1.00000000000000 ); #1447 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1448 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #1449 = AXIS2_PLACEMENT_3D( '', #2294, #2295, #2296 ); #1450 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1451 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #1452 = CARTESIAN_POINT( '', ( -0.00609500000000000, -0.000700000000000000, 0.00340000000000000 ) ); #1453 = CARTESIAN_POINT( '', ( -0.00609500000001000, 0.000700000000010000, 0.00340000000001000 ) ); #1454 = VECTOR( '', #2297, 1.00000000000000 ); #1455 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1456 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #1457 = CARTESIAN_POINT( '', ( -0.00238500000003400, 0.000825802106005000, 0.00840000000000000 ) ); #1458 = CARTESIAN_POINT( '', ( -0.00238500000004400, 0.000825802106015000, 0.00840000000001000 ) ); #1459 = VECTOR( '', #2298, 1.00000000000000 ); #1460 = SURFACE_SIDE_STYLE( '', ( #2299 ) ); #1461 = EDGE_LOOP( '', ( #2300, #2301, #2302, #2303, #2304 ) ); #1462 = AXIS2_PLACEMENT_3D( '', #2305, #2306, #2307 ); #1463 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1464 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #1465 = CARTESIAN_POINT( '', ( 0.00574500000000000, -0.000249146917588000, 0.00840000000000000 ) ); #1466 = CARTESIAN_POINT( '', ( 0.00574500000001000, -0.000249146917598000, 0.00840000000001000 ) ); #1467 = VECTOR( '', #2308, 1.00000000000000 ); #1468 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1469 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #1470 = CARTESIAN_POINT( '', ( -0.00243500000000000, -0.000700000000000000, -0.00230000000000000 ) ); #1471 = CARTESIAN_POINT( '', ( -0.00243500000001000, -0.000700000000010000, -0.00230000000001000 ) ); #1472 = VECTOR( '', #2309, 1.00000000000000 ); #1473 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1474 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #1475 = CARTESIAN_POINT( '', ( 0.00243500000000000, 0.000700000000000000, -0.00230000000000000 ) ); #1476 = CARTESIAN_POINT( '', ( 0.00203500000000000, 0.000700000000000000, -0.00230000000000000 ) ); #1477 = CARTESIAN_POINT( '', ( 0.00203500000001000, 0.000700000000010000, -0.00230000000001000 ) ); #1478 = VECTOR( '', #2310, 1.00000000000000 ); #1479 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1480 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #1481 = CARTESIAN_POINT( '', ( -0.00609500000000000, 0.00117580210603200, 0.00340000000000000 ) ); #1482 = CARTESIAN_POINT( '', ( -0.00609500000000000, 0.00117580210603200, 0.00840000000000000 ) ); #1483 = CARTESIAN_POINT( '', ( -0.00609500000001000, 0.00117580210604200, 0.00340000000001000 ) ); #1484 = VECTOR( '', #2311, 1.00000000000000 ); #1485 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1486 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #1487 = CARTESIAN_POINT( '', ( -0.00203500000000000, 0.000700000000000000, 0.00340000000000000 ) ); #1488 = CARTESIAN_POINT( '', ( -0.00238500000003400, 0.000700000000000000, 0.00340000000000000 ) ); #1489 = CARTESIAN_POINT( '', ( -0.00203500000001000, 0.000700000000010000, 0.00340000000001000 ) ); #1490 = VECTOR( '', #2312, 1.00000000000000 ); #1491 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1492 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #1493 = CARTESIAN_POINT( '', ( -0.00609500000001000, 0.000820571966701000, 0.00340000000001000 ) ); #1494 = VECTOR( '', #2313, 1.00000000000000 ); #1495 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1496 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #1497 = CARTESIAN_POINT( '', ( -0.00504499999997200, -0.000249146917588000, 0.00840000000000000 ) ); #1498 = CARTESIAN_POINT( '', ( -0.00574500000000000, -0.000249146917588000, 0.00840000000000000 ) ); #1499 = AXIS2_PLACEMENT_3D( '', #2314, #2315, #2316 ); #1500 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1501 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #1502 = CARTESIAN_POINT( '', ( -0.00609500000000000, 0.000700000000000000, -0.00230000000000000 ) ); #1503 = CARTESIAN_POINT( '', ( -0.00569500000000000, 0.000700000000000000, -0.00230000000000000 ) ); #1504 = CARTESIAN_POINT( '', ( -0.00569500000001000, 0.000700000000010000, -0.00230000000001000 ) ); #1505 = VECTOR( '', #2317, 1.00000000000000 ); #1506 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1507 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #1508 = CARTESIAN_POINT( '', ( 0.00609500000000000, 0.000700000000000000, -0.00230000000000000 ) ); #1509 = CARTESIAN_POINT( '', ( 0.00609500000000000, 0.000700000000000000, 0.00340000000000000 ) ); #1510 = CARTESIAN_POINT( '', ( 0.00609500000001000, 0.000700000000010000, 0.00000000000000 ) ); #1511 = VECTOR( '', #2318, 1.00000000000000 ); #1512 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1513 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #1514 = CARTESIAN_POINT( '', ( -0.00343500000002800, -0.000249146917588000, 0.00840000000000000 ) ); #1515 = CARTESIAN_POINT( '', ( -0.00308500000002800, -0.000249146917588000, 0.00840000000000000 ) ); #1516 = CARTESIAN_POINT( '', ( -0.00338500000003800, -0.000249146917598000, 0.00840000000001000 ) ); #1517 = VECTOR( '', #2319, 1.00000000000000 ); #1518 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1519 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #1520 = CARTESIAN_POINT( '', ( -0.00343500000003800, -0.000249146917598000, 0.00340000000001000 ) ); #1521 = VECTOR( '', #2320, 1.00000000000000 ); #1522 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1523 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #1524 = CARTESIAN_POINT( '', ( 0.00609500000000000, 0.00117580210603200, 0.00340000000000000 ) ); #1525 = CARTESIAN_POINT( '', ( 0.00319477704313500, 0.00117580210604200, 0.00340000000001000 ) ); #1526 = VECTOR( '', #2321, 1.00000000000000 ); #1527 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1528 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #1529 = CARTESIAN_POINT( '', ( -0.00609500000001000, 0.000700000000010000, 0.00000000000000 ) ); #1530 = VECTOR( '', #2322, 1.00000000000000 ); #1531 = SURFACE_SIDE_STYLE( '', ( #2323 ) ); #1532 = EDGE_LOOP( '', ( #2324, #2325, #2326, #2327, #2328, #2329, #2330, #2331, #2332, #2333, #2334, #2335 ) ); #1533 = AXIS2_PLACEMENT_3D( '', #2336, #2337, #2338 ); #1534 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1535 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #1536 = AXIS2_PLACEMENT_3D( '', #2339, #2340, #2341 ); #1537 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1538 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #1539 = CARTESIAN_POINT( '', ( -0.00243500000000000, 0.000700000000000000, 0.00340000000000000 ) ); #1540 = CARTESIAN_POINT( '', ( -0.00243500000000000, -0.000429424481365000, 0.00340000000000000 ) ); #1541 = CARTESIAN_POINT( '', ( -0.00243500000001000, 0.000700000000010000, 0.00340000000001000 ) ); #1542 = VECTOR( '', #2342, 1.00000000000000 ); #1543 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1544 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #1545 = CARTESIAN_POINT( '', ( 0.00574500000000000, 0.000700000000000000, 0.00340000000000000 ) ); #1546 = CARTESIAN_POINT( '', ( 0.00519977704313500, 0.000700000000010000, 0.00340000000001000 ) ); #1547 = VECTOR( '', #2343, 1.00000000000000 ); #1548 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1549 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #1550 = CARTESIAN_POINT( '', ( -0.00203500000000000, -0.000249146917588000, 0.00840000000000000 ) ); #1551 = CARTESIAN_POINT( '', ( -0.00203500000000000, 0.00117580210603200, 0.00840000000000000 ) ); #1552 = CARTESIAN_POINT( '', ( -0.00203500000001000, 0.000229945838234000, 0.00840000000001000 ) ); #1553 = VECTOR( '', #2344, 1.00000000000000 ); #1554 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1555 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #1556 = CARTESIAN_POINT( '', ( -0.00203500000000000, -0.000700000000000000, 0.00340000000000000 ) ); #1557 = CARTESIAN_POINT( '', ( -0.00203500000001000, -0.000700000000010000, 0.00000000000000 ) ); #1558 = VECTOR( '', #2345, 1.00000000000000 ); #1559 = SURFACE_SIDE_STYLE( '', ( #2346 ) ); #1560 = EDGE_LOOP( '', ( #2347, #2348, #2349, #2350, #2351 ) ); #1561 = AXIS2_PLACEMENT_3D( '', #2352, #2353, #2354 ); #1562 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1563 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #1564 = CARTESIAN_POINT( '', ( -0.00574500000000000, 0.000825802106005000, 0.00340000000000000 ) ); #1565 = CARTESIAN_POINT( '', ( -0.00574500000000000, 0.000825802106005000, 0.00840000000000000 ) ); #1566 = CARTESIAN_POINT( '', ( -0.00574500000001000, 0.000825802106015000, 0.00340000000001000 ) ); #1567 = VECTOR( '', #2355, 1.00000000000000 ); #1568 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1569 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #1570 = CARTESIAN_POINT( '', ( -0.00238500000003400, 0.000825802106005000, 0.00340000000000000 ) ); #1571 = CARTESIAN_POINT( '', ( -0.00238500000004400, 0.000825802106015000, 0.00340000000001000 ) ); #1572 = VECTOR( '', #2356, 1.00000000000000 ); #1573 = SURFACE_SIDE_STYLE( '', ( #2357 ) ); #1574 = EDGE_LOOP( '', ( #2358, #2359, #2360, #2361, #2362 ) ); #1575 = AXIS2_PLACEMENT_3D( '', #2363, #2364, #2365 ); #1576 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1577 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #1578 = CARTESIAN_POINT( '', ( 0.00609500000000000, -0.000700000000000000, 0.00340000000000000 ) ); #1579 = CARTESIAN_POINT( '', ( 0.00593047315346700, -0.000700000000000000, 0.00340000000000000 ) ); #1580 = CARTESIAN_POINT( '', ( 0.00609500000001000, -0.000700000000010000, 0.00340000000001000 ) ); #1581 = VECTOR( '', #2366, 1.00000000000000 ); #1582 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1583 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #1584 = CARTESIAN_POINT( '', ( 0.00504499999997200, -0.000249146917588000, 0.00340000000000000 ) ); #1585 = CARTESIAN_POINT( '', ( 0.00569500000000000, -0.000429424481365000, 0.00340000000000000 ) ); #1586 = AXIS2_PLACEMENT_3D( '', #2367, #2368, #2369 ); #1587 = SURFACE_SIDE_STYLE( '', ( #2370 ) ); #1588 = EDGE_LOOP( '', ( #2371, #2372, #2373, #2374, #2375, #2376, #2377, #2378 ) ); #1589 = AXIS2_PLACEMENT_3D( '', #2379, #2380, #2381 ); #1590 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1591 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #1592 = CARTESIAN_POINT( '', ( 0.00343500000002800, -0.000249146917588000, 0.00840000000000000 ) ); #1593 = CARTESIAN_POINT( '', ( 0.00338500000003800, -0.000249146917598000, 0.00840000000001000 ) ); #1594 = VECTOR( '', #2382, 1.00000000000000 ); #1595 = SURFACE_SIDE_STYLE( '', ( #2383 ) ); #1596 = EDGE_LOOP( '', ( #2384, #2385, #2386, #2387, #2388 ) ); #1597 = AXIS2_PLACEMENT_3D( '', #2389, #2390, #2391 ); #1598 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1599 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #1600 = CARTESIAN_POINT( '', ( 0.00609500000000000, -0.000249146917588000, 0.00340000000000000 ) ); #1601 = CARTESIAN_POINT( '', ( 0.00609500000001000, 0.000700000000010000, 0.00340000000001000 ) ); #1602 = VECTOR( '', #2392, 1.00000000000000 ); #1603 = SURFACE_SIDE_STYLE( '', ( #2393 ) ); #1604 = EDGE_LOOP( '', ( #2394, #2395, #2396, #2397 ) ); #1605 = AXIS2_PLACEMENT_3D( '', #2398, #2399, #2400 ); #1606 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1607 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #1608 = CARTESIAN_POINT( '', ( 0.00243500000000000, -0.000700000000000000, -0.00230000000000000 ) ); #1609 = CARTESIAN_POINT( '', ( 0.00243500000000000, -0.000700000000000000, 0.00340000000000000 ) ); #1610 = CARTESIAN_POINT( '', ( 0.00243500000001000, -0.000700000000010000, 0.00000000000000 ) ); #1611 = VECTOR( '', #2401, 1.00000000000000 ); #1612 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1613 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #1614 = CARTESIAN_POINT( '', ( 0.00203500000000000, -0.000700000000000000, -0.00230000000000000 ) ); #1615 = CARTESIAN_POINT( '', ( 0.00203500000001000, -0.000700000000010000, -0.00230000000001000 ) ); #1616 = VECTOR( '', #2402, 1.00000000000000 ); #1617 = SURFACE_SIDE_STYLE( '', ( #2403 ) ); #1618 = EDGE_LOOP( '', ( #2404, #2405, #2406, #2407 ) ); #1619 = AXIS2_PLACEMENT_3D( '', #2408, #2409, #2410 ); #1620 = SURFACE_SIDE_STYLE( '', ( #2411 ) ); #1621 = EDGE_LOOP( '', ( #2412, #2413, #2414, #2415 ) ); #1622 = AXIS2_PLACEMENT_3D( '', #2416, #2417, #2418 ); #1623 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1624 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #1625 = CARTESIAN_POINT( '', ( 0.00609500000000000, -0.000700000000000000, -0.00230000000000000 ) ); #1626 = CARTESIAN_POINT( '', ( 0.00609500000001000, -0.000700000000010000, -0.00230000000001000 ) ); #1627 = VECTOR( '', #2419, 1.00000000000000 ); #1628 = SURFACE_SIDE_STYLE( '', ( #2420 ) ); #1629 = EDGE_LOOP( '', ( #2421, #2422, #2423, #2424, #2425 ) ); #1630 = AXIS2_PLACEMENT_3D( '', #2426, #2427, #2428 ); #1631 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1632 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #1633 = CARTESIAN_POINT( '', ( 0.00219952684653300, -0.000700000000000000, 0.00340000000000000 ) ); #1634 = CARTESIAN_POINT( '', ( 0.00203500000000000, -0.000700000000000000, 0.00340000000000000 ) ); #1635 = CARTESIAN_POINT( '', ( 0.00243500000001000, -0.000700000000010000, 0.00340000000001000 ) ); #1636 = VECTOR( '', #2429, 1.00000000000000 ); #1637 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1638 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #1639 = CARTESIAN_POINT( '', ( -0.00574500000000000, -0.000249146917588000, 0.00340000000000000 ) ); #1640 = CARTESIAN_POINT( '', ( -0.00574500000001000, -0.000124573458804000, 0.00340000000001000 ) ); #1641 = VECTOR( '', #2430, 1.00000000000000 ); #1642 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1643 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #1644 = CARTESIAN_POINT( '', ( 0.00504499999997200, -0.000249146917588000, 0.00840000000000000 ) ); #1645 = AXIS2_PLACEMENT_3D( '', #2431, #2432, #2433 ); #1646 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1647 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #1648 = CARTESIAN_POINT( '', ( 0.00609500000000000, -0.000249146917588000, 0.00840000000000000 ) ); #1649 = CARTESIAN_POINT( '', ( 0.00609500000000000, 0.00117580210603200, 0.00840000000000000 ) ); #1650 = CARTESIAN_POINT( '', ( 0.00609500000001000, 0.000820571966701000, 0.00840000000001000 ) ); #1651 = VECTOR( '', #2434, 1.00000000000000 ); #1652 = SURFACE_SIDE_STYLE( '', ( #2435 ) ); #1653 = EDGE_LOOP( '', ( #2436, #2437, #2438, #2439, #2440, #2441, #2442, #2443 ) ); #1654 = AXIS2_PLACEMENT_3D( '', #2444, #2445, #2446 ); #1655 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1656 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #1657 = CARTESIAN_POINT( '', ( -0.00243500000000000, 0.000700000000000000, -0.00230000000000000 ) ); #1658 = CARTESIAN_POINT( '', ( -0.00243500000001000, 0.000700000000010000, -0.00230000000001000 ) ); #1659 = VECTOR( '', #2447, 1.00000000000000 ); #1660 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1661 = COLOUR_RGB( '', 0.227450981700000, 0.227450981700000, 0.227450981700000 ); #1662 = CARTESIAN_POINT( '', ( -0.00735000000001000, 0.00237500000001000, 0.00320000000001000 ) ); #1663 = VECTOR( '', #2448, 1.00000000000000 ); #1664 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1665 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #1666 = CARTESIAN_POINT( '', ( -0.00474499999998200, -0.000249146917598000, 0.00840000000001000 ) ); #1667 = VECTOR( '', #2449, 1.00000000000000 ); #1668 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1669 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #1670 = CARTESIAN_POINT( '', ( -0.00569500000000000, -0.000700000000000000, -0.00230000000000000 ) ); #1671 = CARTESIAN_POINT( '', ( -0.00569500000000000, -0.000700000000000000, 0.00340000000000000 ) ); #1672 = CARTESIAN_POINT( '', ( -0.00569500000001000, -0.000700000000010000, 0.00000000000000 ) ); #1673 = VECTOR( '', #2450, 1.00000000000000 ); #1674 = SURFACE_SIDE_STYLE( '', ( #2451 ) ); #1675 = EDGE_LOOP( '', ( #2452, #2453, #2454, #2455 ) ); #1676 = AXIS2_PLACEMENT_3D( '', #2456, #2457, #2458 ); #1677 = SURFACE_SIDE_STYLE( '', ( #2459 ) ); #1678 = EDGE_LOOP( '', ( #2460, #2461, #2462, #2463, #2464 ) ); #1679 = AXIS2_PLACEMENT_3D( '', #2465, #2466, #2467 ); #1680 = SURFACE_SIDE_STYLE( '', ( #2468 ) ); #1681 = EDGE_LOOP( '', ( #2469, #2470, #2471, #2472 ) ); #1682 = AXIS2_PLACEMENT_3D( '', #2473, #2474, #2475 ); #1683 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1684 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #1685 = CARTESIAN_POINT( '', ( 0.00203500000000000, -0.000249146917588000, 0.00340000000000000 ) ); #1686 = CARTESIAN_POINT( '', ( 0.00203500000000000, -0.000249146917588000, 0.00840000000000000 ) ); #1687 = CARTESIAN_POINT( '', ( 0.00203500000001000, -0.000249146917598000, 0.00340000000001000 ) ); #1688 = VECTOR( '', #2476, 1.00000000000000 ); #1689 = SURFACE_SIDE_STYLE( '', ( #2477 ) ); #1690 = EDGE_LOOP( '', ( #2478, #2479, #2480, #2481 ) ); #1691 = AXIS2_PLACEMENT_3D( '', #2482, #2483, #2484 ); #1692 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1693 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #1694 = CARTESIAN_POINT( '', ( 0.00336977704313500, 0.000700000000010000, 0.00340000000001000 ) ); #1695 = VECTOR( '', #2485, 1.00000000000000 ); #1696 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1697 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #1698 = CARTESIAN_POINT( '', ( -0.00203500000001000, 0.000700000000010000, 0.00340000000001000 ) ); #1699 = VECTOR( '', #2486, 1.00000000000000 ); #1700 = SURFACE_SIDE_STYLE( '', ( #2487 ) ); #1701 = EDGE_LOOP( '', ( #2488, #2489, #2490 ) ); #1702 = AXIS2_PLACEMENT_3D( '', #2491, #2492, #2493 ); #1703 = SURFACE_SIDE_STYLE( '', ( #2494 ) ); #1704 = EDGE_LOOP( '', ( #2495, #2496, #2497, #2498, #2499, #2500, #2501, #2502 ) ); #1705 = AXIS2_PLACEMENT_3D( '', #2503, #2504, #2505 ); #1706 = SURFACE_SIDE_STYLE( '', ( #2506 ) ); #1707 = EDGE_LOOP( '', ( #2507, #2508, #2509, #2510 ) ); #1708 = AXIS2_PLACEMENT_3D( '', #2511, #2512, #2513 ); #1709 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1710 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #1711 = CARTESIAN_POINT( '', ( 0.00609500000001000, 0.000700000000010000, -0.00230000000001000 ) ); #1712 = VECTOR( '', #2514, 1.00000000000000 ); #1713 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1714 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #1715 = CARTESIAN_POINT( '', ( -0.00504499999997200, -0.000249146917588000, 0.00340000000000000 ) ); #1716 = CARTESIAN_POINT( '', ( -0.00474499999998200, -0.000249146917598000, 0.00340000000001000 ) ); #1717 = VECTOR( '', #2515, 1.00000000000000 ); #1718 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1719 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #1720 = CARTESIAN_POINT( '', ( -0.00574500000001000, 0.000825802106015000, 0.00840000000001000 ) ); #1721 = VECTOR( '', #2516, 1.00000000000000 ); #1722 = SURFACE_SIDE_STYLE( '', ( #2517 ) ); #1723 = EDGE_LOOP( '', ( #2518, #2519, #2520, #2521, #2522, #2523, #2524, #2525, #2526, #2527, #2528, #2529 ) ); #1724 = AXIS2_PLACEMENT_3D( '', #2530, #2531, #2532 ); #1725 = SURFACE_SIDE_STYLE( '', ( #2533 ) ); #1726 = EDGE_LOOP( '', ( #2534, #2535, #2536, #2537, #2538, #2539, #2540, #2541 ) ); #1727 = AXIS2_PLACEMENT_3D( '', #2542, #2543, #2544 ); #1728 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1729 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #1730 = CARTESIAN_POINT( '', ( -0.00504499999998200, -0.000249146917598000, 0.00340000000001000 ) ); #1731 = VECTOR( '', #2545, 1.00000000000000 ); #1732 = SURFACE_SIDE_STYLE( '', ( #2546 ) ); #1733 = EDGE_LOOP( '', ( #2547, #2548, #2549 ) ); #1734 = AXIS2_PLACEMENT_3D( '', #2550, #2551, #2552 ); #1735 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1736 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #1737 = CARTESIAN_POINT( '', ( -0.00238500000001000, -0.000124573458804000, 0.00340000000001000 ) ); #1738 = VECTOR( '', #2553, 1.00000000000000 ); #1739 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1740 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #1741 = CARTESIAN_POINT( '', ( 0.00238500000001000, -0.000249146917598000, 0.00340000000001000 ) ); #1742 = VECTOR( '', #2554, 1.00000000000000 ); #1743 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1744 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #1745 = CARTESIAN_POINT( '', ( 0.00574500000001000, -0.000249146917598000, 0.00340000000001000 ) ); #1746 = VECTOR( '', #2555, 1.00000000000000 ); #1747 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1748 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #1749 = CARTESIAN_POINT( '', ( 0.00203500000001000, -0.000700000000010000, 0.00340000000001000 ) ); #1750 = VECTOR( '', #2556, 1.00000000000000 ); #1751 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1752 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #1753 = AXIS2_PLACEMENT_3D( '', #2557, #2558, #2559 ); #1754 = SURFACE_SIDE_STYLE( '', ( #2560 ) ); #1755 = EDGE_LOOP( '', ( #2561, #2562, #2563 ) ); #1756 = AXIS2_PLACEMENT_3D( '', #2564, #2565, #2566 ); #1757 = SURFACE_SIDE_STYLE( '', ( #2567 ) ); #1758 = EDGE_LOOP( '', ( #2568, #2569, #2570, #2571 ) ); #1759 = AXIS2_PLACEMENT_3D( '', #2572, #2573, #2574 ); #1760 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1761 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #1762 = CARTESIAN_POINT( '', ( 0.00609500000001000, 0.000820571966701000, 0.00340000000001000 ) ); #1763 = VECTOR( '', #2575, 1.00000000000000 ); #1764 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1765 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #1766 = CARTESIAN_POINT( '', ( 0.00343500000002800, -0.000249146917588000, 0.00340000000000000 ) ); #1767 = CARTESIAN_POINT( '', ( 0.00343500000003800, -0.000249146917598000, 0.00340000000001000 ) ); #1768 = VECTOR( '', #2576, 1.00000000000000 ); #1769 = SURFACE_SIDE_STYLE( '', ( #2577 ) ); #1770 = EDGE_LOOP( '', ( #2578, #2579, #2580, #2581, #2582 ) ); #1771 = AXIS2_PLACEMENT_3D( '', #2583, #2584, #2585 ); #1772 = SURFACE_SIDE_STYLE( '', ( #2586 ) ); #1773 = EDGE_LOOP( '', ( #2587, #2588, #2589, #2590, #2591 ) ); #1774 = AXIS2_PLACEMENT_3D( '', #2592, #2593, #2594 ); #1775 = SURFACE_SIDE_STYLE( '', ( #2595 ) ); #1776 = EDGE_LOOP( '', ( #2596, #2597, #2598, #2599, #2600, #2601, #2602, #2603 ) ); #1777 = AXIS2_PLACEMENT_3D( '', #2604, #2605, #2606 ); #1778 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1779 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #1780 = AXIS2_PLACEMENT_3D( '', #2607, #2608, #2609 ); #1781 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1782 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #1783 = CARTESIAN_POINT( '', ( 0.00569500000000000, 0.000700000000000000, -0.00230000000000000 ) ); #1784 = CARTESIAN_POINT( '', ( 0.00569500000001000, -0.000700000000010000, -0.00230000000001000 ) ); #1785 = VECTOR( '', #2610, 1.00000000000000 ); #1786 = SURFACE_SIDE_STYLE( '', ( #2611 ) ); #1787 = EDGE_LOOP( '', ( #2612, #2613, #2614, #2615 ) ); #1788 = AXIS2_PLACEMENT_3D( '', #2616, #2617, #2618 ); #1789 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1790 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #1791 = CARTESIAN_POINT( '', ( -0.00569500000000000, -0.000429424481365000, 0.00340000000000000 ) ); #1792 = CARTESIAN_POINT( '', ( -0.00569500000001000, -0.000700000000010000, 0.00340000000001000 ) ); #1793 = VECTOR( '', #2619, 1.00000000000000 ); #1794 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1795 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #1796 = CARTESIAN_POINT( '', ( 0.00238500000003400, 0.000825802106005000, 0.00340000000000000 ) ); #1797 = CARTESIAN_POINT( '', ( 0.00238500000004400, 0.000825802106015000, 0.00340000000001000 ) ); #1798 = VECTOR( '', #2620, 1.00000000000000 ); #1799 = SURFACE_SIDE_STYLE( '', ( #2621 ) ); #1800 = EDGE_LOOP( '', ( #2622, #2623, #2624, #2625 ) ); #1801 = AXIS2_PLACEMENT_3D( '', #2626, #2627, #2628 ); #1802 = SURFACE_SIDE_STYLE( '', ( #2629 ) ); #1803 = EDGE_LOOP( '', ( #2630, #2631, #2632, #2633, #2634 ) ); #1804 = AXIS2_PLACEMENT_3D( '', #2635, #2636, #2637 ); #1805 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1806 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #1807 = CARTESIAN_POINT( '', ( -0.00308500000002800, -0.000249146917588000, 0.00340000000000000 ) ); #1808 = CARTESIAN_POINT( '', ( -0.00338500000003800, -0.000249146917598000, 0.00340000000001000 ) ); #1809 = VECTOR( '', #2638, 1.00000000000000 ); #1810 = SURFACE_SIDE_STYLE( '', ( #2639 ) ); #1811 = EDGE_LOOP( '', ( #2640, #2641, #2642, #2643 ) ); #1812 = AXIS2_PLACEMENT_3D( '', #2644, #2645, #2646 ); #1813 = SURFACE_SIDE_STYLE( '', ( #2647 ) ); #1814 = EDGE_LOOP( '', ( #2648, #2649, #2650, #2651, #2652 ) ); #1815 = AXIS2_PLACEMENT_3D( '', #2653, #2654, #2655 ); #1816 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1817 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #1818 = CARTESIAN_POINT( '', ( 0.00569500000000000, 0.000700000000000000, 0.00340000000000000 ) ); #1819 = CARTESIAN_POINT( '', ( 0.00569500000001000, 0.000700000000010000, 0.00340000000001000 ) ); #1820 = VECTOR( '', #2656, 1.00000000000000 ); #1821 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1822 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #1823 = CARTESIAN_POINT( '', ( -0.00609500000000000, -0.000700000000000000, -0.00230000000000000 ) ); #1824 = CARTESIAN_POINT( '', ( -0.00609500000001000, -0.000700000000010000, 0.00000000000000 ) ); #1825 = VECTOR( '', #2657, 1.00000000000000 ); #1826 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1827 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #1828 = CARTESIAN_POINT( '', ( 0.00574500000001000, 0.000825802106015000, 0.00840000000001000 ) ); #1829 = VECTOR( '', #2658, 1.00000000000000 ); #1830 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1831 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #1832 = CARTESIAN_POINT( '', ( -0.00574500000001000, -0.000249146917598000, 0.00340000000001000 ) ); #1833 = VECTOR( '', #2659, 1.00000000000000 ); #1834 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1835 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #1836 = CARTESIAN_POINT( '', ( 0.00243500000000000, -0.000429424481365000, 0.00340000000000000 ) ); #1837 = AXIS2_PLACEMENT_3D( '', #2660, #2661, #2662 ); #1838 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1839 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #1840 = CARTESIAN_POINT( '', ( -0.00203500000001000, 0.000700000000010000, 0.00000000000000 ) ); #1841 = VECTOR( '', #2663, 1.00000000000000 ); #1842 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1843 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #1844 = CARTESIAN_POINT( '', ( -0.00243500000000000, -0.000700000000000000, 0.00340000000000000 ) ); #1845 = CARTESIAN_POINT( '', ( -0.00243500000001000, 0.000700000000010000, 0.00340000000001000 ) ); #1846 = VECTOR( '', #2664, 1.00000000000000 ); #1847 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1848 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #1849 = CARTESIAN_POINT( '', ( -0.00609500000001000, 0.000700000000010000, -0.00230000000001000 ) ); #1850 = VECTOR( '', #2665, 1.00000000000000 ); #1851 = SURFACE_SIDE_STYLE( '', ( #2666 ) ); #1852 = EDGE_LOOP( '', ( #2667, #2668, #2669, #2670, #2671 ) ); #1853 = AXIS2_PLACEMENT_3D( '', #2672, #2673, #2674 ); #1854 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1855 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #1856 = CARTESIAN_POINT( '', ( -0.00593047315346700, -0.000700000000000000, 0.00340000000000000 ) ); #1857 = AXIS2_PLACEMENT_3D( '', #2675, #2676, #2677 ); #1858 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1859 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #1860 = CARTESIAN_POINT( '', ( 0.00203500000001000, -0.000700000000010000, 0.00000000000000 ) ); #1861 = VECTOR( '', #2678, 1.00000000000000 ); #1862 = SURFACE_SIDE_STYLE( '', ( #2679 ) ); #1863 = EDGE_LOOP( '', ( #2680, #2681, #2682, #2683, #2684 ) ); #1864 = AXIS2_PLACEMENT_3D( '', #2685, #2686, #2687 ); #1865 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1866 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #1867 = CARTESIAN_POINT( '', ( 0.00609500000001000, -0.000249146917598000, 0.00340000000001000 ) ); #1868 = VECTOR( '', #2688, 1.00000000000000 ); #1869 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1870 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #1871 = AXIS2_PLACEMENT_3D( '', #2689, #2690, #2691 ); #1872 = SURFACE_SIDE_STYLE( '', ( #2692 ) ); #1873 = EDGE_LOOP( '', ( #2693, #2694, #2695, #2696 ) ); #1874 = AXIS2_PLACEMENT_3D( '', #2697, #2698, #2699 ); #1875 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1876 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #1877 = CARTESIAN_POINT( '', ( -0.00574500000001000, 0.000825802106015000, 0.00340000000001000 ) ); #1878 = VECTOR( '', #2700, 1.00000000000000 ); #1879 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1880 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #1881 = CARTESIAN_POINT( '', ( 0.00316977704313500, -0.000700000000010000, 0.00340000000001000 ) ); #1882 = VECTOR( '', #2701, 1.00000000000000 ); #1883 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1884 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #1885 = CARTESIAN_POINT( '', ( -0.00203500000000000, -0.000249146917588000, 0.00340000000000000 ) ); #1886 = CARTESIAN_POINT( '', ( -0.00203500000001000, -0.000249146917598000, 0.00340000000001000 ) ); #1887 = VECTOR( '', #2702, 1.00000000000000 ); #1888 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1889 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #1890 = CARTESIAN_POINT( '', ( 0.00574500000000000, -0.000249146917588000, 0.00340000000000000 ) ); #1891 = AXIS2_PLACEMENT_3D( '', #2703, #2704, #2705 ); #1892 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1893 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #1894 = CARTESIAN_POINT( '', ( -0.00609500000001000, -0.000700000000010000, -0.00230000000001000 ) ); #1895 = VECTOR( '', #2706, 1.00000000000000 ); #1896 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1897 = COLOUR_RGB( '', 0.227450981700000, 0.227450981700000, 0.227450981700000 ); #1898 = CARTESIAN_POINT( '', ( 0.00735000000000000, 0.00237500000000000, 0.00320000000000000 ) ); #1899 = CARTESIAN_POINT( '', ( 0.00735000000001000, 0.00237500000001000, 0.00000000000000 ) ); #1900 = VECTOR( '', #2707, 1.00000000000000 ); #1901 = SURFACE_SIDE_STYLE( '', ( #2708 ) ); #1902 = EDGE_LOOP( '', ( #2709, #2710, #2711, #2712 ) ); #1903 = AXIS2_PLACEMENT_3D( '', #2713, #2714, #2715 ); #1904 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1905 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #1906 = CARTESIAN_POINT( '', ( 0.00243500000001000, 0.000700000000010000, 0.00000000000000 ) ); #1907 = VECTOR( '', #2716, 1.00000000000000 ); #1908 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1909 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #1910 = CARTESIAN_POINT( '', ( 0.00569500000001000, 0.000607670913684000, 0.00340000000001000 ) ); #1911 = VECTOR( '', #2717, 1.00000000000000 ); #1912 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1913 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #1914 = CARTESIAN_POINT( '', ( 0.00574500000001000, 0.000825802106015000, 0.00340000000001000 ) ); #1915 = VECTOR( '', #2718, 1.00000000000000 ); #1916 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1917 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #1918 = CARTESIAN_POINT( '', ( 0.00203500000000000, 0.00117580210603200, 0.00840000000000000 ) ); #1919 = CARTESIAN_POINT( '', ( 0.00319477704313500, 0.00117580210604200, 0.00840000000001000 ) ); #1920 = VECTOR( '', #2719, 1.00000000000000 ); #1921 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1922 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #1923 = AXIS2_PLACEMENT_3D( '', #2720, #2721, #2722 ); #1924 = SURFACE_SIDE_STYLE( '', ( #2723 ) ); #1925 = EDGE_LOOP( '', ( #2724, #2725, #2726, #2727 ) ); #1926 = AXIS2_PLACEMENT_3D( '', #2728, #2729, #2730 ); #1927 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1928 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #1929 = CARTESIAN_POINT( '', ( 0.00609500000001000, -0.000700000000010000, 0.00000000000000 ) ); #1930 = VECTOR( '', #2731, 1.00000000000000 ); #1931 = SURFACE_SIDE_STYLE( '', ( #2732 ) ); #1932 = EDGE_LOOP( '', ( #2733, #2734, #2735, #2736 ) ); #1933 = AXIS2_PLACEMENT_3D( '', #2737, #2738, #2739 ); #1934 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1935 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #1936 = CARTESIAN_POINT( '', ( -0.00569500000001000, 0.000700000000010000, 0.00000000000000 ) ); #1937 = VECTOR( '', #2740, 1.00000000000000 ); #1938 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1939 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #1940 = AXIS2_PLACEMENT_3D( '', #2741, #2742, #2743 ); #1941 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1942 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #1943 = CARTESIAN_POINT( '', ( 0.00469499999997200, -0.000249146917588000, 0.00840000000000000 ) ); #1944 = CARTESIAN_POINT( '', ( 0.00469499999997200, -0.000249146917588000, 0.00340000000000000 ) ); #1945 = CARTESIAN_POINT( '', ( 0.00469499999998200, -0.000249146917598000, 0.00340000000001000 ) ); #1946 = VECTOR( '', #2744, 1.00000000000000 ); #1947 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1948 = COLOUR_RGB( '', 0.227450981700000, 0.227450981700000, 0.227450981700000 ); #1949 = CARTESIAN_POINT( '', ( 0.00735000000001000, 0.00237500000001000, 0.00000000000000 ) ); #1950 = VECTOR( '', #2745, 1.00000000000000 ); #1951 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1952 = COLOUR_RGB( '', 0.227450981700000, 0.227450981700000, 0.227450981700000 ); #1953 = CARTESIAN_POINT( '', ( 0.00735000000000000, -0.00237500000000000, 0.00320000000000000 ) ); #1954 = CARTESIAN_POINT( '', ( 0.00735000000001000, -0.00237500000001000, 0.00000000000000 ) ); #1955 = VECTOR( '', #2746, 1.00000000000000 ); #1956 = SURFACE_SIDE_STYLE( '', ( #2747 ) ); #1957 = EDGE_LOOP( '', ( #2748, #2749, #2750, #2751, #2752 ) ); #1958 = AXIS2_PLACEMENT_3D( '', #2753, #2754, #2755 ); #1959 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1960 = COLOUR_RGB( '', 0.227450981700000, 0.227450981700000, 0.227450981700000 ); #1961 = CARTESIAN_POINT( '', ( -0.00735000000001000, -0.00237500000001000, 0.00320000000001000 ) ); #1962 = VECTOR( '', #2756, 1.00000000000000 ); #1963 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1964 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #1965 = CARTESIAN_POINT( '', ( -0.00203500000000000, 0.00117580210603200, 0.00340000000000000 ) ); #1966 = CARTESIAN_POINT( '', ( -0.00319477704313500, 0.00117580210604200, 0.00340000000001000 ) ); #1967 = VECTOR( '', #2757, 1.00000000000000 ); #1968 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1969 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #1970 = CARTESIAN_POINT( '', ( -0.00243500000001000, -0.000700000000010000, 0.00340000000001000 ) ); #1971 = VECTOR( '', #2758, 1.00000000000000 ); #1972 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1973 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #1974 = AXIS2_PLACEMENT_3D( '', #2759, #2760, #2761 ); #1975 = SURFACE_SIDE_STYLE( '', ( #2762 ) ); #1976 = EDGE_LOOP( '', ( #2763, #2764, #2765, #2766, #2767 ) ); #1977 = AXIS2_PLACEMENT_3D( '', #2768, #2769, #2770 ); #1978 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1979 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #1980 = CARTESIAN_POINT( '', ( 0.00243500000001000, -9.23290863355600E-05, 0.00340000000001000 ) ); #1981 = VECTOR( '', #2771, 1.00000000000000 ); #1982 = SURFACE_SIDE_STYLE( '', ( #2772 ) ); #1983 = EDGE_LOOP( '', ( #2773, #2774, #2775, #2776, #2777 ) ); #1984 = AXIS2_PLACEMENT_3D( '', #2778, #2779, #2780 ); #1985 = SURFACE_SIDE_STYLE( '', ( #2781 ) ); #1986 = EDGE_LOOP( '', ( #2782, #2783, #2784, #2785 ) ); #1987 = AXIS2_PLACEMENT_3D( '', #2786, #2787, #2788 ); #1988 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1989 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #1990 = CARTESIAN_POINT( '', ( -0.00203500000001000, 0.000700000000010000, -0.00230000000001000 ) ); #1991 = VECTOR( '', #2789, 1.00000000000000 ); #1992 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1993 = COLOUR_RGB( '', 0.227450981700000, 0.227450981700000, 0.227450981700000 ); #1994 = CARTESIAN_POINT( '', ( 0.00735000000001000, -0.00237500000001000, 0.00320000000001000 ) ); #1995 = VECTOR( '', #2790, 1.00000000000000 ); #1996 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #1997 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #1998 = CARTESIAN_POINT( '', ( -0.00574500000001000, -0.000249146917598000, 0.00340000000001000 ) ); #1999 = VECTOR( '', #2791, 1.00000000000000 ); #2000 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #2001 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #2002 = CARTESIAN_POINT( '', ( -0.00569500000001000, -0.000700000000010000, -0.00230000000001000 ) ); #2003 = VECTOR( '', #2792, 1.00000000000000 ); #2004 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #2005 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #2006 = CARTESIAN_POINT( '', ( 0.00574500000001000, -0.000249146917598000, 0.00340000000001000 ) ); #2007 = VECTOR( '', #2793, 1.00000000000000 ); #2008 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #2009 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #2010 = CARTESIAN_POINT( '', ( 0.00474499999998200, -0.000249146917598000, 0.00840000000001000 ) ); #2011 = VECTOR( '', #2794, 1.00000000000000 ); #2012 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #2013 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #2014 = AXIS2_PLACEMENT_3D( '', #2795, #2796, #2797 ); #2015 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #2016 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #2017 = CARTESIAN_POINT( '', ( 0.00203500000001000, 0.00117580210604200, 0.00340000000001000 ) ); #2018 = VECTOR( '', #2798, 1.00000000000000 ); #2019 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #2020 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #2021 = CARTESIAN_POINT( '', ( -0.00569500000001000, -0.000700000000010000, 0.00340000000001000 ) ); #2022 = VECTOR( '', #2799, 1.00000000000000 ); #2023 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #2024 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #2025 = CARTESIAN_POINT( '', ( -0.00243500000001000, 0.000700000000010000, 0.00000000000000 ) ); #2026 = VECTOR( '', #2800, 1.00000000000000 ); #2027 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #2028 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #2029 = CARTESIAN_POINT( '', ( -0.00243500000001000, -0.000700000000010000, 0.00340000000001000 ) ); #2030 = VECTOR( '', #2801, 1.00000000000000 ); #2031 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #2032 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #2033 = CARTESIAN_POINT( '', ( -0.00203500000001000, 0.000229945838234000, 0.00340000000001000 ) ); #2034 = VECTOR( '', #2802, 1.00000000000000 ); #2035 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #2036 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #2037 = CARTESIAN_POINT( '', ( 0.00238500000004400, 0.000825802106015000, 0.00340000000001000 ) ); #2038 = VECTOR( '', #2803, 1.00000000000000 ); #2039 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #2040 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #2041 = CARTESIAN_POINT( '', ( 0.00499977704313500, -0.000700000000010000, 0.00340000000001000 ) ); #2042 = VECTOR( '', #2804, 1.00000000000000 ); #2043 = SURFACE_SIDE_STYLE( '', ( #2805 ) ); #2044 = EDGE_LOOP( '', ( #2806, #2807, #2808, #2809, #2810 ) ); #2045 = AXIS2_PLACEMENT_3D( '', #2811, #2812, #2813 ); #2046 = SURFACE_SIDE_STYLE( '', ( #2814 ) ); #2047 = EDGE_LOOP( '', ( #2815, #2816, #2817, #2818, #2819 ) ); #2048 = AXIS2_PLACEMENT_3D( '', #2820, #2821, #2822 ); #2049 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #2050 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #2051 = AXIS2_PLACEMENT_3D( '', #2823, #2824, #2825 ); #2052 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #2053 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #2054 = CARTESIAN_POINT( '', ( -0.00203500000001000, -0.000700000000010000, 0.00340000000001000 ) ); #2055 = VECTOR( '', #2826, 1.00000000000000 ); #2056 = SURFACE_SIDE_STYLE( '', ( #2827 ) ); #2057 = EDGE_LOOP( '', ( #2828, #2829, #2830, #2831, #2832 ) ); #2058 = AXIS2_PLACEMENT_3D( '', #2833, #2834, #2835 ); #2059 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #2060 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #2061 = AXIS2_PLACEMENT_3D( '', #2836, #2837, #2838 ); #2062 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #2063 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #2064 = CARTESIAN_POINT( '', ( -0.00238500000004400, 0.000825802106015000, 0.00340000000001000 ) ); #2065 = VECTOR( '', #2839, 1.00000000000000 ); #2066 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #2067 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #2068 = AXIS2_PLACEMENT_3D( '', #2840, #2841, #2842 ); #2069 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #2070 = COLOUR_RGB( '', 0.227450981700000, 0.227450981700000, 0.227450981700000 ); #2071 = CARTESIAN_POINT( '', ( -0.00735000000001000, -0.00237500000001000, 0.00000000000000 ) ); #2072 = VECTOR( '', #2843, 1.00000000000000 ); #2073 = SURFACE_SIDE_STYLE( '', ( #2844 ) ); #2074 = EDGE_LOOP( '', ( #2845, #2846, #2847, #2848 ) ); #2075 = AXIS2_PLACEMENT_3D( '', #2849, #2850, #2851 ); #2076 = SURFACE_SIDE_STYLE( '', ( #2852 ) ); #2077 = EDGE_LOOP( '', ( #2853, #2854, #2855, #2856, #2857 ) ); #2078 = AXIS2_PLACEMENT_3D( '', #2858, #2859, #2860 ); #2079 = SURFACE_SIDE_STYLE( '', ( #2861 ) ); #2080 = EDGE_LOOP( '', ( #2862, #2863, #2864, #2865 ) ); #2081 = AXIS2_PLACEMENT_3D( '', #2866, #2867, #2868 ); #2082 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #2083 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #2084 = CARTESIAN_POINT( '', ( 0.00203500000001000, 0.000229945838234000, 0.00840000000001000 ) ); #2085 = VECTOR( '', #2869, 1.00000000000000 ); #2086 = SURFACE_SIDE_STYLE( '', ( #2870 ) ); #2087 = EDGE_LOOP( '', ( #2871, #2872, #2873, #2874, #2875 ) ); #2088 = AXIS2_PLACEMENT_3D( '', #2876, #2877, #2878 ); #2089 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #2090 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #2091 = CARTESIAN_POINT( '', ( 0.00243500000001000, 0.000700000000010000, 0.00340000000001000 ) ); #2092 = VECTOR( '', #2879, 1.00000000000000 ); #2093 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #2094 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #2095 = AXIS2_PLACEMENT_3D( '', #2880, #2881, #2882 ); #2096 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #2097 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #2098 = CARTESIAN_POINT( '', ( 0.00243500000001000, 0.000700000000010000, -0.00230000000001000 ) ); #2099 = VECTOR( '', #2883, 1.00000000000000 ); #2100 = SURFACE_SIDE_STYLE( '', ( #2884 ) ); #2101 = EDGE_LOOP( '', ( #2885, #2886, #2887, #2888, #2889 ) ); #2102 = AXIS2_PLACEMENT_3D( '', #2890, #2891, #2892 ); #2103 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #2104 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #2105 = CARTESIAN_POINT( '', ( -0.00609500000001000, -0.000700000000010000, 0.00340000000001000 ) ); #2106 = VECTOR( '', #2893, 1.00000000000000 ); #2107 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #2108 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #2109 = CARTESIAN_POINT( '', ( 0.00569500000001000, 0.000700000000010000, 0.00000000000000 ) ); #2110 = VECTOR( '', #2894, 1.00000000000000 ); #2111 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #2112 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #2113 = CARTESIAN_POINT( '', ( -0.00308500000003800, -0.000249146917598000, 0.00340000000001000 ) ); #2114 = VECTOR( '', #2895, 1.00000000000000 ); #2115 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #2116 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #2117 = CARTESIAN_POINT( '', ( 0.00474499999998200, -0.000249146917598000, 0.00340000000001000 ) ); #2118 = VECTOR( '', #2896, 1.00000000000000 ); #2119 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #2120 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #2121 = AXIS2_PLACEMENT_3D( '', #2897, #2898, #2899 ); #2122 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #2123 = COLOUR_RGB( '', 0.227450981700000, 0.227450981700000, 0.227450981700000 ); #2124 = CARTESIAN_POINT( '', ( 0.00735000000001000, 0.00237500000001000, 0.00320000000001000 ) ); #2125 = VECTOR( '', #2900, 1.00000000000000 ); #2126 = SURFACE_SIDE_STYLE( '', ( #2901 ) ); #2127 = EDGE_LOOP( '', ( #2902, #2903, #2904, #2905 ) ); #2128 = AXIS2_PLACEMENT_3D( '', #2906, #2907, #2908 ); #2129 = SURFACE_SIDE_STYLE( '', ( #2909 ) ); #2130 = EDGE_LOOP( '', ( #2910, #2911, #2912, #2913, #2914 ) ); #2131 = AXIS2_PLACEMENT_3D( '', #2915, #2916, #2917 ); #2132 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #2133 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #2134 = CARTESIAN_POINT( '', ( -0.00243500000001000, -0.000700000000010000, 0.00000000000000 ) ); #2135 = VECTOR( '', #2918, 1.00000000000000 ); #2136 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #2137 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #2138 = CARTESIAN_POINT( '', ( 0.00609500000001000, 0.00117580210604200, 0.00340000000001000 ) ); #2139 = VECTOR( '', #2919, 1.00000000000000 ); #2140 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #2141 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #2142 = CARTESIAN_POINT( '', ( -0.00574500000001000, -0.000249146917598000, 0.00840000000001000 ) ); #2143 = VECTOR( '', #2920, 1.00000000000000 ); #2144 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #2145 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #2146 = CARTESIAN_POINT( '', ( 0.00569500000001000, 0.000700000000010000, -0.00230000000001000 ) ); #2147 = VECTOR( '', #2921, 1.00000000000000 ); #2148 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #2149 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #2150 = CARTESIAN_POINT( '', ( 0.00574500000001000, -0.000249146917598000, 0.00340000000001000 ) ); #2151 = VECTOR( '', #2922, 1.00000000000000 ); #2152 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #2153 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #2154 = AXIS2_PLACEMENT_3D( '', #2923, #2924, #2925 ); #2155 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #2156 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #2157 = CARTESIAN_POINT( '', ( 0.00203500000001000, 0.000700000000010000, 0.00000000000000 ) ); #2158 = VECTOR( '', #2926, 1.00000000000000 ); #2159 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #2160 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #2161 = CARTESIAN_POINT( '', ( 0.00504499999998200, -0.000249146917598000, 0.00340000000001000 ) ); #2162 = VECTOR( '', #2927, 1.00000000000000 ); #2163 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #2164 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #2165 = AXIS2_PLACEMENT_3D( '', #2928, #2929, #2930 ); #2166 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #2167 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #2168 = CARTESIAN_POINT( '', ( -0.00203500000001000, 0.00117580210604200, 0.00170000000001000 ) ); #2169 = VECTOR( '', #2931, 1.00000000000000 ); #2170 = SURFACE_SIDE_STYLE( '', ( #2932 ) ); #2171 = EDGE_LOOP( '', ( #2933, #2934, #2935, #2936, #2937 ) ); #2172 = AXIS2_PLACEMENT_3D( '', #2938, #2939, #2940 ); #2173 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #2174 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #2175 = CARTESIAN_POINT( '', ( -0.00319477704313500, 0.00117580210604200, 0.00840000000001000 ) ); #2176 = VECTOR( '', #2941, 1.00000000000000 ); #2177 = SURFACE_SIDE_STYLE( '', ( #2942 ) ); #2178 = EDGE_LOOP( '', ( #2943, #2944, #2945, #2946, #2947 ) ); #2179 = AXIS2_PLACEMENT_3D( '', #2948, #2949, #2950 ); #2180 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #2181 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #2182 = CARTESIAN_POINT( '', ( 0.00338500000003800, -0.000249146917598000, 0.00340000000001000 ) ); #2183 = VECTOR( '', #2951, 1.00000000000000 ); #2184 = SURFACE_SIDE_STYLE( '', ( #2952 ) ); #2185 = EDGE_LOOP( '', ( #2953, #2954, #2955, #2956, #2957 ) ); #2186 = AXIS2_PLACEMENT_3D( '', #2958, #2959, #2960 ); #2187 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #2188 = COLOUR_RGB( '', 0.227450981700000, 0.227450981700000, 0.227450981700000 ); #2189 = CARTESIAN_POINT( '', ( -0.00735000000001000, 0.00237500000001000, 0.00000000000000 ) ); #2190 = VECTOR( '', #2961, 1.00000000000000 ); #2191 = SURFACE_SIDE_STYLE( '', ( #2962 ) ); #2192 = EDGE_LOOP( '', ( #2963, #2964, #2965, #2966, #2967 ) ); #2193 = AXIS2_PLACEMENT_3D( '', #2968, #2969, #2970 ); #2194 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #2195 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #2196 = CARTESIAN_POINT( '', ( -0.00609500000001000, 0.000820571966701000, 0.00840000000001000 ) ); #2197 = VECTOR( '', #2971, 1.00000000000000 ); #2198 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #2199 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #2200 = CARTESIAN_POINT( '', ( -0.00609500000001000, -0.000700000000010000, 0.00340000000001000 ) ); #2201 = VECTOR( '', #2972, 1.00000000000000 ); #2202 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #2203 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #2204 = CARTESIAN_POINT( '', ( 0.00243500000001000, -0.000700000000010000, -0.00230000000001000 ) ); #2205 = VECTOR( '', #2973, 1.00000000000000 ); #2206 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #2207 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #2208 = CARTESIAN_POINT( '', ( 0.00569500000001000, -0.000700000000010000, 0.00340000000001000 ) ); #2209 = VECTOR( '', #2974, 1.00000000000000 ); #2210 = DRAUGHTING_PRE_DEFINED_CURVE_FONT( 'continuous' ); #2211 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #2212 = AXIS2_PLACEMENT_3D( '', #2975, #2976, #2977 ); #2214 = DIRECTION( '', ( 0.00000000000000, 1.00000000000000, 0.00000000000000 ) ); #2215 = DIRECTION( '', ( 1.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #2216 = DIRECTION( '', ( 0.00000000000000, 0.00000000000000, 1.00000000000000 ) ); #2217 = SURFACE_STYLE_FILL_AREA( #2978 ); #2218 = ORIENTED_EDGE( '', *, *, #538, .F. ); #2219 = ORIENTED_EDGE( '', *, *, #438, .F. ); #2220 = ORIENTED_EDGE( '', *, *, #380, .F. ); #2221 = CARTESIAN_POINT( '', ( 0.00223500000000000, 0.00000000000000, 0.00340000000000000 ) ); #2222 = DIRECTION( '', ( 0.00000000000000, 0.00000000000000, -1.00000000000000 ) ); #2223 = DIRECTION( '', ( 0.00000000000000, -1.00000000000000, 0.00000000000000 ) ); #2224 = SURFACE_STYLE_FILL_AREA( #2979 ); #2225 = ORIENTED_EDGE( '', *, *, #296, .F. ); #2226 = ORIENTED_EDGE( '', *, *, #280, .F. ); #2227 = ORIENTED_EDGE( '', *, *, #536, .T. ); #2228 = ORIENTED_EDGE( '', *, *, #322, .F. ); #2229 = ORIENTED_EDGE( '', *, *, #332, .T. ); #2230 = CARTESIAN_POINT( '', ( -0.00609500000000000, 0.000700000000000000, 0.00000000000000 ) ); #2231 = DIRECTION( '', ( -0.00000000000000, 1.00000000000000, 0.00000000000000 ) ); #2232 = DIRECTION( '', ( 1.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #2233 = CARTESIAN_POINT( '', ( -0.00273500000002400, -0.000249146917598000, 0.00340000000001000 ) ); #2234 = DIRECTION( '', ( 0.00000000000000, 0.00000000000000, 1.00000000000000 ) ); #2235 = DIRECTION( '', ( 1.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #2236 = DIRECTION( '', ( 0.00000000000000, -1.00000000000000, 0.00000000000000 ) ); #2237 = DIRECTION( '', ( 0.00000000000000, -1.00000000000000, 0.00000000000000 ) ); #2238 = SURFACE_STYLE_FILL_AREA( #2980 ); #2239 = ORIENTED_EDGE( '', *, *, #340, .T. ); #2240 = ORIENTED_EDGE( '', *, *, #436, .T. ); #2241 = ORIENTED_EDGE( '', *, *, #524, .T. ); #2242 = ORIENTED_EDGE( '', *, *, #588, .T. ); #2243 = ORIENTED_EDGE( '', *, *, #408, .T. ); #2244 = ORIENTED_EDGE( '', *, *, #266, .F. ); #2245 = ORIENTED_EDGE( '', *, *, #330, .F. ); #2246 = ORIENTED_EDGE( '', *, *, #446, .F. ); #2247 = CARTESIAN_POINT( '', ( 0.00430455408625100, 0.000515341827349000, 0.00340000000000000 ) ); #2248 = DIRECTION( '', ( 0.00000000000000, 0.00000000000000, 1.00000000000000 ) ); #2249 = DIRECTION( '', ( 1.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #2250 = DIRECTION( '', ( 0.00000000000000, 0.00000000000000, 1.00000000000000 ) ); #2251 = SURFACE_STYLE_FILL_AREA( #2981 ); #2252 = ORIENTED_EDGE( '', *, *, #330, .T. ); #2253 = ORIENTED_EDGE( '', *, *, #578, .T. ); #2254 = ORIENTED_EDGE( '', *, *, #526, .F. ); #2255 = ORIENTED_EDGE( '', *, *, #646, .T. ); #2256 = CARTESIAN_POINT( '', ( 0.00208500000000000, 0.00117580210603200, 0.00340000000000000 ) ); #2257 = DIRECTION( '', ( 0.00000000000000, -1.00000000000000, 0.00000000000000 ) ); #2258 = DIRECTION( '', ( 0.00000000000000, 0.00000000000000, -1.00000000000000 ) ); #2259 = SURFACE_STYLE_FILL_AREA( #2982 ); #2260 = ORIENTED_EDGE( '', *, *, #484, .F. ); #2261 = ORIENTED_EDGE( '', *, *, #620, .F. ); #2262 = ORIENTED_EDGE( '', *, *, #254, .F. ); #2263 = ORIENTED_EDGE( '', *, *, #290, .T. ); #2264 = CARTESIAN_POINT( '', ( 0.00223500000000000, 0.00000000000000, 0.00340000000000000 ) ); #2265 = DIRECTION( '', ( 0.00000000000000, 0.00000000000000, -1.00000000000000 ) ); #2266 = DIRECTION( '', ( 0.00000000000000, -1.00000000000000, 0.00000000000000 ) ); #2267 = SURFACE_STYLE_FILL_AREA( #2983 ); #2268 = ORIENTED_EDGE( '', *, *, #644, .F. ); #2269 = ORIENTED_EDGE( '', *, *, #310, .F. ); #2270 = ORIENTED_EDGE( '', *, *, #344, .T. ); #2271 = ORIENTED_EDGE( '', *, *, #584, .F. ); #2272 = ORIENTED_EDGE( '', *, *, #552, .F. ); #2273 = CARTESIAN_POINT( '', ( -0.00203500000000000, -0.000700000000000000, 0.00000000000000 ) ); #2274 = DIRECTION( '', ( 0.00000000000000, -1.00000000000000, 0.00000000000000 ) ); #2275 = DIRECTION( '', ( 0.00000000000000, 0.00000000000000, -1.00000000000000 ) ); #2276 = SURFACE_STYLE_FILL_AREA( #2984 ); #2277 = ORIENTED_EDGE( '', *, *, #420, .T. ); #2278 = ORIENTED_EDGE( '', *, *, #428, .T. ); #2279 = ORIENTED_EDGE( '', *, *, #394, .F. ); #2280 = ORIENTED_EDGE( '', *, *, #288, .F. ); #2281 = CARTESIAN_POINT( '', ( -0.00474499999997200, -0.000249146917588000, 0.00340000000000000 ) ); #2282 = DIRECTION( '', ( -0.00000000000000, 1.00000000000000, 0.00000000000000 ) ); #2283 = DIRECTION( '', ( 1.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #2284 = DIRECTION( '', ( -1.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #2285 = DIRECTION( '', ( 0.00000000000000, 0.00000000000000, 1.00000000000000 ) ); #2286 = DIRECTION( '', ( 0.00000000000000, 0.00000000000000, 1.00000000000000 ) ); #2287 = DIRECTION( '', ( 0.00000000000000, 1.00000000000000, 0.00000000000000 ) ); #2288 = DIRECTION( '', ( 0.00000000000000, 0.00000000000000, 1.00000000000000 ) ); #2289 = DIRECTION( '', ( 0.00000000000000, -1.00000000000000, 0.00000000000000 ) ); #2290 = DIRECTION( '', ( 0.00000000000000, 0.00000000000000, 1.00000000000000 ) ); #2291 = DIRECTION( '', ( 0.00000000000000, 0.00000000000000, 1.00000000000000 ) ); #2292 = DIRECTION( '', ( -1.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #2293 = DIRECTION( '', ( 0.00000000000000, 0.00000000000000, 1.00000000000000 ) ); #2294 = CARTESIAN_POINT( '', ( 0.00273500000002400, -0.000249146917598000, 0.00840000000001000 ) ); #2295 = DIRECTION( '', ( 0.00000000000000, 0.00000000000000, -1.00000000000000 ) ); #2296 = DIRECTION( '', ( 1.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #2297 = DIRECTION( '', ( 0.00000000000000, -1.00000000000000, 0.00000000000000 ) ); #2298 = DIRECTION( '', ( 0.00000000000000, -1.00000000000000, 0.00000000000000 ) ); #2299 = SURFACE_STYLE_FILL_AREA( #2985 ); #2300 = ORIENTED_EDGE( '', *, *, #588, .F. ); #2301 = ORIENTED_EDGE( '', *, *, #464, .T. ); #2302 = ORIENTED_EDGE( '', *, *, #252, .F. ); #2303 = ORIENTED_EDGE( '', *, *, #434, .F. ); #2304 = ORIENTED_EDGE( '', *, *, #290, .F. ); #2305 = CARTESIAN_POINT( '', ( 0.00238500000003400, 0.000825802106005000, 0.00340000000000000 ) ); #2306 = DIRECTION( '', ( -1.00000000000000, 6.29912159615300E-16, 0.00000000000000 ) ); #2307 = DIRECTION( '', ( 0.00000000000000, 0.00000000000000, 1.00000000000000 ) ); #2308 = DIRECTION( '', ( 0.00000000000000, 1.00000000000000, 0.00000000000000 ) ); #2309 = DIRECTION( '', ( -1.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #2310 = DIRECTION( '', ( -1.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #2311 = DIRECTION( '', ( 0.00000000000000, 0.00000000000000, 1.00000000000000 ) ); #2312 = DIRECTION( '', ( -1.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #2313 = DIRECTION( '', ( 0.00000000000000, -1.00000000000000, 0.00000000000000 ) ); #2314 = CARTESIAN_POINT( '', ( -0.00539499999999600, -0.000249146917598000, 0.00840000000001000 ) ); #2315 = DIRECTION( '', ( 0.00000000000000, 0.00000000000000, -1.00000000000000 ) ); #2316 = DIRECTION( '', ( 1.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #2317 = DIRECTION( '', ( 1.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #2318 = DIRECTION( '', ( 0.00000000000000, 0.00000000000000, 1.00000000000000 ) ); #2319 = DIRECTION( '', ( 1.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #2320 = DIRECTION( '', ( 0.00000000000000, 0.00000000000000, -1.00000000000000 ) ); #2321 = DIRECTION( '', ( -1.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #2322 = DIRECTION( '', ( 0.00000000000000, 0.00000000000000, 1.00000000000000 ) ); #2323 = SURFACE_STYLE_FILL_AREA( #2986 ); #2324 = ORIENTED_EDGE( '', *, *, #308, .F. ); #2325 = ORIENTED_EDGE( '', *, *, #384, .F. ); #2326 = ORIENTED_EDGE( '', *, *, #574, .F. ); #2327 = ORIENTED_EDGE( '', *, *, #654, .T. ); #2328 = ORIENTED_EDGE( '', *, *, #386, .T. ); #2329 = ORIENTED_EDGE( '', *, *, #526, .T. ); #2330 = ORIENTED_EDGE( '', *, *, #616, .T. ); #2331 = ORIENTED_EDGE( '', *, *, #636, .T. ); #2332 = ORIENTED_EDGE( '', *, *, #360, .T. ); #2333 = ORIENTED_EDGE( '', *, *, #300, .T. ); #2334 = ORIENTED_EDGE( '', *, *, #252, .T. ); #2335 = ORIENTED_EDGE( '', *, *, #480, .F. ); #2336 = CARTESIAN_POINT( '', ( 0.00430455408625100, 0.000515341827349000, 0.00840000000000000 ) ); #2337 = DIRECTION( '', ( 0.00000000000000, 0.00000000000000, 1.00000000000000 ) ); #2338 = DIRECTION( '', ( 1.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #2339 = CARTESIAN_POINT( '', ( -0.00273500000002400, -0.000249146917598000, 0.00840000000001000 ) ); #2340 = DIRECTION( '', ( 0.00000000000000, 0.00000000000000, 1.00000000000000 ) ); #2341 = DIRECTION( '', ( -1.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #2342 = DIRECTION( '', ( 0.00000000000000, -1.00000000000000, 0.00000000000000 ) ); #2343 = DIRECTION( '', ( -1.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #2344 = DIRECTION( '', ( 0.00000000000000, 1.00000000000000, 0.00000000000000 ) ); #2345 = DIRECTION( '', ( 0.00000000000000, 0.00000000000000, 1.00000000000000 ) ); #2346 = SURFACE_STYLE_FILL_AREA( #2987 ); #2347 = ORIENTED_EDGE( '', *, *, #630, .F. ); #2348 = ORIENTED_EDGE( '', *, *, #476, .T. ); #2349 = ORIENTED_EDGE( '', *, *, #340, .F. ); #2350 = ORIENTED_EDGE( '', *, *, #324, .F. ); #2351 = ORIENTED_EDGE( '', *, *, #650, .T. ); #2352 = CARTESIAN_POINT( '', ( 0.00609500000000000, 0.000700000000000000, 0.00000000000000 ) ); #2353 = DIRECTION( '', ( 0.00000000000000, -1.00000000000000, 0.00000000000000 ) ); #2354 = DIRECTION( '', ( 0.00000000000000, 0.00000000000000, -1.00000000000000 ) ); #2355 = DIRECTION( '', ( 0.00000000000000, 0.00000000000000, 1.00000000000000 ) ); #2356 = DIRECTION( '', ( 0.00000000000000, -1.00000000000000, 0.00000000000000 ) ); #2357 = SURFACE_STYLE_FILL_AREA( #2988 ); #2358 = ORIENTED_EDGE( '', *, *, #368, .T. ); #2359 = ORIENTED_EDGE( '', *, *, #508, .F. ); #2360 = ORIENTED_EDGE( '', *, *, #380, .T. ); #2361 = ORIENTED_EDGE( '', *, *, #496, .F. ); #2362 = ORIENTED_EDGE( '', *, *, #682, .T. ); #2363 = CARTESIAN_POINT( '', ( 0.00203500000000000, -0.000700000000000000, 0.00000000000000 ) ); #2364 = DIRECTION( '', ( -0.00000000000000, 1.00000000000000, 0.00000000000000 ) ); #2365 = DIRECTION( '', ( 1.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #2366 = DIRECTION( '', ( -1.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #2367 = CARTESIAN_POINT( '', ( 0.00539499999999600, -0.000249146917598000, 0.00340000000001000 ) ); #2368 = DIRECTION( '', ( 0.00000000000000, 0.00000000000000, 1.00000000000000 ) ); #2369 = DIRECTION( '', ( -1.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #2370 = SURFACE_STYLE_FILL_AREA( #2989 ); #2371 = ORIENTED_EDGE( '', *, *, #298, .T. ); #2372 = ORIENTED_EDGE( '', *, *, #678, .F. ); #2373 = ORIENTED_EDGE( '', *, *, #314, .F. ); #2374 = ORIENTED_EDGE( '', *, *, #318, .T. ); #2375 = ORIENTED_EDGE( '', *, *, #332, .F. ); #2376 = ORIENTED_EDGE( '', *, *, #490, .F. ); #2377 = ORIENTED_EDGE( '', *, *, #478, .T. ); #2378 = ORIENTED_EDGE( '', *, *, #302, .F. ); #2379 = CARTESIAN_POINT( '', ( -0.00609500000000000, 0.00112580210603200, 0.00340000000000000 ) ); #2380 = DIRECTION( '', ( -1.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #2381 = DIRECTION( '', ( 0.00000000000000, 0.00000000000000, 1.00000000000000 ) ); #2382 = DIRECTION( '', ( -1.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #2383 = SURFACE_STYLE_FILL_AREA( #2990 ); #2384 = ORIENTED_EDGE( '', *, *, #520, .T. ); #2385 = ORIENTED_EDGE( '', *, *, #620, .T. ); #2386 = ORIENTED_EDGE( '', *, *, #558, .F. ); #2387 = ORIENTED_EDGE( '', *, *, #368, .F. ); #2388 = ORIENTED_EDGE( '', *, *, #624, .T. ); #2389 = CARTESIAN_POINT( '', ( 0.00243500000000000, -0.000700000000000000, 0.00000000000000 ) ); #2390 = DIRECTION( '', ( -1.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #2391 = DIRECTION( '', ( 0.00000000000000, 0.00000000000000, 1.00000000000000 ) ); #2392 = DIRECTION( '', ( 0.00000000000000, -1.00000000000000, 0.00000000000000 ) ); #2393 = SURFACE_STYLE_FILL_AREA( #2991 ); #2394 = ORIENTED_EDGE( '', *, *, #456, .T. ); #2395 = ORIENTED_EDGE( '', *, *, #432, .T. ); #2396 = ORIENTED_EDGE( '', *, *, #410, .T. ); #2397 = ORIENTED_EDGE( '', *, *, #338, .T. ); #2398 = CARTESIAN_POINT( '', ( -0.00223500000000000, 0.00000000000000, 0.00340000000000000 ) ); #2399 = DIRECTION( '', ( 0.00000000000000, 0.00000000000000, 1.00000000000000 ) ); #2400 = DIRECTION( '', ( 1.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #2401 = DIRECTION( '', ( 0.00000000000000, 0.00000000000000, 1.00000000000000 ) ); #2402 = DIRECTION( '', ( 0.00000000000000, -1.00000000000000, 0.00000000000000 ) ); #2403 = SURFACE_STYLE_FILL_AREA( #2992 ); #2404 = ORIENTED_EDGE( '', *, *, #506, .T. ); #2405 = ORIENTED_EDGE( '', *, *, #604, .T. ); #2406 = ORIENTED_EDGE( '', *, *, #422, .F. ); #2407 = ORIENTED_EDGE( '', *, *, #348, .F. ); #2408 = CARTESIAN_POINT( '', ( -0.00574500000000000, 0.000825802106005000, 0.00340000000000000 ) ); #2409 = DIRECTION( '', ( 2.47817639427700E-16, -1.00000000000000, 0.00000000000000 ) ); #2410 = DIRECTION( '', ( 0.00000000000000, 0.00000000000000, -1.00000000000000 ) ); #2411 = SURFACE_STYLE_FILL_AREA( #2993 ); #2412 = ORIENTED_EDGE( '', *, *, #564, .T. ); #2413 = ORIENTED_EDGE( '', *, *, #264, .T. ); #2414 = ORIENTED_EDGE( '', *, *, #310, .T. ); #2415 = ORIENTED_EDGE( '', *, *, #390, .T. ); #2416 = CARTESIAN_POINT( '', ( -0.00223500000000000, 0.00000000000000, -0.00230000000000000 ) ); #2417 = DIRECTION( '', ( 0.00000000000000, 0.00000000000000, -1.00000000000000 ) ); #2418 = DIRECTION( '', ( 0.00000000000000, -1.00000000000000, 0.00000000000000 ) ); #2419 = DIRECTION( '', ( 1.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #2420 = SURFACE_STYLE_FILL_AREA( #2994 ); #2421 = ORIENTED_EDGE( '', *, *, #292, .T. ); #2422 = ORIENTED_EDGE( '', *, *, #522, .F. ); #2423 = ORIENTED_EDGE( '', *, *, #684, .T. ); #2424 = ORIENTED_EDGE( '', *, *, #630, .T. ); #2425 = ORIENTED_EDGE( '', *, *, #458, .T. ); #2426 = CARTESIAN_POINT( '', ( 0.00569500000000000, 0.000700000000000000, 0.00000000000000 ) ); #2427 = DIRECTION( '', ( 1.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #2428 = DIRECTION( '', ( 0.00000000000000, 1.00000000000000, 0.00000000000000 ) ); #2429 = DIRECTION( '', ( -1.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #2430 = DIRECTION( '', ( 0.00000000000000, -1.00000000000000, 0.00000000000000 ) ); #2431 = CARTESIAN_POINT( '', ( 0.00539499999999600, -0.000249146917598000, 0.00840000000001000 ) ); #2432 = DIRECTION( '', ( 0.00000000000000, 0.00000000000000, 1.00000000000000 ) ); #2433 = DIRECTION( '', ( -1.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #2434 = DIRECTION( '', ( 0.00000000000000, 1.00000000000000, 0.00000000000000 ) ); #2435 = SURFACE_STYLE_FILL_AREA( #2995 ); #2436 = ORIENTED_EDGE( '', *, *, #386, .F. ); #2437 = ORIENTED_EDGE( '', *, *, #500, .F. ); #2438 = ORIENTED_EDGE( '', *, *, #364, .T. ); #2439 = ORIENTED_EDGE( '', *, *, #532, .F. ); #2440 = ORIENTED_EDGE( '', *, *, #418, .T. ); #2441 = ORIENTED_EDGE( '', *, *, #324, .T. ); #2442 = ORIENTED_EDGE( '', *, *, #446, .T. ); #2443 = ORIENTED_EDGE( '', *, *, #646, .F. ); #2444 = CARTESIAN_POINT( '', ( 0.00609500000000000, 0.00112580210603200, 0.00340000000000000 ) ); #2445 = DIRECTION( '', ( -1.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #2446 = DIRECTION( '', ( 0.00000000000000, 0.00000000000000, 1.00000000000000 ) ); #2447 = DIRECTION( '', ( 0.00000000000000, 1.00000000000000, 0.00000000000000 ) ); #2448 = DIRECTION( '', ( 0.00000000000000, -1.00000000000000, 0.00000000000000 ) ); #2449 = DIRECTION( '', ( -1.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #2450 = DIRECTION( '', ( 0.00000000000000, 0.00000000000000, 1.00000000000000 ) ); #2451 = SURFACE_STYLE_FILL_AREA( #2996 ); #2452 = ORIENTED_EDGE( '', *, *, #524, .F. ); #2453 = ORIENTED_EDGE( '', *, *, #256, .T. ); #2454 = ORIENTED_EDGE( '', *, *, #480, .T. ); #2455 = ORIENTED_EDGE( '', *, *, #464, .F. ); #2456 = CARTESIAN_POINT( '', ( 0.00574500000000000, 0.000825802106005000, 0.00340000000000000 ) ); #2457 = DIRECTION( '', ( 1.52193690220208E-47, 1.00000000000000, 6.14135824115176E-32 ) ); #2458 = DIRECTION( '', ( 1.00000000000000, 9.72346137165803E-63, -2.47817639427700E-16 ) ); #2459 = SURFACE_STYLE_FILL_AREA( #2997 ); #2460 = ORIENTED_EDGE( '', *, *, #558, .T. ); #2461 = ORIENTED_EDGE( '', *, *, #606, .F. ); #2462 = ORIENTED_EDGE( '', *, *, #670, .F. ); #2463 = ORIENTED_EDGE( '', *, *, #554, .F. ); #2464 = ORIENTED_EDGE( '', *, *, #508, .T. ); #2465 = CARTESIAN_POINT( '', ( 0.00430455408625100, 0.000515341827349000, 0.00340000000000000 ) ); #2466 = DIRECTION( '', ( 0.00000000000000, 0.00000000000000, 1.00000000000000 ) ); #2467 = DIRECTION( '', ( 1.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #2468 = SURFACE_STYLE_FILL_AREA( #2998 ); #2469 = ORIENTED_EDGE( '', *, *, #650, .F. ); #2470 = ORIENTED_EDGE( '', *, *, #418, .F. ); #2471 = ORIENTED_EDGE( '', *, *, #376, .F. ); #2472 = ORIENTED_EDGE( '', *, *, #458, .F. ); #2473 = CARTESIAN_POINT( '', ( 0.00589500000000000, 0.00000000000000, -0.00230000000000000 ) ); #2474 = DIRECTION( '', ( 0.00000000000000, 0.00000000000000, 1.00000000000000 ) ); #2475 = DIRECTION( '', ( 1.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #2476 = DIRECTION( '', ( 0.00000000000000, 0.00000000000000, 1.00000000000000 ) ); #2477 = SURFACE_STYLE_FILL_AREA( #2999 ); #2478 = ORIENTED_EDGE( '', *, *, #608, .T. ); #2479 = ORIENTED_EDGE( '', *, *, #544, .T. ); #2480 = ORIENTED_EDGE( '', *, *, #548, .F. ); #2481 = ORIENTED_EDGE( '', *, *, #284, .F. ); #2482 = CARTESIAN_POINT( '', ( -0.00735000000000000, -0.00237500000000000, 0.00000000000000 ) ); #2483 = DIRECTION( '', ( 0.00000000000000, -1.00000000000000, 0.00000000000000 ) ); #2484 = DIRECTION( '', ( 0.00000000000000, 0.00000000000000, -1.00000000000000 ) ); #2485 = DIRECTION( '', ( -1.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #2486 = DIRECTION( '', ( -1.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #2487 = SURFACE_STYLE_FILL_AREA( #3000 ); #2488 = ORIENTED_EDGE( '', *, *, #622, .T. ); #2489 = ORIENTED_EDGE( '', *, *, #302, .T. ); #2490 = ORIENTED_EDGE( '', *, *, #680, .T. ); #2491 = CARTESIAN_POINT( '', ( -0.00589500000000000, 0.00000000000000, 0.00340000000000000 ) ); #2492 = DIRECTION( '', ( 0.00000000000000, 0.00000000000000, 1.00000000000000 ) ); #2493 = DIRECTION( '', ( 1.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #2494 = SURFACE_STYLE_FILL_AREA( #3001 ); #2495 = ORIENTED_EDGE( '', *, *, #296, .T. ); #2496 = ORIENTED_EDGE( '', *, *, #318, .F. ); #2497 = ORIENTED_EDGE( '', *, *, #550, .F. ); #2498 = ORIENTED_EDGE( '', *, *, #586, .F. ); #2499 = ORIENTED_EDGE( '', *, *, #316, .T. ); #2500 = ORIENTED_EDGE( '', *, *, #350, .F. ); #2501 = ORIENTED_EDGE( '', *, *, #506, .F. ); #2502 = ORIENTED_EDGE( '', *, *, #482, .F. ); #2503 = CARTESIAN_POINT( '', ( -0.00430455408625100, 0.000515341827349000, 0.00340000000000000 ) ); #2504 = DIRECTION( '', ( 0.00000000000000, 0.00000000000000, -1.00000000000000 ) ); #2505 = DIRECTION( '', ( 0.00000000000000, -1.00000000000000, 0.00000000000000 ) ); #2506 = SURFACE_STYLE_FILL_AREA( #3002 ); #2507 = ORIENTED_EDGE( '', *, *, #286, .T. ); #2508 = ORIENTED_EDGE( '', *, *, #516, .T. ); #2509 = ORIENTED_EDGE( '', *, *, #566, .F. ); #2510 = ORIENTED_EDGE( '', *, *, #544, .F. ); #2511 = CARTESIAN_POINT( '', ( 0.00735000000000000, -0.00237500000000000, 0.00000000000000 ) ); #2512 = DIRECTION( '', ( 1.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #2513 = DIRECTION( '', ( 0.00000000000000, 1.00000000000000, 0.00000000000000 ) ); #2514 = DIRECTION( '', ( 0.00000000000000, 1.00000000000000, 0.00000000000000 ) ); #2515 = DIRECTION( '', ( -1.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #2516 = DIRECTION( '', ( 1.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #2517 = SURFACE_STYLE_FILL_AREA( #3003 ); #2518 = ORIENTED_EDGE( '', *, *, #678, .T. ); #2519 = ORIENTED_EDGE( '', *, *, #440, .T. ); #2520 = ORIENTED_EDGE( '', *, *, #394, .T. ); #2521 = ORIENTED_EDGE( '', *, *, #320, .T. ); #2522 = ORIENTED_EDGE( '', *, *, #648, .T. ); #2523 = ORIENTED_EDGE( '', *, *, #422, .T. ); #2524 = ORIENTED_EDGE( '', *, *, #304, .T. ); #2525 = ORIENTED_EDGE( '', *, *, #336, .F. ); #2526 = ORIENTED_EDGE( '', *, *, #326, .F. ); #2527 = ORIENTED_EDGE( '', *, *, #602, .T. ); #2528 = ORIENTED_EDGE( '', *, *, #342, .T. ); #2529 = ORIENTED_EDGE( '', *, *, #666, .T. ); #2530 = CARTESIAN_POINT( '', ( -0.00430455408625100, 0.000515341827349000, 0.00840000000000000 ) ); #2531 = DIRECTION( '', ( 0.00000000000000, 0.00000000000000, -1.00000000000000 ) ); #2532 = DIRECTION( '', ( 0.00000000000000, -1.00000000000000, 0.00000000000000 ) ); #2533 = SURFACE_STYLE_FILL_AREA( #3004 ); #2534 = ORIENTED_EDGE( '', *, *, #404, .T. ); #2535 = ORIENTED_EDGE( '', *, *, #616, .F. ); #2536 = ORIENTED_EDGE( '', *, *, #578, .F. ); #2537 = ORIENTED_EDGE( '', *, *, #266, .T. ); #2538 = ORIENTED_EDGE( '', *, *, #656, .T. ); #2539 = ORIENTED_EDGE( '', *, *, #370, .T. ); #2540 = ORIENTED_EDGE( '', *, *, #496, .T. ); #2541 = ORIENTED_EDGE( '', *, *, #438, .T. ); #2542 = CARTESIAN_POINT( '', ( 0.00203500000000000, -5.54501508999900E-05, 0.00340000000000000 ) ); #2543 = DIRECTION( '', ( 1.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #2544 = DIRECTION( '', ( 0.00000000000000, 1.00000000000000, 0.00000000000000 ) ); #2545 = DIRECTION( '', ( 0.00000000000000, 0.00000000000000, 1.00000000000000 ) ); #2546 = SURFACE_STYLE_FILL_AREA( #3005 ); #2547 = ORIENTED_EDGE( '', *, *, #598, .T. ); #2548 = ORIENTED_EDGE( '', *, *, #528, .T. ); #2549 = ORIENTED_EDGE( '', *, *, #584, .T. ); #2550 = CARTESIAN_POINT( '', ( -0.00223500000000000, 0.00000000000000, 0.00340000000000000 ) ); #2551 = DIRECTION( '', ( 0.00000000000000, 0.00000000000000, 1.00000000000000 ) ); #2552 = DIRECTION( '', ( 1.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #2553 = DIRECTION( '', ( 0.00000000000000, 1.00000000000000, 0.00000000000000 ) ); #2554 = DIRECTION( '', ( 0.00000000000000, 0.00000000000000, 1.00000000000000 ) ); #2555 = DIRECTION( '', ( 0.00000000000000, 1.00000000000000, 0.00000000000000 ) ); #2556 = DIRECTION( '', ( 0.00000000000000, 1.00000000000000, 0.00000000000000 ) ); #2557 = CARTESIAN_POINT( '', ( -0.00539499999999600, -0.000249146917598000, 0.00840000000001000 ) ); #2558 = DIRECTION( '', ( 0.00000000000000, 0.00000000000000, 1.00000000000000 ) ); #2559 = DIRECTION( '', ( -1.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #2560 = SURFACE_STYLE_FILL_AREA( #3006 ); #2561 = ORIENTED_EDGE( '', *, *, #576, .F. ); #2562 = ORIENTED_EDGE( '', *, *, #354, .F. ); #2563 = ORIENTED_EDGE( '', *, *, #364, .F. ); #2564 = CARTESIAN_POINT( '', ( 0.00589500000000000, 0.00000000000000, 0.00340000000000000 ) ); #2565 = DIRECTION( '', ( 0.00000000000000, 0.00000000000000, -1.00000000000000 ) ); #2566 = DIRECTION( '', ( 0.00000000000000, -1.00000000000000, 0.00000000000000 ) ); #2567 = SURFACE_STYLE_FILL_AREA( #3007 ); #2568 = ORIENTED_EDGE( '', *, *, #548, .T. ); #2569 = ORIENTED_EDGE( '', *, *, #566, .T. ); #2570 = ORIENTED_EDGE( '', *, *, #638, .T. ); #2571 = ORIENTED_EDGE( '', *, *, #392, .T. ); #2572 = CARTESIAN_POINT( '', ( 0.00000000000000, 0.00000000000000, 0.00320000000000000 ) ); #2573 = DIRECTION( '', ( 0.00000000000000, 0.00000000000000, 1.00000000000000 ) ); #2574 = DIRECTION( '', ( 1.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #2575 = DIRECTION( '', ( 0.00000000000000, 1.00000000000000, 0.00000000000000 ) ); #2576 = DIRECTION( '', ( 0.00000000000000, 0.00000000000000, 1.00000000000000 ) ); #2577 = SURFACE_STYLE_FILL_AREA( #3008 ); #2578 = ORIENTED_EDGE( '', *, *, #488, .T. ); #2579 = ORIENTED_EDGE( '', *, *, #552, .T. ); #2580 = ORIENTED_EDGE( '', *, *, #262, .F. ); #2581 = ORIENTED_EDGE( '', *, *, #470, .T. ); #2582 = ORIENTED_EDGE( '', *, *, #596, .T. ); #2583 = CARTESIAN_POINT( '', ( -0.00382544591374900, 0.000515341827349000, 0.00340000000000000 ) ); #2584 = DIRECTION( '', ( 0.00000000000000, 0.00000000000000, 1.00000000000000 ) ); #2585 = DIRECTION( '', ( 1.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #2586 = SURFACE_STYLE_FILL_AREA( #3009 ); #2587 = ORIENTED_EDGE( '', *, *, #606, .T. ); #2588 = ORIENTED_EDGE( '', *, *, #484, .T. ); #2589 = ORIENTED_EDGE( '', *, *, #434, .T. ); #2590 = ORIENTED_EDGE( '', *, *, #300, .F. ); #2591 = ORIENTED_EDGE( '', *, *, #282, .F. ); #2592 = CARTESIAN_POINT( '', ( 0.00273500000001400, -0.000249146917588000, 0.00340000000000000 ) ); #2593 = DIRECTION( '', ( -0.00000000000000, 0.00000000000000, -1.00000000000000 ) ); #2594 = DIRECTION( '', ( 1.00000000000000, 9.91270557661900E-17, 0.00000000000000 ) ); #2595 = SURFACE_STYLE_FILL_AREA( #3010 ); #2596 = ORIENTED_EDGE( '', *, *, #598, .F. ); #2597 = ORIENTED_EDGE( '', *, *, #344, .F. ); #2598 = ORIENTED_EDGE( '', *, *, #264, .F. ); #2599 = ORIENTED_EDGE( '', *, *, #486, .F. ); #2600 = ORIENTED_EDGE( '', *, *, #586, .T. ); #2601 = ORIENTED_EDGE( '', *, *, #662, .F. ); #2602 = ORIENTED_EDGE( '', *, *, #342, .F. ); #2603 = ORIENTED_EDGE( '', *, *, #510, .F. ); #2604 = CARTESIAN_POINT( '', ( -0.00203500000000000, 0.000700000000000000, 0.00000000000000 ) ); #2605 = DIRECTION( '', ( 1.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #2606 = DIRECTION( '', ( 0.00000000000000, 1.00000000000000, 0.00000000000000 ) ); #2607 = CARTESIAN_POINT( '', ( -0.00273500000002400, -0.000249146917598000, 0.00340000000001000 ) ); #2608 = DIRECTION( '', ( 0.00000000000000, 0.00000000000000, 1.00000000000000 ) ); #2609 = DIRECTION( '', ( -1.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #2610 = DIRECTION( '', ( 0.00000000000000, -1.00000000000000, 0.00000000000000 ) ); #2611 = SURFACE_STYLE_FILL_AREA( #3011 ); #2612 = ORIENTED_EDGE( '', *, *, #674, .T. ); #2613 = ORIENTED_EDGE( '', *, *, #284, .T. ); #2614 = ORIENTED_EDGE( '', *, *, #392, .F. ); #2615 = ORIENTED_EDGE( '', *, *, #294, .F. ); #2616 = CARTESIAN_POINT( '', ( -0.00735000000000000, 0.00237500000000000, 0.00000000000000 ) ); #2617 = DIRECTION( '', ( -1.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #2618 = DIRECTION( '', ( 0.00000000000000, 0.00000000000000, 1.00000000000000 ) ); #2619 = DIRECTION( '', ( 0.00000000000000, 1.00000000000000, 0.00000000000000 ) ); #2620 = DIRECTION( '', ( 0.00000000000000, 0.00000000000000, 1.00000000000000 ) ); #2621 = SURFACE_STYLE_FILL_AREA( #3012 ); #2622 = ORIENTED_EDGE( '', *, *, #382, .T. ); #2623 = ORIENTED_EDGE( '', *, *, #686, .T. ); #2624 = ORIENTED_EDGE( '', *, *, #462, .T. ); #2625 = ORIENTED_EDGE( '', *, *, #280, .T. ); #2626 = CARTESIAN_POINT( '', ( -0.00589500000000000, 0.00000000000000, 0.00340000000000000 ) ); #2627 = DIRECTION( '', ( 0.00000000000000, 0.00000000000000, 1.00000000000000 ) ); #2628 = DIRECTION( '', ( 1.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #2629 = SURFACE_STYLE_FILL_AREA( #3013 ); #2630 = ORIENTED_EDGE( '', *, *, #538, .T. ); #2631 = ORIENTED_EDGE( '', *, *, #554, .T. ); #2632 = ORIENTED_EDGE( '', *, *, #448, .T. ); #2633 = ORIENTED_EDGE( '', *, *, #636, .F. ); #2634 = ORIENTED_EDGE( '', *, *, #404, .F. ); #2635 = CARTESIAN_POINT( '', ( 0.00273500000001400, -0.000249146917588000, 0.00340000000000000 ) ); #2636 = DIRECTION( '', ( -0.00000000000000, -0.00000000000000, -1.00000000000000 ) ); #2637 = DIRECTION( '', ( -1.00000000000000, -5.33761069520000E-17, 0.00000000000000 ) ); #2638 = DIRECTION( '', ( 1.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #2639 = SURFACE_STYLE_FILL_AREA( #3014 ); #2640 = ORIENTED_EDGE( '', *, *, #608, .F. ); #2641 = ORIENTED_EDGE( '', *, *, #674, .F. ); #2642 = ORIENTED_EDGE( '', *, *, #542, .F. ); #2643 = ORIENTED_EDGE( '', *, *, #286, .F. ); #2644 = CARTESIAN_POINT( '', ( 0.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #2645 = DIRECTION( '', ( 0.00000000000000, 0.00000000000000, 1.00000000000000 ) ); #2646 = DIRECTION( '', ( 1.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #2647 = SURFACE_STYLE_FILL_AREA( #3015 ); #2648 = ORIENTED_EDGE( '', *, *, #486, .T. ); #2649 = ORIENTED_EDGE( '', *, *, #564, .F. ); #2650 = ORIENTED_EDGE( '', *, *, #582, .T. ); #2651 = ORIENTED_EDGE( '', *, *, #410, .F. ); #2652 = ORIENTED_EDGE( '', *, *, #316, .F. ); #2653 = CARTESIAN_POINT( '', ( -0.00243500000000000, 0.000700000000000000, 0.00000000000000 ) ); #2654 = DIRECTION( '', ( -0.00000000000000, 1.00000000000000, 0.00000000000000 ) ); #2655 = DIRECTION( '', ( 1.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #2656 = DIRECTION( '', ( 1.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #2657 = DIRECTION( '', ( 0.00000000000000, 0.00000000000000, 1.00000000000000 ) ); #2658 = DIRECTION( '', ( -1.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #2659 = DIRECTION( '', ( 0.00000000000000, 1.00000000000000, 0.00000000000000 ) ); #2660 = CARTESIAN_POINT( '', ( 0.00273500000002400, -0.000249146917598000, 0.00340000000001000 ) ); #2661 = DIRECTION( '', ( 0.00000000000000, 0.00000000000000, -1.00000000000000 ) ); #2662 = DIRECTION( '', ( 1.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #2663 = DIRECTION( '', ( 0.00000000000000, 0.00000000000000, -1.00000000000000 ) ); #2664 = DIRECTION( '', ( 0.00000000000000, -1.00000000000000, 0.00000000000000 ) ); #2665 = DIRECTION( '', ( 0.00000000000000, 1.00000000000000, 0.00000000000000 ) ); #2666 = SURFACE_STYLE_FILL_AREA( #3016 ); #2667 = ORIENTED_EDGE( '', *, *, #656, .F. ); #2668 = ORIENTED_EDGE( '', *, *, #408, .F. ); #2669 = ORIENTED_EDGE( '', *, *, #254, .T. ); #2670 = ORIENTED_EDGE( '', *, *, #520, .F. ); #2671 = ORIENTED_EDGE( '', *, *, #312, .T. ); #2672 = CARTESIAN_POINT( '', ( 0.00243500000000000, 0.000700000000000000, 0.00000000000000 ) ); #2673 = DIRECTION( '', ( 0.00000000000000, -1.00000000000000, 0.00000000000000 ) ); #2674 = DIRECTION( '', ( 0.00000000000000, 0.00000000000000, -1.00000000000000 ) ); #2675 = CARTESIAN_POINT( '', ( -0.00539499999999600, -0.000249146917598000, 0.00340000000001000 ) ); #2676 = DIRECTION( '', ( 0.00000000000000, 0.00000000000000, 1.00000000000000 ) ); #2677 = DIRECTION( '', ( -1.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #2678 = DIRECTION( '', ( 0.00000000000000, 0.00000000000000, 1.00000000000000 ) ); #2679 = SURFACE_STYLE_FILL_AREA( #3017 ); #2680 = ORIENTED_EDGE( '', *, *, #478, .F. ); #2681 = ORIENTED_EDGE( '', *, *, #514, .F. ); #2682 = ORIENTED_EDGE( '', *, *, #396, .T. ); #2683 = ORIENTED_EDGE( '', *, *, #628, .F. ); #2684 = ORIENTED_EDGE( '', *, *, #680, .F. ); #2685 = CARTESIAN_POINT( '', ( -0.00569500000000000, -0.000700000000000000, 0.00000000000000 ) ); #2686 = DIRECTION( '', ( 0.00000000000000, -1.00000000000000, 0.00000000000000 ) ); #2687 = DIRECTION( '', ( 0.00000000000000, 0.00000000000000, -1.00000000000000 ) ); #2688 = DIRECTION( '', ( 0.00000000000000, 0.00000000000000, 1.00000000000000 ) ); #2689 = CARTESIAN_POINT( '', ( -0.00539499999999600, -0.000249146917598000, 0.00340000000001000 ) ); #2690 = DIRECTION( '', ( 0.00000000000000, 0.00000000000000, -1.00000000000000 ) ); #2691 = DIRECTION( '', ( 1.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #2692 = SURFACE_STYLE_FILL_AREA( #3018 ); #2693 = ORIENTED_EDGE( '', *, *, #322, .T. ); #2694 = ORIENTED_EDGE( '', *, *, #570, .T. ); #2695 = ORIENTED_EDGE( '', *, *, #514, .T. ); #2696 = ORIENTED_EDGE( '', *, *, #490, .T. ); #2697 = CARTESIAN_POINT( '', ( -0.00589500000000000, 0.00000000000000, -0.00230000000000000 ) ); #2698 = DIRECTION( '', ( 0.00000000000000, 0.00000000000000, -1.00000000000000 ) ); #2699 = DIRECTION( '', ( 0.00000000000000, -1.00000000000000, 0.00000000000000 ) ); #2700 = DIRECTION( '', ( 1.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #2701 = DIRECTION( '', ( 1.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #2702 = DIRECTION( '', ( 0.00000000000000, 0.00000000000000, 1.00000000000000 ) ); #2703 = CARTESIAN_POINT( '', ( 0.00539499999999600, -0.000249146917598000, 0.00340000000001000 ) ); #2704 = DIRECTION( '', ( 0.00000000000000, 0.00000000000000, 1.00000000000000 ) ); #2705 = DIRECTION( '', ( -1.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #2706 = DIRECTION( '', ( -1.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #2707 = DIRECTION( '', ( 0.00000000000000, 0.00000000000000, 1.00000000000000 ) ); #2708 = SURFACE_STYLE_FILL_AREA( #3019 ); #2709 = ORIENTED_EDGE( '', *, *, #470, .F. ); #2710 = ORIENTED_EDGE( '', *, *, #328, .F. ); #2711 = ORIENTED_EDGE( '', *, *, #326, .T. ); #2712 = ORIENTED_EDGE( '', *, *, #632, .F. ); #2713 = CARTESIAN_POINT( '', ( -0.00338500000002800, -0.000249146917588000, 0.00340000000000000 ) ); #2714 = DIRECTION( '', ( 0.00000000000000, -1.00000000000000, 0.00000000000000 ) ); #2715 = DIRECTION( '', ( 0.00000000000000, 0.00000000000000, -1.00000000000000 ) ); #2716 = DIRECTION( '', ( 0.00000000000000, 0.00000000000000, 1.00000000000000 ) ); #2717 = DIRECTION( '', ( 0.00000000000000, -1.00000000000000, 0.00000000000000 ) ); #2718 = DIRECTION( '', ( -1.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #2719 = DIRECTION( '', ( -1.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #2720 = CARTESIAN_POINT( '', ( -0.00273500000002400, -0.000249146917598000, 0.00340000000001000 ) ); #2721 = DIRECTION( '', ( 0.00000000000000, 0.00000000000000, -1.00000000000000 ) ); #2722 = DIRECTION( '', ( 1.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #2723 = SURFACE_STYLE_FILL_AREA( #3020 ); #2724 = ORIENTED_EDGE( '', *, *, #312, .F. ); #2725 = ORIENTED_EDGE( '', *, *, #624, .F. ); #2726 = ORIENTED_EDGE( '', *, *, #682, .F. ); #2727 = ORIENTED_EDGE( '', *, *, #370, .F. ); #2728 = CARTESIAN_POINT( '', ( 0.00223500000000000, 0.00000000000000, -0.00230000000000000 ) ); #2729 = DIRECTION( '', ( 0.00000000000000, 0.00000000000000, 1.00000000000000 ) ); #2730 = DIRECTION( '', ( 1.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #2731 = DIRECTION( '', ( 0.00000000000000, 0.00000000000000, 1.00000000000000 ) ); #2732 = SURFACE_STYLE_FILL_AREA( #3021 ); #2733 = ORIENTED_EDGE( '', *, *, #634, .F. ); #2734 = ORIENTED_EDGE( '', *, *, #540, .F. ); #2735 = ORIENTED_EDGE( '', *, *, #574, .T. ); #2736 = ORIENTED_EDGE( '', *, *, #658, .F. ); #2737 = CARTESIAN_POINT( '', ( 0.00474499999997200, -0.000249146917588000, 0.00340000000000000 ) ); #2738 = DIRECTION( '', ( 0.00000000000000, -1.00000000000000, 0.00000000000000 ) ); #2739 = DIRECTION( '', ( 0.00000000000000, 0.00000000000000, -1.00000000000000 ) ); #2740 = DIRECTION( '', ( 0.00000000000000, 0.00000000000000, -1.00000000000000 ) ); #2741 = CARTESIAN_POINT( '', ( 0.00273500000002400, -0.000249146917598000, 0.00340000000001000 ) ); #2742 = DIRECTION( '', ( 0.00000000000000, 0.00000000000000, 1.00000000000000 ) ); #2743 = DIRECTION( '', ( -1.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #2744 = DIRECTION( '', ( 0.00000000000000, 0.00000000000000, -1.00000000000000 ) ); #2745 = DIRECTION( '', ( -1.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #2746 = DIRECTION( '', ( 0.00000000000000, 0.00000000000000, 1.00000000000000 ) ); #2747 = SURFACE_STYLE_FILL_AREA( #3022 ); #2748 = ORIENTED_EDGE( '', *, *, #648, .F. ); #2749 = ORIENTED_EDGE( '', *, *, #568, .F. ); #2750 = ORIENTED_EDGE( '', *, *, #382, .F. ); #2751 = ORIENTED_EDGE( '', *, *, #482, .T. ); #2752 = ORIENTED_EDGE( '', *, *, #348, .T. ); #2753 = CARTESIAN_POINT( '', ( -0.00574500000000000, -0.000249146917588000, 0.00340000000000000 ) ); #2754 = DIRECTION( '', ( 1.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #2755 = DIRECTION( '', ( 0.00000000000000, 1.00000000000000, 0.00000000000000 ) ); #2756 = DIRECTION( '', ( 1.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #2757 = DIRECTION( '', ( -1.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #2758 = DIRECTION( '', ( 1.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #2759 = CARTESIAN_POINT( '', ( 0.00273500000002400, -0.000249146917598000, 0.00340000000001000 ) ); #2760 = DIRECTION( '', ( 0.00000000000000, 0.00000000000000, 1.00000000000000 ) ); #2761 = DIRECTION( '', ( -1.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #2762 = SURFACE_STYLE_FILL_AREA( #3023 ); #2763 = ORIENTED_EDGE( '', *, *, #590, .T. ); #2764 = ORIENTED_EDGE( '', *, *, #660, .F. ); #2765 = ORIENTED_EDGE( '', *, *, #634, .T. ); #2766 = ORIENTED_EDGE( '', *, *, #356, .T. ); #2767 = ORIENTED_EDGE( '', *, *, #522, .T. ); #2768 = CARTESIAN_POINT( '', ( 0.00430455408625100, 0.000515341827349000, 0.00340000000000000 ) ); #2769 = DIRECTION( '', ( 0.00000000000000, 0.00000000000000, 1.00000000000000 ) ); #2770 = DIRECTION( '', ( 1.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #2771 = DIRECTION( '', ( 0.00000000000000, 1.00000000000000, 0.00000000000000 ) ); #2772 = SURFACE_STYLE_FILL_AREA( #3024 ); #2773 = ORIENTED_EDGE( '', *, *, #396, .F. ); #2774 = ORIENTED_EDGE( '', *, *, #570, .F. ); #2775 = ORIENTED_EDGE( '', *, *, #536, .F. ); #2776 = ORIENTED_EDGE( '', *, *, #462, .F. ); #2777 = ORIENTED_EDGE( '', *, *, #580, .F. ); #2778 = CARTESIAN_POINT( '', ( -0.00569500000000000, 0.000700000000000000, 0.00000000000000 ) ); #2779 = DIRECTION( '', ( 1.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #2780 = DIRECTION( '', ( 0.00000000000000, 1.00000000000000, 0.00000000000000 ) ); #2781 = SURFACE_STYLE_FILL_AREA( #3025 ); #2782 = ORIENTED_EDGE( '', *, *, #550, .T. ); #2783 = ORIENTED_EDGE( '', *, *, #314, .T. ); #2784 = ORIENTED_EDGE( '', *, *, #666, .F. ); #2785 = ORIENTED_EDGE( '', *, *, #662, .T. ); #2786 = CARTESIAN_POINT( '', ( -0.00208500000000000, 0.00117580210603200, 0.00340000000000000 ) ); #2787 = DIRECTION( '', ( -0.00000000000000, 1.00000000000000, 0.00000000000000 ) ); #2788 = DIRECTION( '', ( 1.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #2789 = DIRECTION( '', ( 1.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #2790 = DIRECTION( '', ( 0.00000000000000, 1.00000000000000, 0.00000000000000 ) ); #2791 = DIRECTION( '', ( 0.00000000000000, 0.00000000000000, 1.00000000000000 ) ); #2792 = DIRECTION( '', ( 0.00000000000000, -1.00000000000000, 0.00000000000000 ) ); #2793 = DIRECTION( '', ( 0.00000000000000, 0.00000000000000, 1.00000000000000 ) ); #2794 = DIRECTION( '', ( 1.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #2795 = CARTESIAN_POINT( '', ( 0.00539499999999600, -0.000249146917598000, 0.00340000000001000 ) ); #2796 = DIRECTION( '', ( 0.00000000000000, 0.00000000000000, 1.00000000000000 ) ); #2797 = DIRECTION( '', ( 1.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #2798 = DIRECTION( '', ( 0.00000000000000, 0.00000000000000, 1.00000000000000 ) ); #2799 = DIRECTION( '', ( 0.00000000000000, 1.00000000000000, 0.00000000000000 ) ); #2800 = DIRECTION( '', ( 0.00000000000000, 0.00000000000000, 1.00000000000000 ) ); #2801 = DIRECTION( '', ( 1.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #2802 = DIRECTION( '', ( 0.00000000000000, 1.00000000000000, 0.00000000000000 ) ); #2803 = DIRECTION( '', ( 0.00000000000000, -1.00000000000000, 0.00000000000000 ) ); #2804 = DIRECTION( '', ( 1.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #2805 = SURFACE_STYLE_FILL_AREA( #3026 ); #2806 = ORIENTED_EDGE( '', *, *, #596, .F. ); #2807 = ORIENTED_EDGE( '', *, *, #632, .T. ); #2808 = ORIENTED_EDGE( '', *, *, #336, .T. ); #2809 = ORIENTED_EDGE( '', *, *, #270, .F. ); #2810 = ORIENTED_EDGE( '', *, *, #456, .F. ); #2811 = CARTESIAN_POINT( '', ( -0.00273500000001400, -0.000249146917588000, 0.00340000000000000 ) ); #2812 = DIRECTION( '', ( -0.00000000000000, -0.00000000000000, 1.00000000000000 ) ); #2813 = DIRECTION( '', ( -1.00000000000000, 9.91270557661900E-17, 0.00000000000000 ) ); #2814 = SURFACE_STYLE_FILL_AREA( #3027 ); #2815 = ORIENTED_EDGE( '', *, *, #502, .T. ); #2816 = ORIENTED_EDGE( '', *, *, #686, .F. ); #2817 = ORIENTED_EDGE( '', *, *, #568, .T. ); #2818 = ORIENTED_EDGE( '', *, *, #320, .F. ); #2819 = ORIENTED_EDGE( '', *, *, #428, .F. ); #2820 = CARTESIAN_POINT( '', ( -0.00539499999998600, -0.000249146917588000, 0.00340000000000000 ) ); #2821 = DIRECTION( '', ( -0.00000000000000, 0.00000000000000, -1.00000000000000 ) ); #2822 = DIRECTION( '', ( 1.00000000000000, 9.91270557661900E-17, 0.00000000000000 ) ); #2823 = CARTESIAN_POINT( '', ( -0.00273500000002400, -0.000249146917598000, 0.00340000000001000 ) ); #2824 = DIRECTION( '', ( 0.00000000000000, 0.00000000000000, 1.00000000000000 ) ); #2825 = DIRECTION( '', ( -1.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #2826 = DIRECTION( '', ( 0.00000000000000, 1.00000000000000, 0.00000000000000 ) ); #2827 = SURFACE_STYLE_FILL_AREA( #3028 ); #2828 = ORIENTED_EDGE( '', *, *, #356, .F. ); #2829 = ORIENTED_EDGE( '', *, *, #658, .T. ); #2830 = ORIENTED_EDGE( '', *, *, #384, .T. ); #2831 = ORIENTED_EDGE( '', *, *, #572, .F. ); #2832 = ORIENTED_EDGE( '', *, *, #512, .F. ); #2833 = CARTESIAN_POINT( '', ( 0.00539499999998600, -0.000249146917588000, 0.00340000000000000 ) ); #2834 = DIRECTION( '', ( -0.00000000000000, -0.00000000000000, 1.00000000000000 ) ); #2835 = DIRECTION( '', ( -1.00000000000000, 9.91270557661900E-17, 0.00000000000000 ) ); #2836 = CARTESIAN_POINT( '', ( -0.00273500000002400, -0.000249146917598000, 0.00840000000001000 ) ); #2837 = DIRECTION( '', ( 0.00000000000000, 0.00000000000000, 1.00000000000000 ) ); #2838 = DIRECTION( '', ( 1.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #2839 = DIRECTION( '', ( 0.00000000000000, 0.00000000000000, 1.00000000000000 ) ); #2840 = CARTESIAN_POINT( '', ( 0.00273500000002400, -0.000249146917598000, 0.00340000000001000 ) ); #2841 = DIRECTION( '', ( 0.00000000000000, 0.00000000000000, -1.00000000000000 ) ); #2842 = DIRECTION( '', ( 1.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #2843 = DIRECTION( '', ( 1.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #2844 = SURFACE_STYLE_FILL_AREA( #3029 ); #2845 = ORIENTED_EDGE( '', *, *, #512, .T. ); #2846 = ORIENTED_EDGE( '', *, *, #652, .T. ); #2847 = ORIENTED_EDGE( '', *, *, #476, .F. ); #2848 = ORIENTED_EDGE( '', *, *, #684, .F. ); #2849 = CARTESIAN_POINT( '', ( 0.00589500000000000, 0.00000000000000, 0.00340000000000000 ) ); #2850 = DIRECTION( '', ( 0.00000000000000, 0.00000000000000, -1.00000000000000 ) ); #2851 = DIRECTION( '', ( 0.00000000000000, -1.00000000000000, 0.00000000000000 ) ); #2852 = SURFACE_STYLE_FILL_AREA( #3030 ); #2853 = ORIENTED_EDGE( '', *, *, #580, .T. ); #2854 = ORIENTED_EDGE( '', *, *, #502, .F. ); #2855 = ORIENTED_EDGE( '', *, *, #420, .F. ); #2856 = ORIENTED_EDGE( '', *, *, #494, .F. ); #2857 = ORIENTED_EDGE( '', *, *, #628, .T. ); #2858 = CARTESIAN_POINT( '', ( -0.00430455408625100, 0.000515341827349000, 0.00340000000000000 ) ); #2859 = DIRECTION( '', ( 0.00000000000000, 0.00000000000000, -1.00000000000000 ) ); #2860 = DIRECTION( '', ( 0.00000000000000, -1.00000000000000, 0.00000000000000 ) ); #2861 = SURFACE_STYLE_FILL_AREA( #3031 ); #2862 = ORIENTED_EDGE( '', *, *, #670, .T. ); #2863 = ORIENTED_EDGE( '', *, *, #282, .T. ); #2864 = ORIENTED_EDGE( '', *, *, #360, .F. ); #2865 = ORIENTED_EDGE( '', *, *, #448, .F. ); #2866 = CARTESIAN_POINT( '', ( 0.00338500000002800, -0.000249146917588000, 0.00340000000000000 ) ); #2867 = DIRECTION( '', ( -0.00000000000000, 1.00000000000000, 0.00000000000000 ) ); #2868 = DIRECTION( '', ( 1.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #2869 = DIRECTION( '', ( 0.00000000000000, -1.00000000000000, 0.00000000000000 ) ); #2870 = SURFACE_STYLE_FILL_AREA( #3032 ); #2871 = ORIENTED_EDGE( '', *, *, #528, .F. ); #2872 = ORIENTED_EDGE( '', *, *, #510, .T. ); #2873 = ORIENTED_EDGE( '', *, *, #602, .F. ); #2874 = ORIENTED_EDGE( '', *, *, #328, .T. ); #2875 = ORIENTED_EDGE( '', *, *, #262, .T. ); #2876 = CARTESIAN_POINT( '', ( -0.00273500000001400, -0.000249146917588000, 0.00340000000000000 ) ); #2877 = DIRECTION( '', ( -0.00000000000000, -0.00000000000000, 1.00000000000000 ) ); #2878 = DIRECTION( '', ( 1.00000000000000, -5.33761069520000E-17, 0.00000000000000 ) ); #2879 = DIRECTION( '', ( 0.00000000000000, -1.00000000000000, 0.00000000000000 ) ); #2880 = CARTESIAN_POINT( '', ( -0.00539499999999600, -0.000249146917598000, 0.00340000000001000 ) ); #2881 = DIRECTION( '', ( -0.00000000000000, 0.00000000000000, -1.00000000000000 ) ); #2882 = DIRECTION( '', ( -1.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #2883 = DIRECTION( '', ( 0.00000000000000, 1.00000000000000, 0.00000000000000 ) ); #2884 = SURFACE_STYLE_FILL_AREA( #3033 ); #2885 = ORIENTED_EDGE( '', *, *, #582, .F. ); #2886 = ORIENTED_EDGE( '', *, *, #390, .F. ); #2887 = ORIENTED_EDGE( '', *, *, #644, .T. ); #2888 = ORIENTED_EDGE( '', *, *, #488, .F. ); #2889 = ORIENTED_EDGE( '', *, *, #338, .F. ); #2890 = CARTESIAN_POINT( '', ( -0.00243500000000000, -0.000700000000000000, 0.00000000000000 ) ); #2891 = DIRECTION( '', ( -1.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #2892 = DIRECTION( '', ( 0.00000000000000, 0.00000000000000, 1.00000000000000 ) ); #2893 = DIRECTION( '', ( 1.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #2894 = DIRECTION( '', ( 0.00000000000000, 0.00000000000000, -1.00000000000000 ) ); #2895 = DIRECTION( '', ( 0.00000000000000, 0.00000000000000, 1.00000000000000 ) ); #2896 = DIRECTION( '', ( 1.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #2897 = CARTESIAN_POINT( '', ( 0.00273500000002400, -0.000249146917598000, 0.00840000000001000 ) ); #2898 = DIRECTION( '', ( 0.00000000000000, 0.00000000000000, 1.00000000000000 ) ); #2899 = DIRECTION( '', ( -1.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #2900 = DIRECTION( '', ( -1.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #2901 = SURFACE_STYLE_FILL_AREA( #3034 ); #2902 = ORIENTED_EDGE( '', *, *, #542, .T. ); #2903 = ORIENTED_EDGE( '', *, *, #294, .T. ); #2904 = ORIENTED_EDGE( '', *, *, #638, .F. ); #2905 = ORIENTED_EDGE( '', *, *, #516, .F. ); #2906 = CARTESIAN_POINT( '', ( 0.00735000000000000, 0.00237500000000000, 0.00000000000000 ) ); #2907 = DIRECTION( '', ( -0.00000000000000, 1.00000000000000, 0.00000000000000 ) ); #2908 = DIRECTION( '', ( 1.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #2909 = SURFACE_STYLE_FILL_AREA( #3035 ); #2910 = ORIENTED_EDGE( '', *, *, #576, .T. ); #2911 = ORIENTED_EDGE( '', *, *, #500, .T. ); #2912 = ORIENTED_EDGE( '', *, *, #654, .F. ); #2913 = ORIENTED_EDGE( '', *, *, #540, .T. ); #2914 = ORIENTED_EDGE( '', *, *, #660, .T. ); #2915 = CARTESIAN_POINT( '', ( 0.00539499999998600, -0.000249146917588000, 0.00340000000000000 ) ); #2916 = DIRECTION( '', ( -0.00000000000000, -0.00000000000000, 1.00000000000000 ) ); #2917 = DIRECTION( '', ( 1.00000000000000, -5.33761069520000E-17, 0.00000000000000 ) ); #2918 = DIRECTION( '', ( 0.00000000000000, 0.00000000000000, 1.00000000000000 ) ); #2919 = DIRECTION( '', ( 0.00000000000000, 0.00000000000000, -1.00000000000000 ) ); #2920 = DIRECTION( '', ( 0.00000000000000, 1.00000000000000, 0.00000000000000 ) ); #2921 = DIRECTION( '', ( -1.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #2922 = DIRECTION( '', ( 0.00000000000000, 1.00000000000000, 0.00000000000000 ) ); #2923 = CARTESIAN_POINT( '', ( 0.00539499999999600, -0.000249146917598000, 0.00840000000001000 ) ); #2924 = DIRECTION( '', ( 0.00000000000000, 0.00000000000000, 1.00000000000000 ) ); #2925 = DIRECTION( '', ( 1.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #2926 = DIRECTION( '', ( 0.00000000000000, 0.00000000000000, -1.00000000000000 ) ); #2927 = DIRECTION( '', ( 0.00000000000000, 0.00000000000000, 1.00000000000000 ) ); #2928 = CARTESIAN_POINT( '', ( 0.00539499999999600, -0.000249146917598000, 0.00340000000001000 ) ); #2929 = DIRECTION( '', ( 0.00000000000000, 0.00000000000000, 1.00000000000000 ) ); #2930 = DIRECTION( '', ( 1.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #2931 = DIRECTION( '', ( 0.00000000000000, 0.00000000000000, -1.00000000000000 ) ); #2932 = SURFACE_STYLE_FILL_AREA( #3036 ); #2933 = ORIENTED_EDGE( '', *, *, #532, .T. ); #2934 = ORIENTED_EDGE( '', *, *, #354, .T. ); #2935 = ORIENTED_EDGE( '', *, *, #590, .F. ); #2936 = ORIENTED_EDGE( '', *, *, #292, .F. ); #2937 = ORIENTED_EDGE( '', *, *, #376, .T. ); #2938 = CARTESIAN_POINT( '', ( 0.00569500000000000, -0.000700000000000000, 0.00000000000000 ) ); #2939 = DIRECTION( '', ( -0.00000000000000, 1.00000000000000, 0.00000000000000 ) ); #2940 = DIRECTION( '', ( 1.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #2941 = DIRECTION( '', ( -1.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #2942 = SURFACE_STYLE_FILL_AREA( #3037 ); #2943 = ORIENTED_EDGE( '', *, *, #350, .T. ); #2944 = ORIENTED_EDGE( '', *, *, #432, .F. ); #2945 = ORIENTED_EDGE( '', *, *, #270, .T. ); #2946 = ORIENTED_EDGE( '', *, *, #304, .F. ); #2947 = ORIENTED_EDGE( '', *, *, #604, .F. ); #2948 = CARTESIAN_POINT( '', ( -0.00238500000003400, 0.000825802106005000, 0.00340000000000000 ) ); #2949 = DIRECTION( '', ( -1.00000000000000, -6.29912159615300E-16, 0.00000000000000 ) ); #2950 = DIRECTION( '', ( -6.29912159615300E-16, 1.00000000000000, 0.00000000000000 ) ); #2951 = DIRECTION( '', ( -1.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #2952 = SURFACE_STYLE_FILL_AREA( #3038 ); #2953 = ORIENTED_EDGE( '', *, *, #652, .F. ); #2954 = ORIENTED_EDGE( '', *, *, #572, .T. ); #2955 = ORIENTED_EDGE( '', *, *, #308, .T. ); #2956 = ORIENTED_EDGE( '', *, *, #256, .F. ); #2957 = ORIENTED_EDGE( '', *, *, #436, .F. ); #2958 = CARTESIAN_POINT( '', ( 0.00574500000000000, -0.000249146917588000, 0.00340000000000000 ) ); #2959 = DIRECTION( '', ( 1.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #2960 = DIRECTION( '', ( 0.00000000000000, 1.00000000000000, 0.00000000000000 ) ); #2961 = DIRECTION( '', ( 0.00000000000000, -1.00000000000000, 0.00000000000000 ) ); #2962 = SURFACE_STYLE_FILL_AREA( #3039 ); #2963 = ORIENTED_EDGE( '', *, *, #622, .F. ); #2964 = ORIENTED_EDGE( '', *, *, #494, .T. ); #2965 = ORIENTED_EDGE( '', *, *, #288, .T. ); #2966 = ORIENTED_EDGE( '', *, *, #440, .F. ); #2967 = ORIENTED_EDGE( '', *, *, #298, .F. ); #2968 = CARTESIAN_POINT( '', ( -0.00539499999998600, -0.000249146917588000, 0.00340000000000000 ) ); #2969 = DIRECTION( '', ( -0.00000000000000, -0.00000000000000, -1.00000000000000 ) ); #2970 = DIRECTION( '', ( -1.00000000000000, -5.33761069520000E-17, 0.00000000000000 ) ); #2971 = DIRECTION( '', ( 0.00000000000000, -1.00000000000000, 0.00000000000000 ) ); #2972 = DIRECTION( '', ( 1.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #2973 = DIRECTION( '', ( 1.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #2974 = DIRECTION( '', ( 0.00000000000000, 1.00000000000000, 0.00000000000000 ) ); #2975 = CARTESIAN_POINT( '', ( -0.00539499999999600, -0.000249146917598000, 0.00340000000001000 ) ); #2976 = DIRECTION( '', ( 0.00000000000000, -0.00000000000000, 1.00000000000000 ) ); #2977 = DIRECTION( '', ( 1.00000000000000, 0.00000000000000, 0.00000000000000 ) ); #2978 = FILL_AREA_STYLE( '', ( #3040 ) ); #2979 = FILL_AREA_STYLE( '', ( #3041 ) ); #2980 = FILL_AREA_STYLE( '', ( #3042 ) ); #2981 = FILL_AREA_STYLE( '', ( #3043 ) ); #2982 = FILL_AREA_STYLE( '', ( #3044 ) ); #2983 = FILL_AREA_STYLE( '', ( #3045 ) ); #2984 = FILL_AREA_STYLE( '', ( #3046 ) ); #2985 = FILL_AREA_STYLE( '', ( #3047 ) ); #2986 = FILL_AREA_STYLE( '', ( #3048 ) ); #2987 = FILL_AREA_STYLE( '', ( #3049 ) ); #2988 = FILL_AREA_STYLE( '', ( #3050 ) ); #2989 = FILL_AREA_STYLE( '', ( #3051 ) ); #2990 = FILL_AREA_STYLE( '', ( #3052 ) ); #2991 = FILL_AREA_STYLE( '', ( #3053 ) ); #2992 = FILL_AREA_STYLE( '', ( #3054 ) ); #2993 = FILL_AREA_STYLE( '', ( #3055 ) ); #2994 = FILL_AREA_STYLE( '', ( #3056 ) ); #2995 = FILL_AREA_STYLE( '', ( #3057 ) ); #2996 = FILL_AREA_STYLE( '', ( #3058 ) ); #2997 = FILL_AREA_STYLE( '', ( #3059 ) ); #2998 = FILL_AREA_STYLE( '', ( #3060 ) ); #2999 = FILL_AREA_STYLE( '', ( #3061 ) ); #3000 = FILL_AREA_STYLE( '', ( #3062 ) ); #3001 = FILL_AREA_STYLE( '', ( #3063 ) ); #3002 = FILL_AREA_STYLE( '', ( #3064 ) ); #3003 = FILL_AREA_STYLE( '', ( #3065 ) ); #3004 = FILL_AREA_STYLE( '', ( #3066 ) ); #3005 = FILL_AREA_STYLE( '', ( #3067 ) ); #3006 = FILL_AREA_STYLE( '', ( #3068 ) ); #3007 = FILL_AREA_STYLE( '', ( #3069 ) ); #3008 = FILL_AREA_STYLE( '', ( #3070 ) ); #3009 = FILL_AREA_STYLE( '', ( #3071 ) ); #3010 = FILL_AREA_STYLE( '', ( #3072 ) ); #3011 = FILL_AREA_STYLE( '', ( #3073 ) ); #3012 = FILL_AREA_STYLE( '', ( #3074 ) ); #3013 = FILL_AREA_STYLE( '', ( #3075 ) ); #3014 = FILL_AREA_STYLE( '', ( #3076 ) ); #3015 = FILL_AREA_STYLE( '', ( #3077 ) ); #3016 = FILL_AREA_STYLE( '', ( #3078 ) ); #3017 = FILL_AREA_STYLE( '', ( #3079 ) ); #3018 = FILL_AREA_STYLE( '', ( #3080 ) ); #3019 = FILL_AREA_STYLE( '', ( #3081 ) ); #3020 = FILL_AREA_STYLE( '', ( #3082 ) ); #3021 = FILL_AREA_STYLE( '', ( #3083 ) ); #3022 = FILL_AREA_STYLE( '', ( #3084 ) ); #3023 = FILL_AREA_STYLE( '', ( #3085 ) ); #3024 = FILL_AREA_STYLE( '', ( #3086 ) ); #3025 = FILL_AREA_STYLE( '', ( #3087 ) ); #3026 = FILL_AREA_STYLE( '', ( #3088 ) ); #3027 = FILL_AREA_STYLE( '', ( #3089 ) ); #3028 = FILL_AREA_STYLE( '', ( #3090 ) ); #3029 = FILL_AREA_STYLE( '', ( #3091 ) ); #3030 = FILL_AREA_STYLE( '', ( #3092 ) ); #3031 = FILL_AREA_STYLE( '', ( #3093 ) ); #3032 = FILL_AREA_STYLE( '', ( #3094 ) ); #3033 = FILL_AREA_STYLE( '', ( #3095 ) ); #3034 = FILL_AREA_STYLE( '', ( #3096 ) ); #3035 = FILL_AREA_STYLE( '', ( #3097 ) ); #3036 = FILL_AREA_STYLE( '', ( #3098 ) ); #3037 = FILL_AREA_STYLE( '', ( #3099 ) ); #3038 = FILL_AREA_STYLE( '', ( #3100 ) ); #3039 = FILL_AREA_STYLE( '', ( #3101 ) ); #3040 = FILL_AREA_STYLE_COLOUR( '', #3102 ); #3041 = FILL_AREA_STYLE_COLOUR( '', #3103 ); #3042 = FILL_AREA_STYLE_COLOUR( '', #3104 ); #3043 = FILL_AREA_STYLE_COLOUR( '', #3105 ); #3044 = FILL_AREA_STYLE_COLOUR( '', #3106 ); #3045 = FILL_AREA_STYLE_COLOUR( '', #3107 ); #3046 = FILL_AREA_STYLE_COLOUR( '', #3108 ); #3047 = FILL_AREA_STYLE_COLOUR( '', #3109 ); #3048 = FILL_AREA_STYLE_COLOUR( '', #3110 ); #3049 = FILL_AREA_STYLE_COLOUR( '', #3111 ); #3050 = FILL_AREA_STYLE_COLOUR( '', #3112 ); #3051 = FILL_AREA_STYLE_COLOUR( '', #3113 ); #3052 = FILL_AREA_STYLE_COLOUR( '', #3114 ); #3053 = FILL_AREA_STYLE_COLOUR( '', #3115 ); #3054 = FILL_AREA_STYLE_COLOUR( '', #3116 ); #3055 = FILL_AREA_STYLE_COLOUR( '', #3117 ); #3056 = FILL_AREA_STYLE_COLOUR( '', #3118 ); #3057 = FILL_AREA_STYLE_COLOUR( '', #3119 ); #3058 = FILL_AREA_STYLE_COLOUR( '', #3120 ); #3059 = FILL_AREA_STYLE_COLOUR( '', #3121 ); #3060 = FILL_AREA_STYLE_COLOUR( '', #3122 ); #3061 = FILL_AREA_STYLE_COLOUR( '', #3123 ); #3062 = FILL_AREA_STYLE_COLOUR( '', #3124 ); #3063 = FILL_AREA_STYLE_COLOUR( '', #3125 ); #3064 = FILL_AREA_STYLE_COLOUR( '', #3126 ); #3065 = FILL_AREA_STYLE_COLOUR( '', #3127 ); #3066 = FILL_AREA_STYLE_COLOUR( '', #3128 ); #3067 = FILL_AREA_STYLE_COLOUR( '', #3129 ); #3068 = FILL_AREA_STYLE_COLOUR( '', #3130 ); #3069 = FILL_AREA_STYLE_COLOUR( '', #3131 ); #3070 = FILL_AREA_STYLE_COLOUR( '', #3132 ); #3071 = FILL_AREA_STYLE_COLOUR( '', #3133 ); #3072 = FILL_AREA_STYLE_COLOUR( '', #3134 ); #3073 = FILL_AREA_STYLE_COLOUR( '', #3135 ); #3074 = FILL_AREA_STYLE_COLOUR( '', #3136 ); #3075 = FILL_AREA_STYLE_COLOUR( '', #3137 ); #3076 = FILL_AREA_STYLE_COLOUR( '', #3138 ); #3077 = FILL_AREA_STYLE_COLOUR( '', #3139 ); #3078 = FILL_AREA_STYLE_COLOUR( '', #3140 ); #3079 = FILL_AREA_STYLE_COLOUR( '', #3141 ); #3080 = FILL_AREA_STYLE_COLOUR( '', #3142 ); #3081 = FILL_AREA_STYLE_COLOUR( '', #3143 ); #3082 = FILL_AREA_STYLE_COLOUR( '', #3144 ); #3083 = FILL_AREA_STYLE_COLOUR( '', #3145 ); #3084 = FILL_AREA_STYLE_COLOUR( '', #3146 ); #3085 = FILL_AREA_STYLE_COLOUR( '', #3147 ); #3086 = FILL_AREA_STYLE_COLOUR( '', #3148 ); #3087 = FILL_AREA_STYLE_COLOUR( '', #3149 ); #3088 = FILL_AREA_STYLE_COLOUR( '', #3150 ); #3089 = FILL_AREA_STYLE_COLOUR( '', #3151 ); #3090 = FILL_AREA_STYLE_COLOUR( '', #3152 ); #3091 = FILL_AREA_STYLE_COLOUR( '', #3153 ); #3092 = FILL_AREA_STYLE_COLOUR( '', #3154 ); #3093 = FILL_AREA_STYLE_COLOUR( '', #3155 ); #3094 = FILL_AREA_STYLE_COLOUR( '', #3156 ); #3095 = FILL_AREA_STYLE_COLOUR( '', #3157 ); #3096 = FILL_AREA_STYLE_COLOUR( '', #3158 ); #3097 = FILL_AREA_STYLE_COLOUR( '', #3159 ); #3098 = FILL_AREA_STYLE_COLOUR( '', #3160 ); #3099 = FILL_AREA_STYLE_COLOUR( '', #3161 ); #3100 = FILL_AREA_STYLE_COLOUR( '', #3162 ); #3101 = FILL_AREA_STYLE_COLOUR( '', #3163 ); #3102 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #3103 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #3104 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #3105 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #3106 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #3107 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #3108 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #3109 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #3110 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #3111 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #3112 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #3113 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #3114 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #3115 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #3116 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #3117 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #3118 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #3119 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #3120 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #3121 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #3122 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #3123 = COLOUR_RGB( '', 0.227450981700000, 0.227450981700000, 0.227450981700000 ); #3124 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #3125 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #3126 = COLOUR_RGB( '', 0.227450981700000, 0.227450981700000, 0.227450981700000 ); #3127 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #3128 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #3129 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #3130 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #3131 = COLOUR_RGB( '', 0.227450981700000, 0.227450981700000, 0.227450981700000 ); #3132 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #3133 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #3134 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #3135 = COLOUR_RGB( '', 0.227450981700000, 0.227450981700000, 0.227450981700000 ); #3136 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #3137 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #3138 = COLOUR_RGB( '', 0.227450981700000, 0.227450981700000, 0.227450981700000 ); #3139 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #3140 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #3141 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #3142 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #3143 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #3144 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #3145 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #3146 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #3147 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #3148 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #3149 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #3150 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #3151 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #3152 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #3153 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #3154 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #3155 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #3156 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #3157 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #3158 = COLOUR_RGB( '', 0.227450981700000, 0.227450981700000, 0.227450981700000 ); #3159 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #3160 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #3161 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #3162 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); #3163 = COLOUR_RGB( '', 0.749019622800000, 0.749019622800000, 0.749019622800000 ); ENDSEC; END-ISO-10303-21; ================================================ FILE: electronics/lib/BK-6013.pretty/BK-6013.kicad_mod ================================================ (module BK-6013 (layer F.Cu) (tedit 605D2E8E) (fp_text reference REF** (at 0 -3.81) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value BK-6013 (at 0 -0.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -7.35 -2.375) (end 7.35 -2.375) (layer F.SilkS) (width 0.15)) (fp_line (start -7.35 2.375) (end 7.35 2.375) (layer F.SilkS) (width 0.15)) (fp_line (start 7.35 -2.375) (end 7.35 2.375) (layer F.SilkS) (width 0.15)) (fp_line (start -7.35 -2.375) (end -7.35 2.375) (layer F.SilkS) (width 0.15)) (fp_line (start -7.747 -2.794) (end 7.747 -2.794) (layer F.CrtYd) (width 0.12)) (fp_line (start 7.747 -2.794) (end 7.747 2.794) (layer F.CrtYd) (width 0.12)) (fp_line (start 7.747 2.794) (end -7.747 2.794) (layer F.CrtYd) (width 0.12)) (fp_line (start -7.747 2.794) (end -7.747 -2.794) (layer F.CrtYd) (width 0.12)) (pad 1 thru_hole rect (at -2.235 0) (size 2.7 2.7) (drill 1.65) (layers *.Cu *.Mask)) (pad 1 thru_hole rect (at -5.895 0) (size 2.7 2.7) (drill 1.65) (layers *.Cu *.Mask)) (pad 2 thru_hole circle (at 2.235 0) (size 2.7 2.7) (drill 1.65) (layers *.Cu *.Mask)) (pad 2 thru_hole circle (at 5.895 0) (size 2.7 2.7) (drill 1.65) (layers *.Cu *.Mask)) (model ../lib/BK-6013.models/Memory_Protection_Devices_-_BK-6013.step (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) ================================================ FILE: electronics/lib/BK-6013.pretty/Memory_Protection_Devices-BK-6013-0-0-0.kicad_mod ================================================ (module Memory_Protection_Devices-BK-6013-0-0-0 (layer F.Cu) (tedit 605D2BF8) (fp_text reference REF** (at -7.25 -3.575) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15)) (justify left)) ) (fp_text value Val** (at 0 0) (layer F.SilkS) (effects (font (size 1.27 1.27) (thickness 0.15))) ) (fp_line (start -7.6 2.625) (end -7.6 -2.625) (layer F.SilkS) (width 0.15)) (fp_line (start -7.6 2.625) (end 7.6 2.625) (layer F.SilkS) (width 0.15)) (fp_line (start 7.6 2.625) (end 7.6 -2.625) (layer F.SilkS) (width 0.15)) (fp_line (start -7.6 -2.625) (end 7.6 -2.625) (layer F.SilkS) (width 0.15)) (fp_line (start 7.625 2.65) (end 7.625 -2.65) (layer F.CrtYd) (width 0.15)) (fp_line (start -7.625 2.65) (end 7.625 2.65) (layer F.CrtYd) (width 0.15)) (fp_line (start -7.625 -2.65) (end -7.625 2.65) (layer F.CrtYd) (width 0.15)) (fp_line (start 7.625 -2.65) (end -7.625 -2.65) (layer F.CrtYd) (width 0.15)) (fp_line (start 7.625 -2.65) (end 7.625 -2.65) (layer F.CrtYd) (width 0.15)) (fp_line (start 7.6 2.625) (end -7.6 2.625) (layer F.Fab) (width 0.15)) (fp_line (start 7.6 -2.625) (end 7.6 2.625) (layer F.Fab) (width 0.15)) (fp_line (start -7.6 -2.625) (end 7.6 -2.625) (layer F.Fab) (width 0.15)) (fp_line (start -7.6 2.625) (end -7.6 -2.625) (layer F.Fab) (width 0.15)) (pad 1 thru_hole rect (at -5.895 0) (size 2.5 2.5) (drill 1.65) (layers *.Cu)) (pad 1 thru_hole rect (at -2.234999 0) (size 2.5 2.5) (drill 1.65) (layers *.Cu)) (pad 2 thru_hole circle (at 2.235 0) (size 2.5 2.5) (drill 1.65) (layers *.Cu)) (pad 2 thru_hole circle (at 5.895 0) (size 2.5 2.5) (drill 1.65) (layers *.Cu)) ) ================================================ FILE: electronics/lib/Buck.pretty/BuckModule.kicad_mod ================================================ (module BuckModule (layer F.Cu) (tedit 5FE8C9BE) (fp_text reference REF** (at 0 0.5) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value BuckModule (at 0 -0.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text user IN- (at 3.81 1.27) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text user OUT- (at 13.97 1.27) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text user IN+ (at 3.81 12.7) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text user OUT+ (at 13.97 12.7) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -1.9 -1.765) (end 20.6 -1.765) (layer F.SilkS) (width 0.15)) (fp_line (start -1.9 15.735) (end 20.6 15.735) (layer F.SilkS) (width 0.15)) (fp_line (start -1.9 -1.765) (end -1.9 15.735) (layer F.SilkS) (width 0.15)) (fp_line (start 20.6 -1.765) (end 20.6 15.735) (layer F.SilkS) (width 0.15)) (fp_line (start 2.54 6.35) (end 15.24 6.35) (layer F.SilkS) (width 0.15)) (fp_line (start 15.24 6.35) (end 12.7 3.81) (layer F.SilkS) (width 0.15)) (fp_line (start 15.24 6.35) (end 12.7 8.89) (layer F.SilkS) (width 0.15)) (pad IN_GND thru_hole circle (at 0 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad IN_GND thru_hole circle (at 0 2.54) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad IN thru_hole circle (at 0 11.43) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad IN thru_hole circle (at 0 13.97) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad OUT_GND thru_hole circle (at 18.7 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad OUT_GND thru_hole circle (at 18.7 2.54) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad OUT thru_hole circle (at 18.7 11.43) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad OUT thru_hole circle (at 18.7 13.97) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) ) ================================================ FILE: electronics/lib/Buck.pretty/BuckModuleBackSilk.kicad_mod ================================================ (module BuckModuleBackSilk (layer F.Cu) (tedit 606E666B) (fp_text reference REF** (at 0 0.5 180) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value Buck (at 0 -0.5 -180) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -1.9 -1.765) (end 20.6 -1.765) (layer B.SilkS) (width 0.15)) (fp_line (start -1.9 15.735) (end 20.6 15.735) (layer B.SilkS) (width 0.15)) (fp_line (start -1.9 -1.765) (end -1.9 15.735) (layer B.SilkS) (width 0.15)) (fp_line (start 20.6 -1.765) (end 20.6 15.735) (layer B.SilkS) (width 0.15)) (fp_line (start 2.54 6.35) (end 15.24 6.35) (layer B.SilkS) (width 0.15)) (fp_line (start 15.24 6.35) (end 12.7 3.81) (layer B.SilkS) (width 0.15)) (fp_line (start 15.24 6.35) (end 12.7 8.89) (layer B.SilkS) (width 0.15)) (fp_text user OUT+ (at 13.97 12.7 180) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) (fp_text user IN+ (at 3.81 12.7 180) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) (fp_text user OUT- (at 13.97 1.27 180) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) (fp_text user IN- (at 3.81 1.27 180) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) (fp_text user "[Install on other side]" (at 9.525 -0.635) (layer B.SilkS) (effects (font (size 0.8 0.8) (thickness 0.12) italic) (justify mirror)) ) (pad OUT thru_hole circle (at 18.7 13.97) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad OUT thru_hole circle (at 18.7 11.43) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad OUT_GND thru_hole circle (at 18.7 2.54) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad OUT_GND thru_hole circle (at 18.7 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad IN thru_hole circle (at 0 13.97) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad IN thru_hole circle (at 0 11.43) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad IN_GND thru_hole circle (at 0 2.54) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad IN_GND thru_hole circle (at 0 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) ) ================================================ FILE: electronics/lib/BuckModule.dcm ================================================ EESchema-DOCLIB Version 2.0 # #End Doc Library ================================================ FILE: electronics/lib/BuckModule.lib ================================================ EESchema-LIBRARY Version 2.4 #encoding utf-8 # # Buck # DEF Buck U 0 40 Y Y 1 F N F0 "U" 0 0 50 H V C CNN F1 "Buck" 0 0 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW S -350 150 400 -150 0 1 0 f X IN IN -450 100 100 R 50 50 1 1 P X IN_GND IN_GND -450 -100 100 R 50 50 1 1 P X OUT OUT 500 100 100 L 50 50 1 1 P X OUT_GND OUT_GND 500 -100 100 L 50 50 1 1 P ENDDRAW ENDDEF # #End Library ================================================ FILE: electronics/lib/CustomPower.dcm ================================================ EESchema-DOCLIB Version 2.0 # $CMP +12V_Monitored D Power flag, +12V K power-flag $ENDCMP # $CMP IOVCC D Power flag, +12V K power-flag $ENDCMP # #End Doc Library ================================================ FILE: electronics/lib/CustomPower.lib ================================================ EESchema-LIBRARY Version 2.4 #encoding utf-8 # # +12V_Monitored # DEF +12V_Monitored #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -150 50 H I C CNN F1 "+12V_Monitored" 0 140 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 2 0 1 0 -30 50 0 100 N P 2 0 1 0 0 0 0 100 N P 2 0 1 0 0 100 30 50 N X +12V_Monitored 1 0 0 0 U 50 50 1 1 W N ENDDRAW ENDDEF # # IOVCC # DEF IOVCC #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -150 50 H I C CNN F1 "IOVCC" 0 140 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 2 0 1 0 -30 50 0 100 N P 2 0 1 0 0 0 0 100 N P 2 0 1 0 0 100 30 50 N X IOVCC 1 0 0 0 U 50 50 1 1 W N ENDDRAW ENDDEF # #End Library ================================================ FILE: electronics/lib/CustomSymbols.pretty/PolarityCenterPositive.kicad_mod ================================================ (module PolarityCenterPositive (layer F.Cu) (tedit 5B69365B) (fp_text reference REF** (at 0 -3.175) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value PolarityCenterPositive (at 0 -3.302) (layer F.Fab) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_circle (center 0 0) (end 0 -0.127) (layer F.SilkS) (width 0.2)) (fp_circle (center 0 0) (end 0 -0.254) (layer F.SilkS) (width 0.2)) (fp_line (start 2.54 -0.381) (end 2.54 0.381) (layer F.SilkS) (width 0.2)) (fp_line (start 2.159 0) (end 2.921 0) (layer F.SilkS) (width 0.2)) (fp_line (start -2.921 0) (end -2.159 0) (layer F.SilkS) (width 0.2)) (fp_line (start 1.778 0) (end 0 0) (layer F.SilkS) (width 0.2)) (fp_line (start -1.778 0) (end -0.762 0) (layer F.SilkS) (width 0.2)) (fp_circle (center -2.54 0) (end -3.302 0) (layer F.SilkS) (width 0.2)) (fp_circle (center 2.54 0) (end 3.302 0) (layer F.SilkS) (width 0.2)) (fp_arc (start 0 0) (end 0.538815 0.538815) (angle 270) (layer F.SilkS) (width 0.2)) ) ================================================ FILE: electronics/lib/DML3006LFDS.dcm ================================================ EESchema-DOCLIB Version 2.0 # #End Doc Library ================================================ FILE: electronics/lib/DML3006LFDS.lib ================================================ EESchema-LIBRARY Version 2.4 #encoding utf-8 # # DML3006LFDS # DEF DML3006LFDS U 0 40 Y Y 1 F N F0 "U" -350 300 50 H V C CNN F1 "DML3006LFDS" -350 400 50 H V C CNN F2 "" 550 -150 50 H I C CNN F3 "" 550 -150 50 H I C CNN DRAW S -300 250 300 -250 0 1 0 f X VIN 1 -400 150 100 R 50 50 1 1 W X EN 2 -400 50 100 R 50 50 1 1 I X VCC 3 -400 -50 100 R 50 50 1 1 W X GND 4 -400 -150 100 R 50 50 1 1 W X BLEED 5 400 -150 100 L 50 50 1 1 P X PG 6 400 -50 100 L 50 50 1 1 C X VOUT 7 400 50 100 L 50 50 1 1 P X VOUT 8 400 150 100 L 50 50 1 1 w X VIN 9 0 350 100 D 50 50 1 1 W ENDDRAW ENDDEF # #End Library ================================================ FILE: electronics/lib/Dummy.pretty/Dummy.kicad_mod ================================================ (module Dummy (layer F.Cu) (tedit 606FAF91) (attr virtual) (fp_text reference REF** (at 0 0.5) (layer Cmts.User) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value Dummy (at 0 -0.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text user "(BOM Only)" (at 0 1.905) (layer Cmts.User) (effects (font (size 1 1) (thickness 0.15))) ) ) ================================================ FILE: electronics/lib/ESP32.pretty/D1_32.kicad_mod ================================================ (module D1_32 (layer F.Cu) (tedit 5FB222F8) (fp_text reference REF** (at 13.97 1.27) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value D1_32 (at 13.97 -0.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 1 thru_hole circle (at 0 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 2 thru_hole circle (at 2.54 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 3 thru_hole circle (at 0 2.54) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 4 thru_hole circle (at 2.54 2.54) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 5 thru_hole circle (at 0 5.08) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 6 thru_hole circle (at 2.54 5.08) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 7 thru_hole circle (at 0 7.62) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 8 thru_hole circle (at 2.54 7.62) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 9 thru_hole circle (at 0 10.16) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 10 thru_hole circle (at 2.54 10.16) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 11 thru_hole circle (at 0 12.7) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 12 thru_hole circle (at 2.54 12.7) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 13 thru_hole circle (at 0 15.24) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 14 thru_hole circle (at 2.54 15.24) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 15 thru_hole circle (at 0 17.78) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 16 thru_hole circle (at 2.54 17.78) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 17 thru_hole circle (at 0 20.32) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 18 thru_hole circle (at 2.54 20.32) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 19 thru_hole circle (at 0 22.86) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 20 thru_hole circle (at 2.54 22.86) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 21 thru_hole circle (at 27.94 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 22 thru_hole circle (at 25.4 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 23 thru_hole circle (at 27.94 2.54) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 24 thru_hole circle (at 25.4 2.54) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 25 thru_hole circle (at 27.94 5.08) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 26 thru_hole circle (at 25.4 5.08) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 27 thru_hole circle (at 27.94 7.62) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 28 thru_hole circle (at 25.4 7.62) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 29 thru_hole circle (at 27.94 10.16) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 30 thru_hole circle (at 25.4 10.16) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 31 thru_hole circle (at 27.94 12.7) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 32 thru_hole circle (at 25.4 12.7) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 33 thru_hole circle (at 27.94 15.24) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 34 thru_hole circle (at 25.4 15.24) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 35 thru_hole circle (at 27.94 17.78) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 36 thru_hole circle (at 25.4 17.78) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 37 thru_hole circle (at 27.94 20.32) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 38 thru_hole circle (at 25.4 20.32) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 39 thru_hole circle (at 27.94 22.86) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 40 thru_hole circle (at 25.4 22.86) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) ) ================================================ FILE: electronics/lib/ESP32.pretty/T-DISPLAY.kicad_mod ================================================ (module T-DISPLAY (layer F.Cu) (tedit 607149BD) (fp_text reference REF** (at 11.43 -1.27) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value T-DISPLAY (at 11.43 -5.08) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 22.86 0) (end 26.67 -3.81) (layer F.Fab) (width 0.12)) (fp_line (start 19.05 0) (end 26.67 -7.62) (layer F.Fab) (width 0.12)) (fp_line (start 15.24 0) (end 26.67 -11.43) (layer F.Fab) (width 0.12)) (fp_line (start 22.86 -11.43) (end 11.43 0) (layer F.Fab) (width 0.12)) (fp_line (start 7.62 0) (end 19.05 -11.43) (layer F.Fab) (width 0.12)) (fp_line (start 3.81 0) (end 15.24 -11.43) (layer F.Fab) (width 0.12)) (fp_line (start 0 0) (end 11.43 -11.43) (layer F.Fab) (width 0.12)) (fp_line (start -3.81 0) (end 7.62 -11.43) (layer F.Fab) (width 0.12)) (fp_line (start -3.81 -3.81) (end 3.81 -11.43) (layer F.Fab) (width 0.12)) (fp_line (start -3.81 -7.62) (end 0 -11.43) (layer F.Fab) (width 0.12)) (fp_line (start 26.67 0) (end -3.81 0) (layer F.Fab) (width 0.12)) (fp_line (start 26.67 -11.43) (end 26.67 0) (layer F.Fab) (width 0.12)) (fp_line (start -3.81 -11.43) (end 26.67 -11.43) (layer F.Fab) (width 0.12)) (fp_line (start -3.81 0) (end -3.81 -11.43) (layer F.Fab) (width 0.12)) (fp_line (start -1.11 -7.54) (end 23.98 -7.54) (layer F.SilkS) (width 0.15)) (fp_line (start -1.11 -3.15) (end 23.98 -3.15) (layer F.SilkS) (width 0.15)) (fp_line (start -1.11 -7.54) (end -1.11 43.95) (layer F.SilkS) (width 0.15)) (fp_line (start 23.98 -7.54) (end 23.98 43.95) (layer F.SilkS) (width 0.15)) (fp_line (start -1.11 43.95) (end 23.98 43.95) (layer F.SilkS) (width 0.15)) (fp_line (start 3.935 83.95) (end 18.935 83.95) (layer F.Fab) (width 0.12)) (fp_text user CABLE (at 10.795 63.754 -90) (layer F.Fab) (effects (font (size 10 8) (thickness 0.15))) ) (pad 1 thru_hole circle (at 0 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 2 thru_hole circle (at 0 2.54) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 3 thru_hole circle (at 0 5.08) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 4 thru_hole circle (at 0 7.62) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 5 thru_hole circle (at 0 10.16) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 6 thru_hole circle (at 0 12.7) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 7 thru_hole circle (at 0 15.24) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 8 thru_hole circle (at 0 17.78) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 9 thru_hole circle (at 0 20.32) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 10 thru_hole circle (at 0 22.86) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 11 thru_hole circle (at 0 25.4) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 12 thru_hole circle (at 0 27.94) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 13 thru_hole circle (at 22.86 27.94) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 14 thru_hole circle (at 22.86 25.4) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 15 thru_hole circle (at 22.86 22.86) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 16 thru_hole circle (at 22.86 20.32) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 17 thru_hole circle (at 22.86 17.78) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 18 thru_hole circle (at 22.86 15.24) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 19 thru_hole circle (at 22.86 12.7) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 20 thru_hole circle (at 22.86 10.16) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 21 thru_hole circle (at 22.86 7.62) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 22 thru_hole circle (at 22.86 5.08) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 23 thru_hole circle (at 22.86 2.54) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 24 thru_hole circle (at 22.86 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (model ../lib/TTGO.models/TTGO_TDisplay.step (offset (xyz 0 0 10.5)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) (model ${KISYS3DMOD}/Connector_PinSocket_2.54mm.3dshapes/PinSocket_1x12_P2.54mm_Vertical.step (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) (model ${KISYS3DMOD}/Connector_PinSocket_2.54mm.3dshapes/PinSocket_1x12_P2.54mm_Vertical.step (offset (xyz 22.86 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) (model ${KISYS3DMOD}/Connector_PinHeader_2.54mm.3dshapes/PinHeader_1x12_P2.54mm_Vertical.step (offset (xyz 0 0 10)) (scale (xyz 1 1 1)) (rotate (xyz 0 180 0)) ) (model ${KISYS3DMOD}/Connector_PinHeader_2.54mm.3dshapes/PinHeader_1x12_P2.54mm_Vertical.step (offset (xyz 22.86 0 10)) (scale (xyz 1 1 1)) (rotate (xyz 0 180 0)) ) ) ================================================ FILE: electronics/lib/ESP32.pretty/T-DISPLAY_extra_pins.kicad_mod ================================================ (module T-DISPLAY_extra_pins (layer F.Cu) (tedit 61706544) (fp_text reference REF** (at 11.43 -1.27) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value T-DISPLAY_extra_pins (at 11.43 -5.08) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 3.935 83.95) (end 18.935 83.95) (layer F.Fab) (width 0.12)) (fp_line (start -1.11 43.95) (end 23.98 43.95) (layer F.SilkS) (width 0.15)) (fp_line (start 23.98 -7.54) (end 23.98 43.95) (layer F.SilkS) (width 0.15)) (fp_line (start -1.11 -7.54) (end -1.11 43.95) (layer F.SilkS) (width 0.15)) (fp_line (start -1.11 -3.15) (end 23.98 -3.15) (layer F.SilkS) (width 0.15)) (fp_line (start -1.11 -7.54) (end 23.98 -7.54) (layer F.SilkS) (width 0.15)) (fp_line (start -3.81 0) (end -3.81 -11.43) (layer F.Fab) (width 0.12)) (fp_line (start -3.81 -11.43) (end 26.67 -11.43) (layer F.Fab) (width 0.12)) (fp_line (start 26.67 -11.43) (end 26.67 0) (layer F.Fab) (width 0.12)) (fp_line (start 26.67 0) (end -3.81 0) (layer F.Fab) (width 0.12)) (fp_line (start -3.81 -7.62) (end 0 -11.43) (layer F.Fab) (width 0.12)) (fp_line (start -3.81 -3.81) (end 3.81 -11.43) (layer F.Fab) (width 0.12)) (fp_line (start -3.81 0) (end 7.62 -11.43) (layer F.Fab) (width 0.12)) (fp_line (start 0 0) (end 11.43 -11.43) (layer F.Fab) (width 0.12)) (fp_line (start 3.81 0) (end 15.24 -11.43) (layer F.Fab) (width 0.12)) (fp_line (start 7.62 0) (end 19.05 -11.43) (layer F.Fab) (width 0.12)) (fp_line (start 22.86 -11.43) (end 11.43 0) (layer F.Fab) (width 0.12)) (fp_line (start 15.24 0) (end 26.67 -11.43) (layer F.Fab) (width 0.12)) (fp_line (start 19.05 0) (end 26.67 -7.62) (layer F.Fab) (width 0.12)) (fp_line (start 22.86 0) (end 26.67 -3.81) (layer F.Fab) (width 0.12)) (fp_text user CABLE (at 10.795 63.754 -90) (layer F.Fab) (effects (font (size 10 8) (thickness 0.15))) ) (pad 1 thru_hole circle (at 0 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 2 thru_hole circle (at 0 2.54) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 3 thru_hole circle (at 0 5.08) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 4 thru_hole circle (at 0 7.62) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 5 thru_hole circle (at 0 10.16) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 6 thru_hole circle (at 0 12.7) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 7 thru_hole circle (at 0 15.24) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 8 thru_hole circle (at 0 17.78) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 9 thru_hole circle (at 0 20.32) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 10 thru_hole circle (at 0 22.86) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 11 thru_hole circle (at 0 25.4) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 12 thru_hole circle (at 0 27.94) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 13 thru_hole circle (at 22.86 27.94) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 14 thru_hole circle (at 22.86 25.4) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 15 thru_hole circle (at 22.86 22.86) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 16 thru_hole circle (at 22.86 20.32) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 17 thru_hole circle (at 22.86 17.78) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 18 thru_hole circle (at 22.86 15.24) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 19 thru_hole circle (at 22.86 12.7) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 20 thru_hole circle (at 22.86 10.16) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 21 thru_hole circle (at 22.86 7.62) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 22 thru_hole circle (at 22.86 5.08) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 23 thru_hole circle (at 22.86 2.54) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 24 thru_hole circle (at 22.86 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 7 thru_hole circle (at 2.54 15.24) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 11 thru_hole circle (at 2.54 25.4) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 9 thru_hole circle (at 2.54 20.32) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 12 thru_hole circle (at 2.54 27.94) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 5 thru_hole circle (at 2.54 10.16) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 4 thru_hole circle (at 2.54 7.62) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 3 thru_hole circle (at 2.54 5.08) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 2 thru_hole circle (at 2.54 2.54) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 1 thru_hole circle (at 2.54 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 6 thru_hole circle (at 2.54 12.7) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 10 thru_hole circle (at 2.54 22.86) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 8 thru_hole circle (at 2.54 17.78) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 23 thru_hole circle (at 20.32 2.54) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 13 thru_hole circle (at 20.32 27.94) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 15 thru_hole circle (at 20.32 22.86) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 18 thru_hole circle (at 20.32 15.24) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 24 thru_hole circle (at 20.32 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 14 thru_hole circle (at 20.32 25.4) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 16 thru_hole circle (at 20.32 20.32) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 17 thru_hole circle (at 20.32 17.78) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 20 thru_hole circle (at 20.32 10.16) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 19 thru_hole circle (at 20.32 12.7) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 21 thru_hole circle (at 20.32 7.62) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 22 thru_hole circle (at 20.32 5.08) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (model ../lib/TTGO.models/TTGO_TDisplay.step (offset (xyz 0 0 10.5)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) (model ${KISYS3DMOD}/Connector_PinSocket_2.54mm.3dshapes/PinSocket_1x12_P2.54mm_Vertical.step (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) (model ${KISYS3DMOD}/Connector_PinSocket_2.54mm.3dshapes/PinSocket_1x12_P2.54mm_Vertical.step (offset (xyz 22.86 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) (model ${KISYS3DMOD}/Connector_PinHeader_2.54mm.3dshapes/PinHeader_1x12_P2.54mm_Vertical.step (offset (xyz 0 0 10)) (scale (xyz 1 1 1)) (rotate (xyz 0 180 0)) ) (model ${KISYS3DMOD}/Connector_PinHeader_2.54mm.3dshapes/PinHeader_1x12_P2.54mm_Vertical.step (offset (xyz 22.86 0 10)) (scale (xyz 1 1 1)) (rotate (xyz 0 180 0)) ) ) ================================================ FILE: electronics/lib/ESP32.pretty/T-DISPLAY_extra_pins_labeled.kicad_mod ================================================ (module T-DISPLAY_extra_pins_labeled (layer F.Cu) (tedit 617F1475) (fp_text reference REF** (at 11.43 -1.27) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value T-DISPLAY_extra_pins_labeled (at 11.43 -5.08) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 3.935 83.95) (end 18.935 83.95) (layer F.Fab) (width 0.12)) (fp_line (start -1.11 43.95) (end 23.98 43.95) (layer F.SilkS) (width 0.15)) (fp_line (start 23.98 -7.54) (end 23.98 43.95) (layer F.SilkS) (width 0.15)) (fp_line (start -1.11 -7.54) (end -1.11 43.95) (layer F.SilkS) (width 0.15)) (fp_line (start -1.11 -3.15) (end 23.98 -3.15) (layer F.SilkS) (width 0.15)) (fp_line (start -1.11 -7.54) (end 23.98 -7.54) (layer F.SilkS) (width 0.15)) (fp_line (start -3.81 0) (end -3.81 -11.43) (layer F.Fab) (width 0.12)) (fp_line (start -3.81 -11.43) (end 26.67 -11.43) (layer F.Fab) (width 0.12)) (fp_line (start 26.67 -11.43) (end 26.67 0) (layer F.Fab) (width 0.12)) (fp_line (start 26.67 0) (end -3.81 0) (layer F.Fab) (width 0.12)) (fp_line (start -3.81 -7.62) (end 0 -11.43) (layer F.Fab) (width 0.12)) (fp_line (start -3.81 -3.81) (end 3.81 -11.43) (layer F.Fab) (width 0.12)) (fp_line (start -3.81 0) (end 7.62 -11.43) (layer F.Fab) (width 0.12)) (fp_line (start 0 0) (end 11.43 -11.43) (layer F.Fab) (width 0.12)) (fp_line (start 3.81 0) (end 15.24 -11.43) (layer F.Fab) (width 0.12)) (fp_line (start 7.62 0) (end 19.05 -11.43) (layer F.Fab) (width 0.12)) (fp_line (start 22.86 -11.43) (end 11.43 0) (layer F.Fab) (width 0.12)) (fp_line (start 15.24 0) (end 26.67 -11.43) (layer F.Fab) (width 0.12)) (fp_line (start 19.05 0) (end 26.67 -7.62) (layer F.Fab) (width 0.12)) (fp_line (start 22.86 0) (end 26.67 -3.81) (layer F.Fab) (width 0.12)) (fp_text user CABLE (at 10.795 63.754 -90) (layer F.Fab) (effects (font (size 10 8) (thickness 0.15))) ) (fp_text user G (at 3.81 0) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left)) ) (fp_text user G (at 3.81 2.54) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left)) ) (fp_text user 21 (at 3.81 5.08) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left)) ) (fp_text user 22 (at 3.81 7.62) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left)) ) (fp_text user 17 (at 3.81 10.16) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left)) ) (fp_text user 2 (at 3.81 12.7) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left)) ) (fp_text user 15 (at 3.81 15.24) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left)) ) (fp_text user 13 (at 3.81 17.78) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left)) ) (fp_text user 12 (at 3.81 20.32) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left)) ) (fp_text user G (at 3.81 22.86) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left)) ) (fp_text user G (at 3.81 25.4) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left)) ) (fp_text user 3V (at 3.81 27.94) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left)) ) (fp_text user 3V (at 19.05 0) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right)) ) (fp_text user 36 (at 19.05 2.54) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right)) ) (fp_text user 37 (at 19.05 5.08) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right)) ) (fp_text user 38 (at 19.05 7.62) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right)) ) (fp_text user 39 (at 19.05 10.16) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right)) ) (fp_text user 32 (at 19.05 12.7) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right)) ) (fp_text user 33 (at 19.05 15.24) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right)) ) (fp_text user 25 (at 19.05 17.78) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right)) ) (fp_text user 26 (at 19.05 20.32) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right)) ) (fp_text user 27 (at 19.05 22.86) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right)) ) (fp_text user G (at 19.05 25.4) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right)) ) (fp_text user 5V (at 19.05 27.94) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right)) ) (fp_text user G (at 3.81 0) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right mirror)) ) (fp_text user 13 (at 3.81 17.78) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right mirror)) ) (fp_text user 15 (at 3.81 15.24) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right mirror)) ) (fp_text user 3V (at 3.81 27.94) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right mirror)) ) (fp_text user 12 (at 3.81 20.32) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right mirror)) ) (fp_text user G (at 3.81 2.54) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right mirror)) ) (fp_text user G (at 3.81 25.4) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right mirror)) ) (fp_text user 21 (at 3.81 5.08) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right mirror)) ) (fp_text user 17 (at 3.81 10.16) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right mirror)) ) (fp_text user 22 (at 3.81 7.62) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right mirror)) ) (fp_text user G (at 3.81 22.86) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right mirror)) ) (fp_text user 2 (at 3.81 12.7) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right mirror)) ) (fp_text user 3V (at 19.05 0) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left mirror)) ) (fp_text user 27 (at 19.05 22.86) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left mirror)) ) (fp_text user 32 (at 19.05 12.7) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left mirror)) ) (fp_text user 39 (at 19.05 10.16) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left mirror)) ) (fp_text user 33 (at 19.05 15.24) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left mirror)) ) (fp_text user 37 (at 19.05 5.08) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left mirror)) ) (fp_text user 26 (at 19.05 20.32) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left mirror)) ) (fp_text user 36 (at 19.05 2.54) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left mirror)) ) (fp_text user 5V (at 19.05 27.94) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left mirror)) ) (fp_text user G (at 19.05 25.4) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left mirror)) ) (fp_text user 25 (at 19.05 17.78) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left mirror)) ) (fp_text user 38 (at 19.05 7.62) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left mirror)) ) (pad 1 thru_hole circle (at 0 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 2 thru_hole circle (at 0 2.54) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 3 thru_hole circle (at 0 5.08) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 4 thru_hole circle (at 0 7.62) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 5 thru_hole circle (at 0 10.16) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 6 thru_hole circle (at 0 12.7) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 7 thru_hole circle (at 0 15.24) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 8 thru_hole circle (at 0 17.78) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 9 thru_hole circle (at 0 20.32) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 10 thru_hole circle (at 0 22.86) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 11 thru_hole circle (at 0 25.4) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 12 thru_hole circle (at 0 27.94) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 13 thru_hole circle (at 22.86 27.94) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 14 thru_hole circle (at 22.86 25.4) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 15 thru_hole circle (at 22.86 22.86) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 16 thru_hole circle (at 22.86 20.32) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 17 thru_hole circle (at 22.86 17.78) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 18 thru_hole circle (at 22.86 15.24) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 19 thru_hole circle (at 22.86 12.7) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 20 thru_hole circle (at 22.86 10.16) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 21 thru_hole circle (at 22.86 7.62) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 22 thru_hole circle (at 22.86 5.08) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 23 thru_hole circle (at 22.86 2.54) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 24 thru_hole circle (at 22.86 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 7 thru_hole circle (at 2.54 15.24) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 11 thru_hole circle (at 2.54 25.4) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 9 thru_hole circle (at 2.54 20.32) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 12 thru_hole circle (at 2.54 27.94) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 5 thru_hole circle (at 2.54 10.16) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 4 thru_hole circle (at 2.54 7.62) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 3 thru_hole circle (at 2.54 5.08) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 2 thru_hole circle (at 2.54 2.54) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 1 thru_hole circle (at 2.54 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 6 thru_hole circle (at 2.54 12.7) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 10 thru_hole circle (at 2.54 22.86) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 8 thru_hole circle (at 2.54 17.78) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 23 thru_hole circle (at 20.32 2.54) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 13 thru_hole circle (at 20.32 27.94) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 15 thru_hole circle (at 20.32 22.86) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 18 thru_hole circle (at 20.32 15.24) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 24 thru_hole circle (at 20.32 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 14 thru_hole circle (at 20.32 25.4) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 16 thru_hole circle (at 20.32 20.32) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 17 thru_hole circle (at 20.32 17.78) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 20 thru_hole circle (at 20.32 10.16) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 19 thru_hole circle (at 20.32 12.7) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 21 thru_hole circle (at 20.32 7.62) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 22 thru_hole circle (at 20.32 5.08) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (model ../lib/TTGO.models/TTGO_TDisplay.step (offset (xyz 0 0 10.5)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) (model ${KISYS3DMOD}/Connector_PinSocket_2.54mm.3dshapes/PinSocket_1x12_P2.54mm_Vertical.step (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) (model ${KISYS3DMOD}/Connector_PinSocket_2.54mm.3dshapes/PinSocket_1x12_P2.54mm_Vertical.step (offset (xyz 22.86 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) (model ${KISYS3DMOD}/Connector_PinHeader_2.54mm.3dshapes/PinHeader_1x12_P2.54mm_Vertical.step (offset (xyz 0 0 10)) (scale (xyz 1 1 1)) (rotate (xyz 0 180 0)) ) (model ${KISYS3DMOD}/Connector_PinHeader_2.54mm.3dshapes/PinHeader_1x12_P2.54mm_Vertical.step (offset (xyz 22.86 0 10)) (scale (xyz 1 1 1)) (rotate (xyz 0 180 0)) ) ) ================================================ FILE: electronics/lib/ESP32.pretty/T-DISPLAY_extra_pins_labeled_double.kicad_mod ================================================ (module T-DISPLAY_extra_pins_labeled_double (layer F.Cu) (tedit 617B751D) (fp_text reference REF** (at 11.43 -1.27) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value T-DISPLAY_extra_pins_labeled_double (at 11.43 -5.08) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 22.86 0) (end 26.67 -3.81) (layer F.Fab) (width 0.12)) (fp_line (start 19.05 0) (end 26.67 -7.62) (layer F.Fab) (width 0.12)) (fp_line (start 15.24 0) (end 26.67 -11.43) (layer F.Fab) (width 0.12)) (fp_line (start 22.86 -11.43) (end 11.43 0) (layer F.Fab) (width 0.12)) (fp_line (start 7.62 0) (end 19.05 -11.43) (layer F.Fab) (width 0.12)) (fp_line (start 3.81 0) (end 15.24 -11.43) (layer F.Fab) (width 0.12)) (fp_line (start 0 0) (end 11.43 -11.43) (layer F.Fab) (width 0.12)) (fp_line (start -3.81 0) (end 7.62 -11.43) (layer F.Fab) (width 0.12)) (fp_line (start -3.81 -3.81) (end 3.81 -11.43) (layer F.Fab) (width 0.12)) (fp_line (start -3.81 -7.62) (end 0 -11.43) (layer F.Fab) (width 0.12)) (fp_line (start 26.67 0) (end -3.81 0) (layer F.Fab) (width 0.12)) (fp_line (start 26.67 -11.43) (end 26.67 0) (layer F.Fab) (width 0.12)) (fp_line (start -3.81 -11.43) (end 26.67 -11.43) (layer F.Fab) (width 0.12)) (fp_line (start -3.81 0) (end -3.81 -11.43) (layer F.Fab) (width 0.12)) (fp_line (start -1.11 -7.54) (end 23.98 -7.54) (layer F.SilkS) (width 0.15)) (fp_line (start -1.11 -3.15) (end 23.98 -3.15) (layer F.SilkS) (width 0.15)) (fp_line (start -1.11 -7.54) (end -1.11 43.95) (layer F.SilkS) (width 0.15)) (fp_line (start 23.98 -7.54) (end 23.98 43.95) (layer F.SilkS) (width 0.15)) (fp_line (start -1.11 43.95) (end 23.98 43.95) (layer F.SilkS) (width 0.15)) (fp_line (start 3.935 83.95) (end 18.935 83.95) (layer F.Fab) (width 0.12)) (fp_text user CABLE (at 10.795 63.754 -90) (layer F.Fab) (effects (font (size 10 8) (thickness 0.15))) ) (fp_text user G (at 3.81 0) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left)) ) (fp_text user G (at 3.81 2.54) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left)) ) (fp_text user 21 (at 3.81 5.08) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left)) ) (fp_text user 22 (at 3.81 7.62) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left)) ) (fp_text user 17 (at 3.81 10.16) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left)) ) (fp_text user 2 (at 3.81 12.7) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left)) ) (fp_text user 15 (at 3.81 15.24) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left)) ) (fp_text user 13 (at 3.81 17.78) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left)) ) (fp_text user 12 (at 3.81 20.32) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left)) ) (fp_text user G (at 3.81 22.86) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left)) ) (fp_text user G (at 3.81 25.4) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left)) ) (fp_text user 3V (at 3.81 27.94) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left)) ) (fp_text user 3V (at 19.05 0) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right)) ) (fp_text user 36 (at 19.05 2.54) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right)) ) (fp_text user 37 (at 19.05 5.08) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right)) ) (fp_text user 38 (at 19.05 7.62) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right)) ) (fp_text user 39 (at 19.05 10.16) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right)) ) (fp_text user 32 (at 19.05 12.7) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right)) ) (fp_text user 33 (at 19.05 15.24) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right)) ) (fp_text user 25 (at 19.05 17.78) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right)) ) (fp_text user 26 (at 19.05 20.32) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right)) ) (fp_text user 27 (at 19.05 22.86) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right)) ) (fp_text user G (at 19.05 25.4) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right)) ) (fp_text user 5V (at 19.05 27.94) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right)) ) (fp_text user G (at 3.81 0) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right mirror)) ) (fp_text user 13 (at 3.81 17.78) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right mirror)) ) (fp_text user 15 (at 3.81 15.24) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right mirror)) ) (fp_text user 3V (at 3.81 27.94) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right mirror)) ) (fp_text user 12 (at 3.81 20.32) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right mirror)) ) (fp_text user G (at 3.81 2.54) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right mirror)) ) (fp_text user G (at 3.81 25.4) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right mirror)) ) (fp_text user 21 (at 3.81 5.08) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right mirror)) ) (fp_text user 17 (at 3.81 10.16) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right mirror)) ) (fp_text user 22 (at 3.81 7.62) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right mirror)) ) (fp_text user G (at 3.81 22.86) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right mirror)) ) (fp_text user 2 (at 3.81 12.7) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right mirror)) ) (fp_text user 3V (at 19.05 0) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left mirror)) ) (fp_text user 27 (at 19.05 22.86) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left mirror)) ) (fp_text user 32 (at 19.05 12.7) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left mirror)) ) (fp_text user 39 (at 19.05 10.16) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left mirror)) ) (fp_text user 33 (at 19.05 15.24) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left mirror)) ) (fp_text user 37 (at 19.05 5.08) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left mirror)) ) (fp_text user 26 (at 19.05 20.32) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left mirror)) ) (fp_text user 36 (at 19.05 2.54) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left mirror)) ) (fp_text user 5V (at 19.05 27.94) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left mirror)) ) (fp_text user G (at 19.05 25.4) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left mirror)) ) (fp_text user 25 (at 19.05 17.78) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left mirror)) ) (fp_text user 38 (at 19.05 7.62) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left mirror)) ) (fp_text user G (at -3.81 0) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right)) ) (fp_text user G (at -3.81 2.54) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right)) ) (fp_text user 21 (at -3.81 5.08) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right)) ) (fp_text user 22 (at -3.81 7.62) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right)) ) (fp_text user 17 (at -3.81 10.16) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right)) ) (fp_text user 2 (at -3.81 12.7) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right)) ) (fp_text user 15 (at -3.81 15.24) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right)) ) (fp_text user 13 (at -3.81 17.78) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right)) ) (fp_text user 12 (at -3.81 20.32) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right)) ) (fp_text user G (at -3.81 22.86) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right)) ) (fp_text user G (at -3.81 25.4) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right)) ) (fp_text user 3V (at -3.81 27.94) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right)) ) (fp_text user G (at -3.81 0) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left mirror)) ) (fp_text user G (at -3.81 2.54) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left mirror)) ) (fp_text user 21 (at -3.81 5.08) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left mirror)) ) (fp_text user 22 (at -3.81 7.62) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left mirror)) ) (fp_text user 17 (at -3.81 10.16) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left mirror)) ) (fp_text user 2 (at -3.81 12.7) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left mirror)) ) (fp_text user 15 (at -3.81 15.24) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left mirror)) ) (fp_text user 13 (at -3.81 17.78) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left mirror)) ) (fp_text user 12 (at -3.81 20.32) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left mirror)) ) (fp_text user G (at -3.81 22.86) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left mirror)) ) (fp_text user G (at -3.81 25.4) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left mirror)) ) (fp_text user 3V (at -3.81 27.94) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left mirror)) ) (fp_text user 3V (at 26.67 0) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left)) ) (fp_text user 36 (at 26.67 2.54) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left)) ) (fp_text user 37 (at 26.67 5.08) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left)) ) (fp_text user 38 (at 26.67 7.62) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left)) ) (fp_text user 39 (at 26.67 10.16) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left)) ) (fp_text user 32 (at 26.67 12.7) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left)) ) (fp_text user 33 (at 26.67 15.24) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left)) ) (fp_text user 25 (at 26.67 17.78) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left)) ) (fp_text user 26 (at 26.67 20.32) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left)) ) (fp_text user 27 (at 26.67 22.86) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left)) ) (fp_text user G (at 26.67 25.4) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left)) ) (fp_text user 5V (at 26.67 27.94) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify left)) ) (fp_text user 3V (at 26.67 0) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right mirror)) ) (fp_text user 36 (at 26.67 2.54) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right mirror)) ) (fp_text user 37 (at 26.67 5.08) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right mirror)) ) (fp_text user 38 (at 26.67 7.62) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right mirror)) ) (fp_text user 39 (at 26.67 10.16) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right mirror)) ) (fp_text user 32 (at 26.67 12.7) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right mirror)) ) (fp_text user 33 (at 26.67 15.24) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right mirror)) ) (fp_text user 25 (at 26.67 17.78) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right mirror)) ) (fp_text user 26 (at 26.67 20.32) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right mirror)) ) (fp_text user 27 (at 26.67 22.86) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right mirror)) ) (fp_text user G (at 26.67 25.4) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right mirror)) ) (fp_text user 5V (at 26.67 27.94) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.12)) (justify right mirror)) ) (pad 1 thru_hole circle (at 0 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 2 thru_hole circle (at 0 2.54) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 3 thru_hole circle (at 0 5.08) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 4 thru_hole circle (at 0 7.62) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 5 thru_hole circle (at 0 10.16) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 6 thru_hole circle (at 0 12.7) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 7 thru_hole circle (at 0 15.24) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 8 thru_hole circle (at 0 17.78) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 9 thru_hole circle (at 0 20.32) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 10 thru_hole circle (at 0 22.86) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 11 thru_hole circle (at 0 25.4) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 12 thru_hole circle (at 0 27.94) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 13 thru_hole circle (at 22.86 27.94) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 14 thru_hole circle (at 22.86 25.4) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 15 thru_hole circle (at 22.86 22.86) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 16 thru_hole circle (at 22.86 20.32) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 17 thru_hole circle (at 22.86 17.78) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 18 thru_hole circle (at 22.86 15.24) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 19 thru_hole circle (at 22.86 12.7) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 20 thru_hole circle (at 22.86 10.16) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 21 thru_hole circle (at 22.86 7.62) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 22 thru_hole circle (at 22.86 5.08) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 23 thru_hole circle (at 22.86 2.54) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 24 thru_hole circle (at 22.86 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 7 thru_hole circle (at 2.54 15.24) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 11 thru_hole circle (at 2.54 25.4) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 9 thru_hole circle (at 2.54 20.32) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 12 thru_hole circle (at 2.54 27.94) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 5 thru_hole circle (at 2.54 10.16) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 4 thru_hole circle (at 2.54 7.62) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 3 thru_hole circle (at 2.54 5.08) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 2 thru_hole circle (at 2.54 2.54) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 1 thru_hole circle (at 2.54 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 6 thru_hole circle (at 2.54 12.7) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 10 thru_hole circle (at 2.54 22.86) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 8 thru_hole circle (at 2.54 17.78) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 23 thru_hole circle (at 20.32 2.54) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 13 thru_hole circle (at 20.32 27.94) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 15 thru_hole circle (at 20.32 22.86) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 18 thru_hole circle (at 20.32 15.24) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 24 thru_hole circle (at 20.32 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 14 thru_hole circle (at 20.32 25.4) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 16 thru_hole circle (at 20.32 20.32) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 17 thru_hole circle (at 20.32 17.78) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 20 thru_hole circle (at 20.32 10.16) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 19 thru_hole circle (at 20.32 12.7) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 21 thru_hole circle (at 20.32 7.62) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 22 thru_hole circle (at 20.32 5.08) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 1 thru_hole circle (at -2.54 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 7 thru_hole circle (at -2.54 15.24) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 12 thru_hole circle (at -2.54 27.94) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 9 thru_hole circle (at -2.54 20.32) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 5 thru_hole circle (at -2.54 10.16) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 6 thru_hole circle (at -2.54 12.7) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 3 thru_hole circle (at -2.54 5.08) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 8 thru_hole circle (at -2.54 17.78) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 2 thru_hole circle (at -2.54 2.54) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 4 thru_hole circle (at -2.54 7.62) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 11 thru_hole circle (at -2.54 25.4) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 10 thru_hole circle (at -2.54 22.86) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 16 thru_hole circle (at 25.4 20.32) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 15 thru_hole circle (at 25.4 22.86) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 13 thru_hole circle (at 25.4 27.94) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 17 thru_hole circle (at 25.4 17.78) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 24 thru_hole circle (at 25.4 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 21 thru_hole circle (at 25.4 7.62) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 19 thru_hole circle (at 25.4 12.7) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 14 thru_hole circle (at 25.4 25.4) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 18 thru_hole circle (at 25.4 15.24) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 23 thru_hole circle (at 25.4 2.54) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 20 thru_hole circle (at 25.4 10.16) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 22 thru_hole circle (at 25.4 5.08) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (model ../lib/TTGO.models/TTGO_TDisplay.step (offset (xyz 0 0 10.5)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) (model ${KISYS3DMOD}/Connector_PinSocket_2.54mm.3dshapes/PinSocket_1x12_P2.54mm_Vertical.step (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) (model ${KISYS3DMOD}/Connector_PinSocket_2.54mm.3dshapes/PinSocket_1x12_P2.54mm_Vertical.step (offset (xyz 22.86 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) (model ${KISYS3DMOD}/Connector_PinHeader_2.54mm.3dshapes/PinHeader_1x12_P2.54mm_Vertical.step (offset (xyz 0 0 10)) (scale (xyz 1 1 1)) (rotate (xyz 0 180 0)) ) (model ${KISYS3DMOD}/Connector_PinHeader_2.54mm.3dshapes/PinHeader_1x12_P2.54mm_Vertical.step (offset (xyz 22.86 0 10)) (scale (xyz 1 1 1)) (rotate (xyz 0 180 0)) ) ) ================================================ FILE: electronics/lib/ESP32Modules.dcm ================================================ EESchema-DOCLIB Version 2.0 # #End Doc Library ================================================ FILE: electronics/lib/ESP32Modules.lib ================================================ EESchema-LIBRARY Version 2.4 #encoding utf-8 # # D1_32 # DEF D1_32 U 0 40 Y Y 1 F N F0 "U" 0 1100 50 H V C CNN F1 "D1_32" 0 950 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C -310 -660 0 1 1 0 N C -260 -860 0 1 1 0 N C -260 -260 0 1 1 0 N C -210 -960 0 1 1 0 N C -110 -360 0 1 1 0 N C 90 640 0 1 1 0 N C 90 840 0 1 1 0 N C 190 -760 0 1 1 0 N C 240 -960 0 1 1 0 N C 290 -860 0 1 1 0 N C 290 -660 0 1 1 0 N C 290 -460 0 1 1 0 N C 290 -260 0 1 1 0 N C 340 1140 0 1 1 0 N S -550 1050 550 -1050 0 1 0 f P 2 0 1 0 -600 -850 -550 -850 N P 2 0 1 0 -600 -650 -550 -650 N P 2 0 1 0 -600 -450 -550 -450 N P 2 0 1 0 -600 -250 -550 -250 N P 2 0 1 0 -600 -50 -550 -50 N P 2 0 1 0 -600 150 -550 150 N P 2 0 1 0 -600 350 -550 350 N P 2 0 1 0 -600 550 -550 550 N P 2 0 1 0 -600 750 -550 750 N P 2 0 1 0 -600 950 -550 950 N P 2 0 1 0 600 -850 550 -850 N P 2 0 1 0 600 -650 550 -650 N P 2 0 1 0 600 -450 550 -450 N P 2 0 1 0 600 -250 550 -250 N P 2 0 1 0 600 -50 550 -50 N P 2 0 1 0 600 150 550 150 N P 2 0 1 0 600 350 550 350 N P 2 0 1 0 600 550 550 550 N P 2 0 1 0 600 750 550 750 N P 2 0 1 0 600 950 550 950 N P 4 0 1 0 -550 0 -500 -50 -550 -100 -550 0 F P 4 0 1 0 -550 400 -500 350 -550 300 -550 400 F P 4 0 1 0 -550 600 -500 550 -550 500 -550 600 F P 4 0 1 0 -550 700 -500 650 -550 600 -550 700 F P 2 1 1 0 -310 -640 -310 -650 N P 2 1 1 0 -260 -840 -260 -850 N P 2 1 1 0 -260 -840 -260 -850 N P 2 1 1 0 -260 -240 -260 -250 N P 2 1 1 0 -260 -240 -260 -250 N P 2 1 1 0 -210 -940 -210 -950 N P 2 1 1 0 -210 -940 -210 -950 N P 2 1 1 0 -110 -340 -110 -350 N P 2 1 1 0 90 660 90 650 N P 2 1 1 0 90 860 90 850 N P 2 1 1 0 190 -740 190 -750 N P 2 1 1 0 190 -740 190 -750 N P 2 1 1 0 240 -940 240 -950 N P 2 1 1 0 290 -840 290 -850 N P 2 1 1 0 290 -640 290 -650 N P 2 1 1 0 290 -640 290 -650 N P 2 1 1 0 290 -440 290 -450 N P 2 1 1 0 290 -240 290 -250 N P 2 1 1 0 340 1160 340 1150 N P 2 1 1 0 340 1160 340 1150 N P 4 1 1 0 -310 -620 -340 -670 -280 -670 -310 -620 N P 4 1 1 0 -260 -820 -290 -870 -230 -870 -260 -820 N P 4 1 1 0 -260 -820 -290 -870 -230 -870 -260 -820 N P 4 1 1 0 -260 -220 -290 -270 -230 -270 -260 -220 N P 4 1 1 0 -260 -220 -290 -270 -230 -270 -260 -220 N P 4 1 1 0 -210 -920 -240 -970 -180 -970 -210 -920 N P 4 1 1 0 -210 -920 -240 -970 -180 -970 -210 -920 N P 4 1 1 0 -110 -320 -140 -370 -80 -370 -110 -320 N P 4 1 1 0 90 680 60 630 120 630 90 680 N P 4 1 1 0 90 880 60 830 120 830 90 880 N P 4 1 1 0 190 -720 160 -770 220 -770 190 -720 N P 4 1 1 0 190 -720 160 -770 220 -770 190 -720 N P 4 1 1 0 240 -920 210 -970 270 -970 240 -920 N P 4 1 1 0 290 -820 260 -870 320 -870 290 -820 N P 4 1 1 0 290 -620 260 -670 320 -670 290 -620 N P 4 1 1 0 290 -620 260 -670 320 -670 290 -620 N P 4 1 1 0 290 -420 260 -470 320 -470 290 -420 N P 4 1 1 0 290 -220 260 -270 320 -270 290 -220 N P 4 1 1 0 340 1180 310 1130 370 1130 340 1180 N P 4 1 1 0 340 1180 310 1130 370 1130 340 1180 N X GND 1 -700 950 100 R 50 50 1 1 P X GPIO19/D6 10 -650 50 100 R 50 50 1 1 P X GPIO34 11 -700 -50 100 R 50 50 1 1 P X GPIO23/D7 12 -650 -150 100 R 50 50 1 1 P X GPIO14 13 -700 -250 100 R 50 50 1 1 P X GPIO5/D8 14 -650 -350 100 R 50 50 1 1 P X ~ 15 -700 -450 100 R 50 50 1 1 N X 3V3/3V3 16 -650 -550 100 R 50 50 1 1 P X GPIO9 17 -700 -650 100 R 50 50 1 1 P X GPIO13 18 -650 -750 100 R 50 50 1 1 P X GPIO11 19 -700 -850 100 R 50 50 1 1 P X RST 2 -650 850 100 R 50 50 1 1 P X GPIO10 20 -650 -950 100 R 50 50 1 1 P X GND 21 700 950 100 L 50 50 1 1 P X GPIO1/TX 22 650 850 100 L 50 50 1 1 P X GPIO27 23 700 750 100 L 50 50 1 1 P X GPIO3/RX 24 650 650 100 L 50 50 1 1 P X GPIO25 25 700 550 100 L 50 50 1 1 P X GPIO22/D1 26 650 450 100 L 50 50 1 1 P X GPIO32 27 700 350 100 L 50 50 1 1 P X GPIO21/D2 28 650 250 100 L 50 50 1 1 P X GPIO12 29 700 150 100 L 50 50 1 1 P X ~ 3 -700 750 100 R 50 50 1 1 N X GPIO17/D3 30 650 50 100 L 50 50 1 1 P X GPIO4 31 700 -50 100 L 50 50 1 1 P X GPIO16/D4 32 650 -150 100 L 50 50 1 1 P X GPIO0 33 700 -250 100 L 50 50 1 1 P X GND/GND 34 650 -350 100 L 50 50 1 1 P X GPIO2 35 700 -450 100 L 50 50 1 1 P X 5V/5V 36 650 -550 100 L 50 50 1 1 P X GPIO8 37 700 -650 100 L 50 50 1 1 P X GPIO15 38 650 -750 100 L 50 50 1 1 P X GPIO6 39 700 -850 100 L 50 50 1 1 P X GPIO36/A0 4 -650 650 100 R 50 50 1 1 P X GPIO7 40 650 -950 100 L 50 50 1 1 P X GPIO39 5 -700 550 100 R 50 50 1 1 P X GPIO26/D0 6 -650 450 100 R 50 50 1 1 P X GPIO35 7 -700 350 100 R 50 50 1 1 P X GPIO18/D5 8 -650 250 100 R 50 50 1 1 P X GPIO33 9 -700 150 100 R 50 50 1 1 P ENDDRAW ENDDEF # # TTGO_TDisplay # DEF TTGO_TDisplay U 0 40 Y Y 1 F N F0 "U" -200 750 50 H V C CNN F1 "TTGO_TDisplay" 0 650 50 H V C CNN F2 "" -200 50 50 H I C CNN F3 "" -200 50 50 H I C CNN DRAW C -110 -10 0 0 1 0 N C -60 -310 0 0 1 0 N C -60 -110 0 0 1 0 N S -400 700 400 -700 0 1 0 f P 2 0 1 0 -110 10 -110 0 N P 2 0 1 0 -60 -290 -60 -300 N P 2 0 1 0 -60 -90 -60 -100 N P 4 0 1 0 -110 30 -140 -20 -80 -20 -110 30 N P 4 0 1 0 -60 -270 -90 -320 -30 -320 -60 -270 N P 4 0 1 0 -60 -70 -90 -120 -30 -120 -60 -70 N P 4 0 1 0 370 100 400 130 400 70 370 100 F P 4 0 1 0 370 200 400 230 400 170 370 200 F P 4 0 1 0 370 300 400 330 400 270 370 300 F P 4 0 1 0 370 400 400 430 400 370 370 400 F X GND 1 -500 500 100 R 50 50 1 1 P X GND 10 -500 -400 100 R 50 50 1 1 P X GND 11 -500 -500 100 R 50 50 1 1 P X 3V3 12 -500 -600 100 R 50 50 1 1 P X 5V 13 500 -600 100 L 50 50 1 1 P X GND 14 500 -500 100 L 50 50 1 1 P X GPIO27 15 500 -400 100 L 50 50 1 1 P X GPIO26 16 500 -300 100 L 50 50 1 1 P X GPIO25 17 500 -200 100 L 50 50 1 1 P X GPIO33 18 500 -100 100 L 50 50 1 1 P X GPIO32 19 500 0 100 L 50 50 1 1 P X GND 2 -500 400 100 R 50 50 1 1 P X GPIO39 20 500 100 100 L 50 50 1 1 P X GPIO38 21 500 200 100 L 50 50 1 1 P X GPIO37 22 500 300 100 L 50 50 1 1 P X GPIO36 23 500 400 100 L 50 50 1 1 P X 3V3 24 500 500 100 L 50 50 1 1 P X GPIO21 3 -500 300 100 R 50 50 1 1 P X GPIO22 4 -500 200 100 R 50 50 1 1 P X GPIO17 5 -500 100 100 R 50 50 1 1 P X GPIO2 6 -500 0 100 R 50 50 1 1 P X GPIO15 7 -500 -100 100 R 50 50 1 1 P X GPIO13 8 -500 -200 100 R 50 50 1 1 P X GPIO12 9 -500 -300 100 R 50 50 1 1 P ENDDRAW ENDDEF # #End Library ================================================ FILE: electronics/lib/GP2S60.pretty/GP2S60.kicad_mod ================================================ (module GP2S60 (layer F.Cu) (tedit 565C0AFE) (fp_text reference REF** (at 0 2) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value GP2S60 (at 0 -1.9) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_circle (center 0 -0.6) (end 0.5 -0.6) (layer F.SilkS) (width 0.15)) (fp_line (start -0.5 0.1) (end 0.5 0.1) (layer F.SilkS) (width 0.15)) (fp_line (start 0.5 0.1) (end 0.5 1.1) (layer F.SilkS) (width 0.15)) (fp_line (start 0.5 1.1) (end -0.5 1.1) (layer F.SilkS) (width 0.15)) (fp_line (start -0.5 1.1) (end -0.5 0.1) (layer F.SilkS) (width 0.15)) (pad 1 smd rect (at -1.35 -0.55) (size 1 0.65) (layers F.Cu F.Paste F.Mask)) (pad 2 smd rect (at -1.35 0.55) (size 1 0.65) (layers F.Cu F.Paste F.Mask)) (pad 3 smd rect (at 1.35 0.55) (size 1 0.65) (layers F.Cu F.Paste F.Mask)) (pad 4 smd rect (at 1.35 -0.55) (size 1 0.65) (layers F.Cu F.Paste F.Mask)) ) ================================================ FILE: electronics/lib/GP2S60.pretty/GP2S60_WITH_MOUNT.kicad_mod ================================================ (module GP2S60_WITH_MOUNT (layer F.Cu) (tedit 59DAA7C0) (fp_text reference REF** (at -40.17 1.43 270) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value GP2S60 (at -36.27 1.43 270) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_arc (start 1 -40) (end 1 -44) (angle 180) (layer F.SilkS) (width 0.15)) (fp_arc (start -1 -40) (end -1 -36) (angle 180) (layer F.SilkS) (width 0.15)) (fp_line (start -1 -44) (end 1 -44) (layer F.SilkS) (width 0.15)) (fp_line (start -1 -36) (end 1 -36) (layer F.SilkS) (width 0.15)) (fp_line (start -1 4) (end 1 4) (layer F.SilkS) (width 0.15)) (fp_line (start -1 -4) (end 1 -4) (layer F.SilkS) (width 0.15)) (fp_arc (start -1 0) (end -1 4) (angle 180) (layer F.SilkS) (width 0.15)) (fp_arc (start 1 0) (end 1 -4) (angle 180) (layer F.SilkS) (width 0.15)) (fp_circle (center -37.57 1.43) (end -37.57 1.93) (layer F.SilkS) (width 0.15)) (fp_line (start -38.27 0.93) (end -38.27 1.93) (layer F.SilkS) (width 0.15)) (fp_line (start -38.27 1.93) (end -39.27 1.93) (layer F.SilkS) (width 0.15)) (fp_line (start -39.27 1.93) (end -39.27 0.93) (layer F.SilkS) (width 0.15)) (fp_line (start -39.27 0.93) (end -38.27 0.93) (layer F.SilkS) (width 0.15)) (pad ~ thru_hole oval (at 0 -40) (size 7.5 5.5) (drill oval 6.5 4.5) (layers *.Cu *.Mask F.SilkS) (clearance 1.5)) (pad 1 smd rect (at -37.62 0.08 270) (size 1 0.65) (layers F.Cu F.Paste F.Mask)) (pad 2 smd rect (at -38.72 0.08 270) (size 1 0.65) (layers F.Cu F.Paste F.Mask)) (pad 3 smd rect (at -38.72 2.78 270) (size 1 0.65) (layers F.Cu F.Paste F.Mask)) (pad 4 smd rect (at -37.62 2.78 270) (size 1 0.65) (layers F.Cu F.Paste F.Mask)) (pad ~ thru_hole oval (at 0 0) (size 7.5 5.5) (drill oval 6.5 4.5) (layers *.Cu *.Mask F.SilkS) (clearance 1.5)) ) ================================================ FILE: electronics/lib/INA219.pretty/INA219_LARGE.kicad_mod ================================================ (module INA219_LARGE (layer F.Cu) (tedit 5FB4C46D) (fp_text reference REF** (at 15.24 -2.54) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value INA219_LARGE (at 0 -0.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -6.35 3.048) (end -6.35 -19.3) (layer F.SilkS) (width 0.15)) (fp_line (start 19.05 3.048) (end 19.05 -19.3) (layer F.SilkS) (width 0.15)) (fp_line (start -6.35 3.048) (end 19.05 3.048) (layer F.SilkS) (width 0.15)) (fp_line (start -6.35 -19.304) (end 19.05 -19.304) (layer F.SilkS) (width 0.15)) (pad VCC thru_hole circle (at 0 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad GND thru_hole circle (at 2.54 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad SCL thru_hole circle (at 5.08 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad SDA thru_hole circle (at 7.62 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad VIN- thru_hole circle (at 10.16 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad VIN+ thru_hole circle (at 12.7 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad "" thru_hole circle (at -3.81 0.508) (size 3.2 3.2) (drill 2.54) (layers *.Cu *.Mask)) (pad "" thru_hole circle (at 16.51 0.508) (size 3.2 3.2) (drill 2.54) (layers *.Cu *.Mask)) (pad "" thru_hole circle (at -3.81 -16.764) (size 3.2 3.2) (drill 2.54) (layers *.Cu *.Mask)) (pad "" thru_hole circle (at 16.51 -16.764) (size 3.2 3.2) (drill 2.54) (layers *.Cu *.Mask)) ) ================================================ FILE: electronics/lib/INA219.pretty/INA219_SMALL.kicad_mod ================================================ (module INA219_SMALL (layer F.Cu) (tedit 5FB4C0FB) (fp_text reference REF** (at 13.97 -2.54) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value INA219_SMALL (at 0 -0.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -3.81 1.27) (end -3.81 -19.05) (layer F.SilkS) (width 0.15)) (fp_line (start 16.51 1.27) (end 16.51 -19.05) (layer F.SilkS) (width 0.15)) (fp_line (start 16.51 -19.05) (end -3.81 -19.05) (layer F.SilkS) (width 0.15)) (fp_line (start 16.51 1.27) (end -3.81 1.27) (layer F.SilkS) (width 0.15)) (pad VCC thru_hole circle (at 0 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad GND thru_hole circle (at 2.54 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad SCL thru_hole circle (at 5.08 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad SDA thru_hole circle (at 7.62 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad VIN- thru_hole circle (at 10.16 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad VIN+ thru_hole circle (at 12.7 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad "" thru_hole circle (at -1.27 -15.24) (size 4 4) (drill 3.2) (layers *.Cu *.Mask)) (pad "" thru_hole circle (at 13.97 -15.24) (size 4 4) (drill 3.2) (layers *.Cu *.Mask)) ) ================================================ FILE: electronics/lib/INA219_Breakout.dcm ================================================ EESchema-DOCLIB Version 2.0 # #End Doc Library ================================================ FILE: electronics/lib/INA219_Breakout.lib ================================================ EESchema-LIBRARY Version 2.4 #encoding utf-8 # # INA219_Breakout # DEF INA219_Breakout U 0 40 Y Y 1 F N F0 "U" -150 400 50 H V C CNN F1 "INA219_Breakout" 150 0 50 V V C CNN F2 "" -300 50 50 H I C CNN F3 "" -300 50 50 H I C CNN DRAW S -200 350 200 -350 0 1 0 f X GND GND -300 150 100 R 50 50 1 1 P X SCL SCL -300 50 100 R 50 50 1 1 P X SDA SDA -300 -50 100 R 50 50 1 1 P X VCC VCC -300 250 100 R 50 50 1 1 P X VIN+ VIN+ -300 -250 100 R 50 50 1 1 w X VIN- VIN- -300 -150 100 R 50 50 1 1 P ENDDRAW ENDDEF # #End Library ================================================ FILE: electronics/lib/JLCPCB.pretty/AssemblyToolingHole.kicad_mod ================================================ (module AssemblyToolingHole (layer F.Cu) (tedit 61803CCC) (attr virtual) (fp_text reference REF** (at 0 0.5) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value AssemblyToolingHole (at 0 -0.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad "" np_thru_hole circle (at 0 0) (size 1.152 1.152) (drill 1.152) (layers *.Cu *.Mask) (solder_mask_margin 0.148)) ) ================================================ FILE: electronics/lib/JST_XH_Connectors.pretty/JST_XH_2-5mm_5pin.kicad_mod ================================================ (module JST_XH_2-5mm_5pin (layer F.Cu) (tedit 56E4AF35) (fp_text reference REF** (at 0 4) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value "JST XH 5" (at 0 -3) (layer F.Fab) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 7.45 -1) (end 6 -1) (layer F.SilkS) (width 0.15)) (fp_line (start -7.45 -1) (end -6 -1) (layer F.SilkS) (width 0.15)) (fp_line (start -7.45 -2.35) (end 7.45 -2.35) (layer F.SilkS) (width 0.15)) (fp_line (start 7.45 -2.35) (end 7.45 3.4) (layer F.SilkS) (width 0.15)) (fp_line (start 7.45 3.4) (end -7.45 3.4) (layer F.SilkS) (width 0.15)) (fp_line (start -7.45 3.4) (end -7.45 -2.35) (layer F.SilkS) (width 0.15)) (pad 1 thru_hole circle (at -5 0) (size 1.524 1.524) (drill 0.95) (layers *.Cu *.Mask F.SilkS)) (pad 2 thru_hole circle (at -2.5 0) (size 1.524 1.524) (drill 0.95) (layers *.Cu *.Mask F.SilkS)) (pad 3 thru_hole circle (at 0 0) (size 1.524 1.524) (drill 0.95) (layers *.Cu *.Mask F.SilkS)) (pad 4 thru_hole circle (at 2.5 0) (size 1.524 1.524) (drill 0.95) (layers *.Cu *.Mask F.SilkS)) (pad 5 thru_hole circle (at 5 0) (size 1.524 1.524) (drill 0.95) (layers *.Cu *.Mask F.SilkS)) ) ================================================ FILE: electronics/lib/LCD.dcm ================================================ EESchema-DOCLIB Version 2.0 # #End Doc Library ================================================ FILE: electronics/lib/LCD.lib ================================================ EESchema-LIBRARY Version 2.4 #encoding utf-8 # # ST7789_240x240 # DEF ST7789_240x240 U 0 40 Y Y 1 F N F0 "U" 0 450 50 H V C CNN F1 "ST7789_240x240" 50 350 50 H V C CNN F2 "" -150 0 50 H I C CNN F3 "" -150 0 50 H I C CNN DRAW S -300 400 300 -350 0 1 0 f X BLK BLK -600 300 300 R 50 50 1 1 P X DC DC -600 200 300 R 50 50 1 1 P X GND GND -600 -300 300 R 50 50 1 1 P X RES RES -600 100 300 R 50 50 1 1 P X SCL(CLK) SCL -600 -100 300 R 50 50 1 1 P X SDA_(MOSI) SDA -600 0 300 R 50 50 1 1 P X VCC VCC -600 -200 300 R 50 50 1 1 P ENDDRAW ENDDEF # # ST7789_80x160 # DEF ST7789_80x160 U 0 40 Y Y 1 F N F0 "U" 0 500 50 H V C CNN F1 "ST7789_80x160" 50 400 50 H V C CNN F2 "" -150 50 50 H I C CNN F3 "" -150 50 50 H I C CNN DRAW S -300 450 300 -450 0 1 0 f X BLK BLK -600 350 300 R 50 50 1 1 P X CS CS -600 250 300 R 50 50 1 1 P X DC DC -600 150 300 R 50 50 1 1 P X GND GND -600 -350 300 R 50 50 1 1 P X RES RES -600 50 300 R 50 50 1 1 P X SCL(CLK) SCL -600 -150 300 R 50 50 1 1 P X SDA_(MOSI) SDA -600 -50 300 R 50 50 1 1 P X VCC VCC -600 -250 300 R 50 50 1 1 P ENDDRAW ENDDEF # #End Library ================================================ FILE: electronics/lib/LED3mmBetterSilkScreen.pretty/LED_D3.0mm.kicad_mod ================================================ (module LED_D3.0mm (layer F.Cu) (tedit 5A074299) (descr "LED, diameter 3.0mm, 2 pins") (tags "LED diameter 3.0mm 2 pins") (fp_text reference Ref (at 4.572 -1.016) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value Val (at 1.016 -3.048) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 0.508 -1.778) (end 0.508 -1.016) (layer F.SilkS) (width 0.15)) (fp_line (start 0.508 1.778) (end 0.508 1.016) (layer F.SilkS) (width 0.15)) (fp_arc (start 1.27 0) (end -0.23 -1.16619) (angle 284.3) (layer F.Fab) (width 0.1)) (fp_arc (start 1.27 0) (end 0.508 -1.778) (angle 80) (layer F.SilkS) (width 0.12)) (fp_arc (start 1.27 0) (end 0.508 1.778) (angle -80) (layer F.SilkS) (width 0.12)) (fp_circle (center 1.27 0) (end 2.77 0) (layer F.Fab) (width 0.1)) (fp_line (start -0.23 -1.16619) (end -0.23 1.16619) (layer F.Fab) (width 0.1)) (fp_line (start -1.15 -2.25) (end -1.15 2.25) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.15 2.25) (end 3.7 2.25) (layer F.CrtYd) (width 0.05)) (fp_line (start 3.7 2.25) (end 3.7 -2.25) (layer F.CrtYd) (width 0.05)) (fp_line (start 3.7 -2.25) (end -1.15 -2.25) (layer F.CrtYd) (width 0.05)) (pad 1 thru_hole rect (at 0 0) (size 1.8 1.8) (drill 0.9) (layers *.Cu *.Mask)) (pad 2 thru_hole circle (at 2.54 0) (size 1.8 1.8) (drill 0.9) (layers *.Cu *.Mask)) (model ${KISYS3DMOD}/LEDs.3dshapes/LED_D3.0mm.wrl (at (xyz 0 0 0)) (scale (xyz 0.393701 0.393701 0.393701)) (rotate (xyz 0 0 0)) ) ) ================================================ FILE: electronics/lib/LM339.dcm ================================================ EESchema-DOCLIB Version 2.0 # #End Doc Library ================================================ FILE: electronics/lib/LM339.lib ================================================ EESchema-LIBRARY Version 2.4 #encoding utf-8 # # LM339 # DEF LM339 U 0 40 Y Y 1 F N F0 "U" 300 500 50 H V C CNN F1 "LM339" -300 500 50 H V C CNN F2 "" 100 0 50 H I C CNN F3 "" 100 0 50 H I C CNN DRAW S 450 450 -450 -350 0 1 0 N P 4 0 1 0 -200 -150 -200 -250 -150 -200 -200 -150 N P 4 0 1 0 -200 50 -200 -50 -150 0 -200 50 N P 4 0 1 0 -150 -200 -50 -200 -50 350 -200 350 N P 4 0 1 0 -150 0 -100 0 -100 250 -200 250 N P 4 0 1 0 150 -200 50 -200 50 350 200 350 N P 4 0 1 0 150 0 100 0 100 250 200 250 N P 4 0 1 0 200 -150 200 -250 150 -200 200 -150 N P 4 0 1 0 200 50 200 -50 150 0 200 50 N X OUT2 1 -550 350 100 R 50 50 1 1 C X IN4- 10 550 -50 100 L 50 50 1 1 I X IN4+ 11 550 50 100 L 50 50 1 1 I X GND 12 550 150 100 L 50 50 1 1 W X OUT4 13 550 250 100 L 50 50 1 1 C X OUT3 14 550 350 100 L 50 50 1 1 C X OUT1 2 -550 250 100 R 50 50 1 1 C X VCC 3 -550 150 100 R 50 50 1 1 W X IN1- 4 -550 50 100 R 50 50 1 1 I X IN1+ 5 -550 -50 100 R 50 50 1 1 I X IN2- 6 -550 -150 100 R 50 50 1 1 I X IN2+ 7 -550 -250 100 R 50 50 1 1 I X IN3- 8 550 -250 100 L 50 50 1 1 I X IN3+ 9 550 -150 100 L 50 50 1 1 I ENDDRAW ENDDEF # # LM339_2 # DEF LM339_2 U 0 40 Y Y 1 F N F0 "U" -350 750 50 H V C CNN F1 "LM339_2" -250 650 50 H V C CNN F2 "" 100 0 50 H I C CNN F3 "" 100 0 50 H I C CNN DRAW S 350 -750 -350 600 0 1 0 f P 5 0 1 0 100 -450 50 -450 -100 -350 -100 -550 50 -450 N P 5 0 1 0 100 -200 50 -200 -100 -100 -100 -300 50 -200 N P 5 0 1 0 100 50 50 50 -100 150 -100 -50 50 50 N P 5 0 1 0 100 300 50 300 -100 400 -100 200 50 300 N X OUT2 1 450 50 100 L 50 50 1 1 C X IN4- 10 -450 -400 100 R 50 50 1 1 I X IN4+ 11 -450 -500 100 R 50 50 1 1 I X GND 12 0 -850 100 U 50 50 1 1 W X OUT4 13 450 -450 100 L 50 50 1 1 C X OUT3 14 450 -200 100 L 50 50 1 1 C X OUT1 2 450 300 100 L 50 50 1 1 C X VCC 3 0 700 100 D 50 50 1 1 W X IN1- 4 -450 350 100 R 50 50 1 1 I X IN1+ 5 -450 250 100 R 50 50 1 1 I X IN2- 6 -450 100 100 R 50 50 1 1 I X IN2+ 7 -450 0 100 R 50 50 1 1 I X IN3- 8 -450 -150 100 R 50 50 1 1 I X IN3+ 9 -450 -250 100 R 50 50 1 1 I ENDDRAW ENDDEF # #End Library ================================================ FILE: electronics/lib/LevelShifterModule.dcm ================================================ EESchema-DOCLIB Version 2.0 # #End Doc Library ================================================ FILE: electronics/lib/LevelShifterModule.lib ================================================ EESchema-LIBRARY Version 2.4 #encoding utf-8 # # LevelShifterModule # DEF LevelShifterModule U 0 40 Y Y 1 F N F0 "U" 0 350 50 H V C CNN F1 "LevelShifterModule" 0 400 50 H V C CNN F2 "" -150 50 50 H I C CNN F3 "" -150 50 50 H I C CNN DRAW S -250 300 250 -300 0 0 0 f X LV1 1 -350 250 100 R 50 50 1 1 B X HV 10 350 50 100 L 50 50 1 1 W X HV2 11 350 150 100 L 50 50 1 1 B X HV1 12 350 250 100 L 50 50 1 1 B X LV2 2 -350 150 100 R 50 50 1 1 B X LV 3 -350 50 100 R 50 50 1 1 W X GND 4 -350 -50 100 R 50 50 1 1 W X LV3 5 -350 -150 100 R 50 50 1 1 B X LV4 6 -350 -250 100 R 50 50 1 1 B X HV4 7 350 -250 100 L 50 50 1 1 B X HV3 8 350 -150 100 L 50 50 1 1 B X GND 9 350 -50 100 L 50 50 1 1 W ENDDRAW ENDDEF # #End Library ================================================ FILE: electronics/lib/LevelShifterModule.pretty/LevelShifterModule.kicad_mod ================================================ (module LevelShifterModule (layer F.Cu) (tedit 5FE97398) (fp_text reference REF** (at 0 0.5) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value LevelShifterModule (at 0 -0.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -1.27 -1.27) (end 11.43 -1.27) (layer F.SilkS) (width 0.15)) (fp_line (start 11.43 -1.27) (end 11.43 13.97) (layer F.SilkS) (width 0.15)) (fp_line (start 11.43 13.97) (end -1.27 13.97) (layer F.SilkS) (width 0.15)) (fp_line (start -1.27 13.97) (end -1.27 -1.27) (layer F.SilkS) (width 0.15)) (fp_text user LV (at 2.54 5.08) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text user HV (at 7.62 5.08) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text user GND (at 2.54 7.62) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text user GND (at 7.62 7.62) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text user LV1 (at 2.54 0) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text user LV2 (at 2.54 2.54) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text user LV3 (at 2.54 10.16) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text user LV4 (at 2.54 12.7) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text user HV1 (at 7.62 0) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text user HV2 (at 7.62 2.54) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text user HV3 (at 7.62 10.16) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text user HV4 (at 7.62 12.7) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -1.27 3.81) (end 11.43 3.81) (layer F.SilkS) (width 0.15)) (fp_line (start -1.27 8.89) (end 11.43 8.89) (layer F.SilkS) (width 0.15)) (fp_line (start 5.08 -1.27) (end 5.08 13.97) (layer F.SilkS) (width 0.15)) (pad 1 thru_hole circle (at 0 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 2 thru_hole circle (at 0 2.54) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 3 thru_hole circle (at 0 5.08) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 4 thru_hole circle (at 0 7.62) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 5 thru_hole circle (at 0 10.16) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 6 thru_hole circle (at 0 12.7) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 7 thru_hole circle (at 10.16 12.7) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 8 thru_hole circle (at 10.16 10.16) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 9 thru_hole circle (at 10.16 7.62) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 10 thru_hole circle (at 10.16 5.08) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 11 thru_hole circle (at 10.16 2.54) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 12 thru_hole circle (at 10.16 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) ) ================================================ FILE: electronics/lib/MIC5842.dcm ================================================ EESchema-DOCLIB Version 2.0 # #End Doc Library ================================================ FILE: electronics/lib/MIC5842.lib ================================================ EESchema-LIBRARY Version 2.4 #encoding utf-8 # # MIC5842 # DEF MIC5842 U 0 40 Y Y 1 F N F0 "U" 0 -100 50 H V C CNN F1 "MIC5842" 0 100 50 H V C CNN F2 "MODULE" 0 0 50 H I C CNN F3 "DOCUMENTATION" 0 0 50 H I C CNN DRAW S -450 -600 450 600 1 0 0 N X VEE 1 -750 400 300 R 50 50 1 1 W X K 10 750 -400 300 L 50 50 1 1 W X OUT8 11 750 -300 300 L 50 50 1 1 C X OUT7 12 750 -200 300 L 50 50 1 1 C X OUT6 13 750 -100 300 L 50 50 1 1 C X OUT5 14 750 0 300 L 50 50 1 1 C X OUT4 15 750 100 300 L 50 50 1 1 C X OUT3 16 750 200 300 L 50 50 1 1 C X OUT2 17 750 300 300 L 50 50 1 1 C X OUT1 18 750 400 300 L 50 50 1 1 C X CLK 2 -750 300 300 R 50 50 1 1 I X SIN 3 -750 200 300 R 50 50 1 1 I X VSS 4 -750 100 300 R 50 50 1 1 W X VDD 5 -750 0 300 R 50 50 1 1 W X SOUT 6 -750 -100 300 R 50 50 1 1 O X STR 7 -750 -200 300 R 50 50 1 1 I X ~OE 8 -750 -300 300 R 50 50 1 1 I X VEE 9 -750 -400 300 R 50 50 1 1 W ENDDRAW ENDDEF # #End Library ================================================ FILE: electronics/lib/Mega2560Shield.dcm ================================================ EESchema-DOCLIB Version 2.0 # #End Doc Library ================================================ FILE: electronics/lib/Mega2560Shield.lib ================================================ EESchema-LIBRARY Version 2.4 #encoding utf-8 # # Mega2560Shield # DEF Mega2560Shield U 0 40 Y Y 1 F N F0 "U" 550 50 50 H V C CNN F1 "Mega2560Shield" 350 -100 50 H V C CNN F2 "" -900 100 50 H I C CNN F3 "" -900 100 50 H I C CNN DRAW S 0 0 1100 -9300 0 1 0 f X 3V3 3V3 1200 -300 100 L 50 50 1 1 P X 5V 5V 1200 -400 100 L 50 50 1 1 P X A0 A0 1200 -7400 100 L 50 50 1 1 P X A1 A1 1200 -7500 100 L 50 50 1 1 P X A10 A10 1200 -8400 100 L 50 50 1 1 P X A11 A11 1200 -8500 100 L 50 50 1 1 P X A12 A12 1200 -8600 100 L 50 50 1 1 P X A13 A13 1200 -8700 100 L 50 50 1 1 P X A14 A14 1200 -8800 100 L 50 50 1 1 P X A15 A15 1200 -8900 100 L 50 50 1 1 P X A2 A2 1200 -7600 100 L 50 50 1 1 P X A3 A3 1200 -7700 100 L 50 50 1 1 P X A4 A4 1200 -7800 100 L 50 50 1 1 P X A5 A5 1200 -7900 100 L 50 50 1 1 P X A6 A6 1200 -8000 100 L 50 50 1 1 P X A7 A7 1200 -8100 100 L 50 50 1 1 P X A8 A8 1200 -8200 100 L 50 50 1 1 P X A9 A9 1200 -8300 100 L 50 50 1 1 P X AREF AREF 1200 -1000 100 L 50 50 1 1 P X D0 D0 1200 -1900 100 L 50 50 1 1 P X D1 D1 1200 -2000 100 L 50 50 1 1 P X D10 D10 1200 -2900 100 L 50 50 1 1 P X D11 D11 1200 -3000 100 L 50 50 1 1 P X D12 D12 1200 -3100 100 L 50 50 1 1 P X D13 D13 1200 -3200 100 L 50 50 1 1 P X D14 D14 1200 -3300 100 L 50 50 1 1 P X D15 D15 1200 -3400 100 L 50 50 1 1 P X D16 D16 1200 -3500 100 L 50 50 1 1 P X D17 D17 1200 -3600 100 L 50 50 1 1 P X D18 D18 1200 -3700 100 L 50 50 1 1 P X D19 D19 1200 -3800 100 L 50 50 1 1 P X D2 D2 1200 -2100 100 L 50 50 1 1 P X D20 D20 1200 -3900 100 L 50 50 1 1 P X D21 D21 1200 -4000 100 L 50 50 1 1 P X D22 D22 1200 -4100 100 L 50 50 1 1 P X D23 D23 1200 -4200 100 L 50 50 1 1 P X D24 D24 1200 -4300 100 L 50 50 1 1 P X D25 D25 1200 -4400 100 L 50 50 1 1 P X D26 D26 1200 -4500 100 L 50 50 1 1 P X D27 D27 1200 -4600 100 L 50 50 1 1 P X D28 D28 1200 -4700 100 L 50 50 1 1 P X D29 D29 1200 -4800 100 L 50 50 1 1 P X D3 D3 1200 -2200 100 L 50 50 1 1 P X D30 D30 1200 -4900 100 L 50 50 1 1 P X D31 D31 1200 -5000 100 L 50 50 1 1 P X D32 D32 1200 -5100 100 L 50 50 1 1 P X D33 D33 1200 -5200 100 L 50 50 1 1 P X D34 D34 1200 -5300 100 L 50 50 1 1 P X D35 D35 1200 -5400 100 L 50 50 1 1 P X D36 D36 1200 -5500 100 L 50 50 1 1 P X D37 D37 1200 -5600 100 L 50 50 1 1 P X D38 D38 1200 -5700 100 L 50 50 1 1 P X D39 D39 1200 -5800 100 L 50 50 1 1 P X D4 D4 1200 -2300 100 L 50 50 1 1 P X D40 D40 1200 -5900 100 L 50 50 1 1 P X D41 D41 1200 -6000 100 L 50 50 1 1 P X D42 D42 1200 -6100 100 L 50 50 1 1 P X D43 D43 1200 -6200 100 L 50 50 1 1 P X D44 D44 1200 -6300 100 L 50 50 1 1 P X D45 D45 1200 -6400 100 L 50 50 1 1 P X D46 D46 1200 -6500 100 L 50 50 1 1 P X D47 D47 1200 -6600 100 L 50 50 1 1 P X D48 D48 1200 -6700 100 L 50 50 1 1 P X D49 D49 1200 -6800 100 L 50 50 1 1 P X D5 D5 1200 -2400 100 L 50 50 1 1 P X D50 D50 1200 -6900 100 L 50 50 1 1 P X D51 D51 1200 -7000 100 L 50 50 1 1 P X D52 D52 1200 -7100 100 L 50 50 1 1 P X D53 D53 1200 -7200 100 L 50 50 1 1 P X D6 D6 1200 -2500 100 L 50 50 1 1 P X D7 D7 1200 -2600 100 L 50 50 1 1 P X D8 D8 1200 -2700 100 L 50 50 1 1 P X D9 D9 1200 -2800 100 L 50 50 1 1 P X GND GND 1200 -500 100 L 50 50 1 1 P X ICSP_5V ICSP_5V 1200 -1300 100 L 50 50 1 1 P X ICSP_GND ICSP_GND 1200 -1700 100 L 50 50 1 1 P X ICSP_MISO ICSP_MISO 1200 -1200 100 L 50 50 1 1 P X ICSP_MOSI ICSP_MOSI 1200 -1500 100 L 50 50 1 1 P X ICSP_RESET ICSP_RESET 1200 -1600 100 L 50 50 1 1 P X ICSP_SCK ICSP_SCK 1200 -1400 100 L 50 50 1 1 P X IOREF IOREF 1200 -800 100 L 50 50 1 1 P X NC NC 1200 -100 100 L 50 50 1 1 P X RESET RESET 1200 -900 100 L 50 50 1 1 P X D21_SCL SCL 1200 -9200 100 L 50 50 1 1 P X D20_SDA SDA 1200 -9100 100 L 50 50 1 1 P X VIN VIN 1200 -600 100 L 50 50 1 1 P ENDDRAW ENDDEF # #End Library ================================================ FILE: electronics/lib/Mega2560Shield.pretty/Mega2560Shield.kicad_mod ================================================ (module Mega2560Shield (layer F.Cu) (tedit 5FF9E708) (fp_text reference REF** (at 0 0.5) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value Mega2560Shield (at 0 -0.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -6.35 -32.385) (end -6.35 -43.815) (layer F.SilkS) (width 0.15)) (fp_line (start 9.525 -32.385) (end -6.35 -32.385) (layer F.SilkS) (width 0.15)) (fp_line (start 9.525 -43.815) (end 9.525 -32.385) (layer F.SilkS) (width 0.15)) (fp_line (start -6.35 -43.815) (end 9.525 -43.815) (layer F.SilkS) (width 0.15)) (fp_line (start 11.43 -3.175) (end -1.905 -3.175) (layer F.SilkS) (width 0.15)) (fp_line (start 11.43 -12.065) (end 11.43 -3.175) (layer F.SilkS) (width 0.15)) (fp_line (start -1.905 -12.065) (end 11.43 -12.065) (layer F.SilkS) (width 0.15)) (fp_line (start -1.905 -3.175) (end -1.905 -12.065) (layer F.SilkS) (width 0.15)) (fp_line (start 99.06 0) (end 0 0) (layer F.SilkS) (width 0.15)) (fp_line (start 99.06 -1.27) (end 99.06 0) (layer F.SilkS) (width 0.15)) (fp_line (start 101.6 -3.81) (end 99.06 -1.27) (layer F.SilkS) (width 0.15)) (fp_line (start 101.6 -38.1) (end 101.6 -3.81) (layer F.SilkS) (width 0.15)) (fp_line (start 99.06 -40.64) (end 101.6 -38.1) (layer F.SilkS) (width 0.15)) (fp_line (start 99.06 -50.8) (end 99.06 -40.64) (layer F.SilkS) (width 0.15)) (fp_line (start 96.52 -53.34) (end 99.06 -50.8) (layer F.SilkS) (width 0.15)) (fp_line (start 0 -53.34) (end 96.52 -53.34) (layer F.SilkS) (width 0.15)) (fp_line (start 0 0) (end 0 -53.34) (layer F.SilkS) (width 0.15)) (pad MNT thru_hole circle (at 13.97 -2.54) (size 4.064 4.064) (drill 3.175) (layers *.Cu *.Mask)) (pad MNT thru_hole circle (at 15.24 -50.8) (size 4.064 4.064) (drill 3.175) (layers *.Cu *.Mask)) (pad MNT thru_hole circle (at 66.04 -35.56) (size 4.064 4.064) (drill 3.175) (layers *.Cu *.Mask)) (pad MNT thru_hole circle (at 66.04 -7.62) (size 4.064 4.064) (drill 3.175) (layers *.Cu *.Mask)) (pad MNT thru_hole circle (at 90.17 -50.8) (size 4.064 4.064) (drill 3.175) (layers *.Cu *.Mask)) (pad MNT thru_hole circle (at 96.52 -2.54) (size 4.064 4.064) (drill 3.175) (layers *.Cu *.Mask)) (pad NC thru_hole circle (at 27.94 -2.54) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad IOREF thru_hole circle (at 30.48 -2.54) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad RESET thru_hole circle (at 33.02 -2.54) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad 3V3 thru_hole circle (at 35.56 -2.54) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad 5V thru_hole circle (at 38.1 -2.54) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad GND thru_hole circle (at 40.64 -2.54) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad GND thru_hole circle (at 43.18 -2.54) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad VIN thru_hole circle (at 45.72 -2.54) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad A0 thru_hole circle (at 50.8 -2.54) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad A1 thru_hole circle (at 53.34 -2.54) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad A2 thru_hole circle (at 55.88 -2.54) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad A3 thru_hole circle (at 58.42 -2.54) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad A4 thru_hole circle (at 60.96 -2.54) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad A5 thru_hole circle (at 63.5 -2.54) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad A6 thru_hole circle (at 66.04 -2.54) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad A7 thru_hole circle (at 68.58 -2.54) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad A8 thru_hole circle (at 73.66 -2.54) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad A9 thru_hole circle (at 76.2 -2.54) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad A10 thru_hole circle (at 78.74 -2.54) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad A11 thru_hole circle (at 81.28 -2.54) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad A12 thru_hole circle (at 83.82 -2.54) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad A13 thru_hole circle (at 86.36 -2.54) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad A14 thru_hole circle (at 88.9 -2.54) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad A15 thru_hole circle (at 91.44 -2.54) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad GND thru_hole circle (at 93.98 -7.62) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad GND thru_hole circle (at 96.52 -7.62) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D52 thru_hole circle (at 93.98 -10.16) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D53 thru_hole circle (at 96.52 -10.16) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D50 thru_hole circle (at 93.98 -12.7) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D51 thru_hole circle (at 96.52 -12.7) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D48 thru_hole circle (at 93.98 -15.24) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D49 thru_hole circle (at 96.52 -15.24) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D46 thru_hole circle (at 93.98 -17.78) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D47 thru_hole circle (at 96.52 -17.78) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D44 thru_hole circle (at 93.98 -20.32) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D45 thru_hole circle (at 96.52 -20.32) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D42 thru_hole circle (at 93.98 -22.86) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D43 thru_hole circle (at 96.52 -22.86) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D40 thru_hole circle (at 93.98 -25.4) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D41 thru_hole circle (at 96.52 -25.4) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D38 thru_hole circle (at 93.98 -27.94) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D39 thru_hole circle (at 96.52 -27.94) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D36 thru_hole circle (at 93.98 -30.48) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D37 thru_hole circle (at 96.52 -30.48) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D34 thru_hole circle (at 93.98 -33.02) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D35 thru_hole circle (at 96.52 -33.02) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D32 thru_hole circle (at 93.98 -35.56) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D33 thru_hole circle (at 96.52 -35.56) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D30 thru_hole circle (at 93.98 -38.1) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D31 thru_hole circle (at 96.52 -38.1) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D28 thru_hole circle (at 93.98 -40.64) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D29 thru_hole circle (at 96.52 -40.64) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D26 thru_hole circle (at 93.98 -43.18) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D27 thru_hole circle (at 96.52 -43.18) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D24 thru_hole circle (at 93.98 -45.72) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D25 thru_hole circle (at 96.52 -45.72) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D22 thru_hole circle (at 93.98 -48.26) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D23 thru_hole circle (at 96.52 -48.26) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad 5V thru_hole circle (at 93.98 -50.8) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad 5V thru_hole circle (at 96.52 -50.8) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad SCL thru_hole circle (at 18.796 -50.8) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad SDA thru_hole circle (at 21.336 -50.8) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad AREF thru_hole circle (at 23.876 -50.8) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad GND thru_hole circle (at 26.416 -50.8) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D13 thru_hole circle (at 28.956 -50.8) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D12 thru_hole circle (at 31.496 -50.8) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D11 thru_hole circle (at 34.036 -50.8) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D10 thru_hole circle (at 36.576 -50.8) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D9 thru_hole circle (at 39.116 -50.8) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D8 thru_hole circle (at 41.656 -50.8) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D7 thru_hole circle (at 45.72 -50.8) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D6 thru_hole circle (at 48.26 -50.8) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D5 thru_hole circle (at 50.8 -50.8) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D4 thru_hole circle (at 53.34 -50.8) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D3 thru_hole circle (at 55.88 -50.8) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D2 thru_hole circle (at 58.42 -50.8) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D1 thru_hole circle (at 60.96 -50.8) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D0 thru_hole circle (at 63.5 -50.8) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D14 thru_hole circle (at 68.58 -50.8) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D15 thru_hole circle (at 71.12 -50.8) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D16 thru_hole circle (at 73.66 -50.8) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D17 thru_hole circle (at 76.2 -50.8) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D18 thru_hole circle (at 78.74 -50.8) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D19 thru_hole circle (at 81.28 -50.8) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D20 thru_hole circle (at 83.82 -50.8) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D21 thru_hole circle (at 86.36 -50.8) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad ICSP_MISO thru_hole circle (at 63.627 -30.48) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad ICSP_5V thru_hole circle (at 66.167 -30.48) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad ICSP_SCK thru_hole circle (at 63.627 -27.94) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad ICSP_MOSI thru_hole circle (at 66.167 -27.94) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad ICSP_RESET thru_hole circle (at 63.627 -25.4) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad ICSP_GND thru_hole circle (at 66.167 -25.4) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) ) ================================================ FILE: electronics/lib/Mega2560Shield.pretty/Mega2560Shield_Modified.kicad_mod ================================================ (module Mega2560Shield_Modified (layer F.Cu) (tedit 5FFB4B7A) (fp_text reference REF** (at 0 0.5) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value Mega2560Shield_Modified (at 0 -0.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 0 0) (end 0 -53.34) (layer B.SilkS) (width 0.15)) (fp_line (start 0 -53.34) (end 96.52 -53.34) (layer B.SilkS) (width 0.15)) (fp_line (start 96.52 -53.34) (end 99.06 -50.8) (layer B.SilkS) (width 0.15)) (fp_line (start 99.06 -50.8) (end 99.06 -40.64) (layer B.SilkS) (width 0.15)) (fp_line (start 99.06 -40.64) (end 101.6 -38.1) (layer B.SilkS) (width 0.15)) (fp_line (start 101.6 -38.1) (end 101.6 -3.81) (layer B.SilkS) (width 0.15)) (fp_line (start 101.6 -3.81) (end 99.06 -1.27) (layer B.SilkS) (width 0.15)) (fp_line (start 99.06 -1.27) (end 99.06 0) (layer B.SilkS) (width 0.15)) (fp_line (start 99.06 0) (end 0 0) (layer B.SilkS) (width 0.15)) (fp_line (start -1.905 -3.175) (end -1.905 -12.065) (layer B.SilkS) (width 0.15)) (fp_line (start -1.905 -12.065) (end 11.43 -12.065) (layer B.SilkS) (width 0.15)) (fp_line (start 11.43 -12.065) (end 11.43 -3.175) (layer B.SilkS) (width 0.15)) (fp_line (start 11.43 -3.175) (end -1.905 -3.175) (layer B.SilkS) (width 0.15)) (fp_line (start -6.35 -43.815) (end 9.525 -43.815) (layer B.SilkS) (width 0.15)) (fp_line (start 9.525 -43.815) (end 9.525 -32.385) (layer B.SilkS) (width 0.15)) (fp_line (start 9.525 -32.385) (end -6.35 -32.385) (layer B.SilkS) (width 0.15)) (fp_line (start -6.35 -32.385) (end -6.35 -43.815) (layer B.SilkS) (width 0.15)) (pad MNT thru_hole circle (at 66.04 -35.56) (size 4.064 4.064) (drill 3.175) (layers *.Cu *.Mask)) (pad MNT thru_hole circle (at 66.04 -7.62) (size 4.064 4.064) (drill 3.175) (layers *.Cu *.Mask)) (pad MNT thru_hole circle (at 90.17 -50.8) (size 4.064 4.064) (drill 3.175) (layers *.Cu *.Mask)) (pad MNT thru_hole circle (at 96.52 -2.54) (size 4.064 4.064) (drill 3.175) (layers *.Cu *.Mask)) (pad NC thru_hole circle (at 27.94 -2.54) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad IOREF thru_hole circle (at 30.48 -2.54) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad RESET thru_hole circle (at 33.02 -2.54) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad 3V3 thru_hole circle (at 35.56 -2.54) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad 5V thru_hole circle (at 38.1 -2.54) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad GND thru_hole circle (at 40.64 -2.54) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad GND thru_hole circle (at 43.18 -2.54) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad VIN thru_hole circle (at 45.72 -2.54) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad A0 thru_hole circle (at 50.8 -2.54) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad A1 thru_hole circle (at 53.34 -2.54) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad A2 thru_hole circle (at 55.88 -2.54) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad A3 thru_hole circle (at 58.42 -2.54) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad A4 thru_hole circle (at 60.96 -2.54) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad A5 thru_hole circle (at 63.5 -2.54) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad A6 thru_hole circle (at 66.04 -2.54) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad A7 thru_hole circle (at 68.58 -2.54) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad A8 thru_hole circle (at 73.66 -2.54) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad A9 thru_hole circle (at 76.2 -2.54) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad A10 thru_hole circle (at 78.74 -2.54) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad A11 thru_hole circle (at 81.28 -2.54) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad A12 thru_hole circle (at 83.82 -2.54) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad A13 thru_hole circle (at 86.36 -2.54) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad A14 thru_hole circle (at 88.9 -2.54) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad A15 thru_hole circle (at 91.44 -2.54) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad GND thru_hole circle (at 93.98 -7.62) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad GND thru_hole circle (at 96.52 -7.62) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D52 thru_hole circle (at 93.98 -10.16) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D53 thru_hole circle (at 96.52 -10.16) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D50 thru_hole circle (at 93.98 -12.7) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D51 thru_hole circle (at 96.52 -12.7) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D48 thru_hole circle (at 93.98 -15.24) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D49 thru_hole circle (at 96.52 -15.24) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D46 thru_hole circle (at 93.98 -17.78) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D47 thru_hole circle (at 96.52 -17.78) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D44 thru_hole circle (at 93.98 -20.32) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D45 thru_hole circle (at 96.52 -20.32) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D42 thru_hole circle (at 93.98 -22.86) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D43 thru_hole circle (at 96.52 -22.86) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D40 thru_hole circle (at 93.98 -25.4) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D41 thru_hole circle (at 96.52 -25.4) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D38 thru_hole circle (at 93.98 -27.94) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D39 thru_hole circle (at 96.52 -27.94) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D36 thru_hole circle (at 93.98 -30.48) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D37 thru_hole circle (at 96.52 -30.48) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D34 thru_hole circle (at 93.98 -33.02) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D35 thru_hole circle (at 96.52 -33.02) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D32 thru_hole circle (at 93.98 -35.56) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D33 thru_hole circle (at 96.52 -35.56) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D30 thru_hole circle (at 93.98 -38.1) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D31 thru_hole circle (at 96.52 -38.1) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D28 thru_hole circle (at 93.98 -40.64) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D29 thru_hole circle (at 96.52 -40.64) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D26 thru_hole circle (at 93.98 -43.18) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D27 thru_hole circle (at 96.52 -43.18) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D24 thru_hole circle (at 93.98 -45.72) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D25 thru_hole circle (at 96.52 -45.72) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D22 thru_hole circle (at 93.98 -48.26) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D23 thru_hole circle (at 96.52 -48.26) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad 5V thru_hole circle (at 93.98 -50.8) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad 5V thru_hole circle (at 96.52 -50.8) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad SCL thru_hole circle (at 18.796 -50.8) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad SDA thru_hole circle (at 21.336 -50.8) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad AREF thru_hole circle (at 23.876 -50.8) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad GND thru_hole circle (at 26.416 -50.8) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D13 thru_hole circle (at 28.956 -50.8) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D12 thru_hole circle (at 31.496 -50.8) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D11 thru_hole circle (at 34.036 -50.8) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D10 thru_hole circle (at 36.576 -50.8) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D9 thru_hole circle (at 39.116 -50.8) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D8 thru_hole circle (at 41.656 -50.8) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D7 thru_hole circle (at 45.72 -50.8) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D6 thru_hole circle (at 48.26 -50.8) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D5 thru_hole circle (at 50.8 -50.8) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D4 thru_hole circle (at 53.34 -50.8) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D3 thru_hole circle (at 55.88 -50.8) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D2 thru_hole circle (at 58.42 -50.8) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D1 thru_hole circle (at 60.96 -50.8) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D0 thru_hole circle (at 63.5 -50.8) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D14 thru_hole circle (at 68.58 -50.8) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D15 thru_hole circle (at 71.12 -50.8) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D16 thru_hole circle (at 73.66 -50.8) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D17 thru_hole circle (at 76.2 -50.8) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D18 thru_hole circle (at 78.74 -50.8) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D19 thru_hole circle (at 81.28 -50.8) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D20 thru_hole circle (at 83.82 -50.8) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad D21 thru_hole circle (at 86.36 -50.8) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad ICSP_MISO thru_hole circle (at 63.627 -30.48) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad ICSP_5V thru_hole circle (at 66.167 -30.48) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad ICSP_SCK thru_hole circle (at 63.627 -27.94) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad ICSP_MOSI thru_hole circle (at 66.167 -27.94) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad ICSP_RESET thru_hole circle (at 63.627 -25.4) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad ICSP_GND thru_hole circle (at 66.167 -25.4) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) ) ================================================ FILE: electronics/lib/ModifiedSymbols.pretty/IDC-Header_2x04_P2.54mm_Vertical.kicad_mod ================================================ (module IDC-Header_2x04_P2.54mm_Vertical (layer F.Cu) (tedit 617B5015) (descr "Through hole IDC box header, 2x04, 2.54mm pitch, DIN 41651 / IEC 60603-13, double rows, https://docs.google.com/spreadsheets/d/16SsEcesNF15N3Lb4niX7dcUr-NY5_MFPQhobNuNppn4/edit#gid=0") (tags "Through hole vertical IDC box header THT 2x04 2.54mm double row") (fp_text reference REF** (at 1.27 -2.921) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value IDC-Header_2x04_P2.54mm_Vertical (at 1.27 13.72) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text user %R (at 1.27 3.81 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -3.18 -4.1) (end -2.18 -5.1) (layer F.Fab) (width 0.1)) (fp_line (start -2.18 -5.1) (end 5.72 -5.1) (layer F.Fab) (width 0.1)) (fp_line (start 5.72 -5.1) (end 5.72 12.72) (layer F.Fab) (width 0.1)) (fp_line (start 5.72 12.72) (end -3.18 12.72) (layer F.Fab) (width 0.1)) (fp_line (start -3.18 12.72) (end -3.18 -4.1) (layer F.Fab) (width 0.1)) (fp_line (start -3.18 1.76) (end -1.98 1.76) (layer F.Fab) (width 0.1)) (fp_line (start -1.98 1.76) (end -1.98 -3.91) (layer F.Fab) (width 0.1)) (fp_line (start -1.98 -3.91) (end 4.52 -3.91) (layer F.Fab) (width 0.1)) (fp_line (start 4.52 -3.91) (end 4.52 11.53) (layer F.Fab) (width 0.1)) (fp_line (start 4.52 11.53) (end -1.98 11.53) (layer F.Fab) (width 0.1)) (fp_line (start -1.98 11.53) (end -1.98 5.86) (layer F.Fab) (width 0.1)) (fp_line (start -1.98 5.86) (end -1.98 5.86) (layer F.Fab) (width 0.1)) (fp_line (start -1.98 5.86) (end -3.18 5.86) (layer F.Fab) (width 0.1)) (fp_line (start -3.29 -5.21) (end 5.83 -5.21) (layer F.SilkS) (width 0.12)) (fp_line (start 5.83 -5.21) (end 5.83 12.83) (layer F.SilkS) (width 0.12)) (fp_line (start 5.83 12.83) (end -3.29 12.83) (layer F.SilkS) (width 0.12)) (fp_line (start -3.29 12.83) (end -3.29 -5.21) (layer F.SilkS) (width 0.12)) (fp_line (start -3.29 1.76) (end -1.98 1.76) (layer F.SilkS) (width 0.12)) (fp_line (start -1.98 1.76) (end -1.98 -3.91) (layer F.SilkS) (width 0.12)) (fp_line (start -1.98 -3.91) (end 4.52 -3.91) (layer F.SilkS) (width 0.12)) (fp_line (start 4.52 -3.91) (end 4.52 11.53) (layer F.SilkS) (width 0.12)) (fp_line (start 4.52 11.53) (end -1.98 11.53) (layer F.SilkS) (width 0.12)) (fp_line (start -1.98 11.53) (end -1.98 5.86) (layer F.SilkS) (width 0.12)) (fp_line (start -1.98 5.86) (end -1.98 5.86) (layer F.SilkS) (width 0.12)) (fp_line (start -1.98 5.86) (end -3.29 5.86) (layer F.SilkS) (width 0.12)) (fp_line (start -3.68 -5.6) (end -3.68 13.22) (layer F.CrtYd) (width 0.05)) (fp_line (start -3.68 13.22) (end 6.22 13.22) (layer F.CrtYd) (width 0.05)) (fp_line (start 6.22 13.22) (end 6.22 -5.6) (layer F.CrtYd) (width 0.05)) (fp_line (start 6.22 -5.6) (end -3.68 -5.6) (layer F.CrtYd) (width 0.05)) (pad 8 thru_hole circle (at 2.54 7.62) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)) (pad 6 thru_hole circle (at 2.54 5.08) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)) (pad 4 thru_hole circle (at 2.54 2.54) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)) (pad 2 thru_hole circle (at 2.54 0) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)) (pad 7 thru_hole circle (at 0 7.62) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)) (pad 5 thru_hole circle (at 0 5.08) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)) (pad 3 thru_hole circle (at 0 2.54) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)) (pad 1 thru_hole roundrect (at 0 0) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (roundrect_rratio 0.147059)) (model ${KISYS3DMOD}/Connector_IDC.3dshapes/IDC-Header_2x04_P2.54mm_Vertical.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) ================================================ FILE: electronics/lib/ModifiedSymbols.pretty/LED_0603_1608Metric_Silkscreen.kicad_mod ================================================ (module LED_0603_1608Metric_Silkscreen (layer F.Cu) (tedit 6018D469) (descr "LED SMD 0603 (1608 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: http://www.tortai-tech.com/upload/download/2011102023233369053.pdf), generated with kicad-footprint-generator") (tags LED) (attr smd) (fp_text reference REF** (at 0 -1.43) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value LED_0603_1608Metric_Silkscreen (at 0 1.43) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 1.48 0.73) (end -1.48 0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.48 -0.73) (end 1.48 0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.48 -0.73) (end 1.48 -0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.48 0.73) (end -1.48 -0.73) (layer F.CrtYd) (width 0.05)) (fp_line (start 0.8 0.4) (end 0.8 -0.4) (layer F.Fab) (width 0.1)) (fp_line (start -0.8 0.4) (end 0.8 0.4) (layer F.Fab) (width 0.1)) (fp_line (start -0.8 -0.1) (end -0.8 0.4) (layer F.Fab) (width 0.1)) (fp_line (start -0.5 -0.4) (end -0.8 -0.1) (layer F.Fab) (width 0.1)) (fp_line (start 0.8 -0.4) (end -0.5 -0.4) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.4 0.4) (thickness 0.06))) ) (fp_line (start 0.254 -0.508) (end 0.254 0.508) (layer F.SilkS) (width 0.15)) (fp_line (start 0.254 0.508) (end -0.254 0) (layer F.SilkS) (width 0.15)) (fp_line (start -0.254 0) (end 0.254 -0.508) (layer F.SilkS) (width 0.15)) (fp_line (start -0.254 -0.508) (end -0.254 0.508) (layer F.SilkS) (width 0.15)) (pad 1 smd roundrect (at -0.7875 0) (size 0.875 0.95) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)) (pad 2 smd roundrect (at 0.7875 0) (size 0.875 0.95) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)) (model ${KISYS3DMOD}/LED_SMD.3dshapes/LED_0603_1608Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) ================================================ FILE: electronics/lib/ModifiedSymbols.pretty/LED_0805_2012Metric_Silkscreen.kicad_mod ================================================ (module LED_0805_2012Metric_Silkscreen (layer F.Cu) (tedit 606FFE5F) (descr "LED SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: https://docs.google.com/spreadsheets/d/1BsfQQcO9C6DZCsRaXUlFlo91Tg2WpOkGARC1WS5S8t0/edit?usp=sharing), generated with kicad-footprint-generator") (tags LED) (attr smd) (fp_text reference REF** (at 0 -1.65) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value LED_0805_2012Metric_Silkscreen (at 0 1.65) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 1.68 0.95) (end -1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.68 -0.95) (end 1.68 0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.68 -0.95) (end 1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.68 0.95) (end -1.68 -0.95) (layer F.CrtYd) (width 0.05)) (fp_line (start 1 0.6) (end 1 -0.6) (layer F.Fab) (width 0.1)) (fp_line (start -1 0.6) (end 1 0.6) (layer F.Fab) (width 0.1)) (fp_line (start -1 -0.3) (end -1 0.6) (layer F.Fab) (width 0.1)) (fp_line (start -0.7 -0.6) (end -1 -0.3) (layer F.Fab) (width 0.1)) (fp_line (start 1 -0.6) (end -0.7 -0.6) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.5 0.5) (thickness 0.08))) ) (fp_line (start 0.254 -0.635) (end 0.254 0.635) (layer F.SilkS) (width 0.15)) (fp_line (start 0.254 0.635) (end -0.254 0) (layer F.SilkS) (width 0.15)) (fp_line (start -0.254 0) (end 0.254 -0.635) (layer F.SilkS) (width 0.15)) (fp_line (start -0.254 -0.635) (end -0.254 0.635) (layer F.SilkS) (width 0.15)) (pad 1 smd roundrect (at -0.9375 0) (size 0.975 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)) (pad 2 smd roundrect (at 0.9375 0) (size 0.975 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)) (model ${KISYS3DMOD}/LED_SMD.3dshapes/LED_0805_2012Metric.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) ================================================ FILE: electronics/lib/ModifiedSymbols.pretty/LED_WS2812B_PLCC4_5.0x5.0mm_P3.2mm.kicad_mod ================================================ (module LED_WS2812B_PLCC4_5.0x5.0mm_P3.2mm (layer F.Cu) (tedit 60976B4B) (descr https://cdn-shop.adafruit.com/datasheets/WS2812B.pdf) (tags "LED RGB NeoPixel") (attr smd) (fp_text reference REF** (at 0 -3.5) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value LED_WS2812B_PLCC4_5.0x5.0mm_P3.2mm (at 0 4) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_circle (center 0 0) (end 0 -2) (layer F.Fab) (width 0.1)) (fp_line (start 3.65 2.75) (end 3.65 1.6) (layer F.SilkS) (width 0.12)) (fp_line (start -3.65 2.75) (end 3.65 2.75) (layer F.SilkS) (width 0.12)) (fp_line (start -3.65 -2.75) (end 3.65 -2.75) (layer F.SilkS) (width 0.12)) (fp_line (start 2.5 -2.5) (end -2.5 -2.5) (layer F.Fab) (width 0.1)) (fp_line (start 2.5 2.5) (end 2.5 -2.5) (layer F.Fab) (width 0.1)) (fp_line (start -2.5 2.5) (end 2.5 2.5) (layer F.Fab) (width 0.1)) (fp_line (start -2.5 -2.5) (end -2.5 2.5) (layer F.Fab) (width 0.1)) (fp_line (start 2.5 1.5) (end 1.5 2.5) (layer F.Fab) (width 0.1)) (fp_line (start -3.45 -2.75) (end -3.45 2.75) (layer F.CrtYd) (width 0.05)) (fp_line (start -3.45 2.75) (end 3.45 2.75) (layer F.CrtYd) (width 0.05)) (fp_line (start 3.45 2.75) (end 3.45 -2.75) (layer F.CrtYd) (width 0.05)) (fp_line (start 3.45 -2.75) (end -3.45 -2.75) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.8 0.8) (thickness 0.15))) ) (pad 3 smd rect (at 2.45 1.6) (size 1.5 1) (layers F.Cu F.Paste F.Mask)) (pad 4 smd rect (at 2.45 -1.6) (size 1.5 1) (layers F.Cu F.Paste F.Mask)) (pad 2 smd rect (at -2.45 1.6) (size 1.5 1) (layers F.Cu F.Paste F.Mask)) (pad 1 smd rect (at -2.45 -1.6) (size 1.5 1) (layers F.Cu F.Paste F.Mask)) (model ${KISYS3DMOD}/LED_SMD.3dshapes/LED_WS2812B_PLCC4_5.0x5.0mm_P3.2mm.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) ================================================ FILE: electronics/lib/ModifiedSymbols.pretty/PinHeader_1x03_P2.54mm_Vertical_SolderJumper.kicad_mod ================================================ (module PinHeader_1x03_P2.54mm_Vertical_SolderJumper (layer F.Cu) (tedit 60737402) (descr "Through hole straight pin header, 1x03, 2.54mm pitch, single row") (tags "Through hole pin header THT 1x03 2.54mm single row") (fp_text reference REF** (at 0 -2.33) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value PinHeader_1x03_P2.54mm_Vertical_SolderJumper (at 0 7.41) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 1.8 -1.8) (end -1.8 -1.8) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.8 6.85) (end 1.8 -1.8) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.8 6.85) (end 1.8 6.85) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.8 -1.8) (end -1.8 6.85) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.27 -0.635) (end -0.635 -1.27) (layer F.Fab) (width 0.1)) (fp_line (start -1.27 6.35) (end -1.27 -0.635) (layer F.Fab) (width 0.1)) (fp_line (start 1.27 6.35) (end -1.27 6.35) (layer F.Fab) (width 0.1)) (fp_line (start 1.27 -1.27) (end 1.27 6.35) (layer F.Fab) (width 0.1)) (fp_line (start -0.635 -1.27) (end 1.27 -1.27) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 2.54 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_poly (pts (xy 1 3.54) (xy -1 3.54) (xy -1 -1) (xy 1 -1)) (layer F.Mask) (width 0.01)) (fp_poly (pts (xy 1 -1) (xy 1 1.3) (xy 0 1) (xy -1 1.3) (xy -1 -1)) (layer F.Cu) (width 0.01)) (fp_poly (pts (xy 1 1.54) (xy 1 3.54) (xy -1 3.54) (xy -1 1.54) (xy 0 1.24)) (layer F.Cu) (width 0.01)) (pad 1 thru_hole rect (at 0 0) (size 2 2) (drill 1) (layers *.Cu *.Mask)) (pad 2 thru_hole rect (at 0 2.54) (size 2 2) (drill 1) (layers *.Cu *.Mask)) (pad 3 thru_hole circle (at 0 5.08) (size 2 2) (drill 1) (layers *.Cu *.Mask)) (model ${KISYS3DMOD}/Connector_PinHeader_2.54mm.3dshapes/PinHeader_1x03_P2.54mm_Vertical.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) ================================================ FILE: electronics/lib/ModifiedSymbols.pretty/PinHeader_1x05_P2.54mm_Vertical_NoSilk.kicad_mod ================================================ (module PinHeader_1x05_P2.54mm_Vertical_NoSilk (layer F.Cu) (tedit 617F0396) (descr "Through hole straight pin header, 1x05, 2.54mm pitch, single row") (tags "Through hole pin header THT 1x05 2.54mm single row") (fp_text reference REF** (at 0 -2.33) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value PinHeader_1x05_P2.54mm_Vertical_NoSilk (at 0 12.49) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 1.8 -1.8) (end -1.8 -1.8) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.8 11.95) (end 1.8 -1.8) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.8 11.95) (end 1.8 11.95) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.8 -1.8) (end -1.8 11.95) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.27 -0.635) (end -0.635 -1.27) (layer F.Fab) (width 0.1)) (fp_line (start -1.27 11.43) (end -1.27 -0.635) (layer F.Fab) (width 0.1)) (fp_line (start 1.27 11.43) (end -1.27 11.43) (layer F.Fab) (width 0.1)) (fp_line (start 1.27 -1.27) (end 1.27 11.43) (layer F.Fab) (width 0.1)) (fp_line (start -0.635 -1.27) (end 1.27 -1.27) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 5.08 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 1 thru_hole rect (at 0 0) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)) (pad 2 thru_hole oval (at 0 2.54) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)) (pad 3 thru_hole oval (at 0 5.08) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)) (pad 4 thru_hole oval (at 0 7.62) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)) (pad 5 thru_hole oval (at 0 10.16) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)) (model ${KISYS3DMOD}/Connector_PinHeader_2.54mm.3dshapes/PinHeader_1x05_P2.54mm_Vertical.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) ================================================ FILE: electronics/lib/ModifiedSymbols.pretty/PinHoles_1x04_P2.54mm_NoSilk.kicad_mod ================================================ (module PinHoles_1x04_P2.54mm_NoSilk (layer F.Cu) (tedit 6180B6F8) (descr "Through hole straight socket strip, 1x04, 2.54mm pitch, single row (from Kicad 4.0.7), script generated") (tags "Through hole socket strip THT 1x04 2.54mm single row") (fp_text reference REF** (at 0 -2.77) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value Conn_01x04 (at 0 10.39) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -1.27 8.89) (end -1.27 -1.27) (layer F.Fab) (width 0.1)) (fp_line (start 1.27 8.89) (end -1.27 8.89) (layer F.Fab) (width 0.1)) (fp_line (start 1.27 -0.635) (end 1.27 8.89) (layer F.Fab) (width 0.1)) (fp_line (start 0.635 -1.27) (end 1.27 -0.635) (layer F.Fab) (width 0.1)) (fp_line (start -1.27 -1.27) (end 0.635 -1.27) (layer F.Fab) (width 0.1)) (fp_text user %R (at 0 3.81 270) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 4 thru_hole oval (at 0 7.62) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)) (pad 3 thru_hole oval (at 0 5.08) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)) (pad 2 thru_hole oval (at 0 2.54) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)) (pad 1 thru_hole rect (at 0 0) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)) ) ================================================ FILE: electronics/lib/ModifiedSymbols.pretty/Pin_Header_Right_Angle_1x03.kicad_mod ================================================ (module Pin_Header_Right_Angle_1x03 (layer F.Cu) (tedit 61809C8C) (descr "Through hole pin header") (tags "pin header") (fp_text reference P100 (at -2.032 0 -270) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value SENSOR (at -2.032 4.318 -270) (layer F.Fab) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -1.2 6.28) (end 1.2 6.28) (layer F.SilkS) (width 0.15)) (fp_line (start -1.2 -1.2) (end -1.2 6.28) (layer F.SilkS) (width 0.15)) (fp_line (start 1.2 -1.2) (end 1.2 6.28) (layer F.SilkS) (width 0.15)) (fp_line (start -1.2 -1.2) (end 1.2 -1.2) (layer F.SilkS) (width 0.15)) (pad 1 thru_hole rect (at 0 0) (size 1.75 1.75) (drill 1) (layers *.Cu *.Mask)) (pad 2 thru_hole circle (at 0 2.54) (size 1.75 1.75) (drill 1) (layers *.Cu *.Mask)) (pad 3 thru_hole circle (at 0 5.08) (size 1.75 1.75) (drill 1) (layers *.Cu *.Mask)) (model ${KISYS3DMOD}/Connector_PinHeader_2.54mm.3dshapes/PinHeader_1x03_P2.54mm_Horizontal.step (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) ================================================ FILE: electronics/lib/ModifiedSymbols.pretty/SOIC-14_3.9x8.7mm_P1.27mm_silk.kicad_mod ================================================ (module SOIC-14_3.9x8.7mm_P1.27mm_silk (layer F.Cu) (tedit 6018D7BD) (descr "SOIC, 14 Pin (JEDEC MS-012AB, https://www.analog.com/media/en/package-pcb-resources/package/pkg_pdf/soic_narrow-r/r_14.pdf), generated with kicad-footprint-generator ipc_gullwing_generator.py") (tags "SOIC SO") (attr smd) (fp_text reference REF** (at 0 -5.28) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value SOIC-14_3.9x8.7mm_P1.27mm_silk (at 0 5.28) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_circle (center -1.016 -3.81) (end -1.016 -3.556) (layer F.SilkS) (width 0.15)) (fp_line (start -0.975 -4.325) (end 1.95 -4.325) (layer F.Fab) (width 0.1)) (fp_line (start 1.95 -4.325) (end 1.95 4.325) (layer F.Fab) (width 0.1)) (fp_line (start 1.95 4.325) (end -1.95 4.325) (layer F.Fab) (width 0.1)) (fp_line (start -1.95 4.325) (end -1.95 -3.35) (layer F.Fab) (width 0.1)) (fp_line (start -1.95 -3.35) (end -0.975 -4.325) (layer F.Fab) (width 0.1)) (fp_line (start -3.7 -4.58) (end -3.7 4.58) (layer F.CrtYd) (width 0.05)) (fp_line (start -3.7 4.58) (end 3.7 4.58) (layer F.CrtYd) (width 0.05)) (fp_line (start 3.7 4.58) (end 3.7 -4.58) (layer F.CrtYd) (width 0.05)) (fp_line (start 3.7 -4.58) (end -3.7 -4.58) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.98 0.98) (thickness 0.15))) ) (pad 1 smd roundrect (at -2.475 -3.81) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)) (pad 2 smd roundrect (at -2.475 -2.54) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)) (pad 3 smd roundrect (at -2.475 -1.27) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)) (pad 4 smd roundrect (at -2.475 0) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)) (pad 5 smd roundrect (at -2.475 1.27) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)) (pad 6 smd roundrect (at -2.475 2.54) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)) (pad 7 smd roundrect (at -2.475 3.81) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)) (pad 8 smd roundrect (at 2.475 3.81) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)) (pad 9 smd roundrect (at 2.475 2.54) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)) (pad 10 smd roundrect (at 2.475 1.27) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)) (pad 11 smd roundrect (at 2.475 0) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)) (pad 12 smd roundrect (at 2.475 -1.27) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)) (pad 13 smd roundrect (at 2.475 -2.54) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)) (pad 14 smd roundrect (at 2.475 -3.81) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)) (model ${KISYS3DMOD}/Package_SO.3dshapes/SOIC-14_3.9x8.7mm_P1.27mm.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) ================================================ FILE: electronics/lib/ModifiedSymbols.pretty/SOIC-16_3.9x9.9mm_P1.27mm_silk.kicad_mod ================================================ (module SOIC-16_3.9x9.9mm_P1.27mm_silk (layer F.Cu) (tedit 6018D7C5) (descr "SOIC, 16 Pin (JEDEC MS-012AC, https://www.analog.com/media/en/package-pcb-resources/package/pkg_pdf/soic_narrow-r/r_16.pdf), generated with kicad-footprint-generator ipc_gullwing_generator.py") (tags "SOIC SO") (attr smd) (fp_text reference REF** (at 0 -5.9) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value SOIC-16_3.9x9.9mm_P1.27mm_silk (at 0 5.9) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_circle (center -1.016 -4.572) (end -1.016 -4.318) (layer F.SilkS) (width 0.15)) (fp_line (start -0.975 -4.95) (end 1.95 -4.95) (layer F.Fab) (width 0.1)) (fp_line (start 1.95 -4.95) (end 1.95 4.95) (layer F.Fab) (width 0.1)) (fp_line (start 1.95 4.95) (end -1.95 4.95) (layer F.Fab) (width 0.1)) (fp_line (start -1.95 4.95) (end -1.95 -3.975) (layer F.Fab) (width 0.1)) (fp_line (start -1.95 -3.975) (end -0.975 -4.95) (layer F.Fab) (width 0.1)) (fp_line (start -3.7 -5.2) (end -3.7 5.2) (layer F.CrtYd) (width 0.05)) (fp_line (start -3.7 5.2) (end 3.7 5.2) (layer F.CrtYd) (width 0.05)) (fp_line (start 3.7 5.2) (end 3.7 -5.2) (layer F.CrtYd) (width 0.05)) (fp_line (start 3.7 -5.2) (end -3.7 -5.2) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 0 0) (layer F.Fab) (effects (font (size 0.98 0.98) (thickness 0.15))) ) (pad 1 smd roundrect (at -2.475 -4.445) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)) (pad 2 smd roundrect (at -2.475 -3.175) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)) (pad 3 smd roundrect (at -2.475 -1.905) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)) (pad 4 smd roundrect (at -2.475 -0.635) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)) (pad 5 smd roundrect (at -2.475 0.635) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)) (pad 6 smd roundrect (at -2.475 1.905) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)) (pad 7 smd roundrect (at -2.475 3.175) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)) (pad 8 smd roundrect (at -2.475 4.445) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)) (pad 9 smd roundrect (at 2.475 4.445) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)) (pad 10 smd roundrect (at 2.475 3.175) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)) (pad 11 smd roundrect (at 2.475 1.905) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)) (pad 12 smd roundrect (at 2.475 0.635) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)) (pad 13 smd roundrect (at 2.475 -0.635) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)) (pad 14 smd roundrect (at 2.475 -1.905) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)) (pad 15 smd roundrect (at 2.475 -3.175) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)) (pad 16 smd roundrect (at 2.475 -4.445) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)) (model ${KISYS3DMOD}/Package_SO.3dshapes/SOIC-16_3.9x9.9mm_P1.27mm.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) ================================================ FILE: electronics/lib/ModifiedSymbols.pretty/TO-220-3_Vertical.kicad_mod ================================================ (module TO-220-3_Vertical (layer F.Cu) (tedit 617DDCF3) (descr "TO-220-3, Vertical, RM 2.54mm, see https://www.vishay.com/docs/66542/to-220-1.pdf") (tags "TO-220-3 Vertical RM 2.54mm") (fp_text reference REF** (at 2.54 -4.27) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value TO-220-3_Vertical (at 2.54 2.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 7.79 -3.4) (end -2.71 -3.4) (layer F.CrtYd) (width 0.05)) (fp_line (start 7.79 1.51) (end 7.79 -3.4) (layer F.CrtYd) (width 0.05)) (fp_line (start -2.71 1.51) (end 7.79 1.51) (layer F.CrtYd) (width 0.05)) (fp_line (start -2.71 -3.4) (end -2.71 1.51) (layer F.CrtYd) (width 0.05)) (fp_line (start 4.39 -3.15) (end 4.39 -1.88) (layer F.Fab) (width 0.1)) (fp_line (start 0.69 -3.15) (end 0.69 -1.88) (layer F.Fab) (width 0.1)) (fp_line (start -2.46 -1.88) (end 7.54 -1.88) (layer F.Fab) (width 0.1)) (fp_line (start 7.54 -3.15) (end -2.46 -3.15) (layer F.Fab) (width 0.1)) (fp_line (start 7.54 1.25) (end 7.54 -3.15) (layer F.Fab) (width 0.1)) (fp_line (start -2.46 1.25) (end 7.54 1.25) (layer F.Fab) (width 0.1)) (fp_line (start -2.46 -3.15) (end -2.46 1.25) (layer F.Fab) (width 0.1)) (fp_text user %R (at 2.54 -4.27) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 1 thru_hole rect (at 0 0) (size 1.905 2) (drill 1.1) (layers *.Cu *.Mask)) (pad 2 thru_hole oval (at 2.54 0) (size 1.905 2) (drill 1.1) (layers *.Cu *.Mask)) (pad 3 thru_hole oval (at 5.08 0) (size 1.905 2) (drill 1.1) (layers *.Cu *.Mask)) (model ${KISYS3DMOD}/Package_TO_SOT_THT.3dshapes/TO-220-3_Vertical.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) ================================================ FILE: electronics/lib/MountingHoles.pretty/M4_mount.kicad_mod ================================================ (module M4_mount (layer F.Cu) (tedit 566491C2) (fp_text reference Z1 (at 0 1.7) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value MOUNT (at 0 -1.5) (layer F.Fab) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_circle (center 0 0) (end 4 0) (layer F.SilkS) (width 0.15)) (pad 1 thru_hole circle (at 0 0) (size 5.5 5.5) (drill 4.5) (layers *.Cu *.Mask F.SilkS) (clearance 1.5)) ) ================================================ FILE: electronics/lib/MountingHoles.pretty/M4_mount_2mm_play.kicad_mod ================================================ (module M4_mount_2mm_play (layer F.Cu) (tedit 56C6E222) (fp_text reference Z2 (at 0 1.7) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value MOUNT (at 0 -1.5) (layer F.Fab) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 1 4) (end -1 4) (layer F.SilkS) (width 0.15)) (fp_line (start -1 -4) (end 1 -4) (layer F.SilkS) (width 0.15)) (fp_arc (start -1 0) (end -1 4) (angle 180) (layer F.SilkS) (width 0.15)) (fp_arc (start 1 0) (end 1 -4) (angle 180) (layer F.SilkS) (width 0.15)) (pad 1 thru_hole oval (at 0 0) (size 7.5 5.5) (drill oval 6.5 4.5) (layers *.Cu *.Mask F.SilkS) (clearance 1.5)) ) ================================================ FILE: electronics/lib/MountingHoles.pretty/M4_mount_4mm_play.kicad_mod ================================================ (module M4_mount_4mm_play (layer F.Cu) (tedit 56C6D8E8) (fp_text reference Z2 (at 0 1.7) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value MOUNT (at 0 -1.5) (layer F.Fab) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -2 4) (end 2 4) (layer F.SilkS) (width 0.15)) (fp_line (start -2 -4) (end 2 -4) (layer F.SilkS) (width 0.15)) (fp_arc (start -2 0) (end -2 4) (angle 180) (layer F.SilkS) (width 0.15)) (fp_arc (start 2 0) (end 2 -4) (angle 180) (layer F.SilkS) (width 0.15)) (pad 1 thru_hole oval (at 0 0) (size 9.5 5.5) (drill oval 8.5 4.5) (layers *.Cu *.Mask F.SilkS) (clearance 1.5)) ) ================================================ FILE: electronics/lib/NCP45560.dcm ================================================ EESchema-DOCLIB Version 2.0 # #End Doc Library ================================================ FILE: electronics/lib/NCP45560.lib ================================================ EESchema-LIBRARY Version 2.4 #encoding utf-8 # # NCP45560 # DEF NCP45560 U 0 40 Y Y 1 F N F0 "U" -350 300 50 H V C CNN F1 "NCP45560" -350 400 50 H V C CNN F2 "" 550 -150 50 H I C CNN F3 "" 550 -150 50 H I C CNN DRAW S -300 250 300 -450 0 1 0 f X VIN 1 -400 150 100 R 50 50 1 1 W X VOUT 10 400 -50 100 L 50 50 1 1 P X VOUT 11 400 50 100 L 50 50 1 1 P X VOUT 12 400 150 100 L 50 50 1 1 w X VIN 13 0 350 100 D 50 50 1 1 W X EN 2 -400 50 100 R 50 50 1 1 I X VCC 3 -400 -50 100 R 50 50 1 1 W X GND 4 -400 -150 100 R 50 50 1 1 W X SR 5 -400 -250 100 R 50 50 1 1 P X PG 6 -400 -350 100 R 50 50 1 1 C X BLEED 7 400 -350 100 L 50 50 1 1 P X VOUT 8 400 -250 100 L 50 50 1 1 P X VOUT 9 400 -150 100 L 50 50 1 1 P ENDDRAW ENDDEF # #End Library ================================================ FILE: electronics/lib/PJ-202A.pretty/PJ-202A.kicad_mod ================================================ (module PJ-202A (layer F.Cu) (tedit 617CDF26) (descr "CONN POWER JACK 2.1MM PCB") (tags "CONN POWER JACK 2.1MM PCB BARREL JACK") (fp_text reference CON1 (at 0 -2.54) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value MOTOR_PWR (at 0.7 3.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -3.7 4.5) (end -3.7 2.3) (layer F.Fab) (width 0.15)) (fp_line (start 10.7 4.5) (end -3.7 4.5) (layer F.Fab) (width 0.15)) (fp_line (start 10.7 -4.5) (end 10.7 4.5) (layer F.Fab) (width 0.15)) (fp_line (start 2 -4.5) (end 10.7 -4.5) (layer F.Fab) (width 0.15)) (fp_line (start -3.7 -4.5) (end -2 -4.5) (layer F.Fab) (width 0.15)) (fp_line (start -3.7 -2.3) (end -3.7 -4.5) (layer F.Fab) (width 0.15)) (fp_line (start 7.2 -4.5) (end 7.2 4.5) (layer F.Fab) (width 0.15)) (pad 1 thru_hole oval (at -3 0) (size 2 4.5) (drill oval 1 3.5) (layers *.Cu *.Mask)) (pad 2 thru_hole oval (at 3 0) (size 2 4) (drill oval 1 3) (layers *.Cu *.Mask)) (pad 3 thru_hole oval (at 0 -4.7) (size 4 2) (drill oval 3 1) (layers *.Cu *.Mask)) (model ${KIPRJMOD}/../lib/54-00131.STEP (offset (xyz 10.5 0 6.5)) (scale (xyz 1 1 1)) (rotate (xyz -90 0 -90)) ) ) ================================================ FILE: electronics/lib/PinHeaders.pretty/Pin_Header_Straight_1x03.kicad_mod ================================================ (module Pin_Header_Straight_1x03 (layer F.Cu) (tedit 5663AD12) (descr "Through hole pin header") (tags "pin header") (fp_text reference P2 (at 0 -5.1) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value SENSOR (at 0 -3.1) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -1.2 6.28) (end 1.2 6.28) (layer F.SilkS) (width 0.15)) (fp_line (start -1.2 -1.2) (end -1.2 6.28) (layer F.SilkS) (width 0.15)) (fp_line (start 1.2 -1.2) (end 1.2 6.28) (layer F.SilkS) (width 0.15)) (fp_line (start -1.2 -1.2) (end 1.2 -1.2) (layer F.SilkS) (width 0.15)) (pad 1 thru_hole rect (at 0 0) (size 1.75 1.75) (drill 1) (layers *.Cu *.Mask F.SilkS)) (pad 2 thru_hole circle (at 0 2.54) (size 1.75 1.75) (drill 1) (layers *.Cu *.Mask F.SilkS)) (pad 3 thru_hole circle (at 0 5.08) (size 1.75 1.75) (drill 1) (layers *.Cu *.Mask F.SilkS)) (model Pin_Headers.3dshapes/Pin_Header_Straight_1x03.wrl (at (xyz 0 -0.1 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 90)) ) ) ================================================ FILE: electronics/lib/PinHeaders.pretty/Pin_Header_Straight_1x04.kicad_mod ================================================ (module Pin_Headers:Pin_Header_Straight_1x04 (layer F.Cu) (tedit 56635161) (descr "Through hole pin header") (tags "pin header") (fp_text reference P9 (at 0 -5.1) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value CONN_01X04 (at 0 -3.1) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -1.2 8.82) (end 1.2 8.82) (layer F.SilkS) (width 0.15)) (fp_line (start -1.2 -1.2) (end -1.2 8.82) (layer F.SilkS) (width 0.15)) (fp_line (start 1.2 -1.2) (end 1.2 8.82) (layer F.SilkS) (width 0.15)) (fp_line (start -1.2 -1.2) (end 1.2 -1.2) (layer F.SilkS) (width 0.15)) (pad 1 thru_hole rect (at 0 0) (size 1.75 1.75) (drill 1) (layers *.Cu *.Mask F.SilkS)) (pad 2 thru_hole oval (at 0 2.54) (size 1.75 1.75) (drill 1) (layers *.Cu *.Mask F.SilkS)) (pad 3 thru_hole oval (at 0 5.08) (size 1.75 1.75) (drill 1) (layers *.Cu *.Mask F.SilkS)) (pad 4 thru_hole oval (at 0 7.62) (size 1.75 1.75) (drill 1) (layers *.Cu *.Mask F.SilkS)) (model Pin_Headers.3dshapes/Pin_Header_Straight_1x04.wrl (at (xyz 0 -0.15 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 90)) ) ) ================================================ FILE: electronics/lib/PinHeaders.pretty/Pin_Header_Straight_2x07_Pitch2.54mm_IDC_Shrouded.kicad_mod ================================================ (module Pin_Header_Straight_2x07_Pitch2.54mm_IDC_Shrouded (layer F.Cu) (tedit 59E2F95E) (descr "Through hole straight pin header, 2x07, 2.54mm pitch, double rows") (tags "Through hole pin header THT 2x07 2.54mm double row") (fp_text reference REF** (at 1.27 -2.33) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value Pin_Header_Straight_2x07_Pitch2.54mm (at 1.27 17.57) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -3.28 5.37) (end -2.3 5.37) (layer F.SilkS) (width 0.15)) (fp_line (start -2.3 5.37) (end -2.3 9.87) (layer F.SilkS) (width 0.15)) (fp_line (start -2.3 9.87) (end -3.28 9.87) (layer F.SilkS) (width 0.15)) (fp_line (start 5.82 20.32) (end -3.28 20.32) (layer F.SilkS) (width 0.15)) (fp_line (start -3.28 20.32) (end -3.28 -5.08) (layer F.SilkS) (width 0.15)) (fp_line (start -3.28 -5.08) (end 5.82 -5.08) (layer F.SilkS) (width 0.15)) (fp_line (start 5.82 -5.08) (end 5.82 20.32) (layer F.SilkS) (width 0.15)) (fp_line (start 0 -1.27) (end 3.81 -1.27) (layer F.Fab) (width 0.1)) (fp_line (start 3.81 -1.27) (end 3.81 16.51) (layer F.Fab) (width 0.1)) (fp_line (start 3.81 16.51) (end -1.27 16.51) (layer F.Fab) (width 0.1)) (fp_line (start -1.27 16.51) (end -1.27 0) (layer F.Fab) (width 0.1)) (fp_line (start -1.27 0) (end 0 -1.27) (layer F.Fab) (width 0.1)) (fp_line (start -1.33 16.57) (end 3.87 16.57) (layer F.SilkS) (width 0.12)) (fp_line (start -1.33 1.27) (end -1.33 16.57) (layer F.SilkS) (width 0.12)) (fp_line (start 3.87 -1.33) (end 3.87 16.57) (layer F.SilkS) (width 0.12)) (fp_line (start -1.33 1.27) (end 1.27 1.27) (layer F.SilkS) (width 0.12)) (fp_line (start 1.27 1.27) (end 1.27 -1.33) (layer F.SilkS) (width 0.12)) (fp_line (start 1.27 -1.33) (end 3.87 -1.33) (layer F.SilkS) (width 0.12)) (fp_line (start -1.33 0) (end -1.33 -1.33) (layer F.SilkS) (width 0.12)) (fp_line (start -1.33 -1.33) (end 0 -1.33) (layer F.SilkS) (width 0.12)) (fp_line (start -1.8 -1.8) (end -1.8 17.05) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.8 17.05) (end 4.35 17.05) (layer F.CrtYd) (width 0.05)) (fp_line (start 4.35 17.05) (end 4.35 -1.8) (layer F.CrtYd) (width 0.05)) (fp_line (start 4.35 -1.8) (end -1.8 -1.8) (layer F.CrtYd) (width 0.05)) (fp_text user %R (at 1.27 7.62 90) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 1 thru_hole rect (at 0 0) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)) (pad 2 thru_hole oval (at 2.54 0) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)) (pad 3 thru_hole oval (at 0 2.54) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)) (pad 4 thru_hole oval (at 2.54 2.54) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)) (pad 5 thru_hole oval (at 0 5.08) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)) (pad 6 thru_hole oval (at 2.54 5.08) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)) (pad 7 thru_hole oval (at 0 7.62) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)) (pad 8 thru_hole oval (at 2.54 7.62) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)) (pad 9 thru_hole oval (at 0 10.16) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)) (pad 10 thru_hole oval (at 2.54 10.16) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)) (pad 11 thru_hole oval (at 0 12.7) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)) (pad 12 thru_hole oval (at 2.54 12.7) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)) (pad 13 thru_hole oval (at 0 15.24) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)) (pad 14 thru_hole oval (at 2.54 15.24) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)) (model ${KISYS3DMOD}/Pin_Headers.3dshapes/Pin_Header_Straight_2x07_Pitch2.54mm.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) ================================================ FILE: electronics/lib/Pogo.models/pogo1mmPoint.step ================================================ ISO-10303-21; HEADER; /* Generated by software containing ST-Developer * from STEP Tools, Inc. (www.steptools.com) */ FILE_DESCRIPTION( /* description */ (''), /* implementation_level */ '2;1'); FILE_NAME( /* name */ 'C:/Users/Scott/Dropbox/CNC/Models/pogo1mmPoint v1.step', /* time_stamp */ '2021-04-11T16:35:29-07:00', /* author */ (''), /* organization */ (''), /* preprocessor_version */ 'ST-DEVELOPER v18.1', /* originating_system */ 'Autodesk Translation Framework v10.6.0.1341', /* authorisation */ ''); FILE_SCHEMA (('AUTOMOTIVE_DESIGN { 1 0 10303 214 3 1 1 }')); ENDSEC; DATA; #10=MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION('',(#14,#15), #233); #11=SHAPE_REPRESENTATION_RELATIONSHIP('SRR','None',#240,#12); #12=ADVANCED_BREP_SHAPE_REPRESENTATION('',(#16,#17),#232); #13=CONICAL_SURFACE('',#153,0.75,0.753151280962196); #14=STYLED_ITEM('',(#250),#16); #15=STYLED_ITEM('',(#251),#17); #16=MANIFOLD_SOLID_BREP('Body1',#125); #17=MANIFOLD_SOLID_BREP('Body2',#126); #18=FACE_BOUND('',#37,.T.); #19=FACE_BOUND('',#39,.T.); #20=FACE_BOUND('',#41,.T.); #21=PLANE('',#146); #22=PLANE('',#147); #23=PLANE('',#148); #24=PLANE('',#156); #25=FACE_OUTER_BOUND('',#34,.T.); #26=FACE_OUTER_BOUND('',#35,.T.); #27=FACE_OUTER_BOUND('',#36,.T.); #28=FACE_OUTER_BOUND('',#38,.T.); #29=FACE_OUTER_BOUND('',#40,.T.); #30=FACE_OUTER_BOUND('',#42,.T.); #31=FACE_OUTER_BOUND('',#43,.T.); #32=FACE_OUTER_BOUND('',#44,.T.); #33=FACE_OUTER_BOUND('',#45,.T.); #34=EDGE_LOOP('',(#86,#87,#88,#89)); #35=EDGE_LOOP('',(#90,#91,#92,#93)); #36=EDGE_LOOP('',(#94)); #37=EDGE_LOOP('',(#95)); #38=EDGE_LOOP('',(#96)); #39=EDGE_LOOP('',(#97)); #40=EDGE_LOOP('',(#98)); #41=EDGE_LOOP('',(#99)); #42=EDGE_LOOP('',(#100,#101,#102,#103)); #43=EDGE_LOOP('',(#104,#105,#106)); #44=EDGE_LOOP('',(#107,#108,#109,#110)); #45=EDGE_LOOP('',(#111)); #46=LINE('',#203,#51); #47=LINE('',#209,#52); #48=LINE('',#221,#53); #49=LINE('',#224,#54); #50=LINE('',#227,#55); #51=VECTOR('',#163,0.31); #52=VECTOR('',#170,0.5); #53=VECTOR('',#187,0.75); #54=VECTOR('',#190,0.75); #55=VECTOR('',#193,0.31); #56=CIRCLE('',#141,0.31); #57=CIRCLE('',#142,0.31); #58=CIRCLE('',#144,0.5); #59=CIRCLE('',#145,0.5); #60=CIRCLE('',#149,0.75); #61=CIRCLE('',#150,0.31); #62=CIRCLE('',#152,0.75); #63=CIRCLE('',#155,0.31); #64=VERTEX_POINT('',#200); #65=VERTEX_POINT('',#202); #66=VERTEX_POINT('',#206); #67=VERTEX_POINT('',#208); #68=VERTEX_POINT('',#214); #69=VERTEX_POINT('',#216); #70=VERTEX_POINT('',#219); #71=VERTEX_POINT('',#223); #72=VERTEX_POINT('',#226); #73=EDGE_CURVE('',#64,#64,#56,.T.); #74=EDGE_CURVE('',#64,#65,#46,.T.); #75=EDGE_CURVE('',#65,#65,#57,.T.); #76=EDGE_CURVE('',#66,#66,#58,.T.); #77=EDGE_CURVE('',#66,#67,#47,.T.); #78=EDGE_CURVE('',#67,#67,#59,.T.); #79=EDGE_CURVE('',#68,#68,#60,.T.); #80=EDGE_CURVE('',#69,#69,#61,.T.); #81=EDGE_CURVE('',#70,#70,#62,.T.); #82=EDGE_CURVE('',#70,#68,#48,.T.); #83=EDGE_CURVE('',#71,#70,#49,.T.); #84=EDGE_CURVE('',#69,#72,#50,.T.); #85=EDGE_CURVE('',#72,#72,#63,.T.); #86=ORIENTED_EDGE('',*,*,#73,.F.); #87=ORIENTED_EDGE('',*,*,#74,.T.); #88=ORIENTED_EDGE('',*,*,#75,.T.); #89=ORIENTED_EDGE('',*,*,#74,.F.); #90=ORIENTED_EDGE('',*,*,#76,.F.); #91=ORIENTED_EDGE('',*,*,#77,.T.); #92=ORIENTED_EDGE('',*,*,#78,.T.); #93=ORIENTED_EDGE('',*,*,#77,.F.); #94=ORIENTED_EDGE('',*,*,#76,.T.); #95=ORIENTED_EDGE('',*,*,#73,.T.); #96=ORIENTED_EDGE('',*,*,#78,.F.); #97=ORIENTED_EDGE('',*,*,#75,.F.); #98=ORIENTED_EDGE('',*,*,#79,.F.); #99=ORIENTED_EDGE('',*,*,#80,.T.); #100=ORIENTED_EDGE('',*,*,#81,.F.); #101=ORIENTED_EDGE('',*,*,#82,.T.); #102=ORIENTED_EDGE('',*,*,#79,.T.); #103=ORIENTED_EDGE('',*,*,#82,.F.); #104=ORIENTED_EDGE('',*,*,#83,.T.); #105=ORIENTED_EDGE('',*,*,#81,.T.); #106=ORIENTED_EDGE('',*,*,#83,.F.); #107=ORIENTED_EDGE('',*,*,#80,.F.); #108=ORIENTED_EDGE('',*,*,#84,.T.); #109=ORIENTED_EDGE('',*,*,#85,.T.); #110=ORIENTED_EDGE('',*,*,#84,.F.); #111=ORIENTED_EDGE('',*,*,#85,.F.); #112=CYLINDRICAL_SURFACE('',#140,0.31); #113=CYLINDRICAL_SURFACE('',#143,0.5); #114=CYLINDRICAL_SURFACE('',#151,0.75); #115=CYLINDRICAL_SURFACE('',#154,0.31); #116=ADVANCED_FACE('',(#25),#112,.F.); #117=ADVANCED_FACE('',(#26),#113,.T.); #118=ADVANCED_FACE('',(#27,#18),#21,.T.); #119=ADVANCED_FACE('',(#28,#19),#22,.F.); #120=ADVANCED_FACE('',(#29,#20),#23,.T.); #121=ADVANCED_FACE('',(#30),#114,.T.); #122=ADVANCED_FACE('',(#31),#13,.T.); #123=ADVANCED_FACE('',(#32),#115,.T.); #124=ADVANCED_FACE('',(#33),#24,.F.); #125=CLOSED_SHELL('',(#116,#117,#118,#119)); #126=CLOSED_SHELL('',(#120,#121,#122,#123,#124)); #127=DERIVED_UNIT_ELEMENT(#129,1.); #128=DERIVED_UNIT_ELEMENT(#235,-3.); #129=( MASS_UNIT() NAMED_UNIT(*) SI_UNIT(.KILO.,.GRAM.) ); #130=DERIVED_UNIT((#127,#128)); #131=MEASURE_REPRESENTATION_ITEM('density measure', POSITIVE_RATIO_MEASURE(7850.),#130); #132=PROPERTY_DEFINITION_REPRESENTATION(#137,#134); #133=PROPERTY_DEFINITION_REPRESENTATION(#138,#135); #134=REPRESENTATION('material name',(#136),#232); #135=REPRESENTATION('density',(#131),#232); #136=DESCRIPTIVE_REPRESENTATION_ITEM('Steel','Steel'); #137=PROPERTY_DEFINITION('material property','material name',#242); #138=PROPERTY_DEFINITION('material property','density of part',#242); #139=AXIS2_PLACEMENT_3D('placement',#198,#157,#158); #140=AXIS2_PLACEMENT_3D('',#199,#159,#160); #141=AXIS2_PLACEMENT_3D('',#201,#161,#162); #142=AXIS2_PLACEMENT_3D('',#204,#164,#165); #143=AXIS2_PLACEMENT_3D('',#205,#166,#167); #144=AXIS2_PLACEMENT_3D('',#207,#168,#169); #145=AXIS2_PLACEMENT_3D('',#210,#171,#172); #146=AXIS2_PLACEMENT_3D('',#211,#173,#174); #147=AXIS2_PLACEMENT_3D('',#212,#175,#176); #148=AXIS2_PLACEMENT_3D('',#213,#177,#178); #149=AXIS2_PLACEMENT_3D('',#215,#179,#180); #150=AXIS2_PLACEMENT_3D('',#217,#181,#182); #151=AXIS2_PLACEMENT_3D('',#218,#183,#184); #152=AXIS2_PLACEMENT_3D('',#220,#185,#186); #153=AXIS2_PLACEMENT_3D('',#222,#188,#189); #154=AXIS2_PLACEMENT_3D('',#225,#191,#192); #155=AXIS2_PLACEMENT_3D('',#228,#194,#195); #156=AXIS2_PLACEMENT_3D('',#229,#196,#197); #157=DIRECTION('axis',(0.,0.,1.)); #158=DIRECTION('refdir',(1.,0.,0.)); #159=DIRECTION('center_axis',(0.,0.,1.)); #160=DIRECTION('ref_axis',(1.,0.,0.)); #161=DIRECTION('center_axis',(0.,0.,-1.)); #162=DIRECTION('ref_axis',(1.,0.,0.)); #163=DIRECTION('',(0.,0.,-1.)); #164=DIRECTION('center_axis',(0.,0.,-1.)); #165=DIRECTION('ref_axis',(1.,0.,0.)); #166=DIRECTION('center_axis',(0.,0.,1.)); #167=DIRECTION('ref_axis',(1.,0.,0.)); #168=DIRECTION('center_axis',(0.,0.,1.)); #169=DIRECTION('ref_axis',(1.,0.,0.)); #170=DIRECTION('',(0.,0.,-1.)); #171=DIRECTION('center_axis',(0.,0.,1.)); #172=DIRECTION('ref_axis',(1.,0.,0.)); #173=DIRECTION('center_axis',(0.,0.,1.)); #174=DIRECTION('ref_axis',(1.,0.,0.)); #175=DIRECTION('center_axis',(0.,0.,1.)); #176=DIRECTION('ref_axis',(1.,0.,0.)); #177=DIRECTION('center_axis',(0.,0.,-1.)); #178=DIRECTION('ref_axis',(-1.,0.,0.)); #179=DIRECTION('center_axis',(0.,0.,1.)); #180=DIRECTION('ref_axis',(1.,0.,0.)); #181=DIRECTION('center_axis',(0.,0.,1.)); #182=DIRECTION('ref_axis',(1.,0.,0.)); #183=DIRECTION('center_axis',(0.,0.,1.)); #184=DIRECTION('ref_axis',(1.,0.,0.)); #185=DIRECTION('center_axis',(0.,0.,1.)); #186=DIRECTION('ref_axis',(1.,0.,0.)); #187=DIRECTION('',(0.,0.,-1.)); #188=DIRECTION('center_axis',(0.,0.,-1.)); #189=DIRECTION('ref_axis',(1.,0.,0.)); #190=DIRECTION('',(-0.683941128881331,-8.37586314289749E-17,-0.729537204140084)); #191=DIRECTION('center_axis',(0.,0.,1.)); #192=DIRECTION('ref_axis',(1.,0.,0.)); #193=DIRECTION('',(0.,0.,-1.)); #194=DIRECTION('center_axis',(0.,0.,1.)); #195=DIRECTION('ref_axis',(1.,0.,0.)); #196=DIRECTION('center_axis',(0.,0.,1.)); #197=DIRECTION('ref_axis',(1.,0.,0.)); #198=CARTESIAN_POINT('',(0.,0.,0.)); #199=CARTESIAN_POINT('Origin',(0.,0.,0.)); #200=CARTESIAN_POINT('',(-0.31,-3.7964050773568E-17,13.)); #201=CARTESIAN_POINT('Origin',(0.,0.,13.)); #202=CARTESIAN_POINT('',(-0.31,-3.7964050773568E-17,0.)); #203=CARTESIAN_POINT('',(-0.31,-3.7964050773568E-17,0.)); #204=CARTESIAN_POINT('Origin',(0.,0.,0.)); #205=CARTESIAN_POINT('Origin',(0.,0.,0.)); #206=CARTESIAN_POINT('',(-0.5,-6.12323399573677E-17,13.)); #207=CARTESIAN_POINT('Origin',(0.,0.,13.)); #208=CARTESIAN_POINT('',(-0.5,-6.12323399573677E-17,0.)); #209=CARTESIAN_POINT('',(-0.5,-6.12323399573677E-17,0.)); #210=CARTESIAN_POINT('Origin',(0.,0.,0.)); #211=CARTESIAN_POINT('Origin',(0.,0.,13.)); #212=CARTESIAN_POINT('Origin',(0.,0.,0.)); #213=CARTESIAN_POINT('Origin',(0.75,0.,15.7999996468425)); #214=CARTESIAN_POINT('',(-0.75,-9.18485099360515E-17,15.7999996468425)); #215=CARTESIAN_POINT('Origin',(0.,0.,15.7999996468425)); #216=CARTESIAN_POINT('',(-0.31,-3.7964050773568E-17,15.8)); #217=CARTESIAN_POINT('Origin',(0.,0.,15.8)); #218=CARTESIAN_POINT('Origin',(0.,0.,16.0499996468425)); #219=CARTESIAN_POINT('',(-0.75,-9.18485099360515E-17,16.2999996468425)); #220=CARTESIAN_POINT('Origin',(0.,0.,16.2999996468425)); #221=CARTESIAN_POINT('',(-0.75,-9.18485099360515E-17,16.0499996468425)); #222=CARTESIAN_POINT('Origin',(0.,0.,16.2999996468425)); #223=CARTESIAN_POINT('',(0.,0.,17.0999996468425)); #224=CARTESIAN_POINT('',(-0.75,-9.18485099360515E-17,16.2999996468425)); #225=CARTESIAN_POINT('Origin',(0.,0.,0.)); #226=CARTESIAN_POINT('',(-0.31,-3.7964050773568E-17,0.)); #227=CARTESIAN_POINT('',(-0.31,-3.7964050773568E-17,0.)); #228=CARTESIAN_POINT('Origin',(0.,0.,0.)); #229=CARTESIAN_POINT('Origin',(0.,0.,0.)); #230=UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(0.01),#234, 'DISTANCE_ACCURACY_VALUE', 'Maximum model space distance between geometric entities at asserted c onnectivities'); #231=UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(0.01),#234, 'DISTANCE_ACCURACY_VALUE', 'Maximum model space distance between geometric entities at asserted c onnectivities'); #232=( GEOMETRIC_REPRESENTATION_CONTEXT(3) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#230)) GLOBAL_UNIT_ASSIGNED_CONTEXT((#234,#236,#237)) REPRESENTATION_CONTEXT('','3D') ); #233=( GEOMETRIC_REPRESENTATION_CONTEXT(3) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#231)) GLOBAL_UNIT_ASSIGNED_CONTEXT((#234,#236,#237)) REPRESENTATION_CONTEXT('','3D') ); #234=( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); #235=( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT($,.METRE.) ); #236=( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); #237=( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); #238=SHAPE_DEFINITION_REPRESENTATION(#239,#240); #239=PRODUCT_DEFINITION_SHAPE('',$,#242); #240=SHAPE_REPRESENTATION('',(#139),#232); #241=PRODUCT_DEFINITION_CONTEXT('part definition',#246,'design'); #242=PRODUCT_DEFINITION('pogo1mmPoint','pogo1mmPoint v1',#243,#241); #243=PRODUCT_DEFINITION_FORMATION('',$,#248); #244=PRODUCT_RELATED_PRODUCT_CATEGORY('pogo1mmPoint v1', 'pogo1mmPoint v1',(#248)); #245=APPLICATION_PROTOCOL_DEFINITION('international standard', 'automotive_design',2009,#246); #246=APPLICATION_CONTEXT( 'Core Data for Automotive Mechanical Design Process'); #247=PRODUCT_CONTEXT('part definition',#246,'mechanical'); #248=PRODUCT('pogo1mmPoint','pogo1mmPoint v1',$,(#247)); #249=PRESENTATION_STYLE_ASSIGNMENT((#252)); #250=PRESENTATION_STYLE_ASSIGNMENT((#253)); #251=PRESENTATION_STYLE_ASSIGNMENT((#254)); #252=SURFACE_STYLE_USAGE(.BOTH.,#255); #253=SURFACE_STYLE_USAGE(.BOTH.,#256); #254=SURFACE_STYLE_USAGE(.BOTH.,#257); #255=SURFACE_SIDE_STYLE('',(#258)); #256=SURFACE_SIDE_STYLE('',(#259)); #257=SURFACE_SIDE_STYLE('',(#260)); #258=SURFACE_STYLE_FILL_AREA(#261); #259=SURFACE_STYLE_FILL_AREA(#262); #260=SURFACE_STYLE_FILL_AREA(#263); #261=FILL_AREA_STYLE('Steel - Satin',(#264)); #262=FILL_AREA_STYLE('Brass - Polished',(#265)); #263=FILL_AREA_STYLE('Silver - Polished',(#266)); #264=FILL_AREA_STYLE_COLOUR('Steel - Satin',#267); #265=FILL_AREA_STYLE_COLOUR('Brass - Polished',#268); #266=FILL_AREA_STYLE_COLOUR('Silver - Polished',#269); #267=COLOUR_RGB('Steel - Satin',0.627450980392157,0.627450980392157,0.627450980392157); #268=COLOUR_RGB('Brass - Polished',0.952941176470588,0.796078431372549, 0.486274509803922); #269=COLOUR_RGB('Silver - Polished',0.984313725490196,0.980392156862745, 0.96078431372549); ENDSEC; END-ISO-10303-21; ================================================ FILE: electronics/lib/Pogo.models/pogo2mmCup.step ================================================ ISO-10303-21; HEADER; /* Generated by software containing ST-Developer * from STEP Tools, Inc. (www.steptools.com) */ FILE_DESCRIPTION( /* description */ (''), /* implementation_level */ '2;1'); FILE_NAME( /* name */ 'C:/Users/Scott/Dropbox/CNC/Models/pogo2mmCup v2.step', /* time_stamp */ '2021-04-11T16:35:45-07:00', /* author */ (''), /* organization */ (''), /* preprocessor_version */ 'ST-DEVELOPER v18.1', /* originating_system */ 'Autodesk Translation Framework v10.6.0.1341', /* authorisation */ ''); FILE_SCHEMA (('AUTOMOTIVE_DESIGN { 1 0 10303 214 3 1 1 }')); ENDSEC; DATA; #10=MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION('',(#25,#26, #27),#254); #11=SHAPE_REPRESENTATION_RELATIONSHIP('SRR','None',#261,#12); #12=ADVANCED_BREP_SHAPE_REPRESENTATION('',(#14,#15),#253); #13=CONICAL_SURFACE('',#160,0.5,0.785398163397448); #14=MANIFOLD_SOLID_BREP('Body1',#137); #15=MANIFOLD_SOLID_BREP('Body2',#138); #16=FACE_BOUND('',#41,.T.); #17=FACE_BOUND('',#43,.T.); #18=FACE_BOUND('',#46,.T.); #19=FACE_BOUND('',#49,.T.); #20=PLANE('',#158); #21=PLANE('',#159); #22=PLANE('',#162); #23=PLANE('',#167); #24=PLANE('',#170); #25=STYLED_ITEM('',(#271),#128); #26=STYLED_ITEM('',(#270),#14); #27=STYLED_ITEM('',(#272),#15); #28=FACE_OUTER_BOUND('',#38,.T.); #29=FACE_OUTER_BOUND('',#39,.T.); #30=FACE_OUTER_BOUND('',#40,.T.); #31=FACE_OUTER_BOUND('',#42,.T.); #32=FACE_OUTER_BOUND('',#44,.T.); #33=FACE_OUTER_BOUND('',#45,.T.); #34=FACE_OUTER_BOUND('',#47,.T.); #35=FACE_OUTER_BOUND('',#48,.T.); #36=FACE_OUTER_BOUND('',#50,.T.); #37=FACE_OUTER_BOUND('',#51,.T.); #38=EDGE_LOOP('',(#95,#96,#97,#98)); #39=EDGE_LOOP('',(#99,#100,#101,#102)); #40=EDGE_LOOP('',(#103)); #41=EDGE_LOOP('',(#104)); #42=EDGE_LOOP('',(#105)); #43=EDGE_LOOP('',(#106)); #44=EDGE_LOOP('',(#107,#108,#109)); #45=EDGE_LOOP('',(#110)); #46=EDGE_LOOP('',(#111)); #47=EDGE_LOOP('',(#112,#113,#114,#115)); #48=EDGE_LOOP('',(#116)); #49=EDGE_LOOP('',(#117)); #50=EDGE_LOOP('',(#118,#119,#120,#121)); #51=EDGE_LOOP('',(#122)); #52=LINE('',#221,#57); #53=LINE('',#227,#58); #54=LINE('',#234,#59); #55=LINE('',#244,#60); #56=LINE('',#248,#61); #57=VECTOR('',#177,0.835); #58=VECTOR('',#184,1.); #59=VECTOR('',#193,0.5); #60=VECTOR('',#206,1.26); #61=VECTOR('',#211,0.835); #62=CIRCLE('',#153,0.835); #63=CIRCLE('',#154,0.835); #64=CIRCLE('',#156,1.); #65=CIRCLE('',#157,1.); #66=CIRCLE('',#161,1.00000074207783); #67=CIRCLE('',#163,1.26); #68=CIRCLE('',#164,0.835); #69=CIRCLE('',#166,1.26); #70=CIRCLE('',#169,0.835); #71=VERTEX_POINT('',#218); #72=VERTEX_POINT('',#220); #73=VERTEX_POINT('',#224); #74=VERTEX_POINT('',#226); #75=VERTEX_POINT('',#232); #76=VERTEX_POINT('',#233); #77=VERTEX_POINT('',#237); #78=VERTEX_POINT('',#239); #79=VERTEX_POINT('',#242); #80=VERTEX_POINT('',#247); #81=EDGE_CURVE('',#71,#71,#62,.T.); #82=EDGE_CURVE('',#71,#72,#52,.T.); #83=EDGE_CURVE('',#72,#72,#63,.T.); #84=EDGE_CURVE('',#73,#73,#64,.T.); #85=EDGE_CURVE('',#73,#74,#53,.T.); #86=EDGE_CURVE('',#74,#74,#65,.T.); #87=EDGE_CURVE('',#75,#76,#54,.T.); #88=EDGE_CURVE('',#76,#76,#66,.T.); #89=EDGE_CURVE('',#77,#77,#67,.T.); #90=EDGE_CURVE('',#78,#78,#68,.T.); #91=EDGE_CURVE('',#79,#79,#69,.T.); #92=EDGE_CURVE('',#79,#77,#55,.T.); #93=EDGE_CURVE('',#78,#80,#56,.T.); #94=EDGE_CURVE('',#80,#80,#70,.T.); #95=ORIENTED_EDGE('',*,*,#81,.F.); #96=ORIENTED_EDGE('',*,*,#82,.T.); #97=ORIENTED_EDGE('',*,*,#83,.T.); #98=ORIENTED_EDGE('',*,*,#82,.F.); #99=ORIENTED_EDGE('',*,*,#84,.F.); #100=ORIENTED_EDGE('',*,*,#85,.T.); #101=ORIENTED_EDGE('',*,*,#86,.T.); #102=ORIENTED_EDGE('',*,*,#85,.F.); #103=ORIENTED_EDGE('',*,*,#84,.T.); #104=ORIENTED_EDGE('',*,*,#81,.T.); #105=ORIENTED_EDGE('',*,*,#86,.F.); #106=ORIENTED_EDGE('',*,*,#83,.F.); #107=ORIENTED_EDGE('',*,*,#87,.T.); #108=ORIENTED_EDGE('',*,*,#88,.F.); #109=ORIENTED_EDGE('',*,*,#87,.F.); #110=ORIENTED_EDGE('',*,*,#89,.F.); #111=ORIENTED_EDGE('',*,*,#90,.T.); #112=ORIENTED_EDGE('',*,*,#91,.F.); #113=ORIENTED_EDGE('',*,*,#92,.T.); #114=ORIENTED_EDGE('',*,*,#89,.T.); #115=ORIENTED_EDGE('',*,*,#92,.F.); #116=ORIENTED_EDGE('',*,*,#91,.T.); #117=ORIENTED_EDGE('',*,*,#88,.T.); #118=ORIENTED_EDGE('',*,*,#90,.F.); #119=ORIENTED_EDGE('',*,*,#93,.T.); #120=ORIENTED_EDGE('',*,*,#94,.T.); #121=ORIENTED_EDGE('',*,*,#93,.F.); #122=ORIENTED_EDGE('',*,*,#94,.F.); #123=CYLINDRICAL_SURFACE('',#152,0.835); #124=CYLINDRICAL_SURFACE('',#155,1.); #125=CYLINDRICAL_SURFACE('',#165,1.26); #126=CYLINDRICAL_SURFACE('',#168,0.835); #127=ADVANCED_FACE('',(#28),#123,.F.); #128=ADVANCED_FACE('',(#29),#124,.T.); #129=ADVANCED_FACE('',(#30,#16),#20,.T.); #130=ADVANCED_FACE('',(#31,#17),#21,.F.); #131=ADVANCED_FACE('',(#32),#13,.F.); #132=ADVANCED_FACE('',(#33,#18),#22,.F.); #133=ADVANCED_FACE('',(#34),#125,.T.); #134=ADVANCED_FACE('',(#35,#19),#23,.T.); #135=ADVANCED_FACE('',(#36),#126,.T.); #136=ADVANCED_FACE('',(#37),#24,.F.); #137=CLOSED_SHELL('',(#127,#128,#129,#130)); #138=CLOSED_SHELL('',(#131,#132,#133,#134,#135,#136)); #139=DERIVED_UNIT_ELEMENT(#141,1.); #140=DERIVED_UNIT_ELEMENT(#256,-3.); #141=( MASS_UNIT() NAMED_UNIT(*) SI_UNIT(.KILO.,.GRAM.) ); #142=DERIVED_UNIT((#139,#140)); #143=MEASURE_REPRESENTATION_ITEM('density measure', POSITIVE_RATIO_MEASURE(7850.),#142); #144=PROPERTY_DEFINITION_REPRESENTATION(#149,#146); #145=PROPERTY_DEFINITION_REPRESENTATION(#150,#147); #146=REPRESENTATION('material name',(#148),#253); #147=REPRESENTATION('density',(#143),#253); #148=DESCRIPTIVE_REPRESENTATION_ITEM('Steel','Steel'); #149=PROPERTY_DEFINITION('material property','material name',#263); #150=PROPERTY_DEFINITION('material property','density of part',#263); #151=AXIS2_PLACEMENT_3D('placement',#216,#171,#172); #152=AXIS2_PLACEMENT_3D('',#217,#173,#174); #153=AXIS2_PLACEMENT_3D('',#219,#175,#176); #154=AXIS2_PLACEMENT_3D('',#222,#178,#179); #155=AXIS2_PLACEMENT_3D('',#223,#180,#181); #156=AXIS2_PLACEMENT_3D('',#225,#182,#183); #157=AXIS2_PLACEMENT_3D('',#228,#185,#186); #158=AXIS2_PLACEMENT_3D('',#229,#187,#188); #159=AXIS2_PLACEMENT_3D('',#230,#189,#190); #160=AXIS2_PLACEMENT_3D('',#231,#191,#192); #161=AXIS2_PLACEMENT_3D('',#235,#194,#195); #162=AXIS2_PLACEMENT_3D('',#236,#196,#197); #163=AXIS2_PLACEMENT_3D('',#238,#198,#199); #164=AXIS2_PLACEMENT_3D('',#240,#200,#201); #165=AXIS2_PLACEMENT_3D('',#241,#202,#203); #166=AXIS2_PLACEMENT_3D('',#243,#204,#205); #167=AXIS2_PLACEMENT_3D('',#245,#207,#208); #168=AXIS2_PLACEMENT_3D('',#246,#209,#210); #169=AXIS2_PLACEMENT_3D('',#249,#212,#213); #170=AXIS2_PLACEMENT_3D('',#250,#214,#215); #171=DIRECTION('axis',(0.,0.,1.)); #172=DIRECTION('refdir',(1.,0.,0.)); #173=DIRECTION('center_axis',(0.,0.,1.)); #174=DIRECTION('ref_axis',(1.,0.,0.)); #175=DIRECTION('center_axis',(0.,0.,-1.)); #176=DIRECTION('ref_axis',(1.,0.,0.)); #177=DIRECTION('',(0.,0.,-1.)); #178=DIRECTION('center_axis',(0.,0.,-1.)); #179=DIRECTION('ref_axis',(1.,0.,0.)); #180=DIRECTION('center_axis',(0.,0.,1.)); #181=DIRECTION('ref_axis',(1.,0.,0.)); #182=DIRECTION('center_axis',(0.,0.,1.)); #183=DIRECTION('ref_axis',(1.,0.,0.)); #184=DIRECTION('',(0.,0.,-1.)); #185=DIRECTION('center_axis',(0.,0.,1.)); #186=DIRECTION('ref_axis',(1.,0.,0.)); #187=DIRECTION('center_axis',(0.,0.,1.)); #188=DIRECTION('ref_axis',(1.,0.,0.)); #189=DIRECTION('center_axis',(0.,0.,1.)); #190=DIRECTION('ref_axis',(1.,0.,0.)); #191=DIRECTION('center_axis',(0.,0.,1.)); #192=DIRECTION('ref_axis',(1.,0.,0.)); #193=DIRECTION('',(-0.707106781186547,-8.65956056235493E-17,0.707106781186548)); #194=DIRECTION('center_axis',(0.,0.,-1.)); #195=DIRECTION('ref_axis',(1.,0.,0.)); #196=DIRECTION('center_axis',(0.,0.,1.)); #197=DIRECTION('ref_axis',(-1.,0.,0.)); #198=DIRECTION('center_axis',(0.,0.,1.)); #199=DIRECTION('ref_axis',(-1.,0.,0.)); #200=DIRECTION('center_axis',(0.,0.,1.)); #201=DIRECTION('ref_axis',(1.,0.,0.)); #202=DIRECTION('center_axis',(0.,0.,1.)); #203=DIRECTION('ref_axis',(-1.,0.,0.)); #204=DIRECTION('center_axis',(0.,0.,1.)); #205=DIRECTION('ref_axis',(-1.,0.,0.)); #206=DIRECTION('',(0.,0.,-1.)); #207=DIRECTION('center_axis',(0.,0.,1.)); #208=DIRECTION('ref_axis',(-1.,0.,0.)); #209=DIRECTION('center_axis',(0.,0.,1.)); #210=DIRECTION('ref_axis',(1.,0.,0.)); #211=DIRECTION('',(0.,0.,-1.)); #212=DIRECTION('center_axis',(0.,0.,1.)); #213=DIRECTION('ref_axis',(1.,0.,0.)); #214=DIRECTION('center_axis',(0.,0.,1.)); #215=DIRECTION('ref_axis',(1.,0.,0.)); #216=CARTESIAN_POINT('',(0.,0.,0.)); #217=CARTESIAN_POINT('Origin',(0.,0.,0.)); #218=CARTESIAN_POINT('',(-0.835,-1.02258007728804E-16,25.)); #219=CARTESIAN_POINT('Origin',(0.,0.,25.)); #220=CARTESIAN_POINT('',(-0.835,-1.02258007728804E-16,0.)); #221=CARTESIAN_POINT('',(-0.835,-1.02258007728804E-16,0.)); #222=CARTESIAN_POINT('Origin',(0.,0.,0.)); #223=CARTESIAN_POINT('Origin',(0.,0.,0.)); #224=CARTESIAN_POINT('',(-1.,-1.22464679914735E-16,25.)); #225=CARTESIAN_POINT('Origin',(0.,0.,25.)); #226=CARTESIAN_POINT('',(-1.,-1.22464679914735E-16,0.)); #227=CARTESIAN_POINT('',(-1.,-1.22464679914735E-16,0.)); #228=CARTESIAN_POINT('Origin',(0.,0.,0.)); #229=CARTESIAN_POINT('Origin',(0.,0.,25.)); #230=CARTESIAN_POINT('Origin',(0.,0.,0.)); #231=CARTESIAN_POINT('Origin',(0.,0.,32.6999992579222)); #232=CARTESIAN_POINT('',(1.38777878078145E-16,0.,32.1999992579222)); #233=CARTESIAN_POINT('',(-1.00000074207783,-1.22464770793059E-16,33.2)); #234=CARTESIAN_POINT('',(-0.5,-6.12323399573677E-17,32.6999992579222)); #235=CARTESIAN_POINT('Origin',(0.,0.,33.2)); #236=CARTESIAN_POINT('Origin',(0.,0.,31.)); #237=CARTESIAN_POINT('',(1.26,1.54305496692567E-16,31.)); #238=CARTESIAN_POINT('Origin',(0.,0.,31.)); #239=CARTESIAN_POINT('',(-0.835,-1.02258007728804E-16,31.)); #240=CARTESIAN_POINT('Origin',(0.,0.,31.)); #241=CARTESIAN_POINT('Origin',(0.,0.,31.)); #242=CARTESIAN_POINT('',(1.26,1.54305496692567E-16,33.2)); #243=CARTESIAN_POINT('Origin',(0.,0.,33.2)); #244=CARTESIAN_POINT('',(1.26,1.54305496692567E-16,31.)); #245=CARTESIAN_POINT('Origin',(0.,0.,33.2)); #246=CARTESIAN_POINT('Origin',(0.,0.,0.)); #247=CARTESIAN_POINT('',(-0.835,-1.02258007728804E-16,0.)); #248=CARTESIAN_POINT('',(-0.835,-1.02258007728804E-16,0.)); #249=CARTESIAN_POINT('Origin',(0.,0.,0.)); #250=CARTESIAN_POINT('Origin',(0.,0.,0.)); #251=UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(0.01),#255, 'DISTANCE_ACCURACY_VALUE', 'Maximum model space distance between geometric entities at asserted c onnectivities'); #252=UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(0.01),#255, 'DISTANCE_ACCURACY_VALUE', 'Maximum model space distance between geometric entities at asserted c onnectivities'); #253=( GEOMETRIC_REPRESENTATION_CONTEXT(3) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#251)) GLOBAL_UNIT_ASSIGNED_CONTEXT((#255,#257,#258)) REPRESENTATION_CONTEXT('','3D') ); #254=( GEOMETRIC_REPRESENTATION_CONTEXT(3) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#252)) GLOBAL_UNIT_ASSIGNED_CONTEXT((#255,#257,#258)) REPRESENTATION_CONTEXT('','3D') ); #255=( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); #256=( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT($,.METRE.) ); #257=( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); #258=( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); #259=SHAPE_DEFINITION_REPRESENTATION(#260,#261); #260=PRODUCT_DEFINITION_SHAPE('',$,#263); #261=SHAPE_REPRESENTATION('',(#151),#253); #262=PRODUCT_DEFINITION_CONTEXT('part definition',#267,'design'); #263=PRODUCT_DEFINITION('pogo2mmCup','pogo2mmCup v2',#264,#262); #264=PRODUCT_DEFINITION_FORMATION('',$,#269); #265=PRODUCT_RELATED_PRODUCT_CATEGORY('pogo2mmCup v2','pogo2mmCup v2',(#269)); #266=APPLICATION_PROTOCOL_DEFINITION('international standard', 'automotive_design',2009,#267); #267=APPLICATION_CONTEXT( 'Core Data for Automotive Mechanical Design Process'); #268=PRODUCT_CONTEXT('part definition',#267,'mechanical'); #269=PRODUCT('pogo2mmCup','pogo2mmCup v2',$,(#268)); #270=PRESENTATION_STYLE_ASSIGNMENT((#273)); #271=PRESENTATION_STYLE_ASSIGNMENT((#274)); #272=PRESENTATION_STYLE_ASSIGNMENT((#275)); #273=SURFACE_STYLE_USAGE(.BOTH.,#276); #274=SURFACE_STYLE_USAGE(.BOTH.,#277); #275=SURFACE_STYLE_USAGE(.BOTH.,#278); #276=SURFACE_SIDE_STYLE('',(#279)); #277=SURFACE_SIDE_STYLE('',(#280)); #278=SURFACE_SIDE_STYLE('',(#281)); #279=SURFACE_STYLE_FILL_AREA(#282); #280=SURFACE_STYLE_FILL_AREA(#283); #281=SURFACE_STYLE_FILL_AREA(#284); #282=FILL_AREA_STYLE('Steel - Satin',(#285)); #283=FILL_AREA_STYLE('Brass - Polished',(#286)); #284=FILL_AREA_STYLE('Silver - Polished',(#287)); #285=FILL_AREA_STYLE_COLOUR('Steel - Satin',#288); #286=FILL_AREA_STYLE_COLOUR('Brass - Polished',#289); #287=FILL_AREA_STYLE_COLOUR('Silver - Polished',#290); #288=COLOUR_RGB('Steel - Satin',0.627450980392157,0.627450980392157,0.627450980392157); #289=COLOUR_RGB('Brass - Polished',0.952941176470588,0.796078431372549, 0.486274509803922); #290=COLOUR_RGB('Silver - Polished',0.984313725490196,0.980392156862745, 0.96078431372549); ENDSEC; END-ISO-10303-21; ================================================ FILE: electronics/lib/RS485.pretty/RS485Module.kicad_mod ================================================ (module RS485Module (layer F.Cu) (tedit 5FFB4CC4) (fp_text reference REF** (at 1.27 -3.81) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value RS485Module (at 17.78 2.54) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 30.099 8.89) (end 30.099 -1.27) (layer F.SilkS) (width 0.15)) (fp_line (start 37.719 8.89) (end 30.099 8.89) (layer F.SilkS) (width 0.15)) (fp_line (start 37.719 -1.27) (end 37.719 8.89) (layer F.SilkS) (width 0.15)) (fp_line (start 30.099 -1.27) (end 37.719 -1.27) (layer F.SilkS) (width 0.15)) (fp_line (start -1.524 10.795) (end -1.524 -3.175) (layer F.SilkS) (width 0.15)) (fp_line (start 42.799 10.795) (end -1.524 10.795) (layer F.SilkS) (width 0.15)) (fp_line (start 42.799 -3.175) (end 42.799 10.795) (layer F.SilkS) (width 0.15)) (fp_line (start -1.524 -3.175) (end 42.799 -3.175) (layer F.SilkS) (width 0.15)) (fp_text user RO (at 2.54 0) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text user RE (at 2.54 2.54) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text user DE (at 2.54 5.08) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text user DI (at 2.54 7.62) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text user VCC (at 38.1 0) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text user B (at 38.1 2.54) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text user A (at 38.1 5.08) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text user GND (at 38.1 7.62) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (pad RO thru_hole circle (at 0 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad RE thru_hole circle (at 0 2.54) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad DE thru_hole circle (at 0 5.08) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad DI thru_hole circle (at 0 7.62) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad VCC thru_hole circle (at 41.275 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad B thru_hole circle (at 41.275 2.54) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad A thru_hole circle (at 41.275 5.08) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad GND thru_hole circle (at 41.275 7.62) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) ) ================================================ FILE: electronics/lib/RS485Module.dcm ================================================ EESchema-DOCLIB Version 2.0 # #End Doc Library ================================================ FILE: electronics/lib/RS485Module.lib ================================================ EESchema-LIBRARY Version 2.4 #encoding utf-8 # # RS485Module # DEF RS485Module U 0 40 Y Y 1 F N F0 "U" 0 300 50 H V C CNN F1 "RS485Module" 0 350 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C 150 -100 50 0 1 0 N C 150 100 50 0 1 0 N S -450 250 450 -250 0 1 0 f S 50 200 250 -200 0 1 0 N P 2 0 1 0 100 -100 200 -100 N P 2 0 1 0 100 100 200 100 N P 2 0 1 0 150 -50 150 -150 N P 2 0 1 0 150 150 150 50 N X A A 550 -50 100 L 50 50 1 1 B X B B 550 50 100 L 50 50 1 1 B X DE DE -550 -50 100 R 50 50 1 1 I X DI DI -550 -150 100 R 50 50 1 1 I X GND GND 550 -150 100 L 50 50 1 1 W X RE RE -550 50 100 R 50 50 1 1 I X RO RO -550 150 100 R 50 50 1 1 O X VCC VCC 550 150 100 L 50 50 1 1 W ENDDRAW ENDDEF # #End Library ================================================ FILE: electronics/lib/Resistor0805ThroughHole.pretty/R_0805_ThroughHole.kicad_mod ================================================ (module R_0805_ThroughHole (layer F.Cu) (tedit 59E052CC) (descr "Resistor SMD 0805, hand soldering") (tags "resistor 0805") (attr smd) (fp_text reference R8 (at 0 -1.7) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value 220 (at 0 1.75) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text user %R (at 3.796 0) (layer F.Fab) (effects (font (size 0.5 0.5) (thickness 0.075))) ) (fp_line (start 2.796 0.62) (end 2.796 -0.62) (layer F.Fab) (width 0.1)) (fp_line (start 4.796 0.62) (end 2.796 0.62) (layer F.Fab) (width 0.1)) (fp_line (start 4.796 -0.62) (end 4.796 0.62) (layer F.Fab) (width 0.1)) (fp_line (start 2.796 -0.62) (end 4.796 -0.62) (layer F.Fab) (width 0.1)) (fp_line (start 4.396 0.88) (end 3.196 0.88) (layer F.SilkS) (width 0.12)) (fp_line (start 3.196 -0.88) (end 4.396 -0.88) (layer F.SilkS) (width 0.12)) (fp_line (start 1.446 -0.9) (end 6.146 -0.9) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.446 -0.9) (end 1.446 0.9) (layer F.CrtYd) (width 0.05)) (fp_line (start 6.146 0.9) (end 6.146 -0.9) (layer F.CrtYd) (width 0.05)) (fp_line (start 6.146 0.9) (end 1.446 0.9) (layer F.CrtYd) (width 0.05)) (pad 1 smd rect (at 2.446 0) (size 1.5 1.3) (layers F.Cu F.Paste F.Mask)) (pad 2 smd rect (at 5.146 0) (size 1.5 1.3) (layers F.Cu F.Paste F.Mask)) (pad 1 thru_hole circle (at 0 0) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask)) (pad 2 thru_hole circle (at 7.62 0) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask)) (model ${KISYS3DMOD}/Resistors_SMD.3dshapes/R_0805.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) ================================================ FILE: electronics/lib/SSD1306.pretty/SSD1306_128x32.kicad_mod ================================================ (module SSD1306_128x32 (layer F.Cu) (tedit 5FF4B39A) (fp_text reference REF** (at 0 0.5) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value SSD1306_128x32 (at 0 -0.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -1.5 -2.19) (end 36.5 -2.19) (layer F.SilkS) (width 0.15)) (fp_line (start -1.5 9.81) (end 36.5 9.81) (layer F.SilkS) (width 0.15)) (fp_line (start -1.5 -2.19) (end -1.5 9.81) (layer F.SilkS) (width 0.15)) (fp_line (start 36.5 -2.19) (end 36.5 9.81) (layer F.SilkS) (width 0.15)) (fp_text user SDA (at 2.54 0) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15)) (justify left)) ) (fp_text user SCL (at 2.54 2.54) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15)) (justify left)) ) (fp_text user VCC (at 2.54 5.08) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15)) (justify left)) ) (fp_text user GND (at 2.54 7.62) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15)) (justify left)) ) (pad 1 thru_hole circle (at 0 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 2 thru_hole circle (at 0 2.54) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 3 thru_hole circle (at 0 5.08) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad 4 thru_hole circle (at 0 7.62) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) ) ================================================ FILE: electronics/lib/ST7789.pretty/ST7789_240x240.kicad_mod ================================================ (module ST7789_240x240 (layer F.Cu) (tedit 5F95076D) (fp_text reference REF** (at -1.27 -3.81) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value ST7789_240x240 (at -1.27 -5.08) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -6.27 -1.5) (end -6.27 37.72) (layer F.SilkS) (width 0.15)) (fp_line (start -6.27 37.72) (end 21.51 37.72) (layer F.SilkS) (width 0.15)) (fp_line (start 21.51 37.72) (end 21.51 -1.5) (layer F.SilkS) (width 0.15)) (fp_line (start -6.27 -1.5) (end 21.51 -1.5) (layer F.SilkS) (width 0.15)) (fp_line (start -5.46 3.5) (end 20.7 3.5) (layer F.SilkS) (width 0.15)) (fp_line (start 20.7 3.5) (end 20.7 32.72) (layer F.SilkS) (width 0.15)) (fp_line (start 20.7 32.72) (end -5.46 32.72) (layer F.SilkS) (width 0.15)) (fp_line (start -5.46 32.72) (end -5.46 3.5) (layer F.SilkS) (width 0.15)) (fp_line (start -4.08 4.83) (end 19.32 4.83) (layer F.SilkS) (width 0.15)) (fp_line (start 19.32 4.83) (end 19.32 28.23) (layer F.SilkS) (width 0.15)) (fp_line (start 19.32 28.23) (end -4.08 28.23) (layer F.SilkS) (width 0.15)) (fp_line (start -4.08 28.23) (end -4.08 4.83) (layer F.SilkS) (width 0.15)) (fp_line (start -4.08 4.83) (end 19.32 28.23) (layer F.SilkS) (width 0.15)) (fp_line (start 19.32 4.83) (end -4.08 28.23) (layer F.SilkS) (width 0.15)) (pad GND thru_hole circle (at 0 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad VCC thru_hole circle (at 2.54 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad SCL thru_hole circle (at 5.08 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad SDA thru_hole circle (at 7.62 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad RES thru_hole circle (at 10.16 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad DC thru_hole circle (at 12.7 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad BLK thru_hole circle (at 15.24 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad "" thru_hole circle (at -3.77 1) (size 3.5 3.5) (drill 2) (layers *.Cu *.Mask)) (pad "" thru_hole circle (at 19.01 1) (size 3.5 3.5) (drill 2) (layers *.Cu *.Mask)) (pad "" thru_hole circle (at -3.77 35.22) (size 3.5 3.5) (drill 2) (layers *.Cu *.Mask)) (pad "" thru_hole circle (at 19.01 35.22) (size 3.5 3.5) (drill 2) (layers *.Cu *.Mask)) ) ================================================ FILE: electronics/lib/ST7789.pretty/ST7789_80x160.kicad_mod ================================================ (module ST7789_80x160 (layer F.Cu) (tedit 5F95B61B) (fp_text reference REF** (at -1.27 -3.81) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value ST7789_80x160 (at -1.27 -5.08) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -6.11 -1.44) (end -6.11 22.56) (layer F.SilkS) (width 0.15)) (fp_line (start -6.11 -1.44) (end 23.89 -1.44) (layer F.SilkS) (width 0.15)) (fp_line (start -6.11 22.56) (end 23.89 22.56) (layer F.SilkS) (width 0.15)) (fp_line (start 23.89 -1.44) (end 23.89 22.56) (layer F.SilkS) (width 0.15)) (fp_line (start -5.2 3.71) (end 22.95 3.71) (layer F.SilkS) (width 0.15)) (fp_line (start 22.95 3.71) (end 22.95 17.41) (layer F.SilkS) (width 0.15)) (fp_line (start 22.95 17.41) (end -5.2 17.41) (layer F.SilkS) (width 0.15)) (fp_line (start -5.2 17.41) (end -5.2 3.71) (layer F.SilkS) (width 0.15)) (fp_line (start -0.59 5.16) (end 21.11 5.16) (layer F.SilkS) (width 0.15)) (fp_line (start 21.11 5.16) (end 21.11 15.96) (layer F.SilkS) (width 0.15)) (fp_line (start 21.11 15.96) (end -0.59 15.96) (layer F.SilkS) (width 0.15)) (fp_line (start -0.59 15.96) (end -0.59 5.16) (layer F.SilkS) (width 0.15)) (fp_line (start -0.59 5.16) (end 21.11 15.96) (layer F.SilkS) (width 0.15)) (fp_line (start 21.11 5.16) (end -0.59 15.96) (layer F.SilkS) (width 0.15)) (pad GND thru_hole circle (at 0 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad VCC thru_hole circle (at 2.54 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad SCL thru_hole circle (at 5.08 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad SDA thru_hole circle (at 7.62 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad RES thru_hole circle (at 10.16 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad DC thru_hole circle (at 12.7 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad BLK thru_hole circle (at 17.78 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (pad "" thru_hole circle (at -3.61 1.06) (size 3.5 3.5) (drill 2) (layers *.Cu *.Mask)) (pad "" thru_hole circle (at 21.39 1.06) (size 3.5 3.5) (drill 2) (layers *.Cu *.Mask)) (pad "" thru_hole circle (at -3.61 20.06) (size 3.5 3.5) (drill 2) (layers *.Cu *.Mask)) (pad "" thru_hole circle (at 21.39 20.06) (size 3.5 3.5) (drill 2) (layers *.Cu *.Mask)) (pad CS thru_hole circle (at 15.24 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) ) ================================================ FILE: electronics/lib/ScrewTerminals.pretty/C72334_WJ500V-5.08-3P.kicad_mod ================================================ (module C72334_WJ500V-5.08-3P (layer F.Cu) (tedit 601A2A0A) (fp_text reference REF** (at 0 0.5) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value C72334_WJ500V-5.08-3P (at 0 -0.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -2.54 -4.5) (end 12.7 -4.5) (layer F.CrtYd) (width 0.12)) (fp_line (start 12.7 -4.5) (end 12.7 5.5) (layer F.CrtYd) (width 0.12)) (fp_line (start 12.7 5.5) (end -2.54 5.5) (layer F.CrtYd) (width 0.12)) (fp_line (start -2.54 5.5) (end -2.54 -4.5) (layer F.CrtYd) (width 0.12)) (fp_line (start -2.54 5.5) (end -2.54 -4.5) (layer F.SilkS) (width 0.12)) (fp_line (start 12.7 5.5) (end -2.54 5.5) (layer F.SilkS) (width 0.12)) (fp_line (start -2.54 -4.5) (end 12.7 -4.5) (layer F.SilkS) (width 0.12)) (fp_line (start 12.7 -4.5) (end 12.7 5.5) (layer F.SilkS) (width 0.12)) (fp_line (start -1.27 5.5) (end -0.635 4.31) (layer F.SilkS) (width 0.15)) (fp_line (start -0.635 4.31) (end 0.635 4.31) (layer F.SilkS) (width 0.15)) (fp_line (start 0.635 4.31) (end 1.27 5.5) (layer F.SilkS) (width 0.15)) (fp_line (start 5.715 4.31) (end 6.35 5.5) (layer F.SilkS) (width 0.15)) (fp_line (start 3.81 5.5) (end 4.445 4.31) (layer F.SilkS) (width 0.15)) (fp_line (start 4.445 4.31) (end 5.715 4.31) (layer F.SilkS) (width 0.15)) (fp_line (start 9.525 4.31) (end 10.795 4.31) (layer F.SilkS) (width 0.15)) (fp_line (start 8.89 5.5) (end 9.525 4.31) (layer F.SilkS) (width 0.15)) (fp_line (start 10.795 4.31) (end 11.43 5.5) (layer F.SilkS) (width 0.15)) (pad 1 thru_hole rect (at 0 0) (size 2 2) (drill 1.2) (layers *.Cu *.Mask)) (pad 2 thru_hole circle (at 5.08 0) (size 2 2) (drill 1.2) (layers *.Cu *.Mask)) (pad 3 thru_hole circle (at 10.16 0) (size 2 2) (drill 1.2) (layers *.Cu *.Mask)) (model ${KISYS3DMOD}/TerminalBlock_Phoenix.3dshapes/TerminalBlock_Phoenix_MKDS-1,5-3-5.08_1x03_P5.08mm_Horizontal.step (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) ================================================ FILE: electronics/lib/ScrewTerminals.pretty/C8465_WJ500V-5.08-2P.kicad_mod ================================================ (module C8465_WJ500V-5.08-2P (layer F.Cu) (tedit 604991F7) (fp_text reference REF** (at 0 0.5) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value C8465_WJ500V-5.08-2P (at 0 -0.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -2.54 -4.5) (end 7.62 -4.5) (layer F.CrtYd) (width 0.12)) (fp_line (start 7.62 -4.5) (end 7.62 5.5) (layer F.CrtYd) (width 0.12)) (fp_line (start 7.62 5.5) (end -2.54 5.5) (layer F.CrtYd) (width 0.12)) (fp_line (start -2.54 5.5) (end -2.54 -4.5) (layer F.CrtYd) (width 0.12)) (fp_line (start -2.54 5.5) (end -2.54 -4.5) (layer F.SilkS) (width 0.12)) (fp_line (start 7.62 5.5) (end -2.54 5.5) (layer F.SilkS) (width 0.12)) (fp_line (start -2.54 -4.5) (end 7.62 -4.5) (layer F.SilkS) (width 0.12)) (fp_line (start 7.62 -4.5) (end 7.62 5.5) (layer F.SilkS) (width 0.12)) (fp_line (start -1.27 5.5) (end -0.635 4.31) (layer F.SilkS) (width 0.15)) (fp_line (start -0.635 4.31) (end 0.635 4.31) (layer F.SilkS) (width 0.15)) (fp_line (start 0.635 4.31) (end 1.27 5.5) (layer F.SilkS) (width 0.15)) (fp_line (start 5.715 4.31) (end 6.35 5.5) (layer F.SilkS) (width 0.15)) (fp_line (start 3.81 5.5) (end 4.445 4.31) (layer F.SilkS) (width 0.15)) (fp_line (start 4.445 4.31) (end 5.715 4.31) (layer F.SilkS) (width 0.15)) (pad 1 thru_hole rect (at 0 0) (size 2 2) (drill 1.2) (layers *.Cu *.Mask)) (pad 2 thru_hole circle (at 5.08 0) (size 2 2) (drill 1.2) (layers *.Cu *.Mask)) (model ${KISYS3DMOD}/TerminalBlock_Phoenix.3dshapes/TerminalBlock_Phoenix_MKDS-1,5-2-5.08_1x02_P5.08mm_Horizontal.step (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) ================================================ FILE: electronics/lib/ScrewTerminals.pretty/EB147A-02-D.kicad_mod ================================================ (module EB147A-02-D (layer F.Cu) (tedit 605D33FA) (fp_text reference REF** (at 2.54 -2.921) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value EB147A-02-D (at 0 -0.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 4.445 3.04) (end 5.715 3.04) (layer F.SilkS) (width 0.15)) (fp_line (start 3.81 4.23) (end 4.445 3.04) (layer F.SilkS) (width 0.15)) (fp_line (start 5.715 3.04) (end 6.35 4.23) (layer F.SilkS) (width 0.15)) (fp_line (start 0.635 3.04) (end 1.27 4.23) (layer F.SilkS) (width 0.15)) (fp_line (start -0.635 3.04) (end 0.635 3.04) (layer F.SilkS) (width 0.15)) (fp_line (start -1.27 4.23) (end -0.635 3.04) (layer F.SilkS) (width 0.15)) (fp_line (start 7.62 -6.2) (end 7.62 4.3) (layer F.SilkS) (width 0.12)) (fp_line (start -2.54 -6.2) (end 7.62 -6.2) (layer F.SilkS) (width 0.12)) (fp_line (start 7.62 4.3) (end -2.54 4.3) (layer F.SilkS) (width 0.12)) (fp_line (start -2.54 4.3) (end -2.54 -6.2) (layer F.SilkS) (width 0.12)) (fp_line (start -2.54 4.3) (end -2.54 -6.2) (layer F.CrtYd) (width 0.12)) (fp_line (start 7.62 4.3) (end -2.54 4.3) (layer F.CrtYd) (width 0.12)) (fp_line (start 7.62 -6.2) (end 7.62 4.3) (layer F.CrtYd) (width 0.12)) (fp_line (start -2.54 -6.2) (end 7.62 -6.2) (layer F.CrtYd) (width 0.12)) (pad 1 thru_hole rect (at 0 0) (size 2 2) (drill 1.2) (layers *.Cu *.Mask)) (pad 2 thru_hole circle (at 5.08 0) (size 2 2) (drill 1.2) (layers *.Cu *.Mask)) (model ${KISYS3DMOD}/TerminalBlock_Phoenix.3dshapes/TerminalBlock_Phoenix_MKDS-1,5-2-5.08_1x02_P5.08mm_Horizontal.step (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) ================================================ FILE: electronics/lib/ScrewTerminals.pretty/Generic-5.08-2P.kicad_mod ================================================ (module Generic-5.08-2P (layer F.Cu) (tedit 618039E9) (fp_text reference REF** (at 2.54 -2.921) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value Generic-5.08-2P (at 0 -0.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 4.445 3.04) (end 5.715 3.04) (layer F.SilkS) (width 0.15)) (fp_line (start 3.81 4.23) (end 4.445 3.04) (layer F.SilkS) (width 0.15)) (fp_line (start 5.715 3.04) (end 6.35 4.23) (layer F.SilkS) (width 0.15)) (fp_line (start 0.635 3.04) (end 1.27 4.23) (layer F.SilkS) (width 0.15)) (fp_line (start -0.635 3.04) (end 0.635 3.04) (layer F.SilkS) (width 0.15)) (fp_line (start -1.27 4.23) (end -0.635 3.04) (layer F.SilkS) (width 0.15)) (fp_line (start 7.62 -4.3) (end 7.62 4.3) (layer F.SilkS) (width 0.12)) (fp_line (start -2.54 -4.3) (end 7.62 -4.3) (layer F.SilkS) (width 0.12)) (fp_line (start 7.62 4.3) (end -2.54 4.3) (layer F.SilkS) (width 0.12)) (fp_line (start -2.54 4.3) (end -2.54 -4.3) (layer F.SilkS) (width 0.12)) (fp_line (start -2.54 6.2) (end -2.54 -6.2) (layer F.CrtYd) (width 0.12)) (fp_line (start 7.62 6.2) (end -2.54 6.2) (layer F.CrtYd) (width 0.12)) (fp_line (start 7.62 -6.2) (end 7.62 6.2) (layer F.CrtYd) (width 0.12)) (fp_line (start -2.54 -6.2) (end 7.62 -6.2) (layer F.CrtYd) (width 0.12)) (fp_text user "Generic screw terminal keep out region" (at 2.54 -5.08) (layer F.Fab) (effects (font (size 0.5 0.3) (thickness 0.05))) ) (fp_text user "Generic screw terminal keep out region" (at 2.54 5.08) (layer F.Fab) (effects (font (size 0.5 0.3) (thickness 0.05))) ) (pad 1 thru_hole rect (at 0 0) (size 2.5 2.5) (drill 1.5) (layers *.Cu *.Mask)) (pad 2 thru_hole circle (at 5.08 0) (size 2.5 2.5) (drill 1.5) (layers *.Cu *.Mask)) (model ${KISYS3DMOD}/TerminalBlock_Phoenix.3dshapes/TerminalBlock_Phoenix_MKDS-1,5-2-5.08_1x02_P5.08mm_Horizontal.step (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) ================================================ FILE: electronics/lib/ScrewTerminals.pretty/Generic-5.08-3P.kicad_mod ================================================ (module Generic-5.08-3P (layer F.Cu) (tedit 606BBBA9) (fp_text reference REF** (at 2.54 -2.921) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value Generic-5.08-3P (at 0 -0.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 8.89 4.23) (end 9.525 3.04) (layer F.SilkS) (width 0.15)) (fp_line (start 10.795 3.04) (end 11.43 4.23) (layer F.SilkS) (width 0.15)) (fp_line (start 9.525 3.04) (end 10.795 3.04) (layer F.SilkS) (width 0.15)) (fp_line (start -2.54 -6.2) (end 12.7 -6.2) (layer F.CrtYd) (width 0.12)) (fp_line (start 12.7 -6.2) (end 12.7 6.2) (layer F.CrtYd) (width 0.12)) (fp_line (start 12.7 6.2) (end -2.54 6.2) (layer F.CrtYd) (width 0.12)) (fp_line (start -2.54 6.2) (end -2.54 -6.2) (layer F.CrtYd) (width 0.12)) (fp_line (start -2.54 4.3) (end -2.54 -4.3) (layer F.SilkS) (width 0.12)) (fp_line (start 12.7 4.3) (end -2.54 4.3) (layer F.SilkS) (width 0.12)) (fp_line (start -2.54 -4.3) (end 12.7 -4.3) (layer F.SilkS) (width 0.12)) (fp_line (start 12.7 -4.3) (end 12.7 4.3) (layer F.SilkS) (width 0.12)) (fp_line (start -1.27 4.23) (end -0.635 3.04) (layer F.SilkS) (width 0.15)) (fp_line (start -0.635 3.04) (end 0.635 3.04) (layer F.SilkS) (width 0.15)) (fp_line (start 0.635 3.04) (end 1.27 4.23) (layer F.SilkS) (width 0.15)) (fp_line (start 5.715 3.04) (end 6.35 4.23) (layer F.SilkS) (width 0.15)) (fp_line (start 3.81 4.23) (end 4.445 3.04) (layer F.SilkS) (width 0.15)) (fp_line (start 4.445 3.04) (end 5.715 3.04) (layer F.SilkS) (width 0.15)) (fp_text user "Generic screw terminal keep out region" (at 5.08 -5.08) (layer F.Fab) (effects (font (size 0.5 0.3) (thickness 0.05))) ) (fp_text user "Generic screw terminal keep out region" (at 5.08 5.08) (layer F.Fab) (effects (font (size 0.5 0.3) (thickness 0.05))) ) (pad 1 thru_hole rect (at 0 0) (size 2 2) (drill 1.2) (layers *.Cu *.Mask)) (pad 2 thru_hole circle (at 5.08 0) (size 2 2) (drill 1.2) (layers *.Cu *.Mask)) (pad 3 thru_hole circle (at 10.16 0) (size 2 2) (drill 1.2) (layers *.Cu *.Mask)) (model ${KISYS3DMOD}/TerminalBlock_Phoenix.3dshapes/TerminalBlock_Phoenix_MKDS-1,5-3-5.08_1x03_P5.08mm_Horizontal.step (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) ================================================ FILE: electronics/lib/SolderJumpers.pretty/SolderJumper-2_P1.3mm_Bridged_Pad1.0x1.5mm.kicad_mod ================================================ (module SolderJumper-2_P1.3mm_Bridged_Pad1.0x1.5mm (layer F.Cu) (tedit 5F7C5974) (descr "SMD Solder Jumper, 1x1.5mm Pads, 0.3mm gap, bridged with 1 copper strip") (tags "solder jumper open") (attr virtual) (fp_text reference REF** (at 0 -1.8) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value SolderJumper-2_P1.3mm_Bridged_Pad1.0x1.5mm (at 0 1.9) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 0.635 0) (end -0.635 0) (layer F.Cu) (width 0.5)) (fp_line (start -1.4 1) (end -1.4 -1) (layer F.SilkS) (width 0.12)) (fp_line (start 1.4 1) (end -1.4 1) (layer F.SilkS) (width 0.12)) (fp_line (start 1.4 -1) (end 1.4 1) (layer F.SilkS) (width 0.12)) (fp_line (start -1.4 -1) (end 1.4 -1) (layer F.SilkS) (width 0.12)) (fp_line (start -1.65 -1.25) (end 1.65 -1.25) (layer F.CrtYd) (width 0.05)) (fp_line (start -1.65 -1.25) (end -1.65 1.25) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.65 1.25) (end 1.65 -1.25) (layer F.CrtYd) (width 0.05)) (fp_line (start 1.65 1.25) (end -1.65 1.25) (layer F.CrtYd) (width 0.05)) (pad 1 smd rect (at -0.65 0) (size 1 1.5) (layers F.Cu F.Mask)) (pad 2 smd rect (at 0.65 0) (size 1 1.5) (layers F.Cu F.Mask)) ) ================================================ FILE: electronics/lib/SwitchESE13.pretty/ESE13V01D.kicad_mod ================================================ (module ESE13V01D (layer F.Cu) (tedit 60739FC9) (fp_text reference REF** (at -1.1 2.9) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value ESE13V01D (at 0 -0.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -3.8 2.3) (end -3.8 -2.3) (layer F.CrtYd) (width 0.12)) (fp_line (start 2.7 2.3) (end -3.8 2.3) (layer F.CrtYd) (width 0.12)) (fp_line (start 2.7 -2.3) (end 2.7 2.3) (layer F.CrtYd) (width 0.12)) (fp_line (start -3.8 -2.3) (end 2.7 -2.3) (layer F.CrtYd) (width 0.12)) (fp_line (start 2.5 0.6) (end 0.55 0.6) (layer F.SilkS) (width 0.15)) (fp_line (start 2.5 -0.6) (end 2.5 0.6) (layer F.SilkS) (width 0.15)) (fp_line (start 0.55 -0.6) (end 2.5 -0.6) (layer F.SilkS) (width 0.15)) (fp_line (start -3.65 -1.8) (end 0.55 -1.8) (layer F.SilkS) (width 0.15)) (fp_line (start -3.65 1.8) (end -3.65 -1.8) (layer F.SilkS) (width 0.15)) (fp_line (start 0.55 1.8) (end -3.65 1.8) (layer F.SilkS) (width 0.15)) (fp_line (start 0.55 -1.8) (end 0.55 1.8) (layer F.SilkS) (width 0.15)) (pad ~ smd rect (at 0 -1.625) (size 0.7 1.05) (layers F.Cu F.Paste F.Mask)) (pad ~ smd rect (at 0 1.625) (size 0.7 1.05) (layers F.Cu F.Paste F.Mask)) (pad "" np_thru_hole circle (at -0.45 0) (size 0.9 0.9) (drill 0.8) (layers *.Cu *.Mask)) (pad "" np_thru_hole circle (at -2.45 0) (size 0.9 0.9) (drill 0.8) (layers *.Cu *.Mask)) (pad 1 smd rect (at -3 -1.7) (size 0.7 1.2) (layers F.Cu F.Paste F.Mask)) (pad 2 smd rect (at -3 1.7) (size 0.7 1.2) (layers F.Cu F.Paste F.Mask)) ) ================================================ FILE: electronics/lib/TTGO.models/TTGO_TDisplay.step ================================================ ISO-10303-21; HEADER; /* Generated by software containing ST-Developer * from STEP Tools, Inc. (www.steptools.com) */ FILE_DESCRIPTION( /* description */ (''), /* implementation_level */ '2;1'); FILE_NAME( /* name */ 'C:/Users/Scott/Dropbox/CNC/Models/TTGO_TDisplay.step', /* time_stamp */ '2021-04-09T23:21:30-07:00', /* author */ (''), /* organization */ (''), /* preprocessor_version */ 'ST-DEVELOPER v18.1', /* originating_system */ 'Autodesk Translation Framework v10.6.0.1341', /* authorisation */ ''); FILE_SCHEMA (('AUTOMOTIVE_DESIGN { 1 0 10303 214 3 1 1 }')); ENDSEC; DATA; #10=MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION('',(#71,#72, #73,#74,#75,#76,#77,#78,#79,#80,#81),#2557); #11=SHAPE_REPRESENTATION_RELATIONSHIP('SRR','None',#2564,#12); #12=ADVANCED_BREP_SHAPE_REPRESENTATION('',(#13,#14,#15,#16,#17,#18,#19, #20,#21,#22),#2556); #13=MANIFOLD_SOLID_BREP('PCB',#1536); #14=MANIFOLD_SOLID_BREP('Display',#1537); #15=MANIFOLD_SOLID_BREP('ResetBody',#1538); #16=MANIFOLD_SOLID_BREP('ResetButton',#1539); #17=MANIFOLD_SOLID_BREP('RButtonBody',#1540); #18=MANIFOLD_SOLID_BREP('RButtonButton',#1541); #19=MANIFOLD_SOLID_BREP('LButtonBody',#1542); #20=MANIFOLD_SOLID_BREP('LButtonButton',#1543); #21=MANIFOLD_SOLID_BREP('USB',#1544); #22=MANIFOLD_SOLID_BREP('JST',#1545); #23=FACE_BOUND('',#255,.T.); #24=FACE_BOUND('',#256,.T.); #25=FACE_BOUND('',#257,.T.); #26=FACE_BOUND('',#258,.T.); #27=FACE_BOUND('',#259,.T.); #28=FACE_BOUND('',#260,.T.); #29=FACE_BOUND('',#261,.T.); #30=FACE_BOUND('',#262,.T.); #31=FACE_BOUND('',#263,.T.); #32=FACE_BOUND('',#264,.T.); #33=FACE_BOUND('',#265,.T.); #34=FACE_BOUND('',#266,.T.); #35=FACE_BOUND('',#267,.T.); #36=FACE_BOUND('',#268,.T.); #37=FACE_BOUND('',#269,.T.); #38=FACE_BOUND('',#270,.T.); #39=FACE_BOUND('',#271,.T.); #40=FACE_BOUND('',#272,.T.); #41=FACE_BOUND('',#273,.T.); #42=FACE_BOUND('',#274,.T.); #43=FACE_BOUND('',#275,.T.); #44=FACE_BOUND('',#276,.T.); #45=FACE_BOUND('',#277,.T.); #46=FACE_BOUND('',#278,.T.); #47=FACE_BOUND('',#280,.T.); #48=FACE_BOUND('',#281,.T.); #49=FACE_BOUND('',#282,.T.); #50=FACE_BOUND('',#283,.T.); #51=FACE_BOUND('',#284,.T.); #52=FACE_BOUND('',#285,.T.); #53=FACE_BOUND('',#286,.T.); #54=FACE_BOUND('',#287,.T.); #55=FACE_BOUND('',#288,.T.); #56=FACE_BOUND('',#289,.T.); #57=FACE_BOUND('',#290,.T.); #58=FACE_BOUND('',#291,.T.); #59=FACE_BOUND('',#292,.T.); #60=FACE_BOUND('',#293,.T.); #61=FACE_BOUND('',#294,.T.); #62=FACE_BOUND('',#295,.T.); #63=FACE_BOUND('',#296,.T.); #64=FACE_BOUND('',#297,.T.); #65=FACE_BOUND('',#298,.T.); #66=FACE_BOUND('',#299,.T.); #67=FACE_BOUND('',#300,.T.); #68=FACE_BOUND('',#301,.T.); #69=FACE_BOUND('',#302,.T.); #70=FACE_BOUND('',#303,.T.); #71=STYLED_ITEM('',(#2574),#1480); #72=STYLED_ITEM('',(#2573),#13); #73=STYLED_ITEM('',(#2573),#14); #74=STYLED_ITEM('',(#2575),#15); #75=STYLED_ITEM('',(#2576),#16); #76=STYLED_ITEM('',(#2575),#17); #77=STYLED_ITEM('',(#2577),#18); #78=STYLED_ITEM('',(#2575),#19); #79=STYLED_ITEM('',(#2577),#20); #80=STYLED_ITEM('',(#2573),#21); #81=STYLED_ITEM('',(#2575),#22); #82=PLANE('',#1631); #83=PLANE('',#1632); #84=PLANE('',#1633); #85=PLANE('',#1634); #86=PLANE('',#1635); #87=PLANE('',#1636); #88=PLANE('',#1637); #89=PLANE('',#1638); #90=PLANE('',#1639); #91=PLANE('',#1640); #92=PLANE('',#1641); #93=PLANE('',#1642); #94=PLANE('',#1643); #95=PLANE('',#1644); #96=PLANE('',#1645); #97=PLANE('',#1646); #98=PLANE('',#1647); #99=PLANE('',#1648); #100=PLANE('',#1649); #101=PLANE('',#1650); #102=PLANE('',#1651); #103=PLANE('',#1652); #104=PLANE('',#1653); #105=PLANE('',#1654); #106=PLANE('',#1655); #107=PLANE('',#1656); #108=PLANE('',#1657); #109=PLANE('',#1658); #110=PLANE('',#1659); #111=PLANE('',#1660); #112=PLANE('',#1661); #113=PLANE('',#1662); #114=PLANE('',#1663); #115=PLANE('',#1668); #116=PLANE('',#1671); #117=PLANE('',#1672); #118=PLANE('',#1673); #119=PLANE('',#1674); #120=PLANE('',#1675); #121=PLANE('',#1676); #122=PLANE('',#1677); #123=PLANE('',#1678); #124=PLANE('',#1679); #125=PLANE('',#1684); #126=PLANE('',#1687); #127=PLANE('',#1688); #128=PLANE('',#1689); #129=PLANE('',#1696); #130=PLANE('',#1697); #131=PLANE('',#1698); #132=PLANE('',#1699); #133=PLANE('',#1700); #134=PLANE('',#1701); #135=PLANE('',#1702); #136=PLANE('',#1703); #137=PLANE('',#1704); #138=FACE_OUTER_BOUND('',#224,.T.); #139=FACE_OUTER_BOUND('',#225,.T.); #140=FACE_OUTER_BOUND('',#226,.T.); #141=FACE_OUTER_BOUND('',#227,.T.); #142=FACE_OUTER_BOUND('',#228,.T.); #143=FACE_OUTER_BOUND('',#229,.T.); #144=FACE_OUTER_BOUND('',#230,.T.); #145=FACE_OUTER_BOUND('',#231,.T.); #146=FACE_OUTER_BOUND('',#232,.T.); #147=FACE_OUTER_BOUND('',#233,.T.); #148=FACE_OUTER_BOUND('',#234,.T.); #149=FACE_OUTER_BOUND('',#235,.T.); #150=FACE_OUTER_BOUND('',#236,.T.); #151=FACE_OUTER_BOUND('',#237,.T.); #152=FACE_OUTER_BOUND('',#238,.T.); #153=FACE_OUTER_BOUND('',#239,.T.); #154=FACE_OUTER_BOUND('',#240,.T.); #155=FACE_OUTER_BOUND('',#241,.T.); #156=FACE_OUTER_BOUND('',#242,.T.); #157=FACE_OUTER_BOUND('',#243,.T.); #158=FACE_OUTER_BOUND('',#244,.T.); #159=FACE_OUTER_BOUND('',#245,.T.); #160=FACE_OUTER_BOUND('',#246,.T.); #161=FACE_OUTER_BOUND('',#247,.T.); #162=FACE_OUTER_BOUND('',#248,.T.); #163=FACE_OUTER_BOUND('',#249,.T.); #164=FACE_OUTER_BOUND('',#250,.T.); #165=FACE_OUTER_BOUND('',#251,.T.); #166=FACE_OUTER_BOUND('',#252,.T.); #167=FACE_OUTER_BOUND('',#253,.T.); #168=FACE_OUTER_BOUND('',#254,.T.); #169=FACE_OUTER_BOUND('',#279,.T.); #170=FACE_OUTER_BOUND('',#304,.T.); #171=FACE_OUTER_BOUND('',#305,.T.); #172=FACE_OUTER_BOUND('',#306,.T.); #173=FACE_OUTER_BOUND('',#307,.T.); #174=FACE_OUTER_BOUND('',#308,.T.); #175=FACE_OUTER_BOUND('',#309,.T.); #176=FACE_OUTER_BOUND('',#310,.T.); #177=FACE_OUTER_BOUND('',#311,.T.); #178=FACE_OUTER_BOUND('',#312,.T.); #179=FACE_OUTER_BOUND('',#313,.T.); #180=FACE_OUTER_BOUND('',#314,.T.); #181=FACE_OUTER_BOUND('',#315,.T.); #182=FACE_OUTER_BOUND('',#316,.T.); #183=FACE_OUTER_BOUND('',#317,.T.); #184=FACE_OUTER_BOUND('',#318,.T.); #185=FACE_OUTER_BOUND('',#319,.T.); #186=FACE_OUTER_BOUND('',#320,.T.); #187=FACE_OUTER_BOUND('',#321,.T.); #188=FACE_OUTER_BOUND('',#322,.T.); #189=FACE_OUTER_BOUND('',#323,.T.); #190=FACE_OUTER_BOUND('',#324,.T.); #191=FACE_OUTER_BOUND('',#325,.T.); #192=FACE_OUTER_BOUND('',#326,.T.); #193=FACE_OUTER_BOUND('',#327,.T.); #194=FACE_OUTER_BOUND('',#328,.T.); #195=FACE_OUTER_BOUND('',#329,.T.); #196=FACE_OUTER_BOUND('',#330,.T.); #197=FACE_OUTER_BOUND('',#331,.T.); #198=FACE_OUTER_BOUND('',#332,.T.); #199=FACE_OUTER_BOUND('',#333,.T.); #200=FACE_OUTER_BOUND('',#334,.T.); #201=FACE_OUTER_BOUND('',#335,.T.); #202=FACE_OUTER_BOUND('',#336,.T.); #203=FACE_OUTER_BOUND('',#337,.T.); #204=FACE_OUTER_BOUND('',#338,.T.); #205=FACE_OUTER_BOUND('',#339,.T.); #206=FACE_OUTER_BOUND('',#340,.T.); #207=FACE_OUTER_BOUND('',#341,.T.); #208=FACE_OUTER_BOUND('',#342,.T.); #209=FACE_OUTER_BOUND('',#343,.T.); #210=FACE_OUTER_BOUND('',#344,.T.); #211=FACE_OUTER_BOUND('',#345,.T.); #212=FACE_OUTER_BOUND('',#346,.T.); #213=FACE_OUTER_BOUND('',#347,.T.); #214=FACE_OUTER_BOUND('',#348,.T.); #215=FACE_OUTER_BOUND('',#349,.T.); #216=FACE_OUTER_BOUND('',#350,.T.); #217=FACE_OUTER_BOUND('',#351,.T.); #218=FACE_OUTER_BOUND('',#352,.T.); #219=FACE_OUTER_BOUND('',#353,.T.); #220=FACE_OUTER_BOUND('',#354,.T.); #221=FACE_OUTER_BOUND('',#355,.T.); #222=FACE_OUTER_BOUND('',#356,.T.); #223=FACE_OUTER_BOUND('',#357,.T.); #224=EDGE_LOOP('',(#1024,#1025,#1026,#1027)); #225=EDGE_LOOP('',(#1028,#1029,#1030,#1031)); #226=EDGE_LOOP('',(#1032,#1033,#1034,#1035)); #227=EDGE_LOOP('',(#1036,#1037,#1038,#1039)); #228=EDGE_LOOP('',(#1040,#1041,#1042,#1043)); #229=EDGE_LOOP('',(#1044,#1045,#1046,#1047)); #230=EDGE_LOOP('',(#1048,#1049,#1050,#1051)); #231=EDGE_LOOP('',(#1052,#1053,#1054,#1055)); #232=EDGE_LOOP('',(#1056,#1057,#1058,#1059)); #233=EDGE_LOOP('',(#1060,#1061,#1062,#1063)); #234=EDGE_LOOP('',(#1064,#1065,#1066,#1067)); #235=EDGE_LOOP('',(#1068,#1069,#1070,#1071)); #236=EDGE_LOOP('',(#1072,#1073,#1074,#1075)); #237=EDGE_LOOP('',(#1076,#1077,#1078,#1079)); #238=EDGE_LOOP('',(#1080,#1081,#1082,#1083)); #239=EDGE_LOOP('',(#1084,#1085,#1086,#1087)); #240=EDGE_LOOP('',(#1088,#1089,#1090,#1091)); #241=EDGE_LOOP('',(#1092,#1093,#1094,#1095)); #242=EDGE_LOOP('',(#1096,#1097,#1098,#1099)); #243=EDGE_LOOP('',(#1100,#1101,#1102,#1103)); #244=EDGE_LOOP('',(#1104,#1105,#1106,#1107)); #245=EDGE_LOOP('',(#1108,#1109,#1110,#1111)); #246=EDGE_LOOP('',(#1112,#1113,#1114,#1115)); #247=EDGE_LOOP('',(#1116,#1117,#1118,#1119)); #248=EDGE_LOOP('',(#1120,#1121,#1122,#1123)); #249=EDGE_LOOP('',(#1124,#1125,#1126,#1127)); #250=EDGE_LOOP('',(#1128,#1129,#1130,#1131)); #251=EDGE_LOOP('',(#1132,#1133,#1134,#1135)); #252=EDGE_LOOP('',(#1136,#1137,#1138,#1139)); #253=EDGE_LOOP('',(#1140,#1141,#1142,#1143)); #254=EDGE_LOOP('',(#1144,#1145,#1146,#1147,#1148,#1149)); #255=EDGE_LOOP('',(#1150)); #256=EDGE_LOOP('',(#1151)); #257=EDGE_LOOP('',(#1152)); #258=EDGE_LOOP('',(#1153)); #259=EDGE_LOOP('',(#1154)); #260=EDGE_LOOP('',(#1155)); #261=EDGE_LOOP('',(#1156)); #262=EDGE_LOOP('',(#1157)); #263=EDGE_LOOP('',(#1158)); #264=EDGE_LOOP('',(#1159)); #265=EDGE_LOOP('',(#1160)); #266=EDGE_LOOP('',(#1161)); #267=EDGE_LOOP('',(#1162)); #268=EDGE_LOOP('',(#1163)); #269=EDGE_LOOP('',(#1164)); #270=EDGE_LOOP('',(#1165)); #271=EDGE_LOOP('',(#1166)); #272=EDGE_LOOP('',(#1167)); #273=EDGE_LOOP('',(#1168)); #274=EDGE_LOOP('',(#1169)); #275=EDGE_LOOP('',(#1170)); #276=EDGE_LOOP('',(#1171)); #277=EDGE_LOOP('',(#1172)); #278=EDGE_LOOP('',(#1173)); #279=EDGE_LOOP('',(#1174,#1175,#1176,#1177,#1178,#1179)); #280=EDGE_LOOP('',(#1180)); #281=EDGE_LOOP('',(#1181)); #282=EDGE_LOOP('',(#1182)); #283=EDGE_LOOP('',(#1183)); #284=EDGE_LOOP('',(#1184)); #285=EDGE_LOOP('',(#1185)); #286=EDGE_LOOP('',(#1186)); #287=EDGE_LOOP('',(#1187)); #288=EDGE_LOOP('',(#1188)); #289=EDGE_LOOP('',(#1189)); #290=EDGE_LOOP('',(#1190)); #291=EDGE_LOOP('',(#1191)); #292=EDGE_LOOP('',(#1192)); #293=EDGE_LOOP('',(#1193)); #294=EDGE_LOOP('',(#1194)); #295=EDGE_LOOP('',(#1195)); #296=EDGE_LOOP('',(#1196)); #297=EDGE_LOOP('',(#1197)); #298=EDGE_LOOP('',(#1198)); #299=EDGE_LOOP('',(#1199)); #300=EDGE_LOOP('',(#1200)); #301=EDGE_LOOP('',(#1201)); #302=EDGE_LOOP('',(#1202)); #303=EDGE_LOOP('',(#1203)); #304=EDGE_LOOP('',(#1204,#1205,#1206,#1207)); #305=EDGE_LOOP('',(#1208,#1209,#1210,#1211)); #306=EDGE_LOOP('',(#1212,#1213,#1214,#1215)); #307=EDGE_LOOP('',(#1216,#1217,#1218,#1219)); #308=EDGE_LOOP('',(#1220,#1221,#1222,#1223)); #309=EDGE_LOOP('',(#1224,#1225,#1226,#1227)); #310=EDGE_LOOP('',(#1228,#1229,#1230,#1231)); #311=EDGE_LOOP('',(#1232,#1233,#1234,#1235)); #312=EDGE_LOOP('',(#1236,#1237,#1238,#1239)); #313=EDGE_LOOP('',(#1240,#1241,#1242,#1243)); #314=EDGE_LOOP('',(#1244,#1245,#1246,#1247)); #315=EDGE_LOOP('',(#1248,#1249,#1250,#1251)); #316=EDGE_LOOP('',(#1252,#1253,#1254,#1255)); #317=EDGE_LOOP('',(#1256,#1257,#1258,#1259)); #318=EDGE_LOOP('',(#1260,#1261,#1262,#1263)); #319=EDGE_LOOP('',(#1264,#1265,#1266,#1267)); #320=EDGE_LOOP('',(#1268,#1269,#1270,#1271)); #321=EDGE_LOOP('',(#1272,#1273,#1274,#1275)); #322=EDGE_LOOP('',(#1276,#1277,#1278,#1279)); #323=EDGE_LOOP('',(#1280,#1281,#1282,#1283)); #324=EDGE_LOOP('',(#1284,#1285,#1286,#1287)); #325=EDGE_LOOP('',(#1288,#1289,#1290,#1291)); #326=EDGE_LOOP('',(#1292,#1293,#1294,#1295)); #327=EDGE_LOOP('',(#1296,#1297,#1298,#1299)); #328=EDGE_LOOP('',(#1300,#1301,#1302,#1303)); #329=EDGE_LOOP('',(#1304,#1305,#1306,#1307)); #330=EDGE_LOOP('',(#1308,#1309,#1310,#1311)); #331=EDGE_LOOP('',(#1312,#1313,#1314,#1315)); #332=EDGE_LOOP('',(#1316,#1317,#1318,#1319)); #333=EDGE_LOOP('',(#1320,#1321,#1322,#1323)); #334=EDGE_LOOP('',(#1324,#1325,#1326,#1327)); #335=EDGE_LOOP('',(#1328,#1329,#1330,#1331)); #336=EDGE_LOOP('',(#1332,#1333,#1334,#1335)); #337=EDGE_LOOP('',(#1336,#1337,#1338,#1339)); #338=EDGE_LOOP('',(#1340,#1341,#1342,#1343)); #339=EDGE_LOOP('',(#1344,#1345,#1346,#1347)); #340=EDGE_LOOP('',(#1348,#1349,#1350,#1351)); #341=EDGE_LOOP('',(#1352,#1353,#1354,#1355)); #342=EDGE_LOOP('',(#1356,#1357,#1358,#1359)); #343=EDGE_LOOP('',(#1360,#1361,#1362,#1363)); #344=EDGE_LOOP('',(#1364,#1365,#1366,#1367)); #345=EDGE_LOOP('',(#1368,#1369,#1370,#1371)); #346=EDGE_LOOP('',(#1372,#1373,#1374,#1375)); #347=EDGE_LOOP('',(#1376,#1377,#1378,#1379)); #348=EDGE_LOOP('',(#1380,#1381,#1382,#1383)); #349=EDGE_LOOP('',(#1384,#1385,#1386,#1387)); #350=EDGE_LOOP('',(#1388,#1389,#1390,#1391)); #351=EDGE_LOOP('',(#1392,#1393,#1394,#1395)); #352=EDGE_LOOP('',(#1396,#1397,#1398,#1399)); #353=EDGE_LOOP('',(#1400,#1401,#1402,#1403)); #354=EDGE_LOOP('',(#1404,#1405,#1406,#1407)); #355=EDGE_LOOP('',(#1408,#1409,#1410,#1411)); #356=EDGE_LOOP('',(#1412,#1413,#1414,#1415)); #357=EDGE_LOOP('',(#1416,#1417,#1418,#1419)); #358=LINE('',#2142,#496); #359=LINE('',#2148,#497); #360=LINE('',#2154,#498); #361=LINE('',#2160,#499); #362=LINE('',#2166,#500); #363=LINE('',#2172,#501); #364=LINE('',#2178,#502); #365=LINE('',#2184,#503); #366=LINE('',#2190,#504); #367=LINE('',#2196,#505); #368=LINE('',#2202,#506); #369=LINE('',#2208,#507); #370=LINE('',#2214,#508); #371=LINE('',#2220,#509); #372=LINE('',#2226,#510); #373=LINE('',#2232,#511); #374=LINE('',#2238,#512); #375=LINE('',#2244,#513); #376=LINE('',#2250,#514); #377=LINE('',#2256,#515); #378=LINE('',#2262,#516); #379=LINE('',#2268,#517); #380=LINE('',#2274,#518); #381=LINE('',#2280,#519); #382=LINE('',#2285,#520); #383=LINE('',#2287,#521); #384=LINE('',#2289,#522); #385=LINE('',#2290,#523); #386=LINE('',#2293,#524); #387=LINE('',#2295,#525); #388=LINE('',#2296,#526); #389=LINE('',#2299,#527); #390=LINE('',#2301,#528); #391=LINE('',#2302,#529); #392=LINE('',#2305,#530); #393=LINE('',#2307,#531); #394=LINE('',#2308,#532); #395=LINE('',#2311,#533); #396=LINE('',#2313,#534); #397=LINE('',#2314,#535); #398=LINE('',#2316,#536); #399=LINE('',#2317,#537); #400=LINE('',#2323,#538); #401=LINE('',#2325,#539); #402=LINE('',#2327,#540); #403=LINE('',#2328,#541); #404=LINE('',#2331,#542); #405=LINE('',#2333,#543); #406=LINE('',#2334,#544); #407=LINE('',#2337,#545); #408=LINE('',#2339,#546); #409=LINE('',#2340,#547); #410=LINE('',#2342,#548); #411=LINE('',#2343,#549); #412=LINE('',#2349,#550); #413=LINE('',#2351,#551); #414=LINE('',#2353,#552); #415=LINE('',#2354,#553); #416=LINE('',#2357,#554); #417=LINE('',#2359,#555); #418=LINE('',#2360,#556); #419=LINE('',#2363,#557); #420=LINE('',#2365,#558); #421=LINE('',#2366,#559); #422=LINE('',#2368,#560); #423=LINE('',#2369,#561); #424=LINE('',#2375,#562); #425=LINE('',#2377,#563); #426=LINE('',#2379,#564); #427=LINE('',#2380,#565); #428=LINE('',#2383,#566); #429=LINE('',#2385,#567); #430=LINE('',#2386,#568); #431=LINE('',#2389,#569); #432=LINE('',#2391,#570); #433=LINE('',#2392,#571); #434=LINE('',#2394,#572); #435=LINE('',#2395,#573); #436=LINE('',#2401,#574); #437=LINE('',#2403,#575); #438=LINE('',#2405,#576); #439=LINE('',#2406,#577); #440=LINE('',#2409,#578); #441=LINE('',#2411,#579); #442=LINE('',#2412,#580); #443=LINE('',#2415,#581); #444=LINE('',#2417,#582); #445=LINE('',#2418,#583); #446=LINE('',#2420,#584); #447=LINE('',#2421,#585); #448=LINE('',#2429,#586); #449=LINE('',#2432,#587); #450=LINE('',#2437,#588); #451=LINE('',#2438,#589); #452=LINE('',#2441,#590); #453=LINE('',#2444,#591); #454=LINE('',#2446,#592); #455=LINE('',#2447,#593); #456=LINE('',#2453,#594); #457=LINE('',#2455,#595); #458=LINE('',#2457,#596); #459=LINE('',#2458,#597); #460=LINE('',#2461,#598); #461=LINE('',#2463,#599); #462=LINE('',#2464,#600); #463=LINE('',#2467,#601); #464=LINE('',#2469,#602); #465=LINE('',#2470,#603); #466=LINE('',#2472,#604); #467=LINE('',#2473,#605); #468=LINE('',#2481,#606); #469=LINE('',#2484,#607); #470=LINE('',#2489,#608); #471=LINE('',#2490,#609); #472=LINE('',#2493,#610); #473=LINE('',#2496,#611); #474=LINE('',#2498,#612); #475=LINE('',#2499,#613); #476=LINE('',#2507,#614); #477=LINE('',#2510,#615); #478=LINE('',#2515,#616); #479=LINE('',#2516,#617); #480=LINE('',#2521,#618); #481=LINE('',#2522,#619); #482=LINE('',#2524,#620); #483=LINE('',#2525,#621); #484=LINE('',#2531,#622); #485=LINE('',#2533,#623); #486=LINE('',#2535,#624); #487=LINE('',#2536,#625); #488=LINE('',#2539,#626); #489=LINE('',#2541,#627); #490=LINE('',#2542,#628); #491=LINE('',#2545,#629); #492=LINE('',#2547,#630); #493=LINE('',#2548,#631); #494=LINE('',#2550,#632); #495=LINE('',#2551,#633); #496=VECTOR('',#1711,0.5); #497=VECTOR('',#1718,0.499999999999998); #498=VECTOR('',#1725,0.5); #499=VECTOR('',#1732,0.499999999999998); #500=VECTOR('',#1739,0.499999999999998); #501=VECTOR('',#1746,0.5); #502=VECTOR('',#1753,0.499999999999998); #503=VECTOR('',#1760,0.5); #504=VECTOR('',#1767,0.499999999999998); #505=VECTOR('',#1774,0.5); #506=VECTOR('',#1781,0.499999999999998); #507=VECTOR('',#1788,0.5); #508=VECTOR('',#1795,0.499999999999998); #509=VECTOR('',#1802,0.5); #510=VECTOR('',#1809,0.499999999999998); #511=VECTOR('',#1816,0.5); #512=VECTOR('',#1823,0.5); #513=VECTOR('',#1830,0.499999999999998); #514=VECTOR('',#1837,0.499999999999998); #515=VECTOR('',#1844,0.5); #516=VECTOR('',#1851,0.499999999999998); #517=VECTOR('',#1858,0.5); #518=VECTOR('',#1865,0.499999999999998); #519=VECTOR('',#1872,0.5); #520=VECTOR('',#1877,10.); #521=VECTOR('',#1878,10.); #522=VECTOR('',#1879,10.); #523=VECTOR('',#1880,10.); #524=VECTOR('',#1883,10.); #525=VECTOR('',#1884,10.); #526=VECTOR('',#1885,10.); #527=VECTOR('',#1888,10.); #528=VECTOR('',#1889,10.); #529=VECTOR('',#1890,10.); #530=VECTOR('',#1893,10.); #531=VECTOR('',#1894,10.); #532=VECTOR('',#1895,10.); #533=VECTOR('',#1898,10.); #534=VECTOR('',#1899,10.); #535=VECTOR('',#1900,10.); #536=VECTOR('',#1903,10.); #537=VECTOR('',#1904,10.); #538=VECTOR('',#1911,10.); #539=VECTOR('',#1912,10.); #540=VECTOR('',#1913,10.); #541=VECTOR('',#1914,10.); #542=VECTOR('',#1917,10.); #543=VECTOR('',#1918,10.); #544=VECTOR('',#1919,10.); #545=VECTOR('',#1922,10.); #546=VECTOR('',#1923,10.); #547=VECTOR('',#1924,10.); #548=VECTOR('',#1927,10.); #549=VECTOR('',#1928,10.); #550=VECTOR('',#1935,10.); #551=VECTOR('',#1936,10.); #552=VECTOR('',#1937,10.); #553=VECTOR('',#1938,10.); #554=VECTOR('',#1941,10.); #555=VECTOR('',#1942,10.); #556=VECTOR('',#1943,10.); #557=VECTOR('',#1946,10.); #558=VECTOR('',#1947,10.); #559=VECTOR('',#1948,10.); #560=VECTOR('',#1951,10.); #561=VECTOR('',#1952,10.); #562=VECTOR('',#1959,10.); #563=VECTOR('',#1960,10.); #564=VECTOR('',#1961,10.); #565=VECTOR('',#1962,10.); #566=VECTOR('',#1965,10.); #567=VECTOR('',#1966,10.); #568=VECTOR('',#1967,10.); #569=VECTOR('',#1970,10.); #570=VECTOR('',#1971,10.); #571=VECTOR('',#1972,10.); #572=VECTOR('',#1975,10.); #573=VECTOR('',#1976,10.); #574=VECTOR('',#1983,10.); #575=VECTOR('',#1984,10.); #576=VECTOR('',#1985,10.); #577=VECTOR('',#1986,10.); #578=VECTOR('',#1989,10.); #579=VECTOR('',#1990,10.); #580=VECTOR('',#1991,10.); #581=VECTOR('',#1994,10.); #582=VECTOR('',#1995,10.); #583=VECTOR('',#1996,10.); #584=VECTOR('',#1999,10.); #585=VECTOR('',#2000,10.); #586=VECTOR('',#2009,10.); #587=VECTOR('',#2012,10.); #588=VECTOR('',#2017,10.); #589=VECTOR('',#2018,10.); #590=VECTOR('',#2021,10.); #591=VECTOR('',#2024,10.); #592=VECTOR('',#2027,10.); #593=VECTOR('',#2028,10.); #594=VECTOR('',#2035,10.); #595=VECTOR('',#2036,10.); #596=VECTOR('',#2037,10.); #597=VECTOR('',#2038,10.); #598=VECTOR('',#2041,10.); #599=VECTOR('',#2042,10.); #600=VECTOR('',#2043,10.); #601=VECTOR('',#2046,10.); #602=VECTOR('',#2047,10.); #603=VECTOR('',#2048,10.); #604=VECTOR('',#2051,10.); #605=VECTOR('',#2052,10.); #606=VECTOR('',#2061,10.); #607=VECTOR('',#2064,10.); #608=VECTOR('',#2069,10.); #609=VECTOR('',#2070,10.); #610=VECTOR('',#2073,10.); #611=VECTOR('',#2076,10.); #612=VECTOR('',#2079,10.); #613=VECTOR('',#2080,10.); #614=VECTOR('',#2089,10.); #615=VECTOR('',#2092,10.); #616=VECTOR('',#2097,10.); #617=VECTOR('',#2098,10.); #618=VECTOR('',#2103,10.); #619=VECTOR('',#2104,10.); #620=VECTOR('',#2107,10.); #621=VECTOR('',#2108,10.); #622=VECTOR('',#2115,10.); #623=VECTOR('',#2116,10.); #624=VECTOR('',#2117,10.); #625=VECTOR('',#2118,10.); #626=VECTOR('',#2121,10.); #627=VECTOR('',#2122,10.); #628=VECTOR('',#2123,10.); #629=VECTOR('',#2126,10.); #630=VECTOR('',#2127,10.); #631=VECTOR('',#2128,10.); #632=VECTOR('',#2131,10.); #633=VECTOR('',#2132,10.); #634=CIRCLE('',#1560,0.5); #635=CIRCLE('',#1561,0.5); #636=CIRCLE('',#1563,0.499999999999998); #637=CIRCLE('',#1564,0.499999999999998); #638=CIRCLE('',#1566,0.5); #639=CIRCLE('',#1567,0.5); #640=CIRCLE('',#1569,0.499999999999998); #641=CIRCLE('',#1570,0.499999999999998); #642=CIRCLE('',#1572,0.499999999999998); #643=CIRCLE('',#1573,0.499999999999998); #644=CIRCLE('',#1575,0.5); #645=CIRCLE('',#1576,0.5); #646=CIRCLE('',#1578,0.499999999999998); #647=CIRCLE('',#1579,0.499999999999998); #648=CIRCLE('',#1581,0.5); #649=CIRCLE('',#1582,0.5); #650=CIRCLE('',#1584,0.499999999999998); #651=CIRCLE('',#1585,0.499999999999998); #652=CIRCLE('',#1587,0.5); #653=CIRCLE('',#1588,0.5); #654=CIRCLE('',#1590,0.499999999999998); #655=CIRCLE('',#1591,0.499999999999998); #656=CIRCLE('',#1593,0.5); #657=CIRCLE('',#1594,0.5); #658=CIRCLE('',#1596,0.499999999999998); #659=CIRCLE('',#1597,0.499999999999998); #660=CIRCLE('',#1599,0.5); #661=CIRCLE('',#1600,0.5); #662=CIRCLE('',#1602,0.499999999999998); #663=CIRCLE('',#1603,0.499999999999998); #664=CIRCLE('',#1605,0.5); #665=CIRCLE('',#1606,0.5); #666=CIRCLE('',#1608,0.5); #667=CIRCLE('',#1609,0.5); #668=CIRCLE('',#1611,0.499999999999998); #669=CIRCLE('',#1612,0.499999999999998); #670=CIRCLE('',#1614,0.499999999999998); #671=CIRCLE('',#1615,0.499999999999998); #672=CIRCLE('',#1617,0.5); #673=CIRCLE('',#1618,0.5); #674=CIRCLE('',#1620,0.499999999999998); #675=CIRCLE('',#1621,0.499999999999998); #676=CIRCLE('',#1623,0.5); #677=CIRCLE('',#1624,0.5); #678=CIRCLE('',#1626,0.499999999999998); #679=CIRCLE('',#1627,0.499999999999998); #680=CIRCLE('',#1629,0.5); #681=CIRCLE('',#1630,0.5); #682=CIRCLE('',#1664,1.1); #683=CIRCLE('',#1665,1.1); #684=CIRCLE('',#1667,1.1); #685=CIRCLE('',#1669,1.1); #686=CIRCLE('',#1680,1.1); #687=CIRCLE('',#1681,1.1); #688=CIRCLE('',#1683,1.1); #689=CIRCLE('',#1685,1.1); #690=CIRCLE('',#1690,1.57); #691=CIRCLE('',#1691,1.57); #692=CIRCLE('',#1693,1.57); #693=CIRCLE('',#1695,1.57); #694=VERTEX_POINT('',#2139); #695=VERTEX_POINT('',#2141); #696=VERTEX_POINT('',#2145); #697=VERTEX_POINT('',#2147); #698=VERTEX_POINT('',#2151); #699=VERTEX_POINT('',#2153); #700=VERTEX_POINT('',#2157); #701=VERTEX_POINT('',#2159); #702=VERTEX_POINT('',#2163); #703=VERTEX_POINT('',#2165); #704=VERTEX_POINT('',#2169); #705=VERTEX_POINT('',#2171); #706=VERTEX_POINT('',#2175); #707=VERTEX_POINT('',#2177); #708=VERTEX_POINT('',#2181); #709=VERTEX_POINT('',#2183); #710=VERTEX_POINT('',#2187); #711=VERTEX_POINT('',#2189); #712=VERTEX_POINT('',#2193); #713=VERTEX_POINT('',#2195); #714=VERTEX_POINT('',#2199); #715=VERTEX_POINT('',#2201); #716=VERTEX_POINT('',#2205); #717=VERTEX_POINT('',#2207); #718=VERTEX_POINT('',#2211); #719=VERTEX_POINT('',#2213); #720=VERTEX_POINT('',#2217); #721=VERTEX_POINT('',#2219); #722=VERTEX_POINT('',#2223); #723=VERTEX_POINT('',#2225); #724=VERTEX_POINT('',#2229); #725=VERTEX_POINT('',#2231); #726=VERTEX_POINT('',#2235); #727=VERTEX_POINT('',#2237); #728=VERTEX_POINT('',#2241); #729=VERTEX_POINT('',#2243); #730=VERTEX_POINT('',#2247); #731=VERTEX_POINT('',#2249); #732=VERTEX_POINT('',#2253); #733=VERTEX_POINT('',#2255); #734=VERTEX_POINT('',#2259); #735=VERTEX_POINT('',#2261); #736=VERTEX_POINT('',#2265); #737=VERTEX_POINT('',#2267); #738=VERTEX_POINT('',#2271); #739=VERTEX_POINT('',#2273); #740=VERTEX_POINT('',#2277); #741=VERTEX_POINT('',#2279); #742=VERTEX_POINT('',#2283); #743=VERTEX_POINT('',#2284); #744=VERTEX_POINT('',#2286); #745=VERTEX_POINT('',#2288); #746=VERTEX_POINT('',#2292); #747=VERTEX_POINT('',#2294); #748=VERTEX_POINT('',#2298); #749=VERTEX_POINT('',#2300); #750=VERTEX_POINT('',#2304); #751=VERTEX_POINT('',#2306); #752=VERTEX_POINT('',#2310); #753=VERTEX_POINT('',#2312); #754=VERTEX_POINT('',#2321); #755=VERTEX_POINT('',#2322); #756=VERTEX_POINT('',#2324); #757=VERTEX_POINT('',#2326); #758=VERTEX_POINT('',#2330); #759=VERTEX_POINT('',#2332); #760=VERTEX_POINT('',#2336); #761=VERTEX_POINT('',#2338); #762=VERTEX_POINT('',#2347); #763=VERTEX_POINT('',#2348); #764=VERTEX_POINT('',#2350); #765=VERTEX_POINT('',#2352); #766=VERTEX_POINT('',#2356); #767=VERTEX_POINT('',#2358); #768=VERTEX_POINT('',#2362); #769=VERTEX_POINT('',#2364); #770=VERTEX_POINT('',#2373); #771=VERTEX_POINT('',#2374); #772=VERTEX_POINT('',#2376); #773=VERTEX_POINT('',#2378); #774=VERTEX_POINT('',#2382); #775=VERTEX_POINT('',#2384); #776=VERTEX_POINT('',#2388); #777=VERTEX_POINT('',#2390); #778=VERTEX_POINT('',#2399); #779=VERTEX_POINT('',#2400); #780=VERTEX_POINT('',#2402); #781=VERTEX_POINT('',#2404); #782=VERTEX_POINT('',#2408); #783=VERTEX_POINT('',#2410); #784=VERTEX_POINT('',#2414); #785=VERTEX_POINT('',#2416); #786=VERTEX_POINT('',#2425); #787=VERTEX_POINT('',#2426); #788=VERTEX_POINT('',#2428); #789=VERTEX_POINT('',#2430); #790=VERTEX_POINT('',#2434); #791=VERTEX_POINT('',#2435); #792=VERTEX_POINT('',#2440); #793=VERTEX_POINT('',#2442); #794=VERTEX_POINT('',#2451); #795=VERTEX_POINT('',#2452); #796=VERTEX_POINT('',#2454); #797=VERTEX_POINT('',#2456); #798=VERTEX_POINT('',#2460); #799=VERTEX_POINT('',#2462); #800=VERTEX_POINT('',#2466); #801=VERTEX_POINT('',#2468); #802=VERTEX_POINT('',#2477); #803=VERTEX_POINT('',#2478); #804=VERTEX_POINT('',#2480); #805=VERTEX_POINT('',#2482); #806=VERTEX_POINT('',#2486); #807=VERTEX_POINT('',#2487); #808=VERTEX_POINT('',#2492); #809=VERTEX_POINT('',#2494); #810=VERTEX_POINT('',#2503); #811=VERTEX_POINT('',#2504); #812=VERTEX_POINT('',#2506); #813=VERTEX_POINT('',#2508); #814=VERTEX_POINT('',#2512); #815=VERTEX_POINT('',#2513); #816=VERTEX_POINT('',#2518); #817=VERTEX_POINT('',#2519); #818=VERTEX_POINT('',#2529); #819=VERTEX_POINT('',#2530); #820=VERTEX_POINT('',#2532); #821=VERTEX_POINT('',#2534); #822=VERTEX_POINT('',#2538); #823=VERTEX_POINT('',#2540); #824=VERTEX_POINT('',#2544); #825=VERTEX_POINT('',#2546); #826=EDGE_CURVE('',#694,#694,#634,.T.); #827=EDGE_CURVE('',#694,#695,#358,.T.); #828=EDGE_CURVE('',#695,#695,#635,.T.); #829=EDGE_CURVE('',#696,#696,#636,.T.); #830=EDGE_CURVE('',#696,#697,#359,.T.); #831=EDGE_CURVE('',#697,#697,#637,.T.); #832=EDGE_CURVE('',#698,#698,#638,.T.); #833=EDGE_CURVE('',#698,#699,#360,.T.); #834=EDGE_CURVE('',#699,#699,#639,.T.); #835=EDGE_CURVE('',#700,#700,#640,.T.); #836=EDGE_CURVE('',#700,#701,#361,.T.); #837=EDGE_CURVE('',#701,#701,#641,.T.); #838=EDGE_CURVE('',#702,#702,#642,.T.); #839=EDGE_CURVE('',#702,#703,#362,.T.); #840=EDGE_CURVE('',#703,#703,#643,.T.); #841=EDGE_CURVE('',#704,#704,#644,.T.); #842=EDGE_CURVE('',#704,#705,#363,.T.); #843=EDGE_CURVE('',#705,#705,#645,.T.); #844=EDGE_CURVE('',#706,#706,#646,.T.); #845=EDGE_CURVE('',#706,#707,#364,.T.); #846=EDGE_CURVE('',#707,#707,#647,.T.); #847=EDGE_CURVE('',#708,#708,#648,.T.); #848=EDGE_CURVE('',#708,#709,#365,.T.); #849=EDGE_CURVE('',#709,#709,#649,.T.); #850=EDGE_CURVE('',#710,#710,#650,.T.); #851=EDGE_CURVE('',#710,#711,#366,.T.); #852=EDGE_CURVE('',#711,#711,#651,.T.); #853=EDGE_CURVE('',#712,#712,#652,.T.); #854=EDGE_CURVE('',#712,#713,#367,.T.); #855=EDGE_CURVE('',#713,#713,#653,.T.); #856=EDGE_CURVE('',#714,#714,#654,.T.); #857=EDGE_CURVE('',#714,#715,#368,.T.); #858=EDGE_CURVE('',#715,#715,#655,.T.); #859=EDGE_CURVE('',#716,#716,#656,.T.); #860=EDGE_CURVE('',#716,#717,#369,.T.); #861=EDGE_CURVE('',#717,#717,#657,.T.); #862=EDGE_CURVE('',#718,#718,#658,.T.); #863=EDGE_CURVE('',#718,#719,#370,.T.); #864=EDGE_CURVE('',#719,#719,#659,.T.); #865=EDGE_CURVE('',#720,#720,#660,.T.); #866=EDGE_CURVE('',#720,#721,#371,.T.); #867=EDGE_CURVE('',#721,#721,#661,.T.); #868=EDGE_CURVE('',#722,#722,#662,.T.); #869=EDGE_CURVE('',#722,#723,#372,.T.); #870=EDGE_CURVE('',#723,#723,#663,.T.); #871=EDGE_CURVE('',#724,#724,#664,.T.); #872=EDGE_CURVE('',#724,#725,#373,.T.); #873=EDGE_CURVE('',#725,#725,#665,.T.); #874=EDGE_CURVE('',#726,#726,#666,.T.); #875=EDGE_CURVE('',#726,#727,#374,.T.); #876=EDGE_CURVE('',#727,#727,#667,.T.); #877=EDGE_CURVE('',#728,#728,#668,.T.); #878=EDGE_CURVE('',#728,#729,#375,.T.); #879=EDGE_CURVE('',#729,#729,#669,.T.); #880=EDGE_CURVE('',#730,#730,#670,.T.); #881=EDGE_CURVE('',#730,#731,#376,.T.); #882=EDGE_CURVE('',#731,#731,#671,.T.); #883=EDGE_CURVE('',#732,#732,#672,.T.); #884=EDGE_CURVE('',#732,#733,#377,.T.); #885=EDGE_CURVE('',#733,#733,#673,.T.); #886=EDGE_CURVE('',#734,#734,#674,.T.); #887=EDGE_CURVE('',#734,#735,#378,.T.); #888=EDGE_CURVE('',#735,#735,#675,.T.); #889=EDGE_CURVE('',#736,#736,#676,.T.); #890=EDGE_CURVE('',#736,#737,#379,.T.); #891=EDGE_CURVE('',#737,#737,#677,.T.); #892=EDGE_CURVE('',#738,#738,#678,.T.); #893=EDGE_CURVE('',#738,#739,#380,.T.); #894=EDGE_CURVE('',#739,#739,#679,.T.); #895=EDGE_CURVE('',#740,#740,#680,.T.); #896=EDGE_CURVE('',#740,#741,#381,.T.); #897=EDGE_CURVE('',#741,#741,#681,.T.); #898=EDGE_CURVE('',#742,#743,#382,.T.); #899=EDGE_CURVE('',#742,#744,#383,.T.); #900=EDGE_CURVE('',#745,#744,#384,.T.); #901=EDGE_CURVE('',#743,#745,#385,.T.); #902=EDGE_CURVE('',#743,#746,#386,.T.); #903=EDGE_CURVE('',#747,#745,#387,.T.); #904=EDGE_CURVE('',#746,#747,#388,.T.); #905=EDGE_CURVE('',#746,#748,#389,.T.); #906=EDGE_CURVE('',#749,#747,#390,.T.); #907=EDGE_CURVE('',#748,#749,#391,.T.); #908=EDGE_CURVE('',#750,#748,#392,.T.); #909=EDGE_CURVE('',#751,#749,#393,.T.); #910=EDGE_CURVE('',#750,#751,#394,.T.); #911=EDGE_CURVE('',#750,#752,#395,.T.); #912=EDGE_CURVE('',#753,#751,#396,.T.); #913=EDGE_CURVE('',#752,#753,#397,.T.); #914=EDGE_CURVE('',#742,#752,#398,.T.); #915=EDGE_CURVE('',#744,#753,#399,.T.); #916=EDGE_CURVE('',#754,#755,#400,.T.); #917=EDGE_CURVE('',#754,#756,#401,.T.); #918=EDGE_CURVE('',#757,#756,#402,.T.); #919=EDGE_CURVE('',#755,#757,#403,.T.); #920=EDGE_CURVE('',#755,#758,#404,.T.); #921=EDGE_CURVE('',#759,#757,#405,.T.); #922=EDGE_CURVE('',#758,#759,#406,.T.); #923=EDGE_CURVE('',#758,#760,#407,.T.); #924=EDGE_CURVE('',#761,#759,#408,.T.); #925=EDGE_CURVE('',#760,#761,#409,.T.); #926=EDGE_CURVE('',#760,#754,#410,.T.); #927=EDGE_CURVE('',#756,#761,#411,.T.); #928=EDGE_CURVE('',#762,#763,#412,.T.); #929=EDGE_CURVE('',#763,#764,#413,.T.); #930=EDGE_CURVE('',#765,#764,#414,.T.); #931=EDGE_CURVE('',#762,#765,#415,.T.); #932=EDGE_CURVE('',#766,#762,#416,.T.); #933=EDGE_CURVE('',#767,#765,#417,.T.); #934=EDGE_CURVE('',#766,#767,#418,.T.); #935=EDGE_CURVE('',#768,#766,#419,.T.); #936=EDGE_CURVE('',#769,#767,#420,.T.); #937=EDGE_CURVE('',#768,#769,#421,.T.); #938=EDGE_CURVE('',#763,#768,#422,.T.); #939=EDGE_CURVE('',#764,#769,#423,.T.); #940=EDGE_CURVE('',#770,#771,#424,.T.); #941=EDGE_CURVE('',#770,#772,#425,.T.); #942=EDGE_CURVE('',#773,#772,#426,.T.); #943=EDGE_CURVE('',#771,#773,#427,.T.); #944=EDGE_CURVE('',#771,#774,#428,.T.); #945=EDGE_CURVE('',#775,#773,#429,.T.); #946=EDGE_CURVE('',#774,#775,#430,.T.); #947=EDGE_CURVE('',#774,#776,#431,.T.); #948=EDGE_CURVE('',#777,#775,#432,.T.); #949=EDGE_CURVE('',#776,#777,#433,.T.); #950=EDGE_CURVE('',#776,#770,#434,.T.); #951=EDGE_CURVE('',#772,#777,#435,.T.); #952=EDGE_CURVE('',#778,#779,#436,.T.); #953=EDGE_CURVE('',#778,#780,#437,.T.); #954=EDGE_CURVE('',#781,#780,#438,.T.); #955=EDGE_CURVE('',#779,#781,#439,.T.); #956=EDGE_CURVE('',#779,#782,#440,.T.); #957=EDGE_CURVE('',#783,#781,#441,.T.); #958=EDGE_CURVE('',#782,#783,#442,.T.); #959=EDGE_CURVE('',#782,#784,#443,.T.); #960=EDGE_CURVE('',#785,#783,#444,.T.); #961=EDGE_CURVE('',#784,#785,#445,.T.); #962=EDGE_CURVE('',#784,#778,#446,.T.); #963=EDGE_CURVE('',#780,#785,#447,.T.); #964=EDGE_CURVE('',#786,#787,#682,.T.); #965=EDGE_CURVE('',#786,#788,#448,.T.); #966=EDGE_CURVE('',#789,#788,#683,.T.); #967=EDGE_CURVE('',#789,#787,#449,.T.); #968=EDGE_CURVE('',#790,#791,#684,.T.); #969=EDGE_CURVE('',#791,#786,#450,.T.); #970=EDGE_CURVE('',#787,#790,#451,.T.); #971=EDGE_CURVE('',#790,#792,#452,.T.); #972=EDGE_CURVE('',#793,#792,#685,.T.); #973=EDGE_CURVE('',#793,#791,#453,.T.); #974=EDGE_CURVE('',#792,#789,#454,.T.); #975=EDGE_CURVE('',#788,#793,#455,.T.); #976=EDGE_CURVE('',#794,#795,#456,.T.); #977=EDGE_CURVE('',#794,#796,#457,.T.); #978=EDGE_CURVE('',#797,#796,#458,.T.); #979=EDGE_CURVE('',#795,#797,#459,.T.); #980=EDGE_CURVE('',#795,#798,#460,.T.); #981=EDGE_CURVE('',#799,#797,#461,.T.); #982=EDGE_CURVE('',#798,#799,#462,.T.); #983=EDGE_CURVE('',#798,#800,#463,.T.); #984=EDGE_CURVE('',#801,#799,#464,.T.); #985=EDGE_CURVE('',#800,#801,#465,.T.); #986=EDGE_CURVE('',#800,#794,#466,.T.); #987=EDGE_CURVE('',#796,#801,#467,.T.); #988=EDGE_CURVE('',#802,#803,#686,.T.); #989=EDGE_CURVE('',#802,#804,#468,.T.); #990=EDGE_CURVE('',#805,#804,#687,.T.); #991=EDGE_CURVE('',#805,#803,#469,.T.); #992=EDGE_CURVE('',#806,#807,#688,.T.); #993=EDGE_CURVE('',#807,#802,#470,.T.); #994=EDGE_CURVE('',#803,#806,#471,.T.); #995=EDGE_CURVE('',#806,#808,#472,.T.); #996=EDGE_CURVE('',#809,#808,#689,.T.); #997=EDGE_CURVE('',#809,#807,#473,.T.); #998=EDGE_CURVE('',#808,#805,#474,.T.); #999=EDGE_CURVE('',#804,#809,#475,.T.); #1000=EDGE_CURVE('',#810,#811,#690,.T.); #1001=EDGE_CURVE('',#812,#810,#476,.T.); #1002=EDGE_CURVE('',#813,#812,#691,.T.); #1003=EDGE_CURVE('',#811,#813,#477,.T.); #1004=EDGE_CURVE('',#814,#815,#692,.T.); #1005=EDGE_CURVE('',#815,#810,#478,.T.); #1006=EDGE_CURVE('',#811,#814,#479,.T.); #1007=EDGE_CURVE('',#816,#817,#693,.T.); #1008=EDGE_CURVE('',#817,#813,#480,.T.); #1009=EDGE_CURVE('',#812,#816,#481,.T.); #1010=EDGE_CURVE('',#817,#814,#482,.T.); #1011=EDGE_CURVE('',#815,#816,#483,.T.); #1012=EDGE_CURVE('',#818,#819,#484,.T.); #1013=EDGE_CURVE('',#818,#820,#485,.T.); #1014=EDGE_CURVE('',#821,#820,#486,.T.); #1015=EDGE_CURVE('',#819,#821,#487,.T.); #1016=EDGE_CURVE('',#819,#822,#488,.T.); #1017=EDGE_CURVE('',#823,#821,#489,.T.); #1018=EDGE_CURVE('',#822,#823,#490,.T.); #1019=EDGE_CURVE('',#822,#824,#491,.T.); #1020=EDGE_CURVE('',#825,#823,#492,.T.); #1021=EDGE_CURVE('',#824,#825,#493,.T.); #1022=EDGE_CURVE('',#824,#818,#494,.T.); #1023=EDGE_CURVE('',#820,#825,#495,.T.); #1024=ORIENTED_EDGE('',*,*,#826,.F.); #1025=ORIENTED_EDGE('',*,*,#827,.T.); #1026=ORIENTED_EDGE('',*,*,#828,.T.); #1027=ORIENTED_EDGE('',*,*,#827,.F.); #1028=ORIENTED_EDGE('',*,*,#829,.F.); #1029=ORIENTED_EDGE('',*,*,#830,.T.); #1030=ORIENTED_EDGE('',*,*,#831,.T.); #1031=ORIENTED_EDGE('',*,*,#830,.F.); #1032=ORIENTED_EDGE('',*,*,#832,.F.); #1033=ORIENTED_EDGE('',*,*,#833,.T.); #1034=ORIENTED_EDGE('',*,*,#834,.T.); #1035=ORIENTED_EDGE('',*,*,#833,.F.); #1036=ORIENTED_EDGE('',*,*,#835,.F.); #1037=ORIENTED_EDGE('',*,*,#836,.T.); #1038=ORIENTED_EDGE('',*,*,#837,.T.); #1039=ORIENTED_EDGE('',*,*,#836,.F.); #1040=ORIENTED_EDGE('',*,*,#838,.F.); #1041=ORIENTED_EDGE('',*,*,#839,.T.); #1042=ORIENTED_EDGE('',*,*,#840,.T.); #1043=ORIENTED_EDGE('',*,*,#839,.F.); #1044=ORIENTED_EDGE('',*,*,#841,.F.); #1045=ORIENTED_EDGE('',*,*,#842,.T.); #1046=ORIENTED_EDGE('',*,*,#843,.T.); #1047=ORIENTED_EDGE('',*,*,#842,.F.); #1048=ORIENTED_EDGE('',*,*,#844,.F.); #1049=ORIENTED_EDGE('',*,*,#845,.T.); #1050=ORIENTED_EDGE('',*,*,#846,.T.); #1051=ORIENTED_EDGE('',*,*,#845,.F.); #1052=ORIENTED_EDGE('',*,*,#847,.F.); #1053=ORIENTED_EDGE('',*,*,#848,.T.); #1054=ORIENTED_EDGE('',*,*,#849,.T.); #1055=ORIENTED_EDGE('',*,*,#848,.F.); #1056=ORIENTED_EDGE('',*,*,#850,.F.); #1057=ORIENTED_EDGE('',*,*,#851,.T.); #1058=ORIENTED_EDGE('',*,*,#852,.T.); #1059=ORIENTED_EDGE('',*,*,#851,.F.); #1060=ORIENTED_EDGE('',*,*,#853,.F.); #1061=ORIENTED_EDGE('',*,*,#854,.T.); #1062=ORIENTED_EDGE('',*,*,#855,.T.); #1063=ORIENTED_EDGE('',*,*,#854,.F.); #1064=ORIENTED_EDGE('',*,*,#856,.F.); #1065=ORIENTED_EDGE('',*,*,#857,.T.); #1066=ORIENTED_EDGE('',*,*,#858,.T.); #1067=ORIENTED_EDGE('',*,*,#857,.F.); #1068=ORIENTED_EDGE('',*,*,#859,.F.); #1069=ORIENTED_EDGE('',*,*,#860,.T.); #1070=ORIENTED_EDGE('',*,*,#861,.T.); #1071=ORIENTED_EDGE('',*,*,#860,.F.); #1072=ORIENTED_EDGE('',*,*,#862,.F.); #1073=ORIENTED_EDGE('',*,*,#863,.T.); #1074=ORIENTED_EDGE('',*,*,#864,.T.); #1075=ORIENTED_EDGE('',*,*,#863,.F.); #1076=ORIENTED_EDGE('',*,*,#865,.F.); #1077=ORIENTED_EDGE('',*,*,#866,.T.); #1078=ORIENTED_EDGE('',*,*,#867,.T.); #1079=ORIENTED_EDGE('',*,*,#866,.F.); #1080=ORIENTED_EDGE('',*,*,#868,.F.); #1081=ORIENTED_EDGE('',*,*,#869,.T.); #1082=ORIENTED_EDGE('',*,*,#870,.T.); #1083=ORIENTED_EDGE('',*,*,#869,.F.); #1084=ORIENTED_EDGE('',*,*,#871,.F.); #1085=ORIENTED_EDGE('',*,*,#872,.T.); #1086=ORIENTED_EDGE('',*,*,#873,.T.); #1087=ORIENTED_EDGE('',*,*,#872,.F.); #1088=ORIENTED_EDGE('',*,*,#874,.F.); #1089=ORIENTED_EDGE('',*,*,#875,.T.); #1090=ORIENTED_EDGE('',*,*,#876,.T.); #1091=ORIENTED_EDGE('',*,*,#875,.F.); #1092=ORIENTED_EDGE('',*,*,#877,.F.); #1093=ORIENTED_EDGE('',*,*,#878,.T.); #1094=ORIENTED_EDGE('',*,*,#879,.T.); #1095=ORIENTED_EDGE('',*,*,#878,.F.); #1096=ORIENTED_EDGE('',*,*,#880,.F.); #1097=ORIENTED_EDGE('',*,*,#881,.T.); #1098=ORIENTED_EDGE('',*,*,#882,.T.); #1099=ORIENTED_EDGE('',*,*,#881,.F.); #1100=ORIENTED_EDGE('',*,*,#883,.F.); #1101=ORIENTED_EDGE('',*,*,#884,.T.); #1102=ORIENTED_EDGE('',*,*,#885,.T.); #1103=ORIENTED_EDGE('',*,*,#884,.F.); #1104=ORIENTED_EDGE('',*,*,#886,.F.); #1105=ORIENTED_EDGE('',*,*,#887,.T.); #1106=ORIENTED_EDGE('',*,*,#888,.T.); #1107=ORIENTED_EDGE('',*,*,#887,.F.); #1108=ORIENTED_EDGE('',*,*,#889,.F.); #1109=ORIENTED_EDGE('',*,*,#890,.T.); #1110=ORIENTED_EDGE('',*,*,#891,.T.); #1111=ORIENTED_EDGE('',*,*,#890,.F.); #1112=ORIENTED_EDGE('',*,*,#892,.F.); #1113=ORIENTED_EDGE('',*,*,#893,.T.); #1114=ORIENTED_EDGE('',*,*,#894,.T.); #1115=ORIENTED_EDGE('',*,*,#893,.F.); #1116=ORIENTED_EDGE('',*,*,#895,.F.); #1117=ORIENTED_EDGE('',*,*,#896,.T.); #1118=ORIENTED_EDGE('',*,*,#897,.T.); #1119=ORIENTED_EDGE('',*,*,#896,.F.); #1120=ORIENTED_EDGE('',*,*,#898,.F.); #1121=ORIENTED_EDGE('',*,*,#899,.T.); #1122=ORIENTED_EDGE('',*,*,#900,.F.); #1123=ORIENTED_EDGE('',*,*,#901,.F.); #1124=ORIENTED_EDGE('',*,*,#902,.F.); #1125=ORIENTED_EDGE('',*,*,#901,.T.); #1126=ORIENTED_EDGE('',*,*,#903,.F.); #1127=ORIENTED_EDGE('',*,*,#904,.F.); #1128=ORIENTED_EDGE('',*,*,#905,.F.); #1129=ORIENTED_EDGE('',*,*,#904,.T.); #1130=ORIENTED_EDGE('',*,*,#906,.F.); #1131=ORIENTED_EDGE('',*,*,#907,.F.); #1132=ORIENTED_EDGE('',*,*,#908,.T.); #1133=ORIENTED_EDGE('',*,*,#907,.T.); #1134=ORIENTED_EDGE('',*,*,#909,.F.); #1135=ORIENTED_EDGE('',*,*,#910,.F.); #1136=ORIENTED_EDGE('',*,*,#911,.F.); #1137=ORIENTED_EDGE('',*,*,#910,.T.); #1138=ORIENTED_EDGE('',*,*,#912,.F.); #1139=ORIENTED_EDGE('',*,*,#913,.F.); #1140=ORIENTED_EDGE('',*,*,#914,.T.); #1141=ORIENTED_EDGE('',*,*,#913,.T.); #1142=ORIENTED_EDGE('',*,*,#915,.F.); #1143=ORIENTED_EDGE('',*,*,#899,.F.); #1144=ORIENTED_EDGE('',*,*,#915,.T.); #1145=ORIENTED_EDGE('',*,*,#912,.T.); #1146=ORIENTED_EDGE('',*,*,#909,.T.); #1147=ORIENTED_EDGE('',*,*,#906,.T.); #1148=ORIENTED_EDGE('',*,*,#903,.T.); #1149=ORIENTED_EDGE('',*,*,#900,.T.); #1150=ORIENTED_EDGE('',*,*,#895,.T.); #1151=ORIENTED_EDGE('',*,*,#892,.T.); #1152=ORIENTED_EDGE('',*,*,#889,.T.); #1153=ORIENTED_EDGE('',*,*,#886,.T.); #1154=ORIENTED_EDGE('',*,*,#883,.T.); #1155=ORIENTED_EDGE('',*,*,#880,.T.); #1156=ORIENTED_EDGE('',*,*,#877,.T.); #1157=ORIENTED_EDGE('',*,*,#874,.T.); #1158=ORIENTED_EDGE('',*,*,#871,.T.); #1159=ORIENTED_EDGE('',*,*,#868,.T.); #1160=ORIENTED_EDGE('',*,*,#865,.T.); #1161=ORIENTED_EDGE('',*,*,#862,.T.); #1162=ORIENTED_EDGE('',*,*,#859,.T.); #1163=ORIENTED_EDGE('',*,*,#856,.T.); #1164=ORIENTED_EDGE('',*,*,#853,.T.); #1165=ORIENTED_EDGE('',*,*,#850,.T.); #1166=ORIENTED_EDGE('',*,*,#847,.T.); #1167=ORIENTED_EDGE('',*,*,#844,.T.); #1168=ORIENTED_EDGE('',*,*,#841,.T.); #1169=ORIENTED_EDGE('',*,*,#838,.T.); #1170=ORIENTED_EDGE('',*,*,#835,.T.); #1171=ORIENTED_EDGE('',*,*,#832,.T.); #1172=ORIENTED_EDGE('',*,*,#829,.T.); #1173=ORIENTED_EDGE('',*,*,#826,.T.); #1174=ORIENTED_EDGE('',*,*,#914,.F.); #1175=ORIENTED_EDGE('',*,*,#898,.T.); #1176=ORIENTED_EDGE('',*,*,#902,.T.); #1177=ORIENTED_EDGE('',*,*,#905,.T.); #1178=ORIENTED_EDGE('',*,*,#908,.F.); #1179=ORIENTED_EDGE('',*,*,#911,.T.); #1180=ORIENTED_EDGE('',*,*,#897,.F.); #1181=ORIENTED_EDGE('',*,*,#894,.F.); #1182=ORIENTED_EDGE('',*,*,#891,.F.); #1183=ORIENTED_EDGE('',*,*,#888,.F.); #1184=ORIENTED_EDGE('',*,*,#885,.F.); #1185=ORIENTED_EDGE('',*,*,#882,.F.); #1186=ORIENTED_EDGE('',*,*,#879,.F.); #1187=ORIENTED_EDGE('',*,*,#876,.F.); #1188=ORIENTED_EDGE('',*,*,#873,.F.); #1189=ORIENTED_EDGE('',*,*,#870,.F.); #1190=ORIENTED_EDGE('',*,*,#867,.F.); #1191=ORIENTED_EDGE('',*,*,#864,.F.); #1192=ORIENTED_EDGE('',*,*,#861,.F.); #1193=ORIENTED_EDGE('',*,*,#858,.F.); #1194=ORIENTED_EDGE('',*,*,#855,.F.); #1195=ORIENTED_EDGE('',*,*,#852,.F.); #1196=ORIENTED_EDGE('',*,*,#849,.F.); #1197=ORIENTED_EDGE('',*,*,#846,.F.); #1198=ORIENTED_EDGE('',*,*,#843,.F.); #1199=ORIENTED_EDGE('',*,*,#840,.F.); #1200=ORIENTED_EDGE('',*,*,#837,.F.); #1201=ORIENTED_EDGE('',*,*,#834,.F.); #1202=ORIENTED_EDGE('',*,*,#831,.F.); #1203=ORIENTED_EDGE('',*,*,#828,.F.); #1204=ORIENTED_EDGE('',*,*,#916,.F.); #1205=ORIENTED_EDGE('',*,*,#917,.T.); #1206=ORIENTED_EDGE('',*,*,#918,.F.); #1207=ORIENTED_EDGE('',*,*,#919,.F.); #1208=ORIENTED_EDGE('',*,*,#920,.F.); #1209=ORIENTED_EDGE('',*,*,#919,.T.); #1210=ORIENTED_EDGE('',*,*,#921,.F.); #1211=ORIENTED_EDGE('',*,*,#922,.F.); #1212=ORIENTED_EDGE('',*,*,#923,.F.); #1213=ORIENTED_EDGE('',*,*,#922,.T.); #1214=ORIENTED_EDGE('',*,*,#924,.F.); #1215=ORIENTED_EDGE('',*,*,#925,.F.); #1216=ORIENTED_EDGE('',*,*,#926,.F.); #1217=ORIENTED_EDGE('',*,*,#925,.T.); #1218=ORIENTED_EDGE('',*,*,#927,.F.); #1219=ORIENTED_EDGE('',*,*,#917,.F.); #1220=ORIENTED_EDGE('',*,*,#927,.T.); #1221=ORIENTED_EDGE('',*,*,#924,.T.); #1222=ORIENTED_EDGE('',*,*,#921,.T.); #1223=ORIENTED_EDGE('',*,*,#918,.T.); #1224=ORIENTED_EDGE('',*,*,#926,.T.); #1225=ORIENTED_EDGE('',*,*,#916,.T.); #1226=ORIENTED_EDGE('',*,*,#920,.T.); #1227=ORIENTED_EDGE('',*,*,#923,.T.); #1228=ORIENTED_EDGE('',*,*,#928,.T.); #1229=ORIENTED_EDGE('',*,*,#929,.T.); #1230=ORIENTED_EDGE('',*,*,#930,.F.); #1231=ORIENTED_EDGE('',*,*,#931,.F.); #1232=ORIENTED_EDGE('',*,*,#932,.T.); #1233=ORIENTED_EDGE('',*,*,#931,.T.); #1234=ORIENTED_EDGE('',*,*,#933,.F.); #1235=ORIENTED_EDGE('',*,*,#934,.F.); #1236=ORIENTED_EDGE('',*,*,#935,.T.); #1237=ORIENTED_EDGE('',*,*,#934,.T.); #1238=ORIENTED_EDGE('',*,*,#936,.F.); #1239=ORIENTED_EDGE('',*,*,#937,.F.); #1240=ORIENTED_EDGE('',*,*,#938,.T.); #1241=ORIENTED_EDGE('',*,*,#937,.T.); #1242=ORIENTED_EDGE('',*,*,#939,.F.); #1243=ORIENTED_EDGE('',*,*,#929,.F.); #1244=ORIENTED_EDGE('',*,*,#939,.T.); #1245=ORIENTED_EDGE('',*,*,#936,.T.); #1246=ORIENTED_EDGE('',*,*,#933,.T.); #1247=ORIENTED_EDGE('',*,*,#930,.T.); #1248=ORIENTED_EDGE('',*,*,#938,.F.); #1249=ORIENTED_EDGE('',*,*,#928,.F.); #1250=ORIENTED_EDGE('',*,*,#932,.F.); #1251=ORIENTED_EDGE('',*,*,#935,.F.); #1252=ORIENTED_EDGE('',*,*,#940,.F.); #1253=ORIENTED_EDGE('',*,*,#941,.T.); #1254=ORIENTED_EDGE('',*,*,#942,.F.); #1255=ORIENTED_EDGE('',*,*,#943,.F.); #1256=ORIENTED_EDGE('',*,*,#944,.F.); #1257=ORIENTED_EDGE('',*,*,#943,.T.); #1258=ORIENTED_EDGE('',*,*,#945,.F.); #1259=ORIENTED_EDGE('',*,*,#946,.F.); #1260=ORIENTED_EDGE('',*,*,#947,.F.); #1261=ORIENTED_EDGE('',*,*,#946,.T.); #1262=ORIENTED_EDGE('',*,*,#948,.F.); #1263=ORIENTED_EDGE('',*,*,#949,.F.); #1264=ORIENTED_EDGE('',*,*,#950,.F.); #1265=ORIENTED_EDGE('',*,*,#949,.T.); #1266=ORIENTED_EDGE('',*,*,#951,.F.); #1267=ORIENTED_EDGE('',*,*,#941,.F.); #1268=ORIENTED_EDGE('',*,*,#951,.T.); #1269=ORIENTED_EDGE('',*,*,#948,.T.); #1270=ORIENTED_EDGE('',*,*,#945,.T.); #1271=ORIENTED_EDGE('',*,*,#942,.T.); #1272=ORIENTED_EDGE('',*,*,#950,.T.); #1273=ORIENTED_EDGE('',*,*,#940,.T.); #1274=ORIENTED_EDGE('',*,*,#944,.T.); #1275=ORIENTED_EDGE('',*,*,#947,.T.); #1276=ORIENTED_EDGE('',*,*,#952,.F.); #1277=ORIENTED_EDGE('',*,*,#953,.T.); #1278=ORIENTED_EDGE('',*,*,#954,.F.); #1279=ORIENTED_EDGE('',*,*,#955,.F.); #1280=ORIENTED_EDGE('',*,*,#956,.F.); #1281=ORIENTED_EDGE('',*,*,#955,.T.); #1282=ORIENTED_EDGE('',*,*,#957,.F.); #1283=ORIENTED_EDGE('',*,*,#958,.F.); #1284=ORIENTED_EDGE('',*,*,#959,.F.); #1285=ORIENTED_EDGE('',*,*,#958,.T.); #1286=ORIENTED_EDGE('',*,*,#960,.F.); #1287=ORIENTED_EDGE('',*,*,#961,.F.); #1288=ORIENTED_EDGE('',*,*,#962,.F.); #1289=ORIENTED_EDGE('',*,*,#961,.T.); #1290=ORIENTED_EDGE('',*,*,#963,.F.); #1291=ORIENTED_EDGE('',*,*,#953,.F.); #1292=ORIENTED_EDGE('',*,*,#963,.T.); #1293=ORIENTED_EDGE('',*,*,#960,.T.); #1294=ORIENTED_EDGE('',*,*,#957,.T.); #1295=ORIENTED_EDGE('',*,*,#954,.T.); #1296=ORIENTED_EDGE('',*,*,#962,.T.); #1297=ORIENTED_EDGE('',*,*,#952,.T.); #1298=ORIENTED_EDGE('',*,*,#956,.T.); #1299=ORIENTED_EDGE('',*,*,#959,.T.); #1300=ORIENTED_EDGE('',*,*,#964,.F.); #1301=ORIENTED_EDGE('',*,*,#965,.T.); #1302=ORIENTED_EDGE('',*,*,#966,.F.); #1303=ORIENTED_EDGE('',*,*,#967,.T.); #1304=ORIENTED_EDGE('',*,*,#968,.T.); #1305=ORIENTED_EDGE('',*,*,#969,.T.); #1306=ORIENTED_EDGE('',*,*,#964,.T.); #1307=ORIENTED_EDGE('',*,*,#970,.T.); #1308=ORIENTED_EDGE('',*,*,#968,.F.); #1309=ORIENTED_EDGE('',*,*,#971,.T.); #1310=ORIENTED_EDGE('',*,*,#972,.F.); #1311=ORIENTED_EDGE('',*,*,#973,.T.); #1312=ORIENTED_EDGE('',*,*,#972,.T.); #1313=ORIENTED_EDGE('',*,*,#974,.T.); #1314=ORIENTED_EDGE('',*,*,#966,.T.); #1315=ORIENTED_EDGE('',*,*,#975,.T.); #1316=ORIENTED_EDGE('',*,*,#970,.F.); #1317=ORIENTED_EDGE('',*,*,#967,.F.); #1318=ORIENTED_EDGE('',*,*,#974,.F.); #1319=ORIENTED_EDGE('',*,*,#971,.F.); #1320=ORIENTED_EDGE('',*,*,#969,.F.); #1321=ORIENTED_EDGE('',*,*,#973,.F.); #1322=ORIENTED_EDGE('',*,*,#975,.F.); #1323=ORIENTED_EDGE('',*,*,#965,.F.); #1324=ORIENTED_EDGE('',*,*,#976,.F.); #1325=ORIENTED_EDGE('',*,*,#977,.T.); #1326=ORIENTED_EDGE('',*,*,#978,.F.); #1327=ORIENTED_EDGE('',*,*,#979,.F.); #1328=ORIENTED_EDGE('',*,*,#980,.F.); #1329=ORIENTED_EDGE('',*,*,#979,.T.); #1330=ORIENTED_EDGE('',*,*,#981,.F.); #1331=ORIENTED_EDGE('',*,*,#982,.F.); #1332=ORIENTED_EDGE('',*,*,#983,.F.); #1333=ORIENTED_EDGE('',*,*,#982,.T.); #1334=ORIENTED_EDGE('',*,*,#984,.F.); #1335=ORIENTED_EDGE('',*,*,#985,.F.); #1336=ORIENTED_EDGE('',*,*,#986,.F.); #1337=ORIENTED_EDGE('',*,*,#985,.T.); #1338=ORIENTED_EDGE('',*,*,#987,.F.); #1339=ORIENTED_EDGE('',*,*,#977,.F.); #1340=ORIENTED_EDGE('',*,*,#987,.T.); #1341=ORIENTED_EDGE('',*,*,#984,.T.); #1342=ORIENTED_EDGE('',*,*,#981,.T.); #1343=ORIENTED_EDGE('',*,*,#978,.T.); #1344=ORIENTED_EDGE('',*,*,#986,.T.); #1345=ORIENTED_EDGE('',*,*,#976,.T.); #1346=ORIENTED_EDGE('',*,*,#980,.T.); #1347=ORIENTED_EDGE('',*,*,#983,.T.); #1348=ORIENTED_EDGE('',*,*,#988,.F.); #1349=ORIENTED_EDGE('',*,*,#989,.T.); #1350=ORIENTED_EDGE('',*,*,#990,.F.); #1351=ORIENTED_EDGE('',*,*,#991,.T.); #1352=ORIENTED_EDGE('',*,*,#992,.T.); #1353=ORIENTED_EDGE('',*,*,#993,.T.); #1354=ORIENTED_EDGE('',*,*,#988,.T.); #1355=ORIENTED_EDGE('',*,*,#994,.T.); #1356=ORIENTED_EDGE('',*,*,#992,.F.); #1357=ORIENTED_EDGE('',*,*,#995,.T.); #1358=ORIENTED_EDGE('',*,*,#996,.F.); #1359=ORIENTED_EDGE('',*,*,#997,.T.); #1360=ORIENTED_EDGE('',*,*,#996,.T.); #1361=ORIENTED_EDGE('',*,*,#998,.T.); #1362=ORIENTED_EDGE('',*,*,#990,.T.); #1363=ORIENTED_EDGE('',*,*,#999,.T.); #1364=ORIENTED_EDGE('',*,*,#994,.F.); #1365=ORIENTED_EDGE('',*,*,#991,.F.); #1366=ORIENTED_EDGE('',*,*,#998,.F.); #1367=ORIENTED_EDGE('',*,*,#995,.F.); #1368=ORIENTED_EDGE('',*,*,#993,.F.); #1369=ORIENTED_EDGE('',*,*,#997,.F.); #1370=ORIENTED_EDGE('',*,*,#999,.F.); #1371=ORIENTED_EDGE('',*,*,#989,.F.); #1372=ORIENTED_EDGE('',*,*,#1000,.F.); #1373=ORIENTED_EDGE('',*,*,#1001,.F.); #1374=ORIENTED_EDGE('',*,*,#1002,.F.); #1375=ORIENTED_EDGE('',*,*,#1003,.F.); #1376=ORIENTED_EDGE('',*,*,#1004,.T.); #1377=ORIENTED_EDGE('',*,*,#1005,.T.); #1378=ORIENTED_EDGE('',*,*,#1000,.T.); #1379=ORIENTED_EDGE('',*,*,#1006,.T.); #1380=ORIENTED_EDGE('',*,*,#1007,.T.); #1381=ORIENTED_EDGE('',*,*,#1008,.T.); #1382=ORIENTED_EDGE('',*,*,#1002,.T.); #1383=ORIENTED_EDGE('',*,*,#1009,.T.); #1384=ORIENTED_EDGE('',*,*,#1004,.F.); #1385=ORIENTED_EDGE('',*,*,#1010,.F.); #1386=ORIENTED_EDGE('',*,*,#1007,.F.); #1387=ORIENTED_EDGE('',*,*,#1011,.F.); #1388=ORIENTED_EDGE('',*,*,#1005,.F.); #1389=ORIENTED_EDGE('',*,*,#1011,.T.); #1390=ORIENTED_EDGE('',*,*,#1009,.F.); #1391=ORIENTED_EDGE('',*,*,#1001,.T.); #1392=ORIENTED_EDGE('',*,*,#1006,.F.); #1393=ORIENTED_EDGE('',*,*,#1003,.T.); #1394=ORIENTED_EDGE('',*,*,#1008,.F.); #1395=ORIENTED_EDGE('',*,*,#1010,.T.); #1396=ORIENTED_EDGE('',*,*,#1012,.F.); #1397=ORIENTED_EDGE('',*,*,#1013,.T.); #1398=ORIENTED_EDGE('',*,*,#1014,.F.); #1399=ORIENTED_EDGE('',*,*,#1015,.F.); #1400=ORIENTED_EDGE('',*,*,#1016,.F.); #1401=ORIENTED_EDGE('',*,*,#1015,.T.); #1402=ORIENTED_EDGE('',*,*,#1017,.F.); #1403=ORIENTED_EDGE('',*,*,#1018,.F.); #1404=ORIENTED_EDGE('',*,*,#1019,.F.); #1405=ORIENTED_EDGE('',*,*,#1018,.T.); #1406=ORIENTED_EDGE('',*,*,#1020,.F.); #1407=ORIENTED_EDGE('',*,*,#1021,.F.); #1408=ORIENTED_EDGE('',*,*,#1022,.F.); #1409=ORIENTED_EDGE('',*,*,#1021,.T.); #1410=ORIENTED_EDGE('',*,*,#1023,.F.); #1411=ORIENTED_EDGE('',*,*,#1013,.F.); #1412=ORIENTED_EDGE('',*,*,#1023,.T.); #1413=ORIENTED_EDGE('',*,*,#1020,.T.); #1414=ORIENTED_EDGE('',*,*,#1017,.T.); #1415=ORIENTED_EDGE('',*,*,#1014,.T.); #1416=ORIENTED_EDGE('',*,*,#1022,.T.); #1417=ORIENTED_EDGE('',*,*,#1012,.T.); #1418=ORIENTED_EDGE('',*,*,#1016,.T.); #1419=ORIENTED_EDGE('',*,*,#1019,.T.); #1420=CYLINDRICAL_SURFACE('',#1559,0.5); #1421=CYLINDRICAL_SURFACE('',#1562,0.499999999999998); #1422=CYLINDRICAL_SURFACE('',#1565,0.5); #1423=CYLINDRICAL_SURFACE('',#1568,0.499999999999998); #1424=CYLINDRICAL_SURFACE('',#1571,0.499999999999998); #1425=CYLINDRICAL_SURFACE('',#1574,0.5); #1426=CYLINDRICAL_SURFACE('',#1577,0.499999999999998); #1427=CYLINDRICAL_SURFACE('',#1580,0.5); #1428=CYLINDRICAL_SURFACE('',#1583,0.499999999999998); #1429=CYLINDRICAL_SURFACE('',#1586,0.5); #1430=CYLINDRICAL_SURFACE('',#1589,0.499999999999998); #1431=CYLINDRICAL_SURFACE('',#1592,0.5); #1432=CYLINDRICAL_SURFACE('',#1595,0.499999999999998); #1433=CYLINDRICAL_SURFACE('',#1598,0.5); #1434=CYLINDRICAL_SURFACE('',#1601,0.499999999999998); #1435=CYLINDRICAL_SURFACE('',#1604,0.5); #1436=CYLINDRICAL_SURFACE('',#1607,0.5); #1437=CYLINDRICAL_SURFACE('',#1610,0.499999999999998); #1438=CYLINDRICAL_SURFACE('',#1613,0.499999999999998); #1439=CYLINDRICAL_SURFACE('',#1616,0.5); #1440=CYLINDRICAL_SURFACE('',#1619,0.499999999999998); #1441=CYLINDRICAL_SURFACE('',#1622,0.5); #1442=CYLINDRICAL_SURFACE('',#1625,0.499999999999998); #1443=CYLINDRICAL_SURFACE('',#1628,0.5); #1444=CYLINDRICAL_SURFACE('',#1666,1.1); #1445=CYLINDRICAL_SURFACE('',#1670,1.1); #1446=CYLINDRICAL_SURFACE('',#1682,1.1); #1447=CYLINDRICAL_SURFACE('',#1686,1.1); #1448=CYLINDRICAL_SURFACE('',#1692,1.57); #1449=CYLINDRICAL_SURFACE('',#1694,1.57); #1450=ADVANCED_FACE('',(#138),#1420,.F.); #1451=ADVANCED_FACE('',(#139),#1421,.F.); #1452=ADVANCED_FACE('',(#140),#1422,.F.); #1453=ADVANCED_FACE('',(#141),#1423,.F.); #1454=ADVANCED_FACE('',(#142),#1424,.F.); #1455=ADVANCED_FACE('',(#143),#1425,.F.); #1456=ADVANCED_FACE('',(#144),#1426,.F.); #1457=ADVANCED_FACE('',(#145),#1427,.F.); #1458=ADVANCED_FACE('',(#146),#1428,.F.); #1459=ADVANCED_FACE('',(#147),#1429,.F.); #1460=ADVANCED_FACE('',(#148),#1430,.F.); #1461=ADVANCED_FACE('',(#149),#1431,.F.); #1462=ADVANCED_FACE('',(#150),#1432,.F.); #1463=ADVANCED_FACE('',(#151),#1433,.F.); #1464=ADVANCED_FACE('',(#152),#1434,.F.); #1465=ADVANCED_FACE('',(#153),#1435,.F.); #1466=ADVANCED_FACE('',(#154),#1436,.F.); #1467=ADVANCED_FACE('',(#155),#1437,.F.); #1468=ADVANCED_FACE('',(#156),#1438,.F.); #1469=ADVANCED_FACE('',(#157),#1439,.F.); #1470=ADVANCED_FACE('',(#158),#1440,.F.); #1471=ADVANCED_FACE('',(#159),#1441,.F.); #1472=ADVANCED_FACE('',(#160),#1442,.F.); #1473=ADVANCED_FACE('',(#161),#1443,.F.); #1474=ADVANCED_FACE('',(#162),#82,.T.); #1475=ADVANCED_FACE('',(#163),#83,.T.); #1476=ADVANCED_FACE('',(#164),#84,.T.); #1477=ADVANCED_FACE('',(#165),#85,.T.); #1478=ADVANCED_FACE('',(#166),#86,.T.); #1479=ADVANCED_FACE('',(#167),#87,.T.); #1480=ADVANCED_FACE('',(#168,#23,#24,#25,#26,#27,#28,#29,#30,#31,#32,#33, #34,#35,#36,#37,#38,#39,#40,#41,#42,#43,#44,#45,#46),#88,.T.); #1481=ADVANCED_FACE('',(#169,#47,#48,#49,#50,#51,#52,#53,#54,#55,#56,#57, #58,#59,#60,#61,#62,#63,#64,#65,#66,#67,#68,#69,#70),#89,.F.); #1482=ADVANCED_FACE('',(#170),#90,.T.); #1483=ADVANCED_FACE('',(#171),#91,.T.); #1484=ADVANCED_FACE('',(#172),#92,.T.); #1485=ADVANCED_FACE('',(#173),#93,.T.); #1486=ADVANCED_FACE('',(#174),#94,.T.); #1487=ADVANCED_FACE('',(#175),#95,.F.); #1488=ADVANCED_FACE('',(#176),#96,.T.); #1489=ADVANCED_FACE('',(#177),#97,.T.); #1490=ADVANCED_FACE('',(#178),#98,.T.); #1491=ADVANCED_FACE('',(#179),#99,.T.); #1492=ADVANCED_FACE('',(#180),#100,.T.); #1493=ADVANCED_FACE('',(#181),#101,.F.); #1494=ADVANCED_FACE('',(#182),#102,.T.); #1495=ADVANCED_FACE('',(#183),#103,.T.); #1496=ADVANCED_FACE('',(#184),#104,.T.); #1497=ADVANCED_FACE('',(#185),#105,.T.); #1498=ADVANCED_FACE('',(#186),#106,.T.); #1499=ADVANCED_FACE('',(#187),#107,.F.); #1500=ADVANCED_FACE('',(#188),#108,.T.); #1501=ADVANCED_FACE('',(#189),#109,.T.); #1502=ADVANCED_FACE('',(#190),#110,.T.); #1503=ADVANCED_FACE('',(#191),#111,.T.); #1504=ADVANCED_FACE('',(#192),#112,.T.); #1505=ADVANCED_FACE('',(#193),#113,.F.); #1506=ADVANCED_FACE('',(#194),#114,.F.); #1507=ADVANCED_FACE('',(#195),#1444,.T.); #1508=ADVANCED_FACE('',(#196),#115,.T.); #1509=ADVANCED_FACE('',(#197),#1445,.T.); #1510=ADVANCED_FACE('',(#198),#116,.T.); #1511=ADVANCED_FACE('',(#199),#117,.T.); #1512=ADVANCED_FACE('',(#200),#118,.T.); #1513=ADVANCED_FACE('',(#201),#119,.T.); #1514=ADVANCED_FACE('',(#202),#120,.T.); #1515=ADVANCED_FACE('',(#203),#121,.T.); #1516=ADVANCED_FACE('',(#204),#122,.T.); #1517=ADVANCED_FACE('',(#205),#123,.F.); #1518=ADVANCED_FACE('',(#206),#124,.F.); #1519=ADVANCED_FACE('',(#207),#1446,.T.); #1520=ADVANCED_FACE('',(#208),#125,.T.); #1521=ADVANCED_FACE('',(#209),#1447,.T.); #1522=ADVANCED_FACE('',(#210),#126,.T.); #1523=ADVANCED_FACE('',(#211),#127,.T.); #1524=ADVANCED_FACE('',(#212),#128,.T.); #1525=ADVANCED_FACE('',(#213),#1448,.T.); #1526=ADVANCED_FACE('',(#214),#1449,.T.); #1527=ADVANCED_FACE('',(#215),#129,.T.); #1528=ADVANCED_FACE('',(#216),#130,.T.); #1529=ADVANCED_FACE('',(#217),#131,.F.); #1530=ADVANCED_FACE('',(#218),#132,.T.); #1531=ADVANCED_FACE('',(#219),#133,.T.); #1532=ADVANCED_FACE('',(#220),#134,.T.); #1533=ADVANCED_FACE('',(#221),#135,.T.); #1534=ADVANCED_FACE('',(#222),#136,.T.); #1535=ADVANCED_FACE('',(#223),#137,.F.); #1536=CLOSED_SHELL('',(#1450,#1451,#1452,#1453,#1454,#1455,#1456,#1457, #1458,#1459,#1460,#1461,#1462,#1463,#1464,#1465,#1466,#1467,#1468,#1469, #1470,#1471,#1472,#1473,#1474,#1475,#1476,#1477,#1478,#1479,#1480,#1481)); #1537=CLOSED_SHELL('',(#1482,#1483,#1484,#1485,#1486,#1487)); #1538=CLOSED_SHELL('',(#1488,#1489,#1490,#1491,#1492,#1493)); #1539=CLOSED_SHELL('',(#1494,#1495,#1496,#1497,#1498,#1499)); #1540=CLOSED_SHELL('',(#1500,#1501,#1502,#1503,#1504,#1505)); #1541=CLOSED_SHELL('',(#1506,#1507,#1508,#1509,#1510,#1511)); #1542=CLOSED_SHELL('',(#1512,#1513,#1514,#1515,#1516,#1517)); #1543=CLOSED_SHELL('',(#1518,#1519,#1520,#1521,#1522,#1523)); #1544=CLOSED_SHELL('',(#1524,#1525,#1526,#1527,#1528,#1529)); #1545=CLOSED_SHELL('',(#1530,#1531,#1532,#1533,#1534,#1535)); #1546=DERIVED_UNIT_ELEMENT(#1548,1.); #1547=DERIVED_UNIT_ELEMENT(#2559,-3.); #1548=( MASS_UNIT() NAMED_UNIT(*) SI_UNIT(.KILO.,.GRAM.) ); #1549=DERIVED_UNIT((#1546,#1547)); #1550=MEASURE_REPRESENTATION_ITEM('density measure', POSITIVE_RATIO_MEASURE(7850.),#1549); #1551=PROPERTY_DEFINITION_REPRESENTATION(#1556,#1553); #1552=PROPERTY_DEFINITION_REPRESENTATION(#1557,#1554); #1553=REPRESENTATION('material name',(#1555),#2556); #1554=REPRESENTATION('density',(#1550),#2556); #1555=DESCRIPTIVE_REPRESENTATION_ITEM('Steel','Steel'); #1556=PROPERTY_DEFINITION('material property','material name',#2566); #1557=PROPERTY_DEFINITION('material property','density of part',#2566); #1558=AXIS2_PLACEMENT_3D('placement',#2137,#1705,#1706); #1559=AXIS2_PLACEMENT_3D('',#2138,#1707,#1708); #1560=AXIS2_PLACEMENT_3D('',#2140,#1709,#1710); #1561=AXIS2_PLACEMENT_3D('',#2143,#1712,#1713); #1562=AXIS2_PLACEMENT_3D('',#2144,#1714,#1715); #1563=AXIS2_PLACEMENT_3D('',#2146,#1716,#1717); #1564=AXIS2_PLACEMENT_3D('',#2149,#1719,#1720); #1565=AXIS2_PLACEMENT_3D('',#2150,#1721,#1722); #1566=AXIS2_PLACEMENT_3D('',#2152,#1723,#1724); #1567=AXIS2_PLACEMENT_3D('',#2155,#1726,#1727); #1568=AXIS2_PLACEMENT_3D('',#2156,#1728,#1729); #1569=AXIS2_PLACEMENT_3D('',#2158,#1730,#1731); #1570=AXIS2_PLACEMENT_3D('',#2161,#1733,#1734); #1571=AXIS2_PLACEMENT_3D('',#2162,#1735,#1736); #1572=AXIS2_PLACEMENT_3D('',#2164,#1737,#1738); #1573=AXIS2_PLACEMENT_3D('',#2167,#1740,#1741); #1574=AXIS2_PLACEMENT_3D('',#2168,#1742,#1743); #1575=AXIS2_PLACEMENT_3D('',#2170,#1744,#1745); #1576=AXIS2_PLACEMENT_3D('',#2173,#1747,#1748); #1577=AXIS2_PLACEMENT_3D('',#2174,#1749,#1750); #1578=AXIS2_PLACEMENT_3D('',#2176,#1751,#1752); #1579=AXIS2_PLACEMENT_3D('',#2179,#1754,#1755); #1580=AXIS2_PLACEMENT_3D('',#2180,#1756,#1757); #1581=AXIS2_PLACEMENT_3D('',#2182,#1758,#1759); #1582=AXIS2_PLACEMENT_3D('',#2185,#1761,#1762); #1583=AXIS2_PLACEMENT_3D('',#2186,#1763,#1764); #1584=AXIS2_PLACEMENT_3D('',#2188,#1765,#1766); #1585=AXIS2_PLACEMENT_3D('',#2191,#1768,#1769); #1586=AXIS2_PLACEMENT_3D('',#2192,#1770,#1771); #1587=AXIS2_PLACEMENT_3D('',#2194,#1772,#1773); #1588=AXIS2_PLACEMENT_3D('',#2197,#1775,#1776); #1589=AXIS2_PLACEMENT_3D('',#2198,#1777,#1778); #1590=AXIS2_PLACEMENT_3D('',#2200,#1779,#1780); #1591=AXIS2_PLACEMENT_3D('',#2203,#1782,#1783); #1592=AXIS2_PLACEMENT_3D('',#2204,#1784,#1785); #1593=AXIS2_PLACEMENT_3D('',#2206,#1786,#1787); #1594=AXIS2_PLACEMENT_3D('',#2209,#1789,#1790); #1595=AXIS2_PLACEMENT_3D('',#2210,#1791,#1792); #1596=AXIS2_PLACEMENT_3D('',#2212,#1793,#1794); #1597=AXIS2_PLACEMENT_3D('',#2215,#1796,#1797); #1598=AXIS2_PLACEMENT_3D('',#2216,#1798,#1799); #1599=AXIS2_PLACEMENT_3D('',#2218,#1800,#1801); #1600=AXIS2_PLACEMENT_3D('',#2221,#1803,#1804); #1601=AXIS2_PLACEMENT_3D('',#2222,#1805,#1806); #1602=AXIS2_PLACEMENT_3D('',#2224,#1807,#1808); #1603=AXIS2_PLACEMENT_3D('',#2227,#1810,#1811); #1604=AXIS2_PLACEMENT_3D('',#2228,#1812,#1813); #1605=AXIS2_PLACEMENT_3D('',#2230,#1814,#1815); #1606=AXIS2_PLACEMENT_3D('',#2233,#1817,#1818); #1607=AXIS2_PLACEMENT_3D('',#2234,#1819,#1820); #1608=AXIS2_PLACEMENT_3D('',#2236,#1821,#1822); #1609=AXIS2_PLACEMENT_3D('',#2239,#1824,#1825); #1610=AXIS2_PLACEMENT_3D('',#2240,#1826,#1827); #1611=AXIS2_PLACEMENT_3D('',#2242,#1828,#1829); #1612=AXIS2_PLACEMENT_3D('',#2245,#1831,#1832); #1613=AXIS2_PLACEMENT_3D('',#2246,#1833,#1834); #1614=AXIS2_PLACEMENT_3D('',#2248,#1835,#1836); #1615=AXIS2_PLACEMENT_3D('',#2251,#1838,#1839); #1616=AXIS2_PLACEMENT_3D('',#2252,#1840,#1841); #1617=AXIS2_PLACEMENT_3D('',#2254,#1842,#1843); #1618=AXIS2_PLACEMENT_3D('',#2257,#1845,#1846); #1619=AXIS2_PLACEMENT_3D('',#2258,#1847,#1848); #1620=AXIS2_PLACEMENT_3D('',#2260,#1849,#1850); #1621=AXIS2_PLACEMENT_3D('',#2263,#1852,#1853); #1622=AXIS2_PLACEMENT_3D('',#2264,#1854,#1855); #1623=AXIS2_PLACEMENT_3D('',#2266,#1856,#1857); #1624=AXIS2_PLACEMENT_3D('',#2269,#1859,#1860); #1625=AXIS2_PLACEMENT_3D('',#2270,#1861,#1862); #1626=AXIS2_PLACEMENT_3D('',#2272,#1863,#1864); #1627=AXIS2_PLACEMENT_3D('',#2275,#1866,#1867); #1628=AXIS2_PLACEMENT_3D('',#2276,#1868,#1869); #1629=AXIS2_PLACEMENT_3D('',#2278,#1870,#1871); #1630=AXIS2_PLACEMENT_3D('',#2281,#1873,#1874); #1631=AXIS2_PLACEMENT_3D('',#2282,#1875,#1876); #1632=AXIS2_PLACEMENT_3D('',#2291,#1881,#1882); #1633=AXIS2_PLACEMENT_3D('',#2297,#1886,#1887); #1634=AXIS2_PLACEMENT_3D('',#2303,#1891,#1892); #1635=AXIS2_PLACEMENT_3D('',#2309,#1896,#1897); #1636=AXIS2_PLACEMENT_3D('',#2315,#1901,#1902); #1637=AXIS2_PLACEMENT_3D('',#2318,#1905,#1906); #1638=AXIS2_PLACEMENT_3D('',#2319,#1907,#1908); #1639=AXIS2_PLACEMENT_3D('',#2320,#1909,#1910); #1640=AXIS2_PLACEMENT_3D('',#2329,#1915,#1916); #1641=AXIS2_PLACEMENT_3D('',#2335,#1920,#1921); #1642=AXIS2_PLACEMENT_3D('',#2341,#1925,#1926); #1643=AXIS2_PLACEMENT_3D('',#2344,#1929,#1930); #1644=AXIS2_PLACEMENT_3D('',#2345,#1931,#1932); #1645=AXIS2_PLACEMENT_3D('',#2346,#1933,#1934); #1646=AXIS2_PLACEMENT_3D('',#2355,#1939,#1940); #1647=AXIS2_PLACEMENT_3D('',#2361,#1944,#1945); #1648=AXIS2_PLACEMENT_3D('',#2367,#1949,#1950); #1649=AXIS2_PLACEMENT_3D('',#2370,#1953,#1954); #1650=AXIS2_PLACEMENT_3D('',#2371,#1955,#1956); #1651=AXIS2_PLACEMENT_3D('',#2372,#1957,#1958); #1652=AXIS2_PLACEMENT_3D('',#2381,#1963,#1964); #1653=AXIS2_PLACEMENT_3D('',#2387,#1968,#1969); #1654=AXIS2_PLACEMENT_3D('',#2393,#1973,#1974); #1655=AXIS2_PLACEMENT_3D('',#2396,#1977,#1978); #1656=AXIS2_PLACEMENT_3D('',#2397,#1979,#1980); #1657=AXIS2_PLACEMENT_3D('',#2398,#1981,#1982); #1658=AXIS2_PLACEMENT_3D('',#2407,#1987,#1988); #1659=AXIS2_PLACEMENT_3D('',#2413,#1992,#1993); #1660=AXIS2_PLACEMENT_3D('',#2419,#1997,#1998); #1661=AXIS2_PLACEMENT_3D('',#2422,#2001,#2002); #1662=AXIS2_PLACEMENT_3D('',#2423,#2003,#2004); #1663=AXIS2_PLACEMENT_3D('',#2424,#2005,#2006); #1664=AXIS2_PLACEMENT_3D('',#2427,#2007,#2008); #1665=AXIS2_PLACEMENT_3D('',#2431,#2010,#2011); #1666=AXIS2_PLACEMENT_3D('',#2433,#2013,#2014); #1667=AXIS2_PLACEMENT_3D('',#2436,#2015,#2016); #1668=AXIS2_PLACEMENT_3D('',#2439,#2019,#2020); #1669=AXIS2_PLACEMENT_3D('',#2443,#2022,#2023); #1670=AXIS2_PLACEMENT_3D('',#2445,#2025,#2026); #1671=AXIS2_PLACEMENT_3D('',#2448,#2029,#2030); #1672=AXIS2_PLACEMENT_3D('',#2449,#2031,#2032); #1673=AXIS2_PLACEMENT_3D('',#2450,#2033,#2034); #1674=AXIS2_PLACEMENT_3D('',#2459,#2039,#2040); #1675=AXIS2_PLACEMENT_3D('',#2465,#2044,#2045); #1676=AXIS2_PLACEMENT_3D('',#2471,#2049,#2050); #1677=AXIS2_PLACEMENT_3D('',#2474,#2053,#2054); #1678=AXIS2_PLACEMENT_3D('',#2475,#2055,#2056); #1679=AXIS2_PLACEMENT_3D('',#2476,#2057,#2058); #1680=AXIS2_PLACEMENT_3D('',#2479,#2059,#2060); #1681=AXIS2_PLACEMENT_3D('',#2483,#2062,#2063); #1682=AXIS2_PLACEMENT_3D('',#2485,#2065,#2066); #1683=AXIS2_PLACEMENT_3D('',#2488,#2067,#2068); #1684=AXIS2_PLACEMENT_3D('',#2491,#2071,#2072); #1685=AXIS2_PLACEMENT_3D('',#2495,#2074,#2075); #1686=AXIS2_PLACEMENT_3D('',#2497,#2077,#2078); #1687=AXIS2_PLACEMENT_3D('',#2500,#2081,#2082); #1688=AXIS2_PLACEMENT_3D('',#2501,#2083,#2084); #1689=AXIS2_PLACEMENT_3D('',#2502,#2085,#2086); #1690=AXIS2_PLACEMENT_3D('',#2505,#2087,#2088); #1691=AXIS2_PLACEMENT_3D('',#2509,#2090,#2091); #1692=AXIS2_PLACEMENT_3D('',#2511,#2093,#2094); #1693=AXIS2_PLACEMENT_3D('',#2514,#2095,#2096); #1694=AXIS2_PLACEMENT_3D('',#2517,#2099,#2100); #1695=AXIS2_PLACEMENT_3D('',#2520,#2101,#2102); #1696=AXIS2_PLACEMENT_3D('',#2523,#2105,#2106); #1697=AXIS2_PLACEMENT_3D('',#2526,#2109,#2110); #1698=AXIS2_PLACEMENT_3D('',#2527,#2111,#2112); #1699=AXIS2_PLACEMENT_3D('',#2528,#2113,#2114); #1700=AXIS2_PLACEMENT_3D('',#2537,#2119,#2120); #1701=AXIS2_PLACEMENT_3D('',#2543,#2124,#2125); #1702=AXIS2_PLACEMENT_3D('',#2549,#2129,#2130); #1703=AXIS2_PLACEMENT_3D('',#2552,#2133,#2134); #1704=AXIS2_PLACEMENT_3D('',#2553,#2135,#2136); #1705=DIRECTION('axis',(0.,0.,1.)); #1706=DIRECTION('refdir',(1.,0.,0.)); #1707=DIRECTION('center_axis',(0.,0.,1.)); #1708=DIRECTION('ref_axis',(1.,0.,0.)); #1709=DIRECTION('center_axis',(0.,0.,-1.)); #1710=DIRECTION('ref_axis',(1.,0.,0.)); #1711=DIRECTION('',(0.,0.,-1.)); #1712=DIRECTION('center_axis',(0.,0.,-1.)); #1713=DIRECTION('ref_axis',(1.,0.,0.)); #1714=DIRECTION('center_axis',(0.,0.,1.)); #1715=DIRECTION('ref_axis',(1.,0.,0.)); #1716=DIRECTION('center_axis',(0.,0.,-1.)); #1717=DIRECTION('ref_axis',(1.,0.,0.)); #1718=DIRECTION('',(0.,0.,-1.)); #1719=DIRECTION('center_axis',(0.,0.,-1.)); #1720=DIRECTION('ref_axis',(1.,0.,0.)); #1721=DIRECTION('center_axis',(0.,0.,1.)); #1722=DIRECTION('ref_axis',(1.,0.,0.)); #1723=DIRECTION('center_axis',(0.,0.,-1.)); #1724=DIRECTION('ref_axis',(1.,0.,0.)); #1725=DIRECTION('',(0.,0.,-1.)); #1726=DIRECTION('center_axis',(0.,0.,-1.)); #1727=DIRECTION('ref_axis',(1.,0.,0.)); #1728=DIRECTION('center_axis',(0.,0.,1.)); #1729=DIRECTION('ref_axis',(1.,0.,0.)); #1730=DIRECTION('center_axis',(0.,0.,-1.)); #1731=DIRECTION('ref_axis',(1.,0.,0.)); #1732=DIRECTION('',(0.,0.,-1.)); #1733=DIRECTION('center_axis',(0.,0.,-1.)); #1734=DIRECTION('ref_axis',(1.,0.,0.)); #1735=DIRECTION('center_axis',(0.,0.,1.)); #1736=DIRECTION('ref_axis',(1.,0.,0.)); #1737=DIRECTION('center_axis',(0.,0.,-1.)); #1738=DIRECTION('ref_axis',(1.,0.,0.)); #1739=DIRECTION('',(0.,0.,-1.)); #1740=DIRECTION('center_axis',(0.,0.,-1.)); #1741=DIRECTION('ref_axis',(1.,0.,0.)); #1742=DIRECTION('center_axis',(0.,0.,1.)); #1743=DIRECTION('ref_axis',(1.,0.,0.)); #1744=DIRECTION('center_axis',(0.,0.,-1.)); #1745=DIRECTION('ref_axis',(1.,0.,0.)); #1746=DIRECTION('',(0.,0.,-1.)); #1747=DIRECTION('center_axis',(0.,0.,-1.)); #1748=DIRECTION('ref_axis',(1.,0.,0.)); #1749=DIRECTION('center_axis',(0.,0.,1.)); #1750=DIRECTION('ref_axis',(1.,0.,0.)); #1751=DIRECTION('center_axis',(0.,0.,-1.)); #1752=DIRECTION('ref_axis',(1.,0.,0.)); #1753=DIRECTION('',(0.,0.,-1.)); #1754=DIRECTION('center_axis',(0.,0.,-1.)); #1755=DIRECTION('ref_axis',(1.,0.,0.)); #1756=DIRECTION('center_axis',(0.,0.,1.)); #1757=DIRECTION('ref_axis',(1.,0.,0.)); #1758=DIRECTION('center_axis',(0.,0.,-1.)); #1759=DIRECTION('ref_axis',(1.,0.,0.)); #1760=DIRECTION('',(0.,0.,-1.)); #1761=DIRECTION('center_axis',(0.,0.,-1.)); #1762=DIRECTION('ref_axis',(1.,0.,0.)); #1763=DIRECTION('center_axis',(0.,0.,1.)); #1764=DIRECTION('ref_axis',(1.,0.,0.)); #1765=DIRECTION('center_axis',(0.,0.,-1.)); #1766=DIRECTION('ref_axis',(1.,0.,0.)); #1767=DIRECTION('',(0.,0.,-1.)); #1768=DIRECTION('center_axis',(0.,0.,-1.)); #1769=DIRECTION('ref_axis',(1.,0.,0.)); #1770=DIRECTION('center_axis',(0.,0.,1.)); #1771=DIRECTION('ref_axis',(1.,0.,0.)); #1772=DIRECTION('center_axis',(0.,0.,-1.)); #1773=DIRECTION('ref_axis',(1.,0.,0.)); #1774=DIRECTION('',(0.,0.,-1.)); #1775=DIRECTION('center_axis',(0.,0.,-1.)); #1776=DIRECTION('ref_axis',(1.,0.,0.)); #1777=DIRECTION('center_axis',(0.,0.,1.)); #1778=DIRECTION('ref_axis',(1.,0.,0.)); #1779=DIRECTION('center_axis',(0.,0.,-1.)); #1780=DIRECTION('ref_axis',(1.,0.,0.)); #1781=DIRECTION('',(0.,0.,-1.)); #1782=DIRECTION('center_axis',(0.,0.,-1.)); #1783=DIRECTION('ref_axis',(1.,0.,0.)); #1784=DIRECTION('center_axis',(0.,0.,1.)); #1785=DIRECTION('ref_axis',(1.,0.,0.)); #1786=DIRECTION('center_axis',(0.,0.,-1.)); #1787=DIRECTION('ref_axis',(1.,0.,0.)); #1788=DIRECTION('',(0.,0.,-1.)); #1789=DIRECTION('center_axis',(0.,0.,-1.)); #1790=DIRECTION('ref_axis',(1.,0.,0.)); #1791=DIRECTION('center_axis',(0.,0.,1.)); #1792=DIRECTION('ref_axis',(1.,0.,0.)); #1793=DIRECTION('center_axis',(0.,0.,-1.)); #1794=DIRECTION('ref_axis',(1.,0.,0.)); #1795=DIRECTION('',(0.,0.,-1.)); #1796=DIRECTION('center_axis',(0.,0.,-1.)); #1797=DIRECTION('ref_axis',(1.,0.,0.)); #1798=DIRECTION('center_axis',(0.,0.,1.)); #1799=DIRECTION('ref_axis',(1.,0.,0.)); #1800=DIRECTION('center_axis',(0.,0.,-1.)); #1801=DIRECTION('ref_axis',(1.,0.,0.)); #1802=DIRECTION('',(0.,0.,-1.)); #1803=DIRECTION('center_axis',(0.,0.,-1.)); #1804=DIRECTION('ref_axis',(1.,0.,0.)); #1805=DIRECTION('center_axis',(0.,0.,1.)); #1806=DIRECTION('ref_axis',(1.,0.,0.)); #1807=DIRECTION('center_axis',(0.,0.,-1.)); #1808=DIRECTION('ref_axis',(1.,0.,0.)); #1809=DIRECTION('',(0.,0.,-1.)); #1810=DIRECTION('center_axis',(0.,0.,-1.)); #1811=DIRECTION('ref_axis',(1.,0.,0.)); #1812=DIRECTION('center_axis',(0.,0.,1.)); #1813=DIRECTION('ref_axis',(1.,0.,0.)); #1814=DIRECTION('center_axis',(0.,0.,-1.)); #1815=DIRECTION('ref_axis',(1.,0.,0.)); #1816=DIRECTION('',(0.,0.,-1.)); #1817=DIRECTION('center_axis',(0.,0.,-1.)); #1818=DIRECTION('ref_axis',(1.,0.,0.)); #1819=DIRECTION('center_axis',(0.,0.,1.)); #1820=DIRECTION('ref_axis',(1.,0.,0.)); #1821=DIRECTION('center_axis',(0.,0.,-1.)); #1822=DIRECTION('ref_axis',(1.,0.,0.)); #1823=DIRECTION('',(0.,0.,-1.)); #1824=DIRECTION('center_axis',(0.,0.,-1.)); #1825=DIRECTION('ref_axis',(1.,0.,0.)); #1826=DIRECTION('center_axis',(0.,0.,1.)); #1827=DIRECTION('ref_axis',(1.,0.,0.)); #1828=DIRECTION('center_axis',(0.,0.,-1.)); #1829=DIRECTION('ref_axis',(1.,0.,0.)); #1830=DIRECTION('',(0.,0.,-1.)); #1831=DIRECTION('center_axis',(0.,0.,-1.)); #1832=DIRECTION('ref_axis',(1.,0.,0.)); #1833=DIRECTION('center_axis',(0.,0.,1.)); #1834=DIRECTION('ref_axis',(1.,0.,0.)); #1835=DIRECTION('center_axis',(0.,0.,-1.)); #1836=DIRECTION('ref_axis',(1.,0.,0.)); #1837=DIRECTION('',(0.,0.,-1.)); #1838=DIRECTION('center_axis',(0.,0.,-1.)); #1839=DIRECTION('ref_axis',(1.,0.,0.)); #1840=DIRECTION('center_axis',(0.,0.,1.)); #1841=DIRECTION('ref_axis',(1.,0.,0.)); #1842=DIRECTION('center_axis',(0.,0.,-1.)); #1843=DIRECTION('ref_axis',(1.,0.,0.)); #1844=DIRECTION('',(0.,0.,-1.)); #1845=DIRECTION('center_axis',(0.,0.,-1.)); #1846=DIRECTION('ref_axis',(1.,0.,0.)); #1847=DIRECTION('center_axis',(0.,0.,1.)); #1848=DIRECTION('ref_axis',(1.,0.,0.)); #1849=DIRECTION('center_axis',(0.,0.,-1.)); #1850=DIRECTION('ref_axis',(1.,0.,0.)); #1851=DIRECTION('',(0.,0.,-1.)); #1852=DIRECTION('center_axis',(0.,0.,-1.)); #1853=DIRECTION('ref_axis',(1.,0.,0.)); #1854=DIRECTION('center_axis',(0.,0.,1.)); #1855=DIRECTION('ref_axis',(1.,0.,0.)); #1856=DIRECTION('center_axis',(0.,0.,-1.)); #1857=DIRECTION('ref_axis',(1.,0.,0.)); #1858=DIRECTION('',(0.,0.,-1.)); #1859=DIRECTION('center_axis',(0.,0.,-1.)); #1860=DIRECTION('ref_axis',(1.,0.,0.)); #1861=DIRECTION('center_axis',(0.,0.,1.)); #1862=DIRECTION('ref_axis',(1.,0.,0.)); #1863=DIRECTION('center_axis',(0.,0.,-1.)); #1864=DIRECTION('ref_axis',(1.,0.,0.)); #1865=DIRECTION('',(0.,0.,-1.)); #1866=DIRECTION('center_axis',(0.,0.,-1.)); #1867=DIRECTION('ref_axis',(1.,0.,0.)); #1868=DIRECTION('center_axis',(0.,0.,1.)); #1869=DIRECTION('ref_axis',(1.,0.,0.)); #1870=DIRECTION('center_axis',(0.,0.,-1.)); #1871=DIRECTION('ref_axis',(1.,0.,0.)); #1872=DIRECTION('',(0.,0.,-1.)); #1873=DIRECTION('center_axis',(0.,0.,-1.)); #1874=DIRECTION('ref_axis',(1.,0.,0.)); #1875=DIRECTION('center_axis',(-1.,0.,0.)); #1876=DIRECTION('ref_axis',(0.,-1.,0.)); #1877=DIRECTION('',(0.,1.,0.)); #1878=DIRECTION('',(0.,0.,1.)); #1879=DIRECTION('',(0.,-1.,0.)); #1880=DIRECTION('',(0.,0.,1.)); #1881=DIRECTION('center_axis',(0.,1.,0.)); #1882=DIRECTION('ref_axis',(-1.,0.,0.)); #1883=DIRECTION('',(1.,0.,0.)); #1884=DIRECTION('',(-1.,0.,0.)); #1885=DIRECTION('',(0.,0.,1.)); #1886=DIRECTION('center_axis',(1.,0.,0.)); #1887=DIRECTION('ref_axis',(0.,1.,0.)); #1888=DIRECTION('',(0.,-1.,0.)); #1889=DIRECTION('',(0.,1.,0.)); #1890=DIRECTION('',(0.,0.,1.)); #1891=DIRECTION('center_axis',(0.707106781186548,-0.707106781186548,0.)); #1892=DIRECTION('ref_axis',(0.707106781186548,0.707106781186548,0.)); #1893=DIRECTION('',(0.707106781186547,0.707106781186547,0.)); #1894=DIRECTION('',(0.707106781186547,0.707106781186547,0.)); #1895=DIRECTION('',(0.,0.,1.)); #1896=DIRECTION('center_axis',(0.,-1.,0.)); #1897=DIRECTION('ref_axis',(1.,0.,0.)); #1898=DIRECTION('',(-1.,0.,0.)); #1899=DIRECTION('',(1.,0.,0.)); #1900=DIRECTION('',(0.,0.,1.)); #1901=DIRECTION('center_axis',(-0.707106781186548,-0.707106781186547,0.)); #1902=DIRECTION('ref_axis',(0.707106781186547,-0.707106781186548,0.)); #1903=DIRECTION('',(0.707106781186547,-0.707106781186548,0.)); #1904=DIRECTION('',(0.707106781186547,-0.707106781186548,0.)); #1905=DIRECTION('center_axis',(0.,0.,1.)); #1906=DIRECTION('ref_axis',(1.,0.,0.)); #1907=DIRECTION('center_axis',(0.,0.,1.)); #1908=DIRECTION('ref_axis',(1.,0.,0.)); #1909=DIRECTION('center_axis',(-1.,0.,0.)); #1910=DIRECTION('ref_axis',(0.,-1.,0.)); #1911=DIRECTION('',(0.,1.,0.)); #1912=DIRECTION('',(0.,0.,1.)); #1913=DIRECTION('',(0.,-1.,0.)); #1914=DIRECTION('',(0.,0.,1.)); #1915=DIRECTION('center_axis',(0.,1.,0.)); #1916=DIRECTION('ref_axis',(-1.,0.,0.)); #1917=DIRECTION('',(1.,0.,0.)); #1918=DIRECTION('',(-1.,0.,0.)); #1919=DIRECTION('',(0.,0.,1.)); #1920=DIRECTION('center_axis',(1.,0.,0.)); #1921=DIRECTION('ref_axis',(0.,1.,0.)); #1922=DIRECTION('',(0.,-1.,0.)); #1923=DIRECTION('',(0.,1.,0.)); #1924=DIRECTION('',(0.,0.,1.)); #1925=DIRECTION('center_axis',(0.,-1.,0.)); #1926=DIRECTION('ref_axis',(1.,0.,0.)); #1927=DIRECTION('',(-1.,0.,0.)); #1928=DIRECTION('',(1.,0.,0.)); #1929=DIRECTION('center_axis',(0.,0.,1.)); #1930=DIRECTION('ref_axis',(1.,0.,0.)); #1931=DIRECTION('center_axis',(0.,0.,1.)); #1932=DIRECTION('ref_axis',(-1.,0.,0.)); #1933=DIRECTION('center_axis',(0.,-1.,0.)); #1934=DIRECTION('ref_axis',(1.,0.,0.)); #1935=DIRECTION('',(1.,0.,0.)); #1936=DIRECTION('',(0.,0.,1.)); #1937=DIRECTION('',(1.,0.,0.)); #1938=DIRECTION('',(0.,0.,1.)); #1939=DIRECTION('center_axis',(-1.,0.,0.)); #1940=DIRECTION('ref_axis',(0.,-1.,0.)); #1941=DIRECTION('',(0.,-1.,0.)); #1942=DIRECTION('',(0.,-1.,0.)); #1943=DIRECTION('',(0.,0.,1.)); #1944=DIRECTION('center_axis',(0.,1.,0.)); #1945=DIRECTION('ref_axis',(-1.,0.,0.)); #1946=DIRECTION('',(-1.,0.,0.)); #1947=DIRECTION('',(-1.,0.,0.)); #1948=DIRECTION('',(0.,0.,1.)); #1949=DIRECTION('center_axis',(1.,0.,0.)); #1950=DIRECTION('ref_axis',(0.,1.,0.)); #1951=DIRECTION('',(0.,1.,0.)); #1952=DIRECTION('',(0.,1.,0.)); #1953=DIRECTION('center_axis',(0.,0.,1.)); #1954=DIRECTION('ref_axis',(1.,0.,0.)); #1955=DIRECTION('center_axis',(0.,0.,1.)); #1956=DIRECTION('ref_axis',(-1.,0.,0.)); #1957=DIRECTION('center_axis',(0.,-1.,0.)); #1958=DIRECTION('ref_axis',(0.,0.,-1.)); #1959=DIRECTION('',(0.,0.,1.)); #1960=DIRECTION('',(1.,0.,0.)); #1961=DIRECTION('',(0.,0.,-1.)); #1962=DIRECTION('',(1.,0.,0.)); #1963=DIRECTION('center_axis',(0.,0.,1.)); #1964=DIRECTION('ref_axis',(0.,-1.,0.)); #1965=DIRECTION('',(0.,1.,0.)); #1966=DIRECTION('',(0.,-1.,0.)); #1967=DIRECTION('',(1.,0.,0.)); #1968=DIRECTION('center_axis',(0.,1.,0.)); #1969=DIRECTION('ref_axis',(0.,0.,1.)); #1970=DIRECTION('',(0.,0.,-1.)); #1971=DIRECTION('',(0.,0.,1.)); #1972=DIRECTION('',(1.,0.,0.)); #1973=DIRECTION('center_axis',(0.,0.,-1.)); #1974=DIRECTION('ref_axis',(0.,1.,0.)); #1975=DIRECTION('',(0.,-1.,0.)); #1976=DIRECTION('',(0.,1.,0.)); #1977=DIRECTION('center_axis',(1.,0.,0.)); #1978=DIRECTION('ref_axis',(0.,0.,-1.)); #1979=DIRECTION('center_axis',(1.,0.,0.)); #1980=DIRECTION('ref_axis',(0.,1.,0.)); #1981=DIRECTION('center_axis',(-1.,0.,0.)); #1982=DIRECTION('ref_axis',(0.,-1.,0.)); #1983=DIRECTION('',(0.,1.,0.)); #1984=DIRECTION('',(0.,0.,1.)); #1985=DIRECTION('',(0.,-1.,0.)); #1986=DIRECTION('',(0.,0.,1.)); #1987=DIRECTION('center_axis',(0.,1.,0.)); #1988=DIRECTION('ref_axis',(-1.,0.,0.)); #1989=DIRECTION('',(1.,0.,0.)); #1990=DIRECTION('',(-1.,0.,0.)); #1991=DIRECTION('',(0.,0.,1.)); #1992=DIRECTION('center_axis',(1.,0.,0.)); #1993=DIRECTION('ref_axis',(0.,1.,0.)); #1994=DIRECTION('',(0.,-1.,0.)); #1995=DIRECTION('',(0.,1.,0.)); #1996=DIRECTION('',(0.,0.,1.)); #1997=DIRECTION('center_axis',(0.,-1.,0.)); #1998=DIRECTION('ref_axis',(1.,0.,0.)); #1999=DIRECTION('',(-1.,0.,0.)); #2000=DIRECTION('',(1.,0.,0.)); #2001=DIRECTION('center_axis',(0.,0.,1.)); #2002=DIRECTION('ref_axis',(1.,0.,0.)); #2003=DIRECTION('center_axis',(0.,0.,1.)); #2004=DIRECTION('ref_axis',(-1.,0.,0.)); #2005=DIRECTION('center_axis',(0.,0.,1.)); #2006=DIRECTION('ref_axis',(-1.,0.,0.)); #2007=DIRECTION('center_axis',(0.,0.,1.)); #2008=DIRECTION('ref_axis',(0.70710678118655,0.707106781186545,0.)); #2009=DIRECTION('',(0.,-1.,0.)); #2010=DIRECTION('center_axis',(0.,0.,1.)); #2011=DIRECTION('ref_axis',(-0.707106781186545,-0.70710678118655,0.)); #2012=DIRECTION('',(0.,1.,0.)); #2013=DIRECTION('center_axis',(0.,0.,1.)); #2014=DIRECTION('ref_axis',(0.70710678118655,0.707106781186545,0.)); #2015=DIRECTION('center_axis',(0.,0.,-1.)); #2016=DIRECTION('ref_axis',(-0.707106781186549,0.707106781186546,0.)); #2017=DIRECTION('',(0.,0.,-1.)); #2018=DIRECTION('',(0.,0.,1.)); #2019=DIRECTION('center_axis',(0.,0.,1.)); #2020=DIRECTION('ref_axis',(1.,0.,0.)); #2021=DIRECTION('',(0.,-1.,0.)); #2022=DIRECTION('center_axis',(0.,0.,-1.)); #2023=DIRECTION('ref_axis',(-0.707106781186545,-0.70710678118655,0.)); #2024=DIRECTION('',(0.,1.,0.)); #2025=DIRECTION('center_axis',(0.,0.,1.)); #2026=DIRECTION('ref_axis',(0.707106781186549,-0.707106781186546,0.)); #2027=DIRECTION('',(0.,0.,-1.)); #2028=DIRECTION('',(0.,0.,1.)); #2029=DIRECTION('center_axis',(-1.,0.,0.)); #2030=DIRECTION('ref_axis',(0.,-1.,0.)); #2031=DIRECTION('center_axis',(1.,0.,0.)); #2032=DIRECTION('ref_axis',(0.,1.,0.)); #2033=DIRECTION('center_axis',(-1.,0.,0.)); #2034=DIRECTION('ref_axis',(0.,-1.,0.)); #2035=DIRECTION('',(0.,1.,0.)); #2036=DIRECTION('',(0.,0.,1.)); #2037=DIRECTION('',(0.,-1.,0.)); #2038=DIRECTION('',(0.,0.,1.)); #2039=DIRECTION('center_axis',(0.,1.,0.)); #2040=DIRECTION('ref_axis',(-1.,0.,0.)); #2041=DIRECTION('',(1.,0.,0.)); #2042=DIRECTION('',(-1.,0.,0.)); #2043=DIRECTION('',(0.,0.,1.)); #2044=DIRECTION('center_axis',(1.,0.,0.)); #2045=DIRECTION('ref_axis',(0.,1.,0.)); #2046=DIRECTION('',(0.,-1.,0.)); #2047=DIRECTION('',(0.,1.,0.)); #2048=DIRECTION('',(0.,0.,1.)); #2049=DIRECTION('center_axis',(0.,-1.,0.)); #2050=DIRECTION('ref_axis',(1.,0.,0.)); #2051=DIRECTION('',(-1.,0.,0.)); #2052=DIRECTION('',(1.,0.,0.)); #2053=DIRECTION('center_axis',(0.,0.,1.)); #2054=DIRECTION('ref_axis',(1.,0.,0.)); #2055=DIRECTION('center_axis',(0.,0.,1.)); #2056=DIRECTION('ref_axis',(-1.,0.,0.)); #2057=DIRECTION('center_axis',(0.,0.,1.)); #2058=DIRECTION('ref_axis',(-1.,0.,0.)); #2059=DIRECTION('center_axis',(0.,0.,1.)); #2060=DIRECTION('ref_axis',(0.70710678118655,0.707106781186545,0.)); #2061=DIRECTION('',(0.,-1.,0.)); #2062=DIRECTION('center_axis',(0.,0.,1.)); #2063=DIRECTION('ref_axis',(-0.707106781186545,-0.70710678118655,0.)); #2064=DIRECTION('',(0.,1.,0.)); #2065=DIRECTION('center_axis',(0.,0.,1.)); #2066=DIRECTION('ref_axis',(0.70710678118655,0.707106781186545,0.)); #2067=DIRECTION('center_axis',(0.,0.,-1.)); #2068=DIRECTION('ref_axis',(-0.707106781186549,0.707106781186546,0.)); #2069=DIRECTION('',(0.,0.,-1.)); #2070=DIRECTION('',(0.,0.,1.)); #2071=DIRECTION('center_axis',(0.,0.,1.)); #2072=DIRECTION('ref_axis',(1.,0.,0.)); #2073=DIRECTION('',(0.,-1.,0.)); #2074=DIRECTION('center_axis',(0.,0.,-1.)); #2075=DIRECTION('ref_axis',(-0.707106781186545,-0.70710678118655,0.)); #2076=DIRECTION('',(0.,1.,0.)); #2077=DIRECTION('center_axis',(0.,0.,1.)); #2078=DIRECTION('ref_axis',(0.707106781186549,-0.707106781186546,0.)); #2079=DIRECTION('',(0.,0.,-1.)); #2080=DIRECTION('',(0.,0.,1.)); #2081=DIRECTION('center_axis',(-1.,0.,0.)); #2082=DIRECTION('ref_axis',(0.,-1.,0.)); #2083=DIRECTION('center_axis',(1.,0.,0.)); #2084=DIRECTION('ref_axis',(0.,1.,0.)); #2085=DIRECTION('center_axis',(0.,1.,0.)); #2086=DIRECTION('ref_axis',(-1.,0.,0.)); #2087=DIRECTION('center_axis',(0.,-1.,0.)); #2088=DIRECTION('ref_axis',(-0.707106781186548,0.,0.707106781186548)); #2089=DIRECTION('',(-1.,0.,0.)); #2090=DIRECTION('center_axis',(0.,-1.,0.)); #2091=DIRECTION('ref_axis',(0.707106781186548,0.,0.707106781186548)); #2092=DIRECTION('',(1.,0.,0.)); #2093=DIRECTION('center_axis',(0.,-1.,0.)); #2094=DIRECTION('ref_axis',(-0.707106781186548,0.,0.707106781186548)); #2095=DIRECTION('center_axis',(0.,1.,0.)); #2096=DIRECTION('ref_axis',(-0.707106781186548,0.,0.707106781186548)); #2097=DIRECTION('',(0.,1.,0.)); #2098=DIRECTION('',(0.,-1.,0.)); #2099=DIRECTION('center_axis',(0.,-1.,0.)); #2100=DIRECTION('ref_axis',(0.707106781186548,0.,-0.707106781186548)); #2101=DIRECTION('center_axis',(0.,1.,0.)); #2102=DIRECTION('ref_axis',(0.707106781186548,0.,0.707106781186548)); #2103=DIRECTION('',(0.,1.,0.)); #2104=DIRECTION('',(0.,-1.,0.)); #2105=DIRECTION('center_axis',(0.,-1.,0.)); #2106=DIRECTION('ref_axis',(1.,0.,0.)); #2107=DIRECTION('',(-1.,0.,0.)); #2108=DIRECTION('',(1.,0.,0.)); #2109=DIRECTION('center_axis',(0.,0.,1.)); #2110=DIRECTION('ref_axis',(1.,0.,0.)); #2111=DIRECTION('center_axis',(0.,0.,1.)); #2112=DIRECTION('ref_axis',(-1.,0.,0.)); #2113=DIRECTION('center_axis',(-1.,0.,0.)); #2114=DIRECTION('ref_axis',(0.,1.,0.)); #2115=DIRECTION('',(0.,-1.,0.)); #2116=DIRECTION('',(0.,0.,-1.)); #2117=DIRECTION('',(0.,1.,0.)); #2118=DIRECTION('',(0.,0.,-1.)); #2119=DIRECTION('center_axis',(0.,-1.,0.)); #2120=DIRECTION('ref_axis',(-1.,0.,0.)); #2121=DIRECTION('',(1.,0.,0.)); #2122=DIRECTION('',(-1.,0.,0.)); #2123=DIRECTION('',(0.,0.,-1.)); #2124=DIRECTION('center_axis',(1.,0.,0.)); #2125=DIRECTION('ref_axis',(0.,-1.,0.)); #2126=DIRECTION('',(0.,1.,0.)); #2127=DIRECTION('',(0.,-1.,0.)); #2128=DIRECTION('',(0.,0.,-1.)); #2129=DIRECTION('center_axis',(0.,1.,0.)); #2130=DIRECTION('ref_axis',(1.,0.,0.)); #2131=DIRECTION('',(-1.,0.,0.)); #2132=DIRECTION('',(1.,0.,0.)); #2133=DIRECTION('center_axis',(0.,0.,-1.)); #2134=DIRECTION('ref_axis',(-1.,0.,0.)); #2135=DIRECTION('center_axis',(0.,0.,-1.)); #2136=DIRECTION('ref_axis',(1.,0.,0.)); #2137=CARTESIAN_POINT('',(0.,0.,0.)); #2138=CARTESIAN_POINT('Origin',(0.,-12.7,0.)); #2139=CARTESIAN_POINT('',(-0.5,-12.7,1.5)); #2140=CARTESIAN_POINT('Origin',(0.,-12.7,1.5)); #2141=CARTESIAN_POINT('',(-0.5,-12.7,0.)); #2142=CARTESIAN_POINT('',(-0.5,-12.7,0.)); #2143=CARTESIAN_POINT('Origin',(0.,-12.7,0.)); #2144=CARTESIAN_POINT('Origin',(22.86,-10.16,0.)); #2145=CARTESIAN_POINT('',(22.36,-10.16,1.5)); #2146=CARTESIAN_POINT('Origin',(22.86,-10.16,1.5)); #2147=CARTESIAN_POINT('',(22.36,-10.16,0.)); #2148=CARTESIAN_POINT('',(22.36,-10.16,0.)); #2149=CARTESIAN_POINT('Origin',(22.86,-10.16,0.)); #2150=CARTESIAN_POINT('Origin',(0.,0.,0.)); #2151=CARTESIAN_POINT('',(-0.5,0.,1.5)); #2152=CARTESIAN_POINT('Origin',(0.,0.,1.5)); #2153=CARTESIAN_POINT('',(-0.5,-6.12323399573677E-17,0.)); #2154=CARTESIAN_POINT('',(-0.5,-6.12323399573677E-17,0.)); #2155=CARTESIAN_POINT('Origin',(0.,0.,0.)); #2156=CARTESIAN_POINT('Origin',(22.86,0.,0.)); #2157=CARTESIAN_POINT('',(22.36,0.,1.5)); #2158=CARTESIAN_POINT('Origin',(22.86,0.,1.5)); #2159=CARTESIAN_POINT('',(22.36,-6.12323399573674E-17,0.)); #2160=CARTESIAN_POINT('',(22.36,-6.12323399573674E-17,0.)); #2161=CARTESIAN_POINT('Origin',(22.86,0.,0.)); #2162=CARTESIAN_POINT('Origin',(22.86,-27.94,0.)); #2163=CARTESIAN_POINT('',(22.36,-27.94,1.5)); #2164=CARTESIAN_POINT('Origin',(22.86,-27.94,1.5)); #2165=CARTESIAN_POINT('',(22.36,-27.94,0.)); #2166=CARTESIAN_POINT('',(22.36,-27.94,0.)); #2167=CARTESIAN_POINT('Origin',(22.86,-27.94,0.)); #2168=CARTESIAN_POINT('Origin',(0.,-27.94,0.)); #2169=CARTESIAN_POINT('',(-0.5,-27.94,1.5)); #2170=CARTESIAN_POINT('Origin',(0.,-27.94,1.5)); #2171=CARTESIAN_POINT('',(-0.5,-27.94,0.)); #2172=CARTESIAN_POINT('',(-0.5,-27.94,0.)); #2173=CARTESIAN_POINT('Origin',(0.,-27.94,0.)); #2174=CARTESIAN_POINT('Origin',(22.86,-25.4,0.)); #2175=CARTESIAN_POINT('',(22.36,-25.4,1.5)); #2176=CARTESIAN_POINT('Origin',(22.86,-25.4,1.5)); #2177=CARTESIAN_POINT('',(22.36,-25.4,0.)); #2178=CARTESIAN_POINT('',(22.36,-25.4,0.)); #2179=CARTESIAN_POINT('Origin',(22.86,-25.4,0.)); #2180=CARTESIAN_POINT('Origin',(0.,-25.4,0.)); #2181=CARTESIAN_POINT('',(-0.5,-25.4,1.5)); #2182=CARTESIAN_POINT('Origin',(0.,-25.4,1.5)); #2183=CARTESIAN_POINT('',(-0.5,-25.4,0.)); #2184=CARTESIAN_POINT('',(-0.5,-25.4,0.)); #2185=CARTESIAN_POINT('Origin',(0.,-25.4,0.)); #2186=CARTESIAN_POINT('Origin',(22.86,-22.86,0.)); #2187=CARTESIAN_POINT('',(22.36,-22.86,1.5)); #2188=CARTESIAN_POINT('Origin',(22.86,-22.86,1.5)); #2189=CARTESIAN_POINT('',(22.36,-22.86,0.)); #2190=CARTESIAN_POINT('',(22.36,-22.86,0.)); #2191=CARTESIAN_POINT('Origin',(22.86,-22.86,0.)); #2192=CARTESIAN_POINT('Origin',(0.,-22.86,0.)); #2193=CARTESIAN_POINT('',(-0.5,-22.86,1.5)); #2194=CARTESIAN_POINT('Origin',(0.,-22.86,1.5)); #2195=CARTESIAN_POINT('',(-0.5,-22.86,0.)); #2196=CARTESIAN_POINT('',(-0.5,-22.86,0.)); #2197=CARTESIAN_POINT('Origin',(0.,-22.86,0.)); #2198=CARTESIAN_POINT('Origin',(22.86,-20.32,0.)); #2199=CARTESIAN_POINT('',(22.36,-20.32,1.5)); #2200=CARTESIAN_POINT('Origin',(22.86,-20.32,1.5)); #2201=CARTESIAN_POINT('',(22.36,-20.32,0.)); #2202=CARTESIAN_POINT('',(22.36,-20.32,0.)); #2203=CARTESIAN_POINT('Origin',(22.86,-20.32,0.)); #2204=CARTESIAN_POINT('Origin',(0.,-20.32,0.)); #2205=CARTESIAN_POINT('',(-0.5,-20.32,1.5)); #2206=CARTESIAN_POINT('Origin',(0.,-20.32,1.5)); #2207=CARTESIAN_POINT('',(-0.5,-20.32,0.)); #2208=CARTESIAN_POINT('',(-0.5,-20.32,0.)); #2209=CARTESIAN_POINT('Origin',(0.,-20.32,0.)); #2210=CARTESIAN_POINT('Origin',(22.86,-17.78,0.)); #2211=CARTESIAN_POINT('',(22.36,-17.78,1.5)); #2212=CARTESIAN_POINT('Origin',(22.86,-17.78,1.5)); #2213=CARTESIAN_POINT('',(22.36,-17.78,0.)); #2214=CARTESIAN_POINT('',(22.36,-17.78,0.)); #2215=CARTESIAN_POINT('Origin',(22.86,-17.78,0.)); #2216=CARTESIAN_POINT('Origin',(0.,-17.78,0.)); #2217=CARTESIAN_POINT('',(-0.5,-17.78,1.5)); #2218=CARTESIAN_POINT('Origin',(0.,-17.78,1.5)); #2219=CARTESIAN_POINT('',(-0.5,-17.78,0.)); #2220=CARTESIAN_POINT('',(-0.5,-17.78,0.)); #2221=CARTESIAN_POINT('Origin',(0.,-17.78,0.)); #2222=CARTESIAN_POINT('Origin',(22.86,-15.24,0.)); #2223=CARTESIAN_POINT('',(22.36,-15.24,1.5)); #2224=CARTESIAN_POINT('Origin',(22.86,-15.24,1.5)); #2225=CARTESIAN_POINT('',(22.36,-15.24,0.)); #2226=CARTESIAN_POINT('',(22.36,-15.24,0.)); #2227=CARTESIAN_POINT('Origin',(22.86,-15.24,0.)); #2228=CARTESIAN_POINT('Origin',(0.,-15.24,0.)); #2229=CARTESIAN_POINT('',(-0.5,-15.24,1.5)); #2230=CARTESIAN_POINT('Origin',(0.,-15.24,1.5)); #2231=CARTESIAN_POINT('',(-0.5,-15.24,0.)); #2232=CARTESIAN_POINT('',(-0.5,-15.24,0.)); #2233=CARTESIAN_POINT('Origin',(0.,-15.24,0.)); #2234=CARTESIAN_POINT('Origin',(0.,-10.16,0.)); #2235=CARTESIAN_POINT('',(-0.5,-10.16,1.5)); #2236=CARTESIAN_POINT('Origin',(0.,-10.16,1.5)); #2237=CARTESIAN_POINT('',(-0.5,-10.16,0.)); #2238=CARTESIAN_POINT('',(-0.5,-10.16,0.)); #2239=CARTESIAN_POINT('Origin',(0.,-10.16,0.)); #2240=CARTESIAN_POINT('Origin',(22.86,-2.54,0.)); #2241=CARTESIAN_POINT('',(22.36,-2.54,1.5)); #2242=CARTESIAN_POINT('Origin',(22.86,-2.54,1.5)); #2243=CARTESIAN_POINT('',(22.36,-2.54,0.)); #2244=CARTESIAN_POINT('',(22.36,-2.54,0.)); #2245=CARTESIAN_POINT('Origin',(22.86,-2.54,0.)); #2246=CARTESIAN_POINT('Origin',(22.86,-7.62,0.)); #2247=CARTESIAN_POINT('',(22.36,-7.62,1.5)); #2248=CARTESIAN_POINT('Origin',(22.86,-7.62,1.5)); #2249=CARTESIAN_POINT('',(22.36,-7.62,0.)); #2250=CARTESIAN_POINT('',(22.36,-7.62,0.)); #2251=CARTESIAN_POINT('Origin',(22.86,-7.62,0.)); #2252=CARTESIAN_POINT('Origin',(0.,-5.08,0.)); #2253=CARTESIAN_POINT('',(-0.5,-5.08,1.5)); #2254=CARTESIAN_POINT('Origin',(0.,-5.08,1.5)); #2255=CARTESIAN_POINT('',(-0.5,-5.08,0.)); #2256=CARTESIAN_POINT('',(-0.5,-5.08,0.)); #2257=CARTESIAN_POINT('Origin',(0.,-5.08,0.)); #2258=CARTESIAN_POINT('Origin',(22.86,-5.08,0.)); #2259=CARTESIAN_POINT('',(22.36,-5.08,1.5)); #2260=CARTESIAN_POINT('Origin',(22.86,-5.08,1.5)); #2261=CARTESIAN_POINT('',(22.36,-5.08,0.)); #2262=CARTESIAN_POINT('',(22.36,-5.08,0.)); #2263=CARTESIAN_POINT('Origin',(22.86,-5.08,0.)); #2264=CARTESIAN_POINT('Origin',(0.,-7.62,0.)); #2265=CARTESIAN_POINT('',(-0.5,-7.62,1.5)); #2266=CARTESIAN_POINT('Origin',(0.,-7.62,1.5)); #2267=CARTESIAN_POINT('',(-0.5,-7.62,0.)); #2268=CARTESIAN_POINT('',(-0.5,-7.62,0.)); #2269=CARTESIAN_POINT('Origin',(0.,-7.62,0.)); #2270=CARTESIAN_POINT('Origin',(22.86,-12.7,0.)); #2271=CARTESIAN_POINT('',(22.36,-12.7,1.5)); #2272=CARTESIAN_POINT('Origin',(22.86,-12.7,1.5)); #2273=CARTESIAN_POINT('',(22.36,-12.7,0.)); #2274=CARTESIAN_POINT('',(22.36,-12.7,0.)); #2275=CARTESIAN_POINT('Origin',(22.86,-12.7,0.)); #2276=CARTESIAN_POINT('Origin',(0.,-2.54,0.)); #2277=CARTESIAN_POINT('',(-0.5,-2.54,1.5)); #2278=CARTESIAN_POINT('Origin',(0.,-2.54,1.5)); #2279=CARTESIAN_POINT('',(-0.5,-2.54,0.)); #2280=CARTESIAN_POINT('',(-0.5,-2.54,0.)); #2281=CARTESIAN_POINT('Origin',(0.,-2.54,0.)); #2282=CARTESIAN_POINT('Origin',(-1.27,7.366,0.)); #2283=CARTESIAN_POINT('',(-1.27,-42.069,0.)); #2284=CARTESIAN_POINT('',(-1.27,7.366,0.)); #2285=CARTESIAN_POINT('',(-1.27,-44.069,0.)); #2286=CARTESIAN_POINT('',(-1.27,-42.069,1.5)); #2287=CARTESIAN_POINT('',(-1.27,-42.069,0.)); #2288=CARTESIAN_POINT('',(-1.27,7.366,1.5)); #2289=CARTESIAN_POINT('',(-1.27,-44.069,1.5)); #2290=CARTESIAN_POINT('',(-1.27,7.366,0.)); #2291=CARTESIAN_POINT('Origin',(24.13,7.366,0.)); #2292=CARTESIAN_POINT('',(24.13,7.366,0.)); #2293=CARTESIAN_POINT('',(-1.27,7.366,0.)); #2294=CARTESIAN_POINT('',(24.13,7.366,1.5)); #2295=CARTESIAN_POINT('',(-1.27,7.366,1.5)); #2296=CARTESIAN_POINT('',(24.13,7.366,0.)); #2297=CARTESIAN_POINT('Origin',(24.13,-42.069,0.)); #2298=CARTESIAN_POINT('',(24.13,-42.069,0.)); #2299=CARTESIAN_POINT('',(24.13,7.366,0.)); #2300=CARTESIAN_POINT('',(24.13,-42.069,1.5)); #2301=CARTESIAN_POINT('',(24.13,7.366,1.5)); #2302=CARTESIAN_POINT('',(24.13,-42.069,0.)); #2303=CARTESIAN_POINT('Origin',(22.13,-44.069,0.)); #2304=CARTESIAN_POINT('',(22.13,-44.069,0.)); #2305=CARTESIAN_POINT('',(22.13,-44.069,0.)); #2306=CARTESIAN_POINT('',(22.13,-44.069,1.5)); #2307=CARTESIAN_POINT('',(22.13,-44.069,1.5)); #2308=CARTESIAN_POINT('',(22.13,-44.069,0.)); #2309=CARTESIAN_POINT('Origin',(0.73,-44.069,0.)); #2310=CARTESIAN_POINT('',(0.73,-44.069,0.)); #2311=CARTESIAN_POINT('',(24.13,-44.069,0.)); #2312=CARTESIAN_POINT('',(0.73,-44.069,1.5)); #2313=CARTESIAN_POINT('',(24.13,-44.069,1.5)); #2314=CARTESIAN_POINT('',(0.73,-44.069,0.)); #2315=CARTESIAN_POINT('Origin',(-1.27,-42.069,0.)); #2316=CARTESIAN_POINT('',(-1.27,-42.069,0.)); #2317=CARTESIAN_POINT('',(-1.27,-42.069,1.5)); #2318=CARTESIAN_POINT('Origin',(11.43,-18.3515,1.5)); #2319=CARTESIAN_POINT('Origin',(11.43,-18.3515,0.)); #2320=CARTESIAN_POINT('Origin',(2.63,-0.0340000000000007,1.5)); #2321=CARTESIAN_POINT('',(2.63,-31.034,1.5)); #2322=CARTESIAN_POINT('',(2.63,-0.0340000000000007,1.5)); #2323=CARTESIAN_POINT('',(2.63,-31.034,1.5)); #2324=CARTESIAN_POINT('',(2.63,-31.034,2.9)); #2325=CARTESIAN_POINT('',(2.63,-31.034,1.5)); #2326=CARTESIAN_POINT('',(2.63,-0.0340000000000007,2.9)); #2327=CARTESIAN_POINT('',(2.63,-31.034,2.9)); #2328=CARTESIAN_POINT('',(2.63,-0.0340000000000007,1.5)); #2329=CARTESIAN_POINT('Origin',(20.23,-0.0339999999999996,1.5)); #2330=CARTESIAN_POINT('',(20.23,-0.0339999999999996,1.5)); #2331=CARTESIAN_POINT('',(2.63,-0.0339999999999996,1.5)); #2332=CARTESIAN_POINT('',(20.23,-0.0340000000000007,2.9)); #2333=CARTESIAN_POINT('',(2.63,-0.0339999999999996,2.9)); #2334=CARTESIAN_POINT('',(20.23,-0.0339999999999996,1.5)); #2335=CARTESIAN_POINT('Origin',(20.23,-31.034,1.5)); #2336=CARTESIAN_POINT('',(20.23,-31.034,1.5)); #2337=CARTESIAN_POINT('',(20.23,-0.0339999999999996,1.5)); #2338=CARTESIAN_POINT('',(20.23,-31.034,2.9)); #2339=CARTESIAN_POINT('',(20.23,-0.0339999999999996,2.9)); #2340=CARTESIAN_POINT('',(20.23,-31.034,1.5)); #2341=CARTESIAN_POINT('Origin',(2.63,-31.034,1.5)); #2342=CARTESIAN_POINT('',(20.23,-31.034,1.5)); #2343=CARTESIAN_POINT('',(20.23,-31.034,2.9)); #2344=CARTESIAN_POINT('Origin',(11.43,-15.534,2.9)); #2345=CARTESIAN_POINT('Origin',(11.43,-15.534,1.5)); #2346=CARTESIAN_POINT('Origin',(21.53,-34.569,1.5)); #2347=CARTESIAN_POINT('',(21.53,-34.569,1.5)); #2348=CARTESIAN_POINT('',(24.13,-34.569,1.5)); #2349=CARTESIAN_POINT('',(21.53,-34.569,1.5)); #2350=CARTESIAN_POINT('',(24.13,-34.569,3.5)); #2351=CARTESIAN_POINT('',(24.13,-34.569,1.5)); #2352=CARTESIAN_POINT('',(21.53,-34.569,3.5)); #2353=CARTESIAN_POINT('',(21.53,-34.569,3.5)); #2354=CARTESIAN_POINT('',(21.53,-34.569,1.5)); #2355=CARTESIAN_POINT('Origin',(21.53,-30.069,1.5)); #2356=CARTESIAN_POINT('',(21.53,-30.069,1.5)); #2357=CARTESIAN_POINT('',(21.53,-30.069,1.5)); #2358=CARTESIAN_POINT('',(21.53,-30.069,3.5)); #2359=CARTESIAN_POINT('',(21.53,-30.069,3.5)); #2360=CARTESIAN_POINT('',(21.53,-30.069,1.5)); #2361=CARTESIAN_POINT('Origin',(24.13,-30.069,1.5)); #2362=CARTESIAN_POINT('',(24.13,-30.069,1.5)); #2363=CARTESIAN_POINT('',(24.13,-30.069,1.5)); #2364=CARTESIAN_POINT('',(24.13,-30.069,3.5)); #2365=CARTESIAN_POINT('',(24.13,-30.069,3.5)); #2366=CARTESIAN_POINT('',(24.13,-30.069,1.5)); #2367=CARTESIAN_POINT('Origin',(24.13,-34.569,1.5)); #2368=CARTESIAN_POINT('',(24.13,-34.569,1.5)); #2369=CARTESIAN_POINT('',(24.13,-34.569,3.5)); #2370=CARTESIAN_POINT('Origin',(22.83,-32.319,3.5)); #2371=CARTESIAN_POINT('Origin',(22.83,-32.319,1.5)); #2372=CARTESIAN_POINT('Origin',(24.13,-33.319,2.925)); #2373=CARTESIAN_POINT('',(24.13,-33.319,2.075)); #2374=CARTESIAN_POINT('',(24.13,-33.319,2.925)); #2375=CARTESIAN_POINT('',(24.13,-33.319,2.075)); #2376=CARTESIAN_POINT('',(25.03,-33.319,2.075)); #2377=CARTESIAN_POINT('',(24.13,-33.319,2.075)); #2378=CARTESIAN_POINT('',(25.03,-33.319,2.925)); #2379=CARTESIAN_POINT('',(25.03,-33.319,2.075)); #2380=CARTESIAN_POINT('',(24.13,-33.319,2.925)); #2381=CARTESIAN_POINT('Origin',(24.13,-31.319,2.925)); #2382=CARTESIAN_POINT('',(24.13,-31.319,2.925)); #2383=CARTESIAN_POINT('',(24.13,-33.319,2.925)); #2384=CARTESIAN_POINT('',(25.03,-31.319,2.925)); #2385=CARTESIAN_POINT('',(25.03,-33.319,2.925)); #2386=CARTESIAN_POINT('',(24.13,-31.319,2.925)); #2387=CARTESIAN_POINT('Origin',(24.13,-31.319,2.075)); #2388=CARTESIAN_POINT('',(24.13,-31.319,2.075)); #2389=CARTESIAN_POINT('',(24.13,-31.319,2.925)); #2390=CARTESIAN_POINT('',(25.03,-31.319,2.075)); #2391=CARTESIAN_POINT('',(25.03,-31.319,2.925)); #2392=CARTESIAN_POINT('',(24.13,-31.319,2.075)); #2393=CARTESIAN_POINT('Origin',(24.13,-33.319,2.075)); #2394=CARTESIAN_POINT('',(24.13,-31.319,2.075)); #2395=CARTESIAN_POINT('',(25.03,-31.319,2.075)); #2396=CARTESIAN_POINT('Origin',(25.03,-32.319,2.5)); #2397=CARTESIAN_POINT('Origin',(24.13,-32.319,2.5)); #2398=CARTESIAN_POINT('Origin',(17.93,-38.569,1.5)); #2399=CARTESIAN_POINT('',(17.93,-42.869,1.5)); #2400=CARTESIAN_POINT('',(17.93,-38.569,1.5)); #2401=CARTESIAN_POINT('',(17.93,-42.869,1.5)); #2402=CARTESIAN_POINT('',(17.93,-42.869,3.2)); #2403=CARTESIAN_POINT('',(17.93,-42.869,1.5)); #2404=CARTESIAN_POINT('',(17.93,-38.569,3.2)); #2405=CARTESIAN_POINT('',(17.93,-42.869,3.2)); #2406=CARTESIAN_POINT('',(17.93,-38.569,1.5)); #2407=CARTESIAN_POINT('Origin',(21.33,-38.569,1.5)); #2408=CARTESIAN_POINT('',(21.33,-38.569,1.5)); #2409=CARTESIAN_POINT('',(17.93,-38.569,1.5)); #2410=CARTESIAN_POINT('',(21.33,-38.569,3.2)); #2411=CARTESIAN_POINT('',(17.93,-38.569,3.2)); #2412=CARTESIAN_POINT('',(21.33,-38.569,1.5)); #2413=CARTESIAN_POINT('Origin',(21.33,-42.869,1.5)); #2414=CARTESIAN_POINT('',(21.33,-42.869,1.5)); #2415=CARTESIAN_POINT('',(21.33,-38.569,1.5)); #2416=CARTESIAN_POINT('',(21.33,-42.869,3.2)); #2417=CARTESIAN_POINT('',(21.33,-38.569,3.2)); #2418=CARTESIAN_POINT('',(21.33,-42.869,1.5)); #2419=CARTESIAN_POINT('Origin',(17.93,-42.869,1.5)); #2420=CARTESIAN_POINT('',(21.33,-42.869,1.5)); #2421=CARTESIAN_POINT('',(21.33,-42.869,3.2)); #2422=CARTESIAN_POINT('Origin',(19.63,-40.719,3.2)); #2423=CARTESIAN_POINT('Origin',(19.63,-40.719,1.5)); #2424=CARTESIAN_POINT('Origin',(19.63,-40.719,3.2)); #2425=CARTESIAN_POINT('',(20.73,-40.319,3.2)); #2426=CARTESIAN_POINT('',(18.53,-40.319,3.2)); #2427=CARTESIAN_POINT('Origin',(19.63,-40.319,3.2)); #2428=CARTESIAN_POINT('',(20.73,-41.119,3.2)); #2429=CARTESIAN_POINT('',(20.73,-39.219,3.2)); #2430=CARTESIAN_POINT('',(18.53,-41.119,3.2)); #2431=CARTESIAN_POINT('Origin',(19.63,-41.119,3.2)); #2432=CARTESIAN_POINT('',(18.53,-42.219,3.2)); #2433=CARTESIAN_POINT('Origin',(19.63,-40.319,3.2)); #2434=CARTESIAN_POINT('',(18.53,-40.319,4.2)); #2435=CARTESIAN_POINT('',(20.73,-40.319,4.2)); #2436=CARTESIAN_POINT('Origin',(19.63,-40.319,4.2)); #2437=CARTESIAN_POINT('',(20.73,-40.319,3.2)); #2438=CARTESIAN_POINT('',(18.53,-40.319,3.2)); #2439=CARTESIAN_POINT('Origin',(19.63,-40.719,4.2)); #2440=CARTESIAN_POINT('',(18.53,-41.119,4.2)); #2441=CARTESIAN_POINT('',(18.53,-42.219,4.2)); #2442=CARTESIAN_POINT('',(20.73,-41.119,4.2)); #2443=CARTESIAN_POINT('Origin',(19.63,-41.119,4.2)); #2444=CARTESIAN_POINT('',(20.73,-39.219,4.2)); #2445=CARTESIAN_POINT('Origin',(19.63,-41.119,3.2)); #2446=CARTESIAN_POINT('',(18.53,-41.119,3.2)); #2447=CARTESIAN_POINT('',(20.73,-41.119,3.2)); #2448=CARTESIAN_POINT('Origin',(18.53,-39.219,3.2)); #2449=CARTESIAN_POINT('Origin',(20.73,-42.219,3.2)); #2450=CARTESIAN_POINT('Origin',(1.43,-38.569,1.5)); #2451=CARTESIAN_POINT('',(1.43,-42.869,1.5)); #2452=CARTESIAN_POINT('',(1.43,-38.569,1.5)); #2453=CARTESIAN_POINT('',(1.43,-42.869,1.5)); #2454=CARTESIAN_POINT('',(1.43,-42.869,3.2)); #2455=CARTESIAN_POINT('',(1.43,-42.869,1.5)); #2456=CARTESIAN_POINT('',(1.43,-38.569,3.2)); #2457=CARTESIAN_POINT('',(1.43,-42.869,3.2)); #2458=CARTESIAN_POINT('',(1.43,-38.569,1.5)); #2459=CARTESIAN_POINT('Origin',(4.83,-38.569,1.5)); #2460=CARTESIAN_POINT('',(4.83,-38.569,1.5)); #2461=CARTESIAN_POINT('',(1.43,-38.569,1.5)); #2462=CARTESIAN_POINT('',(4.83,-38.569,3.2)); #2463=CARTESIAN_POINT('',(1.43,-38.569,3.2)); #2464=CARTESIAN_POINT('',(4.83,-38.569,1.5)); #2465=CARTESIAN_POINT('Origin',(4.83,-42.869,1.5)); #2466=CARTESIAN_POINT('',(4.83,-42.869,1.5)); #2467=CARTESIAN_POINT('',(4.83,-38.569,1.5)); #2468=CARTESIAN_POINT('',(4.83,-42.869,3.2)); #2469=CARTESIAN_POINT('',(4.83,-38.569,3.2)); #2470=CARTESIAN_POINT('',(4.83,-42.869,1.5)); #2471=CARTESIAN_POINT('Origin',(1.43,-42.869,1.5)); #2472=CARTESIAN_POINT('',(4.83,-42.869,1.5)); #2473=CARTESIAN_POINT('',(4.83,-42.869,3.2)); #2474=CARTESIAN_POINT('Origin',(3.13,-40.719,3.2)); #2475=CARTESIAN_POINT('Origin',(3.13,-40.719,1.5)); #2476=CARTESIAN_POINT('Origin',(3.13,-40.719,3.2)); #2477=CARTESIAN_POINT('',(4.23,-40.319,3.2)); #2478=CARTESIAN_POINT('',(2.03,-40.319,3.2)); #2479=CARTESIAN_POINT('Origin',(3.13,-40.319,3.2)); #2480=CARTESIAN_POINT('',(4.23,-41.119,3.2)); #2481=CARTESIAN_POINT('',(4.23,-39.219,3.2)); #2482=CARTESIAN_POINT('',(2.03,-41.119,3.2)); #2483=CARTESIAN_POINT('Origin',(3.13,-41.119,3.2)); #2484=CARTESIAN_POINT('',(2.03,-42.219,3.2)); #2485=CARTESIAN_POINT('Origin',(3.13,-40.319,3.2)); #2486=CARTESIAN_POINT('',(2.03,-40.319,4.2)); #2487=CARTESIAN_POINT('',(4.23,-40.319,4.2)); #2488=CARTESIAN_POINT('Origin',(3.13,-40.319,4.2)); #2489=CARTESIAN_POINT('',(4.23,-40.319,3.2)); #2490=CARTESIAN_POINT('',(2.03,-40.319,3.2)); #2491=CARTESIAN_POINT('Origin',(3.13,-40.719,4.2)); #2492=CARTESIAN_POINT('',(2.03,-41.119,4.2)); #2493=CARTESIAN_POINT('',(2.03,-42.219,4.2)); #2494=CARTESIAN_POINT('',(4.23,-41.119,4.2)); #2495=CARTESIAN_POINT('Origin',(3.13,-41.119,4.2)); #2496=CARTESIAN_POINT('',(4.23,-39.219,4.2)); #2497=CARTESIAN_POINT('Origin',(3.13,-41.119,3.2)); #2498=CARTESIAN_POINT('',(2.03,-41.119,3.2)); #2499=CARTESIAN_POINT('',(4.23,-41.119,3.2)); #2500=CARTESIAN_POINT('Origin',(2.03,-39.219,3.2)); #2501=CARTESIAN_POINT('Origin',(4.23,-42.219,3.2)); #2502=CARTESIAN_POINT('Origin',(15.93,-37.969,1.5)); #2503=CARTESIAN_POINT('',(8.5,-37.969,4.64)); #2504=CARTESIAN_POINT('',(8.5,-37.969,1.5)); #2505=CARTESIAN_POINT('Origin',(8.5,-37.969,3.07)); #2506=CARTESIAN_POINT('',(14.36,-37.969,4.64)); #2507=CARTESIAN_POINT('',(6.93,-37.969,4.64)); #2508=CARTESIAN_POINT('',(14.36,-37.969,1.5)); #2509=CARTESIAN_POINT('Origin',(14.36,-37.969,3.07)); #2510=CARTESIAN_POINT('',(6.93,-37.969,1.5)); #2511=CARTESIAN_POINT('Origin',(8.5,-39.869,3.07)); #2512=CARTESIAN_POINT('',(8.5,-45.569,1.5)); #2513=CARTESIAN_POINT('',(8.5,-45.569,4.64)); #2514=CARTESIAN_POINT('Origin',(8.5,-45.569,3.07)); #2515=CARTESIAN_POINT('',(8.5,-39.869,4.64)); #2516=CARTESIAN_POINT('',(8.5,-39.869,1.5)); #2517=CARTESIAN_POINT('Origin',(14.36,-43.669,3.07)); #2518=CARTESIAN_POINT('',(14.36,-45.569,4.64)); #2519=CARTESIAN_POINT('',(14.36,-45.569,1.5)); #2520=CARTESIAN_POINT('Origin',(14.36,-45.569,3.07)); #2521=CARTESIAN_POINT('',(14.36,-43.669,1.5)); #2522=CARTESIAN_POINT('',(14.36,-43.669,4.64)); #2523=CARTESIAN_POINT('Origin',(6.93,-45.569,1.5)); #2524=CARTESIAN_POINT('',(15.93,-45.569,1.5)); #2525=CARTESIAN_POINT('',(15.93,-45.569,4.64)); #2526=CARTESIAN_POINT('Origin',(11.43,-41.769,4.64)); #2527=CARTESIAN_POINT('Origin',(11.43,-41.769,1.5)); #2528=CARTESIAN_POINT('Origin',(7.43,-38.569,0.)); #2529=CARTESIAN_POINT('',(7.43,-33.869,0.)); #2530=CARTESIAN_POINT('',(7.43,-38.569,0.)); #2531=CARTESIAN_POINT('',(7.43,-33.869,0.)); #2532=CARTESIAN_POINT('',(7.43,-33.869,-3.5)); #2533=CARTESIAN_POINT('',(7.43,-33.869,0.)); #2534=CARTESIAN_POINT('',(7.43,-38.569,-3.5)); #2535=CARTESIAN_POINT('',(7.43,-33.869,-3.5)); #2536=CARTESIAN_POINT('',(7.43,-38.569,0.)); #2537=CARTESIAN_POINT('Origin',(15.43,-38.569,0.)); #2538=CARTESIAN_POINT('',(15.43,-38.569,0.)); #2539=CARTESIAN_POINT('',(7.43,-38.569,0.)); #2540=CARTESIAN_POINT('',(15.43,-38.569,-3.5)); #2541=CARTESIAN_POINT('',(7.43,-38.569,-3.5)); #2542=CARTESIAN_POINT('',(15.43,-38.569,0.)); #2543=CARTESIAN_POINT('Origin',(15.43,-33.869,0.)); #2544=CARTESIAN_POINT('',(15.43,-33.869,0.)); #2545=CARTESIAN_POINT('',(15.43,-38.569,0.)); #2546=CARTESIAN_POINT('',(15.43,-33.869,-3.5)); #2547=CARTESIAN_POINT('',(15.43,-38.569,-3.5)); #2548=CARTESIAN_POINT('',(15.43,-33.869,0.)); #2549=CARTESIAN_POINT('Origin',(7.43,-33.869,0.)); #2550=CARTESIAN_POINT('',(15.43,-33.869,0.)); #2551=CARTESIAN_POINT('',(15.43,-33.869,-3.5)); #2552=CARTESIAN_POINT('Origin',(11.43,-36.219,-3.5)); #2553=CARTESIAN_POINT('Origin',(11.43,-36.219,0.)); #2554=UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(0.01),#2558, 'DISTANCE_ACCURACY_VALUE', 'Maximum model space distance between geometric entities at asserted c onnectivities'); #2555=UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(0.01),#2558, 'DISTANCE_ACCURACY_VALUE', 'Maximum model space distance between geometric entities at asserted c onnectivities'); #2556=( GEOMETRIC_REPRESENTATION_CONTEXT(3) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#2554)) GLOBAL_UNIT_ASSIGNED_CONTEXT((#2558,#2560,#2561)) REPRESENTATION_CONTEXT('','3D') ); #2557=( GEOMETRIC_REPRESENTATION_CONTEXT(3) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#2555)) GLOBAL_UNIT_ASSIGNED_CONTEXT((#2558,#2560,#2561)) REPRESENTATION_CONTEXT('','3D') ); #2558=( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); #2559=( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT($,.METRE.) ); #2560=( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); #2561=( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); #2562=SHAPE_DEFINITION_REPRESENTATION(#2563,#2564); #2563=PRODUCT_DEFINITION_SHAPE('',$,#2566); #2564=SHAPE_REPRESENTATION('',(#1558),#2556); #2565=PRODUCT_DEFINITION_CONTEXT('part definition',#2570,'design'); #2566=PRODUCT_DEFINITION('TTGO_TDisplay','TTGO_TDisplay v9',#2567,#2565); #2567=PRODUCT_DEFINITION_FORMATION('',$,#2572); #2568=PRODUCT_RELATED_PRODUCT_CATEGORY('TTGO_TDisplay v9', 'TTGO_TDisplay v9',(#2572)); #2569=APPLICATION_PROTOCOL_DEFINITION('international standard', 'automotive_design',2009,#2570); #2570=APPLICATION_CONTEXT( 'Core Data for Automotive Mechanical Design Process'); #2571=PRODUCT_CONTEXT('part definition',#2570,'mechanical'); #2572=PRODUCT('TTGO_TDisplay','TTGO_TDisplay v9',$,(#2571)); #2573=PRESENTATION_STYLE_ASSIGNMENT((#2578)); #2574=PRESENTATION_STYLE_ASSIGNMENT((#2579)); #2575=PRESENTATION_STYLE_ASSIGNMENT((#2580)); #2576=PRESENTATION_STYLE_ASSIGNMENT((#2581)); #2577=PRESENTATION_STYLE_ASSIGNMENT((#2582)); #2578=SURFACE_STYLE_USAGE(.BOTH.,#2583); #2579=SURFACE_STYLE_USAGE(.BOTH.,#2584); #2580=SURFACE_STYLE_USAGE(.BOTH.,#2585); #2581=SURFACE_STYLE_USAGE(.BOTH.,#2586); #2582=SURFACE_STYLE_USAGE(.BOTH.,#2587); #2583=SURFACE_SIDE_STYLE('',(#2588)); #2584=SURFACE_SIDE_STYLE('',(#2589)); #2585=SURFACE_SIDE_STYLE('',(#2590)); #2586=SURFACE_SIDE_STYLE('',(#2591)); #2587=SURFACE_SIDE_STYLE('',(#2592)); #2588=SURFACE_STYLE_FILL_AREA(#2593); #2589=SURFACE_STYLE_FILL_AREA(#2594); #2590=SURFACE_STYLE_FILL_AREA(#2595); #2591=SURFACE_STYLE_FILL_AREA(#2596); #2592=SURFACE_STYLE_FILL_AREA(#2597); #2593=FILL_AREA_STYLE('Steel - Satin',(#2598)); #2594=FILL_AREA_STYLE('Powder Coat (Dark Grey)',(#2599)); #2595=FILL_AREA_STYLE('Paek (Beige)',(#2600)); #2596=FILL_AREA_STYLE('Powder Coat (Grey)',(#2601)); #2597=FILL_AREA_STYLE('ABS (White)',(#2602)); #2598=FILL_AREA_STYLE_COLOUR('Steel - Satin',#2603); #2599=FILL_AREA_STYLE_COLOUR('Powder Coat (Dark Grey)',#2604); #2600=FILL_AREA_STYLE_COLOUR('Paek (Beige)',#2605); #2601=FILL_AREA_STYLE_COLOUR('Powder Coat (Grey)',#2606); #2602=FILL_AREA_STYLE_COLOUR('ABS (White)',#2607); #2603=COLOUR_RGB('Steel - Satin',0.627450980392157,0.627450980392157,0.627450980392157); #2604=COLOUR_RGB('Powder Coat (Dark Grey)',0.349019607843137,0.349019607843137, 0.349019607843137); #2605=COLOUR_RGB('Paek (Beige)',0.898039215686275,0.792156862745098,0.619607843137255); #2606=COLOUR_RGB('Powder Coat (Grey)',0.701960784313725,0.701960784313725, 0.701960784313725); #2607=COLOUR_RGB('ABS (White)',0.964705882352941,0.964705882352941,0.952941176470588); ENDSEC; END-ISO-10303-21; ================================================ FILE: electronics/lib/ULN2003AModule.dcm ================================================ EESchema-DOCLIB Version 2.0 # #End Doc Library ================================================ FILE: electronics/lib/ULN2003AModule.lib ================================================ EESchema-LIBRARY Version 2.4 #encoding utf-8 # # ULN2003AModule # DEF ULN2003AModule U 0 40 Y Y 1 F N F0 "U" 100 50 50 H V C CNN F1 "ULN2003AModule" 250 -400 50 V V C CNN F2 "" 200 -250 50 H I C CNN F3 "" 200 -250 50 H I C CNN DRAW S 0 0 800 -800 0 1 0 f X EN_JMP1 EN_JMP1 900 -100 100 L 50 50 1 1 P X EN_JMP2 EN_JMP2 900 -200 100 L 50 50 1 1 P X GND GND 350 -900 100 U 50 50 1 1 P X IN1 IN1 -100 -100 100 R 50 50 1 1 P X IN2 IN2 -100 -200 100 R 50 50 1 1 P X IN3 IN3 -100 -300 100 R 50 50 1 1 P X IN4 IN4 -100 -400 100 R 50 50 1 1 P X IN5 IN5 -100 -500 100 R 50 50 1 1 P X IN6 IN6 -100 -600 100 R 50 50 1 1 P X IN7 IN7 -100 -700 100 R 50 50 1 1 P X VCC VCC 350 100 100 D 50 50 1 1 P ENDDRAW ENDDEF # # ULN2003AModule_No_EN # DEF ULN2003AModule_No_EN U 0 40 Y Y 1 F N F0 "U" 100 50 50 H V C CNN F1 "ULN2003AModule_No_EN" 250 -400 50 V V C CNN F2 "" 200 -250 50 H I C CNN F3 "" 200 -250 50 H I C CNN DRAW S 0 0 800 -800 0 1 0 f X GND GND 350 -900 100 U 50 50 1 1 P X IN1 IN1 -100 -100 100 R 50 50 1 1 P X IN2 IN2 -100 -200 100 R 50 50 1 1 P X IN3 IN3 -100 -300 100 R 50 50 1 1 P X IN4 IN4 -100 -400 100 R 50 50 1 1 P X IN5 IN5 -100 -500 100 R 50 50 1 1 P X IN6 IN6 -100 -600 100 R 50 50 1 1 P X IN7 IN7 -100 -700 100 R 50 50 1 1 P X VCC VCC 350 100 100 D 50 50 1 1 P ENDDRAW ENDDEF # #End Library ================================================ FILE: electronics/lib/ULN2003AModule.pretty/ULN2003AModule.kicad_mod ================================================ (module ULN2003AModule (layer F.Cu) (tedit 5FF54D69) (fp_text reference REF** (at 0 0.5) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value ULN2003AModule (at 0 -0.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text user ULN2003A (at 3.81 -10.16 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text user GND (at 10.795 -6.35) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text user EN (at 10.795 -12.7) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text user VCC (at 10.795 -8.89) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -2.54 -39.37) (end 17.78 -27.94) (layer B.CrtYd) (width 0.15)) (fp_line (start -2.54 -27.94) (end 17.78 -39.37) (layer B.CrtYd) (width 0.15)) (fp_line (start -2.54 -27.94) (end 17.78 -27.94) (layer B.CrtYd) (width 0.15)) (fp_line (start -2.54 1.27) (end 17.78 1.27) (layer B.CrtYd) (width 0.15)) (fp_line (start 17.78 1.27) (end 17.78 -39.37) (layer B.CrtYd) (width 0.15)) (fp_line (start 17.78 -39.37) (end -2.54 -39.37) (layer B.CrtYd) (width 0.15)) (fp_line (start -2.54 -39.37) (end -2.54 1.27) (layer B.CrtYd) (width 0.15)) (fp_text user IN1 (at 0 -3.175 90) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) (fp_text user IN2 (at 2.54 -3.175 90) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) (fp_text user IN3 (at 5.08 -3.175 90) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) (fp_text user IN4 (at 7.62 -3.175 90) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) (fp_text user IN5 (at 10.16 -3.175 90) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) (fp_text user IN6 (at 12.7 -3.175 90) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) (fp_text user IN7 (at 15.24 -3.175 90) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) (fp_text user GND (at 10.795 -6.35) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) (fp_text user VCC (at 10.795 -8.89) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) (fp_text user EN (at 10.795 -12.7) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) (fp_line (start 17.526 -16.51) (end 17.526 1.27) (layer B.SilkS) (width 0.15)) (fp_line (start -2.286 1.27) (end -2.286 -16.51) (layer B.SilkS) (width 0.15)) (fp_text user ULN2003A (at 3.81 -10.16 90) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) (fp_line (start 20.32 1.27) (end 20.32 3.175) (layer F.Fab) (width 0.15)) (fp_line (start 19.685 1.905) (end 20.32 1.27) (layer F.Fab) (width 0.15)) (fp_line (start 20.32 1.27) (end 20.955 1.905) (layer F.Fab) (width 0.15)) (fp_text user Next (at 20.32 3.81) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -2.286 1.27) (end 17.526 1.27) (layer B.SilkS) (width 0.15)) (fp_text user IN6 (at 12.7 -3.175 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text user IN3 (at 5.08 -3.175 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text user IN2 (at 2.54 -3.175 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text user IN7 (at 15.24 -3.175 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text user IN5 (at 10.16 -3.175 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text user IN1 (at 0 -3.175 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text user IN4 (at 7.62 -3.175 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (pad IN1 thru_hole circle (at 0 0) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad IN2 thru_hole circle (at 2.54 0) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad IN3 thru_hole circle (at 5.08 0) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad IN4 thru_hole circle (at 7.62 0) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad IN5 thru_hole circle (at 10.16 0) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad IN6 thru_hole circle (at 12.7 0) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad IN7 thru_hole circle (at 15.24 0) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad GND thru_hole circle (at 14.732 -6.1) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad VCC thru_hole circle (at 14.732 -8.64) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad EN_JMP1 thru_hole circle (at 14.732 -11.18) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad EN_JMP2 thru_hole circle (at 14.732 -13.72) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) ) ================================================ FILE: electronics/lib/ULN2003AModule.pretty/ULN2003AModule_No_EN.kicad_mod ================================================ (module ULN2003AModule_No_EN (layer F.Cu) (tedit 5FF6B0B6) (fp_text reference REF** (at 0 0.5) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value ULN2003AModule_No_EN (at 0 -0.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -2.286 1.27) (end 17.526 1.27) (layer B.SilkS) (width 0.15)) (fp_line (start 20.32 1.27) (end 20.955 1.905) (layer F.Fab) (width 0.15)) (fp_line (start 19.685 1.905) (end 20.32 1.27) (layer F.Fab) (width 0.15)) (fp_line (start 20.32 1.27) (end 20.32 3.175) (layer F.Fab) (width 0.15)) (fp_line (start -2.286 1.27) (end -2.286 -16.51) (layer B.SilkS) (width 0.15)) (fp_line (start 17.526 -16.51) (end 17.526 1.27) (layer B.SilkS) (width 0.15)) (fp_line (start -2.54 -39.37) (end -2.54 1.27) (layer B.CrtYd) (width 0.15)) (fp_line (start 17.78 -39.37) (end -2.54 -39.37) (layer B.CrtYd) (width 0.15)) (fp_line (start 17.78 1.27) (end 17.78 -39.37) (layer B.CrtYd) (width 0.15)) (fp_line (start -2.54 1.27) (end 17.78 1.27) (layer B.CrtYd) (width 0.15)) (fp_line (start -2.54 -27.94) (end 17.78 -27.94) (layer B.Fab) (width 0.15)) (fp_line (start -2.54 -27.94) (end 17.78 -39.37) (layer B.Fab) (width 0.15)) (fp_line (start -2.54 -39.37) (end 17.78 -27.94) (layer B.Fab) (width 0.15)) (fp_text user ULN2003A (at 3.81 -10.16 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text user GND (at 10.795 -6.35) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text user VCC (at 10.795 -8.89) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text user IN1 (at 0 -3.175 90) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) (fp_text user IN2 (at 2.54 -3.175 90) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) (fp_text user IN3 (at 5.08 -3.175 90) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) (fp_text user IN4 (at 7.62 -3.175 90) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) (fp_text user IN5 (at 10.16 -3.175 90) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) (fp_text user IN6 (at 12.7 -3.175 90) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) (fp_text user IN7 (at 15.24 -3.175 90) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) (fp_text user GND (at 10.795 -6.35) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) (fp_text user VCC (at 10.795 -8.89) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) (fp_text user ULN2003A (at 3.81 -10.16 90) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) (fp_text user Next (at 20.32 3.81) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text user IN6 (at 12.7 -3.175 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text user IN3 (at 5.08 -3.175 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text user IN2 (at 2.54 -3.175 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text user IN7 (at 15.24 -3.175 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text user IN5 (at 10.16 -3.175 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text user IN1 (at 0 -3.175 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text user IN4 (at 7.62 -3.175 90) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (pad IN1 thru_hole circle (at 0 0) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad IN2 thru_hole circle (at 2.54 0) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad IN3 thru_hole circle (at 5.08 0) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad IN4 thru_hole circle (at 7.62 0) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad IN5 thru_hole circle (at 10.16 0) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad IN6 thru_hole circle (at 12.7 0) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad IN7 thru_hole circle (at 15.24 0) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad GND thru_hole circle (at 14.732 -6.1) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad VCC thru_hole circle (at 14.732 -8.64) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) ) ================================================ FILE: electronics/lib/ULN2003AModule.pretty/ULN2003AModule_No_EN_No_FSilk.kicad_mod ================================================ (module ULN2003AModule_No_EN_No_FSilk (layer F.Cu) (tedit 5FFB4DD8) (fp_text reference REF** (at 0 0.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value ULN2003AModule_No_EN_No_FSilk (at 0 -0.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -2.286 1.27) (end 17.526 1.27) (layer B.SilkS) (width 0.15)) (fp_line (start 20.32 1.27) (end 20.955 1.905) (layer F.Fab) (width 0.15)) (fp_line (start 19.685 1.905) (end 20.32 1.27) (layer F.Fab) (width 0.15)) (fp_line (start 20.32 1.27) (end 20.32 3.175) (layer F.Fab) (width 0.15)) (fp_line (start -2.286 1.27) (end -2.286 -16.51) (layer B.SilkS) (width 0.15)) (fp_line (start 17.526 -16.51) (end 17.526 1.27) (layer B.SilkS) (width 0.15)) (fp_line (start -2.54 -39.37) (end -2.54 1.27) (layer B.CrtYd) (width 0.15)) (fp_line (start 17.78 -39.37) (end -2.54 -39.37) (layer B.CrtYd) (width 0.15)) (fp_line (start 17.78 1.27) (end 17.78 -39.37) (layer B.CrtYd) (width 0.15)) (fp_line (start -2.54 1.27) (end 17.78 1.27) (layer B.CrtYd) (width 0.15)) (fp_line (start -2.54 -27.94) (end 17.78 -27.94) (layer B.Fab) (width 0.15)) (fp_line (start -2.54 -27.94) (end 17.78 -39.37) (layer B.Fab) (width 0.15)) (fp_line (start -2.54 -39.37) (end 17.78 -27.94) (layer B.Fab) (width 0.15)) (fp_text user IN1 (at 0 -3.175 90) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) (fp_text user IN2 (at 2.54 -3.175 90) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) (fp_text user IN3 (at 5.08 -3.175 90) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) (fp_text user IN4 (at 7.62 -3.175 90) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) (fp_text user IN5 (at 10.16 -3.175 90) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) (fp_text user IN6 (at 12.7 -3.175 90) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) (fp_text user IN7 (at 15.24 -3.175 90) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) (fp_text user GND (at 10.795 -6.35) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) (fp_text user VCC (at 10.795 -8.89) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) (fp_text user Next (at 20.32 3.81) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad IN1 thru_hole circle (at 0 0) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad IN2 thru_hole circle (at 2.54 0) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad IN3 thru_hole circle (at 5.08 0) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad IN4 thru_hole circle (at 7.62 0) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad IN5 thru_hole circle (at 10.16 0) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad IN6 thru_hole circle (at 12.7 0) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad IN7 thru_hole circle (at 15.24 0) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad GND thru_hole circle (at 14.732 -6.1) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) (pad VCC thru_hole circle (at 14.732 -8.64) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask)) ) ================================================ FILE: electronics/lib/VN7003ALHTR.models/STMicroelectronics_-_VN7003ALHTR.step ================================================ ISO-10303-21; HEADER; /* Generated by software containing ST-Developer * from STEP Tools, Inc. (www.steptools.com) */ FILE_DESCRIPTION( /* description */ (''), /* implementation_level */ '2;1'); FILE_NAME( /* name */ 'C:\\Users\\karim\\Desktop\\1.stp', /* time_stamp */ '2019-03-04T20:54:56+05:00', /* author */ ('karim'), /* organization */ (''), /* preprocessor_version */ 'ST-DEVELOPER v15.6', /* originating_system */ 'Autodesk Inventor 2015', /* authorisation */ ''); FILE_SCHEMA (('AUTOMOTIVE_DESIGN { 1 0 10303 214 3 1 1 }')); ENDSEC; DATA; #10=MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION('',(#29,#30, #31,#32,#33,#34,#35,#36,#37,#38,#39,#40,#41,#42,#43,#44,#45,#46,#47,#48, #49,#50,#51,#52,#53,#54,#55,#56,#57,#58,#59,#60,#61,#62,#63,#64,#65,#66, #67,#68,#69,#70,#71,#72),#22552); #11=ITEM_DEFINED_TRANSFORMATION($,$,#12746,#13434); #12=ITEM_DEFINED_TRANSFORMATION($,$,#12869,#13435); #13=ITEM_DEFINED_TRANSFORMATION($,$,#13142,#13436); #14=( REPRESENTATION_RELATIONSHIP($,$,#22570,#22573) REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#11) SHAPE_REPRESENTATION_RELATIONSHIP() ); #15=( REPRESENTATION_RELATIONSHIP($,$,#22571,#22573) REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#12) SHAPE_REPRESENTATION_RELATIONSHIP() ); #16=( REPRESENTATION_RELATIONSHIP($,$,#22572,#22573) REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#13) SHAPE_REPRESENTATION_RELATIONSHIP() ); #17=CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#14,#22567); #18=CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#15,#22568); #19=CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#16,#22569); #20=NEXT_ASSEMBLY_USAGE_OCCURRENCE('1:1',$,$,#22578,#22575,$); #21=NEXT_ASSEMBLY_USAGE_OCCURRENCE('2:1',$,$,#22578,#22576,$); #22=NEXT_ASSEMBLY_USAGE_OCCURRENCE('STM Logo:1',$,$,#22578,#22577,$); #23=SHAPE_REPRESENTATION_RELATIONSHIP('SRR','None',#22570,#26); #24=SHAPE_REPRESENTATION_RELATIONSHIP('SRR','None',#22571,#27); #25=SHAPE_REPRESENTATION_RELATIONSHIP('SRR','None',#22572,#28); #26=ADVANCED_BREP_SHAPE_REPRESENTATION($,(#73),#22548); #27=ADVANCED_BREP_SHAPE_REPRESENTATION($,(#74,#75,#76,#77,#78,#79,#80,#81), #22549); #28=ADVANCED_BREP_SHAPE_REPRESENTATION($,(#82,#83,#84,#85,#86,#87,#88,#89, #90,#91,#92,#93,#94,#95,#96,#97,#98,#99,#100,#101,#102,#103,#104,#105,#106, #107,#108,#109,#110,#111,#112,#113,#114,#115,#116),#22550); #29=STYLED_ITEM('',(#22594),#73); #30=STYLED_ITEM('',(#22595),#74); #31=STYLED_ITEM('',(#22595),#75); #32=STYLED_ITEM('',(#22595),#76); #33=STYLED_ITEM('',(#22595),#77); #34=STYLED_ITEM('',(#22595),#78); #35=STYLED_ITEM('',(#22595),#79); #36=STYLED_ITEM('',(#22595),#80); #37=STYLED_ITEM('',(#22595),#81); #38=STYLED_ITEM('',(#22596),#82); #39=STYLED_ITEM('',(#22596),#83); #40=STYLED_ITEM('',(#22596),#84); #41=STYLED_ITEM('',(#22596),#85); #42=STYLED_ITEM('',(#22596),#86); #43=STYLED_ITEM('',(#22596),#87); #44=STYLED_ITEM('',(#22596),#88); #45=STYLED_ITEM('',(#22596),#89); #46=STYLED_ITEM('',(#22596),#90); #47=STYLED_ITEM('',(#22596),#91); #48=STYLED_ITEM('',(#22596),#92); #49=STYLED_ITEM('',(#22596),#93); #50=STYLED_ITEM('',(#22596),#94); #51=STYLED_ITEM('',(#22596),#95); #52=STYLED_ITEM('',(#22596),#96); #53=STYLED_ITEM('',(#22596),#97); #54=STYLED_ITEM('',(#22596),#98); #55=STYLED_ITEM('',(#22596),#99); #56=STYLED_ITEM('',(#22596),#100); #57=STYLED_ITEM('',(#22596),#101); #58=STYLED_ITEM('',(#22596),#102); #59=STYLED_ITEM('',(#22596),#103); #60=STYLED_ITEM('',(#22596),#104); #61=STYLED_ITEM('',(#22596),#105); #62=STYLED_ITEM('',(#22596),#106); #63=STYLED_ITEM('',(#22596),#107); #64=STYLED_ITEM('',(#22596),#108); #65=STYLED_ITEM('',(#22596),#109); #66=STYLED_ITEM('',(#22596),#110); #67=STYLED_ITEM('',(#22596),#111); #68=STYLED_ITEM('',(#22596),#112); #69=STYLED_ITEM('',(#22596),#113); #70=STYLED_ITEM('',(#22596),#114); #71=STYLED_ITEM('',(#22596),#115); #72=STYLED_ITEM('',(#22596),#116); #73=MANIFOLD_SOLID_BREP('Solid1',#12702); #74=MANIFOLD_SOLID_BREP('Solid1',#12703); #75=MANIFOLD_SOLID_BREP('Solid1',#12704); #76=MANIFOLD_SOLID_BREP('Solid1',#12705); #77=MANIFOLD_SOLID_BREP('Solid1',#12706); #78=MANIFOLD_SOLID_BREP('Solid1',#12707); #79=MANIFOLD_SOLID_BREP('Solid1',#12708); #80=MANIFOLD_SOLID_BREP('Solid1',#12709); #81=MANIFOLD_SOLID_BREP('Solid1',#12710); #82=MANIFOLD_SOLID_BREP('Solid2',#12711); #83=MANIFOLD_SOLID_BREP('Solid2',#12712); #84=MANIFOLD_SOLID_BREP('Solid2',#12713); #85=MANIFOLD_SOLID_BREP('Solid2',#12714); #86=MANIFOLD_SOLID_BREP('Solid2',#12715); #87=MANIFOLD_SOLID_BREP('Solid2',#12716); #88=MANIFOLD_SOLID_BREP('Solid2',#12717); #89=MANIFOLD_SOLID_BREP('Solid2',#12718); #90=MANIFOLD_SOLID_BREP('Solid2',#12719); #91=MANIFOLD_SOLID_BREP('Solid2',#12720); #92=MANIFOLD_SOLID_BREP('Solid2',#12721); #93=MANIFOLD_SOLID_BREP('Solid2',#12722); #94=MANIFOLD_SOLID_BREP('Solid2',#12723); #95=MANIFOLD_SOLID_BREP('Solid2',#12724); #96=MANIFOLD_SOLID_BREP('Solid2',#12725); #97=MANIFOLD_SOLID_BREP('Solid2',#12726); #98=MANIFOLD_SOLID_BREP('Solid2',#12727); #99=MANIFOLD_SOLID_BREP('Solid2',#12728); #100=MANIFOLD_SOLID_BREP('Solid2',#12729); #101=MANIFOLD_SOLID_BREP('Solid2',#12730); #102=MANIFOLD_SOLID_BREP('Solid2',#12731); #103=MANIFOLD_SOLID_BREP('Solid2',#12732); #104=MANIFOLD_SOLID_BREP('Solid2',#12733); #105=MANIFOLD_SOLID_BREP('Solid2',#12734); #106=MANIFOLD_SOLID_BREP('Solid2',#12735); #107=MANIFOLD_SOLID_BREP('Solid2',#12736); #108=MANIFOLD_SOLID_BREP('Solid2',#12737); #109=MANIFOLD_SOLID_BREP('Solid2',#12738); #110=MANIFOLD_SOLID_BREP('Solid2',#12739); #111=MANIFOLD_SOLID_BREP('Solid2',#12740); #112=MANIFOLD_SOLID_BREP('Solid2',#12741); #113=MANIFOLD_SOLID_BREP('Solid2',#12742); #114=MANIFOLD_SOLID_BREP('Solid2',#12743); #115=MANIFOLD_SOLID_BREP('Solid2',#12744); #116=MANIFOLD_SOLID_BREP('Solid2',#12745); #117=CONICAL_SURFACE('',#12858,0.684383502355557,4.99999999999999); #118=CONICAL_SURFACE('',#12859,0.684383502355557,4.99999999999999); #119=B_SPLINE_SURFACE_WITH_KNOTS('',3,3,((#16198,#16199,#16200,#16201), (#16202,#16203,#16204,#16205),(#16206,#16207,#16208,#16209),(#16210,#16211, #16212,#16213),(#16214,#16215,#16216,#16217)),.UNSPECIFIED.,.F.,.F.,.F., (4,1,4),(4,4),(0.,0.571428571428571,1.),(-1.42885329926431,-1.29264491203025), .UNSPECIFIED.); #120=B_SPLINE_SURFACE_WITH_KNOTS('',3,3,((#16238,#16239,#16240,#16241,#16242), (#16243,#16244,#16245,#16246,#16247),(#16248,#16249,#16250,#16251,#16252), (#16253,#16254,#16255,#16256,#16257),(#16258,#16259,#16260,#16261,#16262)), .UNSPECIFIED.,.F.,.F.,.F.,(4,1,4),(4,1,4),(0.,0.571428571428571,1.),(1.38777878078143E-17, 0.0128037824702674,0.029875492430624),.UNSPECIFIED.); #121=B_SPLINE_SURFACE_WITH_KNOTS('',3,3,((#16285,#16286,#16287,#16288,#16289), (#16290,#16291,#16292,#16293,#16294),(#16295,#16296,#16297,#16298,#16299), (#16300,#16301,#16302,#16303,#16304),(#16305,#16306,#16307,#16308,#16309)), .UNSPECIFIED.,.F.,.F.,.F.,(4,1,4),(4,1,4),(0.,0.571428571428571,1.),(0., 0.0170717133781805,0.0298754984118158),.UNSPECIFIED.); #122=B_SPLINE_SURFACE_WITH_KNOTS('',3,3,((#16352,#16353,#16354,#16355,#16356), (#16357,#16358,#16359,#16360,#16361),(#16362,#16363,#16364,#16365,#16366), (#16367,#16368,#16369,#16370,#16371),(#16372,#16373,#16374,#16375,#16376)), .UNSPECIFIED.,.F.,.F.,.F.,(4,1,4),(4,1,4),(0.,0.571428571428571,1.),(0., 0.0128037850336353,0.0298754984118158),.UNSPECIFIED.); #123=B_SPLINE_SURFACE_WITH_KNOTS('',3,3,((#16404,#16405,#16406,#16407), (#16408,#16409,#16410,#16411),(#16412,#16413,#16414,#16415),(#16416,#16417, #16418,#16419),(#16420,#16421,#16422,#16423)),.UNSPECIFIED.,.F.,.F.,.F., (4,1,4),(4,4),(0.,0.571428571428571,1.),(-1.26489831464136,-1.07025554523587), .UNSPECIFIED.); #124=B_SPLINE_SURFACE_WITH_KNOTS('',3,3,((#16432,#16433,#16434,#16435,#16436), (#16437,#16438,#16439,#16440,#16441),(#16442,#16443,#16444,#16445,#16446), (#16447,#16448,#16449,#16450,#16451),(#16452,#16453,#16454,#16455,#16456)), .UNSPECIFIED.,.F.,.F.,.F.,(4,1,4),(4,1,4),(0.,0.571428571428571,1.),(4.71009604905275E-17, 0.0170717099603565,0.0298754924306239),.UNSPECIFIED.); #125=B_SPLINE_SURFACE_WITH_KNOTS('',3,3,((#16479,#16480,#16481,#16482), (#16483,#16484,#16485,#16486),(#16487,#16488,#16489,#16490),(#16491,#16492, #16493,#16494),(#16495,#16496,#16497,#16498)),.UNSPECIFIED.,.F.,.F.,.F., (4,1,4),(4,4),(0.,0.571428571428571,1.),(1.07025554523587,1.26489831464389), .UNSPECIFIED.); #126=B_SPLINE_SURFACE_WITH_KNOTS('',3,3,((#16517,#16518,#16519,#16520), (#16521,#16522,#16523,#16524),(#16525,#16526,#16527,#16528),(#16529,#16530, #16531,#16532),(#16533,#16534,#16535,#16536)),.UNSPECIFIED.,.F.,.F.,.F., (4,1,4),(4,4),(0.,0.571428571428571,1.),(1.07025554523587,1.26489831464389), .UNSPECIFIED.); #127=B_SPLINE_SURFACE_WITH_KNOTS('',3,3,((#16563,#16564,#16565,#16566), (#16567,#16568,#16569,#16570),(#16571,#16572,#16573,#16574),(#16575,#16576, #16577,#16578),(#16579,#16580,#16581,#16582)),.UNSPECIFIED.,.F.,.F.,.F., (4,1,4),(4,4),(0.,0.571428571428571,1.),(-1.26489831464136,-1.07025554523587), .UNSPECIFIED.); #128=B_SPLINE_SURFACE_WITH_KNOTS('',3,3,((#16602,#16603,#16604,#16605), (#16606,#16607,#16608,#16609),(#16610,#16611,#16612,#16613),(#16614,#16615, #16616,#16617),(#16618,#16619,#16620,#16621)),.UNSPECIFIED.,.F.,.F.,.F., (4,1,4),(4,4),(0.,0.571428571428571,1.),(-1.42885329926431,-1.07522320048626), .UNSPECIFIED.); #129=B_SPLINE_SURFACE_WITH_KNOTS('',3,3,((#16662,#16663,#16664,#16665), (#16666,#16667,#16668,#16669),(#16670,#16671,#16672,#16673),(#16674,#16675, #16676,#16677),(#16678,#16679,#16680,#16681)),.UNSPECIFIED.,.F.,.F.,.F., (4,1,4),(4,4),(0.,0.571428571428571,1.),(1.07522320048626,1.42885329926431), .UNSPECIFIED.); #130=B_SPLINE_SURFACE_WITH_KNOTS('',3,3,((#16684,#16685,#16686,#16687), (#16688,#16689,#16690,#16691),(#16692,#16693,#16694,#16695),(#16696,#16697, #16698,#16699),(#16700,#16701,#16702,#16703)),.UNSPECIFIED.,.F.,.F.,.F., (4,1,4),(4,4),(0.,0.571428571428571,1.),(1.29264491203025,1.42885329926431), .UNSPECIFIED.); #131=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#17821,#17822),(#17823,#17824), (#17825,#17826),(#17827,#17828)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #132=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#17843,#17844),(#17845,#17846), (#17847,#17848),(#17849,#17850)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #133=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#17862,#17863),(#17864,#17865), (#17866,#17867),(#17868,#17869)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #134=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#17881,#17882),(#17883,#17884), (#17885,#17886),(#17887,#17888)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #135=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#17912,#17913),(#17914,#17915), (#17916,#17917),(#17918,#17919)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #136=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#17931,#17932),(#17933,#17934), (#17935,#17936),(#17937,#17938)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #137=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#17950,#17951),(#17952,#17953), (#17954,#17955),(#17956,#17957)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #138=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#17969,#17970),(#17971,#17972), (#17973,#17974),(#17975,#17976)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #139=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#17988,#17989),(#17990,#17991), (#17992,#17993),(#17994,#17995)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #140=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#18019,#18020),(#18021,#18022), (#18023,#18024),(#18025,#18026)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #141=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#18038,#18039),(#18040,#18041), (#18042,#18043),(#18044,#18045)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #142=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#18057,#18058),(#18059,#18060), (#18061,#18062),(#18063,#18064)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #143=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#18101,#18102),(#18103,#18104), (#18105,#18106),(#18107,#18108)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #144=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#18123,#18124),(#18125,#18126), (#18127,#18128),(#18129,#18130)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #145=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#18172,#18173),(#18174,#18175), (#18176,#18177),(#18178,#18179)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #146=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#18191,#18192),(#18193,#18194), (#18195,#18196),(#18197,#18198)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #147=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#18221,#18222),(#18223,#18224), (#18225,#18226),(#18227,#18228)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #148=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#18243,#18244),(#18245,#18246), (#18247,#18248),(#18249,#18250)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #149=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#18262,#18263),(#18264,#18265), (#18266,#18267),(#18268,#18269)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #150=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#18281,#18282),(#18283,#18284), (#18285,#18286),(#18287,#18288)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #151=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#18312,#18313),(#18314,#18315), (#18316,#18317),(#18318,#18319)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #152=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#18331,#18332),(#18333,#18334), (#18335,#18336),(#18337,#18338)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #153=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#18350,#18351),(#18352,#18353), (#18354,#18355),(#18356,#18357)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #154=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#18369,#18370),(#18371,#18372), (#18373,#18374),(#18375,#18376)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #155=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#18388,#18389),(#18390,#18391), (#18392,#18393),(#18394,#18395)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #156=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#18419,#18420),(#18421,#18422), (#18423,#18424),(#18425,#18426)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #157=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#18438,#18439),(#18440,#18441), (#18442,#18443),(#18444,#18445)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #158=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#18457,#18458),(#18459,#18460), (#18461,#18462),(#18463,#18464)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #159=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#18484,#18485),(#18486,#18487), (#18488,#18489),(#18490,#18491)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (0.,1.,2.),(0.,0.01),.UNSPECIFIED.); #160=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#18503,#18504),(#18505,#18506), (#18507,#18508),(#18509,#18510)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (0.,1.,2.),(0.,0.01),.UNSPECIFIED.); #161=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#18522,#18523),(#18524,#18525), (#18526,#18527),(#18528,#18529)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (0.,1.,2.),(0.,0.01),.UNSPECIFIED.); #162=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#18541,#18542),(#18543,#18544), (#18545,#18546),(#18547,#18548)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (0.,1.,2.),(0.,0.01),.UNSPECIFIED.); #163=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#18557,#18558),(#18559,#18560), (#18561,#18562),(#18563,#18564)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #164=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#18579,#18580),(#18581,#18582), (#18583,#18584),(#18585,#18586)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #165=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#18598,#18599),(#18600,#18601), (#18602,#18603),(#18604,#18605)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #166=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#18629,#18630),(#18631,#18632), (#18633,#18634),(#18635,#18636)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #167=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#18648,#18649),(#18650,#18651), (#18652,#18653),(#18654,#18655)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #168=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#18667,#18668),(#18669,#18670), (#18671,#18672),(#18673,#18674)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #169=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#18698,#18699),(#18700,#18701), (#18702,#18703),(#18704,#18705)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #170=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#18717,#18718),(#18719,#18720), (#18721,#18722),(#18723,#18724)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #171=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#18736,#18737),(#18738,#18739), (#18740,#18741),(#18742,#18743)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #172=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#18754,#18755),(#18756,#18757), (#18758,#18759),(#18760,#18761)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #173=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#18776,#18777),(#18778,#18779), (#18780,#18781),(#18782,#18783)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #174=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#18825,#18826),(#18827,#18828), (#18829,#18830),(#18831,#18832)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #175=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#18844,#18845),(#18846,#18847), (#18848,#18849),(#18850,#18851)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #176=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#18995,#18996),(#18997,#18998), (#18999,#19000),(#19001,#19002)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #177=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#19014,#19015),(#19016,#19017), (#19018,#19019),(#19020,#19021)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #178=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#19033,#19034),(#19035,#19036), (#19037,#19038),(#19039,#19040)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #179=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#19052,#19053),(#19054,#19055), (#19056,#19057),(#19058,#19059)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #180=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#19071,#19072),(#19073,#19074), (#19075,#19076),(#19077,#19078)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #181=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#19090,#19091),(#19092,#19093), (#19094,#19095),(#19096,#19097)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #182=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#19109,#19110),(#19111,#19112), (#19113,#19114),(#19115,#19116)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #183=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#19128,#19129),(#19130,#19131), (#19132,#19133),(#19134,#19135)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #184=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#19159,#19160),(#19161,#19162), (#19163,#19164),(#19165,#19166)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #185=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#19178,#19179),(#19180,#19181), (#19182,#19183),(#19184,#19185)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #186=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#19197,#19198),(#19199,#19200), (#19201,#19202),(#19203,#19204)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #187=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#19216,#19217),(#19218,#19219), (#19220,#19221),(#19222,#19223)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #188=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#19235,#19236),(#19237,#19238), (#19239,#19240),(#19241,#19242)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #189=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#19254,#19255),(#19256,#19257), (#19258,#19259),(#19260,#19261)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #190=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#19273,#19274),(#19275,#19276), (#19277,#19278),(#19279,#19280)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #191=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#19292,#19293),(#19294,#19295), (#19296,#19297),(#19298,#19299)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #192=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#19310,#19311),(#19312,#19313), (#19314,#19315),(#19316,#19317)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (0.,1.,2.),(0.,0.01),.UNSPECIFIED.); #193=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#19332,#19333),(#19334,#19335), (#19336,#19337),(#19338,#19339)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (0.,1.,2.),(0.,0.01),.UNSPECIFIED.); #194=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#19369,#19370),(#19371,#19372), (#19373,#19374),(#19375,#19376)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (0.,1.,2.),(0.,0.01),.UNSPECIFIED.); #195=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#19388,#19389),(#19390,#19391), (#19392,#19393),(#19394,#19395)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (0.,1.,2.),(0.,0.01),.UNSPECIFIED.); #196=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#19443,#19444),(#19445,#19446), (#19447,#19448),(#19449,#19450)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #197=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#19462,#19463),(#19464,#19465), (#19466,#19467),(#19468,#19469)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #198=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#19481,#19482),(#19483,#19484), (#19485,#19486),(#19487,#19488)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #199=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#19585,#19586),(#19587,#19588), (#19589,#19590),(#19591,#19592)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #200=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#19619,#19620),(#19621,#19622), (#19623,#19624),(#19625,#19626)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #201=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#19638,#19639),(#19640,#19641), (#19642,#19643),(#19644,#19645)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #202=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#19657,#19658),(#19659,#19660), (#19661,#19662),(#19663,#19664)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #203=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#19676,#19677),(#19678,#19679), (#19680,#19681),(#19682,#19683)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #204=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#19701,#19702),(#19703,#19704), (#19705,#19706),(#19707,#19708)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #205=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#19720,#19721),(#19722,#19723), (#19724,#19725),(#19726,#19727)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #206=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#19739,#19740),(#19741,#19742), (#19743,#19744),(#19745,#19746)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #207=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#19758,#19759),(#19760,#19761), (#19762,#19763),(#19764,#19765)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #208=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#19777,#19778),(#19779,#19780), (#19781,#19782),(#19783,#19784)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #209=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#19808,#19809),(#19810,#19811), (#19812,#19813),(#19814,#19815)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #210=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#19827,#19828),(#19829,#19830), (#19831,#19832),(#19833,#19834)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #211=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#19846,#19847),(#19848,#19849), (#19850,#19851),(#19852,#19853)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #212=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#19865,#19866),(#19867,#19868), (#19869,#19870),(#19871,#19872)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #213=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#19884,#19885),(#19886,#19887), (#19888,#19889),(#19890,#19891)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #214=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#19921,#19922),(#19923,#19924), (#19925,#19926),(#19927,#19928)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #215=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#19940,#19941),(#19942,#19943), (#19944,#19945),(#19946,#19947)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #216=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#19959,#19960),(#19961,#19962), (#19963,#19964),(#19965,#19966)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #217=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#19978,#19979),(#19980,#19981), (#19982,#19983),(#19984,#19985)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #218=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#19996,#19997),(#19998,#19999), (#20000,#20001),(#20002,#20003)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (0.,1.,2.),(0.,0.01),.UNSPECIFIED.); #219=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#20018,#20019),(#20020,#20021), (#20022,#20023),(#20024,#20025)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (0.,1.,2.),(0.,0.01),.UNSPECIFIED.); #220=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#20037,#20038),(#20039,#20040), (#20041,#20042),(#20043,#20044)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (0.,1.,2.),(0.,0.01),.UNSPECIFIED.); #221=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#20056,#20057),(#20058,#20059), (#20060,#20061),(#20062,#20063)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (0.,1.,2.),(0.,0.01),.UNSPECIFIED.); #222=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#20075,#20076),(#20077,#20078), (#20079,#20080),(#20081,#20082)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (0.,1.,2.),(0.,0.01),.UNSPECIFIED.); #223=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#20094,#20095),(#20096,#20097), (#20098,#20099),(#20100,#20101)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (0.,1.,2.),(0.,0.01),.UNSPECIFIED.); #224=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#20113,#20114),(#20115,#20116), (#20117,#20118),(#20119,#20120)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (0.,1.,2.),(0.,0.01),.UNSPECIFIED.); #225=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#20132,#20133),(#20134,#20135), (#20136,#20137),(#20138,#20139)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (0.,1.,2.),(0.,0.01),.UNSPECIFIED.); #226=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#20148,#20149),(#20150,#20151), (#20152,#20153),(#20154,#20155)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #227=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#20170,#20171),(#20172,#20173), (#20174,#20175),(#20176,#20177)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #228=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#20189,#20190),(#20191,#20192), (#20193,#20194),(#20195,#20196)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #229=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#20208,#20209),(#20210,#20211), (#20212,#20213),(#20214,#20215)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #230=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#20226,#20227),(#20228,#20229), (#20230,#20231),(#20232,#20233)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (0.,1.,2.),(0.,0.01),.UNSPECIFIED.); #231=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#20248,#20249),(#20250,#20251), (#20252,#20253),(#20254,#20255)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (0.,1.,2.),(0.,0.01),.UNSPECIFIED.); #232=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#20267,#20268),(#20269,#20270), (#20271,#20272),(#20273,#20274)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (0.,1.,2.),(0.,0.01),.UNSPECIFIED.); #233=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#20286,#20287),(#20288,#20289), (#20290,#20291),(#20292,#20293)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (0.,1.,2.),(0.,0.01),.UNSPECIFIED.); #234=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#20305,#20306),(#20307,#20308), (#20309,#20310),(#20311,#20312)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (0.,1.,2.),(0.,0.01),.UNSPECIFIED.); #235=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#20324,#20325),(#20326,#20327), (#20328,#20329),(#20330,#20331)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (0.,1.,2.),(0.,0.01),.UNSPECIFIED.); #236=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#20343,#20344),(#20345,#20346), (#20347,#20348),(#20349,#20350)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (0.,1.,2.),(0.,0.01),.UNSPECIFIED.); #237=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#20362,#20363),(#20364,#20365), (#20366,#20367),(#20368,#20369)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (0.,1.,2.),(0.,0.01),.UNSPECIFIED.); #238=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#20378,#20379),(#20380,#20381), (#20382,#20383),(#20384,#20385)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #239=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#20400,#20401),(#20402,#20403), (#20404,#20405),(#20406,#20407)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #240=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#20419,#20420),(#20421,#20422), (#20423,#20424),(#20425,#20426)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #241=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#20438,#20439),(#20440,#20441), (#20442,#20443),(#20444,#20445)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #242=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#20977,#20978),(#20979,#20980), (#20981,#20982),(#20983,#20984)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #243=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#20999,#21000),(#21001,#21002), (#21003,#21004),(#21005,#21006)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #244=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#21018,#21019),(#21020,#21021), (#21022,#21023),(#21024,#21025)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #245=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#21037,#21038),(#21039,#21040), (#21041,#21042),(#21043,#21044)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #246=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#21068,#21069),(#21070,#21071), (#21072,#21073),(#21074,#21075)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #247=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#21087,#21088),(#21089,#21090), (#21091,#21092),(#21093,#21094)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #248=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#21106,#21107),(#21108,#21109), (#21110,#21111),(#21112,#21113)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #249=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#21125,#21126),(#21127,#21128), (#21129,#21130),(#21131,#21132)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #250=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#21144,#21145),(#21146,#21147), (#21148,#21149),(#21150,#21151)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #251=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#21175,#21176),(#21177,#21178), (#21179,#21180),(#21181,#21182)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #252=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#21194,#21195),(#21196,#21197), (#21198,#21199),(#21200,#21201)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #253=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#21213,#21214),(#21215,#21216), (#21217,#21218),(#21219,#21220)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #254=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#21231,#21232),(#21233,#21234), (#21235,#21236),(#21237,#21238)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (0.,1.,2.),(0.,0.01),.UNSPECIFIED.); #255=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#21253,#21254),(#21255,#21256), (#21257,#21258),(#21259,#21260)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (0.,1.,2.),(0.,0.01),.UNSPECIFIED.); #256=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#21272,#21273),(#21274,#21275), (#21276,#21277),(#21278,#21279)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (0.,1.,2.),(0.,0.01),.UNSPECIFIED.); #257=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#21291,#21292),(#21293,#21294), (#21295,#21296),(#21297,#21298)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (0.,1.,2.),(0.,0.01),.UNSPECIFIED.); #258=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#21307,#21308),(#21309,#21310), (#21311,#21312),(#21313,#21314)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #259=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#21329,#21330),(#21331,#21332), (#21333,#21334),(#21335,#21336)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #260=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#21348,#21349),(#21350,#21351), (#21352,#21353),(#21354,#21355)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #261=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#21367,#21368),(#21369,#21370), (#21371,#21372),(#21373,#21374)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #262=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#21394,#21395),(#21396,#21397), (#21398,#21399),(#21400,#21401)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (0.,1.,2.),(0.,0.01),.UNSPECIFIED.); #263=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#21413,#21414),(#21415,#21416), (#21417,#21418),(#21419,#21420)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (0.,1.,2.),(0.,0.01),.UNSPECIFIED.); #264=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#21432,#21433),(#21434,#21435), (#21436,#21437),(#21438,#21439)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (0.,1.,2.),(0.,0.01),.UNSPECIFIED.); #265=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#21451,#21452),(#21453,#21454), (#21455,#21456),(#21457,#21458)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (0.,1.,2.),(0.,0.01),.UNSPECIFIED.); #266=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#21467,#21468),(#21469,#21470), (#21471,#21472),(#21473,#21474)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #267=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#21489,#21490),(#21491,#21492), (#21493,#21494),(#21495,#21496)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #268=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#21508,#21509),(#21510,#21511), (#21512,#21513),(#21514,#21515)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #269=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#21539,#21540),(#21541,#21542), (#21543,#21544),(#21545,#21546)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #270=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#21558,#21559),(#21560,#21561), (#21562,#21563),(#21564,#21565)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #271=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#21577,#21578),(#21579,#21580), (#21581,#21582),(#21583,#21584)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #272=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#21608,#21609),(#21610,#21611), (#21612,#21613),(#21614,#21615)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #273=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#21627,#21628),(#21629,#21630), (#21631,#21632),(#21633,#21634)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #274=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#21646,#21647),(#21648,#21649), (#21650,#21651),(#21652,#21653)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #275=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#21759,#21760),(#21761,#21762), (#21763,#21764),(#21765,#21766)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #276=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#21778,#21779),(#21780,#21781), (#21782,#21783),(#21784,#21785)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #277=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#21797,#21798),(#21799,#21800), (#21801,#21802),(#21803,#21804)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #278=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#21828,#21829),(#21830,#21831), (#21832,#21833),(#21834,#21835)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #279=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#21847,#21848),(#21849,#21850), (#21851,#21852),(#21853,#21854)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #280=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#21865,#21866),(#21867,#21868), (#21869,#21870),(#21871,#21872)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (0.,1.,2.),(0.,0.01),.UNSPECIFIED.); #281=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#21887,#21888),(#21889,#21890), (#21891,#21892),(#21893,#21894)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (0.,1.,2.),(0.,0.01),.UNSPECIFIED.); #282=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#21906,#21907),(#21908,#21909), (#21910,#21911),(#21912,#21913)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (0.,1.,2.),(0.,0.01),.UNSPECIFIED.); #283=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#21925,#21926),(#21927,#21928), (#21929,#21930),(#21931,#21932)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (0.,1.,2.),(0.,0.01),.UNSPECIFIED.); #284=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#21941,#21942),(#21943,#21944), (#21945,#21946),(#21947,#21948)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #285=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#21963,#21964),(#21965,#21966), (#21967,#21968),(#21969,#21970)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #286=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#21982,#21983),(#21984,#21985), (#21986,#21987),(#21988,#21989)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #287=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#22001,#22002),(#22003,#22004), (#22005,#22006),(#22007,#22008)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #288=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#22028,#22029),(#22030,#22031), (#22032,#22033),(#22034,#22035)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #289=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#22047,#22048),(#22049,#22050), (#22051,#22052),(#22053,#22054)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #290=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#22066,#22067),(#22068,#22069), (#22070,#22071),(#22072,#22073)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #291=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#22115,#22116),(#22117,#22118), (#22119,#22120),(#22121,#22122)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #292=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#22134,#22135),(#22136,#22137), (#22138,#22139),(#22140,#22141)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #293=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#22205,#22206),(#22207,#22208), (#22209,#22210),(#22211,#22212)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #294=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#22224,#22225),(#22226,#22227), (#22228,#22229),(#22230,#22231)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #295=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#22243,#22244),(#22245,#22246), (#22247,#22248),(#22249,#22250)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #296=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#22262,#22263),(#22264,#22265), (#22266,#22267),(#22268,#22269)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #297=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#22281,#22282),(#22283,#22284), (#22285,#22286),(#22287,#22288)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #298=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#22300,#22301),(#22302,#22303), (#22304,#22305),(#22306,#22307)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #299=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#22319,#22320),(#22321,#22322), (#22323,#22324),(#22325,#22326)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #300=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#22338,#22339),(#22340,#22341), (#22342,#22343),(#22344,#22345)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #301=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#22357,#22358),(#22359,#22360), (#22361,#22362),(#22363,#22364)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #302=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#22388,#22389),(#22390,#22391), (#22392,#22393),(#22394,#22395)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #303=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#22407,#22408),(#22409,#22410), (#22411,#22412),(#22413,#22414)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #304=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#22426,#22427),(#22428,#22429), (#22430,#22431),(#22432,#22433)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #305=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#22445,#22446),(#22447,#22448), (#22449,#22450),(#22451,#22452)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #306=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#22464,#22465),(#22466,#22467), (#22468,#22469),(#22470,#22471)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #307=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#22483,#22484),(#22485,#22486), (#22487,#22488),(#22489,#22490)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #308=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#22502,#22503),(#22504,#22505), (#22506,#22507),(#22508,#22509)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #309=B_SPLINE_SURFACE_WITH_KNOTS('',2,1,((#22521,#22522),(#22523,#22524), (#22525,#22526),(#22527,#22528)),.UNSPECIFIED.,.F.,.F.,.F.,(3,1,3),(2,2), (-2.,-1.,0.),(0.,0.01),.UNSPECIFIED.); #310=SPHERICAL_SURFACE('',#12766,0.0999999999999997); #311=SPHERICAL_SURFACE('',#12770,0.1); #312=SPHERICAL_SURFACE('',#12779,0.1); #313=SPHERICAL_SURFACE('',#12785,0.1); #314=SPHERICAL_SURFACE('',#12794,0.1); #315=SPHERICAL_SURFACE('',#12801,0.0999999999999997); #316=SPHERICAL_SURFACE('',#12806,0.0999999999999997); #317=SPHERICAL_SURFACE('',#12812,0.1); #318=SPHERICAL_SURFACE('',#12816,0.1); #319=SPHERICAL_SURFACE('',#12820,0.100000000000001); #320=ELLIPSE('',#12760,0.72545493510088,0.1); #321=ELLIPSE('',#12761,0.366292198042286,0.1); #322=ELLIPSE('',#12763,0.366292198042286,0.1); #323=ELLIPSE('',#12764,0.72545493510088,0.1); #324=ELLIPSE('',#12775,5.02970757402942,0.7); #325=ELLIPSE('',#12776,5.01676771240695,0.6); #326=ELLIPSE('',#12834,5.01676771240694,0.6); #327=ELLIPSE('',#12835,5.0297075740294,0.7); #328=ELLIPSE('',#12838,5.0297075740294,0.7); #329=ELLIPSE('',#12839,5.01676771240694,0.6); #330=ELLIPSE('',#12840,5.01676771240695,0.6); #331=ELLIPSE('',#12841,5.02970757402942,0.7); #332=ELLIPSE('',#12845,0.366292198042286,0.1); #333=ELLIPSE('',#12848,0.366292198042286,0.1); #334=ELLIPSE('',#12853,4.31117792059663,0.6); #335=ELLIPSE('',#12854,4.31117792059663,0.6); #336=B_SPLINE_CURVE_WITH_KNOTS('',3,(#16121,#16122,#16123,#16124,#16125, #16126,#16127,#16128),.UNSPECIFIED.,.F.,.F.,(4,2,2,4),(0.0203373187917535, 0.0211497406272281,0.0259030584688038,0.0281711838771347),.UNSPECIFIED.); #337=B_SPLINE_CURVE_WITH_KNOTS('',3,(#16141,#16142,#16143,#16144,#16145, #16146,#16147,#16148),.UNSPECIFIED.,.F.,.F.,(4,2,2,4),(0.139815766434986, 0.142083891843316,0.146837209684892,0.147649631520367),.UNSPECIFIED.); #338=B_SPLINE_CURVE_WITH_KNOTS('',3,(#16178,#16179,#16180,#16181,#16182, #16183,#16184,#16185,#16186,#16187,#16188,#16189,#16190,#16191,#16192,#16193), .UNSPECIFIED.,.F.,.F.,(4,3,3,3,3,4),(-0.016430827464912,-0.0117801103508742, -0.00866412120887618,-0.00748389198679717,-0.00317469889771548,0.), .UNSPECIFIED.); #339=B_SPLINE_CURVE_WITH_KNOTS('',3,(#16194,#16195,#16196,#16197), .UNSPECIFIED.,.F.,.F.,(4,4),(0.0448411189577462,0.0462273326896607), .UNSPECIFIED.); #340=B_SPLINE_CURVE_WITH_KNOTS('',3,(#16221,#16222,#16223,#16224,#16225, #16226,#16227,#16228,#16229,#16230,#16231,#16232,#16233,#16234,#16235,#16236), .UNSPECIFIED.,.F.,.F.,(4,3,3,3,3,4),(0.,0.00387315717237224,0.00615913274091647, 0.00777456240737339,0.0110476644018774,0.0143886369320977), .UNSPECIFIED.); #341=B_SPLINE_CURVE_WITH_KNOTS('',3,(#16265,#16266,#16267,#16268,#16269), .UNSPECIFIED.,.F.,.F.,(4,1,4),(1.38777878078143E-17,0.0128037824702674, 0.029875492430624),.UNSPECIFIED.); #342=B_SPLINE_CURVE_WITH_KNOTS('',3,(#16273,#16274,#16275,#16276,#16277), .UNSPECIFIED.,.F.,.F.,(4,1,4),(-0.029875492430624,-0.0128037824702674, -1.38777878078143E-17),.UNSPECIFIED.); #343=B_SPLINE_CURVE_WITH_KNOTS('',3,(#16312,#16313,#16314,#16315,#16316), .UNSPECIFIED.,.F.,.F.,(4,1,4),(0.,0.0170717133781805,0.0298754984118158), .UNSPECIFIED.); #344=B_SPLINE_CURVE_WITH_KNOTS('',3,(#16320,#16321,#16322,#16323,#16324), .UNSPECIFIED.,.F.,.F.,(4,1,4),(-0.0298754984118158,-0.0170717133781805, 0.),.UNSPECIFIED.); #345=B_SPLINE_CURVE_WITH_KNOTS('',3,(#16336,#16337,#16338,#16339), .UNSPECIFIED.,.F.,.F.,(4,4),(0.0306389311049971,0.0319792740044237), .UNSPECIFIED.); #346=B_SPLINE_CURVE_WITH_KNOTS('',3,(#16340,#16341,#16342,#16343,#16344, #16345,#16346,#16347,#16348,#16349,#16350,#16351),.UNSPECIFIED.,.F.,.F., (4,2,2,2,2,4),(-0.0157191643635658,-0.0155554818059245,-0.0113146510607257, -0.00717842475807843,-0.0033562420744386,0.),.UNSPECIFIED.); #347=B_SPLINE_CURVE_WITH_KNOTS('',3,(#16379,#16380,#16381,#16382,#16383), .UNSPECIFIED.,.F.,.F.,(4,1,4),(0.,0.0128037850336353,0.0298754984118158), .UNSPECIFIED.); #348=B_SPLINE_CURVE_WITH_KNOTS('',3,(#16387,#16388,#16389,#16390,#16391), .UNSPECIFIED.,.F.,.F.,(4,1,4),(-0.0298754984118158,-0.0128037850336353, 0.),.UNSPECIFIED.); #349=B_SPLINE_CURVE_WITH_KNOTS('',3,(#16424,#16425,#16426,#16427), .UNSPECIFIED.,.F.,.F.,(4,4),(1.07025554523587,1.26489831464136), .UNSPECIFIED.); #350=B_SPLINE_CURVE_WITH_KNOTS('',3,(#16428,#16429,#16430,#16431), .UNSPECIFIED.,.F.,.F.,(4,4),(-1.26489831451392,-1.07025554523587), .UNSPECIFIED.); #351=B_SPLINE_CURVE_WITH_KNOTS('',3,(#16459,#16460,#16461,#16462,#16463), .UNSPECIFIED.,.F.,.F.,(4,1,4),(4.71009604905275E-17,0.0170717099603565, 0.0298754924306239),.UNSPECIFIED.); #352=B_SPLINE_CURVE_WITH_KNOTS('',3,(#16467,#16468,#16469,#16470,#16471), .UNSPECIFIED.,.F.,.F.,(4,1,4),(-0.0298754924306239,-0.0170717099603565, -4.71009604905275E-17),.UNSPECIFIED.); #353=B_SPLINE_CURVE_WITH_KNOTS('',3,(#16499,#16500,#16501,#16502), .UNSPECIFIED.,.F.,.F.,(4,4),(-1.26489831450197,-1.0702555452709), .UNSPECIFIED.); #354=B_SPLINE_CURVE_WITH_KNOTS('',3,(#16503,#16504,#16505,#16506), .UNSPECIFIED.,.F.,.F.,(4,4),(1.07025554523587,1.26489831464389), .UNSPECIFIED.); #355=B_SPLINE_CURVE_WITH_KNOTS('',3,(#16537,#16538,#16539,#16540), .UNSPECIFIED.,.F.,.F.,(4,4),(-1.26489831450196,-1.0702555452709), .UNSPECIFIED.); #356=B_SPLINE_CURVE_WITH_KNOTS('',3,(#16541,#16542,#16543,#16544), .UNSPECIFIED.,.F.,.F.,(4,4),(1.07025554523587,1.26489831464389), .UNSPECIFIED.); #357=B_SPLINE_CURVE_WITH_KNOTS('',3,(#16583,#16584,#16585,#16586), .UNSPECIFIED.,.F.,.F.,(4,4),(1.07025554523587,1.26489831464136), .UNSPECIFIED.); #358=B_SPLINE_CURVE_WITH_KNOTS('',3,(#16587,#16588,#16589,#16590), .UNSPECIFIED.,.F.,.F.,(4,4),(-1.26489831451392,-1.07025554523587), .UNSPECIFIED.); #359=B_SPLINE_CURVE_WITH_KNOTS('',3,(#16626,#16627,#16628,#16629,#16630, #16631,#16632,#16633,#16634,#16635,#16636,#16637,#16638,#16639,#16640,#16641), .UNSPECIFIED.,.F.,.F.,(4,3,3,3,3,4),(-0.0143270636143194,-0.0104525179738642, -0.00816572291777556,-0.00654971414427998,-0.00327543879237158,6.67314258039373E-5), .UNSPECIFIED.); #360=B_SPLINE_CURVE_WITH_KNOTS('',3,(#16646,#16647,#16648,#16649,#16650, #16651,#16652,#16653,#16654,#16655,#16656,#16657),.UNSPECIFIED.,.F.,.F., (4,2,2,2,2,4),(-0.000164555665845065,0.,0.00426345199556639,0.00842174157222377, 0.0122643123723972,0.0156384571637369),.UNSPECIFIED.); #361=B_SPLINE_CURVE_WITH_KNOTS('',3,(#16658,#16659,#16660,#16661), .UNSPECIFIED.,.F.,.F.,(4,4),(0.0293968321065337,0.0307371750059603), .UNSPECIFIED.); #362=B_SPLINE_CURVE_WITH_KNOTS('',3,(#16708,#16709,#16710,#16711,#16712, #16713,#16714,#16715,#16716,#16717,#16718,#16719,#16720,#16721,#16722,#16723), .UNSPECIFIED.,.F.,.F.,(4,3,3,3,3,4),(-8.78876577566351E-5,0.00460487707205088, 0.00774903819505161,0.00893993799193307,0.013288090942654,0.0164914926223624), .UNSPECIFIED.); #363=B_SPLINE_CURVE_WITH_KNOTS('',3,(#16730,#16731,#16732,#16733), .UNSPECIFIED.,.F.,.F.,(4,4),(0.0156657679387797,0.0170519816706942), .UNSPECIFIED.); #364=B_SPLINE_CURVE_WITH_KNOTS('',2,(#17831,#17832,#17833,#17834), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #365=B_SPLINE_CURVE_WITH_KNOTS('',2,(#17838,#17839,#17840,#17841), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #366=B_SPLINE_CURVE_WITH_KNOTS('',2,(#17852,#17853,#17854,#17855), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #367=B_SPLINE_CURVE_WITH_KNOTS('',2,(#17857,#17858,#17859,#17860), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #368=B_SPLINE_CURVE_WITH_KNOTS('',2,(#17871,#17872,#17873,#17874), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #369=B_SPLINE_CURVE_WITH_KNOTS('',2,(#17876,#17877,#17878,#17879), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #370=B_SPLINE_CURVE_WITH_KNOTS('',2,(#17890,#17891,#17892,#17893), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #371=B_SPLINE_CURVE_WITH_KNOTS('',2,(#17895,#17896,#17897,#17898), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #372=B_SPLINE_CURVE_WITH_KNOTS('',2,(#17921,#17922,#17923,#17924), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #373=B_SPLINE_CURVE_WITH_KNOTS('',2,(#17926,#17927,#17928,#17929), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #374=B_SPLINE_CURVE_WITH_KNOTS('',2,(#17940,#17941,#17942,#17943), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #375=B_SPLINE_CURVE_WITH_KNOTS('',2,(#17945,#17946,#17947,#17948), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #376=B_SPLINE_CURVE_WITH_KNOTS('',2,(#17959,#17960,#17961,#17962), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #377=B_SPLINE_CURVE_WITH_KNOTS('',2,(#17964,#17965,#17966,#17967), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #378=B_SPLINE_CURVE_WITH_KNOTS('',2,(#17978,#17979,#17980,#17981), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #379=B_SPLINE_CURVE_WITH_KNOTS('',2,(#17983,#17984,#17985,#17986), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #380=B_SPLINE_CURVE_WITH_KNOTS('',2,(#17997,#17998,#17999,#18000), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #381=B_SPLINE_CURVE_WITH_KNOTS('',2,(#18002,#18003,#18004,#18005), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #382=B_SPLINE_CURVE_WITH_KNOTS('',2,(#18028,#18029,#18030,#18031), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #383=B_SPLINE_CURVE_WITH_KNOTS('',2,(#18033,#18034,#18035,#18036), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #384=B_SPLINE_CURVE_WITH_KNOTS('',2,(#18047,#18048,#18049,#18050), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #385=B_SPLINE_CURVE_WITH_KNOTS('',2,(#18052,#18053,#18054,#18055), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #386=B_SPLINE_CURVE_WITH_KNOTS('',2,(#18065,#18066,#18067,#18068), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #387=B_SPLINE_CURVE_WITH_KNOTS('',2,(#18069,#18070,#18071,#18072), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #388=B_SPLINE_CURVE_WITH_KNOTS('',2,(#18111,#18112,#18113,#18114), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #389=B_SPLINE_CURVE_WITH_KNOTS('',2,(#18118,#18119,#18120,#18121), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #390=B_SPLINE_CURVE_WITH_KNOTS('',2,(#18132,#18133,#18134,#18135), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #391=B_SPLINE_CURVE_WITH_KNOTS('',2,(#18137,#18138,#18139,#18140), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #392=B_SPLINE_CURVE_WITH_KNOTS('',2,(#18181,#18182,#18183,#18184), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #393=B_SPLINE_CURVE_WITH_KNOTS('',2,(#18186,#18187,#18188,#18189), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #394=B_SPLINE_CURVE_WITH_KNOTS('',2,(#18200,#18201,#18202,#18203), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #395=B_SPLINE_CURVE_WITH_KNOTS('',2,(#18205,#18206,#18207,#18208), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #396=B_SPLINE_CURVE_WITH_KNOTS('',2,(#18231,#18232,#18233,#18234), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #397=B_SPLINE_CURVE_WITH_KNOTS('',2,(#18238,#18239,#18240,#18241), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #398=B_SPLINE_CURVE_WITH_KNOTS('',2,(#18252,#18253,#18254,#18255), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #399=B_SPLINE_CURVE_WITH_KNOTS('',2,(#18257,#18258,#18259,#18260), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #400=B_SPLINE_CURVE_WITH_KNOTS('',2,(#18271,#18272,#18273,#18274), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #401=B_SPLINE_CURVE_WITH_KNOTS('',2,(#18276,#18277,#18278,#18279), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #402=B_SPLINE_CURVE_WITH_KNOTS('',2,(#18290,#18291,#18292,#18293), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #403=B_SPLINE_CURVE_WITH_KNOTS('',2,(#18295,#18296,#18297,#18298), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #404=B_SPLINE_CURVE_WITH_KNOTS('',2,(#18321,#18322,#18323,#18324), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #405=B_SPLINE_CURVE_WITH_KNOTS('',2,(#18326,#18327,#18328,#18329), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #406=B_SPLINE_CURVE_WITH_KNOTS('',2,(#18340,#18341,#18342,#18343), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #407=B_SPLINE_CURVE_WITH_KNOTS('',2,(#18345,#18346,#18347,#18348), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #408=B_SPLINE_CURVE_WITH_KNOTS('',2,(#18359,#18360,#18361,#18362), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #409=B_SPLINE_CURVE_WITH_KNOTS('',2,(#18364,#18365,#18366,#18367), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #410=B_SPLINE_CURVE_WITH_KNOTS('',2,(#18378,#18379,#18380,#18381), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #411=B_SPLINE_CURVE_WITH_KNOTS('',2,(#18383,#18384,#18385,#18386), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #412=B_SPLINE_CURVE_WITH_KNOTS('',2,(#18397,#18398,#18399,#18400), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #413=B_SPLINE_CURVE_WITH_KNOTS('',2,(#18402,#18403,#18404,#18405), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #414=B_SPLINE_CURVE_WITH_KNOTS('',2,(#18428,#18429,#18430,#18431), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #415=B_SPLINE_CURVE_WITH_KNOTS('',2,(#18433,#18434,#18435,#18436), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #416=B_SPLINE_CURVE_WITH_KNOTS('',2,(#18447,#18448,#18449,#18450), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #417=B_SPLINE_CURVE_WITH_KNOTS('',2,(#18452,#18453,#18454,#18455), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #418=B_SPLINE_CURVE_WITH_KNOTS('',2,(#18465,#18466,#18467,#18468), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #419=B_SPLINE_CURVE_WITH_KNOTS('',2,(#18469,#18470,#18471,#18472), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #420=B_SPLINE_CURVE_WITH_KNOTS('',2,(#18493,#18494,#18495,#18496), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #421=B_SPLINE_CURVE_WITH_KNOTS('',2,(#18499,#18500,#18501,#18502), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #422=B_SPLINE_CURVE_WITH_KNOTS('',2,(#18512,#18513,#18514,#18515), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #423=B_SPLINE_CURVE_WITH_KNOTS('',2,(#18518,#18519,#18520,#18521), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #424=B_SPLINE_CURVE_WITH_KNOTS('',2,(#18531,#18532,#18533,#18534), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #425=B_SPLINE_CURVE_WITH_KNOTS('',2,(#18537,#18538,#18539,#18540), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #426=B_SPLINE_CURVE_WITH_KNOTS('',2,(#18549,#18550,#18551,#18552), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #427=B_SPLINE_CURVE_WITH_KNOTS('',2,(#18553,#18554,#18555,#18556), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #428=B_SPLINE_CURVE_WITH_KNOTS('',2,(#18567,#18568,#18569,#18570), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #429=B_SPLINE_CURVE_WITH_KNOTS('',2,(#18574,#18575,#18576,#18577), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #430=B_SPLINE_CURVE_WITH_KNOTS('',2,(#18588,#18589,#18590,#18591), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #431=B_SPLINE_CURVE_WITH_KNOTS('',2,(#18593,#18594,#18595,#18596), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #432=B_SPLINE_CURVE_WITH_KNOTS('',2,(#18607,#18608,#18609,#18610), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #433=B_SPLINE_CURVE_WITH_KNOTS('',2,(#18612,#18613,#18614,#18615), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #434=B_SPLINE_CURVE_WITH_KNOTS('',2,(#18638,#18639,#18640,#18641), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #435=B_SPLINE_CURVE_WITH_KNOTS('',2,(#18643,#18644,#18645,#18646), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #436=B_SPLINE_CURVE_WITH_KNOTS('',2,(#18657,#18658,#18659,#18660), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #437=B_SPLINE_CURVE_WITH_KNOTS('',2,(#18662,#18663,#18664,#18665), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #438=B_SPLINE_CURVE_WITH_KNOTS('',2,(#18676,#18677,#18678,#18679), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #439=B_SPLINE_CURVE_WITH_KNOTS('',2,(#18681,#18682,#18683,#18684), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #440=B_SPLINE_CURVE_WITH_KNOTS('',2,(#18707,#18708,#18709,#18710), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #441=B_SPLINE_CURVE_WITH_KNOTS('',2,(#18712,#18713,#18714,#18715), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #442=B_SPLINE_CURVE_WITH_KNOTS('',2,(#18726,#18727,#18728,#18729), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #443=B_SPLINE_CURVE_WITH_KNOTS('',2,(#18731,#18732,#18733,#18734), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #444=B_SPLINE_CURVE_WITH_KNOTS('',2,(#18744,#18745,#18746,#18747), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #445=B_SPLINE_CURVE_WITH_KNOTS('',2,(#18748,#18749,#18750,#18751), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #446=B_SPLINE_CURVE_WITH_KNOTS('',2,(#18764,#18765,#18766,#18767), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #447=B_SPLINE_CURVE_WITH_KNOTS('',2,(#18771,#18772,#18773,#18774), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #448=B_SPLINE_CURVE_WITH_KNOTS('',2,(#18785,#18786,#18787,#18788), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #449=B_SPLINE_CURVE_WITH_KNOTS('',2,(#18790,#18791,#18792,#18793), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #450=B_SPLINE_CURVE_WITH_KNOTS('',2,(#18834,#18835,#18836,#18837), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #451=B_SPLINE_CURVE_WITH_KNOTS('',2,(#18839,#18840,#18841,#18842), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #452=B_SPLINE_CURVE_WITH_KNOTS('',2,(#18853,#18854,#18855,#18856), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #453=B_SPLINE_CURVE_WITH_KNOTS('',2,(#18858,#18859,#18860,#18861), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #454=B_SPLINE_CURVE_WITH_KNOTS('',2,(#19004,#19005,#19006,#19007), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #455=B_SPLINE_CURVE_WITH_KNOTS('',2,(#19009,#19010,#19011,#19012), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #456=B_SPLINE_CURVE_WITH_KNOTS('',2,(#19023,#19024,#19025,#19026), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #457=B_SPLINE_CURVE_WITH_KNOTS('',2,(#19028,#19029,#19030,#19031), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #458=B_SPLINE_CURVE_WITH_KNOTS('',2,(#19042,#19043,#19044,#19045), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #459=B_SPLINE_CURVE_WITH_KNOTS('',2,(#19047,#19048,#19049,#19050), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #460=B_SPLINE_CURVE_WITH_KNOTS('',2,(#19061,#19062,#19063,#19064), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #461=B_SPLINE_CURVE_WITH_KNOTS('',2,(#19066,#19067,#19068,#19069), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #462=B_SPLINE_CURVE_WITH_KNOTS('',2,(#19080,#19081,#19082,#19083), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #463=B_SPLINE_CURVE_WITH_KNOTS('',2,(#19085,#19086,#19087,#19088), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #464=B_SPLINE_CURVE_WITH_KNOTS('',2,(#19099,#19100,#19101,#19102), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #465=B_SPLINE_CURVE_WITH_KNOTS('',2,(#19104,#19105,#19106,#19107), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #466=B_SPLINE_CURVE_WITH_KNOTS('',2,(#19118,#19119,#19120,#19121), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #467=B_SPLINE_CURVE_WITH_KNOTS('',2,(#19123,#19124,#19125,#19126), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #468=B_SPLINE_CURVE_WITH_KNOTS('',2,(#19137,#19138,#19139,#19140), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #469=B_SPLINE_CURVE_WITH_KNOTS('',2,(#19142,#19143,#19144,#19145), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #470=B_SPLINE_CURVE_WITH_KNOTS('',2,(#19168,#19169,#19170,#19171), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #471=B_SPLINE_CURVE_WITH_KNOTS('',2,(#19173,#19174,#19175,#19176), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #472=B_SPLINE_CURVE_WITH_KNOTS('',2,(#19187,#19188,#19189,#19190), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #473=B_SPLINE_CURVE_WITH_KNOTS('',2,(#19192,#19193,#19194,#19195), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #474=B_SPLINE_CURVE_WITH_KNOTS('',2,(#19206,#19207,#19208,#19209), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #475=B_SPLINE_CURVE_WITH_KNOTS('',2,(#19211,#19212,#19213,#19214), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #476=B_SPLINE_CURVE_WITH_KNOTS('',2,(#19225,#19226,#19227,#19228), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #477=B_SPLINE_CURVE_WITH_KNOTS('',2,(#19230,#19231,#19232,#19233), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #478=B_SPLINE_CURVE_WITH_KNOTS('',2,(#19244,#19245,#19246,#19247), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #479=B_SPLINE_CURVE_WITH_KNOTS('',2,(#19249,#19250,#19251,#19252), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #480=B_SPLINE_CURVE_WITH_KNOTS('',2,(#19263,#19264,#19265,#19266), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #481=B_SPLINE_CURVE_WITH_KNOTS('',2,(#19268,#19269,#19270,#19271), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #482=B_SPLINE_CURVE_WITH_KNOTS('',2,(#19282,#19283,#19284,#19285), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #483=B_SPLINE_CURVE_WITH_KNOTS('',2,(#19287,#19288,#19289,#19290), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #484=B_SPLINE_CURVE_WITH_KNOTS('',2,(#19300,#19301,#19302,#19303), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #485=B_SPLINE_CURVE_WITH_KNOTS('',2,(#19304,#19305,#19306,#19307), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #486=B_SPLINE_CURVE_WITH_KNOTS('',2,(#19320,#19321,#19322,#19323), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #487=B_SPLINE_CURVE_WITH_KNOTS('',2,(#19327,#19328,#19329,#19330), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #488=B_SPLINE_CURVE_WITH_KNOTS('',2,(#19341,#19342,#19343,#19344), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #489=B_SPLINE_CURVE_WITH_KNOTS('',2,(#19347,#19348,#19349,#19350), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #490=B_SPLINE_CURVE_WITH_KNOTS('',2,(#19378,#19379,#19380,#19381), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #491=B_SPLINE_CURVE_WITH_KNOTS('',2,(#19384,#19385,#19386,#19387), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #492=B_SPLINE_CURVE_WITH_KNOTS('',2,(#19396,#19397,#19398,#19399), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #493=B_SPLINE_CURVE_WITH_KNOTS('',2,(#19400,#19401,#19402,#19403), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #494=B_SPLINE_CURVE_WITH_KNOTS('',2,(#19452,#19453,#19454,#19455), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #495=B_SPLINE_CURVE_WITH_KNOTS('',2,(#19457,#19458,#19459,#19460), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #496=B_SPLINE_CURVE_WITH_KNOTS('',2,(#19471,#19472,#19473,#19474), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #497=B_SPLINE_CURVE_WITH_KNOTS('',2,(#19476,#19477,#19478,#19479), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #498=B_SPLINE_CURVE_WITH_KNOTS('',2,(#19490,#19491,#19492,#19493), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #499=B_SPLINE_CURVE_WITH_KNOTS('',2,(#19495,#19496,#19497,#19498), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #500=B_SPLINE_CURVE_WITH_KNOTS('',2,(#19595,#19596,#19597,#19598), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #501=B_SPLINE_CURVE_WITH_KNOTS('',2,(#19602,#19603,#19604,#19605), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #502=B_SPLINE_CURVE_WITH_KNOTS('',2,(#19628,#19629,#19630,#19631), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #503=B_SPLINE_CURVE_WITH_KNOTS('',2,(#19633,#19634,#19635,#19636), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #504=B_SPLINE_CURVE_WITH_KNOTS('',2,(#19647,#19648,#19649,#19650), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #505=B_SPLINE_CURVE_WITH_KNOTS('',2,(#19652,#19653,#19654,#19655), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #506=B_SPLINE_CURVE_WITH_KNOTS('',2,(#19666,#19667,#19668,#19669), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #507=B_SPLINE_CURVE_WITH_KNOTS('',2,(#19671,#19672,#19673,#19674), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #508=B_SPLINE_CURVE_WITH_KNOTS('',2,(#19685,#19686,#19687,#19688), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #509=B_SPLINE_CURVE_WITH_KNOTS('',2,(#19690,#19691,#19692,#19693), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #510=B_SPLINE_CURVE_WITH_KNOTS('',2,(#19710,#19711,#19712,#19713), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #511=B_SPLINE_CURVE_WITH_KNOTS('',2,(#19715,#19716,#19717,#19718), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #512=B_SPLINE_CURVE_WITH_KNOTS('',2,(#19729,#19730,#19731,#19732), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #513=B_SPLINE_CURVE_WITH_KNOTS('',2,(#19734,#19735,#19736,#19737), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #514=B_SPLINE_CURVE_WITH_KNOTS('',2,(#19748,#19749,#19750,#19751), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #515=B_SPLINE_CURVE_WITH_KNOTS('',2,(#19753,#19754,#19755,#19756), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #516=B_SPLINE_CURVE_WITH_KNOTS('',2,(#19767,#19768,#19769,#19770), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #517=B_SPLINE_CURVE_WITH_KNOTS('',2,(#19772,#19773,#19774,#19775), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #518=B_SPLINE_CURVE_WITH_KNOTS('',2,(#19786,#19787,#19788,#19789), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #519=B_SPLINE_CURVE_WITH_KNOTS('',2,(#19791,#19792,#19793,#19794), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #520=B_SPLINE_CURVE_WITH_KNOTS('',2,(#19817,#19818,#19819,#19820), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #521=B_SPLINE_CURVE_WITH_KNOTS('',2,(#19822,#19823,#19824,#19825), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #522=B_SPLINE_CURVE_WITH_KNOTS('',2,(#19836,#19837,#19838,#19839), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #523=B_SPLINE_CURVE_WITH_KNOTS('',2,(#19841,#19842,#19843,#19844), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #524=B_SPLINE_CURVE_WITH_KNOTS('',2,(#19855,#19856,#19857,#19858), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #525=B_SPLINE_CURVE_WITH_KNOTS('',2,(#19860,#19861,#19862,#19863), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #526=B_SPLINE_CURVE_WITH_KNOTS('',2,(#19874,#19875,#19876,#19877), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #527=B_SPLINE_CURVE_WITH_KNOTS('',2,(#19879,#19880,#19881,#19882), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #528=B_SPLINE_CURVE_WITH_KNOTS('',2,(#19893,#19894,#19895,#19896), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #529=B_SPLINE_CURVE_WITH_KNOTS('',2,(#19898,#19899,#19900,#19901), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #530=B_SPLINE_CURVE_WITH_KNOTS('',2,(#19930,#19931,#19932,#19933), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #531=B_SPLINE_CURVE_WITH_KNOTS('',2,(#19935,#19936,#19937,#19938), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #532=B_SPLINE_CURVE_WITH_KNOTS('',2,(#19949,#19950,#19951,#19952), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #533=B_SPLINE_CURVE_WITH_KNOTS('',2,(#19954,#19955,#19956,#19957), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #534=B_SPLINE_CURVE_WITH_KNOTS('',2,(#19968,#19969,#19970,#19971), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #535=B_SPLINE_CURVE_WITH_KNOTS('',2,(#19973,#19974,#19975,#19976), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #536=B_SPLINE_CURVE_WITH_KNOTS('',2,(#19986,#19987,#19988,#19989), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #537=B_SPLINE_CURVE_WITH_KNOTS('',2,(#19990,#19991,#19992,#19993), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #538=B_SPLINE_CURVE_WITH_KNOTS('',2,(#20006,#20007,#20008,#20009), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #539=B_SPLINE_CURVE_WITH_KNOTS('',2,(#20013,#20014,#20015,#20016), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #540=B_SPLINE_CURVE_WITH_KNOTS('',2,(#20027,#20028,#20029,#20030), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #541=B_SPLINE_CURVE_WITH_KNOTS('',2,(#20033,#20034,#20035,#20036), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #542=B_SPLINE_CURVE_WITH_KNOTS('',2,(#20046,#20047,#20048,#20049), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #543=B_SPLINE_CURVE_WITH_KNOTS('',2,(#20052,#20053,#20054,#20055), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #544=B_SPLINE_CURVE_WITH_KNOTS('',2,(#20065,#20066,#20067,#20068), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #545=B_SPLINE_CURVE_WITH_KNOTS('',2,(#20071,#20072,#20073,#20074), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #546=B_SPLINE_CURVE_WITH_KNOTS('',2,(#20084,#20085,#20086,#20087), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #547=B_SPLINE_CURVE_WITH_KNOTS('',2,(#20090,#20091,#20092,#20093), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #548=B_SPLINE_CURVE_WITH_KNOTS('',2,(#20103,#20104,#20105,#20106), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #549=B_SPLINE_CURVE_WITH_KNOTS('',2,(#20109,#20110,#20111,#20112), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #550=B_SPLINE_CURVE_WITH_KNOTS('',2,(#20122,#20123,#20124,#20125), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #551=B_SPLINE_CURVE_WITH_KNOTS('',2,(#20128,#20129,#20130,#20131), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #552=B_SPLINE_CURVE_WITH_KNOTS('',2,(#20140,#20141,#20142,#20143), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #553=B_SPLINE_CURVE_WITH_KNOTS('',2,(#20144,#20145,#20146,#20147), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #554=B_SPLINE_CURVE_WITH_KNOTS('',2,(#20158,#20159,#20160,#20161), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #555=B_SPLINE_CURVE_WITH_KNOTS('',2,(#20165,#20166,#20167,#20168), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #556=B_SPLINE_CURVE_WITH_KNOTS('',2,(#20179,#20180,#20181,#20182), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #557=B_SPLINE_CURVE_WITH_KNOTS('',2,(#20184,#20185,#20186,#20187), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #558=B_SPLINE_CURVE_WITH_KNOTS('',2,(#20198,#20199,#20200,#20201), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #559=B_SPLINE_CURVE_WITH_KNOTS('',2,(#20203,#20204,#20205,#20206), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #560=B_SPLINE_CURVE_WITH_KNOTS('',2,(#20216,#20217,#20218,#20219), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #561=B_SPLINE_CURVE_WITH_KNOTS('',2,(#20220,#20221,#20222,#20223), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #562=B_SPLINE_CURVE_WITH_KNOTS('',2,(#20236,#20237,#20238,#20239), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #563=B_SPLINE_CURVE_WITH_KNOTS('',2,(#20243,#20244,#20245,#20246), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #564=B_SPLINE_CURVE_WITH_KNOTS('',2,(#20257,#20258,#20259,#20260), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #565=B_SPLINE_CURVE_WITH_KNOTS('',2,(#20263,#20264,#20265,#20266), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #566=B_SPLINE_CURVE_WITH_KNOTS('',2,(#20276,#20277,#20278,#20279), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #567=B_SPLINE_CURVE_WITH_KNOTS('',2,(#20282,#20283,#20284,#20285), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #568=B_SPLINE_CURVE_WITH_KNOTS('',2,(#20295,#20296,#20297,#20298), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #569=B_SPLINE_CURVE_WITH_KNOTS('',2,(#20301,#20302,#20303,#20304), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #570=B_SPLINE_CURVE_WITH_KNOTS('',2,(#20314,#20315,#20316,#20317), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #571=B_SPLINE_CURVE_WITH_KNOTS('',2,(#20320,#20321,#20322,#20323), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #572=B_SPLINE_CURVE_WITH_KNOTS('',2,(#20333,#20334,#20335,#20336), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #573=B_SPLINE_CURVE_WITH_KNOTS('',2,(#20339,#20340,#20341,#20342), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #574=B_SPLINE_CURVE_WITH_KNOTS('',2,(#20352,#20353,#20354,#20355), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #575=B_SPLINE_CURVE_WITH_KNOTS('',2,(#20358,#20359,#20360,#20361), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #576=B_SPLINE_CURVE_WITH_KNOTS('',2,(#20370,#20371,#20372,#20373), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #577=B_SPLINE_CURVE_WITH_KNOTS('',2,(#20374,#20375,#20376,#20377), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #578=B_SPLINE_CURVE_WITH_KNOTS('',2,(#20388,#20389,#20390,#20391), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #579=B_SPLINE_CURVE_WITH_KNOTS('',2,(#20395,#20396,#20397,#20398), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #580=B_SPLINE_CURVE_WITH_KNOTS('',2,(#20409,#20410,#20411,#20412), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #581=B_SPLINE_CURVE_WITH_KNOTS('',2,(#20414,#20415,#20416,#20417), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #582=B_SPLINE_CURVE_WITH_KNOTS('',2,(#20428,#20429,#20430,#20431), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #583=B_SPLINE_CURVE_WITH_KNOTS('',2,(#20433,#20434,#20435,#20436), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #584=B_SPLINE_CURVE_WITH_KNOTS('',2,(#20446,#20447,#20448,#20449), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #585=B_SPLINE_CURVE_WITH_KNOTS('',2,(#20450,#20451,#20452,#20453), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #586=B_SPLINE_CURVE_WITH_KNOTS('',2,(#20987,#20988,#20989,#20990), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #587=B_SPLINE_CURVE_WITH_KNOTS('',2,(#20994,#20995,#20996,#20997), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #588=B_SPLINE_CURVE_WITH_KNOTS('',2,(#21008,#21009,#21010,#21011), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #589=B_SPLINE_CURVE_WITH_KNOTS('',2,(#21013,#21014,#21015,#21016), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #590=B_SPLINE_CURVE_WITH_KNOTS('',2,(#21027,#21028,#21029,#21030), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #591=B_SPLINE_CURVE_WITH_KNOTS('',2,(#21032,#21033,#21034,#21035), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #592=B_SPLINE_CURVE_WITH_KNOTS('',2,(#21046,#21047,#21048,#21049), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #593=B_SPLINE_CURVE_WITH_KNOTS('',2,(#21051,#21052,#21053,#21054), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #594=B_SPLINE_CURVE_WITH_KNOTS('',2,(#21077,#21078,#21079,#21080), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #595=B_SPLINE_CURVE_WITH_KNOTS('',2,(#21082,#21083,#21084,#21085), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #596=B_SPLINE_CURVE_WITH_KNOTS('',2,(#21096,#21097,#21098,#21099), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #597=B_SPLINE_CURVE_WITH_KNOTS('',2,(#21101,#21102,#21103,#21104), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #598=B_SPLINE_CURVE_WITH_KNOTS('',2,(#21115,#21116,#21117,#21118), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #599=B_SPLINE_CURVE_WITH_KNOTS('',2,(#21120,#21121,#21122,#21123), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #600=B_SPLINE_CURVE_WITH_KNOTS('',2,(#21134,#21135,#21136,#21137), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #601=B_SPLINE_CURVE_WITH_KNOTS('',2,(#21139,#21140,#21141,#21142), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #602=B_SPLINE_CURVE_WITH_KNOTS('',2,(#21153,#21154,#21155,#21156), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #603=B_SPLINE_CURVE_WITH_KNOTS('',2,(#21158,#21159,#21160,#21161), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #604=B_SPLINE_CURVE_WITH_KNOTS('',2,(#21184,#21185,#21186,#21187), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #605=B_SPLINE_CURVE_WITH_KNOTS('',2,(#21189,#21190,#21191,#21192), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #606=B_SPLINE_CURVE_WITH_KNOTS('',2,(#21203,#21204,#21205,#21206), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #607=B_SPLINE_CURVE_WITH_KNOTS('',2,(#21208,#21209,#21210,#21211), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #608=B_SPLINE_CURVE_WITH_KNOTS('',2,(#21221,#21222,#21223,#21224), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #609=B_SPLINE_CURVE_WITH_KNOTS('',2,(#21225,#21226,#21227,#21228), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #610=B_SPLINE_CURVE_WITH_KNOTS('',2,(#21241,#21242,#21243,#21244), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #611=B_SPLINE_CURVE_WITH_KNOTS('',2,(#21248,#21249,#21250,#21251), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #612=B_SPLINE_CURVE_WITH_KNOTS('',2,(#21262,#21263,#21264,#21265), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #613=B_SPLINE_CURVE_WITH_KNOTS('',2,(#21268,#21269,#21270,#21271), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #614=B_SPLINE_CURVE_WITH_KNOTS('',2,(#21281,#21282,#21283,#21284), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #615=B_SPLINE_CURVE_WITH_KNOTS('',2,(#21287,#21288,#21289,#21290), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #616=B_SPLINE_CURVE_WITH_KNOTS('',2,(#21299,#21300,#21301,#21302), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #617=B_SPLINE_CURVE_WITH_KNOTS('',2,(#21303,#21304,#21305,#21306), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #618=B_SPLINE_CURVE_WITH_KNOTS('',2,(#21317,#21318,#21319,#21320), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #619=B_SPLINE_CURVE_WITH_KNOTS('',2,(#21324,#21325,#21326,#21327), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #620=B_SPLINE_CURVE_WITH_KNOTS('',2,(#21338,#21339,#21340,#21341), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #621=B_SPLINE_CURVE_WITH_KNOTS('',2,(#21343,#21344,#21345,#21346), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #622=B_SPLINE_CURVE_WITH_KNOTS('',2,(#21357,#21358,#21359,#21360), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #623=B_SPLINE_CURVE_WITH_KNOTS('',2,(#21362,#21363,#21364,#21365), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #624=B_SPLINE_CURVE_WITH_KNOTS('',2,(#21375,#21376,#21377,#21378), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #625=B_SPLINE_CURVE_WITH_KNOTS('',2,(#21379,#21380,#21381,#21382), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #626=B_SPLINE_CURVE_WITH_KNOTS('',2,(#21403,#21404,#21405,#21406), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #627=B_SPLINE_CURVE_WITH_KNOTS('',2,(#21409,#21410,#21411,#21412), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #628=B_SPLINE_CURVE_WITH_KNOTS('',2,(#21422,#21423,#21424,#21425), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #629=B_SPLINE_CURVE_WITH_KNOTS('',2,(#21428,#21429,#21430,#21431), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #630=B_SPLINE_CURVE_WITH_KNOTS('',2,(#21441,#21442,#21443,#21444), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #631=B_SPLINE_CURVE_WITH_KNOTS('',2,(#21447,#21448,#21449,#21450), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #632=B_SPLINE_CURVE_WITH_KNOTS('',2,(#21459,#21460,#21461,#21462), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #633=B_SPLINE_CURVE_WITH_KNOTS('',2,(#21463,#21464,#21465,#21466), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #634=B_SPLINE_CURVE_WITH_KNOTS('',2,(#21477,#21478,#21479,#21480), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #635=B_SPLINE_CURVE_WITH_KNOTS('',2,(#21484,#21485,#21486,#21487), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #636=B_SPLINE_CURVE_WITH_KNOTS('',2,(#21498,#21499,#21500,#21501), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #637=B_SPLINE_CURVE_WITH_KNOTS('',2,(#21503,#21504,#21505,#21506), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #638=B_SPLINE_CURVE_WITH_KNOTS('',2,(#21517,#21518,#21519,#21520), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #639=B_SPLINE_CURVE_WITH_KNOTS('',2,(#21522,#21523,#21524,#21525), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #640=B_SPLINE_CURVE_WITH_KNOTS('',2,(#21548,#21549,#21550,#21551), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #641=B_SPLINE_CURVE_WITH_KNOTS('',2,(#21553,#21554,#21555,#21556), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #642=B_SPLINE_CURVE_WITH_KNOTS('',2,(#21567,#21568,#21569,#21570), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #643=B_SPLINE_CURVE_WITH_KNOTS('',2,(#21572,#21573,#21574,#21575), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #644=B_SPLINE_CURVE_WITH_KNOTS('',2,(#21586,#21587,#21588,#21589), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #645=B_SPLINE_CURVE_WITH_KNOTS('',2,(#21591,#21592,#21593,#21594), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #646=B_SPLINE_CURVE_WITH_KNOTS('',2,(#21617,#21618,#21619,#21620), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #647=B_SPLINE_CURVE_WITH_KNOTS('',2,(#21622,#21623,#21624,#21625), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #648=B_SPLINE_CURVE_WITH_KNOTS('',2,(#21636,#21637,#21638,#21639), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #649=B_SPLINE_CURVE_WITH_KNOTS('',2,(#21641,#21642,#21643,#21644), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #650=B_SPLINE_CURVE_WITH_KNOTS('',2,(#21654,#21655,#21656,#21657), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #651=B_SPLINE_CURVE_WITH_KNOTS('',2,(#21658,#21659,#21660,#21661), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #652=B_SPLINE_CURVE_WITH_KNOTS('',2,(#21768,#21769,#21770,#21771), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #653=B_SPLINE_CURVE_WITH_KNOTS('',2,(#21773,#21774,#21775,#21776), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #654=B_SPLINE_CURVE_WITH_KNOTS('',2,(#21787,#21788,#21789,#21790), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #655=B_SPLINE_CURVE_WITH_KNOTS('',2,(#21792,#21793,#21794,#21795), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #656=B_SPLINE_CURVE_WITH_KNOTS('',2,(#21806,#21807,#21808,#21809), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #657=B_SPLINE_CURVE_WITH_KNOTS('',2,(#21811,#21812,#21813,#21814), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #658=B_SPLINE_CURVE_WITH_KNOTS('',2,(#21837,#21838,#21839,#21840), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #659=B_SPLINE_CURVE_WITH_KNOTS('',2,(#21842,#21843,#21844,#21845), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #660=B_SPLINE_CURVE_WITH_KNOTS('',2,(#21855,#21856,#21857,#21858), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #661=B_SPLINE_CURVE_WITH_KNOTS('',2,(#21859,#21860,#21861,#21862), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #662=B_SPLINE_CURVE_WITH_KNOTS('',2,(#21875,#21876,#21877,#21878), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #663=B_SPLINE_CURVE_WITH_KNOTS('',2,(#21882,#21883,#21884,#21885), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #664=B_SPLINE_CURVE_WITH_KNOTS('',2,(#21896,#21897,#21898,#21899), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #665=B_SPLINE_CURVE_WITH_KNOTS('',2,(#21902,#21903,#21904,#21905), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #666=B_SPLINE_CURVE_WITH_KNOTS('',2,(#21915,#21916,#21917,#21918), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #667=B_SPLINE_CURVE_WITH_KNOTS('',2,(#21921,#21922,#21923,#21924), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #668=B_SPLINE_CURVE_WITH_KNOTS('',2,(#21933,#21934,#21935,#21936), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #669=B_SPLINE_CURVE_WITH_KNOTS('',2,(#21937,#21938,#21939,#21940), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #670=B_SPLINE_CURVE_WITH_KNOTS('',2,(#21951,#21952,#21953,#21954), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #671=B_SPLINE_CURVE_WITH_KNOTS('',2,(#21958,#21959,#21960,#21961), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #672=B_SPLINE_CURVE_WITH_KNOTS('',2,(#21972,#21973,#21974,#21975), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #673=B_SPLINE_CURVE_WITH_KNOTS('',2,(#21977,#21978,#21979,#21980), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #674=B_SPLINE_CURVE_WITH_KNOTS('',2,(#21991,#21992,#21993,#21994), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #675=B_SPLINE_CURVE_WITH_KNOTS('',2,(#21996,#21997,#21998,#21999), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #676=B_SPLINE_CURVE_WITH_KNOTS('',2,(#22009,#22010,#22011,#22012), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #677=B_SPLINE_CURVE_WITH_KNOTS('',2,(#22013,#22014,#22015,#22016), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #678=B_SPLINE_CURVE_WITH_KNOTS('',2,(#22037,#22038,#22039,#22040), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #679=B_SPLINE_CURVE_WITH_KNOTS('',2,(#22042,#22043,#22044,#22045), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #680=B_SPLINE_CURVE_WITH_KNOTS('',2,(#22056,#22057,#22058,#22059), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #681=B_SPLINE_CURVE_WITH_KNOTS('',2,(#22061,#22062,#22063,#22064), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #682=B_SPLINE_CURVE_WITH_KNOTS('',2,(#22075,#22076,#22077,#22078), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #683=B_SPLINE_CURVE_WITH_KNOTS('',2,(#22080,#22081,#22082,#22083), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #684=B_SPLINE_CURVE_WITH_KNOTS('',2,(#22124,#22125,#22126,#22127), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #685=B_SPLINE_CURVE_WITH_KNOTS('',2,(#22129,#22130,#22131,#22132), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #686=B_SPLINE_CURVE_WITH_KNOTS('',2,(#22143,#22144,#22145,#22146), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #687=B_SPLINE_CURVE_WITH_KNOTS('',2,(#22148,#22149,#22150,#22151), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #688=B_SPLINE_CURVE_WITH_KNOTS('',2,(#22214,#22215,#22216,#22217), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #689=B_SPLINE_CURVE_WITH_KNOTS('',2,(#22219,#22220,#22221,#22222), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #690=B_SPLINE_CURVE_WITH_KNOTS('',2,(#22233,#22234,#22235,#22236), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #691=B_SPLINE_CURVE_WITH_KNOTS('',2,(#22238,#22239,#22240,#22241), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #692=B_SPLINE_CURVE_WITH_KNOTS('',2,(#22252,#22253,#22254,#22255), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #693=B_SPLINE_CURVE_WITH_KNOTS('',2,(#22257,#22258,#22259,#22260), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #694=B_SPLINE_CURVE_WITH_KNOTS('',2,(#22271,#22272,#22273,#22274), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #695=B_SPLINE_CURVE_WITH_KNOTS('',2,(#22276,#22277,#22278,#22279), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #696=B_SPLINE_CURVE_WITH_KNOTS('',2,(#22290,#22291,#22292,#22293), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #697=B_SPLINE_CURVE_WITH_KNOTS('',2,(#22295,#22296,#22297,#22298), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #698=B_SPLINE_CURVE_WITH_KNOTS('',2,(#22309,#22310,#22311,#22312), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #699=B_SPLINE_CURVE_WITH_KNOTS('',2,(#22314,#22315,#22316,#22317), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #700=B_SPLINE_CURVE_WITH_KNOTS('',2,(#22328,#22329,#22330,#22331), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #701=B_SPLINE_CURVE_WITH_KNOTS('',2,(#22333,#22334,#22335,#22336), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #702=B_SPLINE_CURVE_WITH_KNOTS('',2,(#22347,#22348,#22349,#22350), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #703=B_SPLINE_CURVE_WITH_KNOTS('',2,(#22352,#22353,#22354,#22355), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #704=B_SPLINE_CURVE_WITH_KNOTS('',2,(#22366,#22367,#22368,#22369), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #705=B_SPLINE_CURVE_WITH_KNOTS('',2,(#22371,#22372,#22373,#22374), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #706=B_SPLINE_CURVE_WITH_KNOTS('',2,(#22397,#22398,#22399,#22400), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #707=B_SPLINE_CURVE_WITH_KNOTS('',2,(#22402,#22403,#22404,#22405), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #708=B_SPLINE_CURVE_WITH_KNOTS('',2,(#22416,#22417,#22418,#22419), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #709=B_SPLINE_CURVE_WITH_KNOTS('',2,(#22421,#22422,#22423,#22424), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #710=B_SPLINE_CURVE_WITH_KNOTS('',2,(#22435,#22436,#22437,#22438), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #711=B_SPLINE_CURVE_WITH_KNOTS('',2,(#22440,#22441,#22442,#22443), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #712=B_SPLINE_CURVE_WITH_KNOTS('',2,(#22454,#22455,#22456,#22457), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #713=B_SPLINE_CURVE_WITH_KNOTS('',2,(#22459,#22460,#22461,#22462), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #714=B_SPLINE_CURVE_WITH_KNOTS('',2,(#22473,#22474,#22475,#22476), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #715=B_SPLINE_CURVE_WITH_KNOTS('',2,(#22478,#22479,#22480,#22481), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #716=B_SPLINE_CURVE_WITH_KNOTS('',2,(#22492,#22493,#22494,#22495), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #717=B_SPLINE_CURVE_WITH_KNOTS('',2,(#22497,#22498,#22499,#22500), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #718=B_SPLINE_CURVE_WITH_KNOTS('',2,(#22511,#22512,#22513,#22514), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #719=B_SPLINE_CURVE_WITH_KNOTS('',2,(#22516,#22517,#22518,#22519), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #720=B_SPLINE_CURVE_WITH_KNOTS('',2,(#22529,#22530,#22531,#22532), .UNSPECIFIED.,.F.,.F.,(3,1,3),(0.,1.,2.),.UNSPECIFIED.); #721=B_SPLINE_CURVE_WITH_KNOTS('',2,(#22533,#22534,#22535,#22536), .UNSPECIFIED.,.F.,.F.,(3,1,3),(-2.,-1.,0.),.UNSPECIFIED.); #722=CYLINDRICAL_SURFACE('',#12756,0.8); #723=CYLINDRICAL_SURFACE('',#12758,0.1); #724=CYLINDRICAL_SURFACE('',#12762,0.1); #725=CYLINDRICAL_SURFACE('',#12774,0.1); #726=CYLINDRICAL_SURFACE('',#12793,0.1); #727=CYLINDRICAL_SURFACE('',#12798,0.1); #728=CYLINDRICAL_SURFACE('',#12805,0.1); #729=CYLINDRICAL_SURFACE('',#12819,0.1); #730=CYLINDRICAL_SURFACE('',#12823,0.1); #731=CYLINDRICAL_SURFACE('',#12824,0.1); #732=CYLINDRICAL_SURFACE('',#12827,0.1); #733=CYLINDRICAL_SURFACE('',#12842,0.1); #734=CYLINDRICAL_SURFACE('',#12843,0.1); #735=CYLINDRICAL_SURFACE('',#12844,0.1); #736=CYLINDRICAL_SURFACE('',#12846,0.1); #737=CYLINDRICAL_SURFACE('',#12847,0.1); #738=CYLINDRICAL_SURFACE('',#12855,0.6); #739=CYLINDRICAL_SURFACE('',#12862,0.6); #740=CYLINDRICAL_SURFACE('',#12871,0.4); #741=CYLINDRICAL_SURFACE('',#12875,0.4); #742=CYLINDRICAL_SURFACE('',#12881,0.4); #743=CYLINDRICAL_SURFACE('',#12884,0.4); #744=CYLINDRICAL_SURFACE('',#12910,0.175); #745=CYLINDRICAL_SURFACE('',#12914,0.1); #746=CYLINDRICAL_SURFACE('',#12916,0.1); #747=CYLINDRICAL_SURFACE('',#12919,0.1); #748=CYLINDRICAL_SURFACE('',#12923,0.1); #749=CYLINDRICAL_SURFACE('',#12927,0.1); #750=CYLINDRICAL_SURFACE('',#12931,0.1); #751=CYLINDRICAL_SURFACE('',#12935,0.1); #752=CYLINDRICAL_SURFACE('',#12939,0.1); #753=CYLINDRICAL_SURFACE('',#12942,0.1); #754=CYLINDRICAL_SURFACE('',#12945,0.175); #755=CYLINDRICAL_SURFACE('',#12948,0.1); #756=CYLINDRICAL_SURFACE('',#12952,0.1); #757=CYLINDRICAL_SURFACE('',#12958,0.1); #758=CYLINDRICAL_SURFACE('',#12966,0.4); #759=CYLINDRICAL_SURFACE('',#12970,0.4); #760=CYLINDRICAL_SURFACE('',#12975,0.4); #761=CYLINDRICAL_SURFACE('',#12978,0.4); #762=CYLINDRICAL_SURFACE('',#13011,0.4); #763=CYLINDRICAL_SURFACE('',#13013,0.4); #764=CYLINDRICAL_SURFACE('',#13018,0.4); #765=CYLINDRICAL_SURFACE('',#13020,0.4); #766=CYLINDRICAL_SURFACE('',#13023,0.4); #767=CYLINDRICAL_SURFACE('',#13027,0.4); #768=CYLINDRICAL_SURFACE('',#13033,0.4); #769=CYLINDRICAL_SURFACE('',#13036,0.4); #770=CYLINDRICAL_SURFACE('',#13067,0.4); #771=CYLINDRICAL_SURFACE('',#13069,0.4); #772=CYLINDRICAL_SURFACE('',#13073,0.4); #773=CYLINDRICAL_SURFACE('',#13075,0.4); #774=CYLINDRICAL_SURFACE('',#13083,0.4); #775=CYLINDRICAL_SURFACE('',#13087,0.4); #776=CYLINDRICAL_SURFACE('',#13093,0.4); #777=CYLINDRICAL_SURFACE('',#13096,0.4); #778=CYLINDRICAL_SURFACE('',#13131,0.4); #779=CYLINDRICAL_SURFACE('',#13133,0.4); #780=CYLINDRICAL_SURFACE('',#13138,0.4); #781=CYLINDRICAL_SURFACE('',#13140,0.4); #782=CYLINDRICAL_SURFACE('',#13266,0.1); #783=CYLINDRICAL_SURFACE('',#13272,0.0999999999999999); #784=CYLINDRICAL_SURFACE('',#13280,0.129707110524788); #785=CYLINDRICAL_SURFACE('',#13291,0.1); #786=CYLINDRICAL_SURFACE('',#13295,0.1); #787=CYLINDRICAL_SURFACE('',#13299,0.1); #788=FACE_BOUND('',#1678,.T.); #789=FACE_BOUND('',#1680,.T.); #790=FACE_BOUND('',#1682,.T.); #791=FACE_BOUND('',#1794,.T.); #792=FACE_BOUND('',#1799,.T.); #793=FACE_BOUND('',#2006,.T.); #794=FACE_BOUND('',#2008,.T.); #795=FACE_BOUND('',#2084,.T.); #796=FACE_BOUND('',#2086,.T.); #797=FACE_BOUND('',#2143,.T.); #798=FACE_BOUND('',#2145,.T.); #799=FACE_BOUND('',#2159,.T.); #800=FACE_BOUND('',#2161,.T.); #801=FACE_BOUND('',#2185,.T.); #802=FACE_BOUND('',#2235,.T.); #803=FACE_BOUND('',#2237,.T.); #804=FACE_BOUND('',#2299,.T.); #805=FACE_BOUND('',#2301,.T.); #806=FACE_BOUND('',#2321,.T.); #807=FACE_BOUND('',#2323,.T.); #808=FACE_BOUND('',#2359,.T.); #809=FACE_BOUND('',#2361,.T.); #810=CIRCLE('',#12749,0.8); #811=CIRCLE('',#12750,0.9); #812=CIRCLE('',#12752,0.841633117401742); #813=CIRCLE('',#12753,0.841633117401743); #814=CIRCLE('',#12754,0.7); #815=CIRCLE('',#12755,0.7); #816=CIRCLE('',#12757,0.8); #817=CIRCLE('',#12759,0.1); #818=CIRCLE('',#12765,0.100000000000001); #819=CIRCLE('',#12767,0.1); #820=CIRCLE('',#12768,0.0999999999999997); #821=CIRCLE('',#12769,0.1); #822=CIRCLE('',#12771,0.1); #823=CIRCLE('',#12772,0.1); #824=CIRCLE('',#12773,0.100000000000001); #825=CIRCLE('',#12777,0.1); #826=CIRCLE('',#12778,0.1); #827=CIRCLE('',#12780,0.1); #828=CIRCLE('',#12781,0.1); #829=CIRCLE('',#12782,0.1); #830=CIRCLE('',#12783,0.0999999999999997); #831=CIRCLE('',#12784,0.1); #832=CIRCLE('',#12786,0.1); #833=CIRCLE('',#12787,0.1); #834=CIRCLE('',#12788,0.1); #835=CIRCLE('',#12790,0.6); #836=CIRCLE('',#12791,0.0999999999999997); #837=CIRCLE('',#12792,0.0999999999999994); #838=CIRCLE('',#12795,0.1); #839=CIRCLE('',#12796,0.1); #840=CIRCLE('',#12797,0.1); #841=CIRCLE('',#12799,0.0999999999999992); #842=CIRCLE('',#12800,0.1); #843=CIRCLE('',#12802,0.0999999999999998); #844=CIRCLE('',#12803,0.0999999999999997); #845=CIRCLE('',#12804,0.1); #846=CIRCLE('',#12807,0.1); #847=CIRCLE('',#12808,0.0999999999999997); #848=CIRCLE('',#12809,0.0999999999999997); #849=CIRCLE('',#12811,0.742013647592568); #850=CIRCLE('',#12813,0.1); #851=CIRCLE('',#12814,0.1); #852=CIRCLE('',#12815,0.0999999999999999); #853=CIRCLE('',#12817,0.1); #854=CIRCLE('',#12818,0.1); #855=CIRCLE('',#12821,0.1); #856=CIRCLE('',#12822,0.100000000000001); #857=CIRCLE('',#12826,0.742013647592568); #858=CIRCLE('',#12829,0.626753357118546); #859=CIRCLE('',#12830,0.527133887309372); #860=CIRCLE('',#12832,0.626753357118546); #861=CIRCLE('',#12833,0.527133887309372); #862=CIRCLE('',#12837,0.6); #863=CIRCLE('',#12856,0.6); #864=CIRCLE('',#12863,0.6); #865=CIRCLE('',#12872,0.4); #866=CIRCLE('',#12873,0.4); #867=CIRCLE('',#12876,0.4); #868=CIRCLE('',#12877,0.4); #869=CIRCLE('',#12880,0.4); #870=CIRCLE('',#12882,0.4); #871=CIRCLE('',#12885,0.4); #872=CIRCLE('',#12886,0.4); #873=CIRCLE('',#12901,0.1); #874=CIRCLE('',#12902,0.1); #875=CIRCLE('',#12911,0.175); #876=CIRCLE('',#12912,0.175); #877=CIRCLE('',#12915,0.1); #878=CIRCLE('',#12917,0.1); #879=CIRCLE('',#12920,0.1); #880=CIRCLE('',#12921,0.1); #881=CIRCLE('',#12924,0.1); #882=CIRCLE('',#12925,0.1); #883=CIRCLE('',#12928,0.1); #884=CIRCLE('',#12929,0.1); #885=CIRCLE('',#12932,0.1); #886=CIRCLE('',#12933,0.1); #887=CIRCLE('',#12936,0.1); #888=CIRCLE('',#12937,0.1); #889=CIRCLE('',#12940,0.1); #890=CIRCLE('',#12941,0.1); #891=CIRCLE('',#12943,0.1); #892=CIRCLE('',#12944,0.1); #893=CIRCLE('',#12946,0.175); #894=CIRCLE('',#12947,0.175); #895=CIRCLE('',#12949,0.1); #896=CIRCLE('',#12950,0.1); #897=CIRCLE('',#12953,0.1); #898=CIRCLE('',#12954,0.1); #899=CIRCLE('',#12956,0.1); #900=CIRCLE('',#12959,0.1); #901=CIRCLE('',#12967,0.4); #902=CIRCLE('',#12968,0.4); #903=CIRCLE('',#12971,0.4); #904=CIRCLE('',#12972,0.4); #905=CIRCLE('',#12974,0.4); #906=CIRCLE('',#12976,0.4); #907=CIRCLE('',#12979,0.4); #908=CIRCLE('',#12980,0.4); #909=CIRCLE('',#12993,0.4); #910=CIRCLE('',#12994,0.4); #911=CIRCLE('',#12999,0.4); #912=CIRCLE('',#13000,0.4); #913=CIRCLE('',#13008,0.4); #914=CIRCLE('',#13009,0.4); #915=CIRCLE('',#13014,0.4); #916=CIRCLE('',#13016,0.4); #917=CIRCLE('',#13024,0.4); #918=CIRCLE('',#13025,0.4); #919=CIRCLE('',#13028,0.4); #920=CIRCLE('',#13029,0.4); #921=CIRCLE('',#13032,0.4); #922=CIRCLE('',#13034,0.4); #923=CIRCLE('',#13037,0.4); #924=CIRCLE('',#13038,0.4); #925=CIRCLE('',#13053,0.4); #926=CIRCLE('',#13054,0.4); #927=CIRCLE('',#13059,0.4); #928=CIRCLE('',#13060,0.4); #929=CIRCLE('',#13064,0.4); #930=CIRCLE('',#13065,0.4); #931=CIRCLE('',#13070,0.4); #932=CIRCLE('',#13072,0.4); #933=CIRCLE('',#13084,0.4); #934=CIRCLE('',#13085,0.4); #935=CIRCLE('',#13088,0.4); #936=CIRCLE('',#13089,0.4); #937=CIRCLE('',#13092,0.4); #938=CIRCLE('',#13094,0.4); #939=CIRCLE('',#13097,0.4); #940=CIRCLE('',#13098,0.4); #941=CIRCLE('',#13113,0.4); #942=CIRCLE('',#13114,0.4); #943=CIRCLE('',#13119,0.4); #944=CIRCLE('',#13120,0.4); #945=CIRCLE('',#13128,0.4); #946=CIRCLE('',#13129,0.4); #947=CIRCLE('',#13134,0.4); #948=CIRCLE('',#13136,0.4); #949=CIRCLE('',#13267,0.1); #950=CIRCLE('',#13268,0.1); #951=CIRCLE('',#13270,0.0999999999999999); #952=CIRCLE('',#13273,0.0999999999999999); #953=CIRCLE('',#13281,0.129707110524788); #954=CIRCLE('',#13282,0.129707110524788); #955=CIRCLE('',#13292,0.1); #956=CIRCLE('',#13293,0.1); #957=CIRCLE('',#13296,0.1); #958=CIRCLE('',#13297,0.1); #959=CIRCLE('',#13300,0.1); #960=CIRCLE('',#13301,0.1); #961=TOROIDAL_SURFACE('',#12748,0.9,0.1); #962=TOROIDAL_SURFACE('',#12789,0.7,0.1); #963=TOROIDAL_SURFACE('',#12810,0.841633117401742,0.1); #964=TOROIDAL_SURFACE('',#12825,0.841633117401743,0.1); #965=TOROIDAL_SURFACE('',#12828,0.527133887309372,0.1); #966=TOROIDAL_SURFACE('',#12831,0.527133887309372,0.1); #967=TOROIDAL_SURFACE('',#12836,0.7,0.1); #968=FACE_OUTER_BOUND('',#1676,.T.); #969=FACE_OUTER_BOUND('',#1677,.T.); #970=FACE_OUTER_BOUND('',#1679,.T.); #971=FACE_OUTER_BOUND('',#1681,.T.); #972=FACE_OUTER_BOUND('',#1683,.T.); #973=FACE_OUTER_BOUND('',#1684,.T.); #974=FACE_OUTER_BOUND('',#1685,.T.); #975=FACE_OUTER_BOUND('',#1686,.T.); #976=FACE_OUTER_BOUND('',#1687,.T.); #977=FACE_OUTER_BOUND('',#1688,.T.); #978=FACE_OUTER_BOUND('',#1689,.T.); #979=FACE_OUTER_BOUND('',#1690,.T.); #980=FACE_OUTER_BOUND('',#1691,.T.); #981=FACE_OUTER_BOUND('',#1692,.T.); #982=FACE_OUTER_BOUND('',#1693,.T.); #983=FACE_OUTER_BOUND('',#1694,.T.); #984=FACE_OUTER_BOUND('',#1695,.T.); #985=FACE_OUTER_BOUND('',#1696,.T.); #986=FACE_OUTER_BOUND('',#1697,.T.); #987=FACE_OUTER_BOUND('',#1698,.T.); #988=FACE_OUTER_BOUND('',#1699,.T.); #989=FACE_OUTER_BOUND('',#1700,.T.); #990=FACE_OUTER_BOUND('',#1701,.T.); #991=FACE_OUTER_BOUND('',#1702,.T.); #992=FACE_OUTER_BOUND('',#1703,.T.); #993=FACE_OUTER_BOUND('',#1704,.T.); #994=FACE_OUTER_BOUND('',#1705,.T.); #995=FACE_OUTER_BOUND('',#1706,.T.); #996=FACE_OUTER_BOUND('',#1707,.T.); #997=FACE_OUTER_BOUND('',#1708,.T.); #998=FACE_OUTER_BOUND('',#1709,.T.); #999=FACE_OUTER_BOUND('',#1710,.T.); #1000=FACE_OUTER_BOUND('',#1711,.T.); #1001=FACE_OUTER_BOUND('',#1712,.T.); #1002=FACE_OUTER_BOUND('',#1713,.T.); #1003=FACE_OUTER_BOUND('',#1714,.T.); #1004=FACE_OUTER_BOUND('',#1715,.T.); #1005=FACE_OUTER_BOUND('',#1716,.T.); #1006=FACE_OUTER_BOUND('',#1717,.T.); #1007=FACE_OUTER_BOUND('',#1718,.T.); #1008=FACE_OUTER_BOUND('',#1719,.T.); #1009=FACE_OUTER_BOUND('',#1720,.T.); #1010=FACE_OUTER_BOUND('',#1721,.T.); #1011=FACE_OUTER_BOUND('',#1722,.T.); #1012=FACE_OUTER_BOUND('',#1723,.T.); #1013=FACE_OUTER_BOUND('',#1724,.T.); #1014=FACE_OUTER_BOUND('',#1725,.T.); #1015=FACE_OUTER_BOUND('',#1726,.T.); #1016=FACE_OUTER_BOUND('',#1727,.T.); #1017=FACE_OUTER_BOUND('',#1728,.T.); #1018=FACE_OUTER_BOUND('',#1729,.T.); #1019=FACE_OUTER_BOUND('',#1730,.T.); #1020=FACE_OUTER_BOUND('',#1731,.T.); #1021=FACE_OUTER_BOUND('',#1732,.T.); #1022=FACE_OUTER_BOUND('',#1733,.T.); #1023=FACE_OUTER_BOUND('',#1734,.T.); #1024=FACE_OUTER_BOUND('',#1735,.T.); #1025=FACE_OUTER_BOUND('',#1736,.T.); #1026=FACE_OUTER_BOUND('',#1737,.T.); #1027=FACE_OUTER_BOUND('',#1738,.T.); #1028=FACE_OUTER_BOUND('',#1739,.T.); #1029=FACE_OUTER_BOUND('',#1740,.T.); #1030=FACE_OUTER_BOUND('',#1741,.T.); #1031=FACE_OUTER_BOUND('',#1742,.T.); #1032=FACE_OUTER_BOUND('',#1743,.T.); #1033=FACE_OUTER_BOUND('',#1744,.T.); #1034=FACE_OUTER_BOUND('',#1745,.T.); #1035=FACE_OUTER_BOUND('',#1746,.T.); #1036=FACE_OUTER_BOUND('',#1747,.T.); #1037=FACE_OUTER_BOUND('',#1748,.T.); #1038=FACE_OUTER_BOUND('',#1749,.T.); #1039=FACE_OUTER_BOUND('',#1750,.T.); #1040=FACE_OUTER_BOUND('',#1751,.T.); #1041=FACE_OUTER_BOUND('',#1752,.T.); #1042=FACE_OUTER_BOUND('',#1753,.T.); #1043=FACE_OUTER_BOUND('',#1754,.T.); #1044=FACE_OUTER_BOUND('',#1755,.T.); #1045=FACE_OUTER_BOUND('',#1756,.T.); #1046=FACE_OUTER_BOUND('',#1757,.T.); #1047=FACE_OUTER_BOUND('',#1758,.T.); #1048=FACE_OUTER_BOUND('',#1759,.T.); #1049=FACE_OUTER_BOUND('',#1760,.T.); #1050=FACE_OUTER_BOUND('',#1761,.T.); #1051=FACE_OUTER_BOUND('',#1762,.T.); #1052=FACE_OUTER_BOUND('',#1763,.T.); #1053=FACE_OUTER_BOUND('',#1764,.T.); #1054=FACE_OUTER_BOUND('',#1765,.T.); #1055=FACE_OUTER_BOUND('',#1766,.T.); #1056=FACE_OUTER_BOUND('',#1767,.T.); #1057=FACE_OUTER_BOUND('',#1768,.T.); #1058=FACE_OUTER_BOUND('',#1769,.T.); #1059=FACE_OUTER_BOUND('',#1770,.T.); #1060=FACE_OUTER_BOUND('',#1771,.T.); #1061=FACE_OUTER_BOUND('',#1772,.T.); #1062=FACE_OUTER_BOUND('',#1773,.T.); #1063=FACE_OUTER_BOUND('',#1774,.T.); #1064=FACE_OUTER_BOUND('',#1775,.T.); #1065=FACE_OUTER_BOUND('',#1776,.T.); #1066=FACE_OUTER_BOUND('',#1777,.T.); #1067=FACE_OUTER_BOUND('',#1778,.T.); #1068=FACE_OUTER_BOUND('',#1779,.T.); #1069=FACE_OUTER_BOUND('',#1780,.T.); #1070=FACE_OUTER_BOUND('',#1781,.T.); #1071=FACE_OUTER_BOUND('',#1782,.T.); #1072=FACE_OUTER_BOUND('',#1783,.T.); #1073=FACE_OUTER_BOUND('',#1784,.T.); #1074=FACE_OUTER_BOUND('',#1785,.T.); #1075=FACE_OUTER_BOUND('',#1786,.T.); #1076=FACE_OUTER_BOUND('',#1787,.T.); #1077=FACE_OUTER_BOUND('',#1788,.T.); #1078=FACE_OUTER_BOUND('',#1789,.T.); #1079=FACE_OUTER_BOUND('',#1790,.T.); #1080=FACE_OUTER_BOUND('',#1791,.T.); #1081=FACE_OUTER_BOUND('',#1792,.T.); #1082=FACE_OUTER_BOUND('',#1793,.T.); #1083=FACE_OUTER_BOUND('',#1795,.T.); #1084=FACE_OUTER_BOUND('',#1796,.T.); #1085=FACE_OUTER_BOUND('',#1797,.T.); #1086=FACE_OUTER_BOUND('',#1798,.T.); #1087=FACE_OUTER_BOUND('',#1800,.T.); #1088=FACE_OUTER_BOUND('',#1801,.T.); #1089=FACE_OUTER_BOUND('',#1802,.T.); #1090=FACE_OUTER_BOUND('',#1803,.T.); #1091=FACE_OUTER_BOUND('',#1804,.T.); #1092=FACE_OUTER_BOUND('',#1805,.T.); #1093=FACE_OUTER_BOUND('',#1806,.T.); #1094=FACE_OUTER_BOUND('',#1807,.T.); #1095=FACE_OUTER_BOUND('',#1808,.T.); #1096=FACE_OUTER_BOUND('',#1809,.T.); #1097=FACE_OUTER_BOUND('',#1810,.T.); #1098=FACE_OUTER_BOUND('',#1811,.T.); #1099=FACE_OUTER_BOUND('',#1812,.T.); #1100=FACE_OUTER_BOUND('',#1813,.T.); #1101=FACE_OUTER_BOUND('',#1814,.T.); #1102=FACE_OUTER_BOUND('',#1815,.T.); #1103=FACE_OUTER_BOUND('',#1816,.T.); #1104=FACE_OUTER_BOUND('',#1817,.T.); #1105=FACE_OUTER_BOUND('',#1818,.T.); #1106=FACE_OUTER_BOUND('',#1819,.T.); #1107=FACE_OUTER_BOUND('',#1820,.T.); #1108=FACE_OUTER_BOUND('',#1821,.T.); #1109=FACE_OUTER_BOUND('',#1822,.T.); #1110=FACE_OUTER_BOUND('',#1823,.T.); #1111=FACE_OUTER_BOUND('',#1824,.T.); #1112=FACE_OUTER_BOUND('',#1825,.T.); #1113=FACE_OUTER_BOUND('',#1826,.T.); #1114=FACE_OUTER_BOUND('',#1827,.T.); #1115=FACE_OUTER_BOUND('',#1828,.T.); #1116=FACE_OUTER_BOUND('',#1829,.T.); #1117=FACE_OUTER_BOUND('',#1830,.T.); #1118=FACE_OUTER_BOUND('',#1831,.T.); #1119=FACE_OUTER_BOUND('',#1832,.T.); #1120=FACE_OUTER_BOUND('',#1833,.T.); #1121=FACE_OUTER_BOUND('',#1834,.T.); #1122=FACE_OUTER_BOUND('',#1835,.T.); #1123=FACE_OUTER_BOUND('',#1836,.T.); #1124=FACE_OUTER_BOUND('',#1837,.T.); #1125=FACE_OUTER_BOUND('',#1838,.T.); #1126=FACE_OUTER_BOUND('',#1839,.T.); #1127=FACE_OUTER_BOUND('',#1840,.T.); #1128=FACE_OUTER_BOUND('',#1841,.T.); #1129=FACE_OUTER_BOUND('',#1842,.T.); #1130=FACE_OUTER_BOUND('',#1843,.T.); #1131=FACE_OUTER_BOUND('',#1844,.T.); #1132=FACE_OUTER_BOUND('',#1845,.T.); #1133=FACE_OUTER_BOUND('',#1846,.T.); #1134=FACE_OUTER_BOUND('',#1847,.T.); #1135=FACE_OUTER_BOUND('',#1848,.T.); #1136=FACE_OUTER_BOUND('',#1849,.T.); #1137=FACE_OUTER_BOUND('',#1850,.T.); #1138=FACE_OUTER_BOUND('',#1851,.T.); #1139=FACE_OUTER_BOUND('',#1852,.T.); #1140=FACE_OUTER_BOUND('',#1853,.T.); #1141=FACE_OUTER_BOUND('',#1854,.T.); #1142=FACE_OUTER_BOUND('',#1855,.T.); #1143=FACE_OUTER_BOUND('',#1856,.T.); #1144=FACE_OUTER_BOUND('',#1857,.T.); #1145=FACE_OUTER_BOUND('',#1858,.T.); #1146=FACE_OUTER_BOUND('',#1859,.T.); #1147=FACE_OUTER_BOUND('',#1860,.T.); #1148=FACE_OUTER_BOUND('',#1861,.T.); #1149=FACE_OUTER_BOUND('',#1862,.T.); #1150=FACE_OUTER_BOUND('',#1863,.T.); #1151=FACE_OUTER_BOUND('',#1864,.T.); #1152=FACE_OUTER_BOUND('',#1865,.T.); #1153=FACE_OUTER_BOUND('',#1866,.T.); #1154=FACE_OUTER_BOUND('',#1867,.T.); #1155=FACE_OUTER_BOUND('',#1868,.T.); #1156=FACE_OUTER_BOUND('',#1869,.T.); #1157=FACE_OUTER_BOUND('',#1870,.T.); #1158=FACE_OUTER_BOUND('',#1871,.T.); #1159=FACE_OUTER_BOUND('',#1872,.T.); #1160=FACE_OUTER_BOUND('',#1873,.T.); #1161=FACE_OUTER_BOUND('',#1874,.T.); #1162=FACE_OUTER_BOUND('',#1875,.T.); #1163=FACE_OUTER_BOUND('',#1876,.T.); #1164=FACE_OUTER_BOUND('',#1877,.T.); #1165=FACE_OUTER_BOUND('',#1878,.T.); #1166=FACE_OUTER_BOUND('',#1879,.T.); #1167=FACE_OUTER_BOUND('',#1880,.T.); #1168=FACE_OUTER_BOUND('',#1881,.T.); #1169=FACE_OUTER_BOUND('',#1882,.T.); #1170=FACE_OUTER_BOUND('',#1883,.T.); #1171=FACE_OUTER_BOUND('',#1884,.T.); #1172=FACE_OUTER_BOUND('',#1885,.T.); #1173=FACE_OUTER_BOUND('',#1886,.T.); #1174=FACE_OUTER_BOUND('',#1887,.T.); #1175=FACE_OUTER_BOUND('',#1888,.T.); #1176=FACE_OUTER_BOUND('',#1889,.T.); #1177=FACE_OUTER_BOUND('',#1890,.T.); #1178=FACE_OUTER_BOUND('',#1891,.T.); #1179=FACE_OUTER_BOUND('',#1892,.T.); #1180=FACE_OUTER_BOUND('',#1893,.T.); #1181=FACE_OUTER_BOUND('',#1894,.T.); #1182=FACE_OUTER_BOUND('',#1895,.T.); #1183=FACE_OUTER_BOUND('',#1896,.T.); #1184=FACE_OUTER_BOUND('',#1897,.T.); #1185=FACE_OUTER_BOUND('',#1898,.T.); #1186=FACE_OUTER_BOUND('',#1899,.T.); #1187=FACE_OUTER_BOUND('',#1900,.T.); #1188=FACE_OUTER_BOUND('',#1901,.T.); #1189=FACE_OUTER_BOUND('',#1902,.T.); #1190=FACE_OUTER_BOUND('',#1903,.T.); #1191=FACE_OUTER_BOUND('',#1904,.T.); #1192=FACE_OUTER_BOUND('',#1905,.T.); #1193=FACE_OUTER_BOUND('',#1906,.T.); #1194=FACE_OUTER_BOUND('',#1907,.T.); #1195=FACE_OUTER_BOUND('',#1908,.T.); #1196=FACE_OUTER_BOUND('',#1909,.T.); #1197=FACE_OUTER_BOUND('',#1910,.T.); #1198=FACE_OUTER_BOUND('',#1911,.T.); #1199=FACE_OUTER_BOUND('',#1912,.T.); #1200=FACE_OUTER_BOUND('',#1913,.T.); #1201=FACE_OUTER_BOUND('',#1914,.T.); #1202=FACE_OUTER_BOUND('',#1915,.T.); #1203=FACE_OUTER_BOUND('',#1916,.T.); #1204=FACE_OUTER_BOUND('',#1917,.T.); #1205=FACE_OUTER_BOUND('',#1918,.T.); #1206=FACE_OUTER_BOUND('',#1919,.T.); #1207=FACE_OUTER_BOUND('',#1920,.T.); #1208=FACE_OUTER_BOUND('',#1921,.T.); #1209=FACE_OUTER_BOUND('',#1922,.T.); #1210=FACE_OUTER_BOUND('',#1923,.T.); #1211=FACE_OUTER_BOUND('',#1924,.T.); #1212=FACE_OUTER_BOUND('',#1925,.T.); #1213=FACE_OUTER_BOUND('',#1926,.T.); #1214=FACE_OUTER_BOUND('',#1927,.T.); #1215=FACE_OUTER_BOUND('',#1928,.T.); #1216=FACE_OUTER_BOUND('',#1929,.T.); #1217=FACE_OUTER_BOUND('',#1930,.T.); #1218=FACE_OUTER_BOUND('',#1931,.T.); #1219=FACE_OUTER_BOUND('',#1932,.T.); #1220=FACE_OUTER_BOUND('',#1933,.T.); #1221=FACE_OUTER_BOUND('',#1934,.T.); #1222=FACE_OUTER_BOUND('',#1935,.T.); #1223=FACE_OUTER_BOUND('',#1936,.T.); #1224=FACE_OUTER_BOUND('',#1937,.T.); #1225=FACE_OUTER_BOUND('',#1938,.T.); #1226=FACE_OUTER_BOUND('',#1939,.T.); #1227=FACE_OUTER_BOUND('',#1940,.T.); #1228=FACE_OUTER_BOUND('',#1941,.T.); #1229=FACE_OUTER_BOUND('',#1942,.T.); #1230=FACE_OUTER_BOUND('',#1943,.T.); #1231=FACE_OUTER_BOUND('',#1944,.T.); #1232=FACE_OUTER_BOUND('',#1945,.T.); #1233=FACE_OUTER_BOUND('',#1946,.T.); #1234=FACE_OUTER_BOUND('',#1947,.T.); #1235=FACE_OUTER_BOUND('',#1948,.T.); #1236=FACE_OUTER_BOUND('',#1949,.T.); #1237=FACE_OUTER_BOUND('',#1950,.T.); #1238=FACE_OUTER_BOUND('',#1951,.T.); #1239=FACE_OUTER_BOUND('',#1952,.T.); #1240=FACE_OUTER_BOUND('',#1953,.T.); #1241=FACE_OUTER_BOUND('',#1954,.T.); #1242=FACE_OUTER_BOUND('',#1955,.T.); #1243=FACE_OUTER_BOUND('',#1956,.T.); #1244=FACE_OUTER_BOUND('',#1957,.T.); #1245=FACE_OUTER_BOUND('',#1958,.T.); #1246=FACE_OUTER_BOUND('',#1959,.T.); #1247=FACE_OUTER_BOUND('',#1960,.T.); #1248=FACE_OUTER_BOUND('',#1961,.T.); #1249=FACE_OUTER_BOUND('',#1962,.T.); #1250=FACE_OUTER_BOUND('',#1963,.T.); #1251=FACE_OUTER_BOUND('',#1964,.T.); #1252=FACE_OUTER_BOUND('',#1965,.T.); #1253=FACE_OUTER_BOUND('',#1966,.T.); #1254=FACE_OUTER_BOUND('',#1967,.T.); #1255=FACE_OUTER_BOUND('',#1968,.T.); #1256=FACE_OUTER_BOUND('',#1969,.T.); #1257=FACE_OUTER_BOUND('',#1970,.T.); #1258=FACE_OUTER_BOUND('',#1971,.T.); #1259=FACE_OUTER_BOUND('',#1972,.T.); #1260=FACE_OUTER_BOUND('',#1973,.T.); #1261=FACE_OUTER_BOUND('',#1974,.T.); #1262=FACE_OUTER_BOUND('',#1975,.T.); #1263=FACE_OUTER_BOUND('',#1976,.T.); #1264=FACE_OUTER_BOUND('',#1977,.T.); #1265=FACE_OUTER_BOUND('',#1978,.T.); #1266=FACE_OUTER_BOUND('',#1979,.T.); #1267=FACE_OUTER_BOUND('',#1980,.T.); #1268=FACE_OUTER_BOUND('',#1981,.T.); #1269=FACE_OUTER_BOUND('',#1982,.T.); #1270=FACE_OUTER_BOUND('',#1983,.T.); #1271=FACE_OUTER_BOUND('',#1984,.T.); #1272=FACE_OUTER_BOUND('',#1985,.T.); #1273=FACE_OUTER_BOUND('',#1986,.T.); #1274=FACE_OUTER_BOUND('',#1987,.T.); #1275=FACE_OUTER_BOUND('',#1988,.T.); #1276=FACE_OUTER_BOUND('',#1989,.T.); #1277=FACE_OUTER_BOUND('',#1990,.T.); #1278=FACE_OUTER_BOUND('',#1991,.T.); #1279=FACE_OUTER_BOUND('',#1992,.T.); #1280=FACE_OUTER_BOUND('',#1993,.T.); #1281=FACE_OUTER_BOUND('',#1994,.T.); #1282=FACE_OUTER_BOUND('',#1995,.T.); #1283=FACE_OUTER_BOUND('',#1996,.T.); #1284=FACE_OUTER_BOUND('',#1997,.T.); #1285=FACE_OUTER_BOUND('',#1998,.T.); #1286=FACE_OUTER_BOUND('',#1999,.T.); #1287=FACE_OUTER_BOUND('',#2000,.T.); #1288=FACE_OUTER_BOUND('',#2001,.T.); #1289=FACE_OUTER_BOUND('',#2002,.T.); #1290=FACE_OUTER_BOUND('',#2003,.T.); #1291=FACE_OUTER_BOUND('',#2004,.T.); #1292=FACE_OUTER_BOUND('',#2005,.T.); #1293=FACE_OUTER_BOUND('',#2007,.T.); #1294=FACE_OUTER_BOUND('',#2009,.T.); #1295=FACE_OUTER_BOUND('',#2010,.T.); #1296=FACE_OUTER_BOUND('',#2011,.T.); #1297=FACE_OUTER_BOUND('',#2012,.T.); #1298=FACE_OUTER_BOUND('',#2013,.T.); #1299=FACE_OUTER_BOUND('',#2014,.T.); #1300=FACE_OUTER_BOUND('',#2015,.T.); #1301=FACE_OUTER_BOUND('',#2016,.T.); #1302=FACE_OUTER_BOUND('',#2017,.T.); #1303=FACE_OUTER_BOUND('',#2018,.T.); #1304=FACE_OUTER_BOUND('',#2019,.T.); #1305=FACE_OUTER_BOUND('',#2020,.T.); #1306=FACE_OUTER_BOUND('',#2021,.T.); #1307=FACE_OUTER_BOUND('',#2022,.T.); #1308=FACE_OUTER_BOUND('',#2023,.T.); #1309=FACE_OUTER_BOUND('',#2024,.T.); #1310=FACE_OUTER_BOUND('',#2025,.T.); #1311=FACE_OUTER_BOUND('',#2026,.T.); #1312=FACE_OUTER_BOUND('',#2027,.T.); #1313=FACE_OUTER_BOUND('',#2028,.T.); #1314=FACE_OUTER_BOUND('',#2029,.T.); #1315=FACE_OUTER_BOUND('',#2030,.T.); #1316=FACE_OUTER_BOUND('',#2031,.T.); #1317=FACE_OUTER_BOUND('',#2032,.T.); #1318=FACE_OUTER_BOUND('',#2033,.T.); #1319=FACE_OUTER_BOUND('',#2034,.T.); #1320=FACE_OUTER_BOUND('',#2035,.T.); #1321=FACE_OUTER_BOUND('',#2036,.T.); #1322=FACE_OUTER_BOUND('',#2037,.T.); #1323=FACE_OUTER_BOUND('',#2038,.T.); #1324=FACE_OUTER_BOUND('',#2039,.T.); #1325=FACE_OUTER_BOUND('',#2040,.T.); #1326=FACE_OUTER_BOUND('',#2041,.T.); #1327=FACE_OUTER_BOUND('',#2042,.T.); #1328=FACE_OUTER_BOUND('',#2043,.T.); #1329=FACE_OUTER_BOUND('',#2044,.T.); #1330=FACE_OUTER_BOUND('',#2045,.T.); #1331=FACE_OUTER_BOUND('',#2046,.T.); #1332=FACE_OUTER_BOUND('',#2047,.T.); #1333=FACE_OUTER_BOUND('',#2048,.T.); #1334=FACE_OUTER_BOUND('',#2049,.T.); #1335=FACE_OUTER_BOUND('',#2050,.T.); #1336=FACE_OUTER_BOUND('',#2051,.T.); #1337=FACE_OUTER_BOUND('',#2052,.T.); #1338=FACE_OUTER_BOUND('',#2053,.T.); #1339=FACE_OUTER_BOUND('',#2054,.T.); #1340=FACE_OUTER_BOUND('',#2055,.T.); #1341=FACE_OUTER_BOUND('',#2056,.T.); #1342=FACE_OUTER_BOUND('',#2057,.T.); #1343=FACE_OUTER_BOUND('',#2058,.T.); #1344=FACE_OUTER_BOUND('',#2059,.T.); #1345=FACE_OUTER_BOUND('',#2060,.T.); #1346=FACE_OUTER_BOUND('',#2061,.T.); #1347=FACE_OUTER_BOUND('',#2062,.T.); #1348=FACE_OUTER_BOUND('',#2063,.T.); #1349=FACE_OUTER_BOUND('',#2064,.T.); #1350=FACE_OUTER_BOUND('',#2065,.T.); #1351=FACE_OUTER_BOUND('',#2066,.T.); #1352=FACE_OUTER_BOUND('',#2067,.T.); #1353=FACE_OUTER_BOUND('',#2068,.T.); #1354=FACE_OUTER_BOUND('',#2069,.T.); #1355=FACE_OUTER_BOUND('',#2070,.T.); #1356=FACE_OUTER_BOUND('',#2071,.T.); #1357=FACE_OUTER_BOUND('',#2072,.T.); #1358=FACE_OUTER_BOUND('',#2073,.T.); #1359=FACE_OUTER_BOUND('',#2074,.T.); #1360=FACE_OUTER_BOUND('',#2075,.T.); #1361=FACE_OUTER_BOUND('',#2076,.T.); #1362=FACE_OUTER_BOUND('',#2077,.T.); #1363=FACE_OUTER_BOUND('',#2078,.T.); #1364=FACE_OUTER_BOUND('',#2079,.T.); #1365=FACE_OUTER_BOUND('',#2080,.T.); #1366=FACE_OUTER_BOUND('',#2081,.T.); #1367=FACE_OUTER_BOUND('',#2082,.T.); #1368=FACE_OUTER_BOUND('',#2083,.T.); #1369=FACE_OUTER_BOUND('',#2085,.T.); #1370=FACE_OUTER_BOUND('',#2087,.T.); #1371=FACE_OUTER_BOUND('',#2088,.T.); #1372=FACE_OUTER_BOUND('',#2089,.T.); #1373=FACE_OUTER_BOUND('',#2090,.T.); #1374=FACE_OUTER_BOUND('',#2091,.T.); #1375=FACE_OUTER_BOUND('',#2092,.T.); #1376=FACE_OUTER_BOUND('',#2093,.T.); #1377=FACE_OUTER_BOUND('',#2094,.T.); #1378=FACE_OUTER_BOUND('',#2095,.T.); #1379=FACE_OUTER_BOUND('',#2096,.T.); #1380=FACE_OUTER_BOUND('',#2097,.T.); #1381=FACE_OUTER_BOUND('',#2098,.T.); #1382=FACE_OUTER_BOUND('',#2099,.T.); #1383=FACE_OUTER_BOUND('',#2100,.T.); #1384=FACE_OUTER_BOUND('',#2101,.T.); #1385=FACE_OUTER_BOUND('',#2102,.T.); #1386=FACE_OUTER_BOUND('',#2103,.T.); #1387=FACE_OUTER_BOUND('',#2104,.T.); #1388=FACE_OUTER_BOUND('',#2105,.T.); #1389=FACE_OUTER_BOUND('',#2106,.T.); #1390=FACE_OUTER_BOUND('',#2107,.T.); #1391=FACE_OUTER_BOUND('',#2108,.T.); #1392=FACE_OUTER_BOUND('',#2109,.T.); #1393=FACE_OUTER_BOUND('',#2110,.T.); #1394=FACE_OUTER_BOUND('',#2111,.T.); #1395=FACE_OUTER_BOUND('',#2112,.T.); #1396=FACE_OUTER_BOUND('',#2113,.T.); #1397=FACE_OUTER_BOUND('',#2114,.T.); #1398=FACE_OUTER_BOUND('',#2115,.T.); #1399=FACE_OUTER_BOUND('',#2116,.T.); #1400=FACE_OUTER_BOUND('',#2117,.T.); #1401=FACE_OUTER_BOUND('',#2118,.T.); #1402=FACE_OUTER_BOUND('',#2119,.T.); #1403=FACE_OUTER_BOUND('',#2120,.T.); #1404=FACE_OUTER_BOUND('',#2121,.T.); #1405=FACE_OUTER_BOUND('',#2122,.T.); #1406=FACE_OUTER_BOUND('',#2123,.T.); #1407=FACE_OUTER_BOUND('',#2124,.T.); #1408=FACE_OUTER_BOUND('',#2125,.T.); #1409=FACE_OUTER_BOUND('',#2126,.T.); #1410=FACE_OUTER_BOUND('',#2127,.T.); #1411=FACE_OUTER_BOUND('',#2128,.T.); #1412=FACE_OUTER_BOUND('',#2129,.T.); #1413=FACE_OUTER_BOUND('',#2130,.T.); #1414=FACE_OUTER_BOUND('',#2131,.T.); #1415=FACE_OUTER_BOUND('',#2132,.T.); #1416=FACE_OUTER_BOUND('',#2133,.T.); #1417=FACE_OUTER_BOUND('',#2134,.T.); #1418=FACE_OUTER_BOUND('',#2135,.T.); #1419=FACE_OUTER_BOUND('',#2136,.T.); #1420=FACE_OUTER_BOUND('',#2137,.T.); #1421=FACE_OUTER_BOUND('',#2138,.T.); #1422=FACE_OUTER_BOUND('',#2139,.T.); #1423=FACE_OUTER_BOUND('',#2140,.T.); #1424=FACE_OUTER_BOUND('',#2141,.T.); #1425=FACE_OUTER_BOUND('',#2142,.T.); #1426=FACE_OUTER_BOUND('',#2144,.T.); #1427=FACE_OUTER_BOUND('',#2146,.T.); #1428=FACE_OUTER_BOUND('',#2147,.T.); #1429=FACE_OUTER_BOUND('',#2148,.T.); #1430=FACE_OUTER_BOUND('',#2149,.T.); #1431=FACE_OUTER_BOUND('',#2150,.T.); #1432=FACE_OUTER_BOUND('',#2151,.T.); #1433=FACE_OUTER_BOUND('',#2152,.T.); #1434=FACE_OUTER_BOUND('',#2153,.T.); #1435=FACE_OUTER_BOUND('',#2154,.T.); #1436=FACE_OUTER_BOUND('',#2155,.T.); #1437=FACE_OUTER_BOUND('',#2156,.T.); #1438=FACE_OUTER_BOUND('',#2157,.T.); #1439=FACE_OUTER_BOUND('',#2158,.T.); #1440=FACE_OUTER_BOUND('',#2160,.T.); #1441=FACE_OUTER_BOUND('',#2162,.T.); #1442=FACE_OUTER_BOUND('',#2163,.T.); #1443=FACE_OUTER_BOUND('',#2164,.T.); #1444=FACE_OUTER_BOUND('',#2165,.T.); #1445=FACE_OUTER_BOUND('',#2166,.T.); #1446=FACE_OUTER_BOUND('',#2167,.T.); #1447=FACE_OUTER_BOUND('',#2168,.T.); #1448=FACE_OUTER_BOUND('',#2169,.T.); #1449=FACE_OUTER_BOUND('',#2170,.T.); #1450=FACE_OUTER_BOUND('',#2171,.T.); #1451=FACE_OUTER_BOUND('',#2172,.T.); #1452=FACE_OUTER_BOUND('',#2173,.T.); #1453=FACE_OUTER_BOUND('',#2174,.T.); #1454=FACE_OUTER_BOUND('',#2175,.T.); #1455=FACE_OUTER_BOUND('',#2176,.T.); #1456=FACE_OUTER_BOUND('',#2177,.T.); #1457=FACE_OUTER_BOUND('',#2178,.T.); #1458=FACE_OUTER_BOUND('',#2179,.T.); #1459=FACE_OUTER_BOUND('',#2180,.T.); #1460=FACE_OUTER_BOUND('',#2181,.T.); #1461=FACE_OUTER_BOUND('',#2182,.T.); #1462=FACE_OUTER_BOUND('',#2183,.T.); #1463=FACE_OUTER_BOUND('',#2184,.T.); #1464=FACE_OUTER_BOUND('',#2186,.T.); #1465=FACE_OUTER_BOUND('',#2187,.T.); #1466=FACE_OUTER_BOUND('',#2188,.T.); #1467=FACE_OUTER_BOUND('',#2189,.T.); #1468=FACE_OUTER_BOUND('',#2190,.T.); #1469=FACE_OUTER_BOUND('',#2191,.T.); #1470=FACE_OUTER_BOUND('',#2192,.T.); #1471=FACE_OUTER_BOUND('',#2193,.T.); #1472=FACE_OUTER_BOUND('',#2194,.T.); #1473=FACE_OUTER_BOUND('',#2195,.T.); #1474=FACE_OUTER_BOUND('',#2196,.T.); #1475=FACE_OUTER_BOUND('',#2197,.T.); #1476=FACE_OUTER_BOUND('',#2198,.T.); #1477=FACE_OUTER_BOUND('',#2199,.T.); #1478=FACE_OUTER_BOUND('',#2200,.T.); #1479=FACE_OUTER_BOUND('',#2201,.T.); #1480=FACE_OUTER_BOUND('',#2202,.T.); #1481=FACE_OUTER_BOUND('',#2203,.T.); #1482=FACE_OUTER_BOUND('',#2204,.T.); #1483=FACE_OUTER_BOUND('',#2205,.T.); #1484=FACE_OUTER_BOUND('',#2206,.T.); #1485=FACE_OUTER_BOUND('',#2207,.T.); #1486=FACE_OUTER_BOUND('',#2208,.T.); #1487=FACE_OUTER_BOUND('',#2209,.T.); #1488=FACE_OUTER_BOUND('',#2210,.T.); #1489=FACE_OUTER_BOUND('',#2211,.T.); #1490=FACE_OUTER_BOUND('',#2212,.T.); #1491=FACE_OUTER_BOUND('',#2213,.T.); #1492=FACE_OUTER_BOUND('',#2214,.T.); #1493=FACE_OUTER_BOUND('',#2215,.T.); #1494=FACE_OUTER_BOUND('',#2216,.T.); #1495=FACE_OUTER_BOUND('',#2217,.T.); #1496=FACE_OUTER_BOUND('',#2218,.T.); #1497=FACE_OUTER_BOUND('',#2219,.T.); #1498=FACE_OUTER_BOUND('',#2220,.T.); #1499=FACE_OUTER_BOUND('',#2221,.T.); #1500=FACE_OUTER_BOUND('',#2222,.T.); #1501=FACE_OUTER_BOUND('',#2223,.T.); #1502=FACE_OUTER_BOUND('',#2224,.T.); #1503=FACE_OUTER_BOUND('',#2225,.T.); #1504=FACE_OUTER_BOUND('',#2226,.T.); #1505=FACE_OUTER_BOUND('',#2227,.T.); #1506=FACE_OUTER_BOUND('',#2228,.T.); #1507=FACE_OUTER_BOUND('',#2229,.T.); #1508=FACE_OUTER_BOUND('',#2230,.T.); #1509=FACE_OUTER_BOUND('',#2231,.T.); #1510=FACE_OUTER_BOUND('',#2232,.T.); #1511=FACE_OUTER_BOUND('',#2233,.T.); #1512=FACE_OUTER_BOUND('',#2234,.T.); #1513=FACE_OUTER_BOUND('',#2236,.T.); #1514=FACE_OUTER_BOUND('',#2238,.T.); #1515=FACE_OUTER_BOUND('',#2239,.T.); #1516=FACE_OUTER_BOUND('',#2240,.T.); #1517=FACE_OUTER_BOUND('',#2241,.T.); #1518=FACE_OUTER_BOUND('',#2242,.T.); #1519=FACE_OUTER_BOUND('',#2243,.T.); #1520=FACE_OUTER_BOUND('',#2244,.T.); #1521=FACE_OUTER_BOUND('',#2245,.T.); #1522=FACE_OUTER_BOUND('',#2246,.T.); #1523=FACE_OUTER_BOUND('',#2247,.T.); #1524=FACE_OUTER_BOUND('',#2248,.T.); #1525=FACE_OUTER_BOUND('',#2249,.T.); #1526=FACE_OUTER_BOUND('',#2250,.T.); #1527=FACE_OUTER_BOUND('',#2251,.T.); #1528=FACE_OUTER_BOUND('',#2252,.T.); #1529=FACE_OUTER_BOUND('',#2253,.T.); #1530=FACE_OUTER_BOUND('',#2254,.T.); #1531=FACE_OUTER_BOUND('',#2255,.T.); #1532=FACE_OUTER_BOUND('',#2256,.T.); #1533=FACE_OUTER_BOUND('',#2257,.T.); #1534=FACE_OUTER_BOUND('',#2258,.T.); #1535=FACE_OUTER_BOUND('',#2259,.T.); #1536=FACE_OUTER_BOUND('',#2260,.T.); #1537=FACE_OUTER_BOUND('',#2261,.T.); #1538=FACE_OUTER_BOUND('',#2262,.T.); #1539=FACE_OUTER_BOUND('',#2263,.T.); #1540=FACE_OUTER_BOUND('',#2264,.T.); #1541=FACE_OUTER_BOUND('',#2265,.T.); #1542=FACE_OUTER_BOUND('',#2266,.T.); #1543=FACE_OUTER_BOUND('',#2267,.T.); #1544=FACE_OUTER_BOUND('',#2268,.T.); #1545=FACE_OUTER_BOUND('',#2269,.T.); #1546=FACE_OUTER_BOUND('',#2270,.T.); #1547=FACE_OUTER_BOUND('',#2271,.T.); #1548=FACE_OUTER_BOUND('',#2272,.T.); #1549=FACE_OUTER_BOUND('',#2273,.T.); #1550=FACE_OUTER_BOUND('',#2274,.T.); #1551=FACE_OUTER_BOUND('',#2275,.T.); #1552=FACE_OUTER_BOUND('',#2276,.T.); #1553=FACE_OUTER_BOUND('',#2277,.T.); #1554=FACE_OUTER_BOUND('',#2278,.T.); #1555=FACE_OUTER_BOUND('',#2279,.T.); #1556=FACE_OUTER_BOUND('',#2280,.T.); #1557=FACE_OUTER_BOUND('',#2281,.T.); #1558=FACE_OUTER_BOUND('',#2282,.T.); #1559=FACE_OUTER_BOUND('',#2283,.T.); #1560=FACE_OUTER_BOUND('',#2284,.T.); #1561=FACE_OUTER_BOUND('',#2285,.T.); #1562=FACE_OUTER_BOUND('',#2286,.T.); #1563=FACE_OUTER_BOUND('',#2287,.T.); #1564=FACE_OUTER_BOUND('',#2288,.T.); #1565=FACE_OUTER_BOUND('',#2289,.T.); #1566=FACE_OUTER_BOUND('',#2290,.T.); #1567=FACE_OUTER_BOUND('',#2291,.T.); #1568=FACE_OUTER_BOUND('',#2292,.T.); #1569=FACE_OUTER_BOUND('',#2293,.T.); #1570=FACE_OUTER_BOUND('',#2294,.T.); #1571=FACE_OUTER_BOUND('',#2295,.T.); #1572=FACE_OUTER_BOUND('',#2296,.T.); #1573=FACE_OUTER_BOUND('',#2297,.T.); #1574=FACE_OUTER_BOUND('',#2298,.T.); #1575=FACE_OUTER_BOUND('',#2300,.T.); #1576=FACE_OUTER_BOUND('',#2302,.T.); #1577=FACE_OUTER_BOUND('',#2303,.T.); #1578=FACE_OUTER_BOUND('',#2304,.T.); #1579=FACE_OUTER_BOUND('',#2305,.T.); #1580=FACE_OUTER_BOUND('',#2306,.T.); #1581=FACE_OUTER_BOUND('',#2307,.T.); #1582=FACE_OUTER_BOUND('',#2308,.T.); #1583=FACE_OUTER_BOUND('',#2309,.T.); #1584=FACE_OUTER_BOUND('',#2310,.T.); #1585=FACE_OUTER_BOUND('',#2311,.T.); #1586=FACE_OUTER_BOUND('',#2312,.T.); #1587=FACE_OUTER_BOUND('',#2313,.T.); #1588=FACE_OUTER_BOUND('',#2314,.T.); #1589=FACE_OUTER_BOUND('',#2315,.T.); #1590=FACE_OUTER_BOUND('',#2316,.T.); #1591=FACE_OUTER_BOUND('',#2317,.T.); #1592=FACE_OUTER_BOUND('',#2318,.T.); #1593=FACE_OUTER_BOUND('',#2319,.T.); #1594=FACE_OUTER_BOUND('',#2320,.T.); #1595=FACE_OUTER_BOUND('',#2322,.T.); #1596=FACE_OUTER_BOUND('',#2324,.T.); #1597=FACE_OUTER_BOUND('',#2325,.T.); #1598=FACE_OUTER_BOUND('',#2326,.T.); #1599=FACE_OUTER_BOUND('',#2327,.T.); #1600=FACE_OUTER_BOUND('',#2328,.T.); #1601=FACE_OUTER_BOUND('',#2329,.T.); #1602=FACE_OUTER_BOUND('',#2330,.T.); #1603=FACE_OUTER_BOUND('',#2331,.T.); #1604=FACE_OUTER_BOUND('',#2332,.T.); #1605=FACE_OUTER_BOUND('',#2333,.T.); #1606=FACE_OUTER_BOUND('',#2334,.T.); #1607=FACE_OUTER_BOUND('',#2335,.T.); #1608=FACE_OUTER_BOUND('',#2336,.T.); #1609=FACE_OUTER_BOUND('',#2337,.T.); #1610=FACE_OUTER_BOUND('',#2338,.T.); #1611=FACE_OUTER_BOUND('',#2339,.T.); #1612=FACE_OUTER_BOUND('',#2340,.T.); #1613=FACE_OUTER_BOUND('',#2341,.T.); #1614=FACE_OUTER_BOUND('',#2342,.T.); #1615=FACE_OUTER_BOUND('',#2343,.T.); #1616=FACE_OUTER_BOUND('',#2344,.T.); #1617=FACE_OUTER_BOUND('',#2345,.T.); #1618=FACE_OUTER_BOUND('',#2346,.T.); #1619=FACE_OUTER_BOUND('',#2347,.T.); #1620=FACE_OUTER_BOUND('',#2348,.T.); #1621=FACE_OUTER_BOUND('',#2349,.T.); #1622=FACE_OUTER_BOUND('',#2350,.T.); #1623=FACE_OUTER_BOUND('',#2351,.T.); #1624=FACE_OUTER_BOUND('',#2352,.T.); #1625=FACE_OUTER_BOUND('',#2353,.T.); #1626=FACE_OUTER_BOUND('',#2354,.T.); #1627=FACE_OUTER_BOUND('',#2355,.T.); #1628=FACE_OUTER_BOUND('',#2356,.T.); #1629=FACE_OUTER_BOUND('',#2357,.T.); #1630=FACE_OUTER_BOUND('',#2358,.T.); #1631=FACE_OUTER_BOUND('',#2360,.T.); #1632=FACE_OUTER_BOUND('',#2362,.T.); #1633=FACE_OUTER_BOUND('',#2363,.T.); #1634=FACE_OUTER_BOUND('',#2364,.T.); #1635=FACE_OUTER_BOUND('',#2365,.T.); #1636=FACE_OUTER_BOUND('',#2366,.T.); #1637=FACE_OUTER_BOUND('',#2367,.T.); #1638=FACE_OUTER_BOUND('',#2368,.T.); #1639=FACE_OUTER_BOUND('',#2369,.T.); #1640=FACE_OUTER_BOUND('',#2370,.T.); #1641=FACE_OUTER_BOUND('',#2371,.T.); #1642=FACE_OUTER_BOUND('',#2372,.T.); #1643=FACE_OUTER_BOUND('',#2373,.T.); #1644=FACE_OUTER_BOUND('',#2374,.T.); #1645=FACE_OUTER_BOUND('',#2375,.T.); #1646=FACE_OUTER_BOUND('',#2376,.T.); #1647=FACE_OUTER_BOUND('',#2377,.T.); #1648=FACE_OUTER_BOUND('',#2378,.T.); #1649=FACE_OUTER_BOUND('',#2379,.T.); #1650=FACE_OUTER_BOUND('',#2380,.T.); #1651=FACE_OUTER_BOUND('',#2381,.T.); #1652=FACE_OUTER_BOUND('',#2382,.T.); #1653=FACE_OUTER_BOUND('',#2383,.T.); #1654=FACE_OUTER_BOUND('',#2384,.T.); #1655=FACE_OUTER_BOUND('',#2385,.T.); #1656=FACE_OUTER_BOUND('',#2386,.T.); #1657=FACE_OUTER_BOUND('',#2387,.T.); #1658=FACE_OUTER_BOUND('',#2388,.T.); #1659=FACE_OUTER_BOUND('',#2389,.T.); #1660=FACE_OUTER_BOUND('',#2390,.T.); #1661=FACE_OUTER_BOUND('',#2391,.T.); #1662=FACE_OUTER_BOUND('',#2392,.T.); #1663=FACE_OUTER_BOUND('',#2393,.T.); #1664=FACE_OUTER_BOUND('',#2394,.T.); #1665=FACE_OUTER_BOUND('',#2395,.T.); #1666=FACE_OUTER_BOUND('',#2396,.T.); #1667=FACE_OUTER_BOUND('',#2397,.T.); #1668=FACE_OUTER_BOUND('',#2398,.T.); #1669=FACE_OUTER_BOUND('',#2399,.T.); #1670=FACE_OUTER_BOUND('',#2400,.T.); #1671=FACE_OUTER_BOUND('',#2401,.T.); #1672=FACE_OUTER_BOUND('',#2402,.T.); #1673=FACE_OUTER_BOUND('',#2403,.T.); #1674=FACE_OUTER_BOUND('',#2404,.T.); #1675=FACE_OUTER_BOUND('',#2405,.T.); #1676=EDGE_LOOP('',(#7936,#7937,#7938,#7939)); #1677=EDGE_LOOP('',(#7940)); #1678=EDGE_LOOP('',(#7941)); #1679=EDGE_LOOP('',(#7942,#7943,#7944,#7945,#7946,#7947,#7948,#7949,#7950, #7951)); #1680=EDGE_LOOP('',(#7952)); #1681=EDGE_LOOP('',(#7953)); #1682=EDGE_LOOP('',(#7954)); #1683=EDGE_LOOP('',(#7955,#7956,#7957,#7958,#7959,#7960)); #1684=EDGE_LOOP('',(#7961,#7962,#7963,#7964,#7965,#7966)); #1685=EDGE_LOOP('',(#7967,#7968,#7969)); #1686=EDGE_LOOP('',(#7970,#7971,#7972)); #1687=EDGE_LOOP('',(#7973,#7974,#7975,#7976,#7977)); #1688=EDGE_LOOP('',(#7978,#7979,#7980,#7981)); #1689=EDGE_LOOP('',(#7982,#7983,#7984,#7985)); #1690=EDGE_LOOP('',(#7986,#7987,#7988)); #1691=EDGE_LOOP('',(#7989,#7990,#7991,#7992)); #1692=EDGE_LOOP('',(#7993,#7994,#7995)); #1693=EDGE_LOOP('',(#7996,#7997,#7998,#7999,#8000)); #1694=EDGE_LOOP('',(#8001,#8002,#8003,#8004)); #1695=EDGE_LOOP('',(#8005,#8006,#8007,#8008)); #1696=EDGE_LOOP('',(#8009,#8010,#8011)); #1697=EDGE_LOOP('',(#8012,#8013,#8014,#8015)); #1698=EDGE_LOOP('',(#8016,#8017,#8018,#8019)); #1699=EDGE_LOOP('',(#8020,#8021,#8022,#8023)); #1700=EDGE_LOOP('',(#8024,#8025,#8026)); #1701=EDGE_LOOP('',(#8027,#8028,#8029,#8030)); #1702=EDGE_LOOP('',(#8031,#8032,#8033,#8034)); #1703=EDGE_LOOP('',(#8035,#8036,#8037)); #1704=EDGE_LOOP('',(#8038,#8039,#8040,#8041)); #1705=EDGE_LOOP('',(#8042,#8043,#8044,#8045)); #1706=EDGE_LOOP('',(#8046,#8047,#8048)); #1707=EDGE_LOOP('',(#8049,#8050,#8051)); #1708=EDGE_LOOP('',(#8052,#8053,#8054,#8055)); #1709=EDGE_LOOP('',(#8056,#8057,#8058)); #1710=EDGE_LOOP('',(#8059,#8060,#8061,#8062)); #1711=EDGE_LOOP('',(#8063,#8064,#8065,#8066)); #1712=EDGE_LOOP('',(#8067,#8068,#8069,#8070)); #1713=EDGE_LOOP('',(#8071,#8072,#8073,#8074)); #1714=EDGE_LOOP('',(#8075,#8076,#8077,#8078)); #1715=EDGE_LOOP('',(#8079,#8080,#8081,#8082)); #1716=EDGE_LOOP('',(#8083,#8084,#8085,#8086)); #1717=EDGE_LOOP('',(#8087,#8088,#8089,#8090)); #1718=EDGE_LOOP('',(#8091,#8092,#8093,#8094,#8095)); #1719=EDGE_LOOP('',(#8096,#8097,#8098,#8099)); #1720=EDGE_LOOP('',(#8100,#8101,#8102,#8103)); #1721=EDGE_LOOP('',(#8104,#8105,#8106,#8107)); #1722=EDGE_LOOP('',(#8108,#8109,#8110,#8111,#8112)); #1723=EDGE_LOOP('',(#8113,#8114,#8115,#8116,#8117)); #1724=EDGE_LOOP('',(#8118,#8119,#8120,#8121)); #1725=EDGE_LOOP('',(#8122,#8123,#8124,#8125,#8126)); #1726=EDGE_LOOP('',(#8127,#8128,#8129,#8130)); #1727=EDGE_LOOP('',(#8131,#8132,#8133,#8134,#8135,#8136,#8137,#8138,#8139, #8140,#8141)); #1728=EDGE_LOOP('',(#8142,#8143,#8144,#8145,#8146,#8147,#8148,#8149,#8150, #8151,#8152)); #1729=EDGE_LOOP('',(#8153,#8154,#8155,#8156,#8157,#8158)); #1730=EDGE_LOOP('',(#8159,#8160,#8161,#8162,#8163,#8164,#8165)); #1731=EDGE_LOOP('',(#8166,#8167)); #1732=EDGE_LOOP('',(#8168,#8169,#8170,#8171)); #1733=EDGE_LOOP('',(#8172,#8173,#8174,#8175)); #1734=EDGE_LOOP('',(#8176,#8177)); #1735=EDGE_LOOP('',(#8178,#8179,#8180,#8181)); #1736=EDGE_LOOP('',(#8182,#8183,#8184,#8185,#8186,#8187,#8188)); #1737=EDGE_LOOP('',(#8189,#8190,#8191,#8192)); #1738=EDGE_LOOP('',(#8193,#8194,#8195,#8196,#8197,#8198)); #1739=EDGE_LOOP('',(#8199,#8200,#8201,#8202)); #1740=EDGE_LOOP('',(#8203)); #1741=EDGE_LOOP('',(#8204,#8205,#8206,#8207,#8208,#8209)); #1742=EDGE_LOOP('',(#8210,#8211,#8212,#8213)); #1743=EDGE_LOOP('',(#8214,#8215,#8216,#8217)); #1744=EDGE_LOOP('',(#8218,#8219,#8220,#8221)); #1745=EDGE_LOOP('',(#8222,#8223,#8224,#8225)); #1746=EDGE_LOOP('',(#8226,#8227,#8228,#8229,#8230,#8231,#8232,#8233,#8234, #8235,#8236,#8237)); #1747=EDGE_LOOP('',(#8238,#8239,#8240,#8241,#8242,#8243,#8244,#8245)); #1748=EDGE_LOOP('',(#8246,#8247,#8248,#8249)); #1749=EDGE_LOOP('',(#8250,#8251,#8252,#8253)); #1750=EDGE_LOOP('',(#8254,#8255,#8256,#8257)); #1751=EDGE_LOOP('',(#8258,#8259,#8260,#8261)); #1752=EDGE_LOOP('',(#8262,#8263,#8264,#8265,#8266,#8267,#8268,#8269)); #1753=EDGE_LOOP('',(#8270,#8271,#8272,#8273)); #1754=EDGE_LOOP('',(#8274,#8275,#8276,#8277)); #1755=EDGE_LOOP('',(#8278,#8279,#8280,#8281)); #1756=EDGE_LOOP('',(#8282,#8283,#8284,#8285)); #1757=EDGE_LOOP('',(#8286,#8287,#8288,#8289)); #1758=EDGE_LOOP('',(#8290,#8291,#8292,#8293)); #1759=EDGE_LOOP('',(#8294,#8295,#8296,#8297,#8298,#8299,#8300,#8301)); #1760=EDGE_LOOP('',(#8302,#8303,#8304,#8305,#8306,#8307,#8308,#8309,#8310, #8311,#8312,#8313)); #1761=EDGE_LOOP('',(#8314,#8315,#8316,#8317)); #1762=EDGE_LOOP('',(#8318,#8319,#8320,#8321)); #1763=EDGE_LOOP('',(#8322,#8323,#8324,#8325,#8326,#8327,#8328,#8329)); #1764=EDGE_LOOP('',(#8330,#8331,#8332,#8333,#8334,#8335,#8336,#8337,#8338, #8339,#8340,#8341)); #1765=EDGE_LOOP('',(#8342,#8343,#8344,#8345)); #1766=EDGE_LOOP('',(#8346,#8347,#8348,#8349)); #1767=EDGE_LOOP('',(#8350,#8351,#8352,#8353)); #1768=EDGE_LOOP('',(#8354,#8355,#8356,#8357)); #1769=EDGE_LOOP('',(#8358,#8359,#8360,#8361)); #1770=EDGE_LOOP('',(#8362,#8363,#8364,#8365)); #1771=EDGE_LOOP('',(#8366,#8367,#8368,#8369)); #1772=EDGE_LOOP('',(#8370,#8371,#8372,#8373)); #1773=EDGE_LOOP('',(#8374,#8375,#8376,#8377,#8378,#8379)); #1774=EDGE_LOOP('',(#8380,#8381,#8382,#8383)); #1775=EDGE_LOOP('',(#8384,#8385,#8386,#8387)); #1776=EDGE_LOOP('',(#8388,#8389,#8390,#8391,#8392,#8393)); #1777=EDGE_LOOP('',(#8394,#8395,#8396,#8397)); #1778=EDGE_LOOP('',(#8398,#8399,#8400,#8401)); #1779=EDGE_LOOP('',(#8402,#8403,#8404,#8405)); #1780=EDGE_LOOP('',(#8406,#8407,#8408,#8409)); #1781=EDGE_LOOP('',(#8410,#8411,#8412,#8413)); #1782=EDGE_LOOP('',(#8414,#8415,#8416,#8417)); #1783=EDGE_LOOP('',(#8418,#8419,#8420,#8421)); #1784=EDGE_LOOP('',(#8422,#8423,#8424,#8425)); #1785=EDGE_LOOP('',(#8426,#8427,#8428,#8429)); #1786=EDGE_LOOP('',(#8430,#8431,#8432,#8433)); #1787=EDGE_LOOP('',(#8434,#8435,#8436,#8437)); #1788=EDGE_LOOP('',(#8438,#8439,#8440,#8441)); #1789=EDGE_LOOP('',(#8442,#8443,#8444,#8445)); #1790=EDGE_LOOP('',(#8446,#8447,#8448,#8449)); #1791=EDGE_LOOP('',(#8450,#8451,#8452,#8453)); #1792=EDGE_LOOP('',(#8454,#8455,#8456,#8457)); #1793=EDGE_LOOP('',(#8458,#8459,#8460,#8461,#8462,#8463,#8464,#8465,#8466, #8467,#8468,#8469,#8470,#8471,#8472,#8473,#8474,#8475,#8476,#8477,#8478, #8479)); #1794=EDGE_LOOP('',(#8480,#8481,#8482,#8483,#8484,#8485,#8486,#8487)); #1795=EDGE_LOOP('',(#8488,#8489,#8490,#8491)); #1796=EDGE_LOOP('',(#8492,#8493,#8494,#8495)); #1797=EDGE_LOOP('',(#8496,#8497,#8498,#8499)); #1798=EDGE_LOOP('',(#8500,#8501,#8502,#8503,#8504,#8505,#8506,#8507,#8508, #8509,#8510,#8511,#8512,#8513)); #1799=EDGE_LOOP('',(#8514,#8515,#8516,#8517,#8518,#8519,#8520,#8521)); #1800=EDGE_LOOP('',(#8522,#8523,#8524,#8525)); #1801=EDGE_LOOP('',(#8526,#8527,#8528,#8529)); #1802=EDGE_LOOP('',(#8530,#8531,#8532,#8533)); #1803=EDGE_LOOP('',(#8534,#8535,#8536,#8537,#8538,#8539,#8540,#8541,#8542, #8543,#8544,#8545)); #1804=EDGE_LOOP('',(#8546,#8547,#8548,#8549)); #1805=EDGE_LOOP('',(#8550,#8551,#8552,#8553)); #1806=EDGE_LOOP('',(#8554,#8555,#8556,#8557)); #1807=EDGE_LOOP('',(#8558,#8559,#8560,#8561,#8562,#8563,#8564,#8565)); #1808=EDGE_LOOP('',(#8566,#8567,#8568,#8569)); #1809=EDGE_LOOP('',(#8570,#8571,#8572,#8573)); #1810=EDGE_LOOP('',(#8574,#8575,#8576,#8577)); #1811=EDGE_LOOP('',(#8578,#8579,#8580,#8581)); #1812=EDGE_LOOP('',(#8582,#8583,#8584,#8585,#8586,#8587,#8588,#8589)); #1813=EDGE_LOOP('',(#8590,#8591,#8592,#8593)); #1814=EDGE_LOOP('',(#8594,#8595,#8596,#8597)); #1815=EDGE_LOOP('',(#8598,#8599,#8600,#8601)); #1816=EDGE_LOOP('',(#8602,#8603,#8604,#8605)); #1817=EDGE_LOOP('',(#8606,#8607,#8608,#8609,#8610,#8611,#8612,#8613)); #1818=EDGE_LOOP('',(#8614,#8615,#8616,#8617,#8618,#8619,#8620,#8621,#8622, #8623,#8624,#8625)); #1819=EDGE_LOOP('',(#8626,#8627,#8628,#8629)); #1820=EDGE_LOOP('',(#8630,#8631,#8632,#8633)); #1821=EDGE_LOOP('',(#8634,#8635,#8636,#8637,#8638,#8639,#8640,#8641)); #1822=EDGE_LOOP('',(#8642,#8643,#8644,#8645,#8646,#8647,#8648,#8649)); #1823=EDGE_LOOP('',(#8650,#8651,#8652,#8653)); #1824=EDGE_LOOP('',(#8654,#8655,#8656,#8657)); #1825=EDGE_LOOP('',(#8658,#8659,#8660,#8661,#8662,#8663,#8664,#8665,#8666, #8667,#8668,#8669)); #1826=EDGE_LOOP('',(#8670,#8671,#8672,#8673,#8674,#8675,#8676,#8677)); #1827=EDGE_LOOP('',(#8678,#8679,#8680,#8681)); #1828=EDGE_LOOP('',(#8682,#8683,#8684,#8685)); #1829=EDGE_LOOP('',(#8686,#8687,#8688,#8689)); #1830=EDGE_LOOP('',(#8690,#8691,#8692,#8693)); #1831=EDGE_LOOP('',(#8694,#8695,#8696,#8697)); #1832=EDGE_LOOP('',(#8698,#8699,#8700,#8701)); #1833=EDGE_LOOP('',(#8702,#8703,#8704,#8705,#8706,#8707,#8708,#8709)); #1834=EDGE_LOOP('',(#8710,#8711,#8712,#8713)); #1835=EDGE_LOOP('',(#8714,#8715,#8716,#8717)); #1836=EDGE_LOOP('',(#8718,#8719,#8720,#8721)); #1837=EDGE_LOOP('',(#8722,#8723,#8724,#8725)); #1838=EDGE_LOOP('',(#8726,#8727,#8728,#8729,#8730,#8731,#8732,#8733)); #1839=EDGE_LOOP('',(#8734,#8735,#8736,#8737,#8738,#8739,#8740,#8741,#8742, #8743,#8744,#8745)); #1840=EDGE_LOOP('',(#8746,#8747,#8748,#8749)); #1841=EDGE_LOOP('',(#8750,#8751,#8752,#8753)); #1842=EDGE_LOOP('',(#8754,#8755,#8756,#8757)); #1843=EDGE_LOOP('',(#8758,#8759,#8760,#8761)); #1844=EDGE_LOOP('',(#8762,#8763,#8764,#8765)); #1845=EDGE_LOOP('',(#8766,#8767,#8768,#8769)); #1846=EDGE_LOOP('',(#8770,#8771,#8772,#8773)); #1847=EDGE_LOOP('',(#8774,#8775,#8776,#8777)); #1848=EDGE_LOOP('',(#8778,#8779,#8780,#8781,#8782,#8783,#8784,#8785,#8786, #8787,#8788,#8789)); #1849=EDGE_LOOP('',(#8790,#8791,#8792,#8793,#8794,#8795,#8796,#8797)); #1850=EDGE_LOOP('',(#8798,#8799,#8800,#8801)); #1851=EDGE_LOOP('',(#8802,#8803,#8804,#8805)); #1852=EDGE_LOOP('',(#8806,#8807,#8808,#8809)); #1853=EDGE_LOOP('',(#8810,#8811,#8812,#8813)); #1854=EDGE_LOOP('',(#8814,#8815,#8816,#8817,#8818,#8819,#8820,#8821)); #1855=EDGE_LOOP('',(#8822,#8823,#8824,#8825)); #1856=EDGE_LOOP('',(#8826,#8827,#8828,#8829)); #1857=EDGE_LOOP('',(#8830,#8831,#8832,#8833)); #1858=EDGE_LOOP('',(#8834,#8835,#8836,#8837)); #1859=EDGE_LOOP('',(#8838,#8839,#8840,#8841)); #1860=EDGE_LOOP('',(#8842,#8843,#8844,#8845)); #1861=EDGE_LOOP('',(#8846,#8847,#8848,#8849,#8850,#8851,#8852,#8853)); #1862=EDGE_LOOP('',(#8854,#8855,#8856,#8857,#8858,#8859,#8860,#8861,#8862, #8863,#8864,#8865)); #1863=EDGE_LOOP('',(#8866,#8867,#8868,#8869)); #1864=EDGE_LOOP('',(#8870,#8871,#8872,#8873)); #1865=EDGE_LOOP('',(#8874,#8875,#8876,#8877,#8878,#8879,#8880,#8881)); #1866=EDGE_LOOP('',(#8882,#8883,#8884,#8885,#8886,#8887,#8888,#8889)); #1867=EDGE_LOOP('',(#8890,#8891,#8892,#8893)); #1868=EDGE_LOOP('',(#8894,#8895,#8896,#8897)); #1869=EDGE_LOOP('',(#8898,#8899,#8900,#8901,#8902,#8903,#8904,#8905,#8906, #8907,#8908,#8909)); #1870=EDGE_LOOP('',(#8910,#8911,#8912,#8913,#8914,#8915,#8916,#8917)); #1871=EDGE_LOOP('',(#8918,#8919,#8920,#8921)); #1872=EDGE_LOOP('',(#8922,#8923,#8924,#8925)); #1873=EDGE_LOOP('',(#8926,#8927,#8928,#8929,#8930,#8931,#8932,#8933)); #1874=EDGE_LOOP('',(#8934,#8935,#8936,#8937)); #1875=EDGE_LOOP('',(#8938,#8939,#8940,#8941)); #1876=EDGE_LOOP('',(#8942,#8943,#8944,#8945)); #1877=EDGE_LOOP('',(#8946,#8947,#8948,#8949)); #1878=EDGE_LOOP('',(#8950,#8951,#8952,#8953,#8954,#8955,#8956,#8957)); #1879=EDGE_LOOP('',(#8958,#8959,#8960,#8961)); #1880=EDGE_LOOP('',(#8962,#8963,#8964,#8965)); #1881=EDGE_LOOP('',(#8966,#8967,#8968,#8969)); #1882=EDGE_LOOP('',(#8970,#8971,#8972,#8973,#8974,#8975,#8976,#8977,#8978, #8979,#8980,#8981)); #1883=EDGE_LOOP('',(#8982,#8983,#8984,#8985)); #1884=EDGE_LOOP('',(#8986,#8987,#8988,#8989)); #1885=EDGE_LOOP('',(#8990,#8991,#8992,#8993)); #1886=EDGE_LOOP('',(#8994,#8995,#8996,#8997)); #1887=EDGE_LOOP('',(#8998,#8999,#9000,#9001)); #1888=EDGE_LOOP('',(#9002,#9003,#9004,#9005)); #1889=EDGE_LOOP('',(#9006,#9007,#9008,#9009)); #1890=EDGE_LOOP('',(#9010,#9011,#9012,#9013)); #1891=EDGE_LOOP('',(#9014,#9015,#9016,#9017)); #1892=EDGE_LOOP('',(#9018,#9019,#9020,#9021,#9022,#9023,#9024,#9025,#9026, #9027,#9028,#9029)); #1893=EDGE_LOOP('',(#9030,#9031,#9032,#9033,#9034,#9035,#9036,#9037)); #1894=EDGE_LOOP('',(#9038,#9039,#9040,#9041)); #1895=EDGE_LOOP('',(#9042,#9043,#9044,#9045)); #1896=EDGE_LOOP('',(#9046,#9047,#9048,#9049)); #1897=EDGE_LOOP('',(#9050,#9051,#9052,#9053)); #1898=EDGE_LOOP('',(#9054,#9055,#9056,#9057,#9058,#9059,#9060,#9061)); #1899=EDGE_LOOP('',(#9062,#9063,#9064,#9065)); #1900=EDGE_LOOP('',(#9066,#9067,#9068,#9069)); #1901=EDGE_LOOP('',(#9070,#9071,#9072,#9073)); #1902=EDGE_LOOP('',(#9074,#9075,#9076,#9077)); #1903=EDGE_LOOP('',(#9078,#9079,#9080,#9081)); #1904=EDGE_LOOP('',(#9082,#9083,#9084,#9085)); #1905=EDGE_LOOP('',(#9086,#9087,#9088,#9089,#9090,#9091,#9092,#9093)); #1906=EDGE_LOOP('',(#9094,#9095,#9096,#9097,#9098,#9099,#9100,#9101,#9102, #9103,#9104,#9105)); #1907=EDGE_LOOP('',(#9106,#9107,#9108,#9109)); #1908=EDGE_LOOP('',(#9110,#9111,#9112,#9113)); #1909=EDGE_LOOP('',(#9114,#9115,#9116,#9117,#9118,#9119,#9120,#9121)); #1910=EDGE_LOOP('',(#9122,#9123,#9124,#9125,#9126,#9127,#9128,#9129)); #1911=EDGE_LOOP('',(#9130,#9131,#9132,#9133)); #1912=EDGE_LOOP('',(#9134,#9135,#9136,#9137)); #1913=EDGE_LOOP('',(#9138,#9139,#9140,#9141,#9142,#9143,#9144,#9145,#9146, #9147,#9148,#9149)); #1914=EDGE_LOOP('',(#9150,#9151,#9152,#9153,#9154,#9155,#9156,#9157)); #1915=EDGE_LOOP('',(#9158,#9159,#9160,#9161)); #1916=EDGE_LOOP('',(#9162,#9163,#9164,#9165)); #1917=EDGE_LOOP('',(#9166,#9167,#9168,#9169)); #1918=EDGE_LOOP('',(#9170,#9171,#9172,#9173)); #1919=EDGE_LOOP('',(#9174,#9175,#9176,#9177)); #1920=EDGE_LOOP('',(#9178,#9179,#9180,#9181)); #1921=EDGE_LOOP('',(#9182,#9183,#9184,#9185,#9186,#9187,#9188,#9189)); #1922=EDGE_LOOP('',(#9190,#9191,#9192,#9193)); #1923=EDGE_LOOP('',(#9194,#9195,#9196,#9197)); #1924=EDGE_LOOP('',(#9198,#9199,#9200,#9201)); #1925=EDGE_LOOP('',(#9202,#9203,#9204,#9205)); #1926=EDGE_LOOP('',(#9206,#9207,#9208,#9209,#9210,#9211,#9212,#9213)); #1927=EDGE_LOOP('',(#9214,#9215,#9216,#9217,#9218,#9219,#9220,#9221,#9222, #9223,#9224,#9225)); #1928=EDGE_LOOP('',(#9226,#9227,#9228,#9229)); #1929=EDGE_LOOP('',(#9230,#9231,#9232,#9233)); #1930=EDGE_LOOP('',(#9234,#9235,#9236,#9237)); #1931=EDGE_LOOP('',(#9238,#9239,#9240,#9241)); #1932=EDGE_LOOP('',(#9242,#9243,#9244,#9245)); #1933=EDGE_LOOP('',(#9246,#9247,#9248,#9249)); #1934=EDGE_LOOP('',(#9250,#9251,#9252,#9253)); #1935=EDGE_LOOP('',(#9254,#9255,#9256,#9257)); #1936=EDGE_LOOP('',(#9258,#9259,#9260,#9261)); #1937=EDGE_LOOP('',(#9262,#9263,#9264,#9265)); #1938=EDGE_LOOP('',(#9266,#9267,#9268,#9269)); #1939=EDGE_LOOP('',(#9270,#9271,#9272,#9273)); #1940=EDGE_LOOP('',(#9274,#9275,#9276,#9277)); #1941=EDGE_LOOP('',(#9278,#9279,#9280,#9281)); #1942=EDGE_LOOP('',(#9282,#9283,#9284,#9285)); #1943=EDGE_LOOP('',(#9286,#9287,#9288,#9289)); #1944=EDGE_LOOP('',(#9290,#9291,#9292,#9293)); #1945=EDGE_LOOP('',(#9294,#9295,#9296,#9297)); #1946=EDGE_LOOP('',(#9298,#9299,#9300,#9301)); #1947=EDGE_LOOP('',(#9302,#9303,#9304,#9305)); #1948=EDGE_LOOP('',(#9306,#9307,#9308,#9309,#9310,#9311,#9312,#9313,#9314, #9315,#9316,#9317,#9318,#9319,#9320,#9321)); #1949=EDGE_LOOP('',(#9322,#9323,#9324,#9325,#9326,#9327,#9328,#9329,#9330, #9331,#9332,#9333,#9334,#9335,#9336,#9337)); #1950=EDGE_LOOP('',(#9338,#9339,#9340,#9341)); #1951=EDGE_LOOP('',(#9342,#9343,#9344,#9345)); #1952=EDGE_LOOP('',(#9346,#9347,#9348,#9349)); #1953=EDGE_LOOP('',(#9350,#9351,#9352,#9353)); #1954=EDGE_LOOP('',(#9354,#9355,#9356,#9357)); #1955=EDGE_LOOP('',(#9358,#9359,#9360,#9361)); #1956=EDGE_LOOP('',(#9362,#9363,#9364,#9365)); #1957=EDGE_LOOP('',(#9366,#9367,#9368,#9369)); #1958=EDGE_LOOP('',(#9370,#9371,#9372,#9373)); #1959=EDGE_LOOP('',(#9374,#9375,#9376,#9377)); #1960=EDGE_LOOP('',(#9378,#9379,#9380,#9381)); #1961=EDGE_LOOP('',(#9382,#9383,#9384,#9385)); #1962=EDGE_LOOP('',(#9386,#9387,#9388,#9389)); #1963=EDGE_LOOP('',(#9390,#9391,#9392,#9393)); #1964=EDGE_LOOP('',(#9394,#9395,#9396,#9397)); #1965=EDGE_LOOP('',(#9398,#9399,#9400,#9401)); #1966=EDGE_LOOP('',(#9402,#9403,#9404,#9405)); #1967=EDGE_LOOP('',(#9406,#9407,#9408,#9409,#9410,#9411,#9412,#9413,#9414, #9415,#9416)); #1968=EDGE_LOOP('',(#9417,#9418,#9419,#9420,#9421,#9422,#9423,#9424,#9425, #9426,#9427)); #1969=EDGE_LOOP('',(#9428,#9429,#9430,#9431)); #1970=EDGE_LOOP('',(#9432,#9433,#9434,#9435)); #1971=EDGE_LOOP('',(#9436,#9437,#9438,#9439)); #1972=EDGE_LOOP('',(#9440,#9441,#9442,#9443)); #1973=EDGE_LOOP('',(#9444,#9445,#9446,#9447)); #1974=EDGE_LOOP('',(#9448,#9449,#9450,#9451)); #1975=EDGE_LOOP('',(#9452,#9453,#9454,#9455)); #1976=EDGE_LOOP('',(#9456,#9457,#9458,#9459)); #1977=EDGE_LOOP('',(#9460,#9461,#9462,#9463)); #1978=EDGE_LOOP('',(#9464,#9465,#9466,#9467)); #1979=EDGE_LOOP('',(#9468,#9469,#9470,#9471)); #1980=EDGE_LOOP('',(#9472,#9473,#9474,#9475)); #1981=EDGE_LOOP('',(#9476,#9477,#9478,#9479)); #1982=EDGE_LOOP('',(#9480,#9481,#9482,#9483)); #1983=EDGE_LOOP('',(#9484,#9485,#9486,#9487)); #1984=EDGE_LOOP('',(#9488,#9489,#9490,#9491)); #1985=EDGE_LOOP('',(#9492,#9493,#9494,#9495,#9496,#9497,#9498,#9499,#9500, #9501,#9502,#9503,#9504,#9505,#9506,#9507)); #1986=EDGE_LOOP('',(#9508,#9509,#9510,#9511,#9512,#9513,#9514,#9515,#9516, #9517,#9518,#9519,#9520,#9521,#9522,#9523)); #1987=EDGE_LOOP('',(#9524,#9525,#9526,#9527)); #1988=EDGE_LOOP('',(#9528,#9529,#9530,#9531)); #1989=EDGE_LOOP('',(#9532,#9533,#9534,#9535)); #1990=EDGE_LOOP('',(#9536,#9537,#9538,#9539)); #1991=EDGE_LOOP('',(#9540,#9541,#9542,#9543)); #1992=EDGE_LOOP('',(#9544,#9545,#9546,#9547)); #1993=EDGE_LOOP('',(#9548,#9549,#9550,#9551)); #1994=EDGE_LOOP('',(#9552,#9553,#9554,#9555)); #1995=EDGE_LOOP('',(#9556,#9557,#9558,#9559)); #1996=EDGE_LOOP('',(#9560,#9561,#9562,#9563)); #1997=EDGE_LOOP('',(#9564,#9565,#9566,#9567)); #1998=EDGE_LOOP('',(#9568,#9569,#9570,#9571)); #1999=EDGE_LOOP('',(#9572,#9573,#9574,#9575)); #2000=EDGE_LOOP('',(#9576,#9577,#9578,#9579)); #2001=EDGE_LOOP('',(#9580,#9581,#9582,#9583)); #2002=EDGE_LOOP('',(#9584,#9585,#9586,#9587)); #2003=EDGE_LOOP('',(#9588,#9589,#9590,#9591)); #2004=EDGE_LOOP('',(#9592,#9593,#9594,#9595)); #2005=EDGE_LOOP('',(#9596,#9597,#9598,#9599,#9600,#9601,#9602,#9603,#9604, #9605,#9606,#9607,#9608)); #2006=EDGE_LOOP('',(#9609,#9610,#9611,#9612,#9613)); #2007=EDGE_LOOP('',(#9614,#9615,#9616,#9617,#9618,#9619,#9620,#9621,#9622, #9623,#9624,#9625,#9626)); #2008=EDGE_LOOP('',(#9627,#9628,#9629,#9630,#9631)); #2009=EDGE_LOOP('',(#9632,#9633,#9634,#9635)); #2010=EDGE_LOOP('',(#9636,#9637,#9638,#9639)); #2011=EDGE_LOOP('',(#9640,#9641,#9642,#9643)); #2012=EDGE_LOOP('',(#9644,#9645,#9646,#9647)); #2013=EDGE_LOOP('',(#9648,#9649,#9650,#9651)); #2014=EDGE_LOOP('',(#9652,#9653,#9654,#9655)); #2015=EDGE_LOOP('',(#9656,#9657,#9658,#9659)); #2016=EDGE_LOOP('',(#9660,#9661,#9662,#9663)); #2017=EDGE_LOOP('',(#9664,#9665,#9666,#9667)); #2018=EDGE_LOOP('',(#9668,#9669,#9670,#9671)); #2019=EDGE_LOOP('',(#9672,#9673,#9674,#9675)); #2020=EDGE_LOOP('',(#9676,#9677,#9678,#9679,#9680,#9681,#9682,#9683,#9684, #9685,#9686)); #2021=EDGE_LOOP('',(#9687,#9688,#9689,#9690,#9691,#9692,#9693,#9694,#9695, #9696,#9697)); #2022=EDGE_LOOP('',(#9698,#9699,#9700,#9701)); #2023=EDGE_LOOP('',(#9702,#9703,#9704,#9705)); #2024=EDGE_LOOP('',(#9706,#9707,#9708,#9709)); #2025=EDGE_LOOP('',(#9710,#9711,#9712,#9713)); #2026=EDGE_LOOP('',(#9714,#9715,#9716,#9717)); #2027=EDGE_LOOP('',(#9718,#9719,#9720,#9721)); #2028=EDGE_LOOP('',(#9722,#9723,#9724,#9725)); #2029=EDGE_LOOP('',(#9726,#9727,#9728,#9729)); #2030=EDGE_LOOP('',(#9730,#9731,#9732,#9733)); #2031=EDGE_LOOP('',(#9734,#9735,#9736,#9737)); #2032=EDGE_LOOP('',(#9738,#9739,#9740,#9741)); #2033=EDGE_LOOP('',(#9742,#9743,#9744,#9745)); #2034=EDGE_LOOP('',(#9746,#9747,#9748,#9749)); #2035=EDGE_LOOP('',(#9750,#9751,#9752,#9753)); #2036=EDGE_LOOP('',(#9754,#9755,#9756,#9757)); #2037=EDGE_LOOP('',(#9758,#9759,#9760,#9761)); #2038=EDGE_LOOP('',(#9762,#9763,#9764,#9765)); #2039=EDGE_LOOP('',(#9766,#9767,#9768,#9769)); #2040=EDGE_LOOP('',(#9770,#9771,#9772,#9773)); #2041=EDGE_LOOP('',(#9774,#9775,#9776,#9777,#9778,#9779,#9780,#9781,#9782, #9783,#9784,#9785,#9786)); #2042=EDGE_LOOP('',(#9787,#9788,#9789,#9790,#9791,#9792,#9793,#9794,#9795, #9796,#9797,#9798,#9799)); #2043=EDGE_LOOP('',(#9800,#9801,#9802,#9803)); #2044=EDGE_LOOP('',(#9804,#9805,#9806,#9807)); #2045=EDGE_LOOP('',(#9808,#9809,#9810,#9811)); #2046=EDGE_LOOP('',(#9812,#9813,#9814,#9815)); #2047=EDGE_LOOP('',(#9816,#9817,#9818,#9819)); #2048=EDGE_LOOP('',(#9820,#9821,#9822,#9823)); #2049=EDGE_LOOP('',(#9824,#9825,#9826,#9827)); #2050=EDGE_LOOP('',(#9828,#9829,#9830,#9831)); #2051=EDGE_LOOP('',(#9832,#9833,#9834,#9835)); #2052=EDGE_LOOP('',(#9836,#9837,#9838,#9839)); #2053=EDGE_LOOP('',(#9840,#9841,#9842,#9843)); #2054=EDGE_LOOP('',(#9844,#9845,#9846,#9847)); #2055=EDGE_LOOP('',(#9848,#9849,#9850,#9851)); #2056=EDGE_LOOP('',(#9852,#9853,#9854,#9855)); #2057=EDGE_LOOP('',(#9856,#9857,#9858,#9859)); #2058=EDGE_LOOP('',(#9860,#9861,#9862,#9863)); #2059=EDGE_LOOP('',(#9864,#9865,#9866,#9867)); #2060=EDGE_LOOP('',(#9868,#9869,#9870,#9871)); #2061=EDGE_LOOP('',(#9872,#9873,#9874,#9875)); #2062=EDGE_LOOP('',(#9876,#9877,#9878,#9879)); #2063=EDGE_LOOP('',(#9880,#9881,#9882,#9883,#9884,#9885,#9886,#9887,#9888, #9889,#9890,#9891,#9892,#9893,#9894,#9895,#9896,#9897,#9898,#9899)); #2064=EDGE_LOOP('',(#9900,#9901,#9902,#9903,#9904,#9905,#9906,#9907,#9908, #9909,#9910,#9911,#9912,#9913,#9914,#9915,#9916,#9917,#9918,#9919)); #2065=EDGE_LOOP('',(#9920,#9921,#9922,#9923)); #2066=EDGE_LOOP('',(#9924,#9925,#9926,#9927)); #2067=EDGE_LOOP('',(#9928,#9929,#9930,#9931)); #2068=EDGE_LOOP('',(#9932,#9933,#9934,#9935)); #2069=EDGE_LOOP('',(#9936,#9937,#9938,#9939)); #2070=EDGE_LOOP('',(#9940,#9941,#9942,#9943)); #2071=EDGE_LOOP('',(#9944,#9945,#9946,#9947)); #2072=EDGE_LOOP('',(#9948,#9949,#9950,#9951)); #2073=EDGE_LOOP('',(#9952,#9953,#9954,#9955)); #2074=EDGE_LOOP('',(#9956,#9957,#9958,#9959)); #2075=EDGE_LOOP('',(#9960,#9961,#9962,#9963)); #2076=EDGE_LOOP('',(#9964,#9965,#9966,#9967)); #2077=EDGE_LOOP('',(#9968,#9969,#9970,#9971)); #2078=EDGE_LOOP('',(#9972,#9973,#9974,#9975)); #2079=EDGE_LOOP('',(#9976,#9977,#9978,#9979)); #2080=EDGE_LOOP('',(#9980,#9981,#9982,#9983)); #2081=EDGE_LOOP('',(#9984,#9985,#9986,#9987)); #2082=EDGE_LOOP('',(#9988,#9989,#9990,#9991)); #2083=EDGE_LOOP('',(#9992,#9993,#9994,#9995,#9996,#9997,#9998,#9999,#10000, #10001,#10002)); #2084=EDGE_LOOP('',(#10003,#10004,#10005,#10006,#10007,#10008,#10009)); #2085=EDGE_LOOP('',(#10010,#10011,#10012,#10013,#10014,#10015,#10016,#10017, #10018,#10019,#10020)); #2086=EDGE_LOOP('',(#10021,#10022,#10023,#10024,#10025,#10026,#10027)); #2087=EDGE_LOOP('',(#10028,#10029,#10030,#10031)); #2088=EDGE_LOOP('',(#10032,#10033,#10034,#10035)); #2089=EDGE_LOOP('',(#10036,#10037,#10038,#10039)); #2090=EDGE_LOOP('',(#10040,#10041,#10042,#10043)); #2091=EDGE_LOOP('',(#10044,#10045,#10046,#10047)); #2092=EDGE_LOOP('',(#10048,#10049,#10050,#10051)); #2093=EDGE_LOOP('',(#10052,#10053,#10054,#10055)); #2094=EDGE_LOOP('',(#10056,#10057,#10058,#10059)); #2095=EDGE_LOOP('',(#10060,#10061,#10062,#10063)); #2096=EDGE_LOOP('',(#10064,#10065,#10066,#10067)); #2097=EDGE_LOOP('',(#10068,#10069,#10070,#10071)); #2098=EDGE_LOOP('',(#10072,#10073,#10074,#10075)); #2099=EDGE_LOOP('',(#10076,#10077,#10078,#10079,#10080,#10081,#10082,#10083, #10084,#10085,#10086,#10087)); #2100=EDGE_LOOP('',(#10088,#10089,#10090,#10091,#10092,#10093,#10094,#10095, #10096,#10097,#10098,#10099)); #2101=EDGE_LOOP('',(#10100,#10101,#10102,#10103)); #2102=EDGE_LOOP('',(#10104,#10105,#10106,#10107)); #2103=EDGE_LOOP('',(#10108,#10109,#10110,#10111)); #2104=EDGE_LOOP('',(#10112,#10113,#10114,#10115)); #2105=EDGE_LOOP('',(#10116,#10117,#10118,#10119)); #2106=EDGE_LOOP('',(#10120,#10121,#10122,#10123)); #2107=EDGE_LOOP('',(#10124,#10125,#10126,#10127)); #2108=EDGE_LOOP('',(#10128,#10129,#10130,#10131)); #2109=EDGE_LOOP('',(#10132,#10133,#10134,#10135)); #2110=EDGE_LOOP('',(#10136,#10137,#10138,#10139)); #2111=EDGE_LOOP('',(#10140,#10141,#10142,#10143)); #2112=EDGE_LOOP('',(#10144,#10145,#10146,#10147)); #2113=EDGE_LOOP('',(#10148,#10149,#10150,#10151)); #2114=EDGE_LOOP('',(#10152,#10153,#10154,#10155)); #2115=EDGE_LOOP('',(#10156,#10157,#10158,#10159)); #2116=EDGE_LOOP('',(#10160,#10161,#10162,#10163)); #2117=EDGE_LOOP('',(#10164,#10165,#10166,#10167)); #2118=EDGE_LOOP('',(#10168,#10169,#10170,#10171)); #2119=EDGE_LOOP('',(#10172,#10173,#10174,#10175)); #2120=EDGE_LOOP('',(#10176,#10177,#10178,#10179)); #2121=EDGE_LOOP('',(#10180,#10181,#10182,#10183)); #2122=EDGE_LOOP('',(#10184,#10185,#10186,#10187)); #2123=EDGE_LOOP('',(#10188,#10189,#10190,#10191)); #2124=EDGE_LOOP('',(#10192,#10193,#10194,#10195)); #2125=EDGE_LOOP('',(#10196,#10197,#10198,#10199)); #2126=EDGE_LOOP('',(#10200,#10201,#10202,#10203)); #2127=EDGE_LOOP('',(#10204,#10205,#10206,#10207)); #2128=EDGE_LOOP('',(#10208,#10209,#10210,#10211,#10212,#10213,#10214,#10215, #10216,#10217,#10218,#10219,#10220,#10221,#10222,#10223,#10224,#10225,#10226, #10227,#10228,#10229,#10230,#10231,#10232,#10233,#10234)); #2129=EDGE_LOOP('',(#10235,#10236,#10237,#10238,#10239,#10240,#10241,#10242, #10243,#10244,#10245,#10246,#10247,#10248,#10249,#10250,#10251,#10252,#10253, #10254,#10255,#10256,#10257,#10258,#10259,#10260,#10261)); #2130=EDGE_LOOP('',(#10262,#10263,#10264,#10265)); #2131=EDGE_LOOP('',(#10266,#10267,#10268,#10269)); #2132=EDGE_LOOP('',(#10270,#10271,#10272,#10273)); #2133=EDGE_LOOP('',(#10274,#10275,#10276,#10277)); #2134=EDGE_LOOP('',(#10278,#10279,#10280,#10281)); #2135=EDGE_LOOP('',(#10282,#10283,#10284,#10285)); #2136=EDGE_LOOP('',(#10286,#10287,#10288,#10289)); #2137=EDGE_LOOP('',(#10290,#10291,#10292,#10293)); #2138=EDGE_LOOP('',(#10294,#10295,#10296,#10297)); #2139=EDGE_LOOP('',(#10298,#10299,#10300,#10301)); #2140=EDGE_LOOP('',(#10302,#10303,#10304,#10305)); #2141=EDGE_LOOP('',(#10306,#10307,#10308,#10309)); #2142=EDGE_LOOP('',(#10310,#10311,#10312,#10313)); #2143=EDGE_LOOP('',(#10314,#10315,#10316,#10317,#10318,#10319,#10320,#10321)); #2144=EDGE_LOOP('',(#10322,#10323,#10324,#10325)); #2145=EDGE_LOOP('',(#10326,#10327,#10328,#10329,#10330,#10331,#10332,#10333)); #2146=EDGE_LOOP('',(#10334,#10335,#10336,#10337)); #2147=EDGE_LOOP('',(#10338,#10339,#10340,#10341)); #2148=EDGE_LOOP('',(#10342,#10343,#10344,#10345)); #2149=EDGE_LOOP('',(#10346,#10347,#10348,#10349)); #2150=EDGE_LOOP('',(#10350,#10351,#10352,#10353)); #2151=EDGE_LOOP('',(#10354,#10355,#10356,#10357)); #2152=EDGE_LOOP('',(#10358,#10359,#10360,#10361)); #2153=EDGE_LOOP('',(#10362,#10363,#10364,#10365)); #2154=EDGE_LOOP('',(#10366,#10367,#10368,#10369)); #2155=EDGE_LOOP('',(#10370,#10371,#10372,#10373)); #2156=EDGE_LOOP('',(#10374,#10375,#10376,#10377)); #2157=EDGE_LOOP('',(#10378,#10379,#10380,#10381)); #2158=EDGE_LOOP('',(#10382,#10383,#10384,#10385)); #2159=EDGE_LOOP('',(#10386,#10387,#10388,#10389,#10390,#10391,#10392,#10393)); #2160=EDGE_LOOP('',(#10394,#10395,#10396,#10397)); #2161=EDGE_LOOP('',(#10398,#10399,#10400,#10401,#10402,#10403,#10404,#10405)); #2162=EDGE_LOOP('',(#10406,#10407,#10408,#10409)); #2163=EDGE_LOOP('',(#10410,#10411,#10412,#10413)); #2164=EDGE_LOOP('',(#10414,#10415,#10416,#10417)); #2165=EDGE_LOOP('',(#10418,#10419,#10420,#10421)); #2166=EDGE_LOOP('',(#10422,#10423,#10424,#10425)); #2167=EDGE_LOOP('',(#10426,#10427,#10428,#10429)); #2168=EDGE_LOOP('',(#10430,#10431,#10432,#10433)); #2169=EDGE_LOOP('',(#10434,#10435,#10436,#10437)); #2170=EDGE_LOOP('',(#10438,#10439,#10440,#10441)); #2171=EDGE_LOOP('',(#10442,#10443,#10444,#10445)); #2172=EDGE_LOOP('',(#10446,#10447,#10448,#10449,#10450,#10451,#10452,#10453, #10454,#10455)); #2173=EDGE_LOOP('',(#10456,#10457,#10458,#10459,#10460,#10461,#10462,#10463, #10464,#10465)); #2174=EDGE_LOOP('',(#10466,#10467,#10468,#10469)); #2175=EDGE_LOOP('',(#10470,#10471,#10472,#10473,#10474,#10475,#10476,#10477)); #2176=EDGE_LOOP('',(#10478,#10479,#10480,#10481)); #2177=EDGE_LOOP('',(#10482,#10483,#10484,#10485)); #2178=EDGE_LOOP('',(#10486,#10487,#10488,#10489)); #2179=EDGE_LOOP('',(#10490,#10491,#10492,#10493)); #2180=EDGE_LOOP('',(#10494,#10495,#10496,#10497)); #2181=EDGE_LOOP('',(#10498,#10499,#10500,#10501)); #2182=EDGE_LOOP('',(#10502,#10503,#10504,#10505)); #2183=EDGE_LOOP('',(#10506,#10507,#10508,#10509,#10510,#10511,#10512,#10513)); #2184=EDGE_LOOP('',(#10514)); #2185=EDGE_LOOP('',(#10515)); #2186=EDGE_LOOP('',(#10516)); #2187=EDGE_LOOP('',(#10517)); #2188=EDGE_LOOP('',(#10518,#10519,#10520,#10521)); #2189=EDGE_LOOP('',(#10522,#10523,#10524,#10525)); #2190=EDGE_LOOP('',(#10526,#10527,#10528,#10529)); #2191=EDGE_LOOP('',(#10530,#10531,#10532,#10533)); #2192=EDGE_LOOP('',(#10534,#10535,#10536,#10537)); #2193=EDGE_LOOP('',(#10538,#10539,#10540,#10541)); #2194=EDGE_LOOP('',(#10542,#10543,#10544,#10545)); #2195=EDGE_LOOP('',(#10546,#10547,#10548,#10549)); #2196=EDGE_LOOP('',(#10550,#10551,#10552,#10553)); #2197=EDGE_LOOP('',(#10554,#10555,#10556,#10557)); #2198=EDGE_LOOP('',(#10558,#10559,#10560,#10561)); #2199=EDGE_LOOP('',(#10562,#10563,#10564,#10565,#10566,#10567,#10568,#10569, #10570)); #2200=EDGE_LOOP('',(#10571,#10572,#10573,#10574)); #2201=EDGE_LOOP('',(#10575,#10576,#10577,#10578)); #2202=EDGE_LOOP('',(#10579,#10580,#10581,#10582)); #2203=EDGE_LOOP('',(#10583,#10584,#10585,#10586)); #2204=EDGE_LOOP('',(#10587,#10588,#10589,#10590,#10591,#10592,#10593,#10594, #10595)); #2205=EDGE_LOOP('',(#10596,#10597,#10598,#10599)); #2206=EDGE_LOOP('',(#10600,#10601,#10602,#10603)); #2207=EDGE_LOOP('',(#10604,#10605,#10606,#10607)); #2208=EDGE_LOOP('',(#10608,#10609,#10610,#10611)); #2209=EDGE_LOOP('',(#10612,#10613,#10614,#10615)); #2210=EDGE_LOOP('',(#10616,#10617,#10618,#10619)); #2211=EDGE_LOOP('',(#10620,#10621,#10622,#10623)); #2212=EDGE_LOOP('',(#10624,#10625,#10626,#10627,#10628,#10629,#10630)); #2213=EDGE_LOOP('',(#10631,#10632,#10633,#10634,#10635,#10636,#10637)); #2214=EDGE_LOOP('',(#10638,#10639,#10640,#10641)); #2215=EDGE_LOOP('',(#10642,#10643,#10644,#10645)); #2216=EDGE_LOOP('',(#10646,#10647,#10648,#10649)); #2217=EDGE_LOOP('',(#10650,#10651,#10652,#10653)); #2218=EDGE_LOOP('',(#10654,#10655,#10656,#10657)); #2219=EDGE_LOOP('',(#10658,#10659,#10660,#10661)); #2220=EDGE_LOOP('',(#10662,#10663,#10664,#10665)); #2221=EDGE_LOOP('',(#10666,#10667,#10668,#10669,#10670,#10671,#10672)); #2222=EDGE_LOOP('',(#10673,#10674,#10675,#10676,#10677,#10678,#10679)); #2223=EDGE_LOOP('',(#10680,#10681,#10682,#10683)); #2224=EDGE_LOOP('',(#10684,#10685,#10686,#10687)); #2225=EDGE_LOOP('',(#10688,#10689,#10690,#10691)); #2226=EDGE_LOOP('',(#10692,#10693,#10694,#10695)); #2227=EDGE_LOOP('',(#10696,#10697,#10698,#10699)); #2228=EDGE_LOOP('',(#10700,#10701,#10702,#10703)); #2229=EDGE_LOOP('',(#10704,#10705,#10706,#10707)); #2230=EDGE_LOOP('',(#10708,#10709,#10710,#10711)); #2231=EDGE_LOOP('',(#10712,#10713,#10714,#10715)); #2232=EDGE_LOOP('',(#10716,#10717,#10718,#10719)); #2233=EDGE_LOOP('',(#10720,#10721,#10722,#10723)); #2234=EDGE_LOOP('',(#10724,#10725,#10726,#10727,#10728,#10729,#10730,#10731)); #2235=EDGE_LOOP('',(#10732,#10733,#10734)); #2236=EDGE_LOOP('',(#10735,#10736,#10737,#10738,#10739,#10740,#10741,#10742)); #2237=EDGE_LOOP('',(#10743,#10744,#10745)); #2238=EDGE_LOOP('',(#10746,#10747,#10748,#10749)); #2239=EDGE_LOOP('',(#10750,#10751,#10752,#10753)); #2240=EDGE_LOOP('',(#10754,#10755,#10756,#10757)); #2241=EDGE_LOOP('',(#10758,#10759,#10760,#10761)); #2242=EDGE_LOOP('',(#10762,#10763,#10764,#10765)); #2243=EDGE_LOOP('',(#10766,#10767,#10768,#10769)); #2244=EDGE_LOOP('',(#10770,#10771,#10772,#10773,#10774,#10775)); #2245=EDGE_LOOP('',(#10776,#10777,#10778,#10779,#10780,#10781)); #2246=EDGE_LOOP('',(#10782,#10783,#10784,#10785)); #2247=EDGE_LOOP('',(#10786,#10787,#10788,#10789)); #2248=EDGE_LOOP('',(#10790,#10791,#10792,#10793)); #2249=EDGE_LOOP('',(#10794,#10795,#10796,#10797)); #2250=EDGE_LOOP('',(#10798,#10799,#10800,#10801)); #2251=EDGE_LOOP('',(#10802,#10803,#10804,#10805)); #2252=EDGE_LOOP('',(#10806,#10807,#10808,#10809)); #2253=EDGE_LOOP('',(#10810,#10811,#10812,#10813)); #2254=EDGE_LOOP('',(#10814,#10815,#10816,#10817,#10818,#10819,#10820,#10821)); #2255=EDGE_LOOP('',(#10822,#10823,#10824,#10825,#10826,#10827,#10828,#10829)); #2256=EDGE_LOOP('',(#10830,#10831,#10832,#10833)); #2257=EDGE_LOOP('',(#10834,#10835,#10836,#10837)); #2258=EDGE_LOOP('',(#10838,#10839,#10840,#10841)); #2259=EDGE_LOOP('',(#10842,#10843,#10844,#10845)); #2260=EDGE_LOOP('',(#10846,#10847,#10848,#10849)); #2261=EDGE_LOOP('',(#10850,#10851,#10852,#10853)); #2262=EDGE_LOOP('',(#10854,#10855,#10856,#10857)); #2263=EDGE_LOOP('',(#10858,#10859,#10860,#10861)); #2264=EDGE_LOOP('',(#10862,#10863,#10864,#10865,#10866,#10867,#10868,#10869)); #2265=EDGE_LOOP('',(#10870,#10871,#10872,#10873,#10874,#10875,#10876,#10877)); #2266=EDGE_LOOP('',(#10878,#10879,#10880,#10881)); #2267=EDGE_LOOP('',(#10882,#10883,#10884,#10885)); #2268=EDGE_LOOP('',(#10886,#10887,#10888,#10889)); #2269=EDGE_LOOP('',(#10890,#10891,#10892,#10893)); #2270=EDGE_LOOP('',(#10894,#10895,#10896,#10897)); #2271=EDGE_LOOP('',(#10898,#10899,#10900,#10901)); #2272=EDGE_LOOP('',(#10902,#10903,#10904,#10905)); #2273=EDGE_LOOP('',(#10906,#10907,#10908,#10909)); #2274=EDGE_LOOP('',(#10910,#10911,#10912,#10913)); #2275=EDGE_LOOP('',(#10914,#10915,#10916,#10917)); #2276=EDGE_LOOP('',(#10918,#10919,#10920,#10921)); #2277=EDGE_LOOP('',(#10922,#10923,#10924,#10925)); #2278=EDGE_LOOP('',(#10926,#10927,#10928,#10929)); #2279=EDGE_LOOP('',(#10930,#10931,#10932,#10933)); #2280=EDGE_LOOP('',(#10934,#10935,#10936,#10937)); #2281=EDGE_LOOP('',(#10938,#10939,#10940,#10941)); #2282=EDGE_LOOP('',(#10942,#10943,#10944,#10945)); #2283=EDGE_LOOP('',(#10946,#10947,#10948,#10949)); #2284=EDGE_LOOP('',(#10950,#10951,#10952,#10953)); #2285=EDGE_LOOP('',(#10954,#10955,#10956,#10957)); #2286=EDGE_LOOP('',(#10958,#10959,#10960,#10961)); #2287=EDGE_LOOP('',(#10962,#10963,#10964,#10965)); #2288=EDGE_LOOP('',(#10966,#10967,#10968,#10969,#10970,#10971,#10972,#10973, #10974,#10975,#10976,#10977,#10978,#10979,#10980,#10981)); #2289=EDGE_LOOP('',(#10982,#10983,#10984,#10985,#10986,#10987,#10988,#10989, #10990,#10991,#10992,#10993,#10994,#10995,#10996,#10997)); #2290=EDGE_LOOP('',(#10998,#10999,#11000,#11001)); #2291=EDGE_LOOP('',(#11002,#11003,#11004,#11005)); #2292=EDGE_LOOP('',(#11006,#11007,#11008,#11009)); #2293=EDGE_LOOP('',(#11010,#11011,#11012,#11013)); #2294=EDGE_LOOP('',(#11014,#11015,#11016,#11017)); #2295=EDGE_LOOP('',(#11018,#11019,#11020,#11021)); #2296=EDGE_LOOP('',(#11022,#11023,#11024,#11025)); #2297=EDGE_LOOP('',(#11026,#11027,#11028,#11029)); #2298=EDGE_LOOP('',(#11030,#11031,#11032,#11033)); #2299=EDGE_LOOP('',(#11034,#11035,#11036,#11037)); #2300=EDGE_LOOP('',(#11038,#11039,#11040,#11041)); #2301=EDGE_LOOP('',(#11042,#11043,#11044,#11045)); #2302=EDGE_LOOP('',(#11046,#11047,#11048,#11049)); #2303=EDGE_LOOP('',(#11050,#11051,#11052,#11053)); #2304=EDGE_LOOP('',(#11054,#11055,#11056,#11057)); #2305=EDGE_LOOP('',(#11058,#11059,#11060,#11061)); #2306=EDGE_LOOP('',(#11062,#11063,#11064,#11065)); #2307=EDGE_LOOP('',(#11066,#11067,#11068,#11069)); #2308=EDGE_LOOP('',(#11070,#11071,#11072,#11073)); #2309=EDGE_LOOP('',(#11074,#11075,#11076,#11077)); #2310=EDGE_LOOP('',(#11078,#11079,#11080,#11081)); #2311=EDGE_LOOP('',(#11082,#11083,#11084,#11085)); #2312=EDGE_LOOP('',(#11086,#11087,#11088,#11089)); #2313=EDGE_LOOP('',(#11090,#11091,#11092,#11093)); #2314=EDGE_LOOP('',(#11094,#11095,#11096,#11097)); #2315=EDGE_LOOP('',(#11098,#11099,#11100,#11101)); #2316=EDGE_LOOP('',(#11102,#11103,#11104,#11105)); #2317=EDGE_LOOP('',(#11106,#11107,#11108,#11109)); #2318=EDGE_LOOP('',(#11110,#11111,#11112,#11113)); #2319=EDGE_LOOP('',(#11114,#11115,#11116,#11117)); #2320=EDGE_LOOP('',(#11118,#11119,#11120,#11121,#11122,#11123,#11124,#11125, #11126,#11127,#11128,#11129,#11130)); #2321=EDGE_LOOP('',(#11131,#11132,#11133,#11134,#11135)); #2322=EDGE_LOOP('',(#11136,#11137,#11138,#11139,#11140,#11141,#11142,#11143, #11144,#11145,#11146,#11147,#11148)); #2323=EDGE_LOOP('',(#11149,#11150,#11151,#11152,#11153)); #2324=EDGE_LOOP('',(#11154,#11155,#11156,#11157)); #2325=EDGE_LOOP('',(#11158,#11159,#11160,#11161)); #2326=EDGE_LOOP('',(#11162,#11163,#11164,#11165)); #2327=EDGE_LOOP('',(#11166,#11167,#11168,#11169)); #2328=EDGE_LOOP('',(#11170,#11171,#11172,#11173)); #2329=EDGE_LOOP('',(#11174,#11175,#11176,#11177)); #2330=EDGE_LOOP('',(#11178,#11179,#11180,#11181)); #2331=EDGE_LOOP('',(#11182,#11183,#11184,#11185)); #2332=EDGE_LOOP('',(#11186,#11187,#11188,#11189)); #2333=EDGE_LOOP('',(#11190,#11191,#11192,#11193)); #2334=EDGE_LOOP('',(#11194,#11195,#11196,#11197)); #2335=EDGE_LOOP('',(#11198,#11199,#11200,#11201)); #2336=EDGE_LOOP('',(#11202,#11203,#11204,#11205)); #2337=EDGE_LOOP('',(#11206,#11207,#11208,#11209)); #2338=EDGE_LOOP('',(#11210,#11211,#11212,#11213)); #2339=EDGE_LOOP('',(#11214,#11215,#11216,#11217)); #2340=EDGE_LOOP('',(#11218,#11219,#11220,#11221)); #2341=EDGE_LOOP('',(#11222,#11223,#11224,#11225)); #2342=EDGE_LOOP('',(#11226,#11227,#11228,#11229)); #2343=EDGE_LOOP('',(#11230,#11231,#11232,#11233)); #2344=EDGE_LOOP('',(#11234,#11235,#11236,#11237)); #2345=EDGE_LOOP('',(#11238,#11239,#11240,#11241)); #2346=EDGE_LOOP('',(#11242,#11243,#11244,#11245)); #2347=EDGE_LOOP('',(#11246,#11247,#11248,#11249)); #2348=EDGE_LOOP('',(#11250,#11251,#11252,#11253,#11254,#11255,#11256,#11257, #11258,#11259,#11260,#11261,#11262,#11263,#11264,#11265,#11266,#11267)); #2349=EDGE_LOOP('',(#11268,#11269,#11270,#11271,#11272,#11273,#11274,#11275, #11276,#11277,#11278,#11279,#11280,#11281,#11282,#11283,#11284,#11285)); #2350=EDGE_LOOP('',(#11286,#11287,#11288,#11289)); #2351=EDGE_LOOP('',(#11290,#11291,#11292,#11293)); #2352=EDGE_LOOP('',(#11294,#11295,#11296,#11297)); #2353=EDGE_LOOP('',(#11298,#11299,#11300,#11301)); #2354=EDGE_LOOP('',(#11302,#11303,#11304,#11305)); #2355=EDGE_LOOP('',(#11306,#11307,#11308,#11309)); #2356=EDGE_LOOP('',(#11310,#11311,#11312,#11313)); #2357=EDGE_LOOP('',(#11314,#11315,#11316,#11317)); #2358=EDGE_LOOP('',(#11318,#11319,#11320,#11321)); #2359=EDGE_LOOP('',(#11322,#11323,#11324,#11325)); #2360=EDGE_LOOP('',(#11326,#11327,#11328,#11329)); #2361=EDGE_LOOP('',(#11330,#11331,#11332,#11333)); #2362=EDGE_LOOP('',(#11334,#11335,#11336,#11337)); #2363=EDGE_LOOP('',(#11338,#11339,#11340,#11341)); #2364=EDGE_LOOP('',(#11342,#11343,#11344,#11345)); #2365=EDGE_LOOP('',(#11346,#11347,#11348,#11349)); #2366=EDGE_LOOP('',(#11350,#11351,#11352,#11353)); #2367=EDGE_LOOP('',(#11354,#11355,#11356,#11357)); #2368=EDGE_LOOP('',(#11358,#11359,#11360,#11361)); #2369=EDGE_LOOP('',(#11362,#11363,#11364,#11365)); #2370=EDGE_LOOP('',(#11366,#11367,#11368,#11369)); #2371=EDGE_LOOP('',(#11370,#11371,#11372,#11373)); #2372=EDGE_LOOP('',(#11374,#11375,#11376,#11377)); #2373=EDGE_LOOP('',(#11378,#11379,#11380,#11381)); #2374=EDGE_LOOP('',(#11382,#11383,#11384,#11385)); #2375=EDGE_LOOP('',(#11386,#11387,#11388,#11389,#11390,#11391,#11392,#11393, #11394,#11395,#11396,#11397,#11398)); #2376=EDGE_LOOP('',(#11399,#11400,#11401,#11402,#11403,#11404,#11405,#11406, #11407,#11408,#11409,#11410,#11411)); #2377=EDGE_LOOP('',(#11412,#11413,#11414,#11415)); #2378=EDGE_LOOP('',(#11416,#11417,#11418,#11419)); #2379=EDGE_LOOP('',(#11420,#11421,#11422,#11423)); #2380=EDGE_LOOP('',(#11424,#11425,#11426,#11427)); #2381=EDGE_LOOP('',(#11428,#11429,#11430,#11431)); #2382=EDGE_LOOP('',(#11432,#11433,#11434,#11435)); #2383=EDGE_LOOP('',(#11436,#11437,#11438,#11439)); #2384=EDGE_LOOP('',(#11440,#11441,#11442,#11443)); #2385=EDGE_LOOP('',(#11444,#11445,#11446,#11447)); #2386=EDGE_LOOP('',(#11448,#11449,#11450,#11451)); #2387=EDGE_LOOP('',(#11452,#11453,#11454,#11455)); #2388=EDGE_LOOP('',(#11456,#11457,#11458,#11459)); #2389=EDGE_LOOP('',(#11460,#11461,#11462,#11463)); #2390=EDGE_LOOP('',(#11464,#11465,#11466,#11467)); #2391=EDGE_LOOP('',(#11468,#11469,#11470,#11471)); #2392=EDGE_LOOP('',(#11472,#11473,#11474,#11475)); #2393=EDGE_LOOP('',(#11476,#11477,#11478,#11479)); #2394=EDGE_LOOP('',(#11480,#11481,#11482,#11483)); #2395=EDGE_LOOP('',(#11484,#11485,#11486,#11487)); #2396=EDGE_LOOP('',(#11488,#11489,#11490,#11491)); #2397=EDGE_LOOP('',(#11492,#11493,#11494,#11495)); #2398=EDGE_LOOP('',(#11496,#11497,#11498,#11499)); #2399=EDGE_LOOP('',(#11500,#11501,#11502,#11503)); #2400=EDGE_LOOP('',(#11504,#11505,#11506,#11507)); #2401=EDGE_LOOP('',(#11508,#11509,#11510,#11511)); #2402=EDGE_LOOP('',(#11512,#11513,#11514,#11515)); #2403=EDGE_LOOP('',(#11516,#11517,#11518,#11519)); #2404=EDGE_LOOP('',(#11520,#11521,#11522,#11523,#11524,#11525,#11526,#11527, #11528,#11529,#11530,#11531,#11532,#11533,#11534,#11535,#11536,#11537,#11538, #11539,#11540)); #2405=EDGE_LOOP('',(#11541,#11542,#11543,#11544,#11545,#11546,#11547,#11548, #11549,#11550,#11551,#11552,#11553,#11554,#11555,#11556,#11557,#11558,#11559, #11560,#11561)); #2406=LINE('',#16083,#3666); #2407=LINE('',#16085,#3667); #2408=LINE('',#16087,#3668); #2409=LINE('',#16088,#3669); #2410=LINE('',#16097,#3670); #2411=LINE('',#16101,#3671); #2412=LINE('',#16103,#3672); #2413=LINE('',#16105,#3673); #2414=LINE('',#16109,#3674); #2415=LINE('',#16113,#3675); #2416=LINE('',#16130,#3676); #2417=LINE('',#16134,#3677); #2418=LINE('',#16154,#3678); #2419=LINE('',#16157,#3679); #2420=LINE('',#16174,#3680); #2421=LINE('',#16176,#3681); #2422=LINE('',#16394,#3682); #2423=LINE('',#16395,#3683); #2424=LINE('',#16403,#3684); #2425=LINE('',#16508,#3685); #2426=LINE('',#16555,#3686); #2427=LINE('',#16560,#3687); #2428=LINE('',#16562,#3688); #2429=LINE('',#16594,#3689); #2430=LINE('',#16595,#3690); #2431=LINE('',#16725,#3691); #2432=LINE('',#16727,#3692); #2433=LINE('',#16729,#3693); #2434=LINE('',#16735,#3694); #2435=LINE('',#16737,#3695); #2436=LINE('',#16740,#3696); #2437=LINE('',#16741,#3697); #2438=LINE('',#16745,#3698); #2439=LINE('',#16746,#3699); #2440=LINE('',#16748,#3700); #2441=LINE('',#16750,#3701); #2442=LINE('',#16752,#3702); #2443=LINE('',#16767,#3703); #2444=LINE('',#16775,#3704); #2445=LINE('',#16777,#3705); #2446=LINE('',#16779,#3706); #2447=LINE('',#16780,#3707); #2448=LINE('',#16786,#3708); #2449=LINE('',#16789,#3709); #2450=LINE('',#16791,#3710); #2451=LINE('',#16792,#3711); #2452=LINE('',#16798,#3712); #2453=LINE('',#16801,#3713); #2454=LINE('',#16804,#3714); #2455=LINE('',#16806,#3715); #2456=LINE('',#16808,#3716); #2457=LINE('',#16810,#3717); #2458=LINE('',#16811,#3718); #2459=LINE('',#16813,#3719); #2460=LINE('',#16815,#3720); #2461=LINE('',#16817,#3721); #2462=LINE('',#16819,#3722); #2463=LINE('',#16820,#3723); #2464=LINE('',#16823,#3724); #2465=LINE('',#16825,#3725); #2466=LINE('',#16827,#3726); #2467=LINE('',#16831,#3727); #2468=LINE('',#16832,#3728); #2469=LINE('',#16835,#3729); #2470=LINE('',#16838,#3730); #2471=LINE('',#16841,#3731); #2472=LINE('',#16842,#3732); #2473=LINE('',#16848,#3733); #2474=LINE('',#16851,#3734); #2475=LINE('',#16853,#3735); #2476=LINE('',#16854,#3736); #2477=LINE('',#16857,#3737); #2478=LINE('',#16858,#3738); #2479=LINE('',#16861,#3739); #2480=LINE('',#16863,#3740); #2481=LINE('',#16864,#3741); #2482=LINE('',#16867,#3742); #2483=LINE('',#16868,#3743); #2484=LINE('',#16871,#3744); #2485=LINE('',#16873,#3745); #2486=LINE('',#16874,#3746); #2487=LINE('',#16877,#3747); #2488=LINE('',#16878,#3748); #2489=LINE('',#16880,#3749); #2490=LINE('',#16882,#3750); #2491=LINE('',#16884,#3751); #2492=LINE('',#16886,#3752); #2493=LINE('',#16889,#3753); #2494=LINE('',#16890,#3754); #2495=LINE('',#16892,#3755); #2496=LINE('',#16899,#3756); #2497=LINE('',#16901,#3757); #2498=LINE('',#16903,#3758); #2499=LINE('',#16907,#3759); #2500=LINE('',#16909,#3760); #2501=LINE('',#16911,#3761); #2502=LINE('',#16913,#3762); #2503=LINE('',#16915,#3763); #2504=LINE('',#16917,#3764); #2505=LINE('',#16918,#3765); #2506=LINE('',#16921,#3766); #2507=LINE('',#16923,#3767); #2508=LINE('',#16924,#3768); #2509=LINE('',#16927,#3769); #2510=LINE('',#16929,#3770); #2511=LINE('',#16930,#3771); #2512=LINE('',#16933,#3772); #2513=LINE('',#16934,#3773); #2514=LINE('',#16937,#3774); #2515=LINE('',#16938,#3775); #2516=LINE('',#16941,#3776); #2517=LINE('',#16942,#3777); #2518=LINE('',#16945,#3778); #2519=LINE('',#16946,#3779); #2520=LINE('',#16948,#3780); #2521=LINE('',#16952,#3781); #2522=LINE('',#16956,#3782); #2523=LINE('',#16961,#3783); #2524=LINE('',#16963,#3784); #2525=LINE('',#16965,#3785); #2526=LINE('',#16966,#3786); #2527=LINE('',#16967,#3787); #2528=LINE('',#16973,#3788); #2529=LINE('',#16976,#3789); #2530=LINE('',#16978,#3790); #2531=LINE('',#16980,#3791); #2532=LINE('',#16981,#3792); #2533=LINE('',#16988,#3793); #2534=LINE('',#16990,#3794); #2535=LINE('',#16992,#3795); #2536=LINE('',#16993,#3796); #2537=LINE('',#17000,#3797); #2538=LINE('',#17002,#3798); #2539=LINE('',#17004,#3799); #2540=LINE('',#17005,#3800); #2541=LINE('',#17010,#3801); #2542=LINE('',#17015,#3802); #2543=LINE('',#17017,#3803); #2544=LINE('',#17019,#3804); #2545=LINE('',#17020,#3805); #2546=LINE('',#17027,#3806); #2547=LINE('',#17028,#3807); #2548=LINE('',#17029,#3808); #2549=LINE('',#17034,#3809); #2550=LINE('',#17039,#3810); #2551=LINE('',#17040,#3811); #2552=LINE('',#17041,#3812); #2553=LINE('',#17050,#3813); #2554=LINE('',#17053,#3814); #2555=LINE('',#17057,#3815); #2556=LINE('',#17066,#3816); #2557=LINE('',#17067,#3817); #2558=LINE('',#17068,#3818); #2559=LINE('',#17074,#3819); #2560=LINE('',#17078,#3820); #2561=LINE('',#17081,#3821); #2562=LINE('',#17082,#3822); #2563=LINE('',#17086,#3823); #2564=LINE('',#17091,#3824); #2565=LINE('',#17093,#3825); #2566=LINE('',#17095,#3826); #2567=LINE('',#17096,#3827); #2568=LINE('',#17100,#3828); #2569=LINE('',#17102,#3829); #2570=LINE('',#17104,#3830); #2571=LINE('',#17105,#3831); #2572=LINE('',#17109,#3832); #2573=LINE('',#17111,#3833); #2574=LINE('',#17113,#3834); #2575=LINE('',#17114,#3835); #2576=LINE('',#17117,#3836); #2577=LINE('',#17119,#3837); #2578=LINE('',#17121,#3838); #2579=LINE('',#17123,#3839); #2580=LINE('',#17125,#3840); #2581=LINE('',#17126,#3841); #2582=LINE('',#17128,#3842); #2583=LINE('',#17130,#3843); #2584=LINE('',#17132,#3844); #2585=LINE('',#17133,#3845); #2586=LINE('',#17138,#3846); #2587=LINE('',#17141,#3847); #2588=LINE('',#17142,#3848); #2589=LINE('',#17148,#3849); #2590=LINE('',#17151,#3850); #2591=LINE('',#17153,#3851); #2592=LINE('',#17155,#3852); #2593=LINE('',#17158,#3853); #2594=LINE('',#17161,#3854); #2595=LINE('',#17164,#3855); #2596=LINE('',#17167,#3856); #2597=LINE('',#17168,#3857); #2598=LINE('',#17174,#3858); #2599=LINE('',#17177,#3859); #2600=LINE('',#17179,#3860); #2601=LINE('',#17180,#3861); #2602=LINE('',#17182,#3862); #2603=LINE('',#17185,#3863); #2604=LINE('',#17187,#3864); #2605=LINE('',#17188,#3865); #2606=LINE('',#17191,#3866); #2607=LINE('',#17193,#3867); #2608=LINE('',#17194,#3868); #2609=LINE('',#17196,#3869); #2610=LINE('',#17198,#3870); #2611=LINE('',#17200,#3871); #2612=LINE('',#17202,#3872); #2613=LINE('',#17205,#3873); #2614=LINE('',#17206,#3874); #2615=LINE('',#17208,#3875); #2616=LINE('',#17215,#3876); #2617=LINE('',#17217,#3877); #2618=LINE('',#17219,#3878); #2619=LINE('',#17223,#3879); #2620=LINE('',#17225,#3880); #2621=LINE('',#17226,#3881); #2622=LINE('',#17229,#3882); #2623=LINE('',#17231,#3883); #2624=LINE('',#17232,#3884); #2625=LINE('',#17235,#3885); #2626=LINE('',#17236,#3886); #2627=LINE('',#17239,#3887); #2628=LINE('',#17241,#3888); #2629=LINE('',#17243,#3889); #2630=LINE('',#17245,#3890); #2631=LINE('',#17247,#3891); #2632=LINE('',#17249,#3892); #2633=LINE('',#17251,#3893); #2634=LINE('',#17253,#3894); #2635=LINE('',#17255,#3895); #2636=LINE('',#17257,#3896); #2637=LINE('',#17258,#3897); #2638=LINE('',#17263,#3898); #2639=LINE('',#17265,#3899); #2640=LINE('',#17267,#3900); #2641=LINE('',#17271,#3901); #2642=LINE('',#17272,#3902); #2643=LINE('',#17275,#3903); #2644=LINE('',#17277,#3904); #2645=LINE('',#17278,#3905); #2646=LINE('',#17281,#3906); #2647=LINE('',#17283,#3907); #2648=LINE('',#17284,#3908); #2649=LINE('',#17287,#3909); #2650=LINE('',#17288,#3910); #2651=LINE('',#17290,#3911); #2652=LINE('',#17293,#3912); #2653=LINE('',#17294,#3913); #2654=LINE('',#17296,#3914); #2655=LINE('',#17301,#3915); #2656=LINE('',#17305,#3916); #2657=LINE('',#17307,#3917); #2658=LINE('',#17308,#3918); #2659=LINE('',#17310,#3919); #2660=LINE('',#17311,#3920); #2661=LINE('',#17315,#3921); #2662=LINE('',#17316,#3922); #2663=LINE('',#17322,#3923); #2664=LINE('',#17324,#3924); #2665=LINE('',#17325,#3925); #2666=LINE('',#17328,#3926); #2667=LINE('',#17329,#3927); #2668=LINE('',#17335,#3928); #2669=LINE('',#17337,#3929); #2670=LINE('',#17339,#3930); #2671=LINE('',#17340,#3931); #2672=LINE('',#17346,#3932); #2673=LINE('',#17349,#3933); #2674=LINE('',#17351,#3934); #2675=LINE('',#17352,#3935); #2676=LINE('',#17358,#3936); #2677=LINE('',#17361,#3937); #2678=LINE('',#17364,#3938); #2679=LINE('',#17366,#3939); #2680=LINE('',#17368,#3940); #2681=LINE('',#17370,#3941); #2682=LINE('',#17371,#3942); #2683=LINE('',#17373,#3943); #2684=LINE('',#17375,#3944); #2685=LINE('',#17377,#3945); #2686=LINE('',#17379,#3946); #2687=LINE('',#17380,#3947); #2688=LINE('',#17383,#3948); #2689=LINE('',#17385,#3949); #2690=LINE('',#17387,#3950); #2691=LINE('',#17391,#3951); #2692=LINE('',#17392,#3952); #2693=LINE('',#17395,#3953); #2694=LINE('',#17398,#3954); #2695=LINE('',#17401,#3955); #2696=LINE('',#17402,#3956); #2697=LINE('',#17408,#3957); #2698=LINE('',#17411,#3958); #2699=LINE('',#17413,#3959); #2700=LINE('',#17414,#3960); #2701=LINE('',#17417,#3961); #2702=LINE('',#17418,#3962); #2703=LINE('',#17421,#3963); #2704=LINE('',#17423,#3964); #2705=LINE('',#17424,#3965); #2706=LINE('',#17427,#3966); #2707=LINE('',#17428,#3967); #2708=LINE('',#17431,#3968); #2709=LINE('',#17433,#3969); #2710=LINE('',#17434,#3970); #2711=LINE('',#17437,#3971); #2712=LINE('',#17438,#3972); #2713=LINE('',#17440,#3973); #2714=LINE('',#17442,#3974); #2715=LINE('',#17444,#3975); #2716=LINE('',#17446,#3976); #2717=LINE('',#17449,#3977); #2718=LINE('',#17450,#3978); #2719=LINE('',#17452,#3979); #2720=LINE('',#17459,#3980); #2721=LINE('',#17461,#3981); #2722=LINE('',#17463,#3982); #2723=LINE('',#17467,#3983); #2724=LINE('',#17469,#3984); #2725=LINE('',#17470,#3985); #2726=LINE('',#17473,#3986); #2727=LINE('',#17475,#3987); #2728=LINE('',#17476,#3988); #2729=LINE('',#17479,#3989); #2730=LINE('',#17480,#3990); #2731=LINE('',#17484,#3991); #2732=LINE('',#17486,#3992); #2733=LINE('',#17488,#3993); #2734=LINE('',#17490,#3994); #2735=LINE('',#17491,#3995); #2736=LINE('',#17493,#3996); #2737=LINE('',#17495,#3997); #2738=LINE('',#17497,#3998); #2739=LINE('',#17499,#3999); #2740=LINE('',#17501,#4000); #2741=LINE('',#17502,#4001); #2742=LINE('',#17507,#4002); #2743=LINE('',#17509,#4003); #2744=LINE('',#17511,#4004); #2745=LINE('',#17515,#4005); #2746=LINE('',#17516,#4006); #2747=LINE('',#17519,#4007); #2748=LINE('',#17521,#4008); #2749=LINE('',#17522,#4009); #2750=LINE('',#17525,#4010); #2751=LINE('',#17527,#4011); #2752=LINE('',#17528,#4012); #2753=LINE('',#17533,#4013); #2754=LINE('',#17537,#4014); #2755=LINE('',#17539,#4015); #2756=LINE('',#17540,#4016); #2757=LINE('',#17542,#4017); #2758=LINE('',#17543,#4018); #2759=LINE('',#17547,#4019); #2760=LINE('',#17548,#4020); #2761=LINE('',#17554,#4021); #2762=LINE('',#17556,#4022); #2763=LINE('',#17558,#4023); #2764=LINE('',#17559,#4024); #2765=LINE('',#17561,#4025); #2766=LINE('',#17564,#4026); #2767=LINE('',#17566,#4027); #2768=LINE('',#17567,#4028); #2769=LINE('',#17568,#4029); #2770=LINE('',#17570,#4030); #2771=LINE('',#17572,#4031); #2772=LINE('',#17579,#4032); #2773=LINE('',#17581,#4033); #2774=LINE('',#17583,#4034); #2775=LINE('',#17584,#4035); #2776=LINE('',#17590,#4036); #2777=LINE('',#17593,#4037); #2778=LINE('',#17595,#4038); #2779=LINE('',#17596,#4039); #2780=LINE('',#17602,#4040); #2781=LINE('',#17605,#4041); #2782=LINE('',#17608,#4042); #2783=LINE('',#17610,#4043); #2784=LINE('',#17612,#4044); #2785=LINE('',#17614,#4045); #2786=LINE('',#17615,#4046); #2787=LINE('',#17617,#4047); #2788=LINE('',#17619,#4048); #2789=LINE('',#17621,#4049); #2790=LINE('',#17623,#4050); #2791=LINE('',#17624,#4051); #2792=LINE('',#17627,#4052); #2793=LINE('',#17629,#4053); #2794=LINE('',#17631,#4054); #2795=LINE('',#17635,#4055); #2796=LINE('',#17636,#4056); #2797=LINE('',#17639,#4057); #2798=LINE('',#17642,#4058); #2799=LINE('',#17645,#4059); #2800=LINE('',#17646,#4060); #2801=LINE('',#17652,#4061); #2802=LINE('',#17655,#4062); #2803=LINE('',#17657,#4063); #2804=LINE('',#17658,#4064); #2805=LINE('',#17661,#4065); #2806=LINE('',#17662,#4066); #2807=LINE('',#17665,#4067); #2808=LINE('',#17667,#4068); #2809=LINE('',#17668,#4069); #2810=LINE('',#17671,#4070); #2811=LINE('',#17672,#4071); #2812=LINE('',#17675,#4072); #2813=LINE('',#17677,#4073); #2814=LINE('',#17678,#4074); #2815=LINE('',#17681,#4075); #2816=LINE('',#17682,#4076); #2817=LINE('',#17684,#4077); #2818=LINE('',#17686,#4078); #2819=LINE('',#17688,#4079); #2820=LINE('',#17690,#4080); #2821=LINE('',#17693,#4081); #2822=LINE('',#17694,#4082); #2823=LINE('',#17696,#4083); #2824=LINE('',#17703,#4084); #2825=LINE('',#17705,#4085); #2826=LINE('',#17707,#4086); #2827=LINE('',#17711,#4087); #2828=LINE('',#17713,#4088); #2829=LINE('',#17714,#4089); #2830=LINE('',#17717,#4090); #2831=LINE('',#17719,#4091); #2832=LINE('',#17720,#4092); #2833=LINE('',#17723,#4093); #2834=LINE('',#17724,#4094); #2835=LINE('',#17727,#4095); #2836=LINE('',#17729,#4096); #2837=LINE('',#17731,#4097); #2838=LINE('',#17733,#4098); #2839=LINE('',#17735,#4099); #2840=LINE('',#17737,#4100); #2841=LINE('',#17739,#4101); #2842=LINE('',#17741,#4102); #2843=LINE('',#17743,#4103); #2844=LINE('',#17745,#4104); #2845=LINE('',#17746,#4105); #2846=LINE('',#17751,#4106); #2847=LINE('',#17753,#4107); #2848=LINE('',#17755,#4108); #2849=LINE('',#17759,#4109); #2850=LINE('',#17760,#4110); #2851=LINE('',#17763,#4111); #2852=LINE('',#17765,#4112); #2853=LINE('',#17766,#4113); #2854=LINE('',#17769,#4114); #2855=LINE('',#17771,#4115); #2856=LINE('',#17772,#4116); #2857=LINE('',#17775,#4117); #2858=LINE('',#17776,#4118); #2859=LINE('',#17778,#4119); #2860=LINE('',#17781,#4120); #2861=LINE('',#17782,#4121); #2862=LINE('',#17784,#4122); #2863=LINE('',#17789,#4123); #2864=LINE('',#17793,#4124); #2865=LINE('',#17795,#4125); #2866=LINE('',#17796,#4126); #2867=LINE('',#17798,#4127); #2868=LINE('',#17799,#4128); #2869=LINE('',#17803,#4129); #2870=LINE('',#17804,#4130); #2871=LINE('',#17810,#4131); #2872=LINE('',#17812,#4132); #2873=LINE('',#17813,#4133); #2874=LINE('',#17816,#4134); #2875=LINE('',#17817,#4135); #2876=LINE('',#17836,#4136); #2877=LINE('',#17842,#4137); #2878=LINE('',#17861,#4138); #2879=LINE('',#17880,#4139); #2880=LINE('',#17899,#4140); #2881=LINE('',#17902,#4141); #2882=LINE('',#17904,#4142); #2883=LINE('',#17905,#4143); #2884=LINE('',#17908,#4144); #2885=LINE('',#17910,#4145); #2886=LINE('',#17911,#4146); #2887=LINE('',#17930,#4147); #2888=LINE('',#17949,#4148); #2889=LINE('',#17968,#4149); #2890=LINE('',#17987,#4150); #2891=LINE('',#18006,#4151); #2892=LINE('',#18009,#4152); #2893=LINE('',#18011,#4153); #2894=LINE('',#18012,#4154); #2895=LINE('',#18015,#4155); #2896=LINE('',#18017,#4156); #2897=LINE('',#18018,#4157); #2898=LINE('',#18037,#4158); #2899=LINE('',#18056,#4159); #2900=LINE('',#18078,#4160); #2901=LINE('',#18080,#4161); #2902=LINE('',#18082,#4162); #2903=LINE('',#18083,#4163); #2904=LINE('',#18086,#4164); #2905=LINE('',#18088,#4165); #2906=LINE('',#18089,#4166); #2907=LINE('',#18092,#4167); #2908=LINE('',#18094,#4168); #2909=LINE('',#18095,#4169); #2910=LINE('',#18097,#4170); #2911=LINE('',#18098,#4171); #2912=LINE('',#18116,#4172); #2913=LINE('',#18122,#4173); #2914=LINE('',#18141,#4174); #2915=LINE('',#18144,#4175); #2916=LINE('',#18146,#4176); #2917=LINE('',#18147,#4177); #2918=LINE('',#18150,#4178); #2919=LINE('',#18152,#4179); #2920=LINE('',#18153,#4180); #2921=LINE('',#18156,#4181); #2922=LINE('',#18158,#4182); #2923=LINE('',#18159,#4183); #2924=LINE('',#18162,#4184); #2925=LINE('',#18164,#4185); #2926=LINE('',#18165,#4186); #2927=LINE('',#18168,#4187); #2928=LINE('',#18170,#4188); #2929=LINE('',#18171,#4189); #2930=LINE('',#18190,#4190); #2931=LINE('',#18209,#4191); #2932=LINE('',#18212,#4192); #2933=LINE('',#18214,#4193); #2934=LINE('',#18215,#4194); #2935=LINE('',#18217,#4195); #2936=LINE('',#18218,#4196); #2937=LINE('',#18236,#4197); #2938=LINE('',#18242,#4198); #2939=LINE('',#18261,#4199); #2940=LINE('',#18280,#4200); #2941=LINE('',#18299,#4201); #2942=LINE('',#18302,#4202); #2943=LINE('',#18304,#4203); #2944=LINE('',#18305,#4204); #2945=LINE('',#18308,#4205); #2946=LINE('',#18310,#4206); #2947=LINE('',#18311,#4207); #2948=LINE('',#18330,#4208); #2949=LINE('',#18349,#4209); #2950=LINE('',#18368,#4210); #2951=LINE('',#18387,#4211); #2952=LINE('',#18406,#4212); #2953=LINE('',#18409,#4213); #2954=LINE('',#18411,#4214); #2955=LINE('',#18412,#4215); #2956=LINE('',#18415,#4216); #2957=LINE('',#18417,#4217); #2958=LINE('',#18418,#4218); #2959=LINE('',#18437,#4219); #2960=LINE('',#18456,#4220); #2961=LINE('',#18478,#4221); #2962=LINE('',#18480,#4222); #2963=LINE('',#18482,#4223); #2964=LINE('',#18483,#4224); #2965=LINE('',#18498,#4225); #2966=LINE('',#18517,#4226); #2967=LINE('',#18536,#4227); #2968=LINE('',#18572,#4228); #2969=LINE('',#18578,#4229); #2970=LINE('',#18597,#4230); #2971=LINE('',#18616,#4231); #2972=LINE('',#18619,#4232); #2973=LINE('',#18621,#4233); #2974=LINE('',#18622,#4234); #2975=LINE('',#18625,#4235); #2976=LINE('',#18627,#4236); #2977=LINE('',#18628,#4237); #2978=LINE('',#18647,#4238); #2979=LINE('',#18666,#4239); #2980=LINE('',#18685,#4240); #2981=LINE('',#18688,#4241); #2982=LINE('',#18690,#4242); #2983=LINE('',#18691,#4243); #2984=LINE('',#18694,#4244); #2985=LINE('',#18696,#4245); #2986=LINE('',#18697,#4246); #2987=LINE('',#18716,#4247); #2988=LINE('',#18735,#4248); #2989=LINE('',#18769,#4249); #2990=LINE('',#18775,#4250); #2991=LINE('',#18794,#4251); #2992=LINE('',#18797,#4252); #2993=LINE('',#18799,#4253); #2994=LINE('',#18800,#4254); #2995=LINE('',#18803,#4255); #2996=LINE('',#18805,#4256); #2997=LINE('',#18806,#4257); #2998=LINE('',#18809,#4258); #2999=LINE('',#18811,#4259); #3000=LINE('',#18812,#4260); #3001=LINE('',#18815,#4261); #3002=LINE('',#18817,#4262); #3003=LINE('',#18818,#4263); #3004=LINE('',#18821,#4264); #3005=LINE('',#18823,#4265); #3006=LINE('',#18824,#4266); #3007=LINE('',#18843,#4267); #3008=LINE('',#18862,#4268); #3009=LINE('',#18865,#4269); #3010=LINE('',#18867,#4270); #3011=LINE('',#18868,#4271); #3012=LINE('',#18870,#4272); #3013=LINE('',#18871,#4273); #3014=LINE('',#18877,#4274); #3015=LINE('',#18879,#4275); #3016=LINE('',#18881,#4276); #3017=LINE('',#18882,#4277); #3018=LINE('',#18885,#4278); #3019=LINE('',#18887,#4279); #3020=LINE('',#18888,#4280); #3021=LINE('',#18891,#4281); #3022=LINE('',#18893,#4282); #3023=LINE('',#18894,#4283); #3024=LINE('',#18896,#4284); #3025=LINE('',#18897,#4285); #3026=LINE('',#18903,#4286); #3027=LINE('',#18905,#4287); #3028=LINE('',#18907,#4288); #3029=LINE('',#18908,#4289); #3030=LINE('',#18911,#4290); #3031=LINE('',#18913,#4291); #3032=LINE('',#18914,#4292); #3033=LINE('',#18917,#4293); #3034=LINE('',#18919,#4294); #3035=LINE('',#18920,#4295); #3036=LINE('',#18923,#4296); #3037=LINE('',#18925,#4297); #3038=LINE('',#18926,#4298); #3039=LINE('',#18929,#4299); #3040=LINE('',#18931,#4300); #3041=LINE('',#18932,#4301); #3042=LINE('',#18935,#4302); #3043=LINE('',#18937,#4303); #3044=LINE('',#18938,#4304); #3045=LINE('',#18941,#4305); #3046=LINE('',#18943,#4306); #3047=LINE('',#18944,#4307); #3048=LINE('',#18947,#4308); #3049=LINE('',#18949,#4309); #3050=LINE('',#18950,#4310); #3051=LINE('',#18953,#4311); #3052=LINE('',#18955,#4312); #3053=LINE('',#18956,#4313); #3054=LINE('',#18959,#4314); #3055=LINE('',#18961,#4315); #3056=LINE('',#18962,#4316); #3057=LINE('',#18965,#4317); #3058=LINE('',#18967,#4318); #3059=LINE('',#18968,#4319); #3060=LINE('',#18971,#4320); #3061=LINE('',#18973,#4321); #3062=LINE('',#18974,#4322); #3063=LINE('',#18976,#4323); #3064=LINE('',#18977,#4324); #3065=LINE('',#18983,#4325); #3066=LINE('',#18985,#4326); #3067=LINE('',#18987,#4327); #3068=LINE('',#18988,#4328); #3069=LINE('',#18991,#4329); #3070=LINE('',#18993,#4330); #3071=LINE('',#18994,#4331); #3072=LINE('',#19013,#4332); #3073=LINE('',#19032,#4333); #3074=LINE('',#19051,#4334); #3075=LINE('',#19070,#4335); #3076=LINE('',#19089,#4336); #3077=LINE('',#19108,#4337); #3078=LINE('',#19127,#4338); #3079=LINE('',#19146,#4339); #3080=LINE('',#19149,#4340); #3081=LINE('',#19151,#4341); #3082=LINE('',#19152,#4342); #3083=LINE('',#19155,#4343); #3084=LINE('',#19157,#4344); #3085=LINE('',#19158,#4345); #3086=LINE('',#19177,#4346); #3087=LINE('',#19196,#4347); #3088=LINE('',#19215,#4348); #3089=LINE('',#19234,#4349); #3090=LINE('',#19253,#4350); #3091=LINE('',#19272,#4351); #3092=LINE('',#19291,#4352); #3093=LINE('',#19325,#4353); #3094=LINE('',#19331,#4354); #3095=LINE('',#19346,#4355); #3096=LINE('',#19353,#4356); #3097=LINE('',#19355,#4357); #3098=LINE('',#19356,#4358); #3099=LINE('',#19359,#4359); #3100=LINE('',#19361,#4360); #3101=LINE('',#19362,#4361); #3102=LINE('',#19365,#4362); #3103=LINE('',#19367,#4363); #3104=LINE('',#19368,#4364); #3105=LINE('',#19383,#4365); #3106=LINE('',#19407,#4366); #3107=LINE('',#19409,#4367); #3108=LINE('',#19411,#4368); #3109=LINE('',#19412,#4369); #3110=LINE('',#19415,#4370); #3111=LINE('',#19417,#4371); #3112=LINE('',#19418,#4372); #3113=LINE('',#19421,#4373); #3114=LINE('',#19423,#4374); #3115=LINE('',#19424,#4375); #3116=LINE('',#19427,#4376); #3117=LINE('',#19429,#4377); #3118=LINE('',#19430,#4378); #3119=LINE('',#19433,#4379); #3120=LINE('',#19435,#4380); #3121=LINE('',#19436,#4381); #3122=LINE('',#19439,#4382); #3123=LINE('',#19441,#4383); #3124=LINE('',#19442,#4384); #3125=LINE('',#19461,#4385); #3126=LINE('',#19480,#4386); #3127=LINE('',#19499,#4387); #3128=LINE('',#19502,#4388); #3129=LINE('',#19504,#4389); #3130=LINE('',#19505,#4390); #3131=LINE('',#19507,#4391); #3132=LINE('',#19508,#4392); #3133=LINE('',#19514,#4393); #3134=LINE('',#19516,#4394); #3135=LINE('',#19518,#4395); #3136=LINE('',#19519,#4396); #3137=LINE('',#19522,#4397); #3138=LINE('',#19524,#4398); #3139=LINE('',#19525,#4399); #3140=LINE('',#19528,#4400); #3141=LINE('',#19530,#4401); #3142=LINE('',#19531,#4402); #3143=LINE('',#19534,#4403); #3144=LINE('',#19536,#4404); #3145=LINE('',#19537,#4405); #3146=LINE('',#19540,#4406); #3147=LINE('',#19542,#4407); #3148=LINE('',#19543,#4408); #3149=LINE('',#19546,#4409); #3150=LINE('',#19548,#4410); #3151=LINE('',#19549,#4411); #3152=LINE('',#19552,#4412); #3153=LINE('',#19554,#4413); #3154=LINE('',#19555,#4414); #3155=LINE('',#19558,#4415); #3156=LINE('',#19560,#4416); #3157=LINE('',#19561,#4417); #3158=LINE('',#19564,#4418); #3159=LINE('',#19566,#4419); #3160=LINE('',#19567,#4420); #3161=LINE('',#19570,#4421); #3162=LINE('',#19572,#4422); #3163=LINE('',#19573,#4423); #3164=LINE('',#19576,#4424); #3165=LINE('',#19578,#4425); #3166=LINE('',#19579,#4426); #3167=LINE('',#19581,#4427); #3168=LINE('',#19582,#4428); #3169=LINE('',#19600,#4429); #3170=LINE('',#19606,#4430); #3171=LINE('',#19609,#4431); #3172=LINE('',#19611,#4432); #3173=LINE('',#19612,#4433); #3174=LINE('',#19615,#4434); #3175=LINE('',#19617,#4435); #3176=LINE('',#19618,#4436); #3177=LINE('',#19637,#4437); #3178=LINE('',#19656,#4438); #3179=LINE('',#19675,#4439); #3180=LINE('',#19694,#4440); #3181=LINE('',#19697,#4441); #3182=LINE('',#19699,#4442); #3183=LINE('',#19700,#4443); #3184=LINE('',#19719,#4444); #3185=LINE('',#19738,#4445); #3186=LINE('',#19757,#4446); #3187=LINE('',#19776,#4447); #3188=LINE('',#19795,#4448); #3189=LINE('',#19798,#4449); #3190=LINE('',#19800,#4450); #3191=LINE('',#19801,#4451); #3192=LINE('',#19804,#4452); #3193=LINE('',#19806,#4453); #3194=LINE('',#19807,#4454); #3195=LINE('',#19826,#4455); #3196=LINE('',#19845,#4456); #3197=LINE('',#19864,#4457); #3198=LINE('',#19883,#4458); #3199=LINE('',#19902,#4459); #3200=LINE('',#19905,#4460); #3201=LINE('',#19907,#4461); #3202=LINE('',#19908,#4462); #3203=LINE('',#19911,#4463); #3204=LINE('',#19913,#4464); #3205=LINE('',#19914,#4465); #3206=LINE('',#19917,#4466); #3207=LINE('',#19919,#4467); #3208=LINE('',#19920,#4468); #3209=LINE('',#19939,#4469); #3210=LINE('',#19958,#4470); #3211=LINE('',#19977,#4471); #3212=LINE('',#20011,#4472); #3213=LINE('',#20017,#4473); #3214=LINE('',#20032,#4474); #3215=LINE('',#20051,#4475); #3216=LINE('',#20070,#4476); #3217=LINE('',#20089,#4477); #3218=LINE('',#20108,#4478); #3219=LINE('',#20127,#4479); #3220=LINE('',#20163,#4480); #3221=LINE('',#20169,#4481); #3222=LINE('',#20188,#4482); #3223=LINE('',#20207,#4483); #3224=LINE('',#20241,#4484); #3225=LINE('',#20247,#4485); #3226=LINE('',#20262,#4486); #3227=LINE('',#20281,#4487); #3228=LINE('',#20300,#4488); #3229=LINE('',#20319,#4489); #3230=LINE('',#20338,#4490); #3231=LINE('',#20357,#4491); #3232=LINE('',#20393,#4492); #3233=LINE('',#20399,#4493); #3234=LINE('',#20418,#4494); #3235=LINE('',#20437,#4495); #3236=LINE('',#20459,#4496); #3237=LINE('',#20461,#4497); #3238=LINE('',#20463,#4498); #3239=LINE('',#20464,#4499); #3240=LINE('',#20467,#4500); #3241=LINE('',#20469,#4501); #3242=LINE('',#20470,#4502); #3243=LINE('',#20473,#4503); #3244=LINE('',#20475,#4504); #3245=LINE('',#20476,#4505); #3246=LINE('',#20479,#4506); #3247=LINE('',#20481,#4507); #3248=LINE('',#20482,#4508); #3249=LINE('',#20485,#4509); #3250=LINE('',#20487,#4510); #3251=LINE('',#20488,#4511); #3252=LINE('',#20491,#4512); #3253=LINE('',#20493,#4513); #3254=LINE('',#20494,#4514); #3255=LINE('',#20497,#4515); #3256=LINE('',#20499,#4516); #3257=LINE('',#20500,#4517); #3258=LINE('',#20503,#4518); #3259=LINE('',#20505,#4519); #3260=LINE('',#20506,#4520); #3261=LINE('',#20509,#4521); #3262=LINE('',#20511,#4522); #3263=LINE('',#20512,#4523); #3264=LINE('',#20514,#4524); #3265=LINE('',#20515,#4525); #3266=LINE('',#20523,#4526); #3267=LINE('',#20526,#4527); #3268=LINE('',#20529,#4528); #3269=LINE('',#20531,#4529); #3270=LINE('',#20533,#4530); #3271=LINE('',#20535,#4531); #3272=LINE('',#20537,#4532); #3273=LINE('',#20540,#4533); #3274=LINE('',#20543,#4534); #3275=LINE('',#20544,#4535); #3276=LINE('',#20547,#4536); #3277=LINE('',#20550,#4537); #3278=LINE('',#20552,#4538); #3279=LINE('',#20555,#4539); #3280=LINE('',#20557,#4540); #3281=LINE('',#20558,#4541); #3282=LINE('',#20560,#4542); #3283=LINE('',#20563,#4543); #3284=LINE('',#20564,#4544); #3285=LINE('',#20566,#4545); #3286=LINE('',#20578,#4546); #3287=LINE('',#20580,#4547); #3288=LINE('',#20582,#4548); #3289=LINE('',#20583,#4549); #3290=LINE('',#20586,#4550); #3291=LINE('',#20588,#4551); #3292=LINE('',#20589,#4552); #3293=LINE('',#20592,#4553); #3294=LINE('',#20594,#4554); #3295=LINE('',#20595,#4555); #3296=LINE('',#20597,#4556); #3297=LINE('',#20598,#4557); #3298=LINE('',#20606,#4558); #3299=LINE('',#20609,#4559); #3300=LINE('',#20612,#4560); #3301=LINE('',#20614,#4561); #3302=LINE('',#20615,#4562); #3303=LINE('',#20621,#4563); #3304=LINE('',#20624,#4564); #3305=LINE('',#20626,#4565); #3306=LINE('',#20627,#4566); #3307=LINE('',#20633,#4567); #3308=LINE('',#20636,#4568); #3309=LINE('',#20638,#4569); #3310=LINE('',#20640,#4570); #3311=LINE('',#20642,#4571); #3312=LINE('',#20643,#4572); #3313=LINE('',#20645,#4573); #3314=LINE('',#20648,#4574); #3315=LINE('',#20649,#4575); #3316=LINE('',#20652,#4576); #3317=LINE('',#20653,#4577); #3318=LINE('',#20655,#4578); #3319=LINE('',#20660,#4579); #3320=LINE('',#20662,#4580); #3321=LINE('',#20664,#4581); #3322=LINE('',#20665,#4582); #3323=LINE('',#20668,#4583); #3324=LINE('',#20670,#4584); #3325=LINE('',#20671,#4585); #3326=LINE('',#20674,#4586); #3327=LINE('',#20676,#4587); #3328=LINE('',#20677,#4588); #3329=LINE('',#20680,#4589); #3330=LINE('',#20682,#4590); #3331=LINE('',#20683,#4591); #3332=LINE('',#20686,#4592); #3333=LINE('',#20688,#4593); #3334=LINE('',#20689,#4594); #3335=LINE('',#20692,#4595); #3336=LINE('',#20694,#4596); #3337=LINE('',#20695,#4597); #3338=LINE('',#20697,#4598); #3339=LINE('',#20698,#4599); #3340=LINE('',#20704,#4600); #3341=LINE('',#20706,#4601); #3342=LINE('',#20708,#4602); #3343=LINE('',#20709,#4603); #3344=LINE('',#20712,#4604); #3345=LINE('',#20714,#4605); #3346=LINE('',#20715,#4606); #3347=LINE('',#20718,#4607); #3348=LINE('',#20720,#4608); #3349=LINE('',#20721,#4609); #3350=LINE('',#20724,#4610); #3351=LINE('',#20726,#4611); #3352=LINE('',#20727,#4612); #3353=LINE('',#20730,#4613); #3354=LINE('',#20732,#4614); #3355=LINE('',#20733,#4615); #3356=LINE('',#20736,#4616); #3357=LINE('',#20738,#4617); #3358=LINE('',#20739,#4618); #3359=LINE('',#20741,#4619); #3360=LINE('',#20742,#4620); #3361=LINE('',#20748,#4621); #3362=LINE('',#20750,#4622); #3363=LINE('',#20752,#4623); #3364=LINE('',#20753,#4624); #3365=LINE('',#20756,#4625); #3366=LINE('',#20758,#4626); #3367=LINE('',#20759,#4627); #3368=LINE('',#20761,#4628); #3369=LINE('',#20762,#4629); #3370=LINE('',#20766,#4630); #3371=LINE('',#20768,#4631); #3372=LINE('',#20770,#4632); #3373=LINE('',#20771,#4633); #3374=LINE('',#20774,#4634); #3375=LINE('',#20776,#4635); #3376=LINE('',#20777,#4636); #3377=LINE('',#20780,#4637); #3378=LINE('',#20782,#4638); #3379=LINE('',#20783,#4639); #3380=LINE('',#20786,#4640); #3381=LINE('',#20788,#4641); #3382=LINE('',#20789,#4642); #3383=LINE('',#20792,#4643); #3384=LINE('',#20794,#4644); #3385=LINE('',#20795,#4645); #3386=LINE('',#20798,#4646); #3387=LINE('',#20800,#4647); #3388=LINE('',#20801,#4648); #3389=LINE('',#20804,#4649); #3390=LINE('',#20806,#4650); #3391=LINE('',#20807,#4651); #3392=LINE('',#20809,#4652); #3393=LINE('',#20810,#4653); #3394=LINE('',#20816,#4654); #3395=LINE('',#20818,#4655); #3396=LINE('',#20820,#4656); #3397=LINE('',#20821,#4657); #3398=LINE('',#20824,#4658); #3399=LINE('',#20826,#4659); #3400=LINE('',#20827,#4660); #3401=LINE('',#20830,#4661); #3402=LINE('',#20832,#4662); #3403=LINE('',#20833,#4663); #3404=LINE('',#20836,#4664); #3405=LINE('',#20838,#4665); #3406=LINE('',#20839,#4666); #3407=LINE('',#20842,#4667); #3408=LINE('',#20844,#4668); #3409=LINE('',#20845,#4669); #3410=LINE('',#20847,#4670); #3411=LINE('',#20848,#4671); #3412=LINE('',#20854,#4672); #3413=LINE('',#20856,#4673); #3414=LINE('',#20858,#4674); #3415=LINE('',#20859,#4675); #3416=LINE('',#20862,#4676); #3417=LINE('',#20864,#4677); #3418=LINE('',#20865,#4678); #3419=LINE('',#20868,#4679); #3420=LINE('',#20870,#4680); #3421=LINE('',#20871,#4681); #3422=LINE('',#20874,#4682); #3423=LINE('',#20876,#4683); #3424=LINE('',#20877,#4684); #3425=LINE('',#20880,#4685); #3426=LINE('',#20882,#4686); #3427=LINE('',#20883,#4687); #3428=LINE('',#20886,#4688); #3429=LINE('',#20888,#4689); #3430=LINE('',#20889,#4690); #3431=LINE('',#20892,#4691); #3432=LINE('',#20894,#4692); #3433=LINE('',#20895,#4693); #3434=LINE('',#20897,#4694); #3435=LINE('',#20898,#4695); #3436=LINE('',#20904,#4696); #3437=LINE('',#20906,#4697); #3438=LINE('',#20908,#4698); #3439=LINE('',#20909,#4699); #3440=LINE('',#20912,#4700); #3441=LINE('',#20914,#4701); #3442=LINE('',#20915,#4702); #3443=LINE('',#20918,#4703); #3444=LINE('',#20920,#4704); #3445=LINE('',#20921,#4705); #3446=LINE('',#20924,#4706); #3447=LINE('',#20926,#4707); #3448=LINE('',#20927,#4708); #3449=LINE('',#20930,#4709); #3450=LINE('',#20932,#4710); #3451=LINE('',#20933,#4711); #3452=LINE('',#20936,#4712); #3453=LINE('',#20938,#4713); #3454=LINE('',#20939,#4714); #3455=LINE('',#20942,#4715); #3456=LINE('',#20944,#4716); #3457=LINE('',#20945,#4717); #3458=LINE('',#20947,#4718); #3459=LINE('',#20948,#4719); #3460=LINE('',#20954,#4720); #3461=LINE('',#20956,#4721); #3462=LINE('',#20958,#4722); #3463=LINE('',#20959,#4723); #3464=LINE('',#20962,#4724); #3465=LINE('',#20964,#4725); #3466=LINE('',#20965,#4726); #3467=LINE('',#20968,#4727); #3468=LINE('',#20970,#4728); #3469=LINE('',#20971,#4729); #3470=LINE('',#20973,#4730); #3471=LINE('',#20974,#4731); #3472=LINE('',#20992,#4732); #3473=LINE('',#20998,#4733); #3474=LINE('',#21017,#4734); #3475=LINE('',#21036,#4735); #3476=LINE('',#21055,#4736); #3477=LINE('',#21058,#4737); #3478=LINE('',#21060,#4738); #3479=LINE('',#21061,#4739); #3480=LINE('',#21064,#4740); #3481=LINE('',#21066,#4741); #3482=LINE('',#21067,#4742); #3483=LINE('',#21086,#4743); #3484=LINE('',#21105,#4744); #3485=LINE('',#21124,#4745); #3486=LINE('',#21143,#4746); #3487=LINE('',#21162,#4747); #3488=LINE('',#21165,#4748); #3489=LINE('',#21167,#4749); #3490=LINE('',#21168,#4750); #3491=LINE('',#21171,#4751); #3492=LINE('',#21173,#4752); #3493=LINE('',#21174,#4753); #3494=LINE('',#21193,#4754); #3495=LINE('',#21212,#4755); #3496=LINE('',#21246,#4756); #3497=LINE('',#21252,#4757); #3498=LINE('',#21267,#4758); #3499=LINE('',#21286,#4759); #3500=LINE('',#21322,#4760); #3501=LINE('',#21328,#4761); #3502=LINE('',#21347,#4762); #3503=LINE('',#21366,#4763); #3504=LINE('',#21388,#4764); #3505=LINE('',#21390,#4765); #3506=LINE('',#21392,#4766); #3507=LINE('',#21393,#4767); #3508=LINE('',#21408,#4768); #3509=LINE('',#21427,#4769); #3510=LINE('',#21446,#4770); #3511=LINE('',#21482,#4771); #3512=LINE('',#21488,#4772); #3513=LINE('',#21507,#4773); #3514=LINE('',#21526,#4774); #3515=LINE('',#21529,#4775); #3516=LINE('',#21531,#4776); #3517=LINE('',#21532,#4777); #3518=LINE('',#21535,#4778); #3519=LINE('',#21537,#4779); #3520=LINE('',#21538,#4780); #3521=LINE('',#21557,#4781); #3522=LINE('',#21576,#4782); #3523=LINE('',#21595,#4783); #3524=LINE('',#21598,#4784); #3525=LINE('',#21600,#4785); #3526=LINE('',#21601,#4786); #3527=LINE('',#21604,#4787); #3528=LINE('',#21606,#4788); #3529=LINE('',#21607,#4789); #3530=LINE('',#21626,#4790); #3531=LINE('',#21645,#4791); #3532=LINE('',#21667,#4792); #3533=LINE('',#21669,#4793); #3534=LINE('',#21671,#4794); #3535=LINE('',#21672,#4795); #3536=LINE('',#21675,#4796); #3537=LINE('',#21677,#4797); #3538=LINE('',#21678,#4798); #3539=LINE('',#21681,#4799); #3540=LINE('',#21683,#4800); #3541=LINE('',#21684,#4801); #3542=LINE('',#21686,#4802); #3543=LINE('',#21687,#4803); #3544=LINE('',#21693,#4804); #3545=LINE('',#21695,#4805); #3546=LINE('',#21697,#4806); #3547=LINE('',#21698,#4807); #3548=LINE('',#21701,#4808); #3549=LINE('',#21703,#4809); #3550=LINE('',#21704,#4810); #3551=LINE('',#21707,#4811); #3552=LINE('',#21709,#4812); #3553=LINE('',#21710,#4813); #3554=LINE('',#21713,#4814); #3555=LINE('',#21715,#4815); #3556=LINE('',#21716,#4816); #3557=LINE('',#21719,#4817); #3558=LINE('',#21721,#4818); #3559=LINE('',#21722,#4819); #3560=LINE('',#21725,#4820); #3561=LINE('',#21727,#4821); #3562=LINE('',#21728,#4822); #3563=LINE('',#21731,#4823); #3564=LINE('',#21733,#4824); #3565=LINE('',#21734,#4825); #3566=LINE('',#21737,#4826); #3567=LINE('',#21739,#4827); #3568=LINE('',#21740,#4828); #3569=LINE('',#21743,#4829); #3570=LINE('',#21745,#4830); #3571=LINE('',#21746,#4831); #3572=LINE('',#21749,#4832); #3573=LINE('',#21751,#4833); #3574=LINE('',#21752,#4834); #3575=LINE('',#21755,#4835); #3576=LINE('',#21757,#4836); #3577=LINE('',#21758,#4837); #3578=LINE('',#21777,#4838); #3579=LINE('',#21796,#4839); #3580=LINE('',#21815,#4840); #3581=LINE('',#21818,#4841); #3582=LINE('',#21820,#4842); #3583=LINE('',#21821,#4843); #3584=LINE('',#21824,#4844); #3585=LINE('',#21826,#4845); #3586=LINE('',#21827,#4846); #3587=LINE('',#21846,#4847); #3588=LINE('',#21880,#4848); #3589=LINE('',#21886,#4849); #3590=LINE('',#21901,#4850); #3591=LINE('',#21920,#4851); #3592=LINE('',#21956,#4852); #3593=LINE('',#21962,#4853); #3594=LINE('',#21981,#4854); #3595=LINE('',#22000,#4855); #3596=LINE('',#22022,#4856); #3597=LINE('',#22024,#4857); #3598=LINE('',#22026,#4858); #3599=LINE('',#22027,#4859); #3600=LINE('',#22046,#4860); #3601=LINE('',#22065,#4861); #3602=LINE('',#22084,#4862); #3603=LINE('',#22087,#4863); #3604=LINE('',#22089,#4864); #3605=LINE('',#22090,#4865); #3606=LINE('',#22093,#4866); #3607=LINE('',#22095,#4867); #3608=LINE('',#22096,#4868); #3609=LINE('',#22099,#4869); #3610=LINE('',#22101,#4870); #3611=LINE('',#22102,#4871); #3612=LINE('',#22105,#4872); #3613=LINE('',#22107,#4873); #3614=LINE('',#22108,#4874); #3615=LINE('',#22111,#4875); #3616=LINE('',#22113,#4876); #3617=LINE('',#22114,#4877); #3618=LINE('',#22133,#4878); #3619=LINE('',#22152,#4879); #3620=LINE('',#22155,#4880); #3621=LINE('',#22157,#4881); #3622=LINE('',#22158,#4882); #3623=LINE('',#22160,#4883); #3624=LINE('',#22161,#4884); #3625=LINE('',#22167,#4885); #3626=LINE('',#22169,#4886); #3627=LINE('',#22171,#4887); #3628=LINE('',#22172,#4888); #3629=LINE('',#22175,#4889); #3630=LINE('',#22177,#4890); #3631=LINE('',#22178,#4891); #3632=LINE('',#22181,#4892); #3633=LINE('',#22183,#4893); #3634=LINE('',#22184,#4894); #3635=LINE('',#22186,#4895); #3636=LINE('',#22187,#4896); #3637=LINE('',#22193,#4897); #3638=LINE('',#22195,#4898); #3639=LINE('',#22197,#4899); #3640=LINE('',#22198,#4900); #3641=LINE('',#22201,#4901); #3642=LINE('',#22203,#4902); #3643=LINE('',#22204,#4903); #3644=LINE('',#22223,#4904); #3645=LINE('',#22242,#4905); #3646=LINE('',#22261,#4906); #3647=LINE('',#22280,#4907); #3648=LINE('',#22299,#4908); #3649=LINE('',#22318,#4909); #3650=LINE('',#22337,#4910); #3651=LINE('',#22356,#4911); #3652=LINE('',#22375,#4912); #3653=LINE('',#22378,#4913); #3654=LINE('',#22380,#4914); #3655=LINE('',#22381,#4915); #3656=LINE('',#22384,#4916); #3657=LINE('',#22386,#4917); #3658=LINE('',#22387,#4918); #3659=LINE('',#22406,#4919); #3660=LINE('',#22425,#4920); #3661=LINE('',#22444,#4921); #3662=LINE('',#22463,#4922); #3663=LINE('',#22482,#4923); #3664=LINE('',#22501,#4924); #3665=LINE('',#22520,#4925); #3666=VECTOR('',#13441,0.65); #3667=VECTOR('',#13442,5.3); #3668=VECTOR('',#13443,0.65); #3669=VECTOR('',#13444,5.3); #3670=VECTOR('',#13453,2.84389490937875); #3671=VECTOR('',#13456,0.880887435848736); #3672=VECTOR('',#13457,5.83424973097839); #3673=VECTOR('',#13458,0.880887435848735); #3674=VECTOR('',#13461,2.84389490937875); #3675=VECTOR('',#13464,5.26842516293258); #3676=VECTOR('',#13473,1.43152195581047); #3677=VECTOR('',#13476,0.829837875487557); #3678=VECTOR('',#13487,0.829837875487557); #3679=VECTOR('',#13490,1.43152195581047); #3680=VECTOR('',#13509,5.29962896030629); #3681=VECTOR('',#13510,5.19561383160694); #3682=VECTOR('',#13549,1.02561307275085); #3683=VECTOR('',#13550,1.02561307275085); #3684=VECTOR('',#13561,2.84389490941056); #3685=VECTOR('',#13576,2.84389490944228); #3686=VECTOR('',#13605,0.880887435912265); #3687=VECTOR('',#13614,5.83424973097839); #3688=VECTOR('',#13617,0.880887435880538); #3689=VECTOR('',#13624,1.02561307275085); #3690=VECTOR('',#13625,1.02561307275085); #3691=VECTOR('',#13656,5.39278053030591); #3692=VECTOR('',#13659,5.19561383160694); #3693=VECTOR('',#13660,5.29962896030629); #3694=VECTOR('',#13663,0.921741745220234); #3695=VECTOR('',#13664,0.57494777019244); #3696=VECTOR('',#13669,6.14343956732365); #3697=VECTOR('',#13670,6.14343956732365); #3698=VECTOR('',#13675,0.57494777019244); #3699=VECTOR('',#13676,0.921741745220235); #3700=VECTOR('',#13679,6.06302696725762); #3701=VECTOR('',#13682,5.25882380723701); #3702=VECTOR('',#13685,5.258823807237); #3703=VECTOR('',#13714,6.39320777835047); #3704=VECTOR('',#13725,0.5); #3705=VECTOR('',#13726,0.45); #3706=VECTOR('',#13727,0.5); #3707=VECTOR('',#13728,0.45); #3708=VECTOR('',#13733,0.45); #3709=VECTOR('',#13736,0.45); #3710=VECTOR('',#13739,0.790993887787064); #3711=VECTOR('',#13740,0.790993887787064); #3712=VECTOR('',#13745,0.45); #3713=VECTOR('',#13748,0.45); #3714=VECTOR('',#13751,0.0134844170183378); #3715=VECTOR('',#13752,0.125); #3716=VECTOR('',#13753,0.657316948073585); #3717=VECTOR('',#13754,0.125); #3718=VECTOR('',#13755,0.293966525501146); #3719=VECTOR('',#13756,0.293966525501146); #3720=VECTOR('',#13757,0.125); #3721=VECTOR('',#13758,0.657316948073585); #3722=VECTOR('',#13759,0.125); #3723=VECTOR('',#13760,0.0134844170183378); #3724=VECTOR('',#13763,0.775323328274985); #3725=VECTOR('',#13764,0.5); #3726=VECTOR('',#13765,0.455556882702037); #3727=VECTOR('',#13768,0.028447552942312); #3728=VECTOR('',#13769,0.530801521216414); #3729=VECTOR('',#13772,0.45); #3730=VECTOR('',#13775,0.45); #3731=VECTOR('',#13778,0.45); #3732=VECTOR('',#13779,0.455556882702037); #3733=VECTOR('',#13784,0.45); #3734=VECTOR('',#13787,0.45); #3735=VECTOR('',#13790,1.08977293874648); #3736=VECTOR('',#13791,1.08977293874648); #3737=VECTOR('',#13794,0.253314912090481); #3738=VECTOR('',#13795,0.530801521216413); #3739=VECTOR('',#13798,0.530801521216414); #3740=VECTOR('',#13799,0.530801521216413); #3741=VECTOR('',#13800,0.125); #3742=VECTOR('',#13803,0.125); #3743=VECTOR('',#13804,0.530801521216413); #3744=VECTOR('',#13807,0.530801521216413); #3745=VECTOR('',#13808,0.530801521216413); #3746=VECTOR('',#13809,0.125); #3747=VECTOR('',#13812,0.530801521216413); #3748=VECTOR('',#13813,0.657316948073585); #3749=VECTOR('',#13816,0.125); #3750=VECTOR('',#13819,0.657316948073585); #3751=VECTOR('',#13822,0.253314912090481); #3752=VECTOR('',#13825,0.028447552942312); #3753=VECTOR('',#13828,0.775323328274985); #3754=VECTOR('',#13829,0.45); #3755=VECTOR('',#13832,0.5); #3756=VECTOR('',#13839,0.418019609728144); #3757=VECTOR('',#13840,5.3); #3758=VECTOR('',#13841,0.418019609728144); #3759=VECTOR('',#13844,1.44772546380598); #3760=VECTOR('',#13845,0.461822057135043); #3761=VECTOR('',#13846,0.176858706611803); #3762=VECTOR('',#13847,1.37635588572991); #3763=VECTOR('',#13848,0.176858706611803); #3764=VECTOR('',#13849,0.461822057135043); #3765=VECTOR('',#13850,1.44772546380598); #3766=VECTOR('',#13853,0.8); #3767=VECTOR('',#13854,0.8); #3768=VECTOR('',#13855,1.44772546380598); #3769=VECTOR('',#13858,0.8); #3770=VECTOR('',#13859,1.44772546380598); #3771=VECTOR('',#13860,0.8); #3772=VECTOR('',#13863,0.8); #3773=VECTOR('',#13864,0.461822057135043); #3774=VECTOR('',#13867,0.8); #3775=VECTOR('',#13868,0.461822057135043); #3776=VECTOR('',#13871,0.176858706611803); #3777=VECTOR('',#13872,0.8); #3778=VECTOR('',#13875,1.37635588572991); #3779=VECTOR('',#13876,0.8); #3780=VECTOR('',#13879,0.176858706611803); #3781=VECTOR('',#13882,0.15); #3782=VECTOR('',#13885,0.15); #3783=VECTOR('',#13890,0.182548871696984); #3784=VECTOR('',#13891,0.15); #3785=VECTOR('',#13892,0.600568481425128); #3786=VECTOR('',#13893,0.8); #3787=VECTOR('',#13894,0.65); #3788=VECTOR('',#13903,0.8); #3789=VECTOR('',#13906,0.65); #3790=VECTOR('',#13907,0.600568481425129); #3791=VECTOR('',#13908,0.15); #3792=VECTOR('',#13909,0.182548871696985); #3793=VECTOR('',#13918,0.15); #3794=VECTOR('',#13919,3.55510359000504); #3795=VECTOR('',#13920,0.15); #3796=VECTOR('',#13921,3.55510359000504); #3797=VECTOR('',#13930,0.15); #3798=VECTOR('',#13931,0.155010942613589); #3799=VECTOR('',#13932,0.15); #3800=VECTOR('',#13933,0.155010942613589); #3801=VECTOR('',#13938,0.15); #3802=VECTOR('',#13943,0.15); #3803=VECTOR('',#13944,1.48500597958576); #3804=VECTOR('',#13945,0.15); #3805=VECTOR('',#13946,1.48500597958576); #3806=VECTOR('',#13955,0.15); #3807=VECTOR('',#13956,1.48500597958576); #3808=VECTOR('',#13957,1.48500597958576); #3809=VECTOR('',#13962,0.15); #3810=VECTOR('',#13967,0.15); #3811=VECTOR('',#13968,0.155010942613589); #3812=VECTOR('',#13969,0.155010942613589); #3813=VECTOR('',#13980,0.15); #3814=VECTOR('',#13983,0.15); #3815=VECTOR('',#13986,0.15); #3816=VECTOR('',#13999,0.15); #3817=VECTOR('',#14000,3.55510359000504); #3818=VECTOR('',#14001,3.55510359000504); #3819=VECTOR('',#14008,0.15); #3820=VECTOR('',#14013,5.1); #3821=VECTOR('',#14016,0.15); #3822=VECTOR('',#14017,5.1); #3823=VECTOR('',#14024,5.3); #3824=VECTOR('',#14029,0.5); #3825=VECTOR('',#14030,0.45); #3826=VECTOR('',#14031,0.5); #3827=VECTOR('',#14032,0.45); #3828=VECTOR('',#14035,0.125); #3829=VECTOR('',#14036,0.530801521216414); #3830=VECTOR('',#14037,0.125); #3831=VECTOR('',#14038,0.530801521216413); #3832=VECTOR('',#14041,0.125); #3833=VECTOR('',#14042,0.530801521216414); #3834=VECTOR('',#14043,0.125); #3835=VECTOR('',#14044,0.530801521216414); #3836=VECTOR('',#14047,0.138484417018337); #3837=VECTOR('',#14048,0.532316948073585); #3838=VECTOR('',#14049,0.125); #3839=VECTOR('',#14050,0.293966525501146); #3840=VECTOR('',#14051,0.45); #3841=VECTOR('',#14052,0.418966525501146); #3842=VECTOR('',#14053,0.532316948073585); #3843=VECTOR('',#14054,0.125); #3844=VECTOR('',#14055,0.0134844170183378); #3845=VECTOR('',#14056,0.45); #3846=VECTOR('',#14061,0.45); #3847=VECTOR('',#14066,0.790993887787064); #3848=VECTOR('',#14067,0.790993887787064); #3849=VECTOR('',#14074,0.45); #3850=VECTOR('',#14077,0.775323328274985); #3851=VECTOR('',#14078,0.5); #3852=VECTOR('',#14079,0.455556882702037); #3853=VECTOR('',#14082,0.153447552942312); #3854=VECTOR('',#14085,0.45); #3855=VECTOR('',#14088,0.45); #3856=VECTOR('',#14091,0.45); #3857=VECTOR('',#14092,0.455556882702037); #3858=VECTOR('',#14097,0.45); #3859=VECTOR('',#14100,0.45); #3860=VECTOR('',#14103,1.08977293874648); #3861=VECTOR('',#14104,1.08977293874648); #3862=VECTOR('',#14107,0.37831491209048); #3863=VECTOR('',#14110,0.530801521216414); #3864=VECTOR('',#14111,0.530801521216413); #3865=VECTOR('',#14112,0.125); #3866=VECTOR('',#14115,0.530801521216413); #3867=VECTOR('',#14116,0.530801521216413); #3868=VECTOR('',#14117,0.125); #3869=VECTOR('',#14120,0.532316948073585); #3870=VECTOR('',#14123,0.532316948073585); #3871=VECTOR('',#14126,0.253314912090481); #3872=VECTOR('',#14129,0.028447552942312); #3873=VECTOR('',#14132,0.775323328274985); #3874=VECTOR('',#14133,0.45); #3875=VECTOR('',#14136,0.5); #3876=VECTOR('',#14143,0.293966525501146); #3877=VECTOR('',#14144,0.530801521216414); #3878=VECTOR('',#14145,0.028447552942312); #3879=VECTOR('',#14148,0.455556882702037); #3880=VECTOR('',#14149,0.5); #3881=VECTOR('',#14150,0.775323328274985); #3882=VECTOR('',#14153,0.45); #3883=VECTOR('',#14154,0.45); #3884=VECTOR('',#14155,0.5); #3885=VECTOR('',#14158,0.45); #3886=VECTOR('',#14159,0.775323328274985); #3887=VECTOR('',#14162,0.45); #3888=VECTOR('',#14163,0.125); #3889=VECTOR('',#14164,0.657316948073585); #3890=VECTOR('',#14165,0.125); #3891=VECTOR('',#14166,0.253314912090481); #3892=VECTOR('',#14167,0.45); #3893=VECTOR('',#14168,0.253314912090481); #3894=VECTOR('',#14169,0.125); #3895=VECTOR('',#14170,0.657316948073585); #3896=VECTOR('',#14171,0.125); #3897=VECTOR('',#14172,0.028447552942312); #3898=VECTOR('',#14177,1.08977293874648); #3899=VECTOR('',#14178,0.5); #3900=VECTOR('',#14179,0.790993887787064); #3901=VECTOR('',#14182,0.0134844170183378); #3902=VECTOR('',#14183,0.530801521216413); #3903=VECTOR('',#14186,0.530801521216413); #3904=VECTOR('',#14187,0.657316948073585); #3905=VECTOR('',#14188,0.530801521216413); #3906=VECTOR('',#14191,0.530801521216414); #3907=VECTOR('',#14192,0.530801521216413); #3908=VECTOR('',#14193,0.125); #3909=VECTOR('',#14196,0.530801521216413); #3910=VECTOR('',#14197,0.657316948073585); #3911=VECTOR('',#14200,0.125); #3912=VECTOR('',#14203,0.530801521216413); #3913=VECTOR('',#14204,0.125); #3914=VECTOR('',#14207,0.125); #3915=VECTOR('',#14212,0.0134844170183378); #3916=VECTOR('',#14215,0.790993887787064); #3917=VECTOR('',#14216,0.5); #3918=VECTOR('',#14217,1.08977293874648); #3919=VECTOR('',#14220,0.45); #3920=VECTOR('',#14221,0.45); #3921=VECTOR('',#14226,0.45); #3922=VECTOR('',#14227,0.455556882702037); #3923=VECTOR('',#14236,0.293966525501146); #3924=VECTOR('',#14239,0.45); #3925=VECTOR('',#14240,0.45); #3926=VECTOR('',#14245,0.45); #3927=VECTOR('',#14246,0.45); #3928=VECTOR('',#14253,0.5); #3929=VECTOR('',#14254,0.45); #3930=VECTOR('',#14255,0.5); #3931=VECTOR('',#14256,0.45); #3932=VECTOR('',#14261,0.45); #3933=VECTOR('',#14264,0.45); #3934=VECTOR('',#14267,0.790993887787064); #3935=VECTOR('',#14268,0.790993887787064); #3936=VECTOR('',#14273,0.45); #3937=VECTOR('',#14276,0.45); #3938=VECTOR('',#14279,0.0134844170183378); #3939=VECTOR('',#14280,0.125); #3940=VECTOR('',#14281,0.657316948073585); #3941=VECTOR('',#14282,0.125); #3942=VECTOR('',#14283,0.293966525501146); #3943=VECTOR('',#14284,0.293966525501146); #3944=VECTOR('',#14285,0.125); #3945=VECTOR('',#14286,0.657316948073585); #3946=VECTOR('',#14287,0.125); #3947=VECTOR('',#14288,0.0134844170183378); #3948=VECTOR('',#14291,0.775323328274985); #3949=VECTOR('',#14292,0.5); #3950=VECTOR('',#14293,0.455556882702037); #3951=VECTOR('',#14296,0.028447552942312); #3952=VECTOR('',#14297,0.530801521216414); #3953=VECTOR('',#14300,0.45); #3954=VECTOR('',#14303,0.45); #3955=VECTOR('',#14306,0.45); #3956=VECTOR('',#14307,0.455556882702037); #3957=VECTOR('',#14312,0.45); #3958=VECTOR('',#14315,0.45); #3959=VECTOR('',#14318,1.08977293874648); #3960=VECTOR('',#14319,1.08977293874648); #3961=VECTOR('',#14322,0.253314912090481); #3962=VECTOR('',#14323,0.530801521216413); #3963=VECTOR('',#14326,0.530801521216414); #3964=VECTOR('',#14327,0.530801521216413); #3965=VECTOR('',#14328,0.125); #3966=VECTOR('',#14331,0.125); #3967=VECTOR('',#14332,0.530801521216413); #3968=VECTOR('',#14335,0.530801521216413); #3969=VECTOR('',#14336,0.530801521216413); #3970=VECTOR('',#14337,0.125); #3971=VECTOR('',#14340,0.530801521216413); #3972=VECTOR('',#14341,0.657316948073585); #3973=VECTOR('',#14344,0.125); #3974=VECTOR('',#14347,0.657316948073585); #3975=VECTOR('',#14350,0.253314912090481); #3976=VECTOR('',#14353,0.028447552942312); #3977=VECTOR('',#14356,0.775323328274985); #3978=VECTOR('',#14357,0.45); #3979=VECTOR('',#14360,0.5); #3980=VECTOR('',#14367,0.418966525501146); #3981=VECTOR('',#14368,0.530801521216414); #3982=VECTOR('',#14369,0.153447552942312); #3983=VECTOR('',#14372,0.455556882702037); #3984=VECTOR('',#14373,0.5); #3985=VECTOR('',#14374,0.775323328274985); #3986=VECTOR('',#14377,0.45); #3987=VECTOR('',#14378,0.45); #3988=VECTOR('',#14379,0.5); #3989=VECTOR('',#14382,0.45); #3990=VECTOR('',#14383,0.775323328274985); #3991=VECTOR('',#14386,0.125); #3992=VECTOR('',#14387,0.532316948073585); #3993=VECTOR('',#14388,0.125); #3994=VECTOR('',#14389,0.028447552942312); #3995=VECTOR('',#14390,0.45); #3996=VECTOR('',#14391,0.125); #3997=VECTOR('',#14392,0.532316948073585); #3998=VECTOR('',#14393,0.125); #3999=VECTOR('',#14394,0.253314912090481); #4000=VECTOR('',#14395,0.45); #4001=VECTOR('',#14396,0.37831491209048); #4002=VECTOR('',#14401,1.08977293874648); #4003=VECTOR('',#14402,0.5); #4004=VECTOR('',#14403,0.790993887787064); #4005=VECTOR('',#14406,0.138484417018337); #4006=VECTOR('',#14407,0.530801521216413); #4007=VECTOR('',#14410,0.530801521216414); #4008=VECTOR('',#14411,0.530801521216413); #4009=VECTOR('',#14412,0.125); #4010=VECTOR('',#14415,0.530801521216413); #4011=VECTOR('',#14416,0.530801521216413); #4012=VECTOR('',#14417,0.125); #4013=VECTOR('',#14422,0.0134844170183378); #4014=VECTOR('',#14425,0.790993887787064); #4015=VECTOR('',#14426,0.5); #4016=VECTOR('',#14427,1.08977293874648); #4017=VECTOR('',#14430,0.45); #4018=VECTOR('',#14431,0.45); #4019=VECTOR('',#14436,0.45); #4020=VECTOR('',#14437,0.455556882702037); #4021=VECTOR('',#14446,0.293966525501146); #4022=VECTOR('',#14449,0.45); #4023=VECTOR('',#14452,0.45); #4024=VECTOR('',#14453,0.45); #4025=VECTOR('',#14456,0.45); #4026=VECTOR('',#14459,0.125); #4027=VECTOR('',#14460,0.532316948073585); #4028=VECTOR('',#14461,0.125); #4029=VECTOR('',#14462,0.532316948073585); #4030=VECTOR('',#14465,0.530801521216413); #4031=VECTOR('',#14468,0.530801521216413); #4032=VECTOR('',#14477,0.5); #4033=VECTOR('',#14478,0.45); #4034=VECTOR('',#14479,0.5); #4035=VECTOR('',#14480,0.45); #4036=VECTOR('',#14485,0.45); #4037=VECTOR('',#14488,0.45); #4038=VECTOR('',#14491,0.790993887787064); #4039=VECTOR('',#14492,0.790993887787064); #4040=VECTOR('',#14497,0.45); #4041=VECTOR('',#14500,0.45); #4042=VECTOR('',#14503,0.0134844170183378); #4043=VECTOR('',#14504,0.125); #4044=VECTOR('',#14505,0.657316948073585); #4045=VECTOR('',#14506,0.125); #4046=VECTOR('',#14507,0.293966525501146); #4047=VECTOR('',#14508,0.293966525501146); #4048=VECTOR('',#14509,0.125); #4049=VECTOR('',#14510,0.657316948073585); #4050=VECTOR('',#14511,0.125); #4051=VECTOR('',#14512,0.0134844170183378); #4052=VECTOR('',#14515,0.775323328274985); #4053=VECTOR('',#14516,0.5); #4054=VECTOR('',#14517,0.455556882702037); #4055=VECTOR('',#14520,0.028447552942312); #4056=VECTOR('',#14521,0.530801521216414); #4057=VECTOR('',#14524,0.45); #4058=VECTOR('',#14527,0.45); #4059=VECTOR('',#14530,0.45); #4060=VECTOR('',#14531,0.455556882702037); #4061=VECTOR('',#14536,0.45); #4062=VECTOR('',#14539,0.45); #4063=VECTOR('',#14542,1.08977293874648); #4064=VECTOR('',#14543,1.08977293874648); #4065=VECTOR('',#14546,0.253314912090481); #4066=VECTOR('',#14547,0.530801521216413); #4067=VECTOR('',#14550,0.530801521216414); #4068=VECTOR('',#14551,0.530801521216413); #4069=VECTOR('',#14552,0.125); #4070=VECTOR('',#14555,0.125); #4071=VECTOR('',#14556,0.530801521216413); #4072=VECTOR('',#14559,0.530801521216413); #4073=VECTOR('',#14560,0.530801521216413); #4074=VECTOR('',#14561,0.125); #4075=VECTOR('',#14564,0.530801521216413); #4076=VECTOR('',#14565,0.657316948073585); #4077=VECTOR('',#14568,0.125); #4078=VECTOR('',#14571,0.657316948073585); #4079=VECTOR('',#14574,0.253314912090481); #4080=VECTOR('',#14577,0.028447552942312); #4081=VECTOR('',#14580,0.775323328274985); #4082=VECTOR('',#14581,0.45); #4083=VECTOR('',#14584,0.5); #4084=VECTOR('',#14591,0.293966525501146); #4085=VECTOR('',#14592,0.530801521216414); #4086=VECTOR('',#14593,0.028447552942312); #4087=VECTOR('',#14596,0.455556882702037); #4088=VECTOR('',#14597,0.5); #4089=VECTOR('',#14598,0.775323328274985); #4090=VECTOR('',#14601,0.45); #4091=VECTOR('',#14602,0.45); #4092=VECTOR('',#14603,0.5); #4093=VECTOR('',#14606,0.45); #4094=VECTOR('',#14607,0.775323328274985); #4095=VECTOR('',#14610,0.45); #4096=VECTOR('',#14611,0.125); #4097=VECTOR('',#14612,0.657316948073585); #4098=VECTOR('',#14613,0.125); #4099=VECTOR('',#14614,0.253314912090481); #4100=VECTOR('',#14615,0.45); #4101=VECTOR('',#14616,0.253314912090481); #4102=VECTOR('',#14617,0.125); #4103=VECTOR('',#14618,0.657316948073585); #4104=VECTOR('',#14619,0.125); #4105=VECTOR('',#14620,0.028447552942312); #4106=VECTOR('',#14625,1.08977293874648); #4107=VECTOR('',#14626,0.5); #4108=VECTOR('',#14627,0.790993887787064); #4109=VECTOR('',#14630,0.0134844170183378); #4110=VECTOR('',#14631,0.530801521216413); #4111=VECTOR('',#14634,0.530801521216413); #4112=VECTOR('',#14635,0.657316948073585); #4113=VECTOR('',#14636,0.530801521216413); #4114=VECTOR('',#14639,0.530801521216414); #4115=VECTOR('',#14640,0.530801521216413); #4116=VECTOR('',#14641,0.125); #4117=VECTOR('',#14644,0.530801521216413); #4118=VECTOR('',#14645,0.657316948073585); #4119=VECTOR('',#14648,0.125); #4120=VECTOR('',#14651,0.530801521216413); #4121=VECTOR('',#14652,0.125); #4122=VECTOR('',#14655,0.125); #4123=VECTOR('',#14660,0.0134844170183378); #4124=VECTOR('',#14663,0.790993887787064); #4125=VECTOR('',#14664,0.5); #4126=VECTOR('',#14665,1.08977293874648); #4127=VECTOR('',#14668,0.45); #4128=VECTOR('',#14669,0.45); #4129=VECTOR('',#14674,0.45); #4130=VECTOR('',#14675,0.455556882702037); #4131=VECTOR('',#14684,0.293966525501146); #4132=VECTOR('',#14687,0.45); #4133=VECTOR('',#14688,0.45); #4134=VECTOR('',#14693,0.45); #4135=VECTOR('',#14694,0.45); #4136=VECTOR('',#14701,0.1); #4137=VECTOR('',#14702,0.1); #4138=VECTOR('',#14703,0.1); #4139=VECTOR('',#14704,0.1); #4140=VECTOR('',#14705,0.1); #4141=VECTOR('',#14708,0.030049468531021); #4142=VECTOR('',#14709,0.030049468531021); #4143=VECTOR('',#14710,0.1); #4144=VECTOR('',#14713,0.00154540123873836); #4145=VECTOR('',#14714,0.00154540123873836); #4146=VECTOR('',#14715,0.1); #4147=VECTOR('',#14716,0.1); #4148=VECTOR('',#14717,0.1); #4149=VECTOR('',#14718,0.1); #4150=VECTOR('',#14719,0.1); #4151=VECTOR('',#14720,0.1); #4152=VECTOR('',#14723,0.00154540123873836); #4153=VECTOR('',#14724,0.00154540123873836); #4154=VECTOR('',#14725,0.1); #4155=VECTOR('',#14728,0.030049468531021); #4156=VECTOR('',#14729,0.030049468531021); #4157=VECTOR('',#14730,0.1); #4158=VECTOR('',#14731,0.1); #4159=VECTOR('',#14732,0.1); #4160=VECTOR('',#14739,0.159004616341289); #4161=VECTOR('',#14740,0.1); #4162=VECTOR('',#14741,0.159004616341289); #4163=VECTOR('',#14742,0.1); #4164=VECTOR('',#14745,0.0267869548047961); #4165=VECTOR('',#14746,0.0267869548047961); #4166=VECTOR('',#14747,0.1); #4167=VECTOR('',#14750,0.159004616341289); #4168=VECTOR('',#14751,0.159004616341289); #4169=VECTOR('',#14752,0.1); #4170=VECTOR('',#14755,0.0267869548047961); #4171=VECTOR('',#14756,0.0267869548047961); #4172=VECTOR('',#14761,0.1); #4173=VECTOR('',#14762,0.1); #4174=VECTOR('',#14763,0.1); #4175=VECTOR('',#14766,0.112814290427891); #4176=VECTOR('',#14767,0.112814290427891); #4177=VECTOR('',#14768,0.1); #4178=VECTOR('',#14771,0.0267869548047961); #4179=VECTOR('',#14772,0.0267869548047961); #4180=VECTOR('',#14773,0.1); #4181=VECTOR('',#14776,0.159004616341289); #4182=VECTOR('',#14777,0.159004616341289); #4183=VECTOR('',#14778,0.1); #4184=VECTOR('',#14781,0.0267869548047961); #4185=VECTOR('',#14782,0.0267869548047961); #4186=VECTOR('',#14783,0.1); #4187=VECTOR('',#14786,0.0236961523273194); #4188=VECTOR('',#14787,0.0236961523273194); #4189=VECTOR('',#14788,0.1); #4190=VECTOR('',#14789,0.1); #4191=VECTOR('',#14790,0.1); #4192=VECTOR('',#14793,0.0278172222972878); #4193=VECTOR('',#14794,0.0278172222972878); #4194=VECTOR('',#14795,0.1); #4195=VECTOR('',#14798,0.00137368998998966); #4196=VECTOR('',#14799,0.00137368998998966); #4197=VECTOR('',#14804,0.1); #4198=VECTOR('',#14805,0.1); #4199=VECTOR('',#14806,0.1); #4200=VECTOR('',#14807,0.1); #4201=VECTOR('',#14808,0.1); #4202=VECTOR('',#14811,0.030049468531021); #4203=VECTOR('',#14812,0.030049468531021); #4204=VECTOR('',#14813,0.1); #4205=VECTOR('',#14816,0.00154540123873836); #4206=VECTOR('',#14817,0.00154540123873836); #4207=VECTOR('',#14818,0.1); #4208=VECTOR('',#14819,0.1); #4209=VECTOR('',#14820,0.1); #4210=VECTOR('',#14821,0.1); #4211=VECTOR('',#14822,0.1); #4212=VECTOR('',#14823,0.1); #4213=VECTOR('',#14826,0.00154540123873836); #4214=VECTOR('',#14827,0.00154540123873836); #4215=VECTOR('',#14828,0.1); #4216=VECTOR('',#14831,0.030049468531021); #4217=VECTOR('',#14832,0.030049468531021); #4218=VECTOR('',#14833,0.1); #4219=VECTOR('',#14834,0.1); #4220=VECTOR('',#14835,0.1); #4221=VECTOR('',#14842,0.0839668006381106); #4222=VECTOR('',#14843,0.1); #4223=VECTOR('',#14844,0.0839668006381106); #4224=VECTOR('',#14845,0.1); #4225=VECTOR('',#14846,0.1); #4226=VECTOR('',#14847,0.1); #4227=VECTOR('',#14848,0.1); #4228=VECTOR('',#14849,0.1); #4229=VECTOR('',#14850,0.1); #4230=VECTOR('',#14851,0.1); #4231=VECTOR('',#14852,0.1); #4232=VECTOR('',#14855,0.014595456143639); #4233=VECTOR('',#14856,0.014595456143639); #4234=VECTOR('',#14857,0.1); #4235=VECTOR('',#14860,0.110066910447912); #4236=VECTOR('',#14861,0.110066910447912); #4237=VECTOR('',#14862,0.1); #4238=VECTOR('',#14863,0.1); #4239=VECTOR('',#14864,0.1); #4240=VECTOR('',#14865,0.1); #4241=VECTOR('',#14868,0.00154540123873836); #4242=VECTOR('',#14869,0.00154540123873836); #4243=VECTOR('',#14870,0.1); #4244=VECTOR('',#14873,0.0291909122872774); #4245=VECTOR('',#14874,0.0291909122872774); #4246=VECTOR('',#14875,0.1); #4247=VECTOR('',#14876,0.1); #4248=VECTOR('',#14877,0.1); #4249=VECTOR('',#14882,0.1); #4250=VECTOR('',#14883,0.1); #4251=VECTOR('',#14884,0.1); #4252=VECTOR('',#14887,0.112814290427891); #4253=VECTOR('',#14888,0.112814290427891); #4254=VECTOR('',#14889,0.1); #4255=VECTOR('',#14892,0.0267869548047961); #4256=VECTOR('',#14893,0.0267869548047961); #4257=VECTOR('',#14894,0.1); #4258=VECTOR('',#14897,0.159004616341289); #4259=VECTOR('',#14898,0.159004616341289); #4260=VECTOR('',#14899,0.1); #4261=VECTOR('',#14902,0.0267869548047961); #4262=VECTOR('',#14903,0.0267869548047961); #4263=VECTOR('',#14904,0.1); #4264=VECTOR('',#14907,0.0236961523273194); #4265=VECTOR('',#14908,0.0236961523273194); #4266=VECTOR('',#14909,0.1); #4267=VECTOR('',#14910,0.1); #4268=VECTOR('',#14911,0.1); #4269=VECTOR('',#14914,0.0278172222972878); #4270=VECTOR('',#14915,0.0278172222972878); #4271=VECTOR('',#14916,0.1); #4272=VECTOR('',#14919,0.0013736899899891); #4273=VECTOR('',#14920,0.0013736899899891); #4274=VECTOR('',#14927,0.0278172222972883); #4275=VECTOR('',#14928,0.1); #4276=VECTOR('',#14929,0.0278172222972883); #4277=VECTOR('',#14930,0.1); #4278=VECTOR('',#14933,0.0303928910285189); #4279=VECTOR('',#14934,0.0303928910285189); #4280=VECTOR('',#14935,0.1); #4281=VECTOR('',#14938,0.0278172222972883); #4282=VECTOR('',#14939,0.0278172222972883); #4283=VECTOR('',#14940,0.1); #4284=VECTOR('',#14943,0.0303928910285189); #4285=VECTOR('',#14944,0.0303928910285189); #4286=VECTOR('',#14951,0.18252905741986); #4287=VECTOR('',#14952,0.1); #4288=VECTOR('',#14953,0.18252905741986); #4289=VECTOR('',#14954,0.1); #4290=VECTOR('',#14957,0.135903026263899); #4291=VECTOR('',#14958,0.135903026263899); #4292=VECTOR('',#14959,0.1); #4293=VECTOR('',#14962,0.0171711248748696); #4294=VECTOR('',#14963,0.0171711248748696); #4295=VECTOR('',#14964,0.1); #4296=VECTOR('',#14967,0.13569426431419); #4297=VECTOR('',#14968,0.13569426431419); #4298=VECTOR('',#14969,0.1); #4299=VECTOR('',#14972,0.18252905741986); #4300=VECTOR('',#14973,0.18252905741986); #4301=VECTOR('',#14974,0.1); #4302=VECTOR('',#14977,0.02627182105855); #4303=VECTOR('',#14978,0.02627182105855); #4304=VECTOR('',#14979,0.1); #4305=VECTOR('',#14982,0.211891680955887); #4306=VECTOR('',#14983,0.211891680955887); #4307=VECTOR('',#14984,0.1); #4308=VECTOR('',#14987,0.0384633197197071); #4309=VECTOR('',#14988,0.0384633197197071); #4310=VECTOR('',#14989,0.1); #4311=VECTOR('',#14992,0.129278501565858); #4312=VECTOR('',#14993,0.129278501565858); #4313=VECTOR('',#14994,0.1); #4314=VECTOR('',#14997,0.128585587700394); #4315=VECTOR('',#14998,0.128585587700394); #4316=VECTOR('',#14999,0.1); #4317=VECTOR('',#15002,0.0391501647147019); #4318=VECTOR('',#15003,0.0391501647147019); #4319=VECTOR('',#15004,0.1); #4320=VECTOR('',#15007,0.211891680955887); #4321=VECTOR('',#15008,0.211891680955887); #4322=VECTOR('',#15009,0.1); #4323=VECTOR('',#15012,0.0281606447947852); #4324=VECTOR('',#15013,0.0281606447947852); #4325=VECTOR('',#15020,0.0353725172422309); #4326=VECTOR('',#15021,0.1); #4327=VECTOR('',#15022,0.0353725172422309); #4328=VECTOR('',#15023,0.1); #4329=VECTOR('',#15026,0.00206053498498449); #4330=VECTOR('',#15027,0.00206053498498449); #4331=VECTOR('',#15028,0.1); #4332=VECTOR('',#15029,0.1); #4333=VECTOR('',#15030,0.1); #4334=VECTOR('',#15031,0.1); #4335=VECTOR('',#15032,0.1); #4336=VECTOR('',#15033,0.1); #4337=VECTOR('',#15034,0.1); #4338=VECTOR('',#15035,0.1); #4339=VECTOR('',#15036,0.1); #4340=VECTOR('',#15039,0.0336554047547438); #4341=VECTOR('',#15040,0.0336554047547438); #4342=VECTOR('',#15041,0.1); #4343=VECTOR('',#15044,0.00206053498498449); #4344=VECTOR('',#15045,0.00206053498498449); #4345=VECTOR('',#15046,0.1); #4346=VECTOR('',#15047,0.1); #4347=VECTOR('',#15048,0.1); #4348=VECTOR('',#15049,0.1); #4349=VECTOR('',#15050,0.1); #4350=VECTOR('',#15051,0.1); #4351=VECTOR('',#15052,0.1); #4352=VECTOR('',#15053,0.1); #4353=VECTOR('',#15058,0.1); #4354=VECTOR('',#15059,0.1); #4355=VECTOR('',#15060,0.1); #4356=VECTOR('',#15063,0.0323474885385658); #4357=VECTOR('',#15064,0.1); #4358=VECTOR('',#15065,0.0323474885385658); #4359=VECTOR('',#15068,0.104230796402046); #4360=VECTOR('',#15069,0.1); #4361=VECTOR('',#15070,0.104230796402046); #4362=VECTOR('',#15073,0.0366155599429599); #4363=VECTOR('',#15074,0.1); #4364=VECTOR('',#15075,0.0366155599429599); #4365=VECTOR('',#15076,0.1); #4366=VECTOR('',#15079,0.140855671058949); #4367=VECTOR('',#15080,0.1); #4368=VECTOR('',#15081,0.140855671058949); #4369=VECTOR('',#15082,0.1); #4370=VECTOR('',#15085,0.0422314433697943); #4371=VECTOR('',#15086,0.0422314433697943); #4372=VECTOR('',#15087,0.1); #4373=VECTOR('',#15090,0.110295950503027); #4374=VECTOR('',#15091,0.110295950503027); #4375=VECTOR('',#15092,0.1); #4376=VECTOR('',#15095,0.0368401952800335); #4377=VECTOR('',#15096,0.0368401952800335); #4378=VECTOR('',#15097,0.1); #4379=VECTOR('',#15100,0.277200005948544); #4380=VECTOR('',#15101,0.277200005948544); #4381=VECTOR('',#15102,0.1); #4382=VECTOR('',#15105,0.0714340371893329); #4383=VECTOR('',#15106,0.0714340371893329); #4384=VECTOR('',#15107,0.1); #4385=VECTOR('',#15108,0.1); #4386=VECTOR('',#15109,0.1); #4387=VECTOR('',#15110,0.1); #4388=VECTOR('',#15113,0.155808533673783); #4389=VECTOR('',#15114,0.155808533673783); #4390=VECTOR('',#15115,0.1); #4391=VECTOR('',#15118,0.0478473267966287); #4392=VECTOR('',#15119,0.0478473267966287); #4393=VECTOR('',#15126,0.135679743592318); #4394=VECTOR('',#15127,0.1); #4395=VECTOR('',#15128,0.135679743592318); #4396=VECTOR('',#15129,0.1); #4397=VECTOR('',#15132,0.127592871457676); #4398=VECTOR('',#15133,0.127592871457676); #4399=VECTOR('',#15134,0.1); #4400=VECTOR('',#15137,0.135679743592318); #4401=VECTOR('',#15138,0.135679743592318); #4402=VECTOR('',#15139,0.1); #4403=VECTOR('',#15142,0.0368401952800335); #4404=VECTOR('',#15143,0.0368401952800335); #4405=VECTOR('',#15144,0.1); #4406=VECTOR('',#15147,0.277200005948544); #4407=VECTOR('',#15148,0.277200005948544); #4408=VECTOR('',#15149,0.1); #4409=VECTOR('',#15152,0.0368401952800335); #4410=VECTOR('',#15153,0.0368401952800335); #4411=VECTOR('',#15154,0.1); #4412=VECTOR('',#15157,0.108723503143513); #4413=VECTOR('',#15158,0.108723503143513); #4414=VECTOR('',#15159,0.1); #4415=VECTOR('',#15162,0.127592871457676); #4416=VECTOR('',#15163,0.127592871457676); #4417=VECTOR('',#15164,0.1); #4418=VECTOR('',#15167,0.108723503143513); #4419=VECTOR('',#15168,0.108723503143513); #4420=VECTOR('',#15169,0.1); #4421=VECTOR('',#15172,0.0368401952800335); #4422=VECTOR('',#15173,0.0368401952800335); #4423=VECTOR('',#15174,0.1); #4424=VECTOR('',#15177,0.277200005948544); #4425=VECTOR('',#15178,0.277200005948544); #4426=VECTOR('',#15179,0.1); #4427=VECTOR('',#15182,0.0368401952800335); #4428=VECTOR('',#15183,0.0368401952800335); #4429=VECTOR('',#15188,0.1); #4430=VECTOR('',#15189,0.1); #4431=VECTOR('',#15192,0.00224635337073398); #4432=VECTOR('',#15193,0.00224635337073398); #4433=VECTOR('',#15194,0.1); #4434=VECTOR('',#15197,0.0393111839878402); #4435=VECTOR('',#15198,0.0393111839878402); #4436=VECTOR('',#15199,0.1); #4437=VECTOR('',#15200,0.1); #4438=VECTOR('',#15201,0.1); #4439=VECTOR('',#15202,0.1); #4440=VECTOR('',#15203,0.1); #4441=VECTOR('',#15206,0.00269562404488055); #4442=VECTOR('',#15207,0.00269562404488055); #4443=VECTOR('',#15208,0.1); #4444=VECTOR('',#15209,0.1); #4445=VECTOR('',#15210,0.1); #4446=VECTOR('',#15211,0.1); #4447=VECTOR('',#15212,0.1); #4448=VECTOR('',#15213,0.1); #4449=VECTOR('',#15216,0.0393111839878402); #4450=VECTOR('',#15217,0.0393111839878396); #4451=VECTOR('',#15218,0.1); #4452=VECTOR('',#15221,0.00269562404488); #4453=VECTOR('',#15222,0.00269562404488); #4454=VECTOR('',#15223,0.1); #4455=VECTOR('',#15224,0.1); #4456=VECTOR('',#15225,0.1); #4457=VECTOR('',#15226,0.1); #4458=VECTOR('',#15227,0.1); #4459=VECTOR('',#15228,0.1); #4460=VECTOR('',#15231,0.0157244735951362); #4461=VECTOR('',#15232,0.0157244735951362); #4462=VECTOR('',#15233,0.1); #4463=VECTOR('',#15236,0.0307750411790519); #4464=VECTOR('',#15237,0.0307750411790519); #4465=VECTOR('',#15238,0.1); #4466=VECTOR('',#15241,0.0123549435390358); #4467=VECTOR('',#15242,0.0123549435390358); #4468=VECTOR('',#15243,0.1); #4469=VECTOR('',#15244,0.1); #4470=VECTOR('',#15245,0.1); #4471=VECTOR('',#15246,0.1); #4472=VECTOR('',#15251,0.1); #4473=VECTOR('',#15252,0.1); #4474=VECTOR('',#15253,0.1); #4475=VECTOR('',#15254,0.1); #4476=VECTOR('',#15255,0.1); #4477=VECTOR('',#15256,0.1); #4478=VECTOR('',#15257,0.1); #4479=VECTOR('',#15258,0.1); #4480=VECTOR('',#15259,0.1); #4481=VECTOR('',#15260,0.1); #4482=VECTOR('',#15261,0.1); #4483=VECTOR('',#15262,0.1); #4484=VECTOR('',#15267,0.1); #4485=VECTOR('',#15268,0.1); #4486=VECTOR('',#15269,0.1); #4487=VECTOR('',#15270,0.1); #4488=VECTOR('',#15271,0.1); #4489=VECTOR('',#15272,0.1); #4490=VECTOR('',#15273,0.1); #4491=VECTOR('',#15274,0.1); #4492=VECTOR('',#15275,0.1); #4493=VECTOR('',#15276,0.1); #4494=VECTOR('',#15277,0.1); #4495=VECTOR('',#15278,0.1); #4496=VECTOR('',#15285,0.268644704593458); #4497=VECTOR('',#15286,0.1); #4498=VECTOR('',#15287,0.268644704593458); #4499=VECTOR('',#15288,0.1); #4500=VECTOR('',#15291,0.23901199864607); #4501=VECTOR('',#15292,0.23901199864607); #4502=VECTOR('',#15293,0.1); #4503=VECTOR('',#15296,0.0343692065722262); #4504=VECTOR('',#15297,0.0343692065722262); #4505=VECTOR('',#15298,0.1); #4506=VECTOR('',#15301,0.277200005948544); #4507=VECTOR('',#15302,0.277200005948544); #4508=VECTOR('',#15303,0.1); #4509=VECTOR('',#15306,0.0523400335380958); #4510=VECTOR('',#15307,0.0523400335380958); #4511=VECTOR('',#15308,0.1); #4512=VECTOR('',#15311,0.246233325660424); #4513=VECTOR('',#15312,0.246233325660424); #4514=VECTOR('',#15313,0.1); #4515=VECTOR('',#15316,0.219468724320687); #4516=VECTOR('',#15317,0.219468724320687); #4517=VECTOR('',#15318,0.1); #4518=VECTOR('',#15321,0.0343692065722262); #4519=VECTOR('',#15322,0.0343692065722262); #4520=VECTOR('',#15323,0.1); #4521=VECTOR('',#15326,0.277200005948544); #4522=VECTOR('',#15327,0.277200005948544); #4523=VECTOR('',#15328,0.1); #4524=VECTOR('',#15331,0.0413329020215003); #4525=VECTOR('',#15332,0.0413329020215003); #4526=VECTOR('',#15341,0.1); #4527=VECTOR('',#15344,0.1); #4528=VECTOR('',#15347,0.22374969329122); #4529=VECTOR('',#15348,0.667419130837806); #4530=VECTOR('',#15349,0.901762417155636); #4531=VECTOR('',#15350,0.181171410576339); #4532=VECTOR('',#15351,0.718529072260691); #4533=VECTOR('',#15354,0.200966221394488); #4534=VECTOR('',#15357,0.22374969329122); #4535=VECTOR('',#15358,0.1); #4536=VECTOR('',#15361,0.1); #4537=VECTOR('',#15364,0.1); #4538=VECTOR('',#15367,0.200966221394488); #4539=VECTOR('',#15370,0.1); #4540=VECTOR('',#15371,0.181171410576339); #4541=VECTOR('',#15372,0.1); #4542=VECTOR('',#15375,0.718529072260691); #4543=VECTOR('',#15378,0.667419130837806); #4544=VECTOR('',#15379,0.1); #4545=VECTOR('',#15382,0.901762417155636); #4546=VECTOR('',#15397,0.183770466131743); #4547=VECTOR('',#15398,0.1); #4548=VECTOR('',#15399,0.183770466131743); #4549=VECTOR('',#15400,0.1); #4550=VECTOR('',#15403,0.498926222445415); #4551=VECTOR('',#15404,0.498926222445415); #4552=VECTOR('',#15405,0.1); #4553=VECTOR('',#15408,0.183770466131743); #4554=VECTOR('',#15409,0.183770466131743); #4555=VECTOR('',#15410,0.1); #4556=VECTOR('',#15413,0.498926222445415); #4557=VECTOR('',#15414,0.498926222445415); #4558=VECTOR('',#15423,0.1); #4559=VECTOR('',#15426,0.1); #4560=VECTOR('',#15429,0.0310255012655977); #4561=VECTOR('',#15430,0.1); #4562=VECTOR('',#15431,0.0310255012655977); #4563=VECTOR('',#15436,0.1); #4564=VECTOR('',#15439,0.1); #4565=VECTOR('',#15442,0.00471763288964837); #4566=VECTOR('',#15443,0.00471763288964837); #4567=VECTOR('',#15448,0.1); #4568=VECTOR('',#15451,0.1); #4569=VECTOR('',#15454,0.200043175986686); #4570=VECTOR('',#15455,0.220659320548424); #4571=VECTOR('',#15456,0.494859129848517); #4572=VECTOR('',#15457,0.256952102192246); #4573=VECTOR('',#15460,0.200043175986686); #4574=VECTOR('',#15463,0.1); #4575=VECTOR('',#15464,0.256952102192246); #4576=VECTOR('',#15467,0.494859129848517); #4577=VECTOR('',#15468,0.1); #4578=VECTOR('',#15471,0.220659320548424); #4579=VECTOR('',#15476,0.0397604546619873); #4580=VECTOR('',#15477,0.1); #4581=VECTOR('',#15478,0.0397604546619873); #4582=VECTOR('',#15479,0.1); #4583=VECTOR('',#15482,0.293179753195388); #4584=VECTOR('',#15483,0.293179753195388); #4585=VECTOR('',#15484,0.1); #4586=VECTOR('',#15487,0.039535819324914); #4587=VECTOR('',#15488,0.039535819324914); #4588=VECTOR('',#15489,0.1); #4589=VECTOR('',#15492,0.242729785976195); #4590=VECTOR('',#15493,0.242729785976195); #4591=VECTOR('',#15494,0.1); #4592=VECTOR('',#15497,0.242729785976196); #4593=VECTOR('',#15498,0.242729785976196); #4594=VECTOR('',#15499,0.1); #4595=VECTOR('',#15502,0.0375141012912533); #4596=VECTOR('',#15503,0.0375141012912533); #4597=VECTOR('',#15504,0.1); #4598=VECTOR('',#15507,0.293179753195388); #4599=VECTOR('',#15508,0.293179753195388); #4600=VECTOR('',#15515,0.039535819324914); #4601=VECTOR('',#15516,0.1); #4602=VECTOR('',#15517,0.039535819324914); #4603=VECTOR('',#15518,0.1); #4604=VECTOR('',#15521,0.275489117696761); #4605=VECTOR('',#15522,0.275489117696761); #4606=VECTOR('',#15523,0.1); #4607=VECTOR('',#15526,0.143092709715739); #4608=VECTOR('',#15527,0.143092709715739); #4609=VECTOR('',#15528,0.1); #4610=VECTOR('',#15531,0.0325721238756393); #4611=VECTOR('',#15532,0.0325721238756393); #4612=VECTOR('',#15533,0.1); #4613=VECTOR('',#15536,0.175889468928452); #4614=VECTOR('',#15537,0.175889468928452); #4615=VECTOR('',#15538,0.1); #4616=VECTOR('',#15541,0.0415575373585741); #4617=VECTOR('',#15542,0.0415575373585741); #4618=VECTOR('',#15543,0.1); #4619=VECTOR('',#15546,0.264417548213562); #4620=VECTOR('',#15547,0.264417548213562); #4621=VECTOR('',#15554,0.0855860634249556); #4622=VECTOR('',#15555,0.1); #4623=VECTOR('',#15556,0.0855860634249556); #4624=VECTOR('',#15557,0.1); #4625=VECTOR('',#15560,0.137314677558021); #4626=VECTOR('',#15561,0.1); #4627=VECTOR('',#15562,0.137314677558021); #4628=VECTOR('',#15565,0.137384665545575); #4629=VECTOR('',#15566,0.137384665545575); #4630=VECTOR('',#15569,0.0453763380888217); #4631=VECTOR('',#15570,0.1); #4632=VECTOR('',#15571,0.0453763380888217); #4633=VECTOR('',#15572,0.1); #4634=VECTOR('',#15575,0.292527653585693); #4635=VECTOR('',#15576,0.292527653585693); #4636=VECTOR('',#15577,0.1); #4637=VECTOR('',#15580,0.0388619133136939); #4638=VECTOR('',#15581,0.0388619133136939); #4639=VECTOR('',#15582,0.1); #4640=VECTOR('',#15585,0.0814807208452015); #4641=VECTOR('',#15586,0.0814807208452015); #4642=VECTOR('',#15587,0.1); #4643=VECTOR('',#15590,0.105803243761559); #4644=VECTOR('',#15591,0.105803243761559); #4645=VECTOR('',#15592,0.1); #4646=VECTOR('',#15595,0.0814807208452015); #4647=VECTOR('',#15596,0.0814807208452015); #4648=VECTOR('',#15597,0.1); #4649=VECTOR('',#15600,0.0372894659541803); #4650=VECTOR('',#15601,0.0372894659541803); #4651=VECTOR('',#15602,0.1); #4652=VECTOR('',#15605,0.292527653585693); #4653=VECTOR('',#15606,0.292527653585693); #4654=VECTOR('',#15613,0.277200005948544); #4655=VECTOR('',#15614,0.1); #4656=VECTOR('',#15615,0.277200005948544); #4657=VECTOR('',#15616,0.1); #4658=VECTOR('',#15619,0.0368401952800335); #4659=VECTOR('',#15620,0.0368401952800335); #4660=VECTOR('',#15621,0.1); #4661=VECTOR('',#15624,0.244403246735831); #4662=VECTOR('',#15625,0.244403246735831); #4663=VECTOR('',#15626,0.1); #4664=VECTOR('',#15629,0.123774070727429); #4665=VECTOR('',#15630,0.123774070727429); #4666=VECTOR('',#15631,0.1); #4667=VECTOR('',#15634,0.0327967592127126); #4668=VECTOR('',#15635,0.0327967592127126); #4669=VECTOR('',#15636,0.1); #4670=VECTOR('',#15639,0.160614266007462); #4671=VECTOR('',#15640,0.160614266007462); #4672=VECTOR('',#15647,0.0929990295483768); #4673=VECTOR('',#15648,0.1); #4674=VECTOR('',#15649,0.0929990295483768); #4675=VECTOR('',#15650,0.1); #4676=VECTOR('',#15653,0.0327967592127126); #4677=VECTOR('',#15654,0.0327967592127126); #4678=VECTOR('',#15655,0.1); #4679=VECTOR('',#15658,0.222838254376787); #4680=VECTOR('',#15659,0.222838254376787); #4681=VECTOR('',#15660,0.1); #4682=VECTOR('',#15663,0.0327967592127126); #4683=VECTOR('',#15664,0.0327967592127126); #4684=VECTOR('',#15665,0.1); #4685=VECTOR('',#15668,0.0929990295483771); #4686=VECTOR('',#15669,0.0929990295483771); #4687=VECTOR('',#15670,0.1); #4688=VECTOR('',#15673,0.244403246735831); #4689=VECTOR('',#15674,0.244403246735831); #4690=VECTOR('',#15675,0.1); #4691=VECTOR('',#15678,0.0368401952800332); #4692=VECTOR('',#15679,0.0368401952800332); #4693=VECTOR('',#15680,0.1); #4694=VECTOR('',#15683,0.244403246735831); #4695=VECTOR('',#15684,0.244403246735831); #4696=VECTOR('',#15691,0.0710884569819586); #4697=VECTOR('',#15692,0.1); #4698=VECTOR('',#15693,0.0710884569819586); #4699=VECTOR('',#15694,0.1); #4700=VECTOR('',#15697,0.025069842317309); #4701=VECTOR('',#15698,0.025069842317309); #4702=VECTOR('',#15699,0.1); #4703=VECTOR('',#15702,0.170337558758703); #4704=VECTOR('',#15703,0.170337558758703); #4705=VECTOR('',#15704,0.1); #4706=VECTOR('',#15707,0.025069842317309); #4707=VECTOR('',#15708,0.025069842317309); #4708=VECTOR('',#15709,0.1); #4709=VECTOR('',#15712,0.0710884569819586); #4710=VECTOR('',#15713,0.0710884569819586); #4711=VECTOR('',#15714,0.1); #4712=VECTOR('',#15717,0.186821838638578); #4713=VECTOR('',#15718,0.186821838638578); #4714=VECTOR('',#15719,0.1); #4715=VECTOR('',#15722,0.0281606447947858); #4716=VECTOR('',#15723,0.0281606447947858); #4717=VECTOR('',#15724,0.1); #4718=VECTOR('',#15727,0.186821838638578); #4719=VECTOR('',#15728,0.186821838638578); #4720=VECTOR('',#15735,0.159004616341289); #4721=VECTOR('',#15736,0.1); #4722=VECTOR('',#15737,0.159004616341289); #4723=VECTOR('',#15738,0.1); #4724=VECTOR('',#15741,0.0267869548047961); #4725=VECTOR('',#15742,0.0267869548047961); #4726=VECTOR('',#15743,0.1); #4727=VECTOR('',#15746,0.159004616341289); #4728=VECTOR('',#15747,0.159004616341289); #4729=VECTOR('',#15748,0.1); #4730=VECTOR('',#15751,0.0267869548047961); #4731=VECTOR('',#15752,0.0267869548047961); #4732=VECTOR('',#15757,0.1); #4733=VECTOR('',#15758,0.1); #4734=VECTOR('',#15759,0.1); #4735=VECTOR('',#15760,0.1); #4736=VECTOR('',#15761,0.1); #4737=VECTOR('',#15764,0.030049468531021); #4738=VECTOR('',#15765,0.030049468531021); #4739=VECTOR('',#15766,0.1); #4740=VECTOR('',#15769,0.00154540123873781); #4741=VECTOR('',#15770,0.00154540123873781); #4742=VECTOR('',#15771,0.1); #4743=VECTOR('',#15772,0.1); #4744=VECTOR('',#15773,0.1); #4745=VECTOR('',#15774,0.1); #4746=VECTOR('',#15775,0.1); #4747=VECTOR('',#15776,0.1); #4748=VECTOR('',#15779,0.00154540123873781); #4749=VECTOR('',#15780,0.00154540123873781); #4750=VECTOR('',#15781,0.1); #4751=VECTOR('',#15784,0.030049468531021); #4752=VECTOR('',#15785,0.030049468531021); #4753=VECTOR('',#15786,0.1); #4754=VECTOR('',#15787,0.1); #4755=VECTOR('',#15788,0.1); #4756=VECTOR('',#15793,0.1); #4757=VECTOR('',#15794,0.1); #4758=VECTOR('',#15795,0.1); #4759=VECTOR('',#15796,0.1); #4760=VECTOR('',#15797,0.1); #4761=VECTOR('',#15798,0.1); #4762=VECTOR('',#15799,0.1); #4763=VECTOR('',#15800,0.1); #4764=VECTOR('',#15807,0.0839668006381106); #4765=VECTOR('',#15808,0.1); #4766=VECTOR('',#15809,0.0839668006381106); #4767=VECTOR('',#15810,0.1); #4768=VECTOR('',#15811,0.1); #4769=VECTOR('',#15812,0.1); #4770=VECTOR('',#15813,0.1); #4771=VECTOR('',#15814,0.1); #4772=VECTOR('',#15815,0.1); #4773=VECTOR('',#15816,0.1); #4774=VECTOR('',#15817,0.1); #4775=VECTOR('',#15820,0.014595456143639); #4776=VECTOR('',#15821,0.014595456143639); #4777=VECTOR('',#15822,0.1); #4778=VECTOR('',#15825,0.110066910447912); #4779=VECTOR('',#15826,0.110066910447912); #4780=VECTOR('',#15827,0.1); #4781=VECTOR('',#15828,0.1); #4782=VECTOR('',#15829,0.1); #4783=VECTOR('',#15830,0.1); #4784=VECTOR('',#15833,0.00154540123873781); #4785=VECTOR('',#15834,0.00154540123873781); #4786=VECTOR('',#15835,0.1); #4787=VECTOR('',#15838,0.0291909122872774); #4788=VECTOR('',#15839,0.0291909122872774); #4789=VECTOR('',#15840,0.1); #4790=VECTOR('',#15841,0.1); #4791=VECTOR('',#15842,0.1); #4792=VECTOR('',#15849,0.221335799637065); #4793=VECTOR('',#15850,0.1); #4794=VECTOR('',#15851,0.221335799637065); #4795=VECTOR('',#15852,0.1); #4796=VECTOR('',#15855,0.0267869548047961); #4797=VECTOR('',#15856,0.0267869548047961); #4798=VECTOR('',#15857,0.1); #4799=VECTOR('',#15860,0.221335799637065); #4800=VECTOR('',#15861,0.221335799637065); #4801=VECTOR('',#15862,0.1); #4802=VECTOR('',#15865,0.0267869548047961); #4803=VECTOR('',#15866,0.0267869548047961); #4804=VECTOR('',#15873,0.088087870608079); #4805=VECTOR('',#15874,0.1); #4806=VECTOR('',#15875,0.088087870608079); #4807=VECTOR('',#15876,0.1); #4808=VECTOR('',#15879,0.0180296811186129); #4809=VECTOR('',#15880,0.0180296811186129); #4810=VECTOR('',#15881,0.1); #4811=VECTOR('',#15884,0.0221507510885816); #4812=VECTOR('',#15885,0.0221507510885816); #4813=VECTOR('',#15886,0.1); #4814=VECTOR('',#15889,0.0180296811186129); #4815=VECTOR('',#15890,0.0180296811186129); #4816=VECTOR('',#15891,0.1); #4817=VECTOR('',#15894,0.0456751921671522); #4818=VECTOR('',#15895,0.0456751921671522); #4819=VECTOR('',#15896,0.1); #4820=VECTOR('',#15899,0.0267869548047961); #4821=VECTOR('',#15900,0.0267869548047961); #4822=VECTOR('',#15901,0.1); #4823=VECTOR('',#15904,0.0456751921671522); #4824=VECTOR('',#15905,0.0456751921671522); #4825=VECTOR('',#15906,0.1); #4826=VECTOR('',#15909,0.0492811283908748); #4827=VECTOR('',#15910,0.0492811283908748); #4828=VECTOR('',#15911,0.1); #4829=VECTOR('',#15914,0.0221507510885816); #4830=VECTOR('',#15915,0.0221507510885816); #4831=VECTOR('',#15916,0.1); #4832=VECTOR('',#15919,0.0492811283908748); #4833=VECTOR('',#15920,0.0492811283908748); #4834=VECTOR('',#15921,0.1); #4835=VECTOR('',#15924,0.0757246606981732); #4836=VECTOR('',#15925,0.0757246606981732); #4837=VECTOR('',#15926,0.1); #4838=VECTOR('',#15927,0.1); #4839=VECTOR('',#15928,0.1); #4840=VECTOR('',#15929,0.1); #4841=VECTOR('',#15932,0.00154540123873836); #4842=VECTOR('',#15933,0.00154540123873836); #4843=VECTOR('',#15934,0.1); #4844=VECTOR('',#15937,0.0240395748248168); #4845=VECTOR('',#15938,0.0240395748248168); #4846=VECTOR('',#15939,0.1); #4847=VECTOR('',#15940,0.1); #4848=VECTOR('',#15945,0.1); #4849=VECTOR('',#15946,0.1); #4850=VECTOR('',#15947,0.1); #4851=VECTOR('',#15948,0.1); #4852=VECTOR('',#15949,0.1); #4853=VECTOR('',#15950,0.1); #4854=VECTOR('',#15951,0.1); #4855=VECTOR('',#15952,0.1); #4856=VECTOR('',#15959,0.0906635393393096); #4857=VECTOR('',#15960,0.1); #4858=VECTOR('',#15961,0.0906635393393096); #4859=VECTOR('',#15962,0.1); #4860=VECTOR('',#15963,0.1); #4861=VECTOR('',#15964,0.1); #4862=VECTOR('',#15965,0.1); #4863=VECTOR('',#15968,0.118824184134095); #4864=VECTOR('',#15969,0.118824184134095); #4865=VECTOR('',#15970,0.1); #4866=VECTOR('',#15973,0.0267869548047961); #4867=VECTOR('',#15974,0.0267869548047961); #4868=VECTOR('',#15975,0.1); #4869=VECTOR('',#15978,0.159004616341289); #4870=VECTOR('',#15979,0.159004616341289); #4871=VECTOR('',#15980,0.1); #4872=VECTOR('',#15983,0.0267869548047961); #4873=VECTOR('',#15984,0.0267869548047961); #4874=VECTOR('',#15985,0.1); #4875=VECTOR('',#15988,0.0176862586211152); #4876=VECTOR('',#15989,0.0176862586211152); #4877=VECTOR('',#15990,0.1); #4878=VECTOR('',#15991,0.1); #4879=VECTOR('',#15992,0.1); #4880=VECTOR('',#15995,0.103198460497964); #4881=VECTOR('',#15996,0.103198460497964); #4882=VECTOR('',#15997,0.1); #4883=VECTOR('',#16000,0.0267869548047961); #4884=VECTOR('',#16001,0.0267869548047961); #4885=VECTOR('',#16008,0.0278172222972883); #4886=VECTOR('',#16009,0.1); #4887=VECTOR('',#16010,0.0278172222972883); #4888=VECTOR('',#16011,0.1); #4889=VECTOR('',#16014,0.0303928910285184); #4890=VECTOR('',#16015,0.0303928910285184); #4891=VECTOR('',#16016,0.1); #4892=VECTOR('',#16019,0.0278172222972883); #4893=VECTOR('',#16020,0.0278172222972883); #4894=VECTOR('',#16021,0.1); #4895=VECTOR('',#16024,0.0303928910285184); #4896=VECTOR('',#16025,0.0303928910285184); #4897=VECTOR('',#16032,0.030049468531021); #4898=VECTOR('',#16033,0.1); #4899=VECTOR('',#16034,0.030049468531021); #4900=VECTOR('',#16035,0.1); #4901=VECTOR('',#16038,0.00137368998998966); #4902=VECTOR('',#16039,0.00137368998998966); #4903=VECTOR('',#16040,0.1); #4904=VECTOR('',#16041,0.1); #4905=VECTOR('',#16042,0.1); #4906=VECTOR('',#16043,0.1); #4907=VECTOR('',#16044,0.1); #4908=VECTOR('',#16045,0.1); #4909=VECTOR('',#16046,0.1); #4910=VECTOR('',#16047,0.1); #4911=VECTOR('',#16048,0.1); #4912=VECTOR('',#16049,0.1); #4913=VECTOR('',#16052,0.0286757785410319); #4914=VECTOR('',#16053,0.0286757785410319); #4915=VECTOR('',#16054,0.1); #4916=VECTOR('',#16057,0.00137368998998938); #4917=VECTOR('',#16058,0.00137368998998938); #4918=VECTOR('',#16059,0.1); #4919=VECTOR('',#16060,0.1); #4920=VECTOR('',#16061,0.1); #4921=VECTOR('',#16062,0.1); #4922=VECTOR('',#16063,0.1); #4923=VECTOR('',#16064,0.1); #4924=VECTOR('',#16065,0.1); #4925=VECTOR('',#16066,0.1); #4926=VERTEX_POINT('',#16081); #4927=VERTEX_POINT('',#16082); #4928=VERTEX_POINT('',#16084); #4929=VERTEX_POINT('',#16086); #4930=VERTEX_POINT('',#16090); #4931=VERTEX_POINT('',#16092); #4932=VERTEX_POINT('',#16095); #4933=VERTEX_POINT('',#16096); #4934=VERTEX_POINT('',#16098); #4935=VERTEX_POINT('',#16100); #4936=VERTEX_POINT('',#16102); #4937=VERTEX_POINT('',#16104); #4938=VERTEX_POINT('',#16106); #4939=VERTEX_POINT('',#16108); #4940=VERTEX_POINT('',#16110); #4941=VERTEX_POINT('',#16112); #4942=VERTEX_POINT('',#16116); #4943=VERTEX_POINT('',#16119); #4944=VERTEX_POINT('',#16120); #4945=VERTEX_POINT('',#16129); #4946=VERTEX_POINT('',#16131); #4947=VERTEX_POINT('',#16133); #4948=VERTEX_POINT('',#16135); #4949=VERTEX_POINT('',#16139); #4950=VERTEX_POINT('',#16140); #4951=VERTEX_POINT('',#16149); #4952=VERTEX_POINT('',#16151); #4953=VERTEX_POINT('',#16153); #4954=VERTEX_POINT('',#16155); #4955=VERTEX_POINT('',#16159); #4956=VERTEX_POINT('',#16160); #4957=VERTEX_POINT('',#16162); #4958=VERTEX_POINT('',#16166); #4959=VERTEX_POINT('',#16167); #4960=VERTEX_POINT('',#16169); #4961=VERTEX_POINT('',#16173); #4962=VERTEX_POINT('',#16175); #4963=VERTEX_POINT('',#16177); #4964=VERTEX_POINT('',#16218); #4965=VERTEX_POINT('',#16220); #4966=VERTEX_POINT('',#16263); #4967=VERTEX_POINT('',#16264); #4968=VERTEX_POINT('',#16270); #4969=VERTEX_POINT('',#16272); #4970=VERTEX_POINT('',#16280); #4971=VERTEX_POINT('',#16281); #4972=VERTEX_POINT('',#16310); #4973=VERTEX_POINT('',#16311); #4974=VERTEX_POINT('',#16317); #4975=VERTEX_POINT('',#16319); #4976=VERTEX_POINT('',#16327); #4977=VERTEX_POINT('',#16328); #4978=VERTEX_POINT('',#16333); #4979=VERTEX_POINT('',#16335); #4980=VERTEX_POINT('',#16377); #4981=VERTEX_POINT('',#16378); #4982=VERTEX_POINT('',#16384); #4983=VERTEX_POINT('',#16386); #4984=VERTEX_POINT('',#16397); #4985=VERTEX_POINT('',#16399); #4986=VERTEX_POINT('',#16457); #4987=VERTEX_POINT('',#16458); #4988=VERTEX_POINT('',#16464); #4989=VERTEX_POINT('',#16466); #4990=VERTEX_POINT('',#16474); #4991=VERTEX_POINT('',#16476); #4992=VERTEX_POINT('',#16510); #4993=VERTEX_POINT('',#16512); #4994=VERTEX_POINT('',#16546); #4995=VERTEX_POINT('',#16548); #4996=VERTEX_POINT('',#16622); #4997=VERTEX_POINT('',#16624); #4998=VERTEX_POINT('',#16643); #4999=VERTEX_POINT('',#16645); #5000=VERTEX_POINT('',#16704); #5001=VERTEX_POINT('',#16706); #5002=VERTEX_POINT('',#16728); #5003=VERTEX_POINT('',#16736); #5004=VERTEX_POINT('',#16743); #5005=VERTEX_POINT('',#16773); #5006=VERTEX_POINT('',#16774); #5007=VERTEX_POINT('',#16776); #5008=VERTEX_POINT('',#16778); #5009=VERTEX_POINT('',#16782); #5010=VERTEX_POINT('',#16783); #5011=VERTEX_POINT('',#16785); #5012=VERTEX_POINT('',#16787); #5013=VERTEX_POINT('',#16794); #5014=VERTEX_POINT('',#16795); #5015=VERTEX_POINT('',#16797); #5016=VERTEX_POINT('',#16799); #5017=VERTEX_POINT('',#16803); #5018=VERTEX_POINT('',#16805); #5019=VERTEX_POINT('',#16807); #5020=VERTEX_POINT('',#16809); #5021=VERTEX_POINT('',#16812); #5022=VERTEX_POINT('',#16814); #5023=VERTEX_POINT('',#16816); #5024=VERTEX_POINT('',#16818); #5025=VERTEX_POINT('',#16822); #5026=VERTEX_POINT('',#16824); #5027=VERTEX_POINT('',#16826); #5028=VERTEX_POINT('',#16828); #5029=VERTEX_POINT('',#16830); #5030=VERTEX_POINT('',#16834); #5031=VERTEX_POINT('',#16836); #5032=VERTEX_POINT('',#16840); #5033=VERTEX_POINT('',#16844); #5034=VERTEX_POINT('',#16845); #5035=VERTEX_POINT('',#16847); #5036=VERTEX_POINT('',#16849); #5037=VERTEX_POINT('',#16856); #5038=VERTEX_POINT('',#16860); #5039=VERTEX_POINT('',#16862); #5040=VERTEX_POINT('',#16866); #5041=VERTEX_POINT('',#16870); #5042=VERTEX_POINT('',#16872); #5043=VERTEX_POINT('',#16876); #5044=VERTEX_POINT('',#16888); #5045=VERTEX_POINT('',#16895); #5046=VERTEX_POINT('',#16896); #5047=VERTEX_POINT('',#16898); #5048=VERTEX_POINT('',#16900); #5049=VERTEX_POINT('',#16902); #5050=VERTEX_POINT('',#16904); #5051=VERTEX_POINT('',#16906); #5052=VERTEX_POINT('',#16908); #5053=VERTEX_POINT('',#16910); #5054=VERTEX_POINT('',#16912); #5055=VERTEX_POINT('',#16914); #5056=VERTEX_POINT('',#16916); #5057=VERTEX_POINT('',#16920); #5058=VERTEX_POINT('',#16922); #5059=VERTEX_POINT('',#16926); #5060=VERTEX_POINT('',#16928); #5061=VERTEX_POINT('',#16932); #5062=VERTEX_POINT('',#16936); #5063=VERTEX_POINT('',#16940); #5064=VERTEX_POINT('',#16944); #5065=VERTEX_POINT('',#16950); #5066=VERTEX_POINT('',#16951); #5067=VERTEX_POINT('',#16953); #5068=VERTEX_POINT('',#16955); #5069=VERTEX_POINT('',#16959); #5070=VERTEX_POINT('',#16960); #5071=VERTEX_POINT('',#16962); #5072=VERTEX_POINT('',#16964); #5073=VERTEX_POINT('',#16971); #5074=VERTEX_POINT('',#16975); #5075=VERTEX_POINT('',#16977); #5076=VERTEX_POINT('',#16979); #5077=VERTEX_POINT('',#16986); #5078=VERTEX_POINT('',#16987); #5079=VERTEX_POINT('',#16989); #5080=VERTEX_POINT('',#16991); #5081=VERTEX_POINT('',#16998); #5082=VERTEX_POINT('',#16999); #5083=VERTEX_POINT('',#17001); #5084=VERTEX_POINT('',#17003); #5085=VERTEX_POINT('',#17007); #5086=VERTEX_POINT('',#17009); #5087=VERTEX_POINT('',#17013); #5088=VERTEX_POINT('',#17014); #5089=VERTEX_POINT('',#17016); #5090=VERTEX_POINT('',#17018); #5091=VERTEX_POINT('',#17025); #5092=VERTEX_POINT('',#17026); #5093=VERTEX_POINT('',#17031); #5094=VERTEX_POINT('',#17033); #5095=VERTEX_POINT('',#17037); #5096=VERTEX_POINT('',#17038); #5097=VERTEX_POINT('',#17046); #5098=VERTEX_POINT('',#17047); #5099=VERTEX_POINT('',#17049); #5100=VERTEX_POINT('',#17051); #5101=VERTEX_POINT('',#17055); #5102=VERTEX_POINT('',#17056); #5103=VERTEX_POINT('',#17064); #5104=VERTEX_POINT('',#17065); #5105=VERTEX_POINT('',#17070); #5106=VERTEX_POINT('',#17072); #5107=VERTEX_POINT('',#17076); #5108=VERTEX_POINT('',#17080); #5109=VERTEX_POINT('',#17089); #5110=VERTEX_POINT('',#17090); #5111=VERTEX_POINT('',#17092); #5112=VERTEX_POINT('',#17094); #5113=VERTEX_POINT('',#17098); #5114=VERTEX_POINT('',#17099); #5115=VERTEX_POINT('',#17101); #5116=VERTEX_POINT('',#17103); #5117=VERTEX_POINT('',#17107); #5118=VERTEX_POINT('',#17108); #5119=VERTEX_POINT('',#17110); #5120=VERTEX_POINT('',#17112); #5121=VERTEX_POINT('',#17116); #5122=VERTEX_POINT('',#17118); #5123=VERTEX_POINT('',#17120); #5124=VERTEX_POINT('',#17122); #5125=VERTEX_POINT('',#17124); #5126=VERTEX_POINT('',#17127); #5127=VERTEX_POINT('',#17129); #5128=VERTEX_POINT('',#17131); #5129=VERTEX_POINT('',#17135); #5130=VERTEX_POINT('',#17137); #5131=VERTEX_POINT('',#17144); #5132=VERTEX_POINT('',#17146); #5133=VERTEX_POINT('',#17150); #5134=VERTEX_POINT('',#17152); #5135=VERTEX_POINT('',#17154); #5136=VERTEX_POINT('',#17156); #5137=VERTEX_POINT('',#17160); #5138=VERTEX_POINT('',#17162); #5139=VERTEX_POINT('',#17166); #5140=VERTEX_POINT('',#17170); #5141=VERTEX_POINT('',#17171); #5142=VERTEX_POINT('',#17173); #5143=VERTEX_POINT('',#17175); #5144=VERTEX_POINT('',#17184); #5145=VERTEX_POINT('',#17186); #5146=VERTEX_POINT('',#17190); #5147=VERTEX_POINT('',#17192); #5148=VERTEX_POINT('',#17204); #5149=VERTEX_POINT('',#17211); #5150=VERTEX_POINT('',#17212); #5151=VERTEX_POINT('',#17214); #5152=VERTEX_POINT('',#17216); #5153=VERTEX_POINT('',#17218); #5154=VERTEX_POINT('',#17220); #5155=VERTEX_POINT('',#17222); #5156=VERTEX_POINT('',#17224); #5157=VERTEX_POINT('',#17228); #5158=VERTEX_POINT('',#17230); #5159=VERTEX_POINT('',#17234); #5160=VERTEX_POINT('',#17238); #5161=VERTEX_POINT('',#17240); #5162=VERTEX_POINT('',#17242); #5163=VERTEX_POINT('',#17244); #5164=VERTEX_POINT('',#17246); #5165=VERTEX_POINT('',#17248); #5166=VERTEX_POINT('',#17250); #5167=VERTEX_POINT('',#17252); #5168=VERTEX_POINT('',#17254); #5169=VERTEX_POINT('',#17256); #5170=VERTEX_POINT('',#17260); #5171=VERTEX_POINT('',#17262); #5172=VERTEX_POINT('',#17264); #5173=VERTEX_POINT('',#17266); #5174=VERTEX_POINT('',#17268); #5175=VERTEX_POINT('',#17270); #5176=VERTEX_POINT('',#17274); #5177=VERTEX_POINT('',#17276); #5178=VERTEX_POINT('',#17280); #5179=VERTEX_POINT('',#17282); #5180=VERTEX_POINT('',#17286); #5181=VERTEX_POINT('',#17292); #5182=VERTEX_POINT('',#17298); #5183=VERTEX_POINT('',#17300); #5184=VERTEX_POINT('',#17302); #5185=VERTEX_POINT('',#17304); #5186=VERTEX_POINT('',#17306); #5187=VERTEX_POINT('',#17314); #5188=VERTEX_POINT('',#17320); #5189=VERTEX_POINT('',#17333); #5190=VERTEX_POINT('',#17334); #5191=VERTEX_POINT('',#17336); #5192=VERTEX_POINT('',#17338); #5193=VERTEX_POINT('',#17342); #5194=VERTEX_POINT('',#17343); #5195=VERTEX_POINT('',#17345); #5196=VERTEX_POINT('',#17347); #5197=VERTEX_POINT('',#17354); #5198=VERTEX_POINT('',#17355); #5199=VERTEX_POINT('',#17357); #5200=VERTEX_POINT('',#17359); #5201=VERTEX_POINT('',#17363); #5202=VERTEX_POINT('',#17365); #5203=VERTEX_POINT('',#17367); #5204=VERTEX_POINT('',#17369); #5205=VERTEX_POINT('',#17372); #5206=VERTEX_POINT('',#17374); #5207=VERTEX_POINT('',#17376); #5208=VERTEX_POINT('',#17378); #5209=VERTEX_POINT('',#17382); #5210=VERTEX_POINT('',#17384); #5211=VERTEX_POINT('',#17386); #5212=VERTEX_POINT('',#17388); #5213=VERTEX_POINT('',#17390); #5214=VERTEX_POINT('',#17394); #5215=VERTEX_POINT('',#17396); #5216=VERTEX_POINT('',#17400); #5217=VERTEX_POINT('',#17404); #5218=VERTEX_POINT('',#17405); #5219=VERTEX_POINT('',#17407); #5220=VERTEX_POINT('',#17409); #5221=VERTEX_POINT('',#17416); #5222=VERTEX_POINT('',#17420); #5223=VERTEX_POINT('',#17422); #5224=VERTEX_POINT('',#17426); #5225=VERTEX_POINT('',#17430); #5226=VERTEX_POINT('',#17432); #5227=VERTEX_POINT('',#17436); #5228=VERTEX_POINT('',#17448); #5229=VERTEX_POINT('',#17455); #5230=VERTEX_POINT('',#17456); #5231=VERTEX_POINT('',#17458); #5232=VERTEX_POINT('',#17460); #5233=VERTEX_POINT('',#17462); #5234=VERTEX_POINT('',#17464); #5235=VERTEX_POINT('',#17466); #5236=VERTEX_POINT('',#17468); #5237=VERTEX_POINT('',#17472); #5238=VERTEX_POINT('',#17474); #5239=VERTEX_POINT('',#17478); #5240=VERTEX_POINT('',#17482); #5241=VERTEX_POINT('',#17483); #5242=VERTEX_POINT('',#17485); #5243=VERTEX_POINT('',#17487); #5244=VERTEX_POINT('',#17489); #5245=VERTEX_POINT('',#17492); #5246=VERTEX_POINT('',#17494); #5247=VERTEX_POINT('',#17496); #5248=VERTEX_POINT('',#17498); #5249=VERTEX_POINT('',#17500); #5250=VERTEX_POINT('',#17504); #5251=VERTEX_POINT('',#17506); #5252=VERTEX_POINT('',#17508); #5253=VERTEX_POINT('',#17510); #5254=VERTEX_POINT('',#17512); #5255=VERTEX_POINT('',#17514); #5256=VERTEX_POINT('',#17518); #5257=VERTEX_POINT('',#17520); #5258=VERTEX_POINT('',#17524); #5259=VERTEX_POINT('',#17526); #5260=VERTEX_POINT('',#17530); #5261=VERTEX_POINT('',#17532); #5262=VERTEX_POINT('',#17534); #5263=VERTEX_POINT('',#17536); #5264=VERTEX_POINT('',#17538); #5265=VERTEX_POINT('',#17546); #5266=VERTEX_POINT('',#17552); #5267=VERTEX_POINT('',#17563); #5268=VERTEX_POINT('',#17565); #5269=VERTEX_POINT('',#17577); #5270=VERTEX_POINT('',#17578); #5271=VERTEX_POINT('',#17580); #5272=VERTEX_POINT('',#17582); #5273=VERTEX_POINT('',#17586); #5274=VERTEX_POINT('',#17587); #5275=VERTEX_POINT('',#17589); #5276=VERTEX_POINT('',#17591); #5277=VERTEX_POINT('',#17598); #5278=VERTEX_POINT('',#17599); #5279=VERTEX_POINT('',#17601); #5280=VERTEX_POINT('',#17603); #5281=VERTEX_POINT('',#17607); #5282=VERTEX_POINT('',#17609); #5283=VERTEX_POINT('',#17611); #5284=VERTEX_POINT('',#17613); #5285=VERTEX_POINT('',#17616); #5286=VERTEX_POINT('',#17618); #5287=VERTEX_POINT('',#17620); #5288=VERTEX_POINT('',#17622); #5289=VERTEX_POINT('',#17626); #5290=VERTEX_POINT('',#17628); #5291=VERTEX_POINT('',#17630); #5292=VERTEX_POINT('',#17632); #5293=VERTEX_POINT('',#17634); #5294=VERTEX_POINT('',#17638); #5295=VERTEX_POINT('',#17640); #5296=VERTEX_POINT('',#17644); #5297=VERTEX_POINT('',#17648); #5298=VERTEX_POINT('',#17649); #5299=VERTEX_POINT('',#17651); #5300=VERTEX_POINT('',#17653); #5301=VERTEX_POINT('',#17660); #5302=VERTEX_POINT('',#17664); #5303=VERTEX_POINT('',#17666); #5304=VERTEX_POINT('',#17670); #5305=VERTEX_POINT('',#17674); #5306=VERTEX_POINT('',#17676); #5307=VERTEX_POINT('',#17680); #5308=VERTEX_POINT('',#17692); #5309=VERTEX_POINT('',#17699); #5310=VERTEX_POINT('',#17700); #5311=VERTEX_POINT('',#17702); #5312=VERTEX_POINT('',#17704); #5313=VERTEX_POINT('',#17706); #5314=VERTEX_POINT('',#17708); #5315=VERTEX_POINT('',#17710); #5316=VERTEX_POINT('',#17712); #5317=VERTEX_POINT('',#17716); #5318=VERTEX_POINT('',#17718); #5319=VERTEX_POINT('',#17722); #5320=VERTEX_POINT('',#17726); #5321=VERTEX_POINT('',#17728); #5322=VERTEX_POINT('',#17730); #5323=VERTEX_POINT('',#17732); #5324=VERTEX_POINT('',#17734); #5325=VERTEX_POINT('',#17736); #5326=VERTEX_POINT('',#17738); #5327=VERTEX_POINT('',#17740); #5328=VERTEX_POINT('',#17742); #5329=VERTEX_POINT('',#17744); #5330=VERTEX_POINT('',#17748); #5331=VERTEX_POINT('',#17750); #5332=VERTEX_POINT('',#17752); #5333=VERTEX_POINT('',#17754); #5334=VERTEX_POINT('',#17756); #5335=VERTEX_POINT('',#17758); #5336=VERTEX_POINT('',#17762); #5337=VERTEX_POINT('',#17764); #5338=VERTEX_POINT('',#17768); #5339=VERTEX_POINT('',#17770); #5340=VERTEX_POINT('',#17774); #5341=VERTEX_POINT('',#17780); #5342=VERTEX_POINT('',#17786); #5343=VERTEX_POINT('',#17788); #5344=VERTEX_POINT('',#17790); #5345=VERTEX_POINT('',#17792); #5346=VERTEX_POINT('',#17794); #5347=VERTEX_POINT('',#17802); #5348=VERTEX_POINT('',#17808); #5349=VERTEX_POINT('',#17829); #5350=VERTEX_POINT('',#17830); #5351=VERTEX_POINT('',#17835); #5352=VERTEX_POINT('',#17837); #5353=VERTEX_POINT('',#17851); #5354=VERTEX_POINT('',#17856); #5355=VERTEX_POINT('',#17870); #5356=VERTEX_POINT('',#17875); #5357=VERTEX_POINT('',#17889); #5358=VERTEX_POINT('',#17894); #5359=VERTEX_POINT('',#17901); #5360=VERTEX_POINT('',#17903); #5361=VERTEX_POINT('',#17907); #5362=VERTEX_POINT('',#17909); #5363=VERTEX_POINT('',#17920); #5364=VERTEX_POINT('',#17925); #5365=VERTEX_POINT('',#17939); #5366=VERTEX_POINT('',#17944); #5367=VERTEX_POINT('',#17958); #5368=VERTEX_POINT('',#17963); #5369=VERTEX_POINT('',#17977); #5370=VERTEX_POINT('',#17982); #5371=VERTEX_POINT('',#17996); #5372=VERTEX_POINT('',#18001); #5373=VERTEX_POINT('',#18008); #5374=VERTEX_POINT('',#18010); #5375=VERTEX_POINT('',#18014); #5376=VERTEX_POINT('',#18016); #5377=VERTEX_POINT('',#18027); #5378=VERTEX_POINT('',#18032); #5379=VERTEX_POINT('',#18046); #5380=VERTEX_POINT('',#18051); #5381=VERTEX_POINT('',#18076); #5382=VERTEX_POINT('',#18077); #5383=VERTEX_POINT('',#18079); #5384=VERTEX_POINT('',#18081); #5385=VERTEX_POINT('',#18085); #5386=VERTEX_POINT('',#18087); #5387=VERTEX_POINT('',#18091); #5388=VERTEX_POINT('',#18093); #5389=VERTEX_POINT('',#18109); #5390=VERTEX_POINT('',#18110); #5391=VERTEX_POINT('',#18115); #5392=VERTEX_POINT('',#18117); #5393=VERTEX_POINT('',#18131); #5394=VERTEX_POINT('',#18136); #5395=VERTEX_POINT('',#18143); #5396=VERTEX_POINT('',#18145); #5397=VERTEX_POINT('',#18149); #5398=VERTEX_POINT('',#18151); #5399=VERTEX_POINT('',#18155); #5400=VERTEX_POINT('',#18157); #5401=VERTEX_POINT('',#18161); #5402=VERTEX_POINT('',#18163); #5403=VERTEX_POINT('',#18167); #5404=VERTEX_POINT('',#18169); #5405=VERTEX_POINT('',#18180); #5406=VERTEX_POINT('',#18185); #5407=VERTEX_POINT('',#18199); #5408=VERTEX_POINT('',#18204); #5409=VERTEX_POINT('',#18211); #5410=VERTEX_POINT('',#18213); #5411=VERTEX_POINT('',#18229); #5412=VERTEX_POINT('',#18230); #5413=VERTEX_POINT('',#18235); #5414=VERTEX_POINT('',#18237); #5415=VERTEX_POINT('',#18251); #5416=VERTEX_POINT('',#18256); #5417=VERTEX_POINT('',#18270); #5418=VERTEX_POINT('',#18275); #5419=VERTEX_POINT('',#18289); #5420=VERTEX_POINT('',#18294); #5421=VERTEX_POINT('',#18301); #5422=VERTEX_POINT('',#18303); #5423=VERTEX_POINT('',#18307); #5424=VERTEX_POINT('',#18309); #5425=VERTEX_POINT('',#18320); #5426=VERTEX_POINT('',#18325); #5427=VERTEX_POINT('',#18339); #5428=VERTEX_POINT('',#18344); #5429=VERTEX_POINT('',#18358); #5430=VERTEX_POINT('',#18363); #5431=VERTEX_POINT('',#18377); #5432=VERTEX_POINT('',#18382); #5433=VERTEX_POINT('',#18396); #5434=VERTEX_POINT('',#18401); #5435=VERTEX_POINT('',#18408); #5436=VERTEX_POINT('',#18410); #5437=VERTEX_POINT('',#18414); #5438=VERTEX_POINT('',#18416); #5439=VERTEX_POINT('',#18427); #5440=VERTEX_POINT('',#18432); #5441=VERTEX_POINT('',#18446); #5442=VERTEX_POINT('',#18451); #5443=VERTEX_POINT('',#18476); #5444=VERTEX_POINT('',#18477); #5445=VERTEX_POINT('',#18479); #5446=VERTEX_POINT('',#18481); #5447=VERTEX_POINT('',#18492); #5448=VERTEX_POINT('',#18497); #5449=VERTEX_POINT('',#18511); #5450=VERTEX_POINT('',#18516); #5451=VERTEX_POINT('',#18530); #5452=VERTEX_POINT('',#18535); #5453=VERTEX_POINT('',#18565); #5454=VERTEX_POINT('',#18566); #5455=VERTEX_POINT('',#18571); #5456=VERTEX_POINT('',#18573); #5457=VERTEX_POINT('',#18587); #5458=VERTEX_POINT('',#18592); #5459=VERTEX_POINT('',#18606); #5460=VERTEX_POINT('',#18611); #5461=VERTEX_POINT('',#18618); #5462=VERTEX_POINT('',#18620); #5463=VERTEX_POINT('',#18624); #5464=VERTEX_POINT('',#18626); #5465=VERTEX_POINT('',#18637); #5466=VERTEX_POINT('',#18642); #5467=VERTEX_POINT('',#18656); #5468=VERTEX_POINT('',#18661); #5469=VERTEX_POINT('',#18675); #5470=VERTEX_POINT('',#18680); #5471=VERTEX_POINT('',#18687); #5472=VERTEX_POINT('',#18689); #5473=VERTEX_POINT('',#18693); #5474=VERTEX_POINT('',#18695); #5475=VERTEX_POINT('',#18706); #5476=VERTEX_POINT('',#18711); #5477=VERTEX_POINT('',#18725); #5478=VERTEX_POINT('',#18730); #5479=VERTEX_POINT('',#18762); #5480=VERTEX_POINT('',#18763); #5481=VERTEX_POINT('',#18768); #5482=VERTEX_POINT('',#18770); #5483=VERTEX_POINT('',#18784); #5484=VERTEX_POINT('',#18789); #5485=VERTEX_POINT('',#18796); #5486=VERTEX_POINT('',#18798); #5487=VERTEX_POINT('',#18802); #5488=VERTEX_POINT('',#18804); #5489=VERTEX_POINT('',#18808); #5490=VERTEX_POINT('',#18810); #5491=VERTEX_POINT('',#18814); #5492=VERTEX_POINT('',#18816); #5493=VERTEX_POINT('',#18820); #5494=VERTEX_POINT('',#18822); #5495=VERTEX_POINT('',#18833); #5496=VERTEX_POINT('',#18838); #5497=VERTEX_POINT('',#18852); #5498=VERTEX_POINT('',#18857); #5499=VERTEX_POINT('',#18864); #5500=VERTEX_POINT('',#18866); #5501=VERTEX_POINT('',#18875); #5502=VERTEX_POINT('',#18876); #5503=VERTEX_POINT('',#18878); #5504=VERTEX_POINT('',#18880); #5505=VERTEX_POINT('',#18884); #5506=VERTEX_POINT('',#18886); #5507=VERTEX_POINT('',#18890); #5508=VERTEX_POINT('',#18892); #5509=VERTEX_POINT('',#18901); #5510=VERTEX_POINT('',#18902); #5511=VERTEX_POINT('',#18904); #5512=VERTEX_POINT('',#18906); #5513=VERTEX_POINT('',#18910); #5514=VERTEX_POINT('',#18912); #5515=VERTEX_POINT('',#18916); #5516=VERTEX_POINT('',#18918); #5517=VERTEX_POINT('',#18922); #5518=VERTEX_POINT('',#18924); #5519=VERTEX_POINT('',#18928); #5520=VERTEX_POINT('',#18930); #5521=VERTEX_POINT('',#18934); #5522=VERTEX_POINT('',#18936); #5523=VERTEX_POINT('',#18940); #5524=VERTEX_POINT('',#18942); #5525=VERTEX_POINT('',#18946); #5526=VERTEX_POINT('',#18948); #5527=VERTEX_POINT('',#18952); #5528=VERTEX_POINT('',#18954); #5529=VERTEX_POINT('',#18958); #5530=VERTEX_POINT('',#18960); #5531=VERTEX_POINT('',#18964); #5532=VERTEX_POINT('',#18966); #5533=VERTEX_POINT('',#18970); #5534=VERTEX_POINT('',#18972); #5535=VERTEX_POINT('',#18981); #5536=VERTEX_POINT('',#18982); #5537=VERTEX_POINT('',#18984); #5538=VERTEX_POINT('',#18986); #5539=VERTEX_POINT('',#18990); #5540=VERTEX_POINT('',#18992); #5541=VERTEX_POINT('',#19003); #5542=VERTEX_POINT('',#19008); #5543=VERTEX_POINT('',#19022); #5544=VERTEX_POINT('',#19027); #5545=VERTEX_POINT('',#19041); #5546=VERTEX_POINT('',#19046); #5547=VERTEX_POINT('',#19060); #5548=VERTEX_POINT('',#19065); #5549=VERTEX_POINT('',#19079); #5550=VERTEX_POINT('',#19084); #5551=VERTEX_POINT('',#19098); #5552=VERTEX_POINT('',#19103); #5553=VERTEX_POINT('',#19117); #5554=VERTEX_POINT('',#19122); #5555=VERTEX_POINT('',#19136); #5556=VERTEX_POINT('',#19141); #5557=VERTEX_POINT('',#19148); #5558=VERTEX_POINT('',#19150); #5559=VERTEX_POINT('',#19154); #5560=VERTEX_POINT('',#19156); #5561=VERTEX_POINT('',#19167); #5562=VERTEX_POINT('',#19172); #5563=VERTEX_POINT('',#19186); #5564=VERTEX_POINT('',#19191); #5565=VERTEX_POINT('',#19205); #5566=VERTEX_POINT('',#19210); #5567=VERTEX_POINT('',#19224); #5568=VERTEX_POINT('',#19229); #5569=VERTEX_POINT('',#19243); #5570=VERTEX_POINT('',#19248); #5571=VERTEX_POINT('',#19262); #5572=VERTEX_POINT('',#19267); #5573=VERTEX_POINT('',#19281); #5574=VERTEX_POINT('',#19286); #5575=VERTEX_POINT('',#19318); #5576=VERTEX_POINT('',#19319); #5577=VERTEX_POINT('',#19324); #5578=VERTEX_POINT('',#19326); #5579=VERTEX_POINT('',#19340); #5580=VERTEX_POINT('',#19345); #5581=VERTEX_POINT('',#19352); #5582=VERTEX_POINT('',#19354); #5583=VERTEX_POINT('',#19358); #5584=VERTEX_POINT('',#19360); #5585=VERTEX_POINT('',#19364); #5586=VERTEX_POINT('',#19366); #5587=VERTEX_POINT('',#19377); #5588=VERTEX_POINT('',#19382); #5589=VERTEX_POINT('',#19405); #5590=VERTEX_POINT('',#19406); #5591=VERTEX_POINT('',#19408); #5592=VERTEX_POINT('',#19410); #5593=VERTEX_POINT('',#19414); #5594=VERTEX_POINT('',#19416); #5595=VERTEX_POINT('',#19420); #5596=VERTEX_POINT('',#19422); #5597=VERTEX_POINT('',#19426); #5598=VERTEX_POINT('',#19428); #5599=VERTEX_POINT('',#19432); #5600=VERTEX_POINT('',#19434); #5601=VERTEX_POINT('',#19438); #5602=VERTEX_POINT('',#19440); #5603=VERTEX_POINT('',#19451); #5604=VERTEX_POINT('',#19456); #5605=VERTEX_POINT('',#19470); #5606=VERTEX_POINT('',#19475); #5607=VERTEX_POINT('',#19489); #5608=VERTEX_POINT('',#19494); #5609=VERTEX_POINT('',#19501); #5610=VERTEX_POINT('',#19503); #5611=VERTEX_POINT('',#19512); #5612=VERTEX_POINT('',#19513); #5613=VERTEX_POINT('',#19515); #5614=VERTEX_POINT('',#19517); #5615=VERTEX_POINT('',#19521); #5616=VERTEX_POINT('',#19523); #5617=VERTEX_POINT('',#19527); #5618=VERTEX_POINT('',#19529); #5619=VERTEX_POINT('',#19533); #5620=VERTEX_POINT('',#19535); #5621=VERTEX_POINT('',#19539); #5622=VERTEX_POINT('',#19541); #5623=VERTEX_POINT('',#19545); #5624=VERTEX_POINT('',#19547); #5625=VERTEX_POINT('',#19551); #5626=VERTEX_POINT('',#19553); #5627=VERTEX_POINT('',#19557); #5628=VERTEX_POINT('',#19559); #5629=VERTEX_POINT('',#19563); #5630=VERTEX_POINT('',#19565); #5631=VERTEX_POINT('',#19569); #5632=VERTEX_POINT('',#19571); #5633=VERTEX_POINT('',#19575); #5634=VERTEX_POINT('',#19577); #5635=VERTEX_POINT('',#19593); #5636=VERTEX_POINT('',#19594); #5637=VERTEX_POINT('',#19599); #5638=VERTEX_POINT('',#19601); #5639=VERTEX_POINT('',#19608); #5640=VERTEX_POINT('',#19610); #5641=VERTEX_POINT('',#19614); #5642=VERTEX_POINT('',#19616); #5643=VERTEX_POINT('',#19627); #5644=VERTEX_POINT('',#19632); #5645=VERTEX_POINT('',#19646); #5646=VERTEX_POINT('',#19651); #5647=VERTEX_POINT('',#19665); #5648=VERTEX_POINT('',#19670); #5649=VERTEX_POINT('',#19684); #5650=VERTEX_POINT('',#19689); #5651=VERTEX_POINT('',#19696); #5652=VERTEX_POINT('',#19698); #5653=VERTEX_POINT('',#19709); #5654=VERTEX_POINT('',#19714); #5655=VERTEX_POINT('',#19728); #5656=VERTEX_POINT('',#19733); #5657=VERTEX_POINT('',#19747); #5658=VERTEX_POINT('',#19752); #5659=VERTEX_POINT('',#19766); #5660=VERTEX_POINT('',#19771); #5661=VERTEX_POINT('',#19785); #5662=VERTEX_POINT('',#19790); #5663=VERTEX_POINT('',#19797); #5664=VERTEX_POINT('',#19799); #5665=VERTEX_POINT('',#19803); #5666=VERTEX_POINT('',#19805); #5667=VERTEX_POINT('',#19816); #5668=VERTEX_POINT('',#19821); #5669=VERTEX_POINT('',#19835); #5670=VERTEX_POINT('',#19840); #5671=VERTEX_POINT('',#19854); #5672=VERTEX_POINT('',#19859); #5673=VERTEX_POINT('',#19873); #5674=VERTEX_POINT('',#19878); #5675=VERTEX_POINT('',#19892); #5676=VERTEX_POINT('',#19897); #5677=VERTEX_POINT('',#19904); #5678=VERTEX_POINT('',#19906); #5679=VERTEX_POINT('',#19910); #5680=VERTEX_POINT('',#19912); #5681=VERTEX_POINT('',#19916); #5682=VERTEX_POINT('',#19918); #5683=VERTEX_POINT('',#19929); #5684=VERTEX_POINT('',#19934); #5685=VERTEX_POINT('',#19948); #5686=VERTEX_POINT('',#19953); #5687=VERTEX_POINT('',#19967); #5688=VERTEX_POINT('',#19972); #5689=VERTEX_POINT('',#20004); #5690=VERTEX_POINT('',#20005); #5691=VERTEX_POINT('',#20010); #5692=VERTEX_POINT('',#20012); #5693=VERTEX_POINT('',#20026); #5694=VERTEX_POINT('',#20031); #5695=VERTEX_POINT('',#20045); #5696=VERTEX_POINT('',#20050); #5697=VERTEX_POINT('',#20064); #5698=VERTEX_POINT('',#20069); #5699=VERTEX_POINT('',#20083); #5700=VERTEX_POINT('',#20088); #5701=VERTEX_POINT('',#20102); #5702=VERTEX_POINT('',#20107); #5703=VERTEX_POINT('',#20121); #5704=VERTEX_POINT('',#20126); #5705=VERTEX_POINT('',#20156); #5706=VERTEX_POINT('',#20157); #5707=VERTEX_POINT('',#20162); #5708=VERTEX_POINT('',#20164); #5709=VERTEX_POINT('',#20178); #5710=VERTEX_POINT('',#20183); #5711=VERTEX_POINT('',#20197); #5712=VERTEX_POINT('',#20202); #5713=VERTEX_POINT('',#20234); #5714=VERTEX_POINT('',#20235); #5715=VERTEX_POINT('',#20240); #5716=VERTEX_POINT('',#20242); #5717=VERTEX_POINT('',#20256); #5718=VERTEX_POINT('',#20261); #5719=VERTEX_POINT('',#20275); #5720=VERTEX_POINT('',#20280); #5721=VERTEX_POINT('',#20294); #5722=VERTEX_POINT('',#20299); #5723=VERTEX_POINT('',#20313); #5724=VERTEX_POINT('',#20318); #5725=VERTEX_POINT('',#20332); #5726=VERTEX_POINT('',#20337); #5727=VERTEX_POINT('',#20351); #5728=VERTEX_POINT('',#20356); #5729=VERTEX_POINT('',#20386); #5730=VERTEX_POINT('',#20387); #5731=VERTEX_POINT('',#20392); #5732=VERTEX_POINT('',#20394); #5733=VERTEX_POINT('',#20408); #5734=VERTEX_POINT('',#20413); #5735=VERTEX_POINT('',#20427); #5736=VERTEX_POINT('',#20432); #5737=VERTEX_POINT('',#20457); #5738=VERTEX_POINT('',#20458); #5739=VERTEX_POINT('',#20460); #5740=VERTEX_POINT('',#20462); #5741=VERTEX_POINT('',#20466); #5742=VERTEX_POINT('',#20468); #5743=VERTEX_POINT('',#20472); #5744=VERTEX_POINT('',#20474); #5745=VERTEX_POINT('',#20478); #5746=VERTEX_POINT('',#20480); #5747=VERTEX_POINT('',#20484); #5748=VERTEX_POINT('',#20486); #5749=VERTEX_POINT('',#20490); #5750=VERTEX_POINT('',#20492); #5751=VERTEX_POINT('',#20496); #5752=VERTEX_POINT('',#20498); #5753=VERTEX_POINT('',#20502); #5754=VERTEX_POINT('',#20504); #5755=VERTEX_POINT('',#20508); #5756=VERTEX_POINT('',#20510); #5757=VERTEX_POINT('',#20519); #5758=VERTEX_POINT('',#20520); #5759=VERTEX_POINT('',#20522); #5760=VERTEX_POINT('',#20524); #5761=VERTEX_POINT('',#20528); #5762=VERTEX_POINT('',#20530); #5763=VERTEX_POINT('',#20532); #5764=VERTEX_POINT('',#20534); #5765=VERTEX_POINT('',#20536); #5766=VERTEX_POINT('',#20538); #5767=VERTEX_POINT('',#20542); #5768=VERTEX_POINT('',#20546); #5769=VERTEX_POINT('',#20548); #5770=VERTEX_POINT('',#20554); #5771=VERTEX_POINT('',#20556); #5772=VERTEX_POINT('',#20562); #5773=VERTEX_POINT('',#20569); #5774=VERTEX_POINT('',#20571); #5775=VERTEX_POINT('',#20576); #5776=VERTEX_POINT('',#20577); #5777=VERTEX_POINT('',#20579); #5778=VERTEX_POINT('',#20581); #5779=VERTEX_POINT('',#20585); #5780=VERTEX_POINT('',#20587); #5781=VERTEX_POINT('',#20591); #5782=VERTEX_POINT('',#20593); #5783=VERTEX_POINT('',#20602); #5784=VERTEX_POINT('',#20603); #5785=VERTEX_POINT('',#20605); #5786=VERTEX_POINT('',#20607); #5787=VERTEX_POINT('',#20611); #5788=VERTEX_POINT('',#20613); #5789=VERTEX_POINT('',#20617); #5790=VERTEX_POINT('',#20618); #5791=VERTEX_POINT('',#20620); #5792=VERTEX_POINT('',#20622); #5793=VERTEX_POINT('',#20629); #5794=VERTEX_POINT('',#20630); #5795=VERTEX_POINT('',#20632); #5796=VERTEX_POINT('',#20634); #5797=VERTEX_POINT('',#20639); #5798=VERTEX_POINT('',#20641); #5799=VERTEX_POINT('',#20647); #5800=VERTEX_POINT('',#20651); #5801=VERTEX_POINT('',#20658); #5802=VERTEX_POINT('',#20659); #5803=VERTEX_POINT('',#20661); #5804=VERTEX_POINT('',#20663); #5805=VERTEX_POINT('',#20667); #5806=VERTEX_POINT('',#20669); #5807=VERTEX_POINT('',#20673); #5808=VERTEX_POINT('',#20675); #5809=VERTEX_POINT('',#20679); #5810=VERTEX_POINT('',#20681); #5811=VERTEX_POINT('',#20685); #5812=VERTEX_POINT('',#20687); #5813=VERTEX_POINT('',#20691); #5814=VERTEX_POINT('',#20693); #5815=VERTEX_POINT('',#20702); #5816=VERTEX_POINT('',#20703); #5817=VERTEX_POINT('',#20705); #5818=VERTEX_POINT('',#20707); #5819=VERTEX_POINT('',#20711); #5820=VERTEX_POINT('',#20713); #5821=VERTEX_POINT('',#20717); #5822=VERTEX_POINT('',#20719); #5823=VERTEX_POINT('',#20723); #5824=VERTEX_POINT('',#20725); #5825=VERTEX_POINT('',#20729); #5826=VERTEX_POINT('',#20731); #5827=VERTEX_POINT('',#20735); #5828=VERTEX_POINT('',#20737); #5829=VERTEX_POINT('',#20746); #5830=VERTEX_POINT('',#20747); #5831=VERTEX_POINT('',#20749); #5832=VERTEX_POINT('',#20751); #5833=VERTEX_POINT('',#20755); #5834=VERTEX_POINT('',#20757); #5835=VERTEX_POINT('',#20764); #5836=VERTEX_POINT('',#20765); #5837=VERTEX_POINT('',#20767); #5838=VERTEX_POINT('',#20769); #5839=VERTEX_POINT('',#20773); #5840=VERTEX_POINT('',#20775); #5841=VERTEX_POINT('',#20779); #5842=VERTEX_POINT('',#20781); #5843=VERTEX_POINT('',#20785); #5844=VERTEX_POINT('',#20787); #5845=VERTEX_POINT('',#20791); #5846=VERTEX_POINT('',#20793); #5847=VERTEX_POINT('',#20797); #5848=VERTEX_POINT('',#20799); #5849=VERTEX_POINT('',#20803); #5850=VERTEX_POINT('',#20805); #5851=VERTEX_POINT('',#20814); #5852=VERTEX_POINT('',#20815); #5853=VERTEX_POINT('',#20817); #5854=VERTEX_POINT('',#20819); #5855=VERTEX_POINT('',#20823); #5856=VERTEX_POINT('',#20825); #5857=VERTEX_POINT('',#20829); #5858=VERTEX_POINT('',#20831); #5859=VERTEX_POINT('',#20835); #5860=VERTEX_POINT('',#20837); #5861=VERTEX_POINT('',#20841); #5862=VERTEX_POINT('',#20843); #5863=VERTEX_POINT('',#20852); #5864=VERTEX_POINT('',#20853); #5865=VERTEX_POINT('',#20855); #5866=VERTEX_POINT('',#20857); #5867=VERTEX_POINT('',#20861); #5868=VERTEX_POINT('',#20863); #5869=VERTEX_POINT('',#20867); #5870=VERTEX_POINT('',#20869); #5871=VERTEX_POINT('',#20873); #5872=VERTEX_POINT('',#20875); #5873=VERTEX_POINT('',#20879); #5874=VERTEX_POINT('',#20881); #5875=VERTEX_POINT('',#20885); #5876=VERTEX_POINT('',#20887); #5877=VERTEX_POINT('',#20891); #5878=VERTEX_POINT('',#20893); #5879=VERTEX_POINT('',#20902); #5880=VERTEX_POINT('',#20903); #5881=VERTEX_POINT('',#20905); #5882=VERTEX_POINT('',#20907); #5883=VERTEX_POINT('',#20911); #5884=VERTEX_POINT('',#20913); #5885=VERTEX_POINT('',#20917); #5886=VERTEX_POINT('',#20919); #5887=VERTEX_POINT('',#20923); #5888=VERTEX_POINT('',#20925); #5889=VERTEX_POINT('',#20929); #5890=VERTEX_POINT('',#20931); #5891=VERTEX_POINT('',#20935); #5892=VERTEX_POINT('',#20937); #5893=VERTEX_POINT('',#20941); #5894=VERTEX_POINT('',#20943); #5895=VERTEX_POINT('',#20952); #5896=VERTEX_POINT('',#20953); #5897=VERTEX_POINT('',#20955); #5898=VERTEX_POINT('',#20957); #5899=VERTEX_POINT('',#20961); #5900=VERTEX_POINT('',#20963); #5901=VERTEX_POINT('',#20967); #5902=VERTEX_POINT('',#20969); #5903=VERTEX_POINT('',#20985); #5904=VERTEX_POINT('',#20986); #5905=VERTEX_POINT('',#20991); #5906=VERTEX_POINT('',#20993); #5907=VERTEX_POINT('',#21007); #5908=VERTEX_POINT('',#21012); #5909=VERTEX_POINT('',#21026); #5910=VERTEX_POINT('',#21031); #5911=VERTEX_POINT('',#21045); #5912=VERTEX_POINT('',#21050); #5913=VERTEX_POINT('',#21057); #5914=VERTEX_POINT('',#21059); #5915=VERTEX_POINT('',#21063); #5916=VERTEX_POINT('',#21065); #5917=VERTEX_POINT('',#21076); #5918=VERTEX_POINT('',#21081); #5919=VERTEX_POINT('',#21095); #5920=VERTEX_POINT('',#21100); #5921=VERTEX_POINT('',#21114); #5922=VERTEX_POINT('',#21119); #5923=VERTEX_POINT('',#21133); #5924=VERTEX_POINT('',#21138); #5925=VERTEX_POINT('',#21152); #5926=VERTEX_POINT('',#21157); #5927=VERTEX_POINT('',#21164); #5928=VERTEX_POINT('',#21166); #5929=VERTEX_POINT('',#21170); #5930=VERTEX_POINT('',#21172); #5931=VERTEX_POINT('',#21183); #5932=VERTEX_POINT('',#21188); #5933=VERTEX_POINT('',#21202); #5934=VERTEX_POINT('',#21207); #5935=VERTEX_POINT('',#21239); #5936=VERTEX_POINT('',#21240); #5937=VERTEX_POINT('',#21245); #5938=VERTEX_POINT('',#21247); #5939=VERTEX_POINT('',#21261); #5940=VERTEX_POINT('',#21266); #5941=VERTEX_POINT('',#21280); #5942=VERTEX_POINT('',#21285); #5943=VERTEX_POINT('',#21315); #5944=VERTEX_POINT('',#21316); #5945=VERTEX_POINT('',#21321); #5946=VERTEX_POINT('',#21323); #5947=VERTEX_POINT('',#21337); #5948=VERTEX_POINT('',#21342); #5949=VERTEX_POINT('',#21356); #5950=VERTEX_POINT('',#21361); #5951=VERTEX_POINT('',#21386); #5952=VERTEX_POINT('',#21387); #5953=VERTEX_POINT('',#21389); #5954=VERTEX_POINT('',#21391); #5955=VERTEX_POINT('',#21402); #5956=VERTEX_POINT('',#21407); #5957=VERTEX_POINT('',#21421); #5958=VERTEX_POINT('',#21426); #5959=VERTEX_POINT('',#21440); #5960=VERTEX_POINT('',#21445); #5961=VERTEX_POINT('',#21475); #5962=VERTEX_POINT('',#21476); #5963=VERTEX_POINT('',#21481); #5964=VERTEX_POINT('',#21483); #5965=VERTEX_POINT('',#21497); #5966=VERTEX_POINT('',#21502); #5967=VERTEX_POINT('',#21516); #5968=VERTEX_POINT('',#21521); #5969=VERTEX_POINT('',#21528); #5970=VERTEX_POINT('',#21530); #5971=VERTEX_POINT('',#21534); #5972=VERTEX_POINT('',#21536); #5973=VERTEX_POINT('',#21547); #5974=VERTEX_POINT('',#21552); #5975=VERTEX_POINT('',#21566); #5976=VERTEX_POINT('',#21571); #5977=VERTEX_POINT('',#21585); #5978=VERTEX_POINT('',#21590); #5979=VERTEX_POINT('',#21597); #5980=VERTEX_POINT('',#21599); #5981=VERTEX_POINT('',#21603); #5982=VERTEX_POINT('',#21605); #5983=VERTEX_POINT('',#21616); #5984=VERTEX_POINT('',#21621); #5985=VERTEX_POINT('',#21635); #5986=VERTEX_POINT('',#21640); #5987=VERTEX_POINT('',#21665); #5988=VERTEX_POINT('',#21666); #5989=VERTEX_POINT('',#21668); #5990=VERTEX_POINT('',#21670); #5991=VERTEX_POINT('',#21674); #5992=VERTEX_POINT('',#21676); #5993=VERTEX_POINT('',#21680); #5994=VERTEX_POINT('',#21682); #5995=VERTEX_POINT('',#21691); #5996=VERTEX_POINT('',#21692); #5997=VERTEX_POINT('',#21694); #5998=VERTEX_POINT('',#21696); #5999=VERTEX_POINT('',#21700); #6000=VERTEX_POINT('',#21702); #6001=VERTEX_POINT('',#21706); #6002=VERTEX_POINT('',#21708); #6003=VERTEX_POINT('',#21712); #6004=VERTEX_POINT('',#21714); #6005=VERTEX_POINT('',#21718); #6006=VERTEX_POINT('',#21720); #6007=VERTEX_POINT('',#21724); #6008=VERTEX_POINT('',#21726); #6009=VERTEX_POINT('',#21730); #6010=VERTEX_POINT('',#21732); #6011=VERTEX_POINT('',#21736); #6012=VERTEX_POINT('',#21738); #6013=VERTEX_POINT('',#21742); #6014=VERTEX_POINT('',#21744); #6015=VERTEX_POINT('',#21748); #6016=VERTEX_POINT('',#21750); #6017=VERTEX_POINT('',#21754); #6018=VERTEX_POINT('',#21756); #6019=VERTEX_POINT('',#21767); #6020=VERTEX_POINT('',#21772); #6021=VERTEX_POINT('',#21786); #6022=VERTEX_POINT('',#21791); #6023=VERTEX_POINT('',#21805); #6024=VERTEX_POINT('',#21810); #6025=VERTEX_POINT('',#21817); #6026=VERTEX_POINT('',#21819); #6027=VERTEX_POINT('',#21823); #6028=VERTEX_POINT('',#21825); #6029=VERTEX_POINT('',#21836); #6030=VERTEX_POINT('',#21841); #6031=VERTEX_POINT('',#21873); #6032=VERTEX_POINT('',#21874); #6033=VERTEX_POINT('',#21879); #6034=VERTEX_POINT('',#21881); #6035=VERTEX_POINT('',#21895); #6036=VERTEX_POINT('',#21900); #6037=VERTEX_POINT('',#21914); #6038=VERTEX_POINT('',#21919); #6039=VERTEX_POINT('',#21949); #6040=VERTEX_POINT('',#21950); #6041=VERTEX_POINT('',#21955); #6042=VERTEX_POINT('',#21957); #6043=VERTEX_POINT('',#21971); #6044=VERTEX_POINT('',#21976); #6045=VERTEX_POINT('',#21990); #6046=VERTEX_POINT('',#21995); #6047=VERTEX_POINT('',#22020); #6048=VERTEX_POINT('',#22021); #6049=VERTEX_POINT('',#22023); #6050=VERTEX_POINT('',#22025); #6051=VERTEX_POINT('',#22036); #6052=VERTEX_POINT('',#22041); #6053=VERTEX_POINT('',#22055); #6054=VERTEX_POINT('',#22060); #6055=VERTEX_POINT('',#22074); #6056=VERTEX_POINT('',#22079); #6057=VERTEX_POINT('',#22086); #6058=VERTEX_POINT('',#22088); #6059=VERTEX_POINT('',#22092); #6060=VERTEX_POINT('',#22094); #6061=VERTEX_POINT('',#22098); #6062=VERTEX_POINT('',#22100); #6063=VERTEX_POINT('',#22104); #6064=VERTEX_POINT('',#22106); #6065=VERTEX_POINT('',#22110); #6066=VERTEX_POINT('',#22112); #6067=VERTEX_POINT('',#22123); #6068=VERTEX_POINT('',#22128); #6069=VERTEX_POINT('',#22142); #6070=VERTEX_POINT('',#22147); #6071=VERTEX_POINT('',#22154); #6072=VERTEX_POINT('',#22156); #6073=VERTEX_POINT('',#22165); #6074=VERTEX_POINT('',#22166); #6075=VERTEX_POINT('',#22168); #6076=VERTEX_POINT('',#22170); #6077=VERTEX_POINT('',#22174); #6078=VERTEX_POINT('',#22176); #6079=VERTEX_POINT('',#22180); #6080=VERTEX_POINT('',#22182); #6081=VERTEX_POINT('',#22191); #6082=VERTEX_POINT('',#22192); #6083=VERTEX_POINT('',#22194); #6084=VERTEX_POINT('',#22196); #6085=VERTEX_POINT('',#22200); #6086=VERTEX_POINT('',#22202); #6087=VERTEX_POINT('',#22213); #6088=VERTEX_POINT('',#22218); #6089=VERTEX_POINT('',#22232); #6090=VERTEX_POINT('',#22237); #6091=VERTEX_POINT('',#22251); #6092=VERTEX_POINT('',#22256); #6093=VERTEX_POINT('',#22270); #6094=VERTEX_POINT('',#22275); #6095=VERTEX_POINT('',#22289); #6096=VERTEX_POINT('',#22294); #6097=VERTEX_POINT('',#22308); #6098=VERTEX_POINT('',#22313); #6099=VERTEX_POINT('',#22327); #6100=VERTEX_POINT('',#22332); #6101=VERTEX_POINT('',#22346); #6102=VERTEX_POINT('',#22351); #6103=VERTEX_POINT('',#22365); #6104=VERTEX_POINT('',#22370); #6105=VERTEX_POINT('',#22377); #6106=VERTEX_POINT('',#22379); #6107=VERTEX_POINT('',#22383); #6108=VERTEX_POINT('',#22385); #6109=VERTEX_POINT('',#22396); #6110=VERTEX_POINT('',#22401); #6111=VERTEX_POINT('',#22415); #6112=VERTEX_POINT('',#22420); #6113=VERTEX_POINT('',#22434); #6114=VERTEX_POINT('',#22439); #6115=VERTEX_POINT('',#22453); #6116=VERTEX_POINT('',#22458); #6117=VERTEX_POINT('',#22472); #6118=VERTEX_POINT('',#22477); #6119=VERTEX_POINT('',#22491); #6120=VERTEX_POINT('',#22496); #6121=VERTEX_POINT('',#22510); #6122=VERTEX_POINT('',#22515); #6123=EDGE_CURVE('',#4926,#4927,#2406,.T.); #6124=EDGE_CURVE('',#4928,#4926,#2407,.T.); #6125=EDGE_CURVE('',#4929,#4928,#2408,.T.); #6126=EDGE_CURVE('',#4927,#4929,#2409,.T.); #6127=EDGE_CURVE('',#4930,#4930,#810,.T.); #6128=EDGE_CURVE('',#4931,#4931,#811,.T.); #6129=EDGE_CURVE('',#4932,#4933,#2410,.T.); #6130=EDGE_CURVE('',#4934,#4932,#812,.T.); #6131=EDGE_CURVE('',#4935,#4934,#2411,.T.); #6132=EDGE_CURVE('',#4936,#4935,#2412,.T.); #6133=EDGE_CURVE('',#4937,#4936,#2413,.T.); #6134=EDGE_CURVE('',#4938,#4937,#813,.T.); #6135=EDGE_CURVE('',#4939,#4938,#2414,.T.); #6136=EDGE_CURVE('',#4940,#4939,#814,.T.); #6137=EDGE_CURVE('',#4941,#4940,#2415,.T.); #6138=EDGE_CURVE('',#4933,#4941,#815,.T.); #6139=EDGE_CURVE('',#4942,#4942,#816,.T.); #6140=EDGE_CURVE('',#4943,#4944,#336,.T.); #6141=EDGE_CURVE('',#4943,#4945,#2416,.T.); #6142=EDGE_CURVE('',#4945,#4946,#817,.F.); #6143=EDGE_CURVE('',#4946,#4947,#2417,.T.); #6144=EDGE_CURVE('',#4947,#4948,#320,.T.); #6145=EDGE_CURVE('',#4948,#4944,#321,.T.); #6146=EDGE_CURVE('',#4949,#4950,#337,.T.); #6147=EDGE_CURVE('',#4949,#4951,#322,.T.); #6148=EDGE_CURVE('',#4951,#4952,#323,.T.); #6149=EDGE_CURVE('',#4952,#4953,#2418,.T.); #6150=EDGE_CURVE('',#4953,#4954,#818,.F.); #6151=EDGE_CURVE('',#4954,#4950,#2419,.T.); #6152=EDGE_CURVE('',#4955,#4956,#819,.F.); #6153=EDGE_CURVE('',#4957,#4955,#820,.F.); #6154=EDGE_CURVE('',#4956,#4957,#821,.F.); #6155=EDGE_CURVE('',#4958,#4959,#822,.F.); #6156=EDGE_CURVE('',#4960,#4958,#823,.F.); #6157=EDGE_CURVE('',#4959,#4960,#824,.F.); #6158=EDGE_CURVE('',#4961,#4955,#2420,.T.); #6159=EDGE_CURVE('',#4956,#4962,#2421,.T.); #6160=EDGE_CURVE('',#4962,#4963,#338,.T.); #6161=EDGE_CURVE('',#4963,#4961,#339,.T.); #6162=EDGE_CURVE('',#4962,#4964,#324,.T.); #6163=EDGE_CURVE('',#4964,#4965,#340,.T.); #6164=EDGE_CURVE('',#4965,#4963,#325,.T.); #6165=EDGE_CURVE('',#4966,#4967,#341,.F.); #6166=EDGE_CURVE('',#4968,#4966,#825,.T.); #6167=EDGE_CURVE('',#4968,#4969,#342,.T.); #6168=EDGE_CURVE('',#4967,#4969,#826,.T.); #6169=EDGE_CURVE('',#4970,#4971,#827,.F.); #6170=EDGE_CURVE('',#4933,#4970,#828,.F.); #6171=EDGE_CURVE('',#4971,#4933,#829,.F.); #6172=EDGE_CURVE('',#4972,#4973,#343,.F.); #6173=EDGE_CURVE('',#4974,#4972,#830,.T.); #6174=EDGE_CURVE('',#4974,#4975,#344,.T.); #6175=EDGE_CURVE('',#4973,#4975,#831,.T.); #6176=EDGE_CURVE('',#4976,#4977,#832,.F.); #6177=EDGE_CURVE('',#4939,#4976,#833,.F.); #6178=EDGE_CURVE('',#4977,#4939,#834,.F.); #6179=EDGE_CURVE('',#4976,#4978,#835,.T.); #6180=EDGE_CURVE('',#4978,#4979,#345,.T.); #6181=EDGE_CURVE('',#4940,#4979,#346,.T.); #6182=EDGE_CURVE('',#4980,#4981,#347,.F.); #6183=EDGE_CURVE('',#4982,#4980,#836,.T.); #6184=EDGE_CURVE('',#4982,#4983,#348,.T.); #6185=EDGE_CURVE('',#4981,#4983,#837,.T.); #6186=EDGE_CURVE('',#4969,#4982,#2422,.T.); #6187=EDGE_CURVE('',#4980,#4967,#2423,.T.); #6188=EDGE_CURVE('',#4932,#4984,#838,.F.); #6189=EDGE_CURVE('',#4985,#4932,#839,.F.); #6190=EDGE_CURVE('',#4984,#4985,#840,.F.); #6191=EDGE_CURVE('',#4970,#4985,#2424,.T.); #6192=EDGE_CURVE('',#4966,#4984,#349,.T.); #6193=EDGE_CURVE('',#4985,#4968,#350,.T.); #6194=EDGE_CURVE('',#4986,#4987,#351,.F.); #6195=EDGE_CURVE('',#4988,#4986,#841,.T.); #6196=EDGE_CURVE('',#4988,#4989,#352,.T.); #6197=EDGE_CURVE('',#4987,#4989,#842,.T.); #6198=EDGE_CURVE('',#4990,#4938,#843,.F.); #6199=EDGE_CURVE('',#4991,#4990,#844,.F.); #6200=EDGE_CURVE('',#4938,#4991,#845,.F.); #6201=EDGE_CURVE('',#4990,#4973,#353,.T.); #6202=EDGE_CURVE('',#4975,#4991,#354,.T.); #6203=EDGE_CURVE('',#4991,#4977,#2425,.T.); #6204=EDGE_CURVE('',#4934,#4992,#846,.F.); #6205=EDGE_CURVE('',#4993,#4934,#847,.F.); #6206=EDGE_CURVE('',#4992,#4993,#848,.F.); #6207=EDGE_CURVE('',#4984,#4993,#849,.T.); #6208=EDGE_CURVE('',#4993,#4981,#355,.T.); #6209=EDGE_CURVE('',#4983,#4992,#356,.T.); #6210=EDGE_CURVE('',#4937,#4994,#850,.F.); #6211=EDGE_CURVE('',#4995,#4937,#851,.F.); #6212=EDGE_CURVE('',#4994,#4995,#852,.F.); #6213=EDGE_CURVE('',#4935,#4953,#853,.F.); #6214=EDGE_CURVE('',#4954,#4935,#854,.F.); #6215=EDGE_CURVE('',#4992,#4954,#2426,.T.); #6216=EDGE_CURVE('',#4936,#4945,#855,.F.); #6217=EDGE_CURVE('',#4946,#4936,#856,.F.); #6218=EDGE_CURVE('',#4953,#4946,#2427,.T.); #6219=EDGE_CURVE('',#4945,#4995,#2428,.T.); #6220=EDGE_CURVE('',#4986,#4994,#357,.T.); #6221=EDGE_CURVE('',#4995,#4988,#358,.T.); #6222=EDGE_CURVE('',#4994,#4990,#857,.T.); #6223=EDGE_CURVE('',#4989,#4974,#2429,.T.); #6224=EDGE_CURVE('',#4972,#4987,#2430,.T.); #6225=EDGE_CURVE('',#4973,#4986,#858,.T.); #6226=EDGE_CURVE('',#4987,#4972,#859,.T.); #6227=EDGE_CURVE('',#4981,#4966,#860,.T.); #6228=EDGE_CURVE('',#4967,#4980,#861,.T.); #6229=EDGE_CURVE('',#4996,#4976,#326,.T.); #6230=EDGE_CURVE('',#4977,#4997,#327,.T.); #6231=EDGE_CURVE('',#4997,#4996,#359,.T.); #6232=EDGE_CURVE('',#4998,#4971,#862,.T.); #6233=EDGE_CURVE('',#4941,#4999,#360,.T.); #6234=EDGE_CURVE('',#4999,#4998,#361,.T.); #6235=EDGE_CURVE('',#4964,#4970,#328,.T.); #6236=EDGE_CURVE('',#4971,#4965,#329,.T.); #6237=EDGE_CURVE('',#5000,#4996,#330,.T.); #6238=EDGE_CURVE('',#4997,#5001,#331,.T.); #6239=EDGE_CURVE('',#5001,#5000,#362,.T.); #6240=EDGE_CURVE('',#4979,#4999,#2431,.T.); #6241=EDGE_CURVE('',#5001,#4960,#2432,.T.); #6242=EDGE_CURVE('',#4958,#5002,#2433,.T.); #6243=EDGE_CURVE('',#5002,#5000,#363,.T.); #6244=EDGE_CURVE('',#4944,#4959,#2434,.T.); #6245=EDGE_CURVE('',#4960,#5003,#2435,.T.); #6246=EDGE_CURVE('',#5003,#4943,#332,.T.); #6247=EDGE_CURVE('',#4959,#4957,#2436,.T.); #6248=EDGE_CURVE('',#4955,#4958,#2437,.T.); #6249=EDGE_CURVE('',#4950,#5004,#333,.T.); #6250=EDGE_CURVE('',#5004,#4956,#2438,.T.); #6251=EDGE_CURVE('',#4957,#4949,#2439,.T.); #6252=EDGE_CURVE('',#4952,#4947,#2440,.T.); #6253=EDGE_CURVE('',#4964,#5004,#2441,.T.); #6254=EDGE_CURVE('',#5003,#4997,#2442,.T.); #6255=EDGE_CURVE('',#4978,#4927,#334,.T.); #6256=EDGE_CURVE('',#4929,#4998,#335,.T.); #6257=EDGE_CURVE('',#4926,#5002,#863,.T.); #6258=EDGE_CURVE('',#4961,#4928,#864,.T.); #6259=EDGE_CURVE('',#4948,#4951,#2443,.T.); #6260=EDGE_CURVE('',#5005,#5006,#2444,.T.); #6261=EDGE_CURVE('',#5006,#5007,#2445,.T.); #6262=EDGE_CURVE('',#5007,#5008,#2446,.T.); #6263=EDGE_CURVE('',#5008,#5005,#2447,.T.); #6264=EDGE_CURVE('',#5009,#5010,#865,.T.); #6265=EDGE_CURVE('',#5010,#5011,#2448,.T.); #6266=EDGE_CURVE('',#5011,#5012,#866,.T.); #6267=EDGE_CURVE('',#5012,#5009,#2449,.T.); #6268=EDGE_CURVE('',#5005,#5010,#2450,.T.); #6269=EDGE_CURVE('',#5011,#5008,#2451,.T.); #6270=EDGE_CURVE('',#5013,#5014,#867,.T.); #6271=EDGE_CURVE('',#5014,#5015,#2452,.T.); #6272=EDGE_CURVE('',#5015,#5016,#868,.T.); #6273=EDGE_CURVE('',#5016,#5013,#2453,.T.); #6274=EDGE_CURVE('',#5017,#5012,#2454,.T.); #6275=EDGE_CURVE('',#5017,#5018,#2455,.T.); #6276=EDGE_CURVE('',#5019,#5018,#2456,.T.); #6277=EDGE_CURVE('',#5020,#5019,#2457,.T.); #6278=EDGE_CURVE('',#5015,#5020,#2458,.T.); #6279=EDGE_CURVE('',#5021,#5014,#2459,.T.); #6280=EDGE_CURVE('',#5022,#5021,#2460,.T.); #6281=EDGE_CURVE('',#5023,#5022,#2461,.T.); #6282=EDGE_CURVE('',#5023,#5024,#2462,.T.); #6283=EDGE_CURVE('',#5009,#5024,#2463,.T.); #6284=EDGE_CURVE('',#5013,#5025,#2464,.T.); #6285=EDGE_CURVE('',#5025,#5026,#2465,.T.); #6286=EDGE_CURVE('',#5026,#5027,#2466,.T.); #6287=EDGE_CURVE('',#5028,#5027,#869,.T.); #6288=EDGE_CURVE('',#5028,#5029,#2467,.T.); #6289=EDGE_CURVE('',#5029,#5021,#2468,.T.); #6290=EDGE_CURVE('',#5027,#5030,#2469,.T.); #6291=EDGE_CURVE('',#5030,#5031,#870,.T.); #6292=EDGE_CURVE('',#5031,#5028,#2470,.T.); #6293=EDGE_CURVE('',#5026,#5032,#2471,.T.); #6294=EDGE_CURVE('',#5030,#5032,#2472,.T.); #6295=EDGE_CURVE('',#5033,#5034,#871,.T.); #6296=EDGE_CURVE('',#5034,#5035,#2473,.T.); #6297=EDGE_CURVE('',#5035,#5036,#872,.T.); #6298=EDGE_CURVE('',#5036,#5033,#2474,.T.); #6299=EDGE_CURVE('',#5007,#5034,#2475,.T.); #6300=EDGE_CURVE('',#5035,#5006,#2476,.T.); #6301=EDGE_CURVE('',#5033,#5037,#2477,.T.); #6302=EDGE_CURVE('',#5037,#5017,#2478,.T.); #6303=EDGE_CURVE('',#5020,#5038,#2479,.T.); #6304=EDGE_CURVE('',#5039,#5019,#2480,.T.); #6305=EDGE_CURVE('',#5039,#5038,#2481,.T.); #6306=EDGE_CURVE('',#5037,#5040,#2482,.T.); #6307=EDGE_CURVE('',#5018,#5040,#2483,.T.); #6308=EDGE_CURVE('',#5024,#5041,#2484,.T.); #6309=EDGE_CURVE('',#5042,#5023,#2485,.T.); #6310=EDGE_CURVE('',#5042,#5041,#2486,.T.); #6311=EDGE_CURVE('',#5022,#5043,#2487,.T.); #6312=EDGE_CURVE('',#5043,#5042,#2488,.T.); #6313=EDGE_CURVE('',#5029,#5043,#2489,.T.); #6314=EDGE_CURVE('',#5040,#5039,#2490,.T.); #6315=EDGE_CURVE('',#5041,#5036,#2491,.T.); #6316=EDGE_CURVE('',#5038,#5031,#2492,.T.); #6317=EDGE_CURVE('',#5044,#5016,#2493,.T.); #6318=EDGE_CURVE('',#5025,#5044,#2494,.T.); #6319=EDGE_CURVE('',#5032,#5044,#2495,.T.); #6320=EDGE_CURVE('',#5045,#5046,#873,.T.); #6321=EDGE_CURVE('',#5045,#5047,#2496,.T.); #6322=EDGE_CURVE('',#5048,#5047,#2497,.T.); #6323=EDGE_CURVE('',#5048,#5049,#2498,.T.); #6324=EDGE_CURVE('',#5050,#5049,#874,.T.); #6325=EDGE_CURVE('',#5051,#5050,#2499,.T.); #6326=EDGE_CURVE('',#5051,#5052,#2500,.T.); #6327=EDGE_CURVE('',#5052,#5053,#2501,.T.); #6328=EDGE_CURVE('',#5053,#5054,#2502,.T.); #6329=EDGE_CURVE('',#5054,#5055,#2503,.T.); #6330=EDGE_CURVE('',#5055,#5056,#2504,.T.); #6331=EDGE_CURVE('',#5046,#5056,#2505,.T.); #6332=EDGE_CURVE('',#5046,#5057,#2506,.T.); #6333=EDGE_CURVE('',#5056,#5058,#2507,.T.); #6334=EDGE_CURVE('',#5058,#5057,#2508,.T.); #6335=EDGE_CURVE('',#5059,#5050,#2509,.T.); #6336=EDGE_CURVE('',#5059,#5060,#2510,.T.); #6337=EDGE_CURVE('',#5060,#5051,#2511,.T.); #6338=EDGE_CURVE('',#5055,#5061,#2512,.T.); #6339=EDGE_CURVE('',#5058,#5061,#2513,.T.); #6340=EDGE_CURVE('',#5062,#5052,#2514,.T.); #6341=EDGE_CURVE('',#5062,#5060,#2515,.T.); #6342=EDGE_CURVE('',#5063,#5062,#2516,.T.); #6343=EDGE_CURVE('',#5053,#5063,#2517,.T.); #6344=EDGE_CURVE('',#5064,#5063,#2518,.T.); #6345=EDGE_CURVE('',#5054,#5064,#2519,.T.); #6346=EDGE_CURVE('',#5061,#5064,#2520,.T.); #6347=EDGE_CURVE('',#5065,#5066,#2521,.T.); #6348=EDGE_CURVE('',#5067,#5065,#875,.T.); #6349=EDGE_CURVE('',#5068,#5067,#2522,.T.); #6350=EDGE_CURVE('',#5066,#5068,#876,.T.); #6351=EDGE_CURVE('',#5069,#5070,#2523,.T.); #6352=EDGE_CURVE('',#5071,#5069,#2524,.T.); #6353=EDGE_CURVE('',#5072,#5071,#2525,.T.); #6354=EDGE_CURVE('',#5049,#5072,#2526,.T.); #6355=EDGE_CURVE('',#5070,#5048,#2527,.T.); #6356=EDGE_CURVE('',#5072,#5059,#877,.T.); #6357=EDGE_CURVE('',#5057,#5073,#878,.T.); #6358=EDGE_CURVE('',#5073,#5045,#2528,.T.); #6359=EDGE_CURVE('',#5047,#5074,#2529,.T.); #6360=EDGE_CURVE('',#5075,#5073,#2530,.T.); #6361=EDGE_CURVE('',#5076,#5075,#2531,.T.); #6362=EDGE_CURVE('',#5074,#5076,#2532,.T.); #6363=EDGE_CURVE('',#5075,#5068,#879,.T.); #6364=EDGE_CURVE('',#5067,#5076,#880,.F.); #6365=EDGE_CURVE('',#5077,#5078,#2533,.T.); #6366=EDGE_CURVE('',#5079,#5077,#2534,.T.); #6367=EDGE_CURVE('',#5080,#5079,#2535,.T.); #6368=EDGE_CURVE('',#5078,#5080,#2536,.T.); #6369=EDGE_CURVE('',#5066,#5080,#881,.T.); #6370=EDGE_CURVE('',#5079,#5065,#882,.F.); #6371=EDGE_CURVE('',#5081,#5082,#2537,.T.); #6372=EDGE_CURVE('',#5083,#5081,#2538,.T.); #6373=EDGE_CURVE('',#5084,#5083,#2539,.T.); #6374=EDGE_CURVE('',#5082,#5084,#2540,.T.); #6375=EDGE_CURVE('',#5085,#5083,#883,.T.); #6376=EDGE_CURVE('',#5085,#5086,#2541,.T.); #6377=EDGE_CURVE('',#5086,#5084,#884,.T.); #6378=EDGE_CURVE('',#5087,#5088,#2542,.T.); #6379=EDGE_CURVE('',#5089,#5087,#2543,.T.); #6380=EDGE_CURVE('',#5090,#5089,#2544,.T.); #6381=EDGE_CURVE('',#5088,#5090,#2545,.T.); #6382=EDGE_CURVE('',#5081,#5089,#885,.T.); #6383=EDGE_CURVE('',#5082,#5090,#886,.T.); #6384=EDGE_CURVE('',#5091,#5092,#2546,.T.); #6385=EDGE_CURVE('',#5086,#5091,#2547,.T.); #6386=EDGE_CURVE('',#5092,#5085,#2548,.T.); #6387=EDGE_CURVE('',#5093,#5092,#887,.T.); #6388=EDGE_CURVE('',#5093,#5094,#2549,.T.); #6389=EDGE_CURVE('',#5094,#5091,#888,.T.); #6390=EDGE_CURVE('',#5095,#5096,#2550,.T.); #6391=EDGE_CURVE('',#5094,#5095,#2551,.T.); #6392=EDGE_CURVE('',#5096,#5093,#2552,.T.); #6393=EDGE_CURVE('',#5087,#5096,#889,.T.); #6394=EDGE_CURVE('',#5088,#5095,#890,.T.); #6395=EDGE_CURVE('',#5097,#5098,#891,.T.); #6396=EDGE_CURVE('',#5098,#5099,#2553,.T.); #6397=EDGE_CURVE('',#5099,#5100,#892,.F.); #6398=EDGE_CURVE('',#5100,#5097,#2554,.T.); #6399=EDGE_CURVE('',#5101,#5102,#2555,.T.); #6400=EDGE_CURVE('',#5099,#5101,#893,.T.); #6401=EDGE_CURVE('',#5102,#5098,#894,.T.); #6402=EDGE_CURVE('',#5102,#5071,#895,.T.); #6403=EDGE_CURVE('',#5069,#5101,#896,.F.); #6404=EDGE_CURVE('',#5103,#5104,#2556,.T.); #6405=EDGE_CURVE('',#5097,#5103,#2557,.T.); #6406=EDGE_CURVE('',#5104,#5100,#2558,.T.); #6407=EDGE_CURVE('',#5105,#5103,#897,.T.); #6408=EDGE_CURVE('',#5104,#5106,#898,.F.); #6409=EDGE_CURVE('',#5106,#5105,#2559,.T.); #6410=EDGE_CURVE('',#5078,#5107,#899,.T.); #6411=EDGE_CURVE('',#5105,#5107,#2560,.T.); #6412=EDGE_CURVE('',#5107,#5108,#2561,.T.); #6413=EDGE_CURVE('',#5108,#5106,#2562,.T.); #6414=EDGE_CURVE('',#5108,#5077,#900,.F.); #6415=EDGE_CURVE('',#5074,#5070,#2563,.T.); #6416=EDGE_CURVE('',#5109,#5110,#2564,.T.); #6417=EDGE_CURVE('',#5110,#5111,#2565,.T.); #6418=EDGE_CURVE('',#5111,#5112,#2566,.T.); #6419=EDGE_CURVE('',#5112,#5109,#2567,.T.); #6420=EDGE_CURVE('',#5113,#5114,#2568,.T.); #6421=EDGE_CURVE('',#5115,#5113,#2569,.T.); #6422=EDGE_CURVE('',#5116,#5115,#2570,.T.); #6423=EDGE_CURVE('',#5116,#5114,#2571,.T.); #6424=EDGE_CURVE('',#5117,#5118,#2572,.T.); #6425=EDGE_CURVE('',#5119,#5117,#2573,.T.); #6426=EDGE_CURVE('',#5120,#5119,#2574,.T.); #6427=EDGE_CURVE('',#5120,#5118,#2575,.T.); #6428=EDGE_CURVE('',#5116,#5121,#2576,.T.); #6429=EDGE_CURVE('',#5122,#5115,#2577,.T.); #6430=EDGE_CURVE('',#5123,#5122,#2578,.T.); #6431=EDGE_CURVE('',#5124,#5123,#2579,.T.); #6432=EDGE_CURVE('',#5125,#5124,#2580,.T.); #6433=EDGE_CURVE('',#5120,#5125,#2581,.T.); #6434=EDGE_CURVE('',#5126,#5119,#2582,.T.); #6435=EDGE_CURVE('',#5126,#5127,#2583,.T.); #6436=EDGE_CURVE('',#5128,#5127,#2584,.T.); #6437=EDGE_CURVE('',#5121,#5128,#2585,.T.); #6438=EDGE_CURVE('',#5128,#5129,#901,.T.); #6439=EDGE_CURVE('',#5129,#5130,#2586,.T.); #6440=EDGE_CURVE('',#5130,#5121,#902,.T.); #6441=EDGE_CURVE('',#5109,#5129,#2587,.T.); #6442=EDGE_CURVE('',#5130,#5112,#2588,.T.); #6443=EDGE_CURVE('',#5131,#5125,#903,.T.); #6444=EDGE_CURVE('',#5124,#5132,#904,.T.); #6445=EDGE_CURVE('',#5132,#5131,#2589,.T.); #6446=EDGE_CURVE('',#5131,#5133,#2590,.T.); #6447=EDGE_CURVE('',#5133,#5134,#2591,.T.); #6448=EDGE_CURVE('',#5134,#5135,#2592,.T.); #6449=EDGE_CURVE('',#5136,#5135,#905,.T.); #6450=EDGE_CURVE('',#5136,#5118,#2593,.T.); #6451=EDGE_CURVE('',#5135,#5137,#2594,.T.); #6452=EDGE_CURVE('',#5137,#5138,#906,.T.); #6453=EDGE_CURVE('',#5138,#5136,#2595,.T.); #6454=EDGE_CURVE('',#5134,#5139,#2596,.T.); #6455=EDGE_CURVE('',#5137,#5139,#2597,.T.); #6456=EDGE_CURVE('',#5140,#5141,#907,.T.); #6457=EDGE_CURVE('',#5141,#5142,#2598,.T.); #6458=EDGE_CURVE('',#5142,#5143,#908,.T.); #6459=EDGE_CURVE('',#5143,#5140,#2599,.T.); #6460=EDGE_CURVE('',#5111,#5141,#2600,.T.); #6461=EDGE_CURVE('',#5142,#5110,#2601,.T.); #6462=EDGE_CURVE('',#5140,#5114,#2602,.T.); #6463=EDGE_CURVE('',#5123,#5144,#2603,.T.); #6464=EDGE_CURVE('',#5145,#5122,#2604,.T.); #6465=EDGE_CURVE('',#5145,#5144,#2605,.T.); #6466=EDGE_CURVE('',#5127,#5146,#2606,.T.); #6467=EDGE_CURVE('',#5147,#5126,#2607,.T.); #6468=EDGE_CURVE('',#5147,#5146,#2608,.T.); #6469=EDGE_CURVE('',#5117,#5147,#2609,.T.); #6470=EDGE_CURVE('',#5113,#5145,#2610,.T.); #6471=EDGE_CURVE('',#5146,#5143,#2611,.T.); #6472=EDGE_CURVE('',#5144,#5138,#2612,.T.); #6473=EDGE_CURVE('',#5148,#5132,#2613,.T.); #6474=EDGE_CURVE('',#5133,#5148,#2614,.T.); #6475=EDGE_CURVE('',#5139,#5148,#2615,.T.); #6476=EDGE_CURVE('',#5149,#5150,#909,.T.); #6477=EDGE_CURVE('',#5149,#5151,#2616,.T.); #6478=EDGE_CURVE('',#5151,#5152,#2617,.T.); #6479=EDGE_CURVE('',#5152,#5153,#2618,.T.); #6480=EDGE_CURVE('',#5154,#5153,#910,.T.); #6481=EDGE_CURVE('',#5154,#5155,#2619,.T.); #6482=EDGE_CURVE('',#5155,#5156,#2620,.T.); #6483=EDGE_CURVE('',#5156,#5150,#2621,.T.); #6484=EDGE_CURVE('',#5157,#5156,#2622,.T.); #6485=EDGE_CURVE('',#5158,#5155,#2623,.T.); #6486=EDGE_CURVE('',#5157,#5158,#2624,.T.); #6487=EDGE_CURVE('',#5150,#5159,#2625,.T.); #6488=EDGE_CURVE('',#5159,#5157,#2626,.T.); #6489=EDGE_CURVE('',#5153,#5160,#2627,.T.); #6490=EDGE_CURVE('',#5161,#5152,#2628,.T.); #6491=EDGE_CURVE('',#5162,#5161,#2629,.T.); #6492=EDGE_CURVE('',#5163,#5162,#2630,.T.); #6493=EDGE_CURVE('',#5164,#5163,#2631,.T.); #6494=EDGE_CURVE('',#5165,#5164,#2632,.T.); #6495=EDGE_CURVE('',#5166,#5165,#2633,.T.); #6496=EDGE_CURVE('',#5167,#5166,#2634,.T.); #6497=EDGE_CURVE('',#5168,#5167,#2635,.T.); #6498=EDGE_CURVE('',#5169,#5168,#2636,.T.); #6499=EDGE_CURVE('',#5160,#5169,#2637,.T.); #6500=EDGE_CURVE('',#5170,#5165,#911,.T.); #6501=EDGE_CURVE('',#5170,#5171,#2638,.T.); #6502=EDGE_CURVE('',#5172,#5171,#2639,.T.); #6503=EDGE_CURVE('',#5172,#5173,#2640,.T.); #6504=EDGE_CURVE('',#5174,#5173,#912,.T.); #6505=EDGE_CURVE('',#5174,#5175,#2641,.T.); #6506=EDGE_CURVE('',#5175,#5166,#2642,.T.); #6507=EDGE_CURVE('',#5161,#5176,#2643,.T.); #6508=EDGE_CURVE('',#5176,#5177,#2644,.T.); #6509=EDGE_CURVE('',#5177,#5162,#2645,.T.); #6510=EDGE_CURVE('',#5169,#5178,#2646,.T.); #6511=EDGE_CURVE('',#5179,#5168,#2647,.T.); #6512=EDGE_CURVE('',#5179,#5178,#2648,.T.); #6513=EDGE_CURVE('',#5167,#5180,#2649,.T.); #6514=EDGE_CURVE('',#5180,#5179,#2650,.T.); #6515=EDGE_CURVE('',#5180,#5175,#2651,.T.); #6516=EDGE_CURVE('',#5163,#5181,#2652,.T.); #6517=EDGE_CURVE('',#5181,#5177,#2653,.T.); #6518=EDGE_CURVE('',#5151,#5176,#2654,.T.); #6519=EDGE_CURVE('',#5164,#5182,#913,.T.); #6520=EDGE_CURVE('',#5181,#5183,#2655,.T.); #6521=EDGE_CURVE('',#5184,#5183,#914,.T.); #6522=EDGE_CURVE('',#5184,#5185,#2656,.T.); #6523=EDGE_CURVE('',#5186,#5185,#2657,.T.); #6524=EDGE_CURVE('',#5186,#5182,#2658,.T.); #6525=EDGE_CURVE('',#5182,#5170,#2659,.T.); #6526=EDGE_CURVE('',#5171,#5186,#2660,.T.); #6527=EDGE_CURVE('',#5187,#5154,#2661,.T.); #6528=EDGE_CURVE('',#5158,#5187,#2662,.T.); #6529=EDGE_CURVE('',#5160,#5187,#915,.T.); #6530=EDGE_CURVE('',#5159,#5188,#916,.T.); #6531=EDGE_CURVE('',#5178,#5188,#2663,.T.); #6532=EDGE_CURVE('',#5183,#5174,#2664,.T.); #6533=EDGE_CURVE('',#5188,#5149,#2665,.T.); #6534=EDGE_CURVE('',#5173,#5184,#2666,.T.); #6535=EDGE_CURVE('',#5185,#5172,#2667,.T.); #6536=EDGE_CURVE('',#5189,#5190,#2668,.T.); #6537=EDGE_CURVE('',#5190,#5191,#2669,.T.); #6538=EDGE_CURVE('',#5191,#5192,#2670,.T.); #6539=EDGE_CURVE('',#5192,#5189,#2671,.T.); #6540=EDGE_CURVE('',#5193,#5194,#917,.T.); #6541=EDGE_CURVE('',#5194,#5195,#2672,.T.); #6542=EDGE_CURVE('',#5195,#5196,#918,.T.); #6543=EDGE_CURVE('',#5196,#5193,#2673,.T.); #6544=EDGE_CURVE('',#5189,#5194,#2674,.T.); #6545=EDGE_CURVE('',#5195,#5192,#2675,.T.); #6546=EDGE_CURVE('',#5197,#5198,#919,.T.); #6547=EDGE_CURVE('',#5198,#5199,#2676,.T.); #6548=EDGE_CURVE('',#5199,#5200,#920,.T.); #6549=EDGE_CURVE('',#5200,#5197,#2677,.T.); #6550=EDGE_CURVE('',#5201,#5196,#2678,.T.); #6551=EDGE_CURVE('',#5201,#5202,#2679,.T.); #6552=EDGE_CURVE('',#5203,#5202,#2680,.T.); #6553=EDGE_CURVE('',#5204,#5203,#2681,.T.); #6554=EDGE_CURVE('',#5199,#5204,#2682,.T.); #6555=EDGE_CURVE('',#5205,#5198,#2683,.T.); #6556=EDGE_CURVE('',#5206,#5205,#2684,.T.); #6557=EDGE_CURVE('',#5207,#5206,#2685,.T.); #6558=EDGE_CURVE('',#5207,#5208,#2686,.T.); #6559=EDGE_CURVE('',#5193,#5208,#2687,.T.); #6560=EDGE_CURVE('',#5197,#5209,#2688,.T.); #6561=EDGE_CURVE('',#5209,#5210,#2689,.T.); #6562=EDGE_CURVE('',#5210,#5211,#2690,.T.); #6563=EDGE_CURVE('',#5212,#5211,#921,.T.); #6564=EDGE_CURVE('',#5212,#5213,#2691,.T.); #6565=EDGE_CURVE('',#5213,#5205,#2692,.T.); #6566=EDGE_CURVE('',#5211,#5214,#2693,.T.); #6567=EDGE_CURVE('',#5214,#5215,#922,.T.); #6568=EDGE_CURVE('',#5215,#5212,#2694,.T.); #6569=EDGE_CURVE('',#5210,#5216,#2695,.T.); #6570=EDGE_CURVE('',#5214,#5216,#2696,.T.); #6571=EDGE_CURVE('',#5217,#5218,#923,.T.); #6572=EDGE_CURVE('',#5218,#5219,#2697,.T.); #6573=EDGE_CURVE('',#5219,#5220,#924,.T.); #6574=EDGE_CURVE('',#5220,#5217,#2698,.T.); #6575=EDGE_CURVE('',#5191,#5218,#2699,.T.); #6576=EDGE_CURVE('',#5219,#5190,#2700,.T.); #6577=EDGE_CURVE('',#5217,#5221,#2701,.T.); #6578=EDGE_CURVE('',#5221,#5201,#2702,.T.); #6579=EDGE_CURVE('',#5204,#5222,#2703,.T.); #6580=EDGE_CURVE('',#5223,#5203,#2704,.T.); #6581=EDGE_CURVE('',#5223,#5222,#2705,.T.); #6582=EDGE_CURVE('',#5221,#5224,#2706,.T.); #6583=EDGE_CURVE('',#5202,#5224,#2707,.T.); #6584=EDGE_CURVE('',#5208,#5225,#2708,.T.); #6585=EDGE_CURVE('',#5226,#5207,#2709,.T.); #6586=EDGE_CURVE('',#5226,#5225,#2710,.T.); #6587=EDGE_CURVE('',#5206,#5227,#2711,.T.); #6588=EDGE_CURVE('',#5227,#5226,#2712,.T.); #6589=EDGE_CURVE('',#5213,#5227,#2713,.T.); #6590=EDGE_CURVE('',#5224,#5223,#2714,.T.); #6591=EDGE_CURVE('',#5225,#5220,#2715,.T.); #6592=EDGE_CURVE('',#5222,#5215,#2716,.T.); #6593=EDGE_CURVE('',#5228,#5200,#2717,.T.); #6594=EDGE_CURVE('',#5209,#5228,#2718,.T.); #6595=EDGE_CURVE('',#5216,#5228,#2719,.T.); #6596=EDGE_CURVE('',#5229,#5230,#925,.T.); #6597=EDGE_CURVE('',#5229,#5231,#2720,.T.); #6598=EDGE_CURVE('',#5232,#5231,#2721,.T.); #6599=EDGE_CURVE('',#5232,#5233,#2722,.T.); #6600=EDGE_CURVE('',#5234,#5233,#926,.T.); #6601=EDGE_CURVE('',#5234,#5235,#2723,.T.); #6602=EDGE_CURVE('',#5235,#5236,#2724,.T.); #6603=EDGE_CURVE('',#5236,#5230,#2725,.T.); #6604=EDGE_CURVE('',#5237,#5236,#2726,.T.); #6605=EDGE_CURVE('',#5238,#5235,#2727,.T.); #6606=EDGE_CURVE('',#5237,#5238,#2728,.T.); #6607=EDGE_CURVE('',#5230,#5239,#2729,.T.); #6608=EDGE_CURVE('',#5239,#5237,#2730,.T.); #6609=EDGE_CURVE('',#5240,#5241,#2731,.T.); #6610=EDGE_CURVE('',#5242,#5241,#2732,.T.); #6611=EDGE_CURVE('',#5243,#5242,#2733,.T.); #6612=EDGE_CURVE('',#5244,#5243,#2734,.T.); #6613=EDGE_CURVE('',#5233,#5244,#2735,.T.); #6614=EDGE_CURVE('',#5232,#5245,#2736,.T.); #6615=EDGE_CURVE('',#5246,#5245,#2737,.T.); #6616=EDGE_CURVE('',#5247,#5246,#2738,.T.); #6617=EDGE_CURVE('',#5248,#5247,#2739,.T.); #6618=EDGE_CURVE('',#5249,#5248,#2740,.T.); #6619=EDGE_CURVE('',#5240,#5249,#2741,.T.); #6620=EDGE_CURVE('',#5250,#5249,#927,.T.); #6621=EDGE_CURVE('',#5250,#5251,#2742,.T.); #6622=EDGE_CURVE('',#5252,#5251,#2743,.T.); #6623=EDGE_CURVE('',#5252,#5253,#2744,.T.); #6624=EDGE_CURVE('',#5254,#5253,#928,.T.); #6625=EDGE_CURVE('',#5254,#5255,#2745,.T.); #6626=EDGE_CURVE('',#5255,#5240,#2746,.T.); #6627=EDGE_CURVE('',#5243,#5256,#2747,.T.); #6628=EDGE_CURVE('',#5257,#5242,#2748,.T.); #6629=EDGE_CURVE('',#5257,#5256,#2749,.T.); #6630=EDGE_CURVE('',#5247,#5258,#2750,.T.); #6631=EDGE_CURVE('',#5259,#5246,#2751,.T.); #6632=EDGE_CURVE('',#5258,#5259,#2752,.T.); #6633=EDGE_CURVE('',#5248,#5260,#929,.T.); #6634=EDGE_CURVE('',#5258,#5261,#2753,.T.); #6635=EDGE_CURVE('',#5262,#5261,#930,.T.); #6636=EDGE_CURVE('',#5262,#5263,#2754,.T.); #6637=EDGE_CURVE('',#5264,#5263,#2755,.T.); #6638=EDGE_CURVE('',#5264,#5260,#2756,.T.); #6639=EDGE_CURVE('',#5260,#5250,#2757,.T.); #6640=EDGE_CURVE('',#5251,#5264,#2758,.T.); #6641=EDGE_CURVE('',#5265,#5234,#2759,.T.); #6642=EDGE_CURVE('',#5238,#5265,#2760,.T.); #6643=EDGE_CURVE('',#5244,#5265,#931,.T.); #6644=EDGE_CURVE('',#5239,#5266,#932,.T.); #6645=EDGE_CURVE('',#5256,#5266,#2761,.T.); #6646=EDGE_CURVE('',#5266,#5229,#2762,.T.); #6647=EDGE_CURVE('',#5253,#5262,#2763,.T.); #6648=EDGE_CURVE('',#5263,#5252,#2764,.T.); #6649=EDGE_CURVE('',#5261,#5254,#2765,.T.); #6650=EDGE_CURVE('',#5267,#5255,#2766,.T.); #6651=EDGE_CURVE('',#5268,#5259,#2767,.T.); #6652=EDGE_CURVE('',#5268,#5231,#2768,.T.); #6653=EDGE_CURVE('',#5267,#5257,#2769,.T.); #6654=EDGE_CURVE('',#5245,#5268,#2770,.T.); #6655=EDGE_CURVE('',#5241,#5267,#2771,.T.); #6656=EDGE_CURVE('',#5269,#5270,#2772,.T.); #6657=EDGE_CURVE('',#5270,#5271,#2773,.T.); #6658=EDGE_CURVE('',#5271,#5272,#2774,.T.); #6659=EDGE_CURVE('',#5272,#5269,#2775,.T.); #6660=EDGE_CURVE('',#5273,#5274,#933,.T.); #6661=EDGE_CURVE('',#5274,#5275,#2776,.T.); #6662=EDGE_CURVE('',#5275,#5276,#934,.T.); #6663=EDGE_CURVE('',#5276,#5273,#2777,.T.); #6664=EDGE_CURVE('',#5269,#5274,#2778,.T.); #6665=EDGE_CURVE('',#5275,#5272,#2779,.T.); #6666=EDGE_CURVE('',#5277,#5278,#935,.T.); #6667=EDGE_CURVE('',#5278,#5279,#2780,.T.); #6668=EDGE_CURVE('',#5279,#5280,#936,.T.); #6669=EDGE_CURVE('',#5280,#5277,#2781,.T.); #6670=EDGE_CURVE('',#5281,#5276,#2782,.T.); #6671=EDGE_CURVE('',#5281,#5282,#2783,.T.); #6672=EDGE_CURVE('',#5283,#5282,#2784,.T.); #6673=EDGE_CURVE('',#5284,#5283,#2785,.T.); #6674=EDGE_CURVE('',#5279,#5284,#2786,.T.); #6675=EDGE_CURVE('',#5285,#5278,#2787,.T.); #6676=EDGE_CURVE('',#5286,#5285,#2788,.T.); #6677=EDGE_CURVE('',#5287,#5286,#2789,.T.); #6678=EDGE_CURVE('',#5287,#5288,#2790,.T.); #6679=EDGE_CURVE('',#5273,#5288,#2791,.T.); #6680=EDGE_CURVE('',#5277,#5289,#2792,.T.); #6681=EDGE_CURVE('',#5289,#5290,#2793,.T.); #6682=EDGE_CURVE('',#5290,#5291,#2794,.T.); #6683=EDGE_CURVE('',#5292,#5291,#937,.T.); #6684=EDGE_CURVE('',#5292,#5293,#2795,.T.); #6685=EDGE_CURVE('',#5293,#5285,#2796,.T.); #6686=EDGE_CURVE('',#5291,#5294,#2797,.T.); #6687=EDGE_CURVE('',#5294,#5295,#938,.T.); #6688=EDGE_CURVE('',#5295,#5292,#2798,.T.); #6689=EDGE_CURVE('',#5290,#5296,#2799,.T.); #6690=EDGE_CURVE('',#5294,#5296,#2800,.T.); #6691=EDGE_CURVE('',#5297,#5298,#939,.T.); #6692=EDGE_CURVE('',#5298,#5299,#2801,.T.); #6693=EDGE_CURVE('',#5299,#5300,#940,.T.); #6694=EDGE_CURVE('',#5300,#5297,#2802,.T.); #6695=EDGE_CURVE('',#5271,#5298,#2803,.T.); #6696=EDGE_CURVE('',#5299,#5270,#2804,.T.); #6697=EDGE_CURVE('',#5297,#5301,#2805,.T.); #6698=EDGE_CURVE('',#5301,#5281,#2806,.T.); #6699=EDGE_CURVE('',#5284,#5302,#2807,.T.); #6700=EDGE_CURVE('',#5303,#5283,#2808,.T.); #6701=EDGE_CURVE('',#5303,#5302,#2809,.T.); #6702=EDGE_CURVE('',#5301,#5304,#2810,.T.); #6703=EDGE_CURVE('',#5282,#5304,#2811,.T.); #6704=EDGE_CURVE('',#5288,#5305,#2812,.T.); #6705=EDGE_CURVE('',#5306,#5287,#2813,.T.); #6706=EDGE_CURVE('',#5306,#5305,#2814,.T.); #6707=EDGE_CURVE('',#5286,#5307,#2815,.T.); #6708=EDGE_CURVE('',#5307,#5306,#2816,.T.); #6709=EDGE_CURVE('',#5293,#5307,#2817,.T.); #6710=EDGE_CURVE('',#5304,#5303,#2818,.T.); #6711=EDGE_CURVE('',#5305,#5300,#2819,.T.); #6712=EDGE_CURVE('',#5302,#5295,#2820,.T.); #6713=EDGE_CURVE('',#5308,#5280,#2821,.T.); #6714=EDGE_CURVE('',#5289,#5308,#2822,.T.); #6715=EDGE_CURVE('',#5296,#5308,#2823,.T.); #6716=EDGE_CURVE('',#5309,#5310,#941,.T.); #6717=EDGE_CURVE('',#5309,#5311,#2824,.T.); #6718=EDGE_CURVE('',#5311,#5312,#2825,.T.); #6719=EDGE_CURVE('',#5312,#5313,#2826,.T.); #6720=EDGE_CURVE('',#5314,#5313,#942,.T.); #6721=EDGE_CURVE('',#5314,#5315,#2827,.T.); #6722=EDGE_CURVE('',#5315,#5316,#2828,.T.); #6723=EDGE_CURVE('',#5316,#5310,#2829,.T.); #6724=EDGE_CURVE('',#5317,#5316,#2830,.T.); #6725=EDGE_CURVE('',#5318,#5315,#2831,.T.); #6726=EDGE_CURVE('',#5317,#5318,#2832,.T.); #6727=EDGE_CURVE('',#5310,#5319,#2833,.T.); #6728=EDGE_CURVE('',#5319,#5317,#2834,.T.); #6729=EDGE_CURVE('',#5313,#5320,#2835,.T.); #6730=EDGE_CURVE('',#5321,#5312,#2836,.T.); #6731=EDGE_CURVE('',#5322,#5321,#2837,.T.); #6732=EDGE_CURVE('',#5323,#5322,#2838,.T.); #6733=EDGE_CURVE('',#5324,#5323,#2839,.T.); #6734=EDGE_CURVE('',#5325,#5324,#2840,.T.); #6735=EDGE_CURVE('',#5326,#5325,#2841,.T.); #6736=EDGE_CURVE('',#5327,#5326,#2842,.T.); #6737=EDGE_CURVE('',#5328,#5327,#2843,.T.); #6738=EDGE_CURVE('',#5329,#5328,#2844,.T.); #6739=EDGE_CURVE('',#5320,#5329,#2845,.T.); #6740=EDGE_CURVE('',#5330,#5325,#943,.T.); #6741=EDGE_CURVE('',#5330,#5331,#2846,.T.); #6742=EDGE_CURVE('',#5332,#5331,#2847,.T.); #6743=EDGE_CURVE('',#5332,#5333,#2848,.T.); #6744=EDGE_CURVE('',#5334,#5333,#944,.T.); #6745=EDGE_CURVE('',#5334,#5335,#2849,.T.); #6746=EDGE_CURVE('',#5335,#5326,#2850,.T.); #6747=EDGE_CURVE('',#5321,#5336,#2851,.T.); #6748=EDGE_CURVE('',#5336,#5337,#2852,.T.); #6749=EDGE_CURVE('',#5337,#5322,#2853,.T.); #6750=EDGE_CURVE('',#5329,#5338,#2854,.T.); #6751=EDGE_CURVE('',#5339,#5328,#2855,.T.); #6752=EDGE_CURVE('',#5339,#5338,#2856,.T.); #6753=EDGE_CURVE('',#5327,#5340,#2857,.T.); #6754=EDGE_CURVE('',#5340,#5339,#2858,.T.); #6755=EDGE_CURVE('',#5340,#5335,#2859,.T.); #6756=EDGE_CURVE('',#5323,#5341,#2860,.T.); #6757=EDGE_CURVE('',#5341,#5337,#2861,.T.); #6758=EDGE_CURVE('',#5311,#5336,#2862,.T.); #6759=EDGE_CURVE('',#5324,#5342,#945,.T.); #6760=EDGE_CURVE('',#5341,#5343,#2863,.T.); #6761=EDGE_CURVE('',#5344,#5343,#946,.T.); #6762=EDGE_CURVE('',#5344,#5345,#2864,.T.); #6763=EDGE_CURVE('',#5346,#5345,#2865,.T.); #6764=EDGE_CURVE('',#5346,#5342,#2866,.T.); #6765=EDGE_CURVE('',#5342,#5330,#2867,.T.); #6766=EDGE_CURVE('',#5331,#5346,#2868,.T.); #6767=EDGE_CURVE('',#5347,#5314,#2869,.T.); #6768=EDGE_CURVE('',#5318,#5347,#2870,.T.); #6769=EDGE_CURVE('',#5320,#5347,#947,.T.); #6770=EDGE_CURVE('',#5319,#5348,#948,.T.); #6771=EDGE_CURVE('',#5338,#5348,#2871,.T.); #6772=EDGE_CURVE('',#5343,#5334,#2872,.T.); #6773=EDGE_CURVE('',#5348,#5309,#2873,.T.); #6774=EDGE_CURVE('',#5333,#5344,#2874,.T.); #6775=EDGE_CURVE('',#5345,#5332,#2875,.T.); #6776=EDGE_CURVE('',#5349,#5350,#364,.T.); #6777=EDGE_CURVE('',#5349,#5351,#2876,.T.); #6778=EDGE_CURVE('',#5352,#5351,#365,.T.); #6779=EDGE_CURVE('',#5350,#5352,#2877,.T.); #6780=EDGE_CURVE('',#5350,#5353,#366,.T.); #6781=EDGE_CURVE('',#5354,#5352,#367,.T.); #6782=EDGE_CURVE('',#5353,#5354,#2878,.T.); #6783=EDGE_CURVE('',#5353,#5355,#368,.T.); #6784=EDGE_CURVE('',#5356,#5354,#369,.T.); #6785=EDGE_CURVE('',#5355,#5356,#2879,.T.); #6786=EDGE_CURVE('',#5355,#5357,#370,.T.); #6787=EDGE_CURVE('',#5358,#5356,#371,.T.); #6788=EDGE_CURVE('',#5357,#5358,#2880,.T.); #6789=EDGE_CURVE('',#5357,#5359,#2881,.T.); #6790=EDGE_CURVE('',#5360,#5358,#2882,.T.); #6791=EDGE_CURVE('',#5359,#5360,#2883,.T.); #6792=EDGE_CURVE('',#5359,#5361,#2884,.T.); #6793=EDGE_CURVE('',#5362,#5360,#2885,.T.); #6794=EDGE_CURVE('',#5361,#5362,#2886,.T.); #6795=EDGE_CURVE('',#5361,#5363,#372,.T.); #6796=EDGE_CURVE('',#5364,#5362,#373,.T.); #6797=EDGE_CURVE('',#5363,#5364,#2887,.T.); #6798=EDGE_CURVE('',#5363,#5365,#374,.T.); #6799=EDGE_CURVE('',#5366,#5364,#375,.T.); #6800=EDGE_CURVE('',#5365,#5366,#2888,.T.); #6801=EDGE_CURVE('',#5365,#5367,#376,.T.); #6802=EDGE_CURVE('',#5368,#5366,#377,.T.); #6803=EDGE_CURVE('',#5367,#5368,#2889,.T.); #6804=EDGE_CURVE('',#5367,#5369,#378,.T.); #6805=EDGE_CURVE('',#5370,#5368,#379,.T.); #6806=EDGE_CURVE('',#5369,#5370,#2890,.T.); #6807=EDGE_CURVE('',#5369,#5371,#380,.T.); #6808=EDGE_CURVE('',#5372,#5370,#381,.T.); #6809=EDGE_CURVE('',#5371,#5372,#2891,.T.); #6810=EDGE_CURVE('',#5371,#5373,#2892,.T.); #6811=EDGE_CURVE('',#5374,#5372,#2893,.T.); #6812=EDGE_CURVE('',#5373,#5374,#2894,.T.); #6813=EDGE_CURVE('',#5373,#5375,#2895,.T.); #6814=EDGE_CURVE('',#5376,#5374,#2896,.T.); #6815=EDGE_CURVE('',#5375,#5376,#2897,.T.); #6816=EDGE_CURVE('',#5375,#5377,#382,.T.); #6817=EDGE_CURVE('',#5378,#5376,#383,.T.); #6818=EDGE_CURVE('',#5377,#5378,#2898,.T.); #6819=EDGE_CURVE('',#5377,#5379,#384,.T.); #6820=EDGE_CURVE('',#5380,#5378,#385,.T.); #6821=EDGE_CURVE('',#5379,#5380,#2899,.T.); #6822=EDGE_CURVE('',#5379,#5349,#386,.T.); #6823=EDGE_CURVE('',#5351,#5380,#387,.T.); #6824=EDGE_CURVE('',#5381,#5382,#2900,.T.); #6825=EDGE_CURVE('',#5381,#5383,#2901,.T.); #6826=EDGE_CURVE('',#5384,#5383,#2902,.T.); #6827=EDGE_CURVE('',#5382,#5384,#2903,.T.); #6828=EDGE_CURVE('',#5382,#5385,#2904,.T.); #6829=EDGE_CURVE('',#5386,#5384,#2905,.T.); #6830=EDGE_CURVE('',#5385,#5386,#2906,.T.); #6831=EDGE_CURVE('',#5385,#5387,#2907,.T.); #6832=EDGE_CURVE('',#5388,#5386,#2908,.T.); #6833=EDGE_CURVE('',#5387,#5388,#2909,.T.); #6834=EDGE_CURVE('',#5387,#5381,#2910,.T.); #6835=EDGE_CURVE('',#5383,#5388,#2911,.T.); #6836=EDGE_CURVE('',#5389,#5390,#388,.T.); #6837=EDGE_CURVE('',#5389,#5391,#2912,.T.); #6838=EDGE_CURVE('',#5392,#5391,#389,.T.); #6839=EDGE_CURVE('',#5390,#5392,#2913,.T.); #6840=EDGE_CURVE('',#5390,#5393,#390,.T.); #6841=EDGE_CURVE('',#5394,#5392,#391,.T.); #6842=EDGE_CURVE('',#5393,#5394,#2914,.T.); #6843=EDGE_CURVE('',#5393,#5395,#2915,.T.); #6844=EDGE_CURVE('',#5396,#5394,#2916,.T.); #6845=EDGE_CURVE('',#5395,#5396,#2917,.T.); #6846=EDGE_CURVE('',#5395,#5397,#2918,.T.); #6847=EDGE_CURVE('',#5398,#5396,#2919,.T.); #6848=EDGE_CURVE('',#5397,#5398,#2920,.T.); #6849=EDGE_CURVE('',#5397,#5399,#2921,.T.); #6850=EDGE_CURVE('',#5400,#5398,#2922,.T.); #6851=EDGE_CURVE('',#5399,#5400,#2923,.T.); #6852=EDGE_CURVE('',#5399,#5401,#2924,.T.); #6853=EDGE_CURVE('',#5402,#5400,#2925,.T.); #6854=EDGE_CURVE('',#5401,#5402,#2926,.T.); #6855=EDGE_CURVE('',#5401,#5403,#2927,.T.); #6856=EDGE_CURVE('',#5404,#5402,#2928,.T.); #6857=EDGE_CURVE('',#5403,#5404,#2929,.T.); #6858=EDGE_CURVE('',#5403,#5405,#392,.T.); #6859=EDGE_CURVE('',#5406,#5404,#393,.T.); #6860=EDGE_CURVE('',#5405,#5406,#2930,.T.); #6861=EDGE_CURVE('',#5405,#5407,#394,.T.); #6862=EDGE_CURVE('',#5408,#5406,#395,.T.); #6863=EDGE_CURVE('',#5407,#5408,#2931,.T.); #6864=EDGE_CURVE('',#5407,#5409,#2932,.T.); #6865=EDGE_CURVE('',#5410,#5408,#2933,.T.); #6866=EDGE_CURVE('',#5409,#5410,#2934,.T.); #6867=EDGE_CURVE('',#5409,#5389,#2935,.T.); #6868=EDGE_CURVE('',#5391,#5410,#2936,.T.); #6869=EDGE_CURVE('',#5411,#5412,#396,.T.); #6870=EDGE_CURVE('',#5411,#5413,#2937,.T.); #6871=EDGE_CURVE('',#5414,#5413,#397,.T.); #6872=EDGE_CURVE('',#5412,#5414,#2938,.T.); #6873=EDGE_CURVE('',#5412,#5415,#398,.T.); #6874=EDGE_CURVE('',#5416,#5414,#399,.T.); #6875=EDGE_CURVE('',#5415,#5416,#2939,.T.); #6876=EDGE_CURVE('',#5415,#5417,#400,.T.); #6877=EDGE_CURVE('',#5418,#5416,#401,.T.); #6878=EDGE_CURVE('',#5417,#5418,#2940,.T.); #6879=EDGE_CURVE('',#5417,#5419,#402,.T.); #6880=EDGE_CURVE('',#5420,#5418,#403,.T.); #6881=EDGE_CURVE('',#5419,#5420,#2941,.T.); #6882=EDGE_CURVE('',#5419,#5421,#2942,.T.); #6883=EDGE_CURVE('',#5422,#5420,#2943,.T.); #6884=EDGE_CURVE('',#5421,#5422,#2944,.T.); #6885=EDGE_CURVE('',#5421,#5423,#2945,.T.); #6886=EDGE_CURVE('',#5424,#5422,#2946,.T.); #6887=EDGE_CURVE('',#5423,#5424,#2947,.T.); #6888=EDGE_CURVE('',#5423,#5425,#404,.T.); #6889=EDGE_CURVE('',#5426,#5424,#405,.T.); #6890=EDGE_CURVE('',#5425,#5426,#2948,.T.); #6891=EDGE_CURVE('',#5425,#5427,#406,.T.); #6892=EDGE_CURVE('',#5428,#5426,#407,.T.); #6893=EDGE_CURVE('',#5427,#5428,#2949,.T.); #6894=EDGE_CURVE('',#5427,#5429,#408,.T.); #6895=EDGE_CURVE('',#5430,#5428,#409,.T.); #6896=EDGE_CURVE('',#5429,#5430,#2950,.T.); #6897=EDGE_CURVE('',#5429,#5431,#410,.T.); #6898=EDGE_CURVE('',#5432,#5430,#411,.T.); #6899=EDGE_CURVE('',#5431,#5432,#2951,.T.); #6900=EDGE_CURVE('',#5431,#5433,#412,.T.); #6901=EDGE_CURVE('',#5434,#5432,#413,.T.); #6902=EDGE_CURVE('',#5433,#5434,#2952,.T.); #6903=EDGE_CURVE('',#5433,#5435,#2953,.T.); #6904=EDGE_CURVE('',#5436,#5434,#2954,.T.); #6905=EDGE_CURVE('',#5435,#5436,#2955,.T.); #6906=EDGE_CURVE('',#5435,#5437,#2956,.T.); #6907=EDGE_CURVE('',#5438,#5436,#2957,.T.); #6908=EDGE_CURVE('',#5437,#5438,#2958,.T.); #6909=EDGE_CURVE('',#5437,#5439,#414,.T.); #6910=EDGE_CURVE('',#5440,#5438,#415,.T.); #6911=EDGE_CURVE('',#5439,#5440,#2959,.T.); #6912=EDGE_CURVE('',#5439,#5441,#416,.T.); #6913=EDGE_CURVE('',#5442,#5440,#417,.T.); #6914=EDGE_CURVE('',#5441,#5442,#2960,.T.); #6915=EDGE_CURVE('',#5441,#5411,#418,.T.); #6916=EDGE_CURVE('',#5413,#5442,#419,.T.); #6917=EDGE_CURVE('',#5443,#5444,#2961,.T.); #6918=EDGE_CURVE('',#5443,#5445,#2962,.T.); #6919=EDGE_CURVE('',#5446,#5445,#2963,.T.); #6920=EDGE_CURVE('',#5444,#5446,#2964,.T.); #6921=EDGE_CURVE('',#5447,#5443,#420,.T.); #6922=EDGE_CURVE('',#5447,#5448,#2965,.T.); #6923=EDGE_CURVE('',#5445,#5448,#421,.T.); #6924=EDGE_CURVE('',#5449,#5447,#422,.T.); #6925=EDGE_CURVE('',#5449,#5450,#2966,.T.); #6926=EDGE_CURVE('',#5448,#5450,#423,.T.); #6927=EDGE_CURVE('',#5451,#5449,#424,.T.); #6928=EDGE_CURVE('',#5451,#5452,#2967,.T.); #6929=EDGE_CURVE('',#5450,#5452,#425,.T.); #6930=EDGE_CURVE('',#5444,#5451,#426,.T.); #6931=EDGE_CURVE('',#5452,#5446,#427,.T.); #6932=EDGE_CURVE('',#5453,#5454,#428,.T.); #6933=EDGE_CURVE('',#5453,#5455,#2968,.T.); #6934=EDGE_CURVE('',#5456,#5455,#429,.T.); #6935=EDGE_CURVE('',#5454,#5456,#2969,.T.); #6936=EDGE_CURVE('',#5454,#5457,#430,.T.); #6937=EDGE_CURVE('',#5458,#5456,#431,.T.); #6938=EDGE_CURVE('',#5457,#5458,#2970,.T.); #6939=EDGE_CURVE('',#5457,#5459,#432,.T.); #6940=EDGE_CURVE('',#5460,#5458,#433,.T.); #6941=EDGE_CURVE('',#5459,#5460,#2971,.T.); #6942=EDGE_CURVE('',#5459,#5461,#2972,.T.); #6943=EDGE_CURVE('',#5462,#5460,#2973,.T.); #6944=EDGE_CURVE('',#5461,#5462,#2974,.T.); #6945=EDGE_CURVE('',#5461,#5463,#2975,.T.); #6946=EDGE_CURVE('',#5464,#5462,#2976,.T.); #6947=EDGE_CURVE('',#5463,#5464,#2977,.T.); #6948=EDGE_CURVE('',#5463,#5465,#434,.T.); #6949=EDGE_CURVE('',#5466,#5464,#435,.T.); #6950=EDGE_CURVE('',#5465,#5466,#2978,.T.); #6951=EDGE_CURVE('',#5465,#5467,#436,.T.); #6952=EDGE_CURVE('',#5468,#5466,#437,.T.); #6953=EDGE_CURVE('',#5467,#5468,#2979,.T.); #6954=EDGE_CURVE('',#5467,#5469,#438,.T.); #6955=EDGE_CURVE('',#5470,#5468,#439,.T.); #6956=EDGE_CURVE('',#5469,#5470,#2980,.T.); #6957=EDGE_CURVE('',#5469,#5471,#2981,.T.); #6958=EDGE_CURVE('',#5472,#5470,#2982,.T.); #6959=EDGE_CURVE('',#5471,#5472,#2983,.T.); #6960=EDGE_CURVE('',#5471,#5473,#2984,.T.); #6961=EDGE_CURVE('',#5474,#5472,#2985,.T.); #6962=EDGE_CURVE('',#5473,#5474,#2986,.T.); #6963=EDGE_CURVE('',#5473,#5475,#440,.T.); #6964=EDGE_CURVE('',#5476,#5474,#441,.T.); #6965=EDGE_CURVE('',#5475,#5476,#2987,.T.); #6966=EDGE_CURVE('',#5475,#5477,#442,.T.); #6967=EDGE_CURVE('',#5478,#5476,#443,.T.); #6968=EDGE_CURVE('',#5477,#5478,#2988,.T.); #6969=EDGE_CURVE('',#5477,#5453,#444,.T.); #6970=EDGE_CURVE('',#5455,#5478,#445,.T.); #6971=EDGE_CURVE('',#5479,#5480,#446,.T.); #6972=EDGE_CURVE('',#5479,#5481,#2989,.T.); #6973=EDGE_CURVE('',#5482,#5481,#447,.T.); #6974=EDGE_CURVE('',#5480,#5482,#2990,.T.); #6975=EDGE_CURVE('',#5480,#5483,#448,.T.); #6976=EDGE_CURVE('',#5484,#5482,#449,.T.); #6977=EDGE_CURVE('',#5483,#5484,#2991,.T.); #6978=EDGE_CURVE('',#5483,#5485,#2992,.T.); #6979=EDGE_CURVE('',#5486,#5484,#2993,.T.); #6980=EDGE_CURVE('',#5485,#5486,#2994,.T.); #6981=EDGE_CURVE('',#5485,#5487,#2995,.T.); #6982=EDGE_CURVE('',#5488,#5486,#2996,.T.); #6983=EDGE_CURVE('',#5487,#5488,#2997,.T.); #6984=EDGE_CURVE('',#5487,#5489,#2998,.T.); #6985=EDGE_CURVE('',#5490,#5488,#2999,.T.); #6986=EDGE_CURVE('',#5489,#5490,#3000,.T.); #6987=EDGE_CURVE('',#5489,#5491,#3001,.T.); #6988=EDGE_CURVE('',#5492,#5490,#3002,.T.); #6989=EDGE_CURVE('',#5491,#5492,#3003,.T.); #6990=EDGE_CURVE('',#5491,#5493,#3004,.T.); #6991=EDGE_CURVE('',#5494,#5492,#3005,.T.); #6992=EDGE_CURVE('',#5493,#5494,#3006,.T.); #6993=EDGE_CURVE('',#5493,#5495,#450,.T.); #6994=EDGE_CURVE('',#5496,#5494,#451,.T.); #6995=EDGE_CURVE('',#5495,#5496,#3007,.T.); #6996=EDGE_CURVE('',#5495,#5497,#452,.T.); #6997=EDGE_CURVE('',#5498,#5496,#453,.T.); #6998=EDGE_CURVE('',#5497,#5498,#3008,.T.); #6999=EDGE_CURVE('',#5497,#5499,#3009,.T.); #7000=EDGE_CURVE('',#5500,#5498,#3010,.T.); #7001=EDGE_CURVE('',#5499,#5500,#3011,.T.); #7002=EDGE_CURVE('',#5499,#5479,#3012,.T.); #7003=EDGE_CURVE('',#5481,#5500,#3013,.T.); #7004=EDGE_CURVE('',#5501,#5502,#3014,.T.); #7005=EDGE_CURVE('',#5501,#5503,#3015,.T.); #7006=EDGE_CURVE('',#5504,#5503,#3016,.T.); #7007=EDGE_CURVE('',#5502,#5504,#3017,.T.); #7008=EDGE_CURVE('',#5502,#5505,#3018,.T.); #7009=EDGE_CURVE('',#5506,#5504,#3019,.T.); #7010=EDGE_CURVE('',#5505,#5506,#3020,.T.); #7011=EDGE_CURVE('',#5505,#5507,#3021,.T.); #7012=EDGE_CURVE('',#5508,#5506,#3022,.T.); #7013=EDGE_CURVE('',#5507,#5508,#3023,.T.); #7014=EDGE_CURVE('',#5507,#5501,#3024,.T.); #7015=EDGE_CURVE('',#5503,#5508,#3025,.T.); #7016=EDGE_CURVE('',#5509,#5510,#3026,.T.); #7017=EDGE_CURVE('',#5509,#5511,#3027,.T.); #7018=EDGE_CURVE('',#5512,#5511,#3028,.T.); #7019=EDGE_CURVE('',#5510,#5512,#3029,.T.); #7020=EDGE_CURVE('',#5510,#5513,#3030,.T.); #7021=EDGE_CURVE('',#5514,#5512,#3031,.T.); #7022=EDGE_CURVE('',#5513,#5514,#3032,.T.); #7023=EDGE_CURVE('',#5513,#5515,#3033,.T.); #7024=EDGE_CURVE('',#5516,#5514,#3034,.T.); #7025=EDGE_CURVE('',#5515,#5516,#3035,.T.); #7026=EDGE_CURVE('',#5515,#5517,#3036,.T.); #7027=EDGE_CURVE('',#5518,#5516,#3037,.T.); #7028=EDGE_CURVE('',#5517,#5518,#3038,.T.); #7029=EDGE_CURVE('',#5517,#5519,#3039,.T.); #7030=EDGE_CURVE('',#5520,#5518,#3040,.T.); #7031=EDGE_CURVE('',#5519,#5520,#3041,.T.); #7032=EDGE_CURVE('',#5519,#5521,#3042,.T.); #7033=EDGE_CURVE('',#5522,#5520,#3043,.T.); #7034=EDGE_CURVE('',#5521,#5522,#3044,.T.); #7035=EDGE_CURVE('',#5521,#5523,#3045,.T.); #7036=EDGE_CURVE('',#5524,#5522,#3046,.T.); #7037=EDGE_CURVE('',#5523,#5524,#3047,.T.); #7038=EDGE_CURVE('',#5523,#5525,#3048,.T.); #7039=EDGE_CURVE('',#5526,#5524,#3049,.T.); #7040=EDGE_CURVE('',#5525,#5526,#3050,.T.); #7041=EDGE_CURVE('',#5525,#5527,#3051,.T.); #7042=EDGE_CURVE('',#5528,#5526,#3052,.T.); #7043=EDGE_CURVE('',#5527,#5528,#3053,.T.); #7044=EDGE_CURVE('',#5527,#5529,#3054,.T.); #7045=EDGE_CURVE('',#5530,#5528,#3055,.T.); #7046=EDGE_CURVE('',#5529,#5530,#3056,.T.); #7047=EDGE_CURVE('',#5529,#5531,#3057,.T.); #7048=EDGE_CURVE('',#5532,#5530,#3058,.T.); #7049=EDGE_CURVE('',#5531,#5532,#3059,.T.); #7050=EDGE_CURVE('',#5531,#5533,#3060,.T.); #7051=EDGE_CURVE('',#5534,#5532,#3061,.T.); #7052=EDGE_CURVE('',#5533,#5534,#3062,.T.); #7053=EDGE_CURVE('',#5533,#5509,#3063,.T.); #7054=EDGE_CURVE('',#5511,#5534,#3064,.T.); #7055=EDGE_CURVE('',#5535,#5536,#3065,.T.); #7056=EDGE_CURVE('',#5535,#5537,#3066,.T.); #7057=EDGE_CURVE('',#5538,#5537,#3067,.T.); #7058=EDGE_CURVE('',#5536,#5538,#3068,.T.); #7059=EDGE_CURVE('',#5536,#5539,#3069,.T.); #7060=EDGE_CURVE('',#5540,#5538,#3070,.T.); #7061=EDGE_CURVE('',#5539,#5540,#3071,.T.); #7062=EDGE_CURVE('',#5539,#5541,#454,.T.); #7063=EDGE_CURVE('',#5542,#5540,#455,.T.); #7064=EDGE_CURVE('',#5541,#5542,#3072,.T.); #7065=EDGE_CURVE('',#5541,#5543,#456,.T.); #7066=EDGE_CURVE('',#5544,#5542,#457,.T.); #7067=EDGE_CURVE('',#5543,#5544,#3073,.T.); #7068=EDGE_CURVE('',#5543,#5545,#458,.T.); #7069=EDGE_CURVE('',#5546,#5544,#459,.T.); #7070=EDGE_CURVE('',#5545,#5546,#3074,.T.); #7071=EDGE_CURVE('',#5545,#5547,#460,.T.); #7072=EDGE_CURVE('',#5548,#5546,#461,.T.); #7073=EDGE_CURVE('',#5547,#5548,#3075,.T.); #7074=EDGE_CURVE('',#5547,#5549,#462,.T.); #7075=EDGE_CURVE('',#5550,#5548,#463,.T.); #7076=EDGE_CURVE('',#5549,#5550,#3076,.T.); #7077=EDGE_CURVE('',#5549,#5551,#464,.T.); #7078=EDGE_CURVE('',#5552,#5550,#465,.T.); #7079=EDGE_CURVE('',#5551,#5552,#3077,.T.); #7080=EDGE_CURVE('',#5551,#5553,#466,.T.); #7081=EDGE_CURVE('',#5554,#5552,#467,.T.); #7082=EDGE_CURVE('',#5553,#5554,#3078,.T.); #7083=EDGE_CURVE('',#5553,#5555,#468,.T.); #7084=EDGE_CURVE('',#5556,#5554,#469,.T.); #7085=EDGE_CURVE('',#5555,#5556,#3079,.T.); #7086=EDGE_CURVE('',#5555,#5557,#3080,.T.); #7087=EDGE_CURVE('',#5558,#5556,#3081,.T.); #7088=EDGE_CURVE('',#5557,#5558,#3082,.T.); #7089=EDGE_CURVE('',#5557,#5559,#3083,.T.); #7090=EDGE_CURVE('',#5560,#5558,#3084,.T.); #7091=EDGE_CURVE('',#5559,#5560,#3085,.T.); #7092=EDGE_CURVE('',#5559,#5561,#470,.T.); #7093=EDGE_CURVE('',#5562,#5560,#471,.T.); #7094=EDGE_CURVE('',#5561,#5562,#3086,.T.); #7095=EDGE_CURVE('',#5561,#5563,#472,.T.); #7096=EDGE_CURVE('',#5564,#5562,#473,.T.); #7097=EDGE_CURVE('',#5563,#5564,#3087,.T.); #7098=EDGE_CURVE('',#5563,#5565,#474,.T.); #7099=EDGE_CURVE('',#5566,#5564,#475,.T.); #7100=EDGE_CURVE('',#5565,#5566,#3088,.T.); #7101=EDGE_CURVE('',#5565,#5567,#476,.T.); #7102=EDGE_CURVE('',#5568,#5566,#477,.T.); #7103=EDGE_CURVE('',#5567,#5568,#3089,.T.); #7104=EDGE_CURVE('',#5567,#5569,#478,.T.); #7105=EDGE_CURVE('',#5570,#5568,#479,.T.); #7106=EDGE_CURVE('',#5569,#5570,#3090,.T.); #7107=EDGE_CURVE('',#5569,#5571,#480,.T.); #7108=EDGE_CURVE('',#5572,#5570,#481,.T.); #7109=EDGE_CURVE('',#5571,#5572,#3091,.T.); #7110=EDGE_CURVE('',#5571,#5573,#482,.T.); #7111=EDGE_CURVE('',#5574,#5572,#483,.T.); #7112=EDGE_CURVE('',#5573,#5574,#3092,.T.); #7113=EDGE_CURVE('',#5573,#5535,#484,.T.); #7114=EDGE_CURVE('',#5537,#5574,#485,.T.); #7115=EDGE_CURVE('',#5575,#5576,#486,.T.); #7116=EDGE_CURVE('',#5575,#5577,#3093,.T.); #7117=EDGE_CURVE('',#5578,#5577,#487,.T.); #7118=EDGE_CURVE('',#5576,#5578,#3094,.T.); #7119=EDGE_CURVE('',#5579,#5575,#488,.T.); #7120=EDGE_CURVE('',#5579,#5580,#3095,.T.); #7121=EDGE_CURVE('',#5577,#5580,#489,.T.); #7122=EDGE_CURVE('',#5581,#5579,#3096,.T.); #7123=EDGE_CURVE('',#5581,#5582,#3097,.T.); #7124=EDGE_CURVE('',#5580,#5582,#3098,.T.); #7125=EDGE_CURVE('',#5583,#5581,#3099,.T.); #7126=EDGE_CURVE('',#5583,#5584,#3100,.T.); #7127=EDGE_CURVE('',#5582,#5584,#3101,.T.); #7128=EDGE_CURVE('',#5585,#5583,#3102,.T.); #7129=EDGE_CURVE('',#5585,#5586,#3103,.T.); #7130=EDGE_CURVE('',#5584,#5586,#3104,.T.); #7131=EDGE_CURVE('',#5587,#5585,#490,.T.); #7132=EDGE_CURVE('',#5587,#5588,#3105,.T.); #7133=EDGE_CURVE('',#5586,#5588,#491,.T.); #7134=EDGE_CURVE('',#5576,#5587,#492,.T.); #7135=EDGE_CURVE('',#5588,#5578,#493,.T.); #7136=EDGE_CURVE('',#5589,#5590,#3106,.T.); #7137=EDGE_CURVE('',#5589,#5591,#3107,.T.); #7138=EDGE_CURVE('',#5592,#5591,#3108,.T.); #7139=EDGE_CURVE('',#5590,#5592,#3109,.T.); #7140=EDGE_CURVE('',#5590,#5593,#3110,.T.); #7141=EDGE_CURVE('',#5594,#5592,#3111,.T.); #7142=EDGE_CURVE('',#5593,#5594,#3112,.T.); #7143=EDGE_CURVE('',#5593,#5595,#3113,.T.); #7144=EDGE_CURVE('',#5596,#5594,#3114,.T.); #7145=EDGE_CURVE('',#5595,#5596,#3115,.T.); #7146=EDGE_CURVE('',#5595,#5597,#3116,.T.); #7147=EDGE_CURVE('',#5598,#5596,#3117,.T.); #7148=EDGE_CURVE('',#5597,#5598,#3118,.T.); #7149=EDGE_CURVE('',#5597,#5599,#3119,.T.); #7150=EDGE_CURVE('',#5600,#5598,#3120,.T.); #7151=EDGE_CURVE('',#5599,#5600,#3121,.T.); #7152=EDGE_CURVE('',#5599,#5601,#3122,.T.); #7153=EDGE_CURVE('',#5602,#5600,#3123,.T.); #7154=EDGE_CURVE('',#5601,#5602,#3124,.T.); #7155=EDGE_CURVE('',#5601,#5603,#494,.T.); #7156=EDGE_CURVE('',#5604,#5602,#495,.T.); #7157=EDGE_CURVE('',#5603,#5604,#3125,.T.); #7158=EDGE_CURVE('',#5603,#5605,#496,.T.); #7159=EDGE_CURVE('',#5606,#5604,#497,.T.); #7160=EDGE_CURVE('',#5605,#5606,#3126,.T.); #7161=EDGE_CURVE('',#5605,#5607,#498,.T.); #7162=EDGE_CURVE('',#5608,#5606,#499,.T.); #7163=EDGE_CURVE('',#5607,#5608,#3127,.T.); #7164=EDGE_CURVE('',#5607,#5609,#3128,.T.); #7165=EDGE_CURVE('',#5610,#5608,#3129,.T.); #7166=EDGE_CURVE('',#5609,#5610,#3130,.T.); #7167=EDGE_CURVE('',#5609,#5589,#3131,.T.); #7168=EDGE_CURVE('',#5591,#5610,#3132,.T.); #7169=EDGE_CURVE('',#5611,#5612,#3133,.T.); #7170=EDGE_CURVE('',#5611,#5613,#3134,.T.); #7171=EDGE_CURVE('',#5614,#5613,#3135,.T.); #7172=EDGE_CURVE('',#5612,#5614,#3136,.T.); #7173=EDGE_CURVE('',#5612,#5615,#3137,.T.); #7174=EDGE_CURVE('',#5616,#5614,#3138,.T.); #7175=EDGE_CURVE('',#5615,#5616,#3139,.T.); #7176=EDGE_CURVE('',#5615,#5617,#3140,.T.); #7177=EDGE_CURVE('',#5618,#5616,#3141,.T.); #7178=EDGE_CURVE('',#5617,#5618,#3142,.T.); #7179=EDGE_CURVE('',#5617,#5619,#3143,.T.); #7180=EDGE_CURVE('',#5620,#5618,#3144,.T.); #7181=EDGE_CURVE('',#5619,#5620,#3145,.T.); #7182=EDGE_CURVE('',#5619,#5621,#3146,.T.); #7183=EDGE_CURVE('',#5622,#5620,#3147,.T.); #7184=EDGE_CURVE('',#5621,#5622,#3148,.T.); #7185=EDGE_CURVE('',#5621,#5623,#3149,.T.); #7186=EDGE_CURVE('',#5624,#5622,#3150,.T.); #7187=EDGE_CURVE('',#5623,#5624,#3151,.T.); #7188=EDGE_CURVE('',#5623,#5625,#3152,.T.); #7189=EDGE_CURVE('',#5626,#5624,#3153,.T.); #7190=EDGE_CURVE('',#5625,#5626,#3154,.T.); #7191=EDGE_CURVE('',#5625,#5627,#3155,.T.); #7192=EDGE_CURVE('',#5628,#5626,#3156,.T.); #7193=EDGE_CURVE('',#5627,#5628,#3157,.T.); #7194=EDGE_CURVE('',#5627,#5629,#3158,.T.); #7195=EDGE_CURVE('',#5630,#5628,#3159,.T.); #7196=EDGE_CURVE('',#5629,#5630,#3160,.T.); #7197=EDGE_CURVE('',#5629,#5631,#3161,.T.); #7198=EDGE_CURVE('',#5632,#5630,#3162,.T.); #7199=EDGE_CURVE('',#5631,#5632,#3163,.T.); #7200=EDGE_CURVE('',#5631,#5633,#3164,.T.); #7201=EDGE_CURVE('',#5634,#5632,#3165,.T.); #7202=EDGE_CURVE('',#5633,#5634,#3166,.T.); #7203=EDGE_CURVE('',#5633,#5611,#3167,.T.); #7204=EDGE_CURVE('',#5613,#5634,#3168,.T.); #7205=EDGE_CURVE('',#5635,#5636,#500,.T.); #7206=EDGE_CURVE('',#5635,#5637,#3169,.T.); #7207=EDGE_CURVE('',#5638,#5637,#501,.T.); #7208=EDGE_CURVE('',#5636,#5638,#3170,.T.); #7209=EDGE_CURVE('',#5636,#5639,#3171,.T.); #7210=EDGE_CURVE('',#5640,#5638,#3172,.T.); #7211=EDGE_CURVE('',#5639,#5640,#3173,.T.); #7212=EDGE_CURVE('',#5639,#5641,#3174,.T.); #7213=EDGE_CURVE('',#5642,#5640,#3175,.T.); #7214=EDGE_CURVE('',#5641,#5642,#3176,.T.); #7215=EDGE_CURVE('',#5641,#5643,#502,.T.); #7216=EDGE_CURVE('',#5644,#5642,#503,.T.); #7217=EDGE_CURVE('',#5643,#5644,#3177,.T.); #7218=EDGE_CURVE('',#5643,#5645,#504,.T.); #7219=EDGE_CURVE('',#5646,#5644,#505,.T.); #7220=EDGE_CURVE('',#5645,#5646,#3178,.T.); #7221=EDGE_CURVE('',#5645,#5647,#506,.T.); #7222=EDGE_CURVE('',#5648,#5646,#507,.T.); #7223=EDGE_CURVE('',#5647,#5648,#3179,.T.); #7224=EDGE_CURVE('',#5647,#5649,#508,.T.); #7225=EDGE_CURVE('',#5650,#5648,#509,.T.); #7226=EDGE_CURVE('',#5649,#5650,#3180,.T.); #7227=EDGE_CURVE('',#5649,#5651,#3181,.T.); #7228=EDGE_CURVE('',#5652,#5650,#3182,.T.); #7229=EDGE_CURVE('',#5651,#5652,#3183,.T.); #7230=EDGE_CURVE('',#5651,#5653,#510,.T.); #7231=EDGE_CURVE('',#5654,#5652,#511,.T.); #7232=EDGE_CURVE('',#5653,#5654,#3184,.T.); #7233=EDGE_CURVE('',#5653,#5655,#512,.T.); #7234=EDGE_CURVE('',#5656,#5654,#513,.T.); #7235=EDGE_CURVE('',#5655,#5656,#3185,.T.); #7236=EDGE_CURVE('',#5655,#5657,#514,.T.); #7237=EDGE_CURVE('',#5658,#5656,#515,.T.); #7238=EDGE_CURVE('',#5657,#5658,#3186,.T.); #7239=EDGE_CURVE('',#5657,#5659,#516,.T.); #7240=EDGE_CURVE('',#5660,#5658,#517,.T.); #7241=EDGE_CURVE('',#5659,#5660,#3187,.T.); #7242=EDGE_CURVE('',#5659,#5661,#518,.T.); #7243=EDGE_CURVE('',#5662,#5660,#519,.T.); #7244=EDGE_CURVE('',#5661,#5662,#3188,.T.); #7245=EDGE_CURVE('',#5661,#5663,#3189,.T.); #7246=EDGE_CURVE('',#5664,#5662,#3190,.T.); #7247=EDGE_CURVE('',#5663,#5664,#3191,.T.); #7248=EDGE_CURVE('',#5663,#5665,#3192,.T.); #7249=EDGE_CURVE('',#5666,#5664,#3193,.T.); #7250=EDGE_CURVE('',#5665,#5666,#3194,.T.); #7251=EDGE_CURVE('',#5665,#5667,#520,.T.); #7252=EDGE_CURVE('',#5668,#5666,#521,.T.); #7253=EDGE_CURVE('',#5667,#5668,#3195,.T.); #7254=EDGE_CURVE('',#5667,#5669,#522,.T.); #7255=EDGE_CURVE('',#5670,#5668,#523,.T.); #7256=EDGE_CURVE('',#5669,#5670,#3196,.T.); #7257=EDGE_CURVE('',#5669,#5671,#524,.T.); #7258=EDGE_CURVE('',#5672,#5670,#525,.T.); #7259=EDGE_CURVE('',#5671,#5672,#3197,.T.); #7260=EDGE_CURVE('',#5671,#5673,#526,.T.); #7261=EDGE_CURVE('',#5674,#5672,#527,.T.); #7262=EDGE_CURVE('',#5673,#5674,#3198,.T.); #7263=EDGE_CURVE('',#5673,#5675,#528,.T.); #7264=EDGE_CURVE('',#5676,#5674,#529,.T.); #7265=EDGE_CURVE('',#5675,#5676,#3199,.T.); #7266=EDGE_CURVE('',#5675,#5677,#3200,.T.); #7267=EDGE_CURVE('',#5678,#5676,#3201,.T.); #7268=EDGE_CURVE('',#5677,#5678,#3202,.T.); #7269=EDGE_CURVE('',#5677,#5679,#3203,.T.); #7270=EDGE_CURVE('',#5680,#5678,#3204,.T.); #7271=EDGE_CURVE('',#5679,#5680,#3205,.T.); #7272=EDGE_CURVE('',#5679,#5681,#3206,.T.); #7273=EDGE_CURVE('',#5682,#5680,#3207,.T.); #7274=EDGE_CURVE('',#5681,#5682,#3208,.T.); #7275=EDGE_CURVE('',#5681,#5683,#530,.T.); #7276=EDGE_CURVE('',#5684,#5682,#531,.T.); #7277=EDGE_CURVE('',#5683,#5684,#3209,.T.); #7278=EDGE_CURVE('',#5683,#5685,#532,.T.); #7279=EDGE_CURVE('',#5686,#5684,#533,.T.); #7280=EDGE_CURVE('',#5685,#5686,#3210,.T.); #7281=EDGE_CURVE('',#5685,#5687,#534,.T.); #7282=EDGE_CURVE('',#5688,#5686,#535,.T.); #7283=EDGE_CURVE('',#5687,#5688,#3211,.T.); #7284=EDGE_CURVE('',#5687,#5635,#536,.T.); #7285=EDGE_CURVE('',#5637,#5688,#537,.T.); #7286=EDGE_CURVE('',#5689,#5690,#538,.T.); #7287=EDGE_CURVE('',#5689,#5691,#3212,.T.); #7288=EDGE_CURVE('',#5692,#5691,#539,.T.); #7289=EDGE_CURVE('',#5690,#5692,#3213,.T.); #7290=EDGE_CURVE('',#5693,#5689,#540,.T.); #7291=EDGE_CURVE('',#5693,#5694,#3214,.T.); #7292=EDGE_CURVE('',#5691,#5694,#541,.T.); #7293=EDGE_CURVE('',#5695,#5693,#542,.T.); #7294=EDGE_CURVE('',#5695,#5696,#3215,.T.); #7295=EDGE_CURVE('',#5694,#5696,#543,.T.); #7296=EDGE_CURVE('',#5697,#5695,#544,.T.); #7297=EDGE_CURVE('',#5697,#5698,#3216,.T.); #7298=EDGE_CURVE('',#5696,#5698,#545,.T.); #7299=EDGE_CURVE('',#5699,#5697,#546,.T.); #7300=EDGE_CURVE('',#5699,#5700,#3217,.T.); #7301=EDGE_CURVE('',#5698,#5700,#547,.T.); #7302=EDGE_CURVE('',#5701,#5699,#548,.T.); #7303=EDGE_CURVE('',#5701,#5702,#3218,.T.); #7304=EDGE_CURVE('',#5700,#5702,#549,.T.); #7305=EDGE_CURVE('',#5703,#5701,#550,.T.); #7306=EDGE_CURVE('',#5703,#5704,#3219,.T.); #7307=EDGE_CURVE('',#5702,#5704,#551,.T.); #7308=EDGE_CURVE('',#5690,#5703,#552,.T.); #7309=EDGE_CURVE('',#5704,#5692,#553,.T.); #7310=EDGE_CURVE('',#5705,#5706,#554,.T.); #7311=EDGE_CURVE('',#5705,#5707,#3220,.T.); #7312=EDGE_CURVE('',#5708,#5707,#555,.T.); #7313=EDGE_CURVE('',#5706,#5708,#3221,.T.); #7314=EDGE_CURVE('',#5706,#5709,#556,.T.); #7315=EDGE_CURVE('',#5710,#5708,#557,.T.); #7316=EDGE_CURVE('',#5709,#5710,#3222,.T.); #7317=EDGE_CURVE('',#5709,#5711,#558,.T.); #7318=EDGE_CURVE('',#5712,#5710,#559,.T.); #7319=EDGE_CURVE('',#5711,#5712,#3223,.T.); #7320=EDGE_CURVE('',#5711,#5705,#560,.T.); #7321=EDGE_CURVE('',#5707,#5712,#561,.T.); #7322=EDGE_CURVE('',#5713,#5714,#562,.T.); #7323=EDGE_CURVE('',#5713,#5715,#3224,.T.); #7324=EDGE_CURVE('',#5716,#5715,#563,.T.); #7325=EDGE_CURVE('',#5714,#5716,#3225,.T.); #7326=EDGE_CURVE('',#5717,#5713,#564,.T.); #7327=EDGE_CURVE('',#5717,#5718,#3226,.T.); #7328=EDGE_CURVE('',#5715,#5718,#565,.T.); #7329=EDGE_CURVE('',#5719,#5717,#566,.T.); #7330=EDGE_CURVE('',#5719,#5720,#3227,.T.); #7331=EDGE_CURVE('',#5718,#5720,#567,.T.); #7332=EDGE_CURVE('',#5721,#5719,#568,.T.); #7333=EDGE_CURVE('',#5721,#5722,#3228,.T.); #7334=EDGE_CURVE('',#5720,#5722,#569,.T.); #7335=EDGE_CURVE('',#5723,#5721,#570,.T.); #7336=EDGE_CURVE('',#5723,#5724,#3229,.T.); #7337=EDGE_CURVE('',#5722,#5724,#571,.T.); #7338=EDGE_CURVE('',#5725,#5723,#572,.T.); #7339=EDGE_CURVE('',#5725,#5726,#3230,.T.); #7340=EDGE_CURVE('',#5724,#5726,#573,.T.); #7341=EDGE_CURVE('',#5727,#5725,#574,.T.); #7342=EDGE_CURVE('',#5727,#5728,#3231,.T.); #7343=EDGE_CURVE('',#5726,#5728,#575,.T.); #7344=EDGE_CURVE('',#5714,#5727,#576,.T.); #7345=EDGE_CURVE('',#5728,#5716,#577,.T.); #7346=EDGE_CURVE('',#5729,#5730,#578,.T.); #7347=EDGE_CURVE('',#5729,#5731,#3232,.T.); #7348=EDGE_CURVE('',#5732,#5731,#579,.T.); #7349=EDGE_CURVE('',#5730,#5732,#3233,.T.); #7350=EDGE_CURVE('',#5730,#5733,#580,.T.); #7351=EDGE_CURVE('',#5734,#5732,#581,.T.); #7352=EDGE_CURVE('',#5733,#5734,#3234,.T.); #7353=EDGE_CURVE('',#5733,#5735,#582,.T.); #7354=EDGE_CURVE('',#5736,#5734,#583,.T.); #7355=EDGE_CURVE('',#5735,#5736,#3235,.T.); #7356=EDGE_CURVE('',#5735,#5729,#584,.T.); #7357=EDGE_CURVE('',#5731,#5736,#585,.T.); #7358=EDGE_CURVE('',#5737,#5738,#3236,.T.); #7359=EDGE_CURVE('',#5737,#5739,#3237,.T.); #7360=EDGE_CURVE('',#5740,#5739,#3238,.T.); #7361=EDGE_CURVE('',#5738,#5740,#3239,.T.); #7362=EDGE_CURVE('',#5738,#5741,#3240,.T.); #7363=EDGE_CURVE('',#5742,#5740,#3241,.T.); #7364=EDGE_CURVE('',#5741,#5742,#3242,.T.); #7365=EDGE_CURVE('',#5741,#5743,#3243,.T.); #7366=EDGE_CURVE('',#5744,#5742,#3244,.T.); #7367=EDGE_CURVE('',#5743,#5744,#3245,.T.); #7368=EDGE_CURVE('',#5743,#5745,#3246,.T.); #7369=EDGE_CURVE('',#5746,#5744,#3247,.T.); #7370=EDGE_CURVE('',#5745,#5746,#3248,.T.); #7371=EDGE_CURVE('',#5745,#5747,#3249,.T.); #7372=EDGE_CURVE('',#5748,#5746,#3250,.T.); #7373=EDGE_CURVE('',#5747,#5748,#3251,.T.); #7374=EDGE_CURVE('',#5747,#5749,#3252,.T.); #7375=EDGE_CURVE('',#5750,#5748,#3253,.T.); #7376=EDGE_CURVE('',#5749,#5750,#3254,.T.); #7377=EDGE_CURVE('',#5749,#5751,#3255,.T.); #7378=EDGE_CURVE('',#5752,#5750,#3256,.T.); #7379=EDGE_CURVE('',#5751,#5752,#3257,.T.); #7380=EDGE_CURVE('',#5751,#5753,#3258,.T.); #7381=EDGE_CURVE('',#5754,#5752,#3259,.T.); #7382=EDGE_CURVE('',#5753,#5754,#3260,.T.); #7383=EDGE_CURVE('',#5753,#5755,#3261,.T.); #7384=EDGE_CURVE('',#5756,#5754,#3262,.T.); #7385=EDGE_CURVE('',#5755,#5756,#3263,.T.); #7386=EDGE_CURVE('',#5755,#5737,#3264,.T.); #7387=EDGE_CURVE('',#5739,#5756,#3265,.T.); #7388=EDGE_CURVE('',#5757,#5758,#949,.T.); #7389=EDGE_CURVE('',#5758,#5759,#3266,.T.); #7390=EDGE_CURVE('',#5759,#5760,#950,.T.); #7391=EDGE_CURVE('',#5760,#5757,#3267,.T.); #7392=EDGE_CURVE('',#5761,#5759,#3268,.T.); #7393=EDGE_CURVE('',#5762,#5761,#3269,.T.); #7394=EDGE_CURVE('',#5763,#5762,#3270,.T.); #7395=EDGE_CURVE('',#5764,#5763,#3271,.T.); #7396=EDGE_CURVE('',#5765,#5764,#3272,.T.); #7397=EDGE_CURVE('',#5765,#5766,#951,.F.); #7398=EDGE_CURVE('',#5760,#5766,#3273,.T.); #7399=EDGE_CURVE('',#5767,#5758,#3274,.T.); #7400=EDGE_CURVE('',#5761,#5767,#3275,.T.); #7401=EDGE_CURVE('',#5765,#5768,#3276,.T.); #7402=EDGE_CURVE('',#5768,#5769,#952,.T.); #7403=EDGE_CURVE('',#5769,#5766,#3277,.T.); #7404=EDGE_CURVE('',#5757,#5769,#3278,.T.); #7405=EDGE_CURVE('',#5763,#5770,#3279,.T.); #7406=EDGE_CURVE('',#5771,#5770,#3280,.T.); #7407=EDGE_CURVE('',#5764,#5771,#3281,.T.); #7408=EDGE_CURVE('',#5768,#5771,#3282,.T.); #7409=EDGE_CURVE('',#5772,#5767,#3283,.T.); #7410=EDGE_CURVE('',#5762,#5772,#3284,.T.); #7411=EDGE_CURVE('',#5770,#5772,#3285,.T.); #7412=EDGE_CURVE('',#5773,#5773,#953,.T.); #7413=EDGE_CURVE('',#5774,#5774,#954,.T.); #7414=EDGE_CURVE('',#5775,#5776,#3286,.T.); #7415=EDGE_CURVE('',#5776,#5777,#3287,.T.); #7416=EDGE_CURVE('',#5778,#5777,#3288,.T.); #7417=EDGE_CURVE('',#5775,#5778,#3289,.T.); #7418=EDGE_CURVE('',#5779,#5775,#3290,.T.); #7419=EDGE_CURVE('',#5780,#5778,#3291,.T.); #7420=EDGE_CURVE('',#5779,#5780,#3292,.T.); #7421=EDGE_CURVE('',#5781,#5779,#3293,.T.); #7422=EDGE_CURVE('',#5782,#5780,#3294,.T.); #7423=EDGE_CURVE('',#5781,#5782,#3295,.T.); #7424=EDGE_CURVE('',#5776,#5781,#3296,.T.); #7425=EDGE_CURVE('',#5777,#5782,#3297,.T.); #7426=EDGE_CURVE('',#5783,#5784,#955,.T.); #7427=EDGE_CURVE('',#5784,#5785,#3298,.T.); #7428=EDGE_CURVE('',#5785,#5786,#956,.T.); #7429=EDGE_CURVE('',#5786,#5783,#3299,.T.); #7430=EDGE_CURVE('',#5784,#5787,#3300,.T.); #7431=EDGE_CURVE('',#5787,#5788,#3301,.T.); #7432=EDGE_CURVE('',#5785,#5788,#3302,.T.); #7433=EDGE_CURVE('',#5789,#5790,#957,.T.); #7434=EDGE_CURVE('',#5790,#5791,#3303,.T.); #7435=EDGE_CURVE('',#5791,#5792,#958,.T.); #7436=EDGE_CURVE('',#5792,#5789,#3304,.T.); #7437=EDGE_CURVE('',#5791,#5786,#3305,.T.); #7438=EDGE_CURVE('',#5790,#5783,#3306,.T.); #7439=EDGE_CURVE('',#5793,#5794,#959,.T.); #7440=EDGE_CURVE('',#5794,#5795,#3307,.T.); #7441=EDGE_CURVE('',#5795,#5796,#960,.T.); #7442=EDGE_CURVE('',#5796,#5793,#3308,.T.); #7443=EDGE_CURVE('',#5793,#5792,#3309,.T.); #7444=EDGE_CURVE('',#5788,#5797,#3310,.T.); #7445=EDGE_CURVE('',#5797,#5798,#3311,.T.); #7446=EDGE_CURVE('',#5798,#5794,#3312,.T.); #7447=EDGE_CURVE('',#5796,#5789,#3313,.T.); #7448=EDGE_CURVE('',#5799,#5798,#3314,.T.); #7449=EDGE_CURVE('',#5799,#5795,#3315,.T.); #7450=EDGE_CURVE('',#5800,#5799,#3316,.T.); #7451=EDGE_CURVE('',#5800,#5797,#3317,.T.); #7452=EDGE_CURVE('',#5787,#5800,#3318,.T.); #7453=EDGE_CURVE('',#5801,#5802,#3319,.T.); #7454=EDGE_CURVE('',#5801,#5803,#3320,.T.); #7455=EDGE_CURVE('',#5804,#5803,#3321,.T.); #7456=EDGE_CURVE('',#5802,#5804,#3322,.T.); #7457=EDGE_CURVE('',#5802,#5805,#3323,.T.); #7458=EDGE_CURVE('',#5806,#5804,#3324,.T.); #7459=EDGE_CURVE('',#5805,#5806,#3325,.T.); #7460=EDGE_CURVE('',#5805,#5807,#3326,.T.); #7461=EDGE_CURVE('',#5808,#5806,#3327,.T.); #7462=EDGE_CURVE('',#5807,#5808,#3328,.T.); #7463=EDGE_CURVE('',#5807,#5809,#3329,.T.); #7464=EDGE_CURVE('',#5810,#5808,#3330,.T.); #7465=EDGE_CURVE('',#5809,#5810,#3331,.T.); #7466=EDGE_CURVE('',#5809,#5811,#3332,.T.); #7467=EDGE_CURVE('',#5812,#5810,#3333,.T.); #7468=EDGE_CURVE('',#5811,#5812,#3334,.T.); #7469=EDGE_CURVE('',#5811,#5813,#3335,.T.); #7470=EDGE_CURVE('',#5814,#5812,#3336,.T.); #7471=EDGE_CURVE('',#5813,#5814,#3337,.T.); #7472=EDGE_CURVE('',#5813,#5801,#3338,.T.); #7473=EDGE_CURVE('',#5803,#5814,#3339,.T.); #7474=EDGE_CURVE('',#5815,#5816,#3340,.T.); #7475=EDGE_CURVE('',#5815,#5817,#3341,.T.); #7476=EDGE_CURVE('',#5818,#5817,#3342,.T.); #7477=EDGE_CURVE('',#5816,#5818,#3343,.T.); #7478=EDGE_CURVE('',#5816,#5819,#3344,.T.); #7479=EDGE_CURVE('',#5820,#5818,#3345,.T.); #7480=EDGE_CURVE('',#5819,#5820,#3346,.T.); #7481=EDGE_CURVE('',#5819,#5821,#3347,.T.); #7482=EDGE_CURVE('',#5822,#5820,#3348,.T.); #7483=EDGE_CURVE('',#5821,#5822,#3349,.T.); #7484=EDGE_CURVE('',#5821,#5823,#3350,.T.); #7485=EDGE_CURVE('',#5824,#5822,#3351,.T.); #7486=EDGE_CURVE('',#5823,#5824,#3352,.T.); #7487=EDGE_CURVE('',#5823,#5825,#3353,.T.); #7488=EDGE_CURVE('',#5826,#5824,#3354,.T.); #7489=EDGE_CURVE('',#5825,#5826,#3355,.T.); #7490=EDGE_CURVE('',#5825,#5827,#3356,.T.); #7491=EDGE_CURVE('',#5828,#5826,#3357,.T.); #7492=EDGE_CURVE('',#5827,#5828,#3358,.T.); #7493=EDGE_CURVE('',#5827,#5815,#3359,.T.); #7494=EDGE_CURVE('',#5817,#5828,#3360,.T.); #7495=EDGE_CURVE('',#5829,#5830,#3361,.T.); #7496=EDGE_CURVE('',#5829,#5831,#3362,.T.); #7497=EDGE_CURVE('',#5832,#5831,#3363,.T.); #7498=EDGE_CURVE('',#5830,#5832,#3364,.T.); #7499=EDGE_CURVE('',#5833,#5829,#3365,.T.); #7500=EDGE_CURVE('',#5833,#5834,#3366,.T.); #7501=EDGE_CURVE('',#5831,#5834,#3367,.T.); #7502=EDGE_CURVE('',#5830,#5833,#3368,.T.); #7503=EDGE_CURVE('',#5834,#5832,#3369,.T.); #7504=EDGE_CURVE('',#5835,#5836,#3370,.T.); #7505=EDGE_CURVE('',#5835,#5837,#3371,.T.); #7506=EDGE_CURVE('',#5838,#5837,#3372,.T.); #7507=EDGE_CURVE('',#5836,#5838,#3373,.T.); #7508=EDGE_CURVE('',#5836,#5839,#3374,.T.); #7509=EDGE_CURVE('',#5840,#5838,#3375,.T.); #7510=EDGE_CURVE('',#5839,#5840,#3376,.T.); #7511=EDGE_CURVE('',#5839,#5841,#3377,.T.); #7512=EDGE_CURVE('',#5842,#5840,#3378,.T.); #7513=EDGE_CURVE('',#5841,#5842,#3379,.T.); #7514=EDGE_CURVE('',#5841,#5843,#3380,.T.); #7515=EDGE_CURVE('',#5844,#5842,#3381,.T.); #7516=EDGE_CURVE('',#5843,#5844,#3382,.T.); #7517=EDGE_CURVE('',#5843,#5845,#3383,.T.); #7518=EDGE_CURVE('',#5846,#5844,#3384,.T.); #7519=EDGE_CURVE('',#5845,#5846,#3385,.T.); #7520=EDGE_CURVE('',#5845,#5847,#3386,.T.); #7521=EDGE_CURVE('',#5848,#5846,#3387,.T.); #7522=EDGE_CURVE('',#5847,#5848,#3388,.T.); #7523=EDGE_CURVE('',#5847,#5849,#3389,.T.); #7524=EDGE_CURVE('',#5850,#5848,#3390,.T.); #7525=EDGE_CURVE('',#5849,#5850,#3391,.T.); #7526=EDGE_CURVE('',#5849,#5835,#3392,.T.); #7527=EDGE_CURVE('',#5837,#5850,#3393,.T.); #7528=EDGE_CURVE('',#5851,#5852,#3394,.T.); #7529=EDGE_CURVE('',#5851,#5853,#3395,.T.); #7530=EDGE_CURVE('',#5854,#5853,#3396,.T.); #7531=EDGE_CURVE('',#5852,#5854,#3397,.T.); #7532=EDGE_CURVE('',#5852,#5855,#3398,.T.); #7533=EDGE_CURVE('',#5856,#5854,#3399,.T.); #7534=EDGE_CURVE('',#5855,#5856,#3400,.T.); #7535=EDGE_CURVE('',#5855,#5857,#3401,.T.); #7536=EDGE_CURVE('',#5858,#5856,#3402,.T.); #7537=EDGE_CURVE('',#5857,#5858,#3403,.T.); #7538=EDGE_CURVE('',#5857,#5859,#3404,.T.); #7539=EDGE_CURVE('',#5860,#5858,#3405,.T.); #7540=EDGE_CURVE('',#5859,#5860,#3406,.T.); #7541=EDGE_CURVE('',#5859,#5861,#3407,.T.); #7542=EDGE_CURVE('',#5862,#5860,#3408,.T.); #7543=EDGE_CURVE('',#5861,#5862,#3409,.T.); #7544=EDGE_CURVE('',#5861,#5851,#3410,.T.); #7545=EDGE_CURVE('',#5853,#5862,#3411,.T.); #7546=EDGE_CURVE('',#5863,#5864,#3412,.T.); #7547=EDGE_CURVE('',#5863,#5865,#3413,.T.); #7548=EDGE_CURVE('',#5866,#5865,#3414,.T.); #7549=EDGE_CURVE('',#5864,#5866,#3415,.T.); #7550=EDGE_CURVE('',#5864,#5867,#3416,.T.); #7551=EDGE_CURVE('',#5868,#5866,#3417,.T.); #7552=EDGE_CURVE('',#5867,#5868,#3418,.T.); #7553=EDGE_CURVE('',#5867,#5869,#3419,.T.); #7554=EDGE_CURVE('',#5870,#5868,#3420,.T.); #7555=EDGE_CURVE('',#5869,#5870,#3421,.T.); #7556=EDGE_CURVE('',#5869,#5871,#3422,.T.); #7557=EDGE_CURVE('',#5872,#5870,#3423,.T.); #7558=EDGE_CURVE('',#5871,#5872,#3424,.T.); #7559=EDGE_CURVE('',#5871,#5873,#3425,.T.); #7560=EDGE_CURVE('',#5874,#5872,#3426,.T.); #7561=EDGE_CURVE('',#5873,#5874,#3427,.T.); #7562=EDGE_CURVE('',#5873,#5875,#3428,.T.); #7563=EDGE_CURVE('',#5876,#5874,#3429,.T.); #7564=EDGE_CURVE('',#5875,#5876,#3430,.T.); #7565=EDGE_CURVE('',#5875,#5877,#3431,.T.); #7566=EDGE_CURVE('',#5878,#5876,#3432,.T.); #7567=EDGE_CURVE('',#5877,#5878,#3433,.T.); #7568=EDGE_CURVE('',#5877,#5863,#3434,.T.); #7569=EDGE_CURVE('',#5865,#5878,#3435,.T.); #7570=EDGE_CURVE('',#5879,#5880,#3436,.T.); #7571=EDGE_CURVE('',#5879,#5881,#3437,.T.); #7572=EDGE_CURVE('',#5882,#5881,#3438,.T.); #7573=EDGE_CURVE('',#5880,#5882,#3439,.T.); #7574=EDGE_CURVE('',#5880,#5883,#3440,.T.); #7575=EDGE_CURVE('',#5884,#5882,#3441,.T.); #7576=EDGE_CURVE('',#5883,#5884,#3442,.T.); #7577=EDGE_CURVE('',#5883,#5885,#3443,.T.); #7578=EDGE_CURVE('',#5886,#5884,#3444,.T.); #7579=EDGE_CURVE('',#5885,#5886,#3445,.T.); #7580=EDGE_CURVE('',#5885,#5887,#3446,.T.); #7581=EDGE_CURVE('',#5888,#5886,#3447,.T.); #7582=EDGE_CURVE('',#5887,#5888,#3448,.T.); #7583=EDGE_CURVE('',#5887,#5889,#3449,.T.); #7584=EDGE_CURVE('',#5890,#5888,#3450,.T.); #7585=EDGE_CURVE('',#5889,#5890,#3451,.T.); #7586=EDGE_CURVE('',#5889,#5891,#3452,.T.); #7587=EDGE_CURVE('',#5892,#5890,#3453,.T.); #7588=EDGE_CURVE('',#5891,#5892,#3454,.T.); #7589=EDGE_CURVE('',#5891,#5893,#3455,.T.); #7590=EDGE_CURVE('',#5894,#5892,#3456,.T.); #7591=EDGE_CURVE('',#5893,#5894,#3457,.T.); #7592=EDGE_CURVE('',#5893,#5879,#3458,.T.); #7593=EDGE_CURVE('',#5881,#5894,#3459,.T.); #7594=EDGE_CURVE('',#5895,#5896,#3460,.T.); #7595=EDGE_CURVE('',#5895,#5897,#3461,.T.); #7596=EDGE_CURVE('',#5898,#5897,#3462,.T.); #7597=EDGE_CURVE('',#5896,#5898,#3463,.T.); #7598=EDGE_CURVE('',#5896,#5899,#3464,.T.); #7599=EDGE_CURVE('',#5900,#5898,#3465,.T.); #7600=EDGE_CURVE('',#5899,#5900,#3466,.T.); #7601=EDGE_CURVE('',#5899,#5901,#3467,.T.); #7602=EDGE_CURVE('',#5902,#5900,#3468,.T.); #7603=EDGE_CURVE('',#5901,#5902,#3469,.T.); #7604=EDGE_CURVE('',#5901,#5895,#3470,.T.); #7605=EDGE_CURVE('',#5897,#5902,#3471,.T.); #7606=EDGE_CURVE('',#5903,#5904,#586,.T.); #7607=EDGE_CURVE('',#5903,#5905,#3472,.T.); #7608=EDGE_CURVE('',#5906,#5905,#587,.T.); #7609=EDGE_CURVE('',#5904,#5906,#3473,.T.); #7610=EDGE_CURVE('',#5904,#5907,#588,.T.); #7611=EDGE_CURVE('',#5908,#5906,#589,.T.); #7612=EDGE_CURVE('',#5907,#5908,#3474,.T.); #7613=EDGE_CURVE('',#5907,#5909,#590,.T.); #7614=EDGE_CURVE('',#5910,#5908,#591,.T.); #7615=EDGE_CURVE('',#5909,#5910,#3475,.T.); #7616=EDGE_CURVE('',#5909,#5911,#592,.T.); #7617=EDGE_CURVE('',#5912,#5910,#593,.T.); #7618=EDGE_CURVE('',#5911,#5912,#3476,.T.); #7619=EDGE_CURVE('',#5911,#5913,#3477,.T.); #7620=EDGE_CURVE('',#5914,#5912,#3478,.T.); #7621=EDGE_CURVE('',#5913,#5914,#3479,.T.); #7622=EDGE_CURVE('',#5913,#5915,#3480,.T.); #7623=EDGE_CURVE('',#5916,#5914,#3481,.T.); #7624=EDGE_CURVE('',#5915,#5916,#3482,.T.); #7625=EDGE_CURVE('',#5915,#5917,#594,.T.); #7626=EDGE_CURVE('',#5918,#5916,#595,.T.); #7627=EDGE_CURVE('',#5917,#5918,#3483,.T.); #7628=EDGE_CURVE('',#5917,#5919,#596,.T.); #7629=EDGE_CURVE('',#5920,#5918,#597,.T.); #7630=EDGE_CURVE('',#5919,#5920,#3484,.T.); #7631=EDGE_CURVE('',#5919,#5921,#598,.T.); #7632=EDGE_CURVE('',#5922,#5920,#599,.T.); #7633=EDGE_CURVE('',#5921,#5922,#3485,.T.); #7634=EDGE_CURVE('',#5921,#5923,#600,.T.); #7635=EDGE_CURVE('',#5924,#5922,#601,.T.); #7636=EDGE_CURVE('',#5923,#5924,#3486,.T.); #7637=EDGE_CURVE('',#5923,#5925,#602,.T.); #7638=EDGE_CURVE('',#5926,#5924,#603,.T.); #7639=EDGE_CURVE('',#5925,#5926,#3487,.T.); #7640=EDGE_CURVE('',#5925,#5927,#3488,.T.); #7641=EDGE_CURVE('',#5928,#5926,#3489,.T.); #7642=EDGE_CURVE('',#5927,#5928,#3490,.T.); #7643=EDGE_CURVE('',#5927,#5929,#3491,.T.); #7644=EDGE_CURVE('',#5930,#5928,#3492,.T.); #7645=EDGE_CURVE('',#5929,#5930,#3493,.T.); #7646=EDGE_CURVE('',#5929,#5931,#604,.T.); #7647=EDGE_CURVE('',#5932,#5930,#605,.T.); #7648=EDGE_CURVE('',#5931,#5932,#3494,.T.); #7649=EDGE_CURVE('',#5931,#5933,#606,.T.); #7650=EDGE_CURVE('',#5934,#5932,#607,.T.); #7651=EDGE_CURVE('',#5933,#5934,#3495,.T.); #7652=EDGE_CURVE('',#5933,#5903,#608,.T.); #7653=EDGE_CURVE('',#5905,#5934,#609,.T.); #7654=EDGE_CURVE('',#5935,#5936,#610,.T.); #7655=EDGE_CURVE('',#5935,#5937,#3496,.T.); #7656=EDGE_CURVE('',#5938,#5937,#611,.T.); #7657=EDGE_CURVE('',#5936,#5938,#3497,.T.); #7658=EDGE_CURVE('',#5939,#5935,#612,.T.); #7659=EDGE_CURVE('',#5939,#5940,#3498,.T.); #7660=EDGE_CURVE('',#5937,#5940,#613,.T.); #7661=EDGE_CURVE('',#5941,#5939,#614,.T.); #7662=EDGE_CURVE('',#5941,#5942,#3499,.T.); #7663=EDGE_CURVE('',#5940,#5942,#615,.T.); #7664=EDGE_CURVE('',#5936,#5941,#616,.T.); #7665=EDGE_CURVE('',#5942,#5938,#617,.T.); #7666=EDGE_CURVE('',#5943,#5944,#618,.T.); #7667=EDGE_CURVE('',#5943,#5945,#3500,.T.); #7668=EDGE_CURVE('',#5946,#5945,#619,.T.); #7669=EDGE_CURVE('',#5944,#5946,#3501,.T.); #7670=EDGE_CURVE('',#5944,#5947,#620,.T.); #7671=EDGE_CURVE('',#5948,#5946,#621,.T.); #7672=EDGE_CURVE('',#5947,#5948,#3502,.T.); #7673=EDGE_CURVE('',#5947,#5949,#622,.T.); #7674=EDGE_CURVE('',#5950,#5948,#623,.T.); #7675=EDGE_CURVE('',#5949,#5950,#3503,.T.); #7676=EDGE_CURVE('',#5949,#5943,#624,.T.); #7677=EDGE_CURVE('',#5945,#5950,#625,.T.); #7678=EDGE_CURVE('',#5951,#5952,#3504,.T.); #7679=EDGE_CURVE('',#5951,#5953,#3505,.T.); #7680=EDGE_CURVE('',#5954,#5953,#3506,.T.); #7681=EDGE_CURVE('',#5952,#5954,#3507,.T.); #7682=EDGE_CURVE('',#5955,#5951,#626,.T.); #7683=EDGE_CURVE('',#5955,#5956,#3508,.T.); #7684=EDGE_CURVE('',#5953,#5956,#627,.T.); #7685=EDGE_CURVE('',#5957,#5955,#628,.T.); #7686=EDGE_CURVE('',#5957,#5958,#3509,.T.); #7687=EDGE_CURVE('',#5956,#5958,#629,.T.); #7688=EDGE_CURVE('',#5959,#5957,#630,.T.); #7689=EDGE_CURVE('',#5959,#5960,#3510,.T.); #7690=EDGE_CURVE('',#5958,#5960,#631,.T.); #7691=EDGE_CURVE('',#5952,#5959,#632,.T.); #7692=EDGE_CURVE('',#5960,#5954,#633,.T.); #7693=EDGE_CURVE('',#5961,#5962,#634,.T.); #7694=EDGE_CURVE('',#5961,#5963,#3511,.T.); #7695=EDGE_CURVE('',#5964,#5963,#635,.T.); #7696=EDGE_CURVE('',#5962,#5964,#3512,.T.); #7697=EDGE_CURVE('',#5962,#5965,#636,.T.); #7698=EDGE_CURVE('',#5966,#5964,#637,.T.); #7699=EDGE_CURVE('',#5965,#5966,#3513,.T.); #7700=EDGE_CURVE('',#5965,#5967,#638,.T.); #7701=EDGE_CURVE('',#5968,#5966,#639,.T.); #7702=EDGE_CURVE('',#5967,#5968,#3514,.T.); #7703=EDGE_CURVE('',#5967,#5969,#3515,.T.); #7704=EDGE_CURVE('',#5970,#5968,#3516,.T.); #7705=EDGE_CURVE('',#5969,#5970,#3517,.T.); #7706=EDGE_CURVE('',#5969,#5971,#3518,.T.); #7707=EDGE_CURVE('',#5972,#5970,#3519,.T.); #7708=EDGE_CURVE('',#5971,#5972,#3520,.T.); #7709=EDGE_CURVE('',#5971,#5973,#640,.T.); #7710=EDGE_CURVE('',#5974,#5972,#641,.T.); #7711=EDGE_CURVE('',#5973,#5974,#3521,.T.); #7712=EDGE_CURVE('',#5973,#5975,#642,.T.); #7713=EDGE_CURVE('',#5976,#5974,#643,.T.); #7714=EDGE_CURVE('',#5975,#5976,#3522,.T.); #7715=EDGE_CURVE('',#5975,#5977,#644,.T.); #7716=EDGE_CURVE('',#5978,#5976,#645,.T.); #7717=EDGE_CURVE('',#5977,#5978,#3523,.T.); #7718=EDGE_CURVE('',#5977,#5979,#3524,.T.); #7719=EDGE_CURVE('',#5980,#5978,#3525,.T.); #7720=EDGE_CURVE('',#5979,#5980,#3526,.T.); #7721=EDGE_CURVE('',#5979,#5981,#3527,.T.); #7722=EDGE_CURVE('',#5982,#5980,#3528,.T.); #7723=EDGE_CURVE('',#5981,#5982,#3529,.T.); #7724=EDGE_CURVE('',#5981,#5983,#646,.T.); #7725=EDGE_CURVE('',#5984,#5982,#647,.T.); #7726=EDGE_CURVE('',#5983,#5984,#3530,.T.); #7727=EDGE_CURVE('',#5983,#5985,#648,.T.); #7728=EDGE_CURVE('',#5986,#5984,#649,.T.); #7729=EDGE_CURVE('',#5985,#5986,#3531,.T.); #7730=EDGE_CURVE('',#5985,#5961,#650,.T.); #7731=EDGE_CURVE('',#5963,#5986,#651,.T.); #7732=EDGE_CURVE('',#5987,#5988,#3532,.T.); #7733=EDGE_CURVE('',#5987,#5989,#3533,.T.); #7734=EDGE_CURVE('',#5990,#5989,#3534,.T.); #7735=EDGE_CURVE('',#5988,#5990,#3535,.T.); #7736=EDGE_CURVE('',#5988,#5991,#3536,.T.); #7737=EDGE_CURVE('',#5992,#5990,#3537,.T.); #7738=EDGE_CURVE('',#5991,#5992,#3538,.T.); #7739=EDGE_CURVE('',#5991,#5993,#3539,.T.); #7740=EDGE_CURVE('',#5994,#5992,#3540,.T.); #7741=EDGE_CURVE('',#5993,#5994,#3541,.T.); #7742=EDGE_CURVE('',#5993,#5987,#3542,.T.); #7743=EDGE_CURVE('',#5989,#5994,#3543,.T.); #7744=EDGE_CURVE('',#5995,#5996,#3544,.T.); #7745=EDGE_CURVE('',#5995,#5997,#3545,.T.); #7746=EDGE_CURVE('',#5998,#5997,#3546,.T.); #7747=EDGE_CURVE('',#5996,#5998,#3547,.T.); #7748=EDGE_CURVE('',#5996,#5999,#3548,.T.); #7749=EDGE_CURVE('',#6000,#5998,#3549,.T.); #7750=EDGE_CURVE('',#5999,#6000,#3550,.T.); #7751=EDGE_CURVE('',#5999,#6001,#3551,.T.); #7752=EDGE_CURVE('',#6002,#6000,#3552,.T.); #7753=EDGE_CURVE('',#6001,#6002,#3553,.T.); #7754=EDGE_CURVE('',#6001,#6003,#3554,.T.); #7755=EDGE_CURVE('',#6004,#6002,#3555,.T.); #7756=EDGE_CURVE('',#6003,#6004,#3556,.T.); #7757=EDGE_CURVE('',#6003,#6005,#3557,.T.); #7758=EDGE_CURVE('',#6006,#6004,#3558,.T.); #7759=EDGE_CURVE('',#6005,#6006,#3559,.T.); #7760=EDGE_CURVE('',#6005,#6007,#3560,.T.); #7761=EDGE_CURVE('',#6008,#6006,#3561,.T.); #7762=EDGE_CURVE('',#6007,#6008,#3562,.T.); #7763=EDGE_CURVE('',#6007,#6009,#3563,.T.); #7764=EDGE_CURVE('',#6010,#6008,#3564,.T.); #7765=EDGE_CURVE('',#6009,#6010,#3565,.T.); #7766=EDGE_CURVE('',#6009,#6011,#3566,.T.); #7767=EDGE_CURVE('',#6012,#6010,#3567,.T.); #7768=EDGE_CURVE('',#6011,#6012,#3568,.T.); #7769=EDGE_CURVE('',#6011,#6013,#3569,.T.); #7770=EDGE_CURVE('',#6014,#6012,#3570,.T.); #7771=EDGE_CURVE('',#6013,#6014,#3571,.T.); #7772=EDGE_CURVE('',#6013,#6015,#3572,.T.); #7773=EDGE_CURVE('',#6016,#6014,#3573,.T.); #7774=EDGE_CURVE('',#6015,#6016,#3574,.T.); #7775=EDGE_CURVE('',#6015,#6017,#3575,.T.); #7776=EDGE_CURVE('',#6018,#6016,#3576,.T.); #7777=EDGE_CURVE('',#6017,#6018,#3577,.T.); #7778=EDGE_CURVE('',#6017,#6019,#652,.T.); #7779=EDGE_CURVE('',#6020,#6018,#653,.T.); #7780=EDGE_CURVE('',#6019,#6020,#3578,.T.); #7781=EDGE_CURVE('',#6019,#6021,#654,.T.); #7782=EDGE_CURVE('',#6022,#6020,#655,.T.); #7783=EDGE_CURVE('',#6021,#6022,#3579,.T.); #7784=EDGE_CURVE('',#6021,#6023,#656,.T.); #7785=EDGE_CURVE('',#6024,#6022,#657,.T.); #7786=EDGE_CURVE('',#6023,#6024,#3580,.T.); #7787=EDGE_CURVE('',#6023,#6025,#3581,.T.); #7788=EDGE_CURVE('',#6026,#6024,#3582,.T.); #7789=EDGE_CURVE('',#6025,#6026,#3583,.T.); #7790=EDGE_CURVE('',#6025,#6027,#3584,.T.); #7791=EDGE_CURVE('',#6028,#6026,#3585,.T.); #7792=EDGE_CURVE('',#6027,#6028,#3586,.T.); #7793=EDGE_CURVE('',#6027,#6029,#658,.T.); #7794=EDGE_CURVE('',#6030,#6028,#659,.T.); #7795=EDGE_CURVE('',#6029,#6030,#3587,.T.); #7796=EDGE_CURVE('',#6029,#5995,#660,.T.); #7797=EDGE_CURVE('',#5997,#6030,#661,.T.); #7798=EDGE_CURVE('',#6031,#6032,#662,.T.); #7799=EDGE_CURVE('',#6031,#6033,#3588,.T.); #7800=EDGE_CURVE('',#6034,#6033,#663,.T.); #7801=EDGE_CURVE('',#6032,#6034,#3589,.T.); #7802=EDGE_CURVE('',#6035,#6031,#664,.T.); #7803=EDGE_CURVE('',#6035,#6036,#3590,.T.); #7804=EDGE_CURVE('',#6033,#6036,#665,.T.); #7805=EDGE_CURVE('',#6037,#6035,#666,.T.); #7806=EDGE_CURVE('',#6037,#6038,#3591,.T.); #7807=EDGE_CURVE('',#6036,#6038,#667,.T.); #7808=EDGE_CURVE('',#6032,#6037,#668,.T.); #7809=EDGE_CURVE('',#6038,#6034,#669,.T.); #7810=EDGE_CURVE('',#6039,#6040,#670,.T.); #7811=EDGE_CURVE('',#6039,#6041,#3592,.T.); #7812=EDGE_CURVE('',#6042,#6041,#671,.T.); #7813=EDGE_CURVE('',#6040,#6042,#3593,.T.); #7814=EDGE_CURVE('',#6040,#6043,#672,.T.); #7815=EDGE_CURVE('',#6044,#6042,#673,.T.); #7816=EDGE_CURVE('',#6043,#6044,#3594,.T.); #7817=EDGE_CURVE('',#6043,#6045,#674,.T.); #7818=EDGE_CURVE('',#6046,#6044,#675,.T.); #7819=EDGE_CURVE('',#6045,#6046,#3595,.T.); #7820=EDGE_CURVE('',#6045,#6039,#676,.T.); #7821=EDGE_CURVE('',#6041,#6046,#677,.T.); #7822=EDGE_CURVE('',#6047,#6048,#3596,.T.); #7823=EDGE_CURVE('',#6047,#6049,#3597,.T.); #7824=EDGE_CURVE('',#6050,#6049,#3598,.T.); #7825=EDGE_CURVE('',#6048,#6050,#3599,.T.); #7826=EDGE_CURVE('',#6048,#6051,#678,.T.); #7827=EDGE_CURVE('',#6052,#6050,#679,.T.); #7828=EDGE_CURVE('',#6051,#6052,#3600,.T.); #7829=EDGE_CURVE('',#6051,#6053,#680,.T.); #7830=EDGE_CURVE('',#6054,#6052,#681,.T.); #7831=EDGE_CURVE('',#6053,#6054,#3601,.T.); #7832=EDGE_CURVE('',#6053,#6055,#682,.T.); #7833=EDGE_CURVE('',#6056,#6054,#683,.T.); #7834=EDGE_CURVE('',#6055,#6056,#3602,.T.); #7835=EDGE_CURVE('',#6055,#6057,#3603,.T.); #7836=EDGE_CURVE('',#6058,#6056,#3604,.T.); #7837=EDGE_CURVE('',#6057,#6058,#3605,.T.); #7838=EDGE_CURVE('',#6057,#6059,#3606,.T.); #7839=EDGE_CURVE('',#6060,#6058,#3607,.T.); #7840=EDGE_CURVE('',#6059,#6060,#3608,.T.); #7841=EDGE_CURVE('',#6059,#6061,#3609,.T.); #7842=EDGE_CURVE('',#6062,#6060,#3610,.T.); #7843=EDGE_CURVE('',#6061,#6062,#3611,.T.); #7844=EDGE_CURVE('',#6061,#6063,#3612,.T.); #7845=EDGE_CURVE('',#6064,#6062,#3613,.T.); #7846=EDGE_CURVE('',#6063,#6064,#3614,.T.); #7847=EDGE_CURVE('',#6063,#6065,#3615,.T.); #7848=EDGE_CURVE('',#6066,#6064,#3616,.T.); #7849=EDGE_CURVE('',#6065,#6066,#3617,.T.); #7850=EDGE_CURVE('',#6065,#6067,#684,.T.); #7851=EDGE_CURVE('',#6068,#6066,#685,.T.); #7852=EDGE_CURVE('',#6067,#6068,#3618,.T.); #7853=EDGE_CURVE('',#6067,#6069,#686,.T.); #7854=EDGE_CURVE('',#6070,#6068,#687,.T.); #7855=EDGE_CURVE('',#6069,#6070,#3619,.T.); #7856=EDGE_CURVE('',#6069,#6071,#3620,.T.); #7857=EDGE_CURVE('',#6072,#6070,#3621,.T.); #7858=EDGE_CURVE('',#6071,#6072,#3622,.T.); #7859=EDGE_CURVE('',#6071,#6047,#3623,.T.); #7860=EDGE_CURVE('',#6049,#6072,#3624,.T.); #7861=EDGE_CURVE('',#6073,#6074,#3625,.T.); #7862=EDGE_CURVE('',#6073,#6075,#3626,.T.); #7863=EDGE_CURVE('',#6076,#6075,#3627,.T.); #7864=EDGE_CURVE('',#6074,#6076,#3628,.T.); #7865=EDGE_CURVE('',#6074,#6077,#3629,.T.); #7866=EDGE_CURVE('',#6078,#6076,#3630,.T.); #7867=EDGE_CURVE('',#6077,#6078,#3631,.T.); #7868=EDGE_CURVE('',#6077,#6079,#3632,.T.); #7869=EDGE_CURVE('',#6080,#6078,#3633,.T.); #7870=EDGE_CURVE('',#6079,#6080,#3634,.T.); #7871=EDGE_CURVE('',#6079,#6073,#3635,.T.); #7872=EDGE_CURVE('',#6075,#6080,#3636,.T.); #7873=EDGE_CURVE('',#6081,#6082,#3637,.T.); #7874=EDGE_CURVE('',#6081,#6083,#3638,.T.); #7875=EDGE_CURVE('',#6084,#6083,#3639,.T.); #7876=EDGE_CURVE('',#6082,#6084,#3640,.T.); #7877=EDGE_CURVE('',#6082,#6085,#3641,.T.); #7878=EDGE_CURVE('',#6086,#6084,#3642,.T.); #7879=EDGE_CURVE('',#6085,#6086,#3643,.T.); #7880=EDGE_CURVE('',#6085,#6087,#688,.T.); #7881=EDGE_CURVE('',#6088,#6086,#689,.T.); #7882=EDGE_CURVE('',#6087,#6088,#3644,.T.); #7883=EDGE_CURVE('',#6087,#6089,#690,.T.); #7884=EDGE_CURVE('',#6090,#6088,#691,.T.); #7885=EDGE_CURVE('',#6089,#6090,#3645,.T.); #7886=EDGE_CURVE('',#6089,#6091,#692,.T.); #7887=EDGE_CURVE('',#6092,#6090,#693,.T.); #7888=EDGE_CURVE('',#6091,#6092,#3646,.T.); #7889=EDGE_CURVE('',#6091,#6093,#694,.T.); #7890=EDGE_CURVE('',#6094,#6092,#695,.T.); #7891=EDGE_CURVE('',#6093,#6094,#3647,.T.); #7892=EDGE_CURVE('',#6093,#6095,#696,.T.); #7893=EDGE_CURVE('',#6096,#6094,#697,.T.); #7894=EDGE_CURVE('',#6095,#6096,#3648,.T.); #7895=EDGE_CURVE('',#6095,#6097,#698,.T.); #7896=EDGE_CURVE('',#6098,#6096,#699,.T.); #7897=EDGE_CURVE('',#6097,#6098,#3649,.T.); #7898=EDGE_CURVE('',#6097,#6099,#700,.T.); #7899=EDGE_CURVE('',#6100,#6098,#701,.T.); #7900=EDGE_CURVE('',#6099,#6100,#3650,.T.); #7901=EDGE_CURVE('',#6099,#6101,#702,.T.); #7902=EDGE_CURVE('',#6102,#6100,#703,.T.); #7903=EDGE_CURVE('',#6101,#6102,#3651,.T.); #7904=EDGE_CURVE('',#6101,#6103,#704,.T.); #7905=EDGE_CURVE('',#6104,#6102,#705,.T.); #7906=EDGE_CURVE('',#6103,#6104,#3652,.T.); #7907=EDGE_CURVE('',#6103,#6105,#3653,.T.); #7908=EDGE_CURVE('',#6106,#6104,#3654,.T.); #7909=EDGE_CURVE('',#6105,#6106,#3655,.T.); #7910=EDGE_CURVE('',#6105,#6107,#3656,.T.); #7911=EDGE_CURVE('',#6108,#6106,#3657,.T.); #7912=EDGE_CURVE('',#6107,#6108,#3658,.T.); #7913=EDGE_CURVE('',#6107,#6109,#706,.T.); #7914=EDGE_CURVE('',#6110,#6108,#707,.T.); #7915=EDGE_CURVE('',#6109,#6110,#3659,.T.); #7916=EDGE_CURVE('',#6109,#6111,#708,.T.); #7917=EDGE_CURVE('',#6112,#6110,#709,.T.); #7918=EDGE_CURVE('',#6111,#6112,#3660,.T.); #7919=EDGE_CURVE('',#6111,#6113,#710,.T.); #7920=EDGE_CURVE('',#6114,#6112,#711,.T.); #7921=EDGE_CURVE('',#6113,#6114,#3661,.T.); #7922=EDGE_CURVE('',#6113,#6115,#712,.T.); #7923=EDGE_CURVE('',#6116,#6114,#713,.T.); #7924=EDGE_CURVE('',#6115,#6116,#3662,.T.); #7925=EDGE_CURVE('',#6115,#6117,#714,.T.); #7926=EDGE_CURVE('',#6118,#6116,#715,.T.); #7927=EDGE_CURVE('',#6117,#6118,#3663,.T.); #7928=EDGE_CURVE('',#6117,#6119,#716,.T.); #7929=EDGE_CURVE('',#6120,#6118,#717,.T.); #7930=EDGE_CURVE('',#6119,#6120,#3664,.T.); #7931=EDGE_CURVE('',#6119,#6121,#718,.T.); #7932=EDGE_CURVE('',#6122,#6120,#719,.T.); #7933=EDGE_CURVE('',#6121,#6122,#3665,.T.); #7934=EDGE_CURVE('',#6121,#6081,#720,.T.); #7935=EDGE_CURVE('',#6083,#6122,#721,.T.); #7936=ORIENTED_EDGE('',*,*,#6123,.F.); #7937=ORIENTED_EDGE('',*,*,#6124,.F.); #7938=ORIENTED_EDGE('',*,*,#6125,.F.); #7939=ORIENTED_EDGE('',*,*,#6126,.F.); #7940=ORIENTED_EDGE('',*,*,#6127,.T.); #7941=ORIENTED_EDGE('',*,*,#6128,.T.); #7942=ORIENTED_EDGE('',*,*,#6129,.F.); #7943=ORIENTED_EDGE('',*,*,#6130,.F.); #7944=ORIENTED_EDGE('',*,*,#6131,.F.); #7945=ORIENTED_EDGE('',*,*,#6132,.F.); #7946=ORIENTED_EDGE('',*,*,#6133,.F.); #7947=ORIENTED_EDGE('',*,*,#6134,.F.); #7948=ORIENTED_EDGE('',*,*,#6135,.F.); #7949=ORIENTED_EDGE('',*,*,#6136,.F.); #7950=ORIENTED_EDGE('',*,*,#6137,.F.); #7951=ORIENTED_EDGE('',*,*,#6138,.F.); #7952=ORIENTED_EDGE('',*,*,#6128,.F.); #7953=ORIENTED_EDGE('',*,*,#6139,.T.); #7954=ORIENTED_EDGE('',*,*,#6127,.F.); #7955=ORIENTED_EDGE('',*,*,#6140,.F.); #7956=ORIENTED_EDGE('',*,*,#6141,.T.); #7957=ORIENTED_EDGE('',*,*,#6142,.T.); #7958=ORIENTED_EDGE('',*,*,#6143,.T.); #7959=ORIENTED_EDGE('',*,*,#6144,.T.); #7960=ORIENTED_EDGE('',*,*,#6145,.T.); #7961=ORIENTED_EDGE('',*,*,#6146,.F.); #7962=ORIENTED_EDGE('',*,*,#6147,.T.); #7963=ORIENTED_EDGE('',*,*,#6148,.T.); #7964=ORIENTED_EDGE('',*,*,#6149,.T.); #7965=ORIENTED_EDGE('',*,*,#6150,.T.); #7966=ORIENTED_EDGE('',*,*,#6151,.T.); #7967=ORIENTED_EDGE('',*,*,#6152,.F.); #7968=ORIENTED_EDGE('',*,*,#6153,.F.); #7969=ORIENTED_EDGE('',*,*,#6154,.F.); #7970=ORIENTED_EDGE('',*,*,#6155,.F.); #7971=ORIENTED_EDGE('',*,*,#6156,.F.); #7972=ORIENTED_EDGE('',*,*,#6157,.F.); #7973=ORIENTED_EDGE('',*,*,#6158,.T.); #7974=ORIENTED_EDGE('',*,*,#6152,.T.); #7975=ORIENTED_EDGE('',*,*,#6159,.T.); #7976=ORIENTED_EDGE('',*,*,#6160,.T.); #7977=ORIENTED_EDGE('',*,*,#6161,.T.); #7978=ORIENTED_EDGE('',*,*,#6162,.T.); #7979=ORIENTED_EDGE('',*,*,#6163,.T.); #7980=ORIENTED_EDGE('',*,*,#6164,.T.); #7981=ORIENTED_EDGE('',*,*,#6160,.F.); #7982=ORIENTED_EDGE('',*,*,#6165,.F.); #7983=ORIENTED_EDGE('',*,*,#6166,.F.); #7984=ORIENTED_EDGE('',*,*,#6167,.T.); #7985=ORIENTED_EDGE('',*,*,#6168,.F.); #7986=ORIENTED_EDGE('',*,*,#6169,.F.); #7987=ORIENTED_EDGE('',*,*,#6170,.F.); #7988=ORIENTED_EDGE('',*,*,#6171,.F.); #7989=ORIENTED_EDGE('',*,*,#6172,.F.); #7990=ORIENTED_EDGE('',*,*,#6173,.F.); #7991=ORIENTED_EDGE('',*,*,#6174,.T.); #7992=ORIENTED_EDGE('',*,*,#6175,.F.); #7993=ORIENTED_EDGE('',*,*,#6176,.F.); #7994=ORIENTED_EDGE('',*,*,#6177,.F.); #7995=ORIENTED_EDGE('',*,*,#6178,.F.); #7996=ORIENTED_EDGE('',*,*,#6136,.T.); #7997=ORIENTED_EDGE('',*,*,#6177,.T.); #7998=ORIENTED_EDGE('',*,*,#6179,.T.); #7999=ORIENTED_EDGE('',*,*,#6180,.T.); #8000=ORIENTED_EDGE('',*,*,#6181,.F.); #8001=ORIENTED_EDGE('',*,*,#6182,.F.); #8002=ORIENTED_EDGE('',*,*,#6183,.F.); #8003=ORIENTED_EDGE('',*,*,#6184,.T.); #8004=ORIENTED_EDGE('',*,*,#6185,.F.); #8005=ORIENTED_EDGE('',*,*,#6168,.T.); #8006=ORIENTED_EDGE('',*,*,#6186,.T.); #8007=ORIENTED_EDGE('',*,*,#6183,.T.); #8008=ORIENTED_EDGE('',*,*,#6187,.T.); #8009=ORIENTED_EDGE('',*,*,#6188,.F.); #8010=ORIENTED_EDGE('',*,*,#6189,.F.); #8011=ORIENTED_EDGE('',*,*,#6190,.F.); #8012=ORIENTED_EDGE('',*,*,#6170,.T.); #8013=ORIENTED_EDGE('',*,*,#6191,.T.); #8014=ORIENTED_EDGE('',*,*,#6189,.T.); #8015=ORIENTED_EDGE('',*,*,#6129,.T.); #8016=ORIENTED_EDGE('',*,*,#6166,.T.); #8017=ORIENTED_EDGE('',*,*,#6192,.T.); #8018=ORIENTED_EDGE('',*,*,#6190,.T.); #8019=ORIENTED_EDGE('',*,*,#6193,.T.); #8020=ORIENTED_EDGE('',*,*,#6194,.F.); #8021=ORIENTED_EDGE('',*,*,#6195,.F.); #8022=ORIENTED_EDGE('',*,*,#6196,.T.); #8023=ORIENTED_EDGE('',*,*,#6197,.F.); #8024=ORIENTED_EDGE('',*,*,#6198,.F.); #8025=ORIENTED_EDGE('',*,*,#6199,.F.); #8026=ORIENTED_EDGE('',*,*,#6200,.F.); #8027=ORIENTED_EDGE('',*,*,#6199,.T.); #8028=ORIENTED_EDGE('',*,*,#6201,.T.); #8029=ORIENTED_EDGE('',*,*,#6175,.T.); #8030=ORIENTED_EDGE('',*,*,#6202,.T.); #8031=ORIENTED_EDGE('',*,*,#6200,.T.); #8032=ORIENTED_EDGE('',*,*,#6203,.T.); #8033=ORIENTED_EDGE('',*,*,#6178,.T.); #8034=ORIENTED_EDGE('',*,*,#6135,.T.); #8035=ORIENTED_EDGE('',*,*,#6204,.F.); #8036=ORIENTED_EDGE('',*,*,#6205,.F.); #8037=ORIENTED_EDGE('',*,*,#6206,.F.); #8038=ORIENTED_EDGE('',*,*,#6205,.T.); #8039=ORIENTED_EDGE('',*,*,#6130,.T.); #8040=ORIENTED_EDGE('',*,*,#6188,.T.); #8041=ORIENTED_EDGE('',*,*,#6207,.T.); #8042=ORIENTED_EDGE('',*,*,#6206,.T.); #8043=ORIENTED_EDGE('',*,*,#6208,.T.); #8044=ORIENTED_EDGE('',*,*,#6185,.T.); #8045=ORIENTED_EDGE('',*,*,#6209,.T.); #8046=ORIENTED_EDGE('',*,*,#6210,.F.); #8047=ORIENTED_EDGE('',*,*,#6211,.F.); #8048=ORIENTED_EDGE('',*,*,#6212,.F.); #8049=ORIENTED_EDGE('',*,*,#6213,.F.); #8050=ORIENTED_EDGE('',*,*,#6214,.F.); #8051=ORIENTED_EDGE('',*,*,#6150,.F.); #8052=ORIENTED_EDGE('',*,*,#6204,.T.); #8053=ORIENTED_EDGE('',*,*,#6215,.T.); #8054=ORIENTED_EDGE('',*,*,#6214,.T.); #8055=ORIENTED_EDGE('',*,*,#6131,.T.); #8056=ORIENTED_EDGE('',*,*,#6216,.F.); #8057=ORIENTED_EDGE('',*,*,#6217,.F.); #8058=ORIENTED_EDGE('',*,*,#6142,.F.); #8059=ORIENTED_EDGE('',*,*,#6213,.T.); #8060=ORIENTED_EDGE('',*,*,#6218,.T.); #8061=ORIENTED_EDGE('',*,*,#6217,.T.); #8062=ORIENTED_EDGE('',*,*,#6132,.T.); #8063=ORIENTED_EDGE('',*,*,#6216,.T.); #8064=ORIENTED_EDGE('',*,*,#6219,.T.); #8065=ORIENTED_EDGE('',*,*,#6211,.T.); #8066=ORIENTED_EDGE('',*,*,#6133,.T.); #8067=ORIENTED_EDGE('',*,*,#6195,.T.); #8068=ORIENTED_EDGE('',*,*,#6220,.T.); #8069=ORIENTED_EDGE('',*,*,#6212,.T.); #8070=ORIENTED_EDGE('',*,*,#6221,.T.); #8071=ORIENTED_EDGE('',*,*,#6198,.T.); #8072=ORIENTED_EDGE('',*,*,#6134,.T.); #8073=ORIENTED_EDGE('',*,*,#6210,.T.); #8074=ORIENTED_EDGE('',*,*,#6222,.T.); #8075=ORIENTED_EDGE('',*,*,#6197,.T.); #8076=ORIENTED_EDGE('',*,*,#6223,.T.); #8077=ORIENTED_EDGE('',*,*,#6173,.T.); #8078=ORIENTED_EDGE('',*,*,#6224,.T.); #8079=ORIENTED_EDGE('',*,*,#6172,.T.); #8080=ORIENTED_EDGE('',*,*,#6225,.T.); #8081=ORIENTED_EDGE('',*,*,#6194,.T.); #8082=ORIENTED_EDGE('',*,*,#6226,.T.); #8083=ORIENTED_EDGE('',*,*,#6182,.T.); #8084=ORIENTED_EDGE('',*,*,#6227,.T.); #8085=ORIENTED_EDGE('',*,*,#6165,.T.); #8086=ORIENTED_EDGE('',*,*,#6228,.T.); #8087=ORIENTED_EDGE('',*,*,#6229,.T.); #8088=ORIENTED_EDGE('',*,*,#6176,.T.); #8089=ORIENTED_EDGE('',*,*,#6230,.T.); #8090=ORIENTED_EDGE('',*,*,#6231,.T.); #8091=ORIENTED_EDGE('',*,*,#6232,.T.); #8092=ORIENTED_EDGE('',*,*,#6171,.T.); #8093=ORIENTED_EDGE('',*,*,#6138,.T.); #8094=ORIENTED_EDGE('',*,*,#6233,.T.); #8095=ORIENTED_EDGE('',*,*,#6234,.T.); #8096=ORIENTED_EDGE('',*,*,#6235,.T.); #8097=ORIENTED_EDGE('',*,*,#6169,.T.); #8098=ORIENTED_EDGE('',*,*,#6236,.T.); #8099=ORIENTED_EDGE('',*,*,#6163,.F.); #8100=ORIENTED_EDGE('',*,*,#6237,.T.); #8101=ORIENTED_EDGE('',*,*,#6231,.F.); #8102=ORIENTED_EDGE('',*,*,#6238,.T.); #8103=ORIENTED_EDGE('',*,*,#6239,.T.); #8104=ORIENTED_EDGE('',*,*,#6240,.T.); #8105=ORIENTED_EDGE('',*,*,#6233,.F.); #8106=ORIENTED_EDGE('',*,*,#6137,.T.); #8107=ORIENTED_EDGE('',*,*,#6181,.T.); #8108=ORIENTED_EDGE('',*,*,#6241,.T.); #8109=ORIENTED_EDGE('',*,*,#6156,.T.); #8110=ORIENTED_EDGE('',*,*,#6242,.T.); #8111=ORIENTED_EDGE('',*,*,#6243,.T.); #8112=ORIENTED_EDGE('',*,*,#6239,.F.); #8113=ORIENTED_EDGE('',*,*,#6140,.T.); #8114=ORIENTED_EDGE('',*,*,#6244,.T.); #8115=ORIENTED_EDGE('',*,*,#6157,.T.); #8116=ORIENTED_EDGE('',*,*,#6245,.T.); #8117=ORIENTED_EDGE('',*,*,#6246,.T.); #8118=ORIENTED_EDGE('',*,*,#6155,.T.); #8119=ORIENTED_EDGE('',*,*,#6247,.T.); #8120=ORIENTED_EDGE('',*,*,#6153,.T.); #8121=ORIENTED_EDGE('',*,*,#6248,.T.); #8122=ORIENTED_EDGE('',*,*,#6146,.T.); #8123=ORIENTED_EDGE('',*,*,#6249,.T.); #8124=ORIENTED_EDGE('',*,*,#6250,.T.); #8125=ORIENTED_EDGE('',*,*,#6154,.T.); #8126=ORIENTED_EDGE('',*,*,#6251,.T.); #8127=ORIENTED_EDGE('',*,*,#6143,.F.); #8128=ORIENTED_EDGE('',*,*,#6218,.F.); #8129=ORIENTED_EDGE('',*,*,#6149,.F.); #8130=ORIENTED_EDGE('',*,*,#6252,.T.); #8131=ORIENTED_EDGE('',*,*,#6249,.F.); #8132=ORIENTED_EDGE('',*,*,#6151,.F.); #8133=ORIENTED_EDGE('',*,*,#6215,.F.); #8134=ORIENTED_EDGE('',*,*,#6209,.F.); #8135=ORIENTED_EDGE('',*,*,#6184,.F.); #8136=ORIENTED_EDGE('',*,*,#6186,.F.); #8137=ORIENTED_EDGE('',*,*,#6167,.F.); #8138=ORIENTED_EDGE('',*,*,#6193,.F.); #8139=ORIENTED_EDGE('',*,*,#6191,.F.); #8140=ORIENTED_EDGE('',*,*,#6235,.F.); #8141=ORIENTED_EDGE('',*,*,#6253,.T.); #8142=ORIENTED_EDGE('',*,*,#6230,.F.); #8143=ORIENTED_EDGE('',*,*,#6203,.F.); #8144=ORIENTED_EDGE('',*,*,#6202,.F.); #8145=ORIENTED_EDGE('',*,*,#6174,.F.); #8146=ORIENTED_EDGE('',*,*,#6223,.F.); #8147=ORIENTED_EDGE('',*,*,#6196,.F.); #8148=ORIENTED_EDGE('',*,*,#6221,.F.); #8149=ORIENTED_EDGE('',*,*,#6219,.F.); #8150=ORIENTED_EDGE('',*,*,#6141,.F.); #8151=ORIENTED_EDGE('',*,*,#6246,.F.); #8152=ORIENTED_EDGE('',*,*,#6254,.T.); #8153=ORIENTED_EDGE('',*,*,#6234,.F.); #8154=ORIENTED_EDGE('',*,*,#6240,.F.); #8155=ORIENTED_EDGE('',*,*,#6180,.F.); #8156=ORIENTED_EDGE('',*,*,#6255,.T.); #8157=ORIENTED_EDGE('',*,*,#6126,.T.); #8158=ORIENTED_EDGE('',*,*,#6256,.T.); #8159=ORIENTED_EDGE('',*,*,#6179,.F.); #8160=ORIENTED_EDGE('',*,*,#6229,.F.); #8161=ORIENTED_EDGE('',*,*,#6237,.F.); #8162=ORIENTED_EDGE('',*,*,#6243,.F.); #8163=ORIENTED_EDGE('',*,*,#6257,.F.); #8164=ORIENTED_EDGE('',*,*,#6123,.T.); #8165=ORIENTED_EDGE('',*,*,#6255,.F.); #8166=ORIENTED_EDGE('',*,*,#6187,.F.); #8167=ORIENTED_EDGE('',*,*,#6228,.F.); #8168=ORIENTED_EDGE('',*,*,#6192,.F.); #8169=ORIENTED_EDGE('',*,*,#6227,.F.); #8170=ORIENTED_EDGE('',*,*,#6208,.F.); #8171=ORIENTED_EDGE('',*,*,#6207,.F.); #8172=ORIENTED_EDGE('',*,*,#6220,.F.); #8173=ORIENTED_EDGE('',*,*,#6225,.F.); #8174=ORIENTED_EDGE('',*,*,#6201,.F.); #8175=ORIENTED_EDGE('',*,*,#6222,.F.); #8176=ORIENTED_EDGE('',*,*,#6224,.F.); #8177=ORIENTED_EDGE('',*,*,#6226,.F.); #8178=ORIENTED_EDGE('',*,*,#6250,.F.); #8179=ORIENTED_EDGE('',*,*,#6253,.F.); #8180=ORIENTED_EDGE('',*,*,#6162,.F.); #8181=ORIENTED_EDGE('',*,*,#6159,.F.); #8182=ORIENTED_EDGE('',*,*,#6232,.F.); #8183=ORIENTED_EDGE('',*,*,#6256,.F.); #8184=ORIENTED_EDGE('',*,*,#6125,.T.); #8185=ORIENTED_EDGE('',*,*,#6258,.F.); #8186=ORIENTED_EDGE('',*,*,#6161,.F.); #8187=ORIENTED_EDGE('',*,*,#6164,.F.); #8188=ORIENTED_EDGE('',*,*,#6236,.F.); #8189=ORIENTED_EDGE('',*,*,#6238,.F.); #8190=ORIENTED_EDGE('',*,*,#6254,.F.); #8191=ORIENTED_EDGE('',*,*,#6245,.F.); #8192=ORIENTED_EDGE('',*,*,#6241,.F.); #8193=ORIENTED_EDGE('',*,*,#6145,.F.); #8194=ORIENTED_EDGE('',*,*,#6259,.T.); #8195=ORIENTED_EDGE('',*,*,#6147,.F.); #8196=ORIENTED_EDGE('',*,*,#6251,.F.); #8197=ORIENTED_EDGE('',*,*,#6247,.F.); #8198=ORIENTED_EDGE('',*,*,#6244,.F.); #8199=ORIENTED_EDGE('',*,*,#6144,.F.); #8200=ORIENTED_EDGE('',*,*,#6252,.F.); #8201=ORIENTED_EDGE('',*,*,#6148,.F.); #8202=ORIENTED_EDGE('',*,*,#6259,.F.); #8203=ORIENTED_EDGE('',*,*,#6139,.F.); #8204=ORIENTED_EDGE('',*,*,#6257,.T.); #8205=ORIENTED_EDGE('',*,*,#6242,.F.); #8206=ORIENTED_EDGE('',*,*,#6248,.F.); #8207=ORIENTED_EDGE('',*,*,#6158,.F.); #8208=ORIENTED_EDGE('',*,*,#6258,.T.); #8209=ORIENTED_EDGE('',*,*,#6124,.T.); #8210=ORIENTED_EDGE('',*,*,#6260,.T.); #8211=ORIENTED_EDGE('',*,*,#6261,.T.); #8212=ORIENTED_EDGE('',*,*,#6262,.T.); #8213=ORIENTED_EDGE('',*,*,#6263,.T.); #8214=ORIENTED_EDGE('',*,*,#6264,.T.); #8215=ORIENTED_EDGE('',*,*,#6265,.T.); #8216=ORIENTED_EDGE('',*,*,#6266,.T.); #8217=ORIENTED_EDGE('',*,*,#6267,.T.); #8218=ORIENTED_EDGE('',*,*,#6265,.F.); #8219=ORIENTED_EDGE('',*,*,#6268,.F.); #8220=ORIENTED_EDGE('',*,*,#6263,.F.); #8221=ORIENTED_EDGE('',*,*,#6269,.F.); #8222=ORIENTED_EDGE('',*,*,#6270,.T.); #8223=ORIENTED_EDGE('',*,*,#6271,.T.); #8224=ORIENTED_EDGE('',*,*,#6272,.T.); #8225=ORIENTED_EDGE('',*,*,#6273,.T.); #8226=ORIENTED_EDGE('',*,*,#6267,.F.); #8227=ORIENTED_EDGE('',*,*,#6274,.F.); #8228=ORIENTED_EDGE('',*,*,#6275,.T.); #8229=ORIENTED_EDGE('',*,*,#6276,.F.); #8230=ORIENTED_EDGE('',*,*,#6277,.F.); #8231=ORIENTED_EDGE('',*,*,#6278,.F.); #8232=ORIENTED_EDGE('',*,*,#6271,.F.); #8233=ORIENTED_EDGE('',*,*,#6279,.F.); #8234=ORIENTED_EDGE('',*,*,#6280,.F.); #8235=ORIENTED_EDGE('',*,*,#6281,.F.); #8236=ORIENTED_EDGE('',*,*,#6282,.T.); #8237=ORIENTED_EDGE('',*,*,#6283,.F.); #8238=ORIENTED_EDGE('',*,*,#6270,.F.); #8239=ORIENTED_EDGE('',*,*,#6284,.T.); #8240=ORIENTED_EDGE('',*,*,#6285,.T.); #8241=ORIENTED_EDGE('',*,*,#6286,.T.); #8242=ORIENTED_EDGE('',*,*,#6287,.F.); #8243=ORIENTED_EDGE('',*,*,#6288,.T.); #8244=ORIENTED_EDGE('',*,*,#6289,.T.); #8245=ORIENTED_EDGE('',*,*,#6279,.T.); #8246=ORIENTED_EDGE('',*,*,#6287,.T.); #8247=ORIENTED_EDGE('',*,*,#6290,.T.); #8248=ORIENTED_EDGE('',*,*,#6291,.T.); #8249=ORIENTED_EDGE('',*,*,#6292,.T.); #8250=ORIENTED_EDGE('',*,*,#6290,.F.); #8251=ORIENTED_EDGE('',*,*,#6286,.F.); #8252=ORIENTED_EDGE('',*,*,#6293,.T.); #8253=ORIENTED_EDGE('',*,*,#6294,.F.); #8254=ORIENTED_EDGE('',*,*,#6295,.T.); #8255=ORIENTED_EDGE('',*,*,#6296,.T.); #8256=ORIENTED_EDGE('',*,*,#6297,.T.); #8257=ORIENTED_EDGE('',*,*,#6298,.T.); #8258=ORIENTED_EDGE('',*,*,#6296,.F.); #8259=ORIENTED_EDGE('',*,*,#6299,.F.); #8260=ORIENTED_EDGE('',*,*,#6261,.F.); #8261=ORIENTED_EDGE('',*,*,#6300,.F.); #8262=ORIENTED_EDGE('',*,*,#6295,.F.); #8263=ORIENTED_EDGE('',*,*,#6301,.T.); #8264=ORIENTED_EDGE('',*,*,#6302,.T.); #8265=ORIENTED_EDGE('',*,*,#6274,.T.); #8266=ORIENTED_EDGE('',*,*,#6266,.F.); #8267=ORIENTED_EDGE('',*,*,#6269,.T.); #8268=ORIENTED_EDGE('',*,*,#6262,.F.); #8269=ORIENTED_EDGE('',*,*,#6299,.T.); #8270=ORIENTED_EDGE('',*,*,#6303,.F.); #8271=ORIENTED_EDGE('',*,*,#6277,.T.); #8272=ORIENTED_EDGE('',*,*,#6304,.F.); #8273=ORIENTED_EDGE('',*,*,#6305,.T.); #8274=ORIENTED_EDGE('',*,*,#6302,.F.); #8275=ORIENTED_EDGE('',*,*,#6306,.T.); #8276=ORIENTED_EDGE('',*,*,#6307,.F.); #8277=ORIENTED_EDGE('',*,*,#6275,.F.); #8278=ORIENTED_EDGE('',*,*,#6308,.F.); #8279=ORIENTED_EDGE('',*,*,#6282,.F.); #8280=ORIENTED_EDGE('',*,*,#6309,.F.); #8281=ORIENTED_EDGE('',*,*,#6310,.T.); #8282=ORIENTED_EDGE('',*,*,#6311,.T.); #8283=ORIENTED_EDGE('',*,*,#6312,.T.); #8284=ORIENTED_EDGE('',*,*,#6309,.T.); #8285=ORIENTED_EDGE('',*,*,#6281,.T.); #8286=ORIENTED_EDGE('',*,*,#6289,.F.); #8287=ORIENTED_EDGE('',*,*,#6313,.T.); #8288=ORIENTED_EDGE('',*,*,#6311,.F.); #8289=ORIENTED_EDGE('',*,*,#6280,.T.); #8290=ORIENTED_EDGE('',*,*,#6304,.T.); #8291=ORIENTED_EDGE('',*,*,#6276,.T.); #8292=ORIENTED_EDGE('',*,*,#6307,.T.); #8293=ORIENTED_EDGE('',*,*,#6314,.T.); #8294=ORIENTED_EDGE('',*,*,#6297,.F.); #8295=ORIENTED_EDGE('',*,*,#6300,.T.); #8296=ORIENTED_EDGE('',*,*,#6260,.F.); #8297=ORIENTED_EDGE('',*,*,#6268,.T.); #8298=ORIENTED_EDGE('',*,*,#6264,.F.); #8299=ORIENTED_EDGE('',*,*,#6283,.T.); #8300=ORIENTED_EDGE('',*,*,#6308,.T.); #8301=ORIENTED_EDGE('',*,*,#6315,.T.); #8302=ORIENTED_EDGE('',*,*,#6292,.F.); #8303=ORIENTED_EDGE('',*,*,#6316,.F.); #8304=ORIENTED_EDGE('',*,*,#6305,.F.); #8305=ORIENTED_EDGE('',*,*,#6314,.F.); #8306=ORIENTED_EDGE('',*,*,#6306,.F.); #8307=ORIENTED_EDGE('',*,*,#6301,.F.); #8308=ORIENTED_EDGE('',*,*,#6298,.F.); #8309=ORIENTED_EDGE('',*,*,#6315,.F.); #8310=ORIENTED_EDGE('',*,*,#6310,.F.); #8311=ORIENTED_EDGE('',*,*,#6312,.F.); #8312=ORIENTED_EDGE('',*,*,#6313,.F.); #8313=ORIENTED_EDGE('',*,*,#6288,.F.); #8314=ORIENTED_EDGE('',*,*,#6273,.F.); #8315=ORIENTED_EDGE('',*,*,#6317,.F.); #8316=ORIENTED_EDGE('',*,*,#6318,.F.); #8317=ORIENTED_EDGE('',*,*,#6284,.F.); #8318=ORIENTED_EDGE('',*,*,#6318,.T.); #8319=ORIENTED_EDGE('',*,*,#6319,.F.); #8320=ORIENTED_EDGE('',*,*,#6293,.F.); #8321=ORIENTED_EDGE('',*,*,#6285,.F.); #8322=ORIENTED_EDGE('',*,*,#6272,.F.); #8323=ORIENTED_EDGE('',*,*,#6278,.T.); #8324=ORIENTED_EDGE('',*,*,#6303,.T.); #8325=ORIENTED_EDGE('',*,*,#6316,.T.); #8326=ORIENTED_EDGE('',*,*,#6291,.F.); #8327=ORIENTED_EDGE('',*,*,#6294,.T.); #8328=ORIENTED_EDGE('',*,*,#6319,.T.); #8329=ORIENTED_EDGE('',*,*,#6317,.T.); #8330=ORIENTED_EDGE('',*,*,#6320,.F.); #8331=ORIENTED_EDGE('',*,*,#6321,.T.); #8332=ORIENTED_EDGE('',*,*,#6322,.F.); #8333=ORIENTED_EDGE('',*,*,#6323,.T.); #8334=ORIENTED_EDGE('',*,*,#6324,.F.); #8335=ORIENTED_EDGE('',*,*,#6325,.F.); #8336=ORIENTED_EDGE('',*,*,#6326,.T.); #8337=ORIENTED_EDGE('',*,*,#6327,.T.); #8338=ORIENTED_EDGE('',*,*,#6328,.T.); #8339=ORIENTED_EDGE('',*,*,#6329,.T.); #8340=ORIENTED_EDGE('',*,*,#6330,.T.); #8341=ORIENTED_EDGE('',*,*,#6331,.F.); #8342=ORIENTED_EDGE('',*,*,#6332,.F.); #8343=ORIENTED_EDGE('',*,*,#6331,.T.); #8344=ORIENTED_EDGE('',*,*,#6333,.T.); #8345=ORIENTED_EDGE('',*,*,#6334,.T.); #8346=ORIENTED_EDGE('',*,*,#6335,.F.); #8347=ORIENTED_EDGE('',*,*,#6336,.T.); #8348=ORIENTED_EDGE('',*,*,#6337,.T.); #8349=ORIENTED_EDGE('',*,*,#6325,.T.); #8350=ORIENTED_EDGE('',*,*,#6338,.T.); #8351=ORIENTED_EDGE('',*,*,#6339,.F.); #8352=ORIENTED_EDGE('',*,*,#6333,.F.); #8353=ORIENTED_EDGE('',*,*,#6330,.F.); #8354=ORIENTED_EDGE('',*,*,#6340,.T.); #8355=ORIENTED_EDGE('',*,*,#6326,.F.); #8356=ORIENTED_EDGE('',*,*,#6337,.F.); #8357=ORIENTED_EDGE('',*,*,#6341,.F.); #8358=ORIENTED_EDGE('',*,*,#6327,.F.); #8359=ORIENTED_EDGE('',*,*,#6340,.F.); #8360=ORIENTED_EDGE('',*,*,#6342,.F.); #8361=ORIENTED_EDGE('',*,*,#6343,.F.); #8362=ORIENTED_EDGE('',*,*,#6328,.F.); #8363=ORIENTED_EDGE('',*,*,#6343,.T.); #8364=ORIENTED_EDGE('',*,*,#6344,.F.); #8365=ORIENTED_EDGE('',*,*,#6345,.F.); #8366=ORIENTED_EDGE('',*,*,#6329,.F.); #8367=ORIENTED_EDGE('',*,*,#6345,.T.); #8368=ORIENTED_EDGE('',*,*,#6346,.F.); #8369=ORIENTED_EDGE('',*,*,#6338,.F.); #8370=ORIENTED_EDGE('',*,*,#6347,.F.); #8371=ORIENTED_EDGE('',*,*,#6348,.F.); #8372=ORIENTED_EDGE('',*,*,#6349,.F.); #8373=ORIENTED_EDGE('',*,*,#6350,.F.); #8374=ORIENTED_EDGE('',*,*,#6351,.F.); #8375=ORIENTED_EDGE('',*,*,#6352,.F.); #8376=ORIENTED_EDGE('',*,*,#6353,.F.); #8377=ORIENTED_EDGE('',*,*,#6354,.F.); #8378=ORIENTED_EDGE('',*,*,#6323,.F.); #8379=ORIENTED_EDGE('',*,*,#6355,.F.); #8380=ORIENTED_EDGE('',*,*,#6356,.T.); #8381=ORIENTED_EDGE('',*,*,#6335,.T.); #8382=ORIENTED_EDGE('',*,*,#6324,.T.); #8383=ORIENTED_EDGE('',*,*,#6354,.T.); #8384=ORIENTED_EDGE('',*,*,#6320,.T.); #8385=ORIENTED_EDGE('',*,*,#6332,.T.); #8386=ORIENTED_EDGE('',*,*,#6357,.T.); #8387=ORIENTED_EDGE('',*,*,#6358,.T.); #8388=ORIENTED_EDGE('',*,*,#6359,.F.); #8389=ORIENTED_EDGE('',*,*,#6321,.F.); #8390=ORIENTED_EDGE('',*,*,#6358,.F.); #8391=ORIENTED_EDGE('',*,*,#6360,.F.); #8392=ORIENTED_EDGE('',*,*,#6361,.F.); #8393=ORIENTED_EDGE('',*,*,#6362,.F.); #8394=ORIENTED_EDGE('',*,*,#6363,.T.); #8395=ORIENTED_EDGE('',*,*,#6349,.T.); #8396=ORIENTED_EDGE('',*,*,#6364,.T.); #8397=ORIENTED_EDGE('',*,*,#6361,.T.); #8398=ORIENTED_EDGE('',*,*,#6365,.F.); #8399=ORIENTED_EDGE('',*,*,#6366,.F.); #8400=ORIENTED_EDGE('',*,*,#6367,.F.); #8401=ORIENTED_EDGE('',*,*,#6368,.F.); #8402=ORIENTED_EDGE('',*,*,#6369,.T.); #8403=ORIENTED_EDGE('',*,*,#6367,.T.); #8404=ORIENTED_EDGE('',*,*,#6370,.T.); #8405=ORIENTED_EDGE('',*,*,#6347,.T.); #8406=ORIENTED_EDGE('',*,*,#6371,.F.); #8407=ORIENTED_EDGE('',*,*,#6372,.F.); #8408=ORIENTED_EDGE('',*,*,#6373,.F.); #8409=ORIENTED_EDGE('',*,*,#6374,.F.); #8410=ORIENTED_EDGE('',*,*,#6375,.F.); #8411=ORIENTED_EDGE('',*,*,#6376,.T.); #8412=ORIENTED_EDGE('',*,*,#6377,.T.); #8413=ORIENTED_EDGE('',*,*,#6373,.T.); #8414=ORIENTED_EDGE('',*,*,#6378,.F.); #8415=ORIENTED_EDGE('',*,*,#6379,.F.); #8416=ORIENTED_EDGE('',*,*,#6380,.F.); #8417=ORIENTED_EDGE('',*,*,#6381,.F.); #8418=ORIENTED_EDGE('',*,*,#6382,.F.); #8419=ORIENTED_EDGE('',*,*,#6371,.T.); #8420=ORIENTED_EDGE('',*,*,#6383,.T.); #8421=ORIENTED_EDGE('',*,*,#6380,.T.); #8422=ORIENTED_EDGE('',*,*,#6384,.F.); #8423=ORIENTED_EDGE('',*,*,#6385,.F.); #8424=ORIENTED_EDGE('',*,*,#6376,.F.); #8425=ORIENTED_EDGE('',*,*,#6386,.F.); #8426=ORIENTED_EDGE('',*,*,#6387,.F.); #8427=ORIENTED_EDGE('',*,*,#6388,.T.); #8428=ORIENTED_EDGE('',*,*,#6389,.T.); #8429=ORIENTED_EDGE('',*,*,#6384,.T.); #8430=ORIENTED_EDGE('',*,*,#6390,.F.); #8431=ORIENTED_EDGE('',*,*,#6391,.F.); #8432=ORIENTED_EDGE('',*,*,#6388,.F.); #8433=ORIENTED_EDGE('',*,*,#6392,.F.); #8434=ORIENTED_EDGE('',*,*,#6393,.F.); #8435=ORIENTED_EDGE('',*,*,#6378,.T.); #8436=ORIENTED_EDGE('',*,*,#6394,.T.); #8437=ORIENTED_EDGE('',*,*,#6390,.T.); #8438=ORIENTED_EDGE('',*,*,#6395,.T.); #8439=ORIENTED_EDGE('',*,*,#6396,.T.); #8440=ORIENTED_EDGE('',*,*,#6397,.T.); #8441=ORIENTED_EDGE('',*,*,#6398,.T.); #8442=ORIENTED_EDGE('',*,*,#6399,.F.); #8443=ORIENTED_EDGE('',*,*,#6400,.F.); #8444=ORIENTED_EDGE('',*,*,#6396,.F.); #8445=ORIENTED_EDGE('',*,*,#6401,.F.); #8446=ORIENTED_EDGE('',*,*,#6402,.T.); #8447=ORIENTED_EDGE('',*,*,#6352,.T.); #8448=ORIENTED_EDGE('',*,*,#6403,.T.); #8449=ORIENTED_EDGE('',*,*,#6399,.T.); #8450=ORIENTED_EDGE('',*,*,#6404,.F.); #8451=ORIENTED_EDGE('',*,*,#6405,.F.); #8452=ORIENTED_EDGE('',*,*,#6398,.F.); #8453=ORIENTED_EDGE('',*,*,#6406,.F.); #8454=ORIENTED_EDGE('',*,*,#6407,.T.); #8455=ORIENTED_EDGE('',*,*,#6404,.T.); #8456=ORIENTED_EDGE('',*,*,#6408,.T.); #8457=ORIENTED_EDGE('',*,*,#6409,.T.); #8458=ORIENTED_EDGE('',*,*,#6410,.F.); #8459=ORIENTED_EDGE('',*,*,#6368,.T.); #8460=ORIENTED_EDGE('',*,*,#6369,.F.); #8461=ORIENTED_EDGE('',*,*,#6350,.T.); #8462=ORIENTED_EDGE('',*,*,#6363,.F.); #8463=ORIENTED_EDGE('',*,*,#6360,.T.); #8464=ORIENTED_EDGE('',*,*,#6357,.F.); #8465=ORIENTED_EDGE('',*,*,#6334,.F.); #8466=ORIENTED_EDGE('',*,*,#6339,.T.); #8467=ORIENTED_EDGE('',*,*,#6346,.T.); #8468=ORIENTED_EDGE('',*,*,#6344,.T.); #8469=ORIENTED_EDGE('',*,*,#6342,.T.); #8470=ORIENTED_EDGE('',*,*,#6341,.T.); #8471=ORIENTED_EDGE('',*,*,#6336,.F.); #8472=ORIENTED_EDGE('',*,*,#6356,.F.); #8473=ORIENTED_EDGE('',*,*,#6353,.T.); #8474=ORIENTED_EDGE('',*,*,#6402,.F.); #8475=ORIENTED_EDGE('',*,*,#6401,.T.); #8476=ORIENTED_EDGE('',*,*,#6395,.F.); #8477=ORIENTED_EDGE('',*,*,#6405,.T.); #8478=ORIENTED_EDGE('',*,*,#6407,.F.); #8479=ORIENTED_EDGE('',*,*,#6411,.T.); #8480=ORIENTED_EDGE('',*,*,#6391,.T.); #8481=ORIENTED_EDGE('',*,*,#6394,.F.); #8482=ORIENTED_EDGE('',*,*,#6381,.T.); #8483=ORIENTED_EDGE('',*,*,#6383,.F.); #8484=ORIENTED_EDGE('',*,*,#6374,.T.); #8485=ORIENTED_EDGE('',*,*,#6377,.F.); #8486=ORIENTED_EDGE('',*,*,#6385,.T.); #8487=ORIENTED_EDGE('',*,*,#6389,.F.); #8488=ORIENTED_EDGE('',*,*,#6412,.F.); #8489=ORIENTED_EDGE('',*,*,#6411,.F.); #8490=ORIENTED_EDGE('',*,*,#6409,.F.); #8491=ORIENTED_EDGE('',*,*,#6413,.F.); #8492=ORIENTED_EDGE('',*,*,#6410,.T.); #8493=ORIENTED_EDGE('',*,*,#6412,.T.); #8494=ORIENTED_EDGE('',*,*,#6414,.T.); #8495=ORIENTED_EDGE('',*,*,#6365,.T.); #8496=ORIENTED_EDGE('',*,*,#6355,.T.); #8497=ORIENTED_EDGE('',*,*,#6322,.T.); #8498=ORIENTED_EDGE('',*,*,#6359,.T.); #8499=ORIENTED_EDGE('',*,*,#6415,.T.); #8500=ORIENTED_EDGE('',*,*,#6351,.T.); #8501=ORIENTED_EDGE('',*,*,#6415,.F.); #8502=ORIENTED_EDGE('',*,*,#6362,.T.); #8503=ORIENTED_EDGE('',*,*,#6364,.F.); #8504=ORIENTED_EDGE('',*,*,#6348,.T.); #8505=ORIENTED_EDGE('',*,*,#6370,.F.); #8506=ORIENTED_EDGE('',*,*,#6366,.T.); #8507=ORIENTED_EDGE('',*,*,#6414,.F.); #8508=ORIENTED_EDGE('',*,*,#6413,.T.); #8509=ORIENTED_EDGE('',*,*,#6408,.F.); #8510=ORIENTED_EDGE('',*,*,#6406,.T.); #8511=ORIENTED_EDGE('',*,*,#6397,.F.); #8512=ORIENTED_EDGE('',*,*,#6400,.T.); #8513=ORIENTED_EDGE('',*,*,#6403,.F.); #8514=ORIENTED_EDGE('',*,*,#6382,.T.); #8515=ORIENTED_EDGE('',*,*,#6379,.T.); #8516=ORIENTED_EDGE('',*,*,#6393,.T.); #8517=ORIENTED_EDGE('',*,*,#6392,.T.); #8518=ORIENTED_EDGE('',*,*,#6387,.T.); #8519=ORIENTED_EDGE('',*,*,#6386,.T.); #8520=ORIENTED_EDGE('',*,*,#6375,.T.); #8521=ORIENTED_EDGE('',*,*,#6372,.T.); #8522=ORIENTED_EDGE('',*,*,#6416,.T.); #8523=ORIENTED_EDGE('',*,*,#6417,.T.); #8524=ORIENTED_EDGE('',*,*,#6418,.T.); #8525=ORIENTED_EDGE('',*,*,#6419,.T.); #8526=ORIENTED_EDGE('',*,*,#6420,.F.); #8527=ORIENTED_EDGE('',*,*,#6421,.F.); #8528=ORIENTED_EDGE('',*,*,#6422,.F.); #8529=ORIENTED_EDGE('',*,*,#6423,.T.); #8530=ORIENTED_EDGE('',*,*,#6424,.F.); #8531=ORIENTED_EDGE('',*,*,#6425,.F.); #8532=ORIENTED_EDGE('',*,*,#6426,.F.); #8533=ORIENTED_EDGE('',*,*,#6427,.T.); #8534=ORIENTED_EDGE('',*,*,#6428,.F.); #8535=ORIENTED_EDGE('',*,*,#6422,.T.); #8536=ORIENTED_EDGE('',*,*,#6429,.F.); #8537=ORIENTED_EDGE('',*,*,#6430,.F.); #8538=ORIENTED_EDGE('',*,*,#6431,.F.); #8539=ORIENTED_EDGE('',*,*,#6432,.F.); #8540=ORIENTED_EDGE('',*,*,#6433,.F.); #8541=ORIENTED_EDGE('',*,*,#6426,.T.); #8542=ORIENTED_EDGE('',*,*,#6434,.F.); #8543=ORIENTED_EDGE('',*,*,#6435,.T.); #8544=ORIENTED_EDGE('',*,*,#6436,.F.); #8545=ORIENTED_EDGE('',*,*,#6437,.F.); #8546=ORIENTED_EDGE('',*,*,#6438,.T.); #8547=ORIENTED_EDGE('',*,*,#6439,.T.); #8548=ORIENTED_EDGE('',*,*,#6440,.T.); #8549=ORIENTED_EDGE('',*,*,#6437,.T.); #8550=ORIENTED_EDGE('',*,*,#6439,.F.); #8551=ORIENTED_EDGE('',*,*,#6441,.F.); #8552=ORIENTED_EDGE('',*,*,#6419,.F.); #8553=ORIENTED_EDGE('',*,*,#6442,.F.); #8554=ORIENTED_EDGE('',*,*,#6443,.T.); #8555=ORIENTED_EDGE('',*,*,#6432,.T.); #8556=ORIENTED_EDGE('',*,*,#6444,.T.); #8557=ORIENTED_EDGE('',*,*,#6445,.T.); #8558=ORIENTED_EDGE('',*,*,#6443,.F.); #8559=ORIENTED_EDGE('',*,*,#6446,.T.); #8560=ORIENTED_EDGE('',*,*,#6447,.T.); #8561=ORIENTED_EDGE('',*,*,#6448,.T.); #8562=ORIENTED_EDGE('',*,*,#6449,.F.); #8563=ORIENTED_EDGE('',*,*,#6450,.T.); #8564=ORIENTED_EDGE('',*,*,#6427,.F.); #8565=ORIENTED_EDGE('',*,*,#6433,.T.); #8566=ORIENTED_EDGE('',*,*,#6449,.T.); #8567=ORIENTED_EDGE('',*,*,#6451,.T.); #8568=ORIENTED_EDGE('',*,*,#6452,.T.); #8569=ORIENTED_EDGE('',*,*,#6453,.T.); #8570=ORIENTED_EDGE('',*,*,#6451,.F.); #8571=ORIENTED_EDGE('',*,*,#6448,.F.); #8572=ORIENTED_EDGE('',*,*,#6454,.T.); #8573=ORIENTED_EDGE('',*,*,#6455,.F.); #8574=ORIENTED_EDGE('',*,*,#6456,.T.); #8575=ORIENTED_EDGE('',*,*,#6457,.T.); #8576=ORIENTED_EDGE('',*,*,#6458,.T.); #8577=ORIENTED_EDGE('',*,*,#6459,.T.); #8578=ORIENTED_EDGE('',*,*,#6457,.F.); #8579=ORIENTED_EDGE('',*,*,#6460,.F.); #8580=ORIENTED_EDGE('',*,*,#6417,.F.); #8581=ORIENTED_EDGE('',*,*,#6461,.F.); #8582=ORIENTED_EDGE('',*,*,#6456,.F.); #8583=ORIENTED_EDGE('',*,*,#6462,.T.); #8584=ORIENTED_EDGE('',*,*,#6423,.F.); #8585=ORIENTED_EDGE('',*,*,#6428,.T.); #8586=ORIENTED_EDGE('',*,*,#6440,.F.); #8587=ORIENTED_EDGE('',*,*,#6442,.T.); #8588=ORIENTED_EDGE('',*,*,#6418,.F.); #8589=ORIENTED_EDGE('',*,*,#6460,.T.); #8590=ORIENTED_EDGE('',*,*,#6463,.F.); #8591=ORIENTED_EDGE('',*,*,#6430,.T.); #8592=ORIENTED_EDGE('',*,*,#6464,.F.); #8593=ORIENTED_EDGE('',*,*,#6465,.T.); #8594=ORIENTED_EDGE('',*,*,#6466,.F.); #8595=ORIENTED_EDGE('',*,*,#6435,.F.); #8596=ORIENTED_EDGE('',*,*,#6467,.F.); #8597=ORIENTED_EDGE('',*,*,#6468,.T.); #8598=ORIENTED_EDGE('',*,*,#6425,.T.); #8599=ORIENTED_EDGE('',*,*,#6469,.T.); #8600=ORIENTED_EDGE('',*,*,#6467,.T.); #8601=ORIENTED_EDGE('',*,*,#6434,.T.); #8602=ORIENTED_EDGE('',*,*,#6421,.T.); #8603=ORIENTED_EDGE('',*,*,#6470,.T.); #8604=ORIENTED_EDGE('',*,*,#6464,.T.); #8605=ORIENTED_EDGE('',*,*,#6429,.T.); #8606=ORIENTED_EDGE('',*,*,#6458,.F.); #8607=ORIENTED_EDGE('',*,*,#6461,.T.); #8608=ORIENTED_EDGE('',*,*,#6416,.F.); #8609=ORIENTED_EDGE('',*,*,#6441,.T.); #8610=ORIENTED_EDGE('',*,*,#6438,.F.); #8611=ORIENTED_EDGE('',*,*,#6436,.T.); #8612=ORIENTED_EDGE('',*,*,#6466,.T.); #8613=ORIENTED_EDGE('',*,*,#6471,.T.); #8614=ORIENTED_EDGE('',*,*,#6462,.F.); #8615=ORIENTED_EDGE('',*,*,#6459,.F.); #8616=ORIENTED_EDGE('',*,*,#6471,.F.); #8617=ORIENTED_EDGE('',*,*,#6468,.F.); #8618=ORIENTED_EDGE('',*,*,#6469,.F.); #8619=ORIENTED_EDGE('',*,*,#6424,.T.); #8620=ORIENTED_EDGE('',*,*,#6450,.F.); #8621=ORIENTED_EDGE('',*,*,#6453,.F.); #8622=ORIENTED_EDGE('',*,*,#6472,.F.); #8623=ORIENTED_EDGE('',*,*,#6465,.F.); #8624=ORIENTED_EDGE('',*,*,#6470,.F.); #8625=ORIENTED_EDGE('',*,*,#6420,.T.); #8626=ORIENTED_EDGE('',*,*,#6445,.F.); #8627=ORIENTED_EDGE('',*,*,#6473,.F.); #8628=ORIENTED_EDGE('',*,*,#6474,.F.); #8629=ORIENTED_EDGE('',*,*,#6446,.F.); #8630=ORIENTED_EDGE('',*,*,#6474,.T.); #8631=ORIENTED_EDGE('',*,*,#6475,.F.); #8632=ORIENTED_EDGE('',*,*,#6454,.F.); #8633=ORIENTED_EDGE('',*,*,#6447,.F.); #8634=ORIENTED_EDGE('',*,*,#6444,.F.); #8635=ORIENTED_EDGE('',*,*,#6431,.T.); #8636=ORIENTED_EDGE('',*,*,#6463,.T.); #8637=ORIENTED_EDGE('',*,*,#6472,.T.); #8638=ORIENTED_EDGE('',*,*,#6452,.F.); #8639=ORIENTED_EDGE('',*,*,#6455,.T.); #8640=ORIENTED_EDGE('',*,*,#6475,.T.); #8641=ORIENTED_EDGE('',*,*,#6473,.T.); #8642=ORIENTED_EDGE('',*,*,#6476,.F.); #8643=ORIENTED_EDGE('',*,*,#6477,.T.); #8644=ORIENTED_EDGE('',*,*,#6478,.T.); #8645=ORIENTED_EDGE('',*,*,#6479,.T.); #8646=ORIENTED_EDGE('',*,*,#6480,.F.); #8647=ORIENTED_EDGE('',*,*,#6481,.T.); #8648=ORIENTED_EDGE('',*,*,#6482,.T.); #8649=ORIENTED_EDGE('',*,*,#6483,.T.); #8650=ORIENTED_EDGE('',*,*,#6484,.T.); #8651=ORIENTED_EDGE('',*,*,#6482,.F.); #8652=ORIENTED_EDGE('',*,*,#6485,.F.); #8653=ORIENTED_EDGE('',*,*,#6486,.F.); #8654=ORIENTED_EDGE('',*,*,#6487,.F.); #8655=ORIENTED_EDGE('',*,*,#6483,.F.); #8656=ORIENTED_EDGE('',*,*,#6484,.F.); #8657=ORIENTED_EDGE('',*,*,#6488,.F.); #8658=ORIENTED_EDGE('',*,*,#6489,.F.); #8659=ORIENTED_EDGE('',*,*,#6479,.F.); #8660=ORIENTED_EDGE('',*,*,#6490,.F.); #8661=ORIENTED_EDGE('',*,*,#6491,.F.); #8662=ORIENTED_EDGE('',*,*,#6492,.F.); #8663=ORIENTED_EDGE('',*,*,#6493,.F.); #8664=ORIENTED_EDGE('',*,*,#6494,.F.); #8665=ORIENTED_EDGE('',*,*,#6495,.F.); #8666=ORIENTED_EDGE('',*,*,#6496,.F.); #8667=ORIENTED_EDGE('',*,*,#6497,.F.); #8668=ORIENTED_EDGE('',*,*,#6498,.F.); #8669=ORIENTED_EDGE('',*,*,#6499,.F.); #8670=ORIENTED_EDGE('',*,*,#6500,.F.); #8671=ORIENTED_EDGE('',*,*,#6501,.T.); #8672=ORIENTED_EDGE('',*,*,#6502,.F.); #8673=ORIENTED_EDGE('',*,*,#6503,.T.); #8674=ORIENTED_EDGE('',*,*,#6504,.F.); #8675=ORIENTED_EDGE('',*,*,#6505,.T.); #8676=ORIENTED_EDGE('',*,*,#6506,.T.); #8677=ORIENTED_EDGE('',*,*,#6495,.T.); #8678=ORIENTED_EDGE('',*,*,#6507,.T.); #8679=ORIENTED_EDGE('',*,*,#6508,.T.); #8680=ORIENTED_EDGE('',*,*,#6509,.T.); #8681=ORIENTED_EDGE('',*,*,#6491,.T.); #8682=ORIENTED_EDGE('',*,*,#6510,.F.); #8683=ORIENTED_EDGE('',*,*,#6498,.T.); #8684=ORIENTED_EDGE('',*,*,#6511,.F.); #8685=ORIENTED_EDGE('',*,*,#6512,.T.); #8686=ORIENTED_EDGE('',*,*,#6511,.T.); #8687=ORIENTED_EDGE('',*,*,#6497,.T.); #8688=ORIENTED_EDGE('',*,*,#6513,.T.); #8689=ORIENTED_EDGE('',*,*,#6514,.T.); #8690=ORIENTED_EDGE('',*,*,#6506,.F.); #8691=ORIENTED_EDGE('',*,*,#6515,.F.); #8692=ORIENTED_EDGE('',*,*,#6513,.F.); #8693=ORIENTED_EDGE('',*,*,#6496,.T.); #8694=ORIENTED_EDGE('',*,*,#6516,.F.); #8695=ORIENTED_EDGE('',*,*,#6492,.T.); #8696=ORIENTED_EDGE('',*,*,#6509,.F.); #8697=ORIENTED_EDGE('',*,*,#6517,.F.); #8698=ORIENTED_EDGE('',*,*,#6478,.F.); #8699=ORIENTED_EDGE('',*,*,#6518,.T.); #8700=ORIENTED_EDGE('',*,*,#6507,.F.); #8701=ORIENTED_EDGE('',*,*,#6490,.T.); #8702=ORIENTED_EDGE('',*,*,#6519,.F.); #8703=ORIENTED_EDGE('',*,*,#6493,.T.); #8704=ORIENTED_EDGE('',*,*,#6516,.T.); #8705=ORIENTED_EDGE('',*,*,#6520,.T.); #8706=ORIENTED_EDGE('',*,*,#6521,.F.); #8707=ORIENTED_EDGE('',*,*,#6522,.T.); #8708=ORIENTED_EDGE('',*,*,#6523,.F.); #8709=ORIENTED_EDGE('',*,*,#6524,.T.); #8710=ORIENTED_EDGE('',*,*,#6525,.F.); #8711=ORIENTED_EDGE('',*,*,#6524,.F.); #8712=ORIENTED_EDGE('',*,*,#6526,.F.); #8713=ORIENTED_EDGE('',*,*,#6501,.F.); #8714=ORIENTED_EDGE('',*,*,#6519,.T.); #8715=ORIENTED_EDGE('',*,*,#6525,.T.); #8716=ORIENTED_EDGE('',*,*,#6500,.T.); #8717=ORIENTED_EDGE('',*,*,#6494,.T.); #8718=ORIENTED_EDGE('',*,*,#6527,.F.); #8719=ORIENTED_EDGE('',*,*,#6528,.F.); #8720=ORIENTED_EDGE('',*,*,#6485,.T.); #8721=ORIENTED_EDGE('',*,*,#6481,.F.); #8722=ORIENTED_EDGE('',*,*,#6529,.T.); #8723=ORIENTED_EDGE('',*,*,#6527,.T.); #8724=ORIENTED_EDGE('',*,*,#6480,.T.); #8725=ORIENTED_EDGE('',*,*,#6489,.T.); #8726=ORIENTED_EDGE('',*,*,#6530,.F.); #8727=ORIENTED_EDGE('',*,*,#6488,.T.); #8728=ORIENTED_EDGE('',*,*,#6486,.T.); #8729=ORIENTED_EDGE('',*,*,#6528,.T.); #8730=ORIENTED_EDGE('',*,*,#6529,.F.); #8731=ORIENTED_EDGE('',*,*,#6499,.T.); #8732=ORIENTED_EDGE('',*,*,#6510,.T.); #8733=ORIENTED_EDGE('',*,*,#6531,.T.); #8734=ORIENTED_EDGE('',*,*,#6532,.F.); #8735=ORIENTED_EDGE('',*,*,#6520,.F.); #8736=ORIENTED_EDGE('',*,*,#6517,.T.); #8737=ORIENTED_EDGE('',*,*,#6508,.F.); #8738=ORIENTED_EDGE('',*,*,#6518,.F.); #8739=ORIENTED_EDGE('',*,*,#6477,.F.); #8740=ORIENTED_EDGE('',*,*,#6533,.F.); #8741=ORIENTED_EDGE('',*,*,#6531,.F.); #8742=ORIENTED_EDGE('',*,*,#6512,.F.); #8743=ORIENTED_EDGE('',*,*,#6514,.F.); #8744=ORIENTED_EDGE('',*,*,#6515,.T.); #8745=ORIENTED_EDGE('',*,*,#6505,.F.); #8746=ORIENTED_EDGE('',*,*,#6530,.T.); #8747=ORIENTED_EDGE('',*,*,#6533,.T.); #8748=ORIENTED_EDGE('',*,*,#6476,.T.); #8749=ORIENTED_EDGE('',*,*,#6487,.T.); #8750=ORIENTED_EDGE('',*,*,#6534,.F.); #8751=ORIENTED_EDGE('',*,*,#6503,.F.); #8752=ORIENTED_EDGE('',*,*,#6535,.F.); #8753=ORIENTED_EDGE('',*,*,#6522,.F.); #8754=ORIENTED_EDGE('',*,*,#6504,.T.); #8755=ORIENTED_EDGE('',*,*,#6534,.T.); #8756=ORIENTED_EDGE('',*,*,#6521,.T.); #8757=ORIENTED_EDGE('',*,*,#6532,.T.); #8758=ORIENTED_EDGE('',*,*,#6502,.T.); #8759=ORIENTED_EDGE('',*,*,#6526,.T.); #8760=ORIENTED_EDGE('',*,*,#6523,.T.); #8761=ORIENTED_EDGE('',*,*,#6535,.T.); #8762=ORIENTED_EDGE('',*,*,#6536,.T.); #8763=ORIENTED_EDGE('',*,*,#6537,.T.); #8764=ORIENTED_EDGE('',*,*,#6538,.T.); #8765=ORIENTED_EDGE('',*,*,#6539,.T.); #8766=ORIENTED_EDGE('',*,*,#6540,.T.); #8767=ORIENTED_EDGE('',*,*,#6541,.T.); #8768=ORIENTED_EDGE('',*,*,#6542,.T.); #8769=ORIENTED_EDGE('',*,*,#6543,.T.); #8770=ORIENTED_EDGE('',*,*,#6541,.F.); #8771=ORIENTED_EDGE('',*,*,#6544,.F.); #8772=ORIENTED_EDGE('',*,*,#6539,.F.); #8773=ORIENTED_EDGE('',*,*,#6545,.F.); #8774=ORIENTED_EDGE('',*,*,#6546,.T.); #8775=ORIENTED_EDGE('',*,*,#6547,.T.); #8776=ORIENTED_EDGE('',*,*,#6548,.T.); #8777=ORIENTED_EDGE('',*,*,#6549,.T.); #8778=ORIENTED_EDGE('',*,*,#6543,.F.); #8779=ORIENTED_EDGE('',*,*,#6550,.F.); #8780=ORIENTED_EDGE('',*,*,#6551,.T.); #8781=ORIENTED_EDGE('',*,*,#6552,.F.); #8782=ORIENTED_EDGE('',*,*,#6553,.F.); #8783=ORIENTED_EDGE('',*,*,#6554,.F.); #8784=ORIENTED_EDGE('',*,*,#6547,.F.); #8785=ORIENTED_EDGE('',*,*,#6555,.F.); #8786=ORIENTED_EDGE('',*,*,#6556,.F.); #8787=ORIENTED_EDGE('',*,*,#6557,.F.); #8788=ORIENTED_EDGE('',*,*,#6558,.T.); #8789=ORIENTED_EDGE('',*,*,#6559,.F.); #8790=ORIENTED_EDGE('',*,*,#6546,.F.); #8791=ORIENTED_EDGE('',*,*,#6560,.T.); #8792=ORIENTED_EDGE('',*,*,#6561,.T.); #8793=ORIENTED_EDGE('',*,*,#6562,.T.); #8794=ORIENTED_EDGE('',*,*,#6563,.F.); #8795=ORIENTED_EDGE('',*,*,#6564,.T.); #8796=ORIENTED_EDGE('',*,*,#6565,.T.); #8797=ORIENTED_EDGE('',*,*,#6555,.T.); #8798=ORIENTED_EDGE('',*,*,#6563,.T.); #8799=ORIENTED_EDGE('',*,*,#6566,.T.); #8800=ORIENTED_EDGE('',*,*,#6567,.T.); #8801=ORIENTED_EDGE('',*,*,#6568,.T.); #8802=ORIENTED_EDGE('',*,*,#6566,.F.); #8803=ORIENTED_EDGE('',*,*,#6562,.F.); #8804=ORIENTED_EDGE('',*,*,#6569,.T.); #8805=ORIENTED_EDGE('',*,*,#6570,.F.); #8806=ORIENTED_EDGE('',*,*,#6571,.T.); #8807=ORIENTED_EDGE('',*,*,#6572,.T.); #8808=ORIENTED_EDGE('',*,*,#6573,.T.); #8809=ORIENTED_EDGE('',*,*,#6574,.T.); #8810=ORIENTED_EDGE('',*,*,#6572,.F.); #8811=ORIENTED_EDGE('',*,*,#6575,.F.); #8812=ORIENTED_EDGE('',*,*,#6537,.F.); #8813=ORIENTED_EDGE('',*,*,#6576,.F.); #8814=ORIENTED_EDGE('',*,*,#6571,.F.); #8815=ORIENTED_EDGE('',*,*,#6577,.T.); #8816=ORIENTED_EDGE('',*,*,#6578,.T.); #8817=ORIENTED_EDGE('',*,*,#6550,.T.); #8818=ORIENTED_EDGE('',*,*,#6542,.F.); #8819=ORIENTED_EDGE('',*,*,#6545,.T.); #8820=ORIENTED_EDGE('',*,*,#6538,.F.); #8821=ORIENTED_EDGE('',*,*,#6575,.T.); #8822=ORIENTED_EDGE('',*,*,#6579,.F.); #8823=ORIENTED_EDGE('',*,*,#6553,.T.); #8824=ORIENTED_EDGE('',*,*,#6580,.F.); #8825=ORIENTED_EDGE('',*,*,#6581,.T.); #8826=ORIENTED_EDGE('',*,*,#6578,.F.); #8827=ORIENTED_EDGE('',*,*,#6582,.T.); #8828=ORIENTED_EDGE('',*,*,#6583,.F.); #8829=ORIENTED_EDGE('',*,*,#6551,.F.); #8830=ORIENTED_EDGE('',*,*,#6584,.F.); #8831=ORIENTED_EDGE('',*,*,#6558,.F.); #8832=ORIENTED_EDGE('',*,*,#6585,.F.); #8833=ORIENTED_EDGE('',*,*,#6586,.T.); #8834=ORIENTED_EDGE('',*,*,#6587,.T.); #8835=ORIENTED_EDGE('',*,*,#6588,.T.); #8836=ORIENTED_EDGE('',*,*,#6585,.T.); #8837=ORIENTED_EDGE('',*,*,#6557,.T.); #8838=ORIENTED_EDGE('',*,*,#6565,.F.); #8839=ORIENTED_EDGE('',*,*,#6589,.T.); #8840=ORIENTED_EDGE('',*,*,#6587,.F.); #8841=ORIENTED_EDGE('',*,*,#6556,.T.); #8842=ORIENTED_EDGE('',*,*,#6580,.T.); #8843=ORIENTED_EDGE('',*,*,#6552,.T.); #8844=ORIENTED_EDGE('',*,*,#6583,.T.); #8845=ORIENTED_EDGE('',*,*,#6590,.T.); #8846=ORIENTED_EDGE('',*,*,#6573,.F.); #8847=ORIENTED_EDGE('',*,*,#6576,.T.); #8848=ORIENTED_EDGE('',*,*,#6536,.F.); #8849=ORIENTED_EDGE('',*,*,#6544,.T.); #8850=ORIENTED_EDGE('',*,*,#6540,.F.); #8851=ORIENTED_EDGE('',*,*,#6559,.T.); #8852=ORIENTED_EDGE('',*,*,#6584,.T.); #8853=ORIENTED_EDGE('',*,*,#6591,.T.); #8854=ORIENTED_EDGE('',*,*,#6568,.F.); #8855=ORIENTED_EDGE('',*,*,#6592,.F.); #8856=ORIENTED_EDGE('',*,*,#6581,.F.); #8857=ORIENTED_EDGE('',*,*,#6590,.F.); #8858=ORIENTED_EDGE('',*,*,#6582,.F.); #8859=ORIENTED_EDGE('',*,*,#6577,.F.); #8860=ORIENTED_EDGE('',*,*,#6574,.F.); #8861=ORIENTED_EDGE('',*,*,#6591,.F.); #8862=ORIENTED_EDGE('',*,*,#6586,.F.); #8863=ORIENTED_EDGE('',*,*,#6588,.F.); #8864=ORIENTED_EDGE('',*,*,#6589,.F.); #8865=ORIENTED_EDGE('',*,*,#6564,.F.); #8866=ORIENTED_EDGE('',*,*,#6549,.F.); #8867=ORIENTED_EDGE('',*,*,#6593,.F.); #8868=ORIENTED_EDGE('',*,*,#6594,.F.); #8869=ORIENTED_EDGE('',*,*,#6560,.F.); #8870=ORIENTED_EDGE('',*,*,#6594,.T.); #8871=ORIENTED_EDGE('',*,*,#6595,.F.); #8872=ORIENTED_EDGE('',*,*,#6569,.F.); #8873=ORIENTED_EDGE('',*,*,#6561,.F.); #8874=ORIENTED_EDGE('',*,*,#6548,.F.); #8875=ORIENTED_EDGE('',*,*,#6554,.T.); #8876=ORIENTED_EDGE('',*,*,#6579,.T.); #8877=ORIENTED_EDGE('',*,*,#6592,.T.); #8878=ORIENTED_EDGE('',*,*,#6567,.F.); #8879=ORIENTED_EDGE('',*,*,#6570,.T.); #8880=ORIENTED_EDGE('',*,*,#6595,.T.); #8881=ORIENTED_EDGE('',*,*,#6593,.T.); #8882=ORIENTED_EDGE('',*,*,#6596,.F.); #8883=ORIENTED_EDGE('',*,*,#6597,.T.); #8884=ORIENTED_EDGE('',*,*,#6598,.F.); #8885=ORIENTED_EDGE('',*,*,#6599,.T.); #8886=ORIENTED_EDGE('',*,*,#6600,.F.); #8887=ORIENTED_EDGE('',*,*,#6601,.T.); #8888=ORIENTED_EDGE('',*,*,#6602,.T.); #8889=ORIENTED_EDGE('',*,*,#6603,.T.); #8890=ORIENTED_EDGE('',*,*,#6604,.T.); #8891=ORIENTED_EDGE('',*,*,#6602,.F.); #8892=ORIENTED_EDGE('',*,*,#6605,.F.); #8893=ORIENTED_EDGE('',*,*,#6606,.F.); #8894=ORIENTED_EDGE('',*,*,#6607,.F.); #8895=ORIENTED_EDGE('',*,*,#6603,.F.); #8896=ORIENTED_EDGE('',*,*,#6604,.F.); #8897=ORIENTED_EDGE('',*,*,#6608,.F.); #8898=ORIENTED_EDGE('',*,*,#6609,.T.); #8899=ORIENTED_EDGE('',*,*,#6610,.F.); #8900=ORIENTED_EDGE('',*,*,#6611,.F.); #8901=ORIENTED_EDGE('',*,*,#6612,.F.); #8902=ORIENTED_EDGE('',*,*,#6613,.F.); #8903=ORIENTED_EDGE('',*,*,#6599,.F.); #8904=ORIENTED_EDGE('',*,*,#6614,.T.); #8905=ORIENTED_EDGE('',*,*,#6615,.F.); #8906=ORIENTED_EDGE('',*,*,#6616,.F.); #8907=ORIENTED_EDGE('',*,*,#6617,.F.); #8908=ORIENTED_EDGE('',*,*,#6618,.F.); #8909=ORIENTED_EDGE('',*,*,#6619,.F.); #8910=ORIENTED_EDGE('',*,*,#6620,.F.); #8911=ORIENTED_EDGE('',*,*,#6621,.T.); #8912=ORIENTED_EDGE('',*,*,#6622,.F.); #8913=ORIENTED_EDGE('',*,*,#6623,.T.); #8914=ORIENTED_EDGE('',*,*,#6624,.F.); #8915=ORIENTED_EDGE('',*,*,#6625,.T.); #8916=ORIENTED_EDGE('',*,*,#6626,.T.); #8917=ORIENTED_EDGE('',*,*,#6619,.T.); #8918=ORIENTED_EDGE('',*,*,#6627,.F.); #8919=ORIENTED_EDGE('',*,*,#6611,.T.); #8920=ORIENTED_EDGE('',*,*,#6628,.F.); #8921=ORIENTED_EDGE('',*,*,#6629,.T.); #8922=ORIENTED_EDGE('',*,*,#6630,.F.); #8923=ORIENTED_EDGE('',*,*,#6616,.T.); #8924=ORIENTED_EDGE('',*,*,#6631,.F.); #8925=ORIENTED_EDGE('',*,*,#6632,.F.); #8926=ORIENTED_EDGE('',*,*,#6633,.F.); #8927=ORIENTED_EDGE('',*,*,#6617,.T.); #8928=ORIENTED_EDGE('',*,*,#6630,.T.); #8929=ORIENTED_EDGE('',*,*,#6634,.T.); #8930=ORIENTED_EDGE('',*,*,#6635,.F.); #8931=ORIENTED_EDGE('',*,*,#6636,.T.); #8932=ORIENTED_EDGE('',*,*,#6637,.F.); #8933=ORIENTED_EDGE('',*,*,#6638,.T.); #8934=ORIENTED_EDGE('',*,*,#6639,.F.); #8935=ORIENTED_EDGE('',*,*,#6638,.F.); #8936=ORIENTED_EDGE('',*,*,#6640,.F.); #8937=ORIENTED_EDGE('',*,*,#6621,.F.); #8938=ORIENTED_EDGE('',*,*,#6633,.T.); #8939=ORIENTED_EDGE('',*,*,#6639,.T.); #8940=ORIENTED_EDGE('',*,*,#6620,.T.); #8941=ORIENTED_EDGE('',*,*,#6618,.T.); #8942=ORIENTED_EDGE('',*,*,#6641,.F.); #8943=ORIENTED_EDGE('',*,*,#6642,.F.); #8944=ORIENTED_EDGE('',*,*,#6605,.T.); #8945=ORIENTED_EDGE('',*,*,#6601,.F.); #8946=ORIENTED_EDGE('',*,*,#6643,.T.); #8947=ORIENTED_EDGE('',*,*,#6641,.T.); #8948=ORIENTED_EDGE('',*,*,#6600,.T.); #8949=ORIENTED_EDGE('',*,*,#6613,.T.); #8950=ORIENTED_EDGE('',*,*,#6644,.F.); #8951=ORIENTED_EDGE('',*,*,#6608,.T.); #8952=ORIENTED_EDGE('',*,*,#6606,.T.); #8953=ORIENTED_EDGE('',*,*,#6642,.T.); #8954=ORIENTED_EDGE('',*,*,#6643,.F.); #8955=ORIENTED_EDGE('',*,*,#6612,.T.); #8956=ORIENTED_EDGE('',*,*,#6627,.T.); #8957=ORIENTED_EDGE('',*,*,#6645,.T.); #8958=ORIENTED_EDGE('',*,*,#6644,.T.); #8959=ORIENTED_EDGE('',*,*,#6646,.T.); #8960=ORIENTED_EDGE('',*,*,#6596,.T.); #8961=ORIENTED_EDGE('',*,*,#6607,.T.); #8962=ORIENTED_EDGE('',*,*,#6647,.F.); #8963=ORIENTED_EDGE('',*,*,#6623,.F.); #8964=ORIENTED_EDGE('',*,*,#6648,.F.); #8965=ORIENTED_EDGE('',*,*,#6636,.F.); #8966=ORIENTED_EDGE('',*,*,#6624,.T.); #8967=ORIENTED_EDGE('',*,*,#6647,.T.); #8968=ORIENTED_EDGE('',*,*,#6635,.T.); #8969=ORIENTED_EDGE('',*,*,#6649,.T.); #8970=ORIENTED_EDGE('',*,*,#6650,.T.); #8971=ORIENTED_EDGE('',*,*,#6625,.F.); #8972=ORIENTED_EDGE('',*,*,#6649,.F.); #8973=ORIENTED_EDGE('',*,*,#6634,.F.); #8974=ORIENTED_EDGE('',*,*,#6632,.T.); #8975=ORIENTED_EDGE('',*,*,#6651,.F.); #8976=ORIENTED_EDGE('',*,*,#6652,.T.); #8977=ORIENTED_EDGE('',*,*,#6597,.F.); #8978=ORIENTED_EDGE('',*,*,#6646,.F.); #8979=ORIENTED_EDGE('',*,*,#6645,.F.); #8980=ORIENTED_EDGE('',*,*,#6629,.F.); #8981=ORIENTED_EDGE('',*,*,#6653,.F.); #8982=ORIENTED_EDGE('',*,*,#6654,.T.); #8983=ORIENTED_EDGE('',*,*,#6651,.T.); #8984=ORIENTED_EDGE('',*,*,#6631,.T.); #8985=ORIENTED_EDGE('',*,*,#6615,.T.); #8986=ORIENTED_EDGE('',*,*,#6655,.T.); #8987=ORIENTED_EDGE('',*,*,#6653,.T.); #8988=ORIENTED_EDGE('',*,*,#6628,.T.); #8989=ORIENTED_EDGE('',*,*,#6610,.T.); #8990=ORIENTED_EDGE('',*,*,#6614,.F.); #8991=ORIENTED_EDGE('',*,*,#6598,.T.); #8992=ORIENTED_EDGE('',*,*,#6652,.F.); #8993=ORIENTED_EDGE('',*,*,#6654,.F.); #8994=ORIENTED_EDGE('',*,*,#6609,.F.); #8995=ORIENTED_EDGE('',*,*,#6626,.F.); #8996=ORIENTED_EDGE('',*,*,#6650,.F.); #8997=ORIENTED_EDGE('',*,*,#6655,.F.); #8998=ORIENTED_EDGE('',*,*,#6648,.T.); #8999=ORIENTED_EDGE('',*,*,#6622,.T.); #9000=ORIENTED_EDGE('',*,*,#6640,.T.); #9001=ORIENTED_EDGE('',*,*,#6637,.T.); #9002=ORIENTED_EDGE('',*,*,#6656,.T.); #9003=ORIENTED_EDGE('',*,*,#6657,.T.); #9004=ORIENTED_EDGE('',*,*,#6658,.T.); #9005=ORIENTED_EDGE('',*,*,#6659,.T.); #9006=ORIENTED_EDGE('',*,*,#6660,.T.); #9007=ORIENTED_EDGE('',*,*,#6661,.T.); #9008=ORIENTED_EDGE('',*,*,#6662,.T.); #9009=ORIENTED_EDGE('',*,*,#6663,.T.); #9010=ORIENTED_EDGE('',*,*,#6661,.F.); #9011=ORIENTED_EDGE('',*,*,#6664,.F.); #9012=ORIENTED_EDGE('',*,*,#6659,.F.); #9013=ORIENTED_EDGE('',*,*,#6665,.F.); #9014=ORIENTED_EDGE('',*,*,#6666,.T.); #9015=ORIENTED_EDGE('',*,*,#6667,.T.); #9016=ORIENTED_EDGE('',*,*,#6668,.T.); #9017=ORIENTED_EDGE('',*,*,#6669,.T.); #9018=ORIENTED_EDGE('',*,*,#6663,.F.); #9019=ORIENTED_EDGE('',*,*,#6670,.F.); #9020=ORIENTED_EDGE('',*,*,#6671,.T.); #9021=ORIENTED_EDGE('',*,*,#6672,.F.); #9022=ORIENTED_EDGE('',*,*,#6673,.F.); #9023=ORIENTED_EDGE('',*,*,#6674,.F.); #9024=ORIENTED_EDGE('',*,*,#6667,.F.); #9025=ORIENTED_EDGE('',*,*,#6675,.F.); #9026=ORIENTED_EDGE('',*,*,#6676,.F.); #9027=ORIENTED_EDGE('',*,*,#6677,.F.); #9028=ORIENTED_EDGE('',*,*,#6678,.T.); #9029=ORIENTED_EDGE('',*,*,#6679,.F.); #9030=ORIENTED_EDGE('',*,*,#6666,.F.); #9031=ORIENTED_EDGE('',*,*,#6680,.T.); #9032=ORIENTED_EDGE('',*,*,#6681,.T.); #9033=ORIENTED_EDGE('',*,*,#6682,.T.); #9034=ORIENTED_EDGE('',*,*,#6683,.F.); #9035=ORIENTED_EDGE('',*,*,#6684,.T.); #9036=ORIENTED_EDGE('',*,*,#6685,.T.); #9037=ORIENTED_EDGE('',*,*,#6675,.T.); #9038=ORIENTED_EDGE('',*,*,#6683,.T.); #9039=ORIENTED_EDGE('',*,*,#6686,.T.); #9040=ORIENTED_EDGE('',*,*,#6687,.T.); #9041=ORIENTED_EDGE('',*,*,#6688,.T.); #9042=ORIENTED_EDGE('',*,*,#6686,.F.); #9043=ORIENTED_EDGE('',*,*,#6682,.F.); #9044=ORIENTED_EDGE('',*,*,#6689,.T.); #9045=ORIENTED_EDGE('',*,*,#6690,.F.); #9046=ORIENTED_EDGE('',*,*,#6691,.T.); #9047=ORIENTED_EDGE('',*,*,#6692,.T.); #9048=ORIENTED_EDGE('',*,*,#6693,.T.); #9049=ORIENTED_EDGE('',*,*,#6694,.T.); #9050=ORIENTED_EDGE('',*,*,#6692,.F.); #9051=ORIENTED_EDGE('',*,*,#6695,.F.); #9052=ORIENTED_EDGE('',*,*,#6657,.F.); #9053=ORIENTED_EDGE('',*,*,#6696,.F.); #9054=ORIENTED_EDGE('',*,*,#6691,.F.); #9055=ORIENTED_EDGE('',*,*,#6697,.T.); #9056=ORIENTED_EDGE('',*,*,#6698,.T.); #9057=ORIENTED_EDGE('',*,*,#6670,.T.); #9058=ORIENTED_EDGE('',*,*,#6662,.F.); #9059=ORIENTED_EDGE('',*,*,#6665,.T.); #9060=ORIENTED_EDGE('',*,*,#6658,.F.); #9061=ORIENTED_EDGE('',*,*,#6695,.T.); #9062=ORIENTED_EDGE('',*,*,#6699,.F.); #9063=ORIENTED_EDGE('',*,*,#6673,.T.); #9064=ORIENTED_EDGE('',*,*,#6700,.F.); #9065=ORIENTED_EDGE('',*,*,#6701,.T.); #9066=ORIENTED_EDGE('',*,*,#6698,.F.); #9067=ORIENTED_EDGE('',*,*,#6702,.T.); #9068=ORIENTED_EDGE('',*,*,#6703,.F.); #9069=ORIENTED_EDGE('',*,*,#6671,.F.); #9070=ORIENTED_EDGE('',*,*,#6704,.F.); #9071=ORIENTED_EDGE('',*,*,#6678,.F.); #9072=ORIENTED_EDGE('',*,*,#6705,.F.); #9073=ORIENTED_EDGE('',*,*,#6706,.T.); #9074=ORIENTED_EDGE('',*,*,#6707,.T.); #9075=ORIENTED_EDGE('',*,*,#6708,.T.); #9076=ORIENTED_EDGE('',*,*,#6705,.T.); #9077=ORIENTED_EDGE('',*,*,#6677,.T.); #9078=ORIENTED_EDGE('',*,*,#6685,.F.); #9079=ORIENTED_EDGE('',*,*,#6709,.T.); #9080=ORIENTED_EDGE('',*,*,#6707,.F.); #9081=ORIENTED_EDGE('',*,*,#6676,.T.); #9082=ORIENTED_EDGE('',*,*,#6700,.T.); #9083=ORIENTED_EDGE('',*,*,#6672,.T.); #9084=ORIENTED_EDGE('',*,*,#6703,.T.); #9085=ORIENTED_EDGE('',*,*,#6710,.T.); #9086=ORIENTED_EDGE('',*,*,#6693,.F.); #9087=ORIENTED_EDGE('',*,*,#6696,.T.); #9088=ORIENTED_EDGE('',*,*,#6656,.F.); #9089=ORIENTED_EDGE('',*,*,#6664,.T.); #9090=ORIENTED_EDGE('',*,*,#6660,.F.); #9091=ORIENTED_EDGE('',*,*,#6679,.T.); #9092=ORIENTED_EDGE('',*,*,#6704,.T.); #9093=ORIENTED_EDGE('',*,*,#6711,.T.); #9094=ORIENTED_EDGE('',*,*,#6688,.F.); #9095=ORIENTED_EDGE('',*,*,#6712,.F.); #9096=ORIENTED_EDGE('',*,*,#6701,.F.); #9097=ORIENTED_EDGE('',*,*,#6710,.F.); #9098=ORIENTED_EDGE('',*,*,#6702,.F.); #9099=ORIENTED_EDGE('',*,*,#6697,.F.); #9100=ORIENTED_EDGE('',*,*,#6694,.F.); #9101=ORIENTED_EDGE('',*,*,#6711,.F.); #9102=ORIENTED_EDGE('',*,*,#6706,.F.); #9103=ORIENTED_EDGE('',*,*,#6708,.F.); #9104=ORIENTED_EDGE('',*,*,#6709,.F.); #9105=ORIENTED_EDGE('',*,*,#6684,.F.); #9106=ORIENTED_EDGE('',*,*,#6669,.F.); #9107=ORIENTED_EDGE('',*,*,#6713,.F.); #9108=ORIENTED_EDGE('',*,*,#6714,.F.); #9109=ORIENTED_EDGE('',*,*,#6680,.F.); #9110=ORIENTED_EDGE('',*,*,#6714,.T.); #9111=ORIENTED_EDGE('',*,*,#6715,.F.); #9112=ORIENTED_EDGE('',*,*,#6689,.F.); #9113=ORIENTED_EDGE('',*,*,#6681,.F.); #9114=ORIENTED_EDGE('',*,*,#6668,.F.); #9115=ORIENTED_EDGE('',*,*,#6674,.T.); #9116=ORIENTED_EDGE('',*,*,#6699,.T.); #9117=ORIENTED_EDGE('',*,*,#6712,.T.); #9118=ORIENTED_EDGE('',*,*,#6687,.F.); #9119=ORIENTED_EDGE('',*,*,#6690,.T.); #9120=ORIENTED_EDGE('',*,*,#6715,.T.); #9121=ORIENTED_EDGE('',*,*,#6713,.T.); #9122=ORIENTED_EDGE('',*,*,#6716,.F.); #9123=ORIENTED_EDGE('',*,*,#6717,.T.); #9124=ORIENTED_EDGE('',*,*,#6718,.T.); #9125=ORIENTED_EDGE('',*,*,#6719,.T.); #9126=ORIENTED_EDGE('',*,*,#6720,.F.); #9127=ORIENTED_EDGE('',*,*,#6721,.T.); #9128=ORIENTED_EDGE('',*,*,#6722,.T.); #9129=ORIENTED_EDGE('',*,*,#6723,.T.); #9130=ORIENTED_EDGE('',*,*,#6724,.T.); #9131=ORIENTED_EDGE('',*,*,#6722,.F.); #9132=ORIENTED_EDGE('',*,*,#6725,.F.); #9133=ORIENTED_EDGE('',*,*,#6726,.F.); #9134=ORIENTED_EDGE('',*,*,#6727,.F.); #9135=ORIENTED_EDGE('',*,*,#6723,.F.); #9136=ORIENTED_EDGE('',*,*,#6724,.F.); #9137=ORIENTED_EDGE('',*,*,#6728,.F.); #9138=ORIENTED_EDGE('',*,*,#6729,.F.); #9139=ORIENTED_EDGE('',*,*,#6719,.F.); #9140=ORIENTED_EDGE('',*,*,#6730,.F.); #9141=ORIENTED_EDGE('',*,*,#6731,.F.); #9142=ORIENTED_EDGE('',*,*,#6732,.F.); #9143=ORIENTED_EDGE('',*,*,#6733,.F.); #9144=ORIENTED_EDGE('',*,*,#6734,.F.); #9145=ORIENTED_EDGE('',*,*,#6735,.F.); #9146=ORIENTED_EDGE('',*,*,#6736,.F.); #9147=ORIENTED_EDGE('',*,*,#6737,.F.); #9148=ORIENTED_EDGE('',*,*,#6738,.F.); #9149=ORIENTED_EDGE('',*,*,#6739,.F.); #9150=ORIENTED_EDGE('',*,*,#6740,.F.); #9151=ORIENTED_EDGE('',*,*,#6741,.T.); #9152=ORIENTED_EDGE('',*,*,#6742,.F.); #9153=ORIENTED_EDGE('',*,*,#6743,.T.); #9154=ORIENTED_EDGE('',*,*,#6744,.F.); #9155=ORIENTED_EDGE('',*,*,#6745,.T.); #9156=ORIENTED_EDGE('',*,*,#6746,.T.); #9157=ORIENTED_EDGE('',*,*,#6735,.T.); #9158=ORIENTED_EDGE('',*,*,#6747,.T.); #9159=ORIENTED_EDGE('',*,*,#6748,.T.); #9160=ORIENTED_EDGE('',*,*,#6749,.T.); #9161=ORIENTED_EDGE('',*,*,#6731,.T.); #9162=ORIENTED_EDGE('',*,*,#6750,.F.); #9163=ORIENTED_EDGE('',*,*,#6738,.T.); #9164=ORIENTED_EDGE('',*,*,#6751,.F.); #9165=ORIENTED_EDGE('',*,*,#6752,.T.); #9166=ORIENTED_EDGE('',*,*,#6751,.T.); #9167=ORIENTED_EDGE('',*,*,#6737,.T.); #9168=ORIENTED_EDGE('',*,*,#6753,.T.); #9169=ORIENTED_EDGE('',*,*,#6754,.T.); #9170=ORIENTED_EDGE('',*,*,#6746,.F.); #9171=ORIENTED_EDGE('',*,*,#6755,.F.); #9172=ORIENTED_EDGE('',*,*,#6753,.F.); #9173=ORIENTED_EDGE('',*,*,#6736,.T.); #9174=ORIENTED_EDGE('',*,*,#6756,.F.); #9175=ORIENTED_EDGE('',*,*,#6732,.T.); #9176=ORIENTED_EDGE('',*,*,#6749,.F.); #9177=ORIENTED_EDGE('',*,*,#6757,.F.); #9178=ORIENTED_EDGE('',*,*,#6718,.F.); #9179=ORIENTED_EDGE('',*,*,#6758,.T.); #9180=ORIENTED_EDGE('',*,*,#6747,.F.); #9181=ORIENTED_EDGE('',*,*,#6730,.T.); #9182=ORIENTED_EDGE('',*,*,#6759,.F.); #9183=ORIENTED_EDGE('',*,*,#6733,.T.); #9184=ORIENTED_EDGE('',*,*,#6756,.T.); #9185=ORIENTED_EDGE('',*,*,#6760,.T.); #9186=ORIENTED_EDGE('',*,*,#6761,.F.); #9187=ORIENTED_EDGE('',*,*,#6762,.T.); #9188=ORIENTED_EDGE('',*,*,#6763,.F.); #9189=ORIENTED_EDGE('',*,*,#6764,.T.); #9190=ORIENTED_EDGE('',*,*,#6765,.F.); #9191=ORIENTED_EDGE('',*,*,#6764,.F.); #9192=ORIENTED_EDGE('',*,*,#6766,.F.); #9193=ORIENTED_EDGE('',*,*,#6741,.F.); #9194=ORIENTED_EDGE('',*,*,#6759,.T.); #9195=ORIENTED_EDGE('',*,*,#6765,.T.); #9196=ORIENTED_EDGE('',*,*,#6740,.T.); #9197=ORIENTED_EDGE('',*,*,#6734,.T.); #9198=ORIENTED_EDGE('',*,*,#6767,.F.); #9199=ORIENTED_EDGE('',*,*,#6768,.F.); #9200=ORIENTED_EDGE('',*,*,#6725,.T.); #9201=ORIENTED_EDGE('',*,*,#6721,.F.); #9202=ORIENTED_EDGE('',*,*,#6769,.T.); #9203=ORIENTED_EDGE('',*,*,#6767,.T.); #9204=ORIENTED_EDGE('',*,*,#6720,.T.); #9205=ORIENTED_EDGE('',*,*,#6729,.T.); #9206=ORIENTED_EDGE('',*,*,#6770,.F.); #9207=ORIENTED_EDGE('',*,*,#6728,.T.); #9208=ORIENTED_EDGE('',*,*,#6726,.T.); #9209=ORIENTED_EDGE('',*,*,#6768,.T.); #9210=ORIENTED_EDGE('',*,*,#6769,.F.); #9211=ORIENTED_EDGE('',*,*,#6739,.T.); #9212=ORIENTED_EDGE('',*,*,#6750,.T.); #9213=ORIENTED_EDGE('',*,*,#6771,.T.); #9214=ORIENTED_EDGE('',*,*,#6772,.F.); #9215=ORIENTED_EDGE('',*,*,#6760,.F.); #9216=ORIENTED_EDGE('',*,*,#6757,.T.); #9217=ORIENTED_EDGE('',*,*,#6748,.F.); #9218=ORIENTED_EDGE('',*,*,#6758,.F.); #9219=ORIENTED_EDGE('',*,*,#6717,.F.); #9220=ORIENTED_EDGE('',*,*,#6773,.F.); #9221=ORIENTED_EDGE('',*,*,#6771,.F.); #9222=ORIENTED_EDGE('',*,*,#6752,.F.); #9223=ORIENTED_EDGE('',*,*,#6754,.F.); #9224=ORIENTED_EDGE('',*,*,#6755,.T.); #9225=ORIENTED_EDGE('',*,*,#6745,.F.); #9226=ORIENTED_EDGE('',*,*,#6770,.T.); #9227=ORIENTED_EDGE('',*,*,#6773,.T.); #9228=ORIENTED_EDGE('',*,*,#6716,.T.); #9229=ORIENTED_EDGE('',*,*,#6727,.T.); #9230=ORIENTED_EDGE('',*,*,#6774,.F.); #9231=ORIENTED_EDGE('',*,*,#6743,.F.); #9232=ORIENTED_EDGE('',*,*,#6775,.F.); #9233=ORIENTED_EDGE('',*,*,#6762,.F.); #9234=ORIENTED_EDGE('',*,*,#6744,.T.); #9235=ORIENTED_EDGE('',*,*,#6774,.T.); #9236=ORIENTED_EDGE('',*,*,#6761,.T.); #9237=ORIENTED_EDGE('',*,*,#6772,.T.); #9238=ORIENTED_EDGE('',*,*,#6742,.T.); #9239=ORIENTED_EDGE('',*,*,#6766,.T.); #9240=ORIENTED_EDGE('',*,*,#6763,.T.); #9241=ORIENTED_EDGE('',*,*,#6775,.T.); #9242=ORIENTED_EDGE('',*,*,#6776,.F.); #9243=ORIENTED_EDGE('',*,*,#6777,.T.); #9244=ORIENTED_EDGE('',*,*,#6778,.F.); #9245=ORIENTED_EDGE('',*,*,#6779,.F.); #9246=ORIENTED_EDGE('',*,*,#6780,.F.); #9247=ORIENTED_EDGE('',*,*,#6779,.T.); #9248=ORIENTED_EDGE('',*,*,#6781,.F.); #9249=ORIENTED_EDGE('',*,*,#6782,.F.); #9250=ORIENTED_EDGE('',*,*,#6783,.F.); #9251=ORIENTED_EDGE('',*,*,#6782,.T.); #9252=ORIENTED_EDGE('',*,*,#6784,.F.); #9253=ORIENTED_EDGE('',*,*,#6785,.F.); #9254=ORIENTED_EDGE('',*,*,#6786,.F.); #9255=ORIENTED_EDGE('',*,*,#6785,.T.); #9256=ORIENTED_EDGE('',*,*,#6787,.F.); #9257=ORIENTED_EDGE('',*,*,#6788,.F.); #9258=ORIENTED_EDGE('',*,*,#6789,.F.); #9259=ORIENTED_EDGE('',*,*,#6788,.T.); #9260=ORIENTED_EDGE('',*,*,#6790,.F.); #9261=ORIENTED_EDGE('',*,*,#6791,.F.); #9262=ORIENTED_EDGE('',*,*,#6792,.F.); #9263=ORIENTED_EDGE('',*,*,#6791,.T.); #9264=ORIENTED_EDGE('',*,*,#6793,.F.); #9265=ORIENTED_EDGE('',*,*,#6794,.F.); #9266=ORIENTED_EDGE('',*,*,#6795,.F.); #9267=ORIENTED_EDGE('',*,*,#6794,.T.); #9268=ORIENTED_EDGE('',*,*,#6796,.F.); #9269=ORIENTED_EDGE('',*,*,#6797,.F.); #9270=ORIENTED_EDGE('',*,*,#6798,.F.); #9271=ORIENTED_EDGE('',*,*,#6797,.T.); #9272=ORIENTED_EDGE('',*,*,#6799,.F.); #9273=ORIENTED_EDGE('',*,*,#6800,.F.); #9274=ORIENTED_EDGE('',*,*,#6801,.F.); #9275=ORIENTED_EDGE('',*,*,#6800,.T.); #9276=ORIENTED_EDGE('',*,*,#6802,.F.); #9277=ORIENTED_EDGE('',*,*,#6803,.F.); #9278=ORIENTED_EDGE('',*,*,#6804,.F.); #9279=ORIENTED_EDGE('',*,*,#6803,.T.); #9280=ORIENTED_EDGE('',*,*,#6805,.F.); #9281=ORIENTED_EDGE('',*,*,#6806,.F.); #9282=ORIENTED_EDGE('',*,*,#6807,.F.); #9283=ORIENTED_EDGE('',*,*,#6806,.T.); #9284=ORIENTED_EDGE('',*,*,#6808,.F.); #9285=ORIENTED_EDGE('',*,*,#6809,.F.); #9286=ORIENTED_EDGE('',*,*,#6810,.F.); #9287=ORIENTED_EDGE('',*,*,#6809,.T.); #9288=ORIENTED_EDGE('',*,*,#6811,.F.); #9289=ORIENTED_EDGE('',*,*,#6812,.F.); #9290=ORIENTED_EDGE('',*,*,#6813,.F.); #9291=ORIENTED_EDGE('',*,*,#6812,.T.); #9292=ORIENTED_EDGE('',*,*,#6814,.F.); #9293=ORIENTED_EDGE('',*,*,#6815,.F.); #9294=ORIENTED_EDGE('',*,*,#6816,.F.); #9295=ORIENTED_EDGE('',*,*,#6815,.T.); #9296=ORIENTED_EDGE('',*,*,#6817,.F.); #9297=ORIENTED_EDGE('',*,*,#6818,.F.); #9298=ORIENTED_EDGE('',*,*,#6819,.F.); #9299=ORIENTED_EDGE('',*,*,#6818,.T.); #9300=ORIENTED_EDGE('',*,*,#6820,.F.); #9301=ORIENTED_EDGE('',*,*,#6821,.F.); #9302=ORIENTED_EDGE('',*,*,#6822,.F.); #9303=ORIENTED_EDGE('',*,*,#6821,.T.); #9304=ORIENTED_EDGE('',*,*,#6823,.F.); #9305=ORIENTED_EDGE('',*,*,#6777,.F.); #9306=ORIENTED_EDGE('',*,*,#6822,.T.); #9307=ORIENTED_EDGE('',*,*,#6776,.T.); #9308=ORIENTED_EDGE('',*,*,#6780,.T.); #9309=ORIENTED_EDGE('',*,*,#6783,.T.); #9310=ORIENTED_EDGE('',*,*,#6786,.T.); #9311=ORIENTED_EDGE('',*,*,#6789,.T.); #9312=ORIENTED_EDGE('',*,*,#6792,.T.); #9313=ORIENTED_EDGE('',*,*,#6795,.T.); #9314=ORIENTED_EDGE('',*,*,#6798,.T.); #9315=ORIENTED_EDGE('',*,*,#6801,.T.); #9316=ORIENTED_EDGE('',*,*,#6804,.T.); #9317=ORIENTED_EDGE('',*,*,#6807,.T.); #9318=ORIENTED_EDGE('',*,*,#6810,.T.); #9319=ORIENTED_EDGE('',*,*,#6813,.T.); #9320=ORIENTED_EDGE('',*,*,#6816,.T.); #9321=ORIENTED_EDGE('',*,*,#6819,.T.); #9322=ORIENTED_EDGE('',*,*,#6823,.T.); #9323=ORIENTED_EDGE('',*,*,#6820,.T.); #9324=ORIENTED_EDGE('',*,*,#6817,.T.); #9325=ORIENTED_EDGE('',*,*,#6814,.T.); #9326=ORIENTED_EDGE('',*,*,#6811,.T.); #9327=ORIENTED_EDGE('',*,*,#6808,.T.); #9328=ORIENTED_EDGE('',*,*,#6805,.T.); #9329=ORIENTED_EDGE('',*,*,#6802,.T.); #9330=ORIENTED_EDGE('',*,*,#6799,.T.); #9331=ORIENTED_EDGE('',*,*,#6796,.T.); #9332=ORIENTED_EDGE('',*,*,#6793,.T.); #9333=ORIENTED_EDGE('',*,*,#6790,.T.); #9334=ORIENTED_EDGE('',*,*,#6787,.T.); #9335=ORIENTED_EDGE('',*,*,#6784,.T.); #9336=ORIENTED_EDGE('',*,*,#6781,.T.); #9337=ORIENTED_EDGE('',*,*,#6778,.T.); #9338=ORIENTED_EDGE('',*,*,#6824,.F.); #9339=ORIENTED_EDGE('',*,*,#6825,.T.); #9340=ORIENTED_EDGE('',*,*,#6826,.F.); #9341=ORIENTED_EDGE('',*,*,#6827,.F.); #9342=ORIENTED_EDGE('',*,*,#6828,.F.); #9343=ORIENTED_EDGE('',*,*,#6827,.T.); #9344=ORIENTED_EDGE('',*,*,#6829,.F.); #9345=ORIENTED_EDGE('',*,*,#6830,.F.); #9346=ORIENTED_EDGE('',*,*,#6831,.F.); #9347=ORIENTED_EDGE('',*,*,#6830,.T.); #9348=ORIENTED_EDGE('',*,*,#6832,.F.); #9349=ORIENTED_EDGE('',*,*,#6833,.F.); #9350=ORIENTED_EDGE('',*,*,#6834,.F.); #9351=ORIENTED_EDGE('',*,*,#6833,.T.); #9352=ORIENTED_EDGE('',*,*,#6835,.F.); #9353=ORIENTED_EDGE('',*,*,#6825,.F.); #9354=ORIENTED_EDGE('',*,*,#6834,.T.); #9355=ORIENTED_EDGE('',*,*,#6824,.T.); #9356=ORIENTED_EDGE('',*,*,#6828,.T.); #9357=ORIENTED_EDGE('',*,*,#6831,.T.); #9358=ORIENTED_EDGE('',*,*,#6835,.T.); #9359=ORIENTED_EDGE('',*,*,#6832,.T.); #9360=ORIENTED_EDGE('',*,*,#6829,.T.); #9361=ORIENTED_EDGE('',*,*,#6826,.T.); #9362=ORIENTED_EDGE('',*,*,#6836,.F.); #9363=ORIENTED_EDGE('',*,*,#6837,.T.); #9364=ORIENTED_EDGE('',*,*,#6838,.F.); #9365=ORIENTED_EDGE('',*,*,#6839,.F.); #9366=ORIENTED_EDGE('',*,*,#6840,.F.); #9367=ORIENTED_EDGE('',*,*,#6839,.T.); #9368=ORIENTED_EDGE('',*,*,#6841,.F.); #9369=ORIENTED_EDGE('',*,*,#6842,.F.); #9370=ORIENTED_EDGE('',*,*,#6843,.F.); #9371=ORIENTED_EDGE('',*,*,#6842,.T.); #9372=ORIENTED_EDGE('',*,*,#6844,.F.); #9373=ORIENTED_EDGE('',*,*,#6845,.F.); #9374=ORIENTED_EDGE('',*,*,#6846,.F.); #9375=ORIENTED_EDGE('',*,*,#6845,.T.); #9376=ORIENTED_EDGE('',*,*,#6847,.F.); #9377=ORIENTED_EDGE('',*,*,#6848,.F.); #9378=ORIENTED_EDGE('',*,*,#6849,.F.); #9379=ORIENTED_EDGE('',*,*,#6848,.T.); #9380=ORIENTED_EDGE('',*,*,#6850,.F.); #9381=ORIENTED_EDGE('',*,*,#6851,.F.); #9382=ORIENTED_EDGE('',*,*,#6852,.F.); #9383=ORIENTED_EDGE('',*,*,#6851,.T.); #9384=ORIENTED_EDGE('',*,*,#6853,.F.); #9385=ORIENTED_EDGE('',*,*,#6854,.F.); #9386=ORIENTED_EDGE('',*,*,#6855,.F.); #9387=ORIENTED_EDGE('',*,*,#6854,.T.); #9388=ORIENTED_EDGE('',*,*,#6856,.F.); #9389=ORIENTED_EDGE('',*,*,#6857,.F.); #9390=ORIENTED_EDGE('',*,*,#6858,.F.); #9391=ORIENTED_EDGE('',*,*,#6857,.T.); #9392=ORIENTED_EDGE('',*,*,#6859,.F.); #9393=ORIENTED_EDGE('',*,*,#6860,.F.); #9394=ORIENTED_EDGE('',*,*,#6861,.F.); #9395=ORIENTED_EDGE('',*,*,#6860,.T.); #9396=ORIENTED_EDGE('',*,*,#6862,.F.); #9397=ORIENTED_EDGE('',*,*,#6863,.F.); #9398=ORIENTED_EDGE('',*,*,#6864,.F.); #9399=ORIENTED_EDGE('',*,*,#6863,.T.); #9400=ORIENTED_EDGE('',*,*,#6865,.F.); #9401=ORIENTED_EDGE('',*,*,#6866,.F.); #9402=ORIENTED_EDGE('',*,*,#6867,.F.); #9403=ORIENTED_EDGE('',*,*,#6866,.T.); #9404=ORIENTED_EDGE('',*,*,#6868,.F.); #9405=ORIENTED_EDGE('',*,*,#6837,.F.); #9406=ORIENTED_EDGE('',*,*,#6867,.T.); #9407=ORIENTED_EDGE('',*,*,#6836,.T.); #9408=ORIENTED_EDGE('',*,*,#6840,.T.); #9409=ORIENTED_EDGE('',*,*,#6843,.T.); #9410=ORIENTED_EDGE('',*,*,#6846,.T.); #9411=ORIENTED_EDGE('',*,*,#6849,.T.); #9412=ORIENTED_EDGE('',*,*,#6852,.T.); #9413=ORIENTED_EDGE('',*,*,#6855,.T.); #9414=ORIENTED_EDGE('',*,*,#6858,.T.); #9415=ORIENTED_EDGE('',*,*,#6861,.T.); #9416=ORIENTED_EDGE('',*,*,#6864,.T.); #9417=ORIENTED_EDGE('',*,*,#6868,.T.); #9418=ORIENTED_EDGE('',*,*,#6865,.T.); #9419=ORIENTED_EDGE('',*,*,#6862,.T.); #9420=ORIENTED_EDGE('',*,*,#6859,.T.); #9421=ORIENTED_EDGE('',*,*,#6856,.T.); #9422=ORIENTED_EDGE('',*,*,#6853,.T.); #9423=ORIENTED_EDGE('',*,*,#6850,.T.); #9424=ORIENTED_EDGE('',*,*,#6847,.T.); #9425=ORIENTED_EDGE('',*,*,#6844,.T.); #9426=ORIENTED_EDGE('',*,*,#6841,.T.); #9427=ORIENTED_EDGE('',*,*,#6838,.T.); #9428=ORIENTED_EDGE('',*,*,#6869,.F.); #9429=ORIENTED_EDGE('',*,*,#6870,.T.); #9430=ORIENTED_EDGE('',*,*,#6871,.F.); #9431=ORIENTED_EDGE('',*,*,#6872,.F.); #9432=ORIENTED_EDGE('',*,*,#6873,.F.); #9433=ORIENTED_EDGE('',*,*,#6872,.T.); #9434=ORIENTED_EDGE('',*,*,#6874,.F.); #9435=ORIENTED_EDGE('',*,*,#6875,.F.); #9436=ORIENTED_EDGE('',*,*,#6876,.F.); #9437=ORIENTED_EDGE('',*,*,#6875,.T.); #9438=ORIENTED_EDGE('',*,*,#6877,.F.); #9439=ORIENTED_EDGE('',*,*,#6878,.F.); #9440=ORIENTED_EDGE('',*,*,#6879,.F.); #9441=ORIENTED_EDGE('',*,*,#6878,.T.); #9442=ORIENTED_EDGE('',*,*,#6880,.F.); #9443=ORIENTED_EDGE('',*,*,#6881,.F.); #9444=ORIENTED_EDGE('',*,*,#6882,.F.); #9445=ORIENTED_EDGE('',*,*,#6881,.T.); #9446=ORIENTED_EDGE('',*,*,#6883,.F.); #9447=ORIENTED_EDGE('',*,*,#6884,.F.); #9448=ORIENTED_EDGE('',*,*,#6885,.F.); #9449=ORIENTED_EDGE('',*,*,#6884,.T.); #9450=ORIENTED_EDGE('',*,*,#6886,.F.); #9451=ORIENTED_EDGE('',*,*,#6887,.F.); #9452=ORIENTED_EDGE('',*,*,#6888,.F.); #9453=ORIENTED_EDGE('',*,*,#6887,.T.); #9454=ORIENTED_EDGE('',*,*,#6889,.F.); #9455=ORIENTED_EDGE('',*,*,#6890,.F.); #9456=ORIENTED_EDGE('',*,*,#6891,.F.); #9457=ORIENTED_EDGE('',*,*,#6890,.T.); #9458=ORIENTED_EDGE('',*,*,#6892,.F.); #9459=ORIENTED_EDGE('',*,*,#6893,.F.); #9460=ORIENTED_EDGE('',*,*,#6894,.F.); #9461=ORIENTED_EDGE('',*,*,#6893,.T.); #9462=ORIENTED_EDGE('',*,*,#6895,.F.); #9463=ORIENTED_EDGE('',*,*,#6896,.F.); #9464=ORIENTED_EDGE('',*,*,#6897,.F.); #9465=ORIENTED_EDGE('',*,*,#6896,.T.); #9466=ORIENTED_EDGE('',*,*,#6898,.F.); #9467=ORIENTED_EDGE('',*,*,#6899,.F.); #9468=ORIENTED_EDGE('',*,*,#6900,.F.); #9469=ORIENTED_EDGE('',*,*,#6899,.T.); #9470=ORIENTED_EDGE('',*,*,#6901,.F.); #9471=ORIENTED_EDGE('',*,*,#6902,.F.); #9472=ORIENTED_EDGE('',*,*,#6903,.F.); #9473=ORIENTED_EDGE('',*,*,#6902,.T.); #9474=ORIENTED_EDGE('',*,*,#6904,.F.); #9475=ORIENTED_EDGE('',*,*,#6905,.F.); #9476=ORIENTED_EDGE('',*,*,#6906,.F.); #9477=ORIENTED_EDGE('',*,*,#6905,.T.); #9478=ORIENTED_EDGE('',*,*,#6907,.F.); #9479=ORIENTED_EDGE('',*,*,#6908,.F.); #9480=ORIENTED_EDGE('',*,*,#6909,.F.); #9481=ORIENTED_EDGE('',*,*,#6908,.T.); #9482=ORIENTED_EDGE('',*,*,#6910,.F.); #9483=ORIENTED_EDGE('',*,*,#6911,.F.); #9484=ORIENTED_EDGE('',*,*,#6912,.F.); #9485=ORIENTED_EDGE('',*,*,#6911,.T.); #9486=ORIENTED_EDGE('',*,*,#6913,.F.); #9487=ORIENTED_EDGE('',*,*,#6914,.F.); #9488=ORIENTED_EDGE('',*,*,#6915,.F.); #9489=ORIENTED_EDGE('',*,*,#6914,.T.); #9490=ORIENTED_EDGE('',*,*,#6916,.F.); #9491=ORIENTED_EDGE('',*,*,#6870,.F.); #9492=ORIENTED_EDGE('',*,*,#6915,.T.); #9493=ORIENTED_EDGE('',*,*,#6869,.T.); #9494=ORIENTED_EDGE('',*,*,#6873,.T.); #9495=ORIENTED_EDGE('',*,*,#6876,.T.); #9496=ORIENTED_EDGE('',*,*,#6879,.T.); #9497=ORIENTED_EDGE('',*,*,#6882,.T.); #9498=ORIENTED_EDGE('',*,*,#6885,.T.); #9499=ORIENTED_EDGE('',*,*,#6888,.T.); #9500=ORIENTED_EDGE('',*,*,#6891,.T.); #9501=ORIENTED_EDGE('',*,*,#6894,.T.); #9502=ORIENTED_EDGE('',*,*,#6897,.T.); #9503=ORIENTED_EDGE('',*,*,#6900,.T.); #9504=ORIENTED_EDGE('',*,*,#6903,.T.); #9505=ORIENTED_EDGE('',*,*,#6906,.T.); #9506=ORIENTED_EDGE('',*,*,#6909,.T.); #9507=ORIENTED_EDGE('',*,*,#6912,.T.); #9508=ORIENTED_EDGE('',*,*,#6916,.T.); #9509=ORIENTED_EDGE('',*,*,#6913,.T.); #9510=ORIENTED_EDGE('',*,*,#6910,.T.); #9511=ORIENTED_EDGE('',*,*,#6907,.T.); #9512=ORIENTED_EDGE('',*,*,#6904,.T.); #9513=ORIENTED_EDGE('',*,*,#6901,.T.); #9514=ORIENTED_EDGE('',*,*,#6898,.T.); #9515=ORIENTED_EDGE('',*,*,#6895,.T.); #9516=ORIENTED_EDGE('',*,*,#6892,.T.); #9517=ORIENTED_EDGE('',*,*,#6889,.T.); #9518=ORIENTED_EDGE('',*,*,#6886,.T.); #9519=ORIENTED_EDGE('',*,*,#6883,.T.); #9520=ORIENTED_EDGE('',*,*,#6880,.T.); #9521=ORIENTED_EDGE('',*,*,#6877,.T.); #9522=ORIENTED_EDGE('',*,*,#6874,.T.); #9523=ORIENTED_EDGE('',*,*,#6871,.T.); #9524=ORIENTED_EDGE('',*,*,#6917,.F.); #9525=ORIENTED_EDGE('',*,*,#6918,.T.); #9526=ORIENTED_EDGE('',*,*,#6919,.F.); #9527=ORIENTED_EDGE('',*,*,#6920,.F.); #9528=ORIENTED_EDGE('',*,*,#6921,.F.); #9529=ORIENTED_EDGE('',*,*,#6922,.T.); #9530=ORIENTED_EDGE('',*,*,#6923,.F.); #9531=ORIENTED_EDGE('',*,*,#6918,.F.); #9532=ORIENTED_EDGE('',*,*,#6924,.F.); #9533=ORIENTED_EDGE('',*,*,#6925,.T.); #9534=ORIENTED_EDGE('',*,*,#6926,.F.); #9535=ORIENTED_EDGE('',*,*,#6922,.F.); #9536=ORIENTED_EDGE('',*,*,#6927,.F.); #9537=ORIENTED_EDGE('',*,*,#6928,.T.); #9538=ORIENTED_EDGE('',*,*,#6929,.F.); #9539=ORIENTED_EDGE('',*,*,#6925,.F.); #9540=ORIENTED_EDGE('',*,*,#6930,.F.); #9541=ORIENTED_EDGE('',*,*,#6920,.T.); #9542=ORIENTED_EDGE('',*,*,#6931,.F.); #9543=ORIENTED_EDGE('',*,*,#6928,.F.); #9544=ORIENTED_EDGE('',*,*,#6932,.F.); #9545=ORIENTED_EDGE('',*,*,#6933,.T.); #9546=ORIENTED_EDGE('',*,*,#6934,.F.); #9547=ORIENTED_EDGE('',*,*,#6935,.F.); #9548=ORIENTED_EDGE('',*,*,#6936,.F.); #9549=ORIENTED_EDGE('',*,*,#6935,.T.); #9550=ORIENTED_EDGE('',*,*,#6937,.F.); #9551=ORIENTED_EDGE('',*,*,#6938,.F.); #9552=ORIENTED_EDGE('',*,*,#6939,.F.); #9553=ORIENTED_EDGE('',*,*,#6938,.T.); #9554=ORIENTED_EDGE('',*,*,#6940,.F.); #9555=ORIENTED_EDGE('',*,*,#6941,.F.); #9556=ORIENTED_EDGE('',*,*,#6942,.F.); #9557=ORIENTED_EDGE('',*,*,#6941,.T.); #9558=ORIENTED_EDGE('',*,*,#6943,.F.); #9559=ORIENTED_EDGE('',*,*,#6944,.F.); #9560=ORIENTED_EDGE('',*,*,#6945,.F.); #9561=ORIENTED_EDGE('',*,*,#6944,.T.); #9562=ORIENTED_EDGE('',*,*,#6946,.F.); #9563=ORIENTED_EDGE('',*,*,#6947,.F.); #9564=ORIENTED_EDGE('',*,*,#6948,.F.); #9565=ORIENTED_EDGE('',*,*,#6947,.T.); #9566=ORIENTED_EDGE('',*,*,#6949,.F.); #9567=ORIENTED_EDGE('',*,*,#6950,.F.); #9568=ORIENTED_EDGE('',*,*,#6951,.F.); #9569=ORIENTED_EDGE('',*,*,#6950,.T.); #9570=ORIENTED_EDGE('',*,*,#6952,.F.); #9571=ORIENTED_EDGE('',*,*,#6953,.F.); #9572=ORIENTED_EDGE('',*,*,#6954,.F.); #9573=ORIENTED_EDGE('',*,*,#6953,.T.); #9574=ORIENTED_EDGE('',*,*,#6955,.F.); #9575=ORIENTED_EDGE('',*,*,#6956,.F.); #9576=ORIENTED_EDGE('',*,*,#6957,.F.); #9577=ORIENTED_EDGE('',*,*,#6956,.T.); #9578=ORIENTED_EDGE('',*,*,#6958,.F.); #9579=ORIENTED_EDGE('',*,*,#6959,.F.); #9580=ORIENTED_EDGE('',*,*,#6960,.F.); #9581=ORIENTED_EDGE('',*,*,#6959,.T.); #9582=ORIENTED_EDGE('',*,*,#6961,.F.); #9583=ORIENTED_EDGE('',*,*,#6962,.F.); #9584=ORIENTED_EDGE('',*,*,#6963,.F.); #9585=ORIENTED_EDGE('',*,*,#6962,.T.); #9586=ORIENTED_EDGE('',*,*,#6964,.F.); #9587=ORIENTED_EDGE('',*,*,#6965,.F.); #9588=ORIENTED_EDGE('',*,*,#6966,.F.); #9589=ORIENTED_EDGE('',*,*,#6965,.T.); #9590=ORIENTED_EDGE('',*,*,#6967,.F.); #9591=ORIENTED_EDGE('',*,*,#6968,.F.); #9592=ORIENTED_EDGE('',*,*,#6969,.F.); #9593=ORIENTED_EDGE('',*,*,#6968,.T.); #9594=ORIENTED_EDGE('',*,*,#6970,.F.); #9595=ORIENTED_EDGE('',*,*,#6933,.F.); #9596=ORIENTED_EDGE('',*,*,#6969,.T.); #9597=ORIENTED_EDGE('',*,*,#6932,.T.); #9598=ORIENTED_EDGE('',*,*,#6936,.T.); #9599=ORIENTED_EDGE('',*,*,#6939,.T.); #9600=ORIENTED_EDGE('',*,*,#6942,.T.); #9601=ORIENTED_EDGE('',*,*,#6945,.T.); #9602=ORIENTED_EDGE('',*,*,#6948,.T.); #9603=ORIENTED_EDGE('',*,*,#6951,.T.); #9604=ORIENTED_EDGE('',*,*,#6954,.T.); #9605=ORIENTED_EDGE('',*,*,#6957,.T.); #9606=ORIENTED_EDGE('',*,*,#6960,.T.); #9607=ORIENTED_EDGE('',*,*,#6963,.T.); #9608=ORIENTED_EDGE('',*,*,#6966,.T.); #9609=ORIENTED_EDGE('',*,*,#6917,.T.); #9610=ORIENTED_EDGE('',*,*,#6930,.T.); #9611=ORIENTED_EDGE('',*,*,#6927,.T.); #9612=ORIENTED_EDGE('',*,*,#6924,.T.); #9613=ORIENTED_EDGE('',*,*,#6921,.T.); #9614=ORIENTED_EDGE('',*,*,#6970,.T.); #9615=ORIENTED_EDGE('',*,*,#6967,.T.); #9616=ORIENTED_EDGE('',*,*,#6964,.T.); #9617=ORIENTED_EDGE('',*,*,#6961,.T.); #9618=ORIENTED_EDGE('',*,*,#6958,.T.); #9619=ORIENTED_EDGE('',*,*,#6955,.T.); #9620=ORIENTED_EDGE('',*,*,#6952,.T.); #9621=ORIENTED_EDGE('',*,*,#6949,.T.); #9622=ORIENTED_EDGE('',*,*,#6946,.T.); #9623=ORIENTED_EDGE('',*,*,#6943,.T.); #9624=ORIENTED_EDGE('',*,*,#6940,.T.); #9625=ORIENTED_EDGE('',*,*,#6937,.T.); #9626=ORIENTED_EDGE('',*,*,#6934,.T.); #9627=ORIENTED_EDGE('',*,*,#6919,.T.); #9628=ORIENTED_EDGE('',*,*,#6923,.T.); #9629=ORIENTED_EDGE('',*,*,#6926,.T.); #9630=ORIENTED_EDGE('',*,*,#6929,.T.); #9631=ORIENTED_EDGE('',*,*,#6931,.T.); #9632=ORIENTED_EDGE('',*,*,#6971,.F.); #9633=ORIENTED_EDGE('',*,*,#6972,.T.); #9634=ORIENTED_EDGE('',*,*,#6973,.F.); #9635=ORIENTED_EDGE('',*,*,#6974,.F.); #9636=ORIENTED_EDGE('',*,*,#6975,.F.); #9637=ORIENTED_EDGE('',*,*,#6974,.T.); #9638=ORIENTED_EDGE('',*,*,#6976,.F.); #9639=ORIENTED_EDGE('',*,*,#6977,.F.); #9640=ORIENTED_EDGE('',*,*,#6978,.F.); #9641=ORIENTED_EDGE('',*,*,#6977,.T.); #9642=ORIENTED_EDGE('',*,*,#6979,.F.); #9643=ORIENTED_EDGE('',*,*,#6980,.F.); #9644=ORIENTED_EDGE('',*,*,#6981,.F.); #9645=ORIENTED_EDGE('',*,*,#6980,.T.); #9646=ORIENTED_EDGE('',*,*,#6982,.F.); #9647=ORIENTED_EDGE('',*,*,#6983,.F.); #9648=ORIENTED_EDGE('',*,*,#6984,.F.); #9649=ORIENTED_EDGE('',*,*,#6983,.T.); #9650=ORIENTED_EDGE('',*,*,#6985,.F.); #9651=ORIENTED_EDGE('',*,*,#6986,.F.); #9652=ORIENTED_EDGE('',*,*,#6987,.F.); #9653=ORIENTED_EDGE('',*,*,#6986,.T.); #9654=ORIENTED_EDGE('',*,*,#6988,.F.); #9655=ORIENTED_EDGE('',*,*,#6989,.F.); #9656=ORIENTED_EDGE('',*,*,#6990,.F.); #9657=ORIENTED_EDGE('',*,*,#6989,.T.); #9658=ORIENTED_EDGE('',*,*,#6991,.F.); #9659=ORIENTED_EDGE('',*,*,#6992,.F.); #9660=ORIENTED_EDGE('',*,*,#6993,.F.); #9661=ORIENTED_EDGE('',*,*,#6992,.T.); #9662=ORIENTED_EDGE('',*,*,#6994,.F.); #9663=ORIENTED_EDGE('',*,*,#6995,.F.); #9664=ORIENTED_EDGE('',*,*,#6996,.F.); #9665=ORIENTED_EDGE('',*,*,#6995,.T.); #9666=ORIENTED_EDGE('',*,*,#6997,.F.); #9667=ORIENTED_EDGE('',*,*,#6998,.F.); #9668=ORIENTED_EDGE('',*,*,#6999,.F.); #9669=ORIENTED_EDGE('',*,*,#6998,.T.); #9670=ORIENTED_EDGE('',*,*,#7000,.F.); #9671=ORIENTED_EDGE('',*,*,#7001,.F.); #9672=ORIENTED_EDGE('',*,*,#7002,.F.); #9673=ORIENTED_EDGE('',*,*,#7001,.T.); #9674=ORIENTED_EDGE('',*,*,#7003,.F.); #9675=ORIENTED_EDGE('',*,*,#6972,.F.); #9676=ORIENTED_EDGE('',*,*,#7002,.T.); #9677=ORIENTED_EDGE('',*,*,#6971,.T.); #9678=ORIENTED_EDGE('',*,*,#6975,.T.); #9679=ORIENTED_EDGE('',*,*,#6978,.T.); #9680=ORIENTED_EDGE('',*,*,#6981,.T.); #9681=ORIENTED_EDGE('',*,*,#6984,.T.); #9682=ORIENTED_EDGE('',*,*,#6987,.T.); #9683=ORIENTED_EDGE('',*,*,#6990,.T.); #9684=ORIENTED_EDGE('',*,*,#6993,.T.); #9685=ORIENTED_EDGE('',*,*,#6996,.T.); #9686=ORIENTED_EDGE('',*,*,#6999,.T.); #9687=ORIENTED_EDGE('',*,*,#7003,.T.); #9688=ORIENTED_EDGE('',*,*,#7000,.T.); #9689=ORIENTED_EDGE('',*,*,#6997,.T.); #9690=ORIENTED_EDGE('',*,*,#6994,.T.); #9691=ORIENTED_EDGE('',*,*,#6991,.T.); #9692=ORIENTED_EDGE('',*,*,#6988,.T.); #9693=ORIENTED_EDGE('',*,*,#6985,.T.); #9694=ORIENTED_EDGE('',*,*,#6982,.T.); #9695=ORIENTED_EDGE('',*,*,#6979,.T.); #9696=ORIENTED_EDGE('',*,*,#6976,.T.); #9697=ORIENTED_EDGE('',*,*,#6973,.T.); #9698=ORIENTED_EDGE('',*,*,#7004,.F.); #9699=ORIENTED_EDGE('',*,*,#7005,.T.); #9700=ORIENTED_EDGE('',*,*,#7006,.F.); #9701=ORIENTED_EDGE('',*,*,#7007,.F.); #9702=ORIENTED_EDGE('',*,*,#7008,.F.); #9703=ORIENTED_EDGE('',*,*,#7007,.T.); #9704=ORIENTED_EDGE('',*,*,#7009,.F.); #9705=ORIENTED_EDGE('',*,*,#7010,.F.); #9706=ORIENTED_EDGE('',*,*,#7011,.F.); #9707=ORIENTED_EDGE('',*,*,#7010,.T.); #9708=ORIENTED_EDGE('',*,*,#7012,.F.); #9709=ORIENTED_EDGE('',*,*,#7013,.F.); #9710=ORIENTED_EDGE('',*,*,#7014,.F.); #9711=ORIENTED_EDGE('',*,*,#7013,.T.); #9712=ORIENTED_EDGE('',*,*,#7015,.F.); #9713=ORIENTED_EDGE('',*,*,#7005,.F.); #9714=ORIENTED_EDGE('',*,*,#7014,.T.); #9715=ORIENTED_EDGE('',*,*,#7004,.T.); #9716=ORIENTED_EDGE('',*,*,#7008,.T.); #9717=ORIENTED_EDGE('',*,*,#7011,.T.); #9718=ORIENTED_EDGE('',*,*,#7015,.T.); #9719=ORIENTED_EDGE('',*,*,#7012,.T.); #9720=ORIENTED_EDGE('',*,*,#7009,.T.); #9721=ORIENTED_EDGE('',*,*,#7006,.T.); #9722=ORIENTED_EDGE('',*,*,#7016,.F.); #9723=ORIENTED_EDGE('',*,*,#7017,.T.); #9724=ORIENTED_EDGE('',*,*,#7018,.F.); #9725=ORIENTED_EDGE('',*,*,#7019,.F.); #9726=ORIENTED_EDGE('',*,*,#7020,.F.); #9727=ORIENTED_EDGE('',*,*,#7019,.T.); #9728=ORIENTED_EDGE('',*,*,#7021,.F.); #9729=ORIENTED_EDGE('',*,*,#7022,.F.); #9730=ORIENTED_EDGE('',*,*,#7023,.F.); #9731=ORIENTED_EDGE('',*,*,#7022,.T.); #9732=ORIENTED_EDGE('',*,*,#7024,.F.); #9733=ORIENTED_EDGE('',*,*,#7025,.F.); #9734=ORIENTED_EDGE('',*,*,#7026,.F.); #9735=ORIENTED_EDGE('',*,*,#7025,.T.); #9736=ORIENTED_EDGE('',*,*,#7027,.F.); #9737=ORIENTED_EDGE('',*,*,#7028,.F.); #9738=ORIENTED_EDGE('',*,*,#7029,.F.); #9739=ORIENTED_EDGE('',*,*,#7028,.T.); #9740=ORIENTED_EDGE('',*,*,#7030,.F.); #9741=ORIENTED_EDGE('',*,*,#7031,.F.); #9742=ORIENTED_EDGE('',*,*,#7032,.F.); #9743=ORIENTED_EDGE('',*,*,#7031,.T.); #9744=ORIENTED_EDGE('',*,*,#7033,.F.); #9745=ORIENTED_EDGE('',*,*,#7034,.F.); #9746=ORIENTED_EDGE('',*,*,#7035,.F.); #9747=ORIENTED_EDGE('',*,*,#7034,.T.); #9748=ORIENTED_EDGE('',*,*,#7036,.F.); #9749=ORIENTED_EDGE('',*,*,#7037,.F.); #9750=ORIENTED_EDGE('',*,*,#7038,.F.); #9751=ORIENTED_EDGE('',*,*,#7037,.T.); #9752=ORIENTED_EDGE('',*,*,#7039,.F.); #9753=ORIENTED_EDGE('',*,*,#7040,.F.); #9754=ORIENTED_EDGE('',*,*,#7041,.F.); #9755=ORIENTED_EDGE('',*,*,#7040,.T.); #9756=ORIENTED_EDGE('',*,*,#7042,.F.); #9757=ORIENTED_EDGE('',*,*,#7043,.F.); #9758=ORIENTED_EDGE('',*,*,#7044,.F.); #9759=ORIENTED_EDGE('',*,*,#7043,.T.); #9760=ORIENTED_EDGE('',*,*,#7045,.F.); #9761=ORIENTED_EDGE('',*,*,#7046,.F.); #9762=ORIENTED_EDGE('',*,*,#7047,.F.); #9763=ORIENTED_EDGE('',*,*,#7046,.T.); #9764=ORIENTED_EDGE('',*,*,#7048,.F.); #9765=ORIENTED_EDGE('',*,*,#7049,.F.); #9766=ORIENTED_EDGE('',*,*,#7050,.F.); #9767=ORIENTED_EDGE('',*,*,#7049,.T.); #9768=ORIENTED_EDGE('',*,*,#7051,.F.); #9769=ORIENTED_EDGE('',*,*,#7052,.F.); #9770=ORIENTED_EDGE('',*,*,#7053,.F.); #9771=ORIENTED_EDGE('',*,*,#7052,.T.); #9772=ORIENTED_EDGE('',*,*,#7054,.F.); #9773=ORIENTED_EDGE('',*,*,#7017,.F.); #9774=ORIENTED_EDGE('',*,*,#7053,.T.); #9775=ORIENTED_EDGE('',*,*,#7016,.T.); #9776=ORIENTED_EDGE('',*,*,#7020,.T.); #9777=ORIENTED_EDGE('',*,*,#7023,.T.); #9778=ORIENTED_EDGE('',*,*,#7026,.T.); #9779=ORIENTED_EDGE('',*,*,#7029,.T.); #9780=ORIENTED_EDGE('',*,*,#7032,.T.); #9781=ORIENTED_EDGE('',*,*,#7035,.T.); #9782=ORIENTED_EDGE('',*,*,#7038,.T.); #9783=ORIENTED_EDGE('',*,*,#7041,.T.); #9784=ORIENTED_EDGE('',*,*,#7044,.T.); #9785=ORIENTED_EDGE('',*,*,#7047,.T.); #9786=ORIENTED_EDGE('',*,*,#7050,.T.); #9787=ORIENTED_EDGE('',*,*,#7054,.T.); #9788=ORIENTED_EDGE('',*,*,#7051,.T.); #9789=ORIENTED_EDGE('',*,*,#7048,.T.); #9790=ORIENTED_EDGE('',*,*,#7045,.T.); #9791=ORIENTED_EDGE('',*,*,#7042,.T.); #9792=ORIENTED_EDGE('',*,*,#7039,.T.); #9793=ORIENTED_EDGE('',*,*,#7036,.T.); #9794=ORIENTED_EDGE('',*,*,#7033,.T.); #9795=ORIENTED_EDGE('',*,*,#7030,.T.); #9796=ORIENTED_EDGE('',*,*,#7027,.T.); #9797=ORIENTED_EDGE('',*,*,#7024,.T.); #9798=ORIENTED_EDGE('',*,*,#7021,.T.); #9799=ORIENTED_EDGE('',*,*,#7018,.T.); #9800=ORIENTED_EDGE('',*,*,#7055,.F.); #9801=ORIENTED_EDGE('',*,*,#7056,.T.); #9802=ORIENTED_EDGE('',*,*,#7057,.F.); #9803=ORIENTED_EDGE('',*,*,#7058,.F.); #9804=ORIENTED_EDGE('',*,*,#7059,.F.); #9805=ORIENTED_EDGE('',*,*,#7058,.T.); #9806=ORIENTED_EDGE('',*,*,#7060,.F.); #9807=ORIENTED_EDGE('',*,*,#7061,.F.); #9808=ORIENTED_EDGE('',*,*,#7062,.F.); #9809=ORIENTED_EDGE('',*,*,#7061,.T.); #9810=ORIENTED_EDGE('',*,*,#7063,.F.); #9811=ORIENTED_EDGE('',*,*,#7064,.F.); #9812=ORIENTED_EDGE('',*,*,#7065,.F.); #9813=ORIENTED_EDGE('',*,*,#7064,.T.); #9814=ORIENTED_EDGE('',*,*,#7066,.F.); #9815=ORIENTED_EDGE('',*,*,#7067,.F.); #9816=ORIENTED_EDGE('',*,*,#7068,.F.); #9817=ORIENTED_EDGE('',*,*,#7067,.T.); #9818=ORIENTED_EDGE('',*,*,#7069,.F.); #9819=ORIENTED_EDGE('',*,*,#7070,.F.); #9820=ORIENTED_EDGE('',*,*,#7071,.F.); #9821=ORIENTED_EDGE('',*,*,#7070,.T.); #9822=ORIENTED_EDGE('',*,*,#7072,.F.); #9823=ORIENTED_EDGE('',*,*,#7073,.F.); #9824=ORIENTED_EDGE('',*,*,#7074,.F.); #9825=ORIENTED_EDGE('',*,*,#7073,.T.); #9826=ORIENTED_EDGE('',*,*,#7075,.F.); #9827=ORIENTED_EDGE('',*,*,#7076,.F.); #9828=ORIENTED_EDGE('',*,*,#7077,.F.); #9829=ORIENTED_EDGE('',*,*,#7076,.T.); #9830=ORIENTED_EDGE('',*,*,#7078,.F.); #9831=ORIENTED_EDGE('',*,*,#7079,.F.); #9832=ORIENTED_EDGE('',*,*,#7080,.F.); #9833=ORIENTED_EDGE('',*,*,#7079,.T.); #9834=ORIENTED_EDGE('',*,*,#7081,.F.); #9835=ORIENTED_EDGE('',*,*,#7082,.F.); #9836=ORIENTED_EDGE('',*,*,#7083,.F.); #9837=ORIENTED_EDGE('',*,*,#7082,.T.); #9838=ORIENTED_EDGE('',*,*,#7084,.F.); #9839=ORIENTED_EDGE('',*,*,#7085,.F.); #9840=ORIENTED_EDGE('',*,*,#7086,.F.); #9841=ORIENTED_EDGE('',*,*,#7085,.T.); #9842=ORIENTED_EDGE('',*,*,#7087,.F.); #9843=ORIENTED_EDGE('',*,*,#7088,.F.); #9844=ORIENTED_EDGE('',*,*,#7089,.F.); #9845=ORIENTED_EDGE('',*,*,#7088,.T.); #9846=ORIENTED_EDGE('',*,*,#7090,.F.); #9847=ORIENTED_EDGE('',*,*,#7091,.F.); #9848=ORIENTED_EDGE('',*,*,#7092,.F.); #9849=ORIENTED_EDGE('',*,*,#7091,.T.); #9850=ORIENTED_EDGE('',*,*,#7093,.F.); #9851=ORIENTED_EDGE('',*,*,#7094,.F.); #9852=ORIENTED_EDGE('',*,*,#7095,.F.); #9853=ORIENTED_EDGE('',*,*,#7094,.T.); #9854=ORIENTED_EDGE('',*,*,#7096,.F.); #9855=ORIENTED_EDGE('',*,*,#7097,.F.); #9856=ORIENTED_EDGE('',*,*,#7098,.F.); #9857=ORIENTED_EDGE('',*,*,#7097,.T.); #9858=ORIENTED_EDGE('',*,*,#7099,.F.); #9859=ORIENTED_EDGE('',*,*,#7100,.F.); #9860=ORIENTED_EDGE('',*,*,#7101,.F.); #9861=ORIENTED_EDGE('',*,*,#7100,.T.); #9862=ORIENTED_EDGE('',*,*,#7102,.F.); #9863=ORIENTED_EDGE('',*,*,#7103,.F.); #9864=ORIENTED_EDGE('',*,*,#7104,.F.); #9865=ORIENTED_EDGE('',*,*,#7103,.T.); #9866=ORIENTED_EDGE('',*,*,#7105,.F.); #9867=ORIENTED_EDGE('',*,*,#7106,.F.); #9868=ORIENTED_EDGE('',*,*,#7107,.F.); #9869=ORIENTED_EDGE('',*,*,#7106,.T.); #9870=ORIENTED_EDGE('',*,*,#7108,.F.); #9871=ORIENTED_EDGE('',*,*,#7109,.F.); #9872=ORIENTED_EDGE('',*,*,#7110,.F.); #9873=ORIENTED_EDGE('',*,*,#7109,.T.); #9874=ORIENTED_EDGE('',*,*,#7111,.F.); #9875=ORIENTED_EDGE('',*,*,#7112,.F.); #9876=ORIENTED_EDGE('',*,*,#7113,.F.); #9877=ORIENTED_EDGE('',*,*,#7112,.T.); #9878=ORIENTED_EDGE('',*,*,#7114,.F.); #9879=ORIENTED_EDGE('',*,*,#7056,.F.); #9880=ORIENTED_EDGE('',*,*,#7113,.T.); #9881=ORIENTED_EDGE('',*,*,#7055,.T.); #9882=ORIENTED_EDGE('',*,*,#7059,.T.); #9883=ORIENTED_EDGE('',*,*,#7062,.T.); #9884=ORIENTED_EDGE('',*,*,#7065,.T.); #9885=ORIENTED_EDGE('',*,*,#7068,.T.); #9886=ORIENTED_EDGE('',*,*,#7071,.T.); #9887=ORIENTED_EDGE('',*,*,#7074,.T.); #9888=ORIENTED_EDGE('',*,*,#7077,.T.); #9889=ORIENTED_EDGE('',*,*,#7080,.T.); #9890=ORIENTED_EDGE('',*,*,#7083,.T.); #9891=ORIENTED_EDGE('',*,*,#7086,.T.); #9892=ORIENTED_EDGE('',*,*,#7089,.T.); #9893=ORIENTED_EDGE('',*,*,#7092,.T.); #9894=ORIENTED_EDGE('',*,*,#7095,.T.); #9895=ORIENTED_EDGE('',*,*,#7098,.T.); #9896=ORIENTED_EDGE('',*,*,#7101,.T.); #9897=ORIENTED_EDGE('',*,*,#7104,.T.); #9898=ORIENTED_EDGE('',*,*,#7107,.T.); #9899=ORIENTED_EDGE('',*,*,#7110,.T.); #9900=ORIENTED_EDGE('',*,*,#7114,.T.); #9901=ORIENTED_EDGE('',*,*,#7111,.T.); #9902=ORIENTED_EDGE('',*,*,#7108,.T.); #9903=ORIENTED_EDGE('',*,*,#7105,.T.); #9904=ORIENTED_EDGE('',*,*,#7102,.T.); #9905=ORIENTED_EDGE('',*,*,#7099,.T.); #9906=ORIENTED_EDGE('',*,*,#7096,.T.); #9907=ORIENTED_EDGE('',*,*,#7093,.T.); #9908=ORIENTED_EDGE('',*,*,#7090,.T.); #9909=ORIENTED_EDGE('',*,*,#7087,.T.); #9910=ORIENTED_EDGE('',*,*,#7084,.T.); #9911=ORIENTED_EDGE('',*,*,#7081,.T.); #9912=ORIENTED_EDGE('',*,*,#7078,.T.); #9913=ORIENTED_EDGE('',*,*,#7075,.T.); #9914=ORIENTED_EDGE('',*,*,#7072,.T.); #9915=ORIENTED_EDGE('',*,*,#7069,.T.); #9916=ORIENTED_EDGE('',*,*,#7066,.T.); #9917=ORIENTED_EDGE('',*,*,#7063,.T.); #9918=ORIENTED_EDGE('',*,*,#7060,.T.); #9919=ORIENTED_EDGE('',*,*,#7057,.T.); #9920=ORIENTED_EDGE('',*,*,#7115,.F.); #9921=ORIENTED_EDGE('',*,*,#7116,.T.); #9922=ORIENTED_EDGE('',*,*,#7117,.F.); #9923=ORIENTED_EDGE('',*,*,#7118,.F.); #9924=ORIENTED_EDGE('',*,*,#7119,.F.); #9925=ORIENTED_EDGE('',*,*,#7120,.T.); #9926=ORIENTED_EDGE('',*,*,#7121,.F.); #9927=ORIENTED_EDGE('',*,*,#7116,.F.); #9928=ORIENTED_EDGE('',*,*,#7122,.F.); #9929=ORIENTED_EDGE('',*,*,#7123,.T.); #9930=ORIENTED_EDGE('',*,*,#7124,.F.); #9931=ORIENTED_EDGE('',*,*,#7120,.F.); #9932=ORIENTED_EDGE('',*,*,#7125,.F.); #9933=ORIENTED_EDGE('',*,*,#7126,.T.); #9934=ORIENTED_EDGE('',*,*,#7127,.F.); #9935=ORIENTED_EDGE('',*,*,#7123,.F.); #9936=ORIENTED_EDGE('',*,*,#7128,.F.); #9937=ORIENTED_EDGE('',*,*,#7129,.T.); #9938=ORIENTED_EDGE('',*,*,#7130,.F.); #9939=ORIENTED_EDGE('',*,*,#7126,.F.); #9940=ORIENTED_EDGE('',*,*,#7131,.F.); #9941=ORIENTED_EDGE('',*,*,#7132,.T.); #9942=ORIENTED_EDGE('',*,*,#7133,.F.); #9943=ORIENTED_EDGE('',*,*,#7129,.F.); #9944=ORIENTED_EDGE('',*,*,#7134,.F.); #9945=ORIENTED_EDGE('',*,*,#7118,.T.); #9946=ORIENTED_EDGE('',*,*,#7135,.F.); #9947=ORIENTED_EDGE('',*,*,#7132,.F.); #9948=ORIENTED_EDGE('',*,*,#7136,.F.); #9949=ORIENTED_EDGE('',*,*,#7137,.T.); #9950=ORIENTED_EDGE('',*,*,#7138,.F.); #9951=ORIENTED_EDGE('',*,*,#7139,.F.); #9952=ORIENTED_EDGE('',*,*,#7140,.F.); #9953=ORIENTED_EDGE('',*,*,#7139,.T.); #9954=ORIENTED_EDGE('',*,*,#7141,.F.); #9955=ORIENTED_EDGE('',*,*,#7142,.F.); #9956=ORIENTED_EDGE('',*,*,#7143,.F.); #9957=ORIENTED_EDGE('',*,*,#7142,.T.); #9958=ORIENTED_EDGE('',*,*,#7144,.F.); #9959=ORIENTED_EDGE('',*,*,#7145,.F.); #9960=ORIENTED_EDGE('',*,*,#7146,.F.); #9961=ORIENTED_EDGE('',*,*,#7145,.T.); #9962=ORIENTED_EDGE('',*,*,#7147,.F.); #9963=ORIENTED_EDGE('',*,*,#7148,.F.); #9964=ORIENTED_EDGE('',*,*,#7149,.F.); #9965=ORIENTED_EDGE('',*,*,#7148,.T.); #9966=ORIENTED_EDGE('',*,*,#7150,.F.); #9967=ORIENTED_EDGE('',*,*,#7151,.F.); #9968=ORIENTED_EDGE('',*,*,#7152,.F.); #9969=ORIENTED_EDGE('',*,*,#7151,.T.); #9970=ORIENTED_EDGE('',*,*,#7153,.F.); #9971=ORIENTED_EDGE('',*,*,#7154,.F.); #9972=ORIENTED_EDGE('',*,*,#7155,.F.); #9973=ORIENTED_EDGE('',*,*,#7154,.T.); #9974=ORIENTED_EDGE('',*,*,#7156,.F.); #9975=ORIENTED_EDGE('',*,*,#7157,.F.); #9976=ORIENTED_EDGE('',*,*,#7158,.F.); #9977=ORIENTED_EDGE('',*,*,#7157,.T.); #9978=ORIENTED_EDGE('',*,*,#7159,.F.); #9979=ORIENTED_EDGE('',*,*,#7160,.F.); #9980=ORIENTED_EDGE('',*,*,#7161,.F.); #9981=ORIENTED_EDGE('',*,*,#7160,.T.); #9982=ORIENTED_EDGE('',*,*,#7162,.F.); #9983=ORIENTED_EDGE('',*,*,#7163,.F.); #9984=ORIENTED_EDGE('',*,*,#7164,.F.); #9985=ORIENTED_EDGE('',*,*,#7163,.T.); #9986=ORIENTED_EDGE('',*,*,#7165,.F.); #9987=ORIENTED_EDGE('',*,*,#7166,.F.); #9988=ORIENTED_EDGE('',*,*,#7167,.F.); #9989=ORIENTED_EDGE('',*,*,#7166,.T.); #9990=ORIENTED_EDGE('',*,*,#7168,.F.); #9991=ORIENTED_EDGE('',*,*,#7137,.F.); #9992=ORIENTED_EDGE('',*,*,#7167,.T.); #9993=ORIENTED_EDGE('',*,*,#7136,.T.); #9994=ORIENTED_EDGE('',*,*,#7140,.T.); #9995=ORIENTED_EDGE('',*,*,#7143,.T.); #9996=ORIENTED_EDGE('',*,*,#7146,.T.); #9997=ORIENTED_EDGE('',*,*,#7149,.T.); #9998=ORIENTED_EDGE('',*,*,#7152,.T.); #9999=ORIENTED_EDGE('',*,*,#7155,.T.); #10000=ORIENTED_EDGE('',*,*,#7158,.T.); #10001=ORIENTED_EDGE('',*,*,#7161,.T.); #10002=ORIENTED_EDGE('',*,*,#7164,.T.); #10003=ORIENTED_EDGE('',*,*,#7115,.T.); #10004=ORIENTED_EDGE('',*,*,#7134,.T.); #10005=ORIENTED_EDGE('',*,*,#7131,.T.); #10006=ORIENTED_EDGE('',*,*,#7128,.T.); #10007=ORIENTED_EDGE('',*,*,#7125,.T.); #10008=ORIENTED_EDGE('',*,*,#7122,.T.); #10009=ORIENTED_EDGE('',*,*,#7119,.T.); #10010=ORIENTED_EDGE('',*,*,#7168,.T.); #10011=ORIENTED_EDGE('',*,*,#7165,.T.); #10012=ORIENTED_EDGE('',*,*,#7162,.T.); #10013=ORIENTED_EDGE('',*,*,#7159,.T.); #10014=ORIENTED_EDGE('',*,*,#7156,.T.); #10015=ORIENTED_EDGE('',*,*,#7153,.T.); #10016=ORIENTED_EDGE('',*,*,#7150,.T.); #10017=ORIENTED_EDGE('',*,*,#7147,.T.); #10018=ORIENTED_EDGE('',*,*,#7144,.T.); #10019=ORIENTED_EDGE('',*,*,#7141,.T.); #10020=ORIENTED_EDGE('',*,*,#7138,.T.); #10021=ORIENTED_EDGE('',*,*,#7117,.T.); #10022=ORIENTED_EDGE('',*,*,#7121,.T.); #10023=ORIENTED_EDGE('',*,*,#7124,.T.); #10024=ORIENTED_EDGE('',*,*,#7127,.T.); #10025=ORIENTED_EDGE('',*,*,#7130,.T.); #10026=ORIENTED_EDGE('',*,*,#7133,.T.); #10027=ORIENTED_EDGE('',*,*,#7135,.T.); #10028=ORIENTED_EDGE('',*,*,#7169,.F.); #10029=ORIENTED_EDGE('',*,*,#7170,.T.); #10030=ORIENTED_EDGE('',*,*,#7171,.F.); #10031=ORIENTED_EDGE('',*,*,#7172,.F.); #10032=ORIENTED_EDGE('',*,*,#7173,.F.); #10033=ORIENTED_EDGE('',*,*,#7172,.T.); #10034=ORIENTED_EDGE('',*,*,#7174,.F.); #10035=ORIENTED_EDGE('',*,*,#7175,.F.); #10036=ORIENTED_EDGE('',*,*,#7176,.F.); #10037=ORIENTED_EDGE('',*,*,#7175,.T.); #10038=ORIENTED_EDGE('',*,*,#7177,.F.); #10039=ORIENTED_EDGE('',*,*,#7178,.F.); #10040=ORIENTED_EDGE('',*,*,#7179,.F.); #10041=ORIENTED_EDGE('',*,*,#7178,.T.); #10042=ORIENTED_EDGE('',*,*,#7180,.F.); #10043=ORIENTED_EDGE('',*,*,#7181,.F.); #10044=ORIENTED_EDGE('',*,*,#7182,.F.); #10045=ORIENTED_EDGE('',*,*,#7181,.T.); #10046=ORIENTED_EDGE('',*,*,#7183,.F.); #10047=ORIENTED_EDGE('',*,*,#7184,.F.); #10048=ORIENTED_EDGE('',*,*,#7185,.F.); #10049=ORIENTED_EDGE('',*,*,#7184,.T.); #10050=ORIENTED_EDGE('',*,*,#7186,.F.); #10051=ORIENTED_EDGE('',*,*,#7187,.F.); #10052=ORIENTED_EDGE('',*,*,#7188,.F.); #10053=ORIENTED_EDGE('',*,*,#7187,.T.); #10054=ORIENTED_EDGE('',*,*,#7189,.F.); #10055=ORIENTED_EDGE('',*,*,#7190,.F.); #10056=ORIENTED_EDGE('',*,*,#7191,.F.); #10057=ORIENTED_EDGE('',*,*,#7190,.T.); #10058=ORIENTED_EDGE('',*,*,#7192,.F.); #10059=ORIENTED_EDGE('',*,*,#7193,.F.); #10060=ORIENTED_EDGE('',*,*,#7194,.F.); #10061=ORIENTED_EDGE('',*,*,#7193,.T.); #10062=ORIENTED_EDGE('',*,*,#7195,.F.); #10063=ORIENTED_EDGE('',*,*,#7196,.F.); #10064=ORIENTED_EDGE('',*,*,#7197,.F.); #10065=ORIENTED_EDGE('',*,*,#7196,.T.); #10066=ORIENTED_EDGE('',*,*,#7198,.F.); #10067=ORIENTED_EDGE('',*,*,#7199,.F.); #10068=ORIENTED_EDGE('',*,*,#7200,.F.); #10069=ORIENTED_EDGE('',*,*,#7199,.T.); #10070=ORIENTED_EDGE('',*,*,#7201,.F.); #10071=ORIENTED_EDGE('',*,*,#7202,.F.); #10072=ORIENTED_EDGE('',*,*,#7203,.F.); #10073=ORIENTED_EDGE('',*,*,#7202,.T.); #10074=ORIENTED_EDGE('',*,*,#7204,.F.); #10075=ORIENTED_EDGE('',*,*,#7170,.F.); #10076=ORIENTED_EDGE('',*,*,#7203,.T.); #10077=ORIENTED_EDGE('',*,*,#7169,.T.); #10078=ORIENTED_EDGE('',*,*,#7173,.T.); #10079=ORIENTED_EDGE('',*,*,#7176,.T.); #10080=ORIENTED_EDGE('',*,*,#7179,.T.); #10081=ORIENTED_EDGE('',*,*,#7182,.T.); #10082=ORIENTED_EDGE('',*,*,#7185,.T.); #10083=ORIENTED_EDGE('',*,*,#7188,.T.); #10084=ORIENTED_EDGE('',*,*,#7191,.T.); #10085=ORIENTED_EDGE('',*,*,#7194,.T.); #10086=ORIENTED_EDGE('',*,*,#7197,.T.); #10087=ORIENTED_EDGE('',*,*,#7200,.T.); #10088=ORIENTED_EDGE('',*,*,#7204,.T.); #10089=ORIENTED_EDGE('',*,*,#7201,.T.); #10090=ORIENTED_EDGE('',*,*,#7198,.T.); #10091=ORIENTED_EDGE('',*,*,#7195,.T.); #10092=ORIENTED_EDGE('',*,*,#7192,.T.); #10093=ORIENTED_EDGE('',*,*,#7189,.T.); #10094=ORIENTED_EDGE('',*,*,#7186,.T.); #10095=ORIENTED_EDGE('',*,*,#7183,.T.); #10096=ORIENTED_EDGE('',*,*,#7180,.T.); #10097=ORIENTED_EDGE('',*,*,#7177,.T.); #10098=ORIENTED_EDGE('',*,*,#7174,.T.); #10099=ORIENTED_EDGE('',*,*,#7171,.T.); #10100=ORIENTED_EDGE('',*,*,#7205,.F.); #10101=ORIENTED_EDGE('',*,*,#7206,.T.); #10102=ORIENTED_EDGE('',*,*,#7207,.F.); #10103=ORIENTED_EDGE('',*,*,#7208,.F.); #10104=ORIENTED_EDGE('',*,*,#7209,.F.); #10105=ORIENTED_EDGE('',*,*,#7208,.T.); #10106=ORIENTED_EDGE('',*,*,#7210,.F.); #10107=ORIENTED_EDGE('',*,*,#7211,.F.); #10108=ORIENTED_EDGE('',*,*,#7212,.F.); #10109=ORIENTED_EDGE('',*,*,#7211,.T.); #10110=ORIENTED_EDGE('',*,*,#7213,.F.); #10111=ORIENTED_EDGE('',*,*,#7214,.F.); #10112=ORIENTED_EDGE('',*,*,#7215,.F.); #10113=ORIENTED_EDGE('',*,*,#7214,.T.); #10114=ORIENTED_EDGE('',*,*,#7216,.F.); #10115=ORIENTED_EDGE('',*,*,#7217,.F.); #10116=ORIENTED_EDGE('',*,*,#7218,.F.); #10117=ORIENTED_EDGE('',*,*,#7217,.T.); #10118=ORIENTED_EDGE('',*,*,#7219,.F.); #10119=ORIENTED_EDGE('',*,*,#7220,.F.); #10120=ORIENTED_EDGE('',*,*,#7221,.F.); #10121=ORIENTED_EDGE('',*,*,#7220,.T.); #10122=ORIENTED_EDGE('',*,*,#7222,.F.); #10123=ORIENTED_EDGE('',*,*,#7223,.F.); #10124=ORIENTED_EDGE('',*,*,#7224,.F.); #10125=ORIENTED_EDGE('',*,*,#7223,.T.); #10126=ORIENTED_EDGE('',*,*,#7225,.F.); #10127=ORIENTED_EDGE('',*,*,#7226,.F.); #10128=ORIENTED_EDGE('',*,*,#7227,.F.); #10129=ORIENTED_EDGE('',*,*,#7226,.T.); #10130=ORIENTED_EDGE('',*,*,#7228,.F.); #10131=ORIENTED_EDGE('',*,*,#7229,.F.); #10132=ORIENTED_EDGE('',*,*,#7230,.F.); #10133=ORIENTED_EDGE('',*,*,#7229,.T.); #10134=ORIENTED_EDGE('',*,*,#7231,.F.); #10135=ORIENTED_EDGE('',*,*,#7232,.F.); #10136=ORIENTED_EDGE('',*,*,#7233,.F.); #10137=ORIENTED_EDGE('',*,*,#7232,.T.); #10138=ORIENTED_EDGE('',*,*,#7234,.F.); #10139=ORIENTED_EDGE('',*,*,#7235,.F.); #10140=ORIENTED_EDGE('',*,*,#7236,.F.); #10141=ORIENTED_EDGE('',*,*,#7235,.T.); #10142=ORIENTED_EDGE('',*,*,#7237,.F.); #10143=ORIENTED_EDGE('',*,*,#7238,.F.); #10144=ORIENTED_EDGE('',*,*,#7239,.F.); #10145=ORIENTED_EDGE('',*,*,#7238,.T.); #10146=ORIENTED_EDGE('',*,*,#7240,.F.); #10147=ORIENTED_EDGE('',*,*,#7241,.F.); #10148=ORIENTED_EDGE('',*,*,#7242,.F.); #10149=ORIENTED_EDGE('',*,*,#7241,.T.); #10150=ORIENTED_EDGE('',*,*,#7243,.F.); #10151=ORIENTED_EDGE('',*,*,#7244,.F.); #10152=ORIENTED_EDGE('',*,*,#7245,.F.); #10153=ORIENTED_EDGE('',*,*,#7244,.T.); #10154=ORIENTED_EDGE('',*,*,#7246,.F.); #10155=ORIENTED_EDGE('',*,*,#7247,.F.); #10156=ORIENTED_EDGE('',*,*,#7248,.F.); #10157=ORIENTED_EDGE('',*,*,#7247,.T.); #10158=ORIENTED_EDGE('',*,*,#7249,.F.); #10159=ORIENTED_EDGE('',*,*,#7250,.F.); #10160=ORIENTED_EDGE('',*,*,#7251,.F.); #10161=ORIENTED_EDGE('',*,*,#7250,.T.); #10162=ORIENTED_EDGE('',*,*,#7252,.F.); #10163=ORIENTED_EDGE('',*,*,#7253,.F.); #10164=ORIENTED_EDGE('',*,*,#7254,.F.); #10165=ORIENTED_EDGE('',*,*,#7253,.T.); #10166=ORIENTED_EDGE('',*,*,#7255,.F.); #10167=ORIENTED_EDGE('',*,*,#7256,.F.); #10168=ORIENTED_EDGE('',*,*,#7257,.F.); #10169=ORIENTED_EDGE('',*,*,#7256,.T.); #10170=ORIENTED_EDGE('',*,*,#7258,.F.); #10171=ORIENTED_EDGE('',*,*,#7259,.F.); #10172=ORIENTED_EDGE('',*,*,#7260,.F.); #10173=ORIENTED_EDGE('',*,*,#7259,.T.); #10174=ORIENTED_EDGE('',*,*,#7261,.F.); #10175=ORIENTED_EDGE('',*,*,#7262,.F.); #10176=ORIENTED_EDGE('',*,*,#7263,.F.); #10177=ORIENTED_EDGE('',*,*,#7262,.T.); #10178=ORIENTED_EDGE('',*,*,#7264,.F.); #10179=ORIENTED_EDGE('',*,*,#7265,.F.); #10180=ORIENTED_EDGE('',*,*,#7266,.F.); #10181=ORIENTED_EDGE('',*,*,#7265,.T.); #10182=ORIENTED_EDGE('',*,*,#7267,.F.); #10183=ORIENTED_EDGE('',*,*,#7268,.F.); #10184=ORIENTED_EDGE('',*,*,#7269,.F.); #10185=ORIENTED_EDGE('',*,*,#7268,.T.); #10186=ORIENTED_EDGE('',*,*,#7270,.F.); #10187=ORIENTED_EDGE('',*,*,#7271,.F.); #10188=ORIENTED_EDGE('',*,*,#7272,.F.); #10189=ORIENTED_EDGE('',*,*,#7271,.T.); #10190=ORIENTED_EDGE('',*,*,#7273,.F.); #10191=ORIENTED_EDGE('',*,*,#7274,.F.); #10192=ORIENTED_EDGE('',*,*,#7275,.F.); #10193=ORIENTED_EDGE('',*,*,#7274,.T.); #10194=ORIENTED_EDGE('',*,*,#7276,.F.); #10195=ORIENTED_EDGE('',*,*,#7277,.F.); #10196=ORIENTED_EDGE('',*,*,#7278,.F.); #10197=ORIENTED_EDGE('',*,*,#7277,.T.); #10198=ORIENTED_EDGE('',*,*,#7279,.F.); #10199=ORIENTED_EDGE('',*,*,#7280,.F.); #10200=ORIENTED_EDGE('',*,*,#7281,.F.); #10201=ORIENTED_EDGE('',*,*,#7280,.T.); #10202=ORIENTED_EDGE('',*,*,#7282,.F.); #10203=ORIENTED_EDGE('',*,*,#7283,.F.); #10204=ORIENTED_EDGE('',*,*,#7284,.F.); #10205=ORIENTED_EDGE('',*,*,#7283,.T.); #10206=ORIENTED_EDGE('',*,*,#7285,.F.); #10207=ORIENTED_EDGE('',*,*,#7206,.F.); #10208=ORIENTED_EDGE('',*,*,#7284,.T.); #10209=ORIENTED_EDGE('',*,*,#7205,.T.); #10210=ORIENTED_EDGE('',*,*,#7209,.T.); #10211=ORIENTED_EDGE('',*,*,#7212,.T.); #10212=ORIENTED_EDGE('',*,*,#7215,.T.); #10213=ORIENTED_EDGE('',*,*,#7218,.T.); #10214=ORIENTED_EDGE('',*,*,#7221,.T.); #10215=ORIENTED_EDGE('',*,*,#7224,.T.); #10216=ORIENTED_EDGE('',*,*,#7227,.T.); #10217=ORIENTED_EDGE('',*,*,#7230,.T.); #10218=ORIENTED_EDGE('',*,*,#7233,.T.); #10219=ORIENTED_EDGE('',*,*,#7236,.T.); #10220=ORIENTED_EDGE('',*,*,#7239,.T.); #10221=ORIENTED_EDGE('',*,*,#7242,.T.); #10222=ORIENTED_EDGE('',*,*,#7245,.T.); #10223=ORIENTED_EDGE('',*,*,#7248,.T.); #10224=ORIENTED_EDGE('',*,*,#7251,.T.); #10225=ORIENTED_EDGE('',*,*,#7254,.T.); #10226=ORIENTED_EDGE('',*,*,#7257,.T.); #10227=ORIENTED_EDGE('',*,*,#7260,.T.); #10228=ORIENTED_EDGE('',*,*,#7263,.T.); #10229=ORIENTED_EDGE('',*,*,#7266,.T.); #10230=ORIENTED_EDGE('',*,*,#7269,.T.); #10231=ORIENTED_EDGE('',*,*,#7272,.T.); #10232=ORIENTED_EDGE('',*,*,#7275,.T.); #10233=ORIENTED_EDGE('',*,*,#7278,.T.); #10234=ORIENTED_EDGE('',*,*,#7281,.T.); #10235=ORIENTED_EDGE('',*,*,#7285,.T.); #10236=ORIENTED_EDGE('',*,*,#7282,.T.); #10237=ORIENTED_EDGE('',*,*,#7279,.T.); #10238=ORIENTED_EDGE('',*,*,#7276,.T.); #10239=ORIENTED_EDGE('',*,*,#7273,.T.); #10240=ORIENTED_EDGE('',*,*,#7270,.T.); #10241=ORIENTED_EDGE('',*,*,#7267,.T.); #10242=ORIENTED_EDGE('',*,*,#7264,.T.); #10243=ORIENTED_EDGE('',*,*,#7261,.T.); #10244=ORIENTED_EDGE('',*,*,#7258,.T.); #10245=ORIENTED_EDGE('',*,*,#7255,.T.); #10246=ORIENTED_EDGE('',*,*,#7252,.T.); #10247=ORIENTED_EDGE('',*,*,#7249,.T.); #10248=ORIENTED_EDGE('',*,*,#7246,.T.); #10249=ORIENTED_EDGE('',*,*,#7243,.T.); #10250=ORIENTED_EDGE('',*,*,#7240,.T.); #10251=ORIENTED_EDGE('',*,*,#7237,.T.); #10252=ORIENTED_EDGE('',*,*,#7234,.T.); #10253=ORIENTED_EDGE('',*,*,#7231,.T.); #10254=ORIENTED_EDGE('',*,*,#7228,.T.); #10255=ORIENTED_EDGE('',*,*,#7225,.T.); #10256=ORIENTED_EDGE('',*,*,#7222,.T.); #10257=ORIENTED_EDGE('',*,*,#7219,.T.); #10258=ORIENTED_EDGE('',*,*,#7216,.T.); #10259=ORIENTED_EDGE('',*,*,#7213,.T.); #10260=ORIENTED_EDGE('',*,*,#7210,.T.); #10261=ORIENTED_EDGE('',*,*,#7207,.T.); #10262=ORIENTED_EDGE('',*,*,#7286,.F.); #10263=ORIENTED_EDGE('',*,*,#7287,.T.); #10264=ORIENTED_EDGE('',*,*,#7288,.F.); #10265=ORIENTED_EDGE('',*,*,#7289,.F.); #10266=ORIENTED_EDGE('',*,*,#7290,.F.); #10267=ORIENTED_EDGE('',*,*,#7291,.T.); #10268=ORIENTED_EDGE('',*,*,#7292,.F.); #10269=ORIENTED_EDGE('',*,*,#7287,.F.); #10270=ORIENTED_EDGE('',*,*,#7293,.F.); #10271=ORIENTED_EDGE('',*,*,#7294,.T.); #10272=ORIENTED_EDGE('',*,*,#7295,.F.); #10273=ORIENTED_EDGE('',*,*,#7291,.F.); #10274=ORIENTED_EDGE('',*,*,#7296,.F.); #10275=ORIENTED_EDGE('',*,*,#7297,.T.); #10276=ORIENTED_EDGE('',*,*,#7298,.F.); #10277=ORIENTED_EDGE('',*,*,#7294,.F.); #10278=ORIENTED_EDGE('',*,*,#7299,.F.); #10279=ORIENTED_EDGE('',*,*,#7300,.T.); #10280=ORIENTED_EDGE('',*,*,#7301,.F.); #10281=ORIENTED_EDGE('',*,*,#7297,.F.); #10282=ORIENTED_EDGE('',*,*,#7302,.F.); #10283=ORIENTED_EDGE('',*,*,#7303,.T.); #10284=ORIENTED_EDGE('',*,*,#7304,.F.); #10285=ORIENTED_EDGE('',*,*,#7300,.F.); #10286=ORIENTED_EDGE('',*,*,#7305,.F.); #10287=ORIENTED_EDGE('',*,*,#7306,.T.); #10288=ORIENTED_EDGE('',*,*,#7307,.F.); #10289=ORIENTED_EDGE('',*,*,#7303,.F.); #10290=ORIENTED_EDGE('',*,*,#7308,.F.); #10291=ORIENTED_EDGE('',*,*,#7289,.T.); #10292=ORIENTED_EDGE('',*,*,#7309,.F.); #10293=ORIENTED_EDGE('',*,*,#7306,.F.); #10294=ORIENTED_EDGE('',*,*,#7310,.F.); #10295=ORIENTED_EDGE('',*,*,#7311,.T.); #10296=ORIENTED_EDGE('',*,*,#7312,.F.); #10297=ORIENTED_EDGE('',*,*,#7313,.F.); #10298=ORIENTED_EDGE('',*,*,#7314,.F.); #10299=ORIENTED_EDGE('',*,*,#7313,.T.); #10300=ORIENTED_EDGE('',*,*,#7315,.F.); #10301=ORIENTED_EDGE('',*,*,#7316,.F.); #10302=ORIENTED_EDGE('',*,*,#7317,.F.); #10303=ORIENTED_EDGE('',*,*,#7316,.T.); #10304=ORIENTED_EDGE('',*,*,#7318,.F.); #10305=ORIENTED_EDGE('',*,*,#7319,.F.); #10306=ORIENTED_EDGE('',*,*,#7320,.F.); #10307=ORIENTED_EDGE('',*,*,#7319,.T.); #10308=ORIENTED_EDGE('',*,*,#7321,.F.); #10309=ORIENTED_EDGE('',*,*,#7311,.F.); #10310=ORIENTED_EDGE('',*,*,#7320,.T.); #10311=ORIENTED_EDGE('',*,*,#7310,.T.); #10312=ORIENTED_EDGE('',*,*,#7314,.T.); #10313=ORIENTED_EDGE('',*,*,#7317,.T.); #10314=ORIENTED_EDGE('',*,*,#7286,.T.); #10315=ORIENTED_EDGE('',*,*,#7308,.T.); #10316=ORIENTED_EDGE('',*,*,#7305,.T.); #10317=ORIENTED_EDGE('',*,*,#7302,.T.); #10318=ORIENTED_EDGE('',*,*,#7299,.T.); #10319=ORIENTED_EDGE('',*,*,#7296,.T.); #10320=ORIENTED_EDGE('',*,*,#7293,.T.); #10321=ORIENTED_EDGE('',*,*,#7290,.T.); #10322=ORIENTED_EDGE('',*,*,#7321,.T.); #10323=ORIENTED_EDGE('',*,*,#7318,.T.); #10324=ORIENTED_EDGE('',*,*,#7315,.T.); #10325=ORIENTED_EDGE('',*,*,#7312,.T.); #10326=ORIENTED_EDGE('',*,*,#7288,.T.); #10327=ORIENTED_EDGE('',*,*,#7292,.T.); #10328=ORIENTED_EDGE('',*,*,#7295,.T.); #10329=ORIENTED_EDGE('',*,*,#7298,.T.); #10330=ORIENTED_EDGE('',*,*,#7301,.T.); #10331=ORIENTED_EDGE('',*,*,#7304,.T.); #10332=ORIENTED_EDGE('',*,*,#7307,.T.); #10333=ORIENTED_EDGE('',*,*,#7309,.T.); #10334=ORIENTED_EDGE('',*,*,#7322,.F.); #10335=ORIENTED_EDGE('',*,*,#7323,.T.); #10336=ORIENTED_EDGE('',*,*,#7324,.F.); #10337=ORIENTED_EDGE('',*,*,#7325,.F.); #10338=ORIENTED_EDGE('',*,*,#7326,.F.); #10339=ORIENTED_EDGE('',*,*,#7327,.T.); #10340=ORIENTED_EDGE('',*,*,#7328,.F.); #10341=ORIENTED_EDGE('',*,*,#7323,.F.); #10342=ORIENTED_EDGE('',*,*,#7329,.F.); #10343=ORIENTED_EDGE('',*,*,#7330,.T.); #10344=ORIENTED_EDGE('',*,*,#7331,.F.); #10345=ORIENTED_EDGE('',*,*,#7327,.F.); #10346=ORIENTED_EDGE('',*,*,#7332,.F.); #10347=ORIENTED_EDGE('',*,*,#7333,.T.); #10348=ORIENTED_EDGE('',*,*,#7334,.F.); #10349=ORIENTED_EDGE('',*,*,#7330,.F.); #10350=ORIENTED_EDGE('',*,*,#7335,.F.); #10351=ORIENTED_EDGE('',*,*,#7336,.T.); #10352=ORIENTED_EDGE('',*,*,#7337,.F.); #10353=ORIENTED_EDGE('',*,*,#7333,.F.); #10354=ORIENTED_EDGE('',*,*,#7338,.F.); #10355=ORIENTED_EDGE('',*,*,#7339,.T.); #10356=ORIENTED_EDGE('',*,*,#7340,.F.); #10357=ORIENTED_EDGE('',*,*,#7336,.F.); #10358=ORIENTED_EDGE('',*,*,#7341,.F.); #10359=ORIENTED_EDGE('',*,*,#7342,.T.); #10360=ORIENTED_EDGE('',*,*,#7343,.F.); #10361=ORIENTED_EDGE('',*,*,#7339,.F.); #10362=ORIENTED_EDGE('',*,*,#7344,.F.); #10363=ORIENTED_EDGE('',*,*,#7325,.T.); #10364=ORIENTED_EDGE('',*,*,#7345,.F.); #10365=ORIENTED_EDGE('',*,*,#7342,.F.); #10366=ORIENTED_EDGE('',*,*,#7346,.F.); #10367=ORIENTED_EDGE('',*,*,#7347,.T.); #10368=ORIENTED_EDGE('',*,*,#7348,.F.); #10369=ORIENTED_EDGE('',*,*,#7349,.F.); #10370=ORIENTED_EDGE('',*,*,#7350,.F.); #10371=ORIENTED_EDGE('',*,*,#7349,.T.); #10372=ORIENTED_EDGE('',*,*,#7351,.F.); #10373=ORIENTED_EDGE('',*,*,#7352,.F.); #10374=ORIENTED_EDGE('',*,*,#7353,.F.); #10375=ORIENTED_EDGE('',*,*,#7352,.T.); #10376=ORIENTED_EDGE('',*,*,#7354,.F.); #10377=ORIENTED_EDGE('',*,*,#7355,.F.); #10378=ORIENTED_EDGE('',*,*,#7356,.F.); #10379=ORIENTED_EDGE('',*,*,#7355,.T.); #10380=ORIENTED_EDGE('',*,*,#7357,.F.); #10381=ORIENTED_EDGE('',*,*,#7347,.F.); #10382=ORIENTED_EDGE('',*,*,#7356,.T.); #10383=ORIENTED_EDGE('',*,*,#7346,.T.); #10384=ORIENTED_EDGE('',*,*,#7350,.T.); #10385=ORIENTED_EDGE('',*,*,#7353,.T.); #10386=ORIENTED_EDGE('',*,*,#7322,.T.); #10387=ORIENTED_EDGE('',*,*,#7344,.T.); #10388=ORIENTED_EDGE('',*,*,#7341,.T.); #10389=ORIENTED_EDGE('',*,*,#7338,.T.); #10390=ORIENTED_EDGE('',*,*,#7335,.T.); #10391=ORIENTED_EDGE('',*,*,#7332,.T.); #10392=ORIENTED_EDGE('',*,*,#7329,.T.); #10393=ORIENTED_EDGE('',*,*,#7326,.T.); #10394=ORIENTED_EDGE('',*,*,#7357,.T.); #10395=ORIENTED_EDGE('',*,*,#7354,.T.); #10396=ORIENTED_EDGE('',*,*,#7351,.T.); #10397=ORIENTED_EDGE('',*,*,#7348,.T.); #10398=ORIENTED_EDGE('',*,*,#7324,.T.); #10399=ORIENTED_EDGE('',*,*,#7328,.T.); #10400=ORIENTED_EDGE('',*,*,#7331,.T.); #10401=ORIENTED_EDGE('',*,*,#7334,.T.); #10402=ORIENTED_EDGE('',*,*,#7337,.T.); #10403=ORIENTED_EDGE('',*,*,#7340,.T.); #10404=ORIENTED_EDGE('',*,*,#7343,.T.); #10405=ORIENTED_EDGE('',*,*,#7345,.T.); #10406=ORIENTED_EDGE('',*,*,#7358,.F.); #10407=ORIENTED_EDGE('',*,*,#7359,.T.); #10408=ORIENTED_EDGE('',*,*,#7360,.F.); #10409=ORIENTED_EDGE('',*,*,#7361,.F.); #10410=ORIENTED_EDGE('',*,*,#7362,.F.); #10411=ORIENTED_EDGE('',*,*,#7361,.T.); #10412=ORIENTED_EDGE('',*,*,#7363,.F.); #10413=ORIENTED_EDGE('',*,*,#7364,.F.); #10414=ORIENTED_EDGE('',*,*,#7365,.F.); #10415=ORIENTED_EDGE('',*,*,#7364,.T.); #10416=ORIENTED_EDGE('',*,*,#7366,.F.); #10417=ORIENTED_EDGE('',*,*,#7367,.F.); #10418=ORIENTED_EDGE('',*,*,#7368,.F.); #10419=ORIENTED_EDGE('',*,*,#7367,.T.); #10420=ORIENTED_EDGE('',*,*,#7369,.F.); #10421=ORIENTED_EDGE('',*,*,#7370,.F.); #10422=ORIENTED_EDGE('',*,*,#7371,.F.); #10423=ORIENTED_EDGE('',*,*,#7370,.T.); #10424=ORIENTED_EDGE('',*,*,#7372,.F.); #10425=ORIENTED_EDGE('',*,*,#7373,.F.); #10426=ORIENTED_EDGE('',*,*,#7374,.F.); #10427=ORIENTED_EDGE('',*,*,#7373,.T.); #10428=ORIENTED_EDGE('',*,*,#7375,.F.); #10429=ORIENTED_EDGE('',*,*,#7376,.F.); #10430=ORIENTED_EDGE('',*,*,#7377,.F.); #10431=ORIENTED_EDGE('',*,*,#7376,.T.); #10432=ORIENTED_EDGE('',*,*,#7378,.F.); #10433=ORIENTED_EDGE('',*,*,#7379,.F.); #10434=ORIENTED_EDGE('',*,*,#7380,.F.); #10435=ORIENTED_EDGE('',*,*,#7379,.T.); #10436=ORIENTED_EDGE('',*,*,#7381,.F.); #10437=ORIENTED_EDGE('',*,*,#7382,.F.); #10438=ORIENTED_EDGE('',*,*,#7383,.F.); #10439=ORIENTED_EDGE('',*,*,#7382,.T.); #10440=ORIENTED_EDGE('',*,*,#7384,.F.); #10441=ORIENTED_EDGE('',*,*,#7385,.F.); #10442=ORIENTED_EDGE('',*,*,#7386,.F.); #10443=ORIENTED_EDGE('',*,*,#7385,.T.); #10444=ORIENTED_EDGE('',*,*,#7387,.F.); #10445=ORIENTED_EDGE('',*,*,#7359,.F.); #10446=ORIENTED_EDGE('',*,*,#7386,.T.); #10447=ORIENTED_EDGE('',*,*,#7358,.T.); #10448=ORIENTED_EDGE('',*,*,#7362,.T.); #10449=ORIENTED_EDGE('',*,*,#7365,.T.); #10450=ORIENTED_EDGE('',*,*,#7368,.T.); #10451=ORIENTED_EDGE('',*,*,#7371,.T.); #10452=ORIENTED_EDGE('',*,*,#7374,.T.); #10453=ORIENTED_EDGE('',*,*,#7377,.T.); #10454=ORIENTED_EDGE('',*,*,#7380,.T.); #10455=ORIENTED_EDGE('',*,*,#7383,.T.); #10456=ORIENTED_EDGE('',*,*,#7387,.T.); #10457=ORIENTED_EDGE('',*,*,#7384,.T.); #10458=ORIENTED_EDGE('',*,*,#7381,.T.); #10459=ORIENTED_EDGE('',*,*,#7378,.T.); #10460=ORIENTED_EDGE('',*,*,#7375,.T.); #10461=ORIENTED_EDGE('',*,*,#7372,.T.); #10462=ORIENTED_EDGE('',*,*,#7369,.T.); #10463=ORIENTED_EDGE('',*,*,#7366,.T.); #10464=ORIENTED_EDGE('',*,*,#7363,.T.); #10465=ORIENTED_EDGE('',*,*,#7360,.T.); #10466=ORIENTED_EDGE('',*,*,#7388,.T.); #10467=ORIENTED_EDGE('',*,*,#7389,.T.); #10468=ORIENTED_EDGE('',*,*,#7390,.T.); #10469=ORIENTED_EDGE('',*,*,#7391,.T.); #10470=ORIENTED_EDGE('',*,*,#7390,.F.); #10471=ORIENTED_EDGE('',*,*,#7392,.F.); #10472=ORIENTED_EDGE('',*,*,#7393,.F.); #10473=ORIENTED_EDGE('',*,*,#7394,.F.); #10474=ORIENTED_EDGE('',*,*,#7395,.F.); #10475=ORIENTED_EDGE('',*,*,#7396,.F.); #10476=ORIENTED_EDGE('',*,*,#7397,.T.); #10477=ORIENTED_EDGE('',*,*,#7398,.F.); #10478=ORIENTED_EDGE('',*,*,#7389,.F.); #10479=ORIENTED_EDGE('',*,*,#7399,.F.); #10480=ORIENTED_EDGE('',*,*,#7400,.F.); #10481=ORIENTED_EDGE('',*,*,#7392,.T.); #10482=ORIENTED_EDGE('',*,*,#7397,.F.); #10483=ORIENTED_EDGE('',*,*,#7401,.T.); #10484=ORIENTED_EDGE('',*,*,#7402,.T.); #10485=ORIENTED_EDGE('',*,*,#7403,.T.); #10486=ORIENTED_EDGE('',*,*,#7391,.F.); #10487=ORIENTED_EDGE('',*,*,#7398,.T.); #10488=ORIENTED_EDGE('',*,*,#7403,.F.); #10489=ORIENTED_EDGE('',*,*,#7404,.F.); #10490=ORIENTED_EDGE('',*,*,#7395,.T.); #10491=ORIENTED_EDGE('',*,*,#7405,.T.); #10492=ORIENTED_EDGE('',*,*,#7406,.F.); #10493=ORIENTED_EDGE('',*,*,#7407,.F.); #10494=ORIENTED_EDGE('',*,*,#7401,.F.); #10495=ORIENTED_EDGE('',*,*,#7396,.T.); #10496=ORIENTED_EDGE('',*,*,#7407,.T.); #10497=ORIENTED_EDGE('',*,*,#7408,.F.); #10498=ORIENTED_EDGE('',*,*,#7393,.T.); #10499=ORIENTED_EDGE('',*,*,#7400,.T.); #10500=ORIENTED_EDGE('',*,*,#7409,.F.); #10501=ORIENTED_EDGE('',*,*,#7410,.F.); #10502=ORIENTED_EDGE('',*,*,#7394,.T.); #10503=ORIENTED_EDGE('',*,*,#7410,.T.); #10504=ORIENTED_EDGE('',*,*,#7411,.F.); #10505=ORIENTED_EDGE('',*,*,#7405,.F.); #10506=ORIENTED_EDGE('',*,*,#7388,.F.); #10507=ORIENTED_EDGE('',*,*,#7404,.T.); #10508=ORIENTED_EDGE('',*,*,#7402,.F.); #10509=ORIENTED_EDGE('',*,*,#7408,.T.); #10510=ORIENTED_EDGE('',*,*,#7406,.T.); #10511=ORIENTED_EDGE('',*,*,#7411,.T.); #10512=ORIENTED_EDGE('',*,*,#7409,.T.); #10513=ORIENTED_EDGE('',*,*,#7399,.T.); #10514=ORIENTED_EDGE('',*,*,#7412,.F.); #10515=ORIENTED_EDGE('',*,*,#7413,.F.); #10516=ORIENTED_EDGE('',*,*,#7413,.T.); #10517=ORIENTED_EDGE('',*,*,#7412,.T.); #10518=ORIENTED_EDGE('',*,*,#7414,.T.); #10519=ORIENTED_EDGE('',*,*,#7415,.T.); #10520=ORIENTED_EDGE('',*,*,#7416,.F.); #10521=ORIENTED_EDGE('',*,*,#7417,.F.); #10522=ORIENTED_EDGE('',*,*,#7418,.T.); #10523=ORIENTED_EDGE('',*,*,#7417,.T.); #10524=ORIENTED_EDGE('',*,*,#7419,.F.); #10525=ORIENTED_EDGE('',*,*,#7420,.F.); #10526=ORIENTED_EDGE('',*,*,#7421,.T.); #10527=ORIENTED_EDGE('',*,*,#7420,.T.); #10528=ORIENTED_EDGE('',*,*,#7422,.F.); #10529=ORIENTED_EDGE('',*,*,#7423,.F.); #10530=ORIENTED_EDGE('',*,*,#7424,.T.); #10531=ORIENTED_EDGE('',*,*,#7423,.T.); #10532=ORIENTED_EDGE('',*,*,#7425,.F.); #10533=ORIENTED_EDGE('',*,*,#7415,.F.); #10534=ORIENTED_EDGE('',*,*,#7425,.T.); #10535=ORIENTED_EDGE('',*,*,#7422,.T.); #10536=ORIENTED_EDGE('',*,*,#7419,.T.); #10537=ORIENTED_EDGE('',*,*,#7416,.T.); #10538=ORIENTED_EDGE('',*,*,#7424,.F.); #10539=ORIENTED_EDGE('',*,*,#7414,.F.); #10540=ORIENTED_EDGE('',*,*,#7418,.F.); #10541=ORIENTED_EDGE('',*,*,#7421,.F.); #10542=ORIENTED_EDGE('',*,*,#7426,.T.); #10543=ORIENTED_EDGE('',*,*,#7427,.T.); #10544=ORIENTED_EDGE('',*,*,#7428,.T.); #10545=ORIENTED_EDGE('',*,*,#7429,.T.); #10546=ORIENTED_EDGE('',*,*,#7427,.F.); #10547=ORIENTED_EDGE('',*,*,#7430,.T.); #10548=ORIENTED_EDGE('',*,*,#7431,.T.); #10549=ORIENTED_EDGE('',*,*,#7432,.F.); #10550=ORIENTED_EDGE('',*,*,#7433,.T.); #10551=ORIENTED_EDGE('',*,*,#7434,.T.); #10552=ORIENTED_EDGE('',*,*,#7435,.T.); #10553=ORIENTED_EDGE('',*,*,#7436,.T.); #10554=ORIENTED_EDGE('',*,*,#7429,.F.); #10555=ORIENTED_EDGE('',*,*,#7437,.F.); #10556=ORIENTED_EDGE('',*,*,#7434,.F.); #10557=ORIENTED_EDGE('',*,*,#7438,.T.); #10558=ORIENTED_EDGE('',*,*,#7439,.T.); #10559=ORIENTED_EDGE('',*,*,#7440,.T.); #10560=ORIENTED_EDGE('',*,*,#7441,.T.); #10561=ORIENTED_EDGE('',*,*,#7442,.T.); #10562=ORIENTED_EDGE('',*,*,#7439,.F.); #10563=ORIENTED_EDGE('',*,*,#7443,.T.); #10564=ORIENTED_EDGE('',*,*,#7435,.F.); #10565=ORIENTED_EDGE('',*,*,#7437,.T.); #10566=ORIENTED_EDGE('',*,*,#7428,.F.); #10567=ORIENTED_EDGE('',*,*,#7432,.T.); #10568=ORIENTED_EDGE('',*,*,#7444,.T.); #10569=ORIENTED_EDGE('',*,*,#7445,.T.); #10570=ORIENTED_EDGE('',*,*,#7446,.T.); #10571=ORIENTED_EDGE('',*,*,#7436,.F.); #10572=ORIENTED_EDGE('',*,*,#7443,.F.); #10573=ORIENTED_EDGE('',*,*,#7442,.F.); #10574=ORIENTED_EDGE('',*,*,#7447,.T.); #10575=ORIENTED_EDGE('',*,*,#7440,.F.); #10576=ORIENTED_EDGE('',*,*,#7446,.F.); #10577=ORIENTED_EDGE('',*,*,#7448,.F.); #10578=ORIENTED_EDGE('',*,*,#7449,.T.); #10579=ORIENTED_EDGE('',*,*,#7450,.T.); #10580=ORIENTED_EDGE('',*,*,#7448,.T.); #10581=ORIENTED_EDGE('',*,*,#7445,.F.); #10582=ORIENTED_EDGE('',*,*,#7451,.F.); #10583=ORIENTED_EDGE('',*,*,#7452,.T.); #10584=ORIENTED_EDGE('',*,*,#7451,.T.); #10585=ORIENTED_EDGE('',*,*,#7444,.F.); #10586=ORIENTED_EDGE('',*,*,#7431,.F.); #10587=ORIENTED_EDGE('',*,*,#7441,.F.); #10588=ORIENTED_EDGE('',*,*,#7449,.F.); #10589=ORIENTED_EDGE('',*,*,#7450,.F.); #10590=ORIENTED_EDGE('',*,*,#7452,.F.); #10591=ORIENTED_EDGE('',*,*,#7430,.F.); #10592=ORIENTED_EDGE('',*,*,#7426,.F.); #10593=ORIENTED_EDGE('',*,*,#7438,.F.); #10594=ORIENTED_EDGE('',*,*,#7433,.F.); #10595=ORIENTED_EDGE('',*,*,#7447,.F.); #10596=ORIENTED_EDGE('',*,*,#7453,.F.); #10597=ORIENTED_EDGE('',*,*,#7454,.T.); #10598=ORIENTED_EDGE('',*,*,#7455,.F.); #10599=ORIENTED_EDGE('',*,*,#7456,.F.); #10600=ORIENTED_EDGE('',*,*,#7457,.F.); #10601=ORIENTED_EDGE('',*,*,#7456,.T.); #10602=ORIENTED_EDGE('',*,*,#7458,.F.); #10603=ORIENTED_EDGE('',*,*,#7459,.F.); #10604=ORIENTED_EDGE('',*,*,#7460,.F.); #10605=ORIENTED_EDGE('',*,*,#7459,.T.); #10606=ORIENTED_EDGE('',*,*,#7461,.F.); #10607=ORIENTED_EDGE('',*,*,#7462,.F.); #10608=ORIENTED_EDGE('',*,*,#7463,.F.); #10609=ORIENTED_EDGE('',*,*,#7462,.T.); #10610=ORIENTED_EDGE('',*,*,#7464,.F.); #10611=ORIENTED_EDGE('',*,*,#7465,.F.); #10612=ORIENTED_EDGE('',*,*,#7466,.F.); #10613=ORIENTED_EDGE('',*,*,#7465,.T.); #10614=ORIENTED_EDGE('',*,*,#7467,.F.); #10615=ORIENTED_EDGE('',*,*,#7468,.F.); #10616=ORIENTED_EDGE('',*,*,#7469,.F.); #10617=ORIENTED_EDGE('',*,*,#7468,.T.); #10618=ORIENTED_EDGE('',*,*,#7470,.F.); #10619=ORIENTED_EDGE('',*,*,#7471,.F.); #10620=ORIENTED_EDGE('',*,*,#7472,.F.); #10621=ORIENTED_EDGE('',*,*,#7471,.T.); #10622=ORIENTED_EDGE('',*,*,#7473,.F.); #10623=ORIENTED_EDGE('',*,*,#7454,.F.); #10624=ORIENTED_EDGE('',*,*,#7472,.T.); #10625=ORIENTED_EDGE('',*,*,#7453,.T.); #10626=ORIENTED_EDGE('',*,*,#7457,.T.); #10627=ORIENTED_EDGE('',*,*,#7460,.T.); #10628=ORIENTED_EDGE('',*,*,#7463,.T.); #10629=ORIENTED_EDGE('',*,*,#7466,.T.); #10630=ORIENTED_EDGE('',*,*,#7469,.T.); #10631=ORIENTED_EDGE('',*,*,#7473,.T.); #10632=ORIENTED_EDGE('',*,*,#7470,.T.); #10633=ORIENTED_EDGE('',*,*,#7467,.T.); #10634=ORIENTED_EDGE('',*,*,#7464,.T.); #10635=ORIENTED_EDGE('',*,*,#7461,.T.); #10636=ORIENTED_EDGE('',*,*,#7458,.T.); #10637=ORIENTED_EDGE('',*,*,#7455,.T.); #10638=ORIENTED_EDGE('',*,*,#7474,.F.); #10639=ORIENTED_EDGE('',*,*,#7475,.T.); #10640=ORIENTED_EDGE('',*,*,#7476,.F.); #10641=ORIENTED_EDGE('',*,*,#7477,.F.); #10642=ORIENTED_EDGE('',*,*,#7478,.F.); #10643=ORIENTED_EDGE('',*,*,#7477,.T.); #10644=ORIENTED_EDGE('',*,*,#7479,.F.); #10645=ORIENTED_EDGE('',*,*,#7480,.F.); #10646=ORIENTED_EDGE('',*,*,#7481,.F.); #10647=ORIENTED_EDGE('',*,*,#7480,.T.); #10648=ORIENTED_EDGE('',*,*,#7482,.F.); #10649=ORIENTED_EDGE('',*,*,#7483,.F.); #10650=ORIENTED_EDGE('',*,*,#7484,.F.); #10651=ORIENTED_EDGE('',*,*,#7483,.T.); #10652=ORIENTED_EDGE('',*,*,#7485,.F.); #10653=ORIENTED_EDGE('',*,*,#7486,.F.); #10654=ORIENTED_EDGE('',*,*,#7487,.F.); #10655=ORIENTED_EDGE('',*,*,#7486,.T.); #10656=ORIENTED_EDGE('',*,*,#7488,.F.); #10657=ORIENTED_EDGE('',*,*,#7489,.F.); #10658=ORIENTED_EDGE('',*,*,#7490,.F.); #10659=ORIENTED_EDGE('',*,*,#7489,.T.); #10660=ORIENTED_EDGE('',*,*,#7491,.F.); #10661=ORIENTED_EDGE('',*,*,#7492,.F.); #10662=ORIENTED_EDGE('',*,*,#7493,.F.); #10663=ORIENTED_EDGE('',*,*,#7492,.T.); #10664=ORIENTED_EDGE('',*,*,#7494,.F.); #10665=ORIENTED_EDGE('',*,*,#7475,.F.); #10666=ORIENTED_EDGE('',*,*,#7493,.T.); #10667=ORIENTED_EDGE('',*,*,#7474,.T.); #10668=ORIENTED_EDGE('',*,*,#7478,.T.); #10669=ORIENTED_EDGE('',*,*,#7481,.T.); #10670=ORIENTED_EDGE('',*,*,#7484,.T.); #10671=ORIENTED_EDGE('',*,*,#7487,.T.); #10672=ORIENTED_EDGE('',*,*,#7490,.T.); #10673=ORIENTED_EDGE('',*,*,#7494,.T.); #10674=ORIENTED_EDGE('',*,*,#7491,.T.); #10675=ORIENTED_EDGE('',*,*,#7488,.T.); #10676=ORIENTED_EDGE('',*,*,#7485,.T.); #10677=ORIENTED_EDGE('',*,*,#7482,.T.); #10678=ORIENTED_EDGE('',*,*,#7479,.T.); #10679=ORIENTED_EDGE('',*,*,#7476,.T.); #10680=ORIENTED_EDGE('',*,*,#7495,.F.); #10681=ORIENTED_EDGE('',*,*,#7496,.T.); #10682=ORIENTED_EDGE('',*,*,#7497,.F.); #10683=ORIENTED_EDGE('',*,*,#7498,.F.); #10684=ORIENTED_EDGE('',*,*,#7499,.F.); #10685=ORIENTED_EDGE('',*,*,#7500,.T.); #10686=ORIENTED_EDGE('',*,*,#7501,.F.); #10687=ORIENTED_EDGE('',*,*,#7496,.F.); #10688=ORIENTED_EDGE('',*,*,#7502,.F.); #10689=ORIENTED_EDGE('',*,*,#7498,.T.); #10690=ORIENTED_EDGE('',*,*,#7503,.F.); #10691=ORIENTED_EDGE('',*,*,#7500,.F.); #10692=ORIENTED_EDGE('',*,*,#7504,.F.); #10693=ORIENTED_EDGE('',*,*,#7505,.T.); #10694=ORIENTED_EDGE('',*,*,#7506,.F.); #10695=ORIENTED_EDGE('',*,*,#7507,.F.); #10696=ORIENTED_EDGE('',*,*,#7508,.F.); #10697=ORIENTED_EDGE('',*,*,#7507,.T.); #10698=ORIENTED_EDGE('',*,*,#7509,.F.); #10699=ORIENTED_EDGE('',*,*,#7510,.F.); #10700=ORIENTED_EDGE('',*,*,#7511,.F.); #10701=ORIENTED_EDGE('',*,*,#7510,.T.); #10702=ORIENTED_EDGE('',*,*,#7512,.F.); #10703=ORIENTED_EDGE('',*,*,#7513,.F.); #10704=ORIENTED_EDGE('',*,*,#7514,.F.); #10705=ORIENTED_EDGE('',*,*,#7513,.T.); #10706=ORIENTED_EDGE('',*,*,#7515,.F.); #10707=ORIENTED_EDGE('',*,*,#7516,.F.); #10708=ORIENTED_EDGE('',*,*,#7517,.F.); #10709=ORIENTED_EDGE('',*,*,#7516,.T.); #10710=ORIENTED_EDGE('',*,*,#7518,.F.); #10711=ORIENTED_EDGE('',*,*,#7519,.F.); #10712=ORIENTED_EDGE('',*,*,#7520,.F.); #10713=ORIENTED_EDGE('',*,*,#7519,.T.); #10714=ORIENTED_EDGE('',*,*,#7521,.F.); #10715=ORIENTED_EDGE('',*,*,#7522,.F.); #10716=ORIENTED_EDGE('',*,*,#7523,.F.); #10717=ORIENTED_EDGE('',*,*,#7522,.T.); #10718=ORIENTED_EDGE('',*,*,#7524,.F.); #10719=ORIENTED_EDGE('',*,*,#7525,.F.); #10720=ORIENTED_EDGE('',*,*,#7526,.F.); #10721=ORIENTED_EDGE('',*,*,#7525,.T.); #10722=ORIENTED_EDGE('',*,*,#7527,.F.); #10723=ORIENTED_EDGE('',*,*,#7505,.F.); #10724=ORIENTED_EDGE('',*,*,#7526,.T.); #10725=ORIENTED_EDGE('',*,*,#7504,.T.); #10726=ORIENTED_EDGE('',*,*,#7508,.T.); #10727=ORIENTED_EDGE('',*,*,#7511,.T.); #10728=ORIENTED_EDGE('',*,*,#7514,.T.); #10729=ORIENTED_EDGE('',*,*,#7517,.T.); #10730=ORIENTED_EDGE('',*,*,#7520,.T.); #10731=ORIENTED_EDGE('',*,*,#7523,.T.); #10732=ORIENTED_EDGE('',*,*,#7495,.T.); #10733=ORIENTED_EDGE('',*,*,#7502,.T.); #10734=ORIENTED_EDGE('',*,*,#7499,.T.); #10735=ORIENTED_EDGE('',*,*,#7527,.T.); #10736=ORIENTED_EDGE('',*,*,#7524,.T.); #10737=ORIENTED_EDGE('',*,*,#7521,.T.); #10738=ORIENTED_EDGE('',*,*,#7518,.T.); #10739=ORIENTED_EDGE('',*,*,#7515,.T.); #10740=ORIENTED_EDGE('',*,*,#7512,.T.); #10741=ORIENTED_EDGE('',*,*,#7509,.T.); #10742=ORIENTED_EDGE('',*,*,#7506,.T.); #10743=ORIENTED_EDGE('',*,*,#7497,.T.); #10744=ORIENTED_EDGE('',*,*,#7501,.T.); #10745=ORIENTED_EDGE('',*,*,#7503,.T.); #10746=ORIENTED_EDGE('',*,*,#7528,.F.); #10747=ORIENTED_EDGE('',*,*,#7529,.T.); #10748=ORIENTED_EDGE('',*,*,#7530,.F.); #10749=ORIENTED_EDGE('',*,*,#7531,.F.); #10750=ORIENTED_EDGE('',*,*,#7532,.F.); #10751=ORIENTED_EDGE('',*,*,#7531,.T.); #10752=ORIENTED_EDGE('',*,*,#7533,.F.); #10753=ORIENTED_EDGE('',*,*,#7534,.F.); #10754=ORIENTED_EDGE('',*,*,#7535,.F.); #10755=ORIENTED_EDGE('',*,*,#7534,.T.); #10756=ORIENTED_EDGE('',*,*,#7536,.F.); #10757=ORIENTED_EDGE('',*,*,#7537,.F.); #10758=ORIENTED_EDGE('',*,*,#7538,.F.); #10759=ORIENTED_EDGE('',*,*,#7537,.T.); #10760=ORIENTED_EDGE('',*,*,#7539,.F.); #10761=ORIENTED_EDGE('',*,*,#7540,.F.); #10762=ORIENTED_EDGE('',*,*,#7541,.F.); #10763=ORIENTED_EDGE('',*,*,#7540,.T.); #10764=ORIENTED_EDGE('',*,*,#7542,.F.); #10765=ORIENTED_EDGE('',*,*,#7543,.F.); #10766=ORIENTED_EDGE('',*,*,#7544,.F.); #10767=ORIENTED_EDGE('',*,*,#7543,.T.); #10768=ORIENTED_EDGE('',*,*,#7545,.F.); #10769=ORIENTED_EDGE('',*,*,#7529,.F.); #10770=ORIENTED_EDGE('',*,*,#7544,.T.); #10771=ORIENTED_EDGE('',*,*,#7528,.T.); #10772=ORIENTED_EDGE('',*,*,#7532,.T.); #10773=ORIENTED_EDGE('',*,*,#7535,.T.); #10774=ORIENTED_EDGE('',*,*,#7538,.T.); #10775=ORIENTED_EDGE('',*,*,#7541,.T.); #10776=ORIENTED_EDGE('',*,*,#7545,.T.); #10777=ORIENTED_EDGE('',*,*,#7542,.T.); #10778=ORIENTED_EDGE('',*,*,#7539,.T.); #10779=ORIENTED_EDGE('',*,*,#7536,.T.); #10780=ORIENTED_EDGE('',*,*,#7533,.T.); #10781=ORIENTED_EDGE('',*,*,#7530,.T.); #10782=ORIENTED_EDGE('',*,*,#7546,.F.); #10783=ORIENTED_EDGE('',*,*,#7547,.T.); #10784=ORIENTED_EDGE('',*,*,#7548,.F.); #10785=ORIENTED_EDGE('',*,*,#7549,.F.); #10786=ORIENTED_EDGE('',*,*,#7550,.F.); #10787=ORIENTED_EDGE('',*,*,#7549,.T.); #10788=ORIENTED_EDGE('',*,*,#7551,.F.); #10789=ORIENTED_EDGE('',*,*,#7552,.F.); #10790=ORIENTED_EDGE('',*,*,#7553,.F.); #10791=ORIENTED_EDGE('',*,*,#7552,.T.); #10792=ORIENTED_EDGE('',*,*,#7554,.F.); #10793=ORIENTED_EDGE('',*,*,#7555,.F.); #10794=ORIENTED_EDGE('',*,*,#7556,.F.); #10795=ORIENTED_EDGE('',*,*,#7555,.T.); #10796=ORIENTED_EDGE('',*,*,#7557,.F.); #10797=ORIENTED_EDGE('',*,*,#7558,.F.); #10798=ORIENTED_EDGE('',*,*,#7559,.F.); #10799=ORIENTED_EDGE('',*,*,#7558,.T.); #10800=ORIENTED_EDGE('',*,*,#7560,.F.); #10801=ORIENTED_EDGE('',*,*,#7561,.F.); #10802=ORIENTED_EDGE('',*,*,#7562,.F.); #10803=ORIENTED_EDGE('',*,*,#7561,.T.); #10804=ORIENTED_EDGE('',*,*,#7563,.F.); #10805=ORIENTED_EDGE('',*,*,#7564,.F.); #10806=ORIENTED_EDGE('',*,*,#7565,.F.); #10807=ORIENTED_EDGE('',*,*,#7564,.T.); #10808=ORIENTED_EDGE('',*,*,#7566,.F.); #10809=ORIENTED_EDGE('',*,*,#7567,.F.); #10810=ORIENTED_EDGE('',*,*,#7568,.F.); #10811=ORIENTED_EDGE('',*,*,#7567,.T.); #10812=ORIENTED_EDGE('',*,*,#7569,.F.); #10813=ORIENTED_EDGE('',*,*,#7547,.F.); #10814=ORIENTED_EDGE('',*,*,#7568,.T.); #10815=ORIENTED_EDGE('',*,*,#7546,.T.); #10816=ORIENTED_EDGE('',*,*,#7550,.T.); #10817=ORIENTED_EDGE('',*,*,#7553,.T.); #10818=ORIENTED_EDGE('',*,*,#7556,.T.); #10819=ORIENTED_EDGE('',*,*,#7559,.T.); #10820=ORIENTED_EDGE('',*,*,#7562,.T.); #10821=ORIENTED_EDGE('',*,*,#7565,.T.); #10822=ORIENTED_EDGE('',*,*,#7569,.T.); #10823=ORIENTED_EDGE('',*,*,#7566,.T.); #10824=ORIENTED_EDGE('',*,*,#7563,.T.); #10825=ORIENTED_EDGE('',*,*,#7560,.T.); #10826=ORIENTED_EDGE('',*,*,#7557,.T.); #10827=ORIENTED_EDGE('',*,*,#7554,.T.); #10828=ORIENTED_EDGE('',*,*,#7551,.T.); #10829=ORIENTED_EDGE('',*,*,#7548,.T.); #10830=ORIENTED_EDGE('',*,*,#7570,.F.); #10831=ORIENTED_EDGE('',*,*,#7571,.T.); #10832=ORIENTED_EDGE('',*,*,#7572,.F.); #10833=ORIENTED_EDGE('',*,*,#7573,.F.); #10834=ORIENTED_EDGE('',*,*,#7574,.F.); #10835=ORIENTED_EDGE('',*,*,#7573,.T.); #10836=ORIENTED_EDGE('',*,*,#7575,.F.); #10837=ORIENTED_EDGE('',*,*,#7576,.F.); #10838=ORIENTED_EDGE('',*,*,#7577,.F.); #10839=ORIENTED_EDGE('',*,*,#7576,.T.); #10840=ORIENTED_EDGE('',*,*,#7578,.F.); #10841=ORIENTED_EDGE('',*,*,#7579,.F.); #10842=ORIENTED_EDGE('',*,*,#7580,.F.); #10843=ORIENTED_EDGE('',*,*,#7579,.T.); #10844=ORIENTED_EDGE('',*,*,#7581,.F.); #10845=ORIENTED_EDGE('',*,*,#7582,.F.); #10846=ORIENTED_EDGE('',*,*,#7583,.F.); #10847=ORIENTED_EDGE('',*,*,#7582,.T.); #10848=ORIENTED_EDGE('',*,*,#7584,.F.); #10849=ORIENTED_EDGE('',*,*,#7585,.F.); #10850=ORIENTED_EDGE('',*,*,#7586,.F.); #10851=ORIENTED_EDGE('',*,*,#7585,.T.); #10852=ORIENTED_EDGE('',*,*,#7587,.F.); #10853=ORIENTED_EDGE('',*,*,#7588,.F.); #10854=ORIENTED_EDGE('',*,*,#7589,.F.); #10855=ORIENTED_EDGE('',*,*,#7588,.T.); #10856=ORIENTED_EDGE('',*,*,#7590,.F.); #10857=ORIENTED_EDGE('',*,*,#7591,.F.); #10858=ORIENTED_EDGE('',*,*,#7592,.F.); #10859=ORIENTED_EDGE('',*,*,#7591,.T.); #10860=ORIENTED_EDGE('',*,*,#7593,.F.); #10861=ORIENTED_EDGE('',*,*,#7571,.F.); #10862=ORIENTED_EDGE('',*,*,#7592,.T.); #10863=ORIENTED_EDGE('',*,*,#7570,.T.); #10864=ORIENTED_EDGE('',*,*,#7574,.T.); #10865=ORIENTED_EDGE('',*,*,#7577,.T.); #10866=ORIENTED_EDGE('',*,*,#7580,.T.); #10867=ORIENTED_EDGE('',*,*,#7583,.T.); #10868=ORIENTED_EDGE('',*,*,#7586,.T.); #10869=ORIENTED_EDGE('',*,*,#7589,.T.); #10870=ORIENTED_EDGE('',*,*,#7593,.T.); #10871=ORIENTED_EDGE('',*,*,#7590,.T.); #10872=ORIENTED_EDGE('',*,*,#7587,.T.); #10873=ORIENTED_EDGE('',*,*,#7584,.T.); #10874=ORIENTED_EDGE('',*,*,#7581,.T.); #10875=ORIENTED_EDGE('',*,*,#7578,.T.); #10876=ORIENTED_EDGE('',*,*,#7575,.T.); #10877=ORIENTED_EDGE('',*,*,#7572,.T.); #10878=ORIENTED_EDGE('',*,*,#7594,.F.); #10879=ORIENTED_EDGE('',*,*,#7595,.T.); #10880=ORIENTED_EDGE('',*,*,#7596,.F.); #10881=ORIENTED_EDGE('',*,*,#7597,.F.); #10882=ORIENTED_EDGE('',*,*,#7598,.F.); #10883=ORIENTED_EDGE('',*,*,#7597,.T.); #10884=ORIENTED_EDGE('',*,*,#7599,.F.); #10885=ORIENTED_EDGE('',*,*,#7600,.F.); #10886=ORIENTED_EDGE('',*,*,#7601,.F.); #10887=ORIENTED_EDGE('',*,*,#7600,.T.); #10888=ORIENTED_EDGE('',*,*,#7602,.F.); #10889=ORIENTED_EDGE('',*,*,#7603,.F.); #10890=ORIENTED_EDGE('',*,*,#7604,.F.); #10891=ORIENTED_EDGE('',*,*,#7603,.T.); #10892=ORIENTED_EDGE('',*,*,#7605,.F.); #10893=ORIENTED_EDGE('',*,*,#7595,.F.); #10894=ORIENTED_EDGE('',*,*,#7604,.T.); #10895=ORIENTED_EDGE('',*,*,#7594,.T.); #10896=ORIENTED_EDGE('',*,*,#7598,.T.); #10897=ORIENTED_EDGE('',*,*,#7601,.T.); #10898=ORIENTED_EDGE('',*,*,#7605,.T.); #10899=ORIENTED_EDGE('',*,*,#7602,.T.); #10900=ORIENTED_EDGE('',*,*,#7599,.T.); #10901=ORIENTED_EDGE('',*,*,#7596,.T.); #10902=ORIENTED_EDGE('',*,*,#7606,.F.); #10903=ORIENTED_EDGE('',*,*,#7607,.T.); #10904=ORIENTED_EDGE('',*,*,#7608,.F.); #10905=ORIENTED_EDGE('',*,*,#7609,.F.); #10906=ORIENTED_EDGE('',*,*,#7610,.F.); #10907=ORIENTED_EDGE('',*,*,#7609,.T.); #10908=ORIENTED_EDGE('',*,*,#7611,.F.); #10909=ORIENTED_EDGE('',*,*,#7612,.F.); #10910=ORIENTED_EDGE('',*,*,#7613,.F.); #10911=ORIENTED_EDGE('',*,*,#7612,.T.); #10912=ORIENTED_EDGE('',*,*,#7614,.F.); #10913=ORIENTED_EDGE('',*,*,#7615,.F.); #10914=ORIENTED_EDGE('',*,*,#7616,.F.); #10915=ORIENTED_EDGE('',*,*,#7615,.T.); #10916=ORIENTED_EDGE('',*,*,#7617,.F.); #10917=ORIENTED_EDGE('',*,*,#7618,.F.); #10918=ORIENTED_EDGE('',*,*,#7619,.F.); #10919=ORIENTED_EDGE('',*,*,#7618,.T.); #10920=ORIENTED_EDGE('',*,*,#7620,.F.); #10921=ORIENTED_EDGE('',*,*,#7621,.F.); #10922=ORIENTED_EDGE('',*,*,#7622,.F.); #10923=ORIENTED_EDGE('',*,*,#7621,.T.); #10924=ORIENTED_EDGE('',*,*,#7623,.F.); #10925=ORIENTED_EDGE('',*,*,#7624,.F.); #10926=ORIENTED_EDGE('',*,*,#7625,.F.); #10927=ORIENTED_EDGE('',*,*,#7624,.T.); #10928=ORIENTED_EDGE('',*,*,#7626,.F.); #10929=ORIENTED_EDGE('',*,*,#7627,.F.); #10930=ORIENTED_EDGE('',*,*,#7628,.F.); #10931=ORIENTED_EDGE('',*,*,#7627,.T.); #10932=ORIENTED_EDGE('',*,*,#7629,.F.); #10933=ORIENTED_EDGE('',*,*,#7630,.F.); #10934=ORIENTED_EDGE('',*,*,#7631,.F.); #10935=ORIENTED_EDGE('',*,*,#7630,.T.); #10936=ORIENTED_EDGE('',*,*,#7632,.F.); #10937=ORIENTED_EDGE('',*,*,#7633,.F.); #10938=ORIENTED_EDGE('',*,*,#7634,.F.); #10939=ORIENTED_EDGE('',*,*,#7633,.T.); #10940=ORIENTED_EDGE('',*,*,#7635,.F.); #10941=ORIENTED_EDGE('',*,*,#7636,.F.); #10942=ORIENTED_EDGE('',*,*,#7637,.F.); #10943=ORIENTED_EDGE('',*,*,#7636,.T.); #10944=ORIENTED_EDGE('',*,*,#7638,.F.); #10945=ORIENTED_EDGE('',*,*,#7639,.F.); #10946=ORIENTED_EDGE('',*,*,#7640,.F.); #10947=ORIENTED_EDGE('',*,*,#7639,.T.); #10948=ORIENTED_EDGE('',*,*,#7641,.F.); #10949=ORIENTED_EDGE('',*,*,#7642,.F.); #10950=ORIENTED_EDGE('',*,*,#7643,.F.); #10951=ORIENTED_EDGE('',*,*,#7642,.T.); #10952=ORIENTED_EDGE('',*,*,#7644,.F.); #10953=ORIENTED_EDGE('',*,*,#7645,.F.); #10954=ORIENTED_EDGE('',*,*,#7646,.F.); #10955=ORIENTED_EDGE('',*,*,#7645,.T.); #10956=ORIENTED_EDGE('',*,*,#7647,.F.); #10957=ORIENTED_EDGE('',*,*,#7648,.F.); #10958=ORIENTED_EDGE('',*,*,#7649,.F.); #10959=ORIENTED_EDGE('',*,*,#7648,.T.); #10960=ORIENTED_EDGE('',*,*,#7650,.F.); #10961=ORIENTED_EDGE('',*,*,#7651,.F.); #10962=ORIENTED_EDGE('',*,*,#7652,.F.); #10963=ORIENTED_EDGE('',*,*,#7651,.T.); #10964=ORIENTED_EDGE('',*,*,#7653,.F.); #10965=ORIENTED_EDGE('',*,*,#7607,.F.); #10966=ORIENTED_EDGE('',*,*,#7652,.T.); #10967=ORIENTED_EDGE('',*,*,#7606,.T.); #10968=ORIENTED_EDGE('',*,*,#7610,.T.); #10969=ORIENTED_EDGE('',*,*,#7613,.T.); #10970=ORIENTED_EDGE('',*,*,#7616,.T.); #10971=ORIENTED_EDGE('',*,*,#7619,.T.); #10972=ORIENTED_EDGE('',*,*,#7622,.T.); #10973=ORIENTED_EDGE('',*,*,#7625,.T.); #10974=ORIENTED_EDGE('',*,*,#7628,.T.); #10975=ORIENTED_EDGE('',*,*,#7631,.T.); #10976=ORIENTED_EDGE('',*,*,#7634,.T.); #10977=ORIENTED_EDGE('',*,*,#7637,.T.); #10978=ORIENTED_EDGE('',*,*,#7640,.T.); #10979=ORIENTED_EDGE('',*,*,#7643,.T.); #10980=ORIENTED_EDGE('',*,*,#7646,.T.); #10981=ORIENTED_EDGE('',*,*,#7649,.T.); #10982=ORIENTED_EDGE('',*,*,#7653,.T.); #10983=ORIENTED_EDGE('',*,*,#7650,.T.); #10984=ORIENTED_EDGE('',*,*,#7647,.T.); #10985=ORIENTED_EDGE('',*,*,#7644,.T.); #10986=ORIENTED_EDGE('',*,*,#7641,.T.); #10987=ORIENTED_EDGE('',*,*,#7638,.T.); #10988=ORIENTED_EDGE('',*,*,#7635,.T.); #10989=ORIENTED_EDGE('',*,*,#7632,.T.); #10990=ORIENTED_EDGE('',*,*,#7629,.T.); #10991=ORIENTED_EDGE('',*,*,#7626,.T.); #10992=ORIENTED_EDGE('',*,*,#7623,.T.); #10993=ORIENTED_EDGE('',*,*,#7620,.T.); #10994=ORIENTED_EDGE('',*,*,#7617,.T.); #10995=ORIENTED_EDGE('',*,*,#7614,.T.); #10996=ORIENTED_EDGE('',*,*,#7611,.T.); #10997=ORIENTED_EDGE('',*,*,#7608,.T.); #10998=ORIENTED_EDGE('',*,*,#7654,.F.); #10999=ORIENTED_EDGE('',*,*,#7655,.T.); #11000=ORIENTED_EDGE('',*,*,#7656,.F.); #11001=ORIENTED_EDGE('',*,*,#7657,.F.); #11002=ORIENTED_EDGE('',*,*,#7658,.F.); #11003=ORIENTED_EDGE('',*,*,#7659,.T.); #11004=ORIENTED_EDGE('',*,*,#7660,.F.); #11005=ORIENTED_EDGE('',*,*,#7655,.F.); #11006=ORIENTED_EDGE('',*,*,#7661,.F.); #11007=ORIENTED_EDGE('',*,*,#7662,.T.); #11008=ORIENTED_EDGE('',*,*,#7663,.F.); #11009=ORIENTED_EDGE('',*,*,#7659,.F.); #11010=ORIENTED_EDGE('',*,*,#7664,.F.); #11011=ORIENTED_EDGE('',*,*,#7657,.T.); #11012=ORIENTED_EDGE('',*,*,#7665,.F.); #11013=ORIENTED_EDGE('',*,*,#7662,.F.); #11014=ORIENTED_EDGE('',*,*,#7666,.F.); #11015=ORIENTED_EDGE('',*,*,#7667,.T.); #11016=ORIENTED_EDGE('',*,*,#7668,.F.); #11017=ORIENTED_EDGE('',*,*,#7669,.F.); #11018=ORIENTED_EDGE('',*,*,#7670,.F.); #11019=ORIENTED_EDGE('',*,*,#7669,.T.); #11020=ORIENTED_EDGE('',*,*,#7671,.F.); #11021=ORIENTED_EDGE('',*,*,#7672,.F.); #11022=ORIENTED_EDGE('',*,*,#7673,.F.); #11023=ORIENTED_EDGE('',*,*,#7672,.T.); #11024=ORIENTED_EDGE('',*,*,#7674,.F.); #11025=ORIENTED_EDGE('',*,*,#7675,.F.); #11026=ORIENTED_EDGE('',*,*,#7676,.F.); #11027=ORIENTED_EDGE('',*,*,#7675,.T.); #11028=ORIENTED_EDGE('',*,*,#7677,.F.); #11029=ORIENTED_EDGE('',*,*,#7667,.F.); #11030=ORIENTED_EDGE('',*,*,#7676,.T.); #11031=ORIENTED_EDGE('',*,*,#7666,.T.); #11032=ORIENTED_EDGE('',*,*,#7670,.T.); #11033=ORIENTED_EDGE('',*,*,#7673,.T.); #11034=ORIENTED_EDGE('',*,*,#7654,.T.); #11035=ORIENTED_EDGE('',*,*,#7664,.T.); #11036=ORIENTED_EDGE('',*,*,#7661,.T.); #11037=ORIENTED_EDGE('',*,*,#7658,.T.); #11038=ORIENTED_EDGE('',*,*,#7677,.T.); #11039=ORIENTED_EDGE('',*,*,#7674,.T.); #11040=ORIENTED_EDGE('',*,*,#7671,.T.); #11041=ORIENTED_EDGE('',*,*,#7668,.T.); #11042=ORIENTED_EDGE('',*,*,#7656,.T.); #11043=ORIENTED_EDGE('',*,*,#7660,.T.); #11044=ORIENTED_EDGE('',*,*,#7663,.T.); #11045=ORIENTED_EDGE('',*,*,#7665,.T.); #11046=ORIENTED_EDGE('',*,*,#7678,.F.); #11047=ORIENTED_EDGE('',*,*,#7679,.T.); #11048=ORIENTED_EDGE('',*,*,#7680,.F.); #11049=ORIENTED_EDGE('',*,*,#7681,.F.); #11050=ORIENTED_EDGE('',*,*,#7682,.F.); #11051=ORIENTED_EDGE('',*,*,#7683,.T.); #11052=ORIENTED_EDGE('',*,*,#7684,.F.); #11053=ORIENTED_EDGE('',*,*,#7679,.F.); #11054=ORIENTED_EDGE('',*,*,#7685,.F.); #11055=ORIENTED_EDGE('',*,*,#7686,.T.); #11056=ORIENTED_EDGE('',*,*,#7687,.F.); #11057=ORIENTED_EDGE('',*,*,#7683,.F.); #11058=ORIENTED_EDGE('',*,*,#7688,.F.); #11059=ORIENTED_EDGE('',*,*,#7689,.T.); #11060=ORIENTED_EDGE('',*,*,#7690,.F.); #11061=ORIENTED_EDGE('',*,*,#7686,.F.); #11062=ORIENTED_EDGE('',*,*,#7691,.F.); #11063=ORIENTED_EDGE('',*,*,#7681,.T.); #11064=ORIENTED_EDGE('',*,*,#7692,.F.); #11065=ORIENTED_EDGE('',*,*,#7689,.F.); #11066=ORIENTED_EDGE('',*,*,#7693,.F.); #11067=ORIENTED_EDGE('',*,*,#7694,.T.); #11068=ORIENTED_EDGE('',*,*,#7695,.F.); #11069=ORIENTED_EDGE('',*,*,#7696,.F.); #11070=ORIENTED_EDGE('',*,*,#7697,.F.); #11071=ORIENTED_EDGE('',*,*,#7696,.T.); #11072=ORIENTED_EDGE('',*,*,#7698,.F.); #11073=ORIENTED_EDGE('',*,*,#7699,.F.); #11074=ORIENTED_EDGE('',*,*,#7700,.F.); #11075=ORIENTED_EDGE('',*,*,#7699,.T.); #11076=ORIENTED_EDGE('',*,*,#7701,.F.); #11077=ORIENTED_EDGE('',*,*,#7702,.F.); #11078=ORIENTED_EDGE('',*,*,#7703,.F.); #11079=ORIENTED_EDGE('',*,*,#7702,.T.); #11080=ORIENTED_EDGE('',*,*,#7704,.F.); #11081=ORIENTED_EDGE('',*,*,#7705,.F.); #11082=ORIENTED_EDGE('',*,*,#7706,.F.); #11083=ORIENTED_EDGE('',*,*,#7705,.T.); #11084=ORIENTED_EDGE('',*,*,#7707,.F.); #11085=ORIENTED_EDGE('',*,*,#7708,.F.); #11086=ORIENTED_EDGE('',*,*,#7709,.F.); #11087=ORIENTED_EDGE('',*,*,#7708,.T.); #11088=ORIENTED_EDGE('',*,*,#7710,.F.); #11089=ORIENTED_EDGE('',*,*,#7711,.F.); #11090=ORIENTED_EDGE('',*,*,#7712,.F.); #11091=ORIENTED_EDGE('',*,*,#7711,.T.); #11092=ORIENTED_EDGE('',*,*,#7713,.F.); #11093=ORIENTED_EDGE('',*,*,#7714,.F.); #11094=ORIENTED_EDGE('',*,*,#7715,.F.); #11095=ORIENTED_EDGE('',*,*,#7714,.T.); #11096=ORIENTED_EDGE('',*,*,#7716,.F.); #11097=ORIENTED_EDGE('',*,*,#7717,.F.); #11098=ORIENTED_EDGE('',*,*,#7718,.F.); #11099=ORIENTED_EDGE('',*,*,#7717,.T.); #11100=ORIENTED_EDGE('',*,*,#7719,.F.); #11101=ORIENTED_EDGE('',*,*,#7720,.F.); #11102=ORIENTED_EDGE('',*,*,#7721,.F.); #11103=ORIENTED_EDGE('',*,*,#7720,.T.); #11104=ORIENTED_EDGE('',*,*,#7722,.F.); #11105=ORIENTED_EDGE('',*,*,#7723,.F.); #11106=ORIENTED_EDGE('',*,*,#7724,.F.); #11107=ORIENTED_EDGE('',*,*,#7723,.T.); #11108=ORIENTED_EDGE('',*,*,#7725,.F.); #11109=ORIENTED_EDGE('',*,*,#7726,.F.); #11110=ORIENTED_EDGE('',*,*,#7727,.F.); #11111=ORIENTED_EDGE('',*,*,#7726,.T.); #11112=ORIENTED_EDGE('',*,*,#7728,.F.); #11113=ORIENTED_EDGE('',*,*,#7729,.F.); #11114=ORIENTED_EDGE('',*,*,#7730,.F.); #11115=ORIENTED_EDGE('',*,*,#7729,.T.); #11116=ORIENTED_EDGE('',*,*,#7731,.F.); #11117=ORIENTED_EDGE('',*,*,#7694,.F.); #11118=ORIENTED_EDGE('',*,*,#7730,.T.); #11119=ORIENTED_EDGE('',*,*,#7693,.T.); #11120=ORIENTED_EDGE('',*,*,#7697,.T.); #11121=ORIENTED_EDGE('',*,*,#7700,.T.); #11122=ORIENTED_EDGE('',*,*,#7703,.T.); #11123=ORIENTED_EDGE('',*,*,#7706,.T.); #11124=ORIENTED_EDGE('',*,*,#7709,.T.); #11125=ORIENTED_EDGE('',*,*,#7712,.T.); #11126=ORIENTED_EDGE('',*,*,#7715,.T.); #11127=ORIENTED_EDGE('',*,*,#7718,.T.); #11128=ORIENTED_EDGE('',*,*,#7721,.T.); #11129=ORIENTED_EDGE('',*,*,#7724,.T.); #11130=ORIENTED_EDGE('',*,*,#7727,.T.); #11131=ORIENTED_EDGE('',*,*,#7678,.T.); #11132=ORIENTED_EDGE('',*,*,#7691,.T.); #11133=ORIENTED_EDGE('',*,*,#7688,.T.); #11134=ORIENTED_EDGE('',*,*,#7685,.T.); #11135=ORIENTED_EDGE('',*,*,#7682,.T.); #11136=ORIENTED_EDGE('',*,*,#7731,.T.); #11137=ORIENTED_EDGE('',*,*,#7728,.T.); #11138=ORIENTED_EDGE('',*,*,#7725,.T.); #11139=ORIENTED_EDGE('',*,*,#7722,.T.); #11140=ORIENTED_EDGE('',*,*,#7719,.T.); #11141=ORIENTED_EDGE('',*,*,#7716,.T.); #11142=ORIENTED_EDGE('',*,*,#7713,.T.); #11143=ORIENTED_EDGE('',*,*,#7710,.T.); #11144=ORIENTED_EDGE('',*,*,#7707,.T.); #11145=ORIENTED_EDGE('',*,*,#7704,.T.); #11146=ORIENTED_EDGE('',*,*,#7701,.T.); #11147=ORIENTED_EDGE('',*,*,#7698,.T.); #11148=ORIENTED_EDGE('',*,*,#7695,.T.); #11149=ORIENTED_EDGE('',*,*,#7680,.T.); #11150=ORIENTED_EDGE('',*,*,#7684,.T.); #11151=ORIENTED_EDGE('',*,*,#7687,.T.); #11152=ORIENTED_EDGE('',*,*,#7690,.T.); #11153=ORIENTED_EDGE('',*,*,#7692,.T.); #11154=ORIENTED_EDGE('',*,*,#7732,.F.); #11155=ORIENTED_EDGE('',*,*,#7733,.T.); #11156=ORIENTED_EDGE('',*,*,#7734,.F.); #11157=ORIENTED_EDGE('',*,*,#7735,.F.); #11158=ORIENTED_EDGE('',*,*,#7736,.F.); #11159=ORIENTED_EDGE('',*,*,#7735,.T.); #11160=ORIENTED_EDGE('',*,*,#7737,.F.); #11161=ORIENTED_EDGE('',*,*,#7738,.F.); #11162=ORIENTED_EDGE('',*,*,#7739,.F.); #11163=ORIENTED_EDGE('',*,*,#7738,.T.); #11164=ORIENTED_EDGE('',*,*,#7740,.F.); #11165=ORIENTED_EDGE('',*,*,#7741,.F.); #11166=ORIENTED_EDGE('',*,*,#7742,.F.); #11167=ORIENTED_EDGE('',*,*,#7741,.T.); #11168=ORIENTED_EDGE('',*,*,#7743,.F.); #11169=ORIENTED_EDGE('',*,*,#7733,.F.); #11170=ORIENTED_EDGE('',*,*,#7742,.T.); #11171=ORIENTED_EDGE('',*,*,#7732,.T.); #11172=ORIENTED_EDGE('',*,*,#7736,.T.); #11173=ORIENTED_EDGE('',*,*,#7739,.T.); #11174=ORIENTED_EDGE('',*,*,#7743,.T.); #11175=ORIENTED_EDGE('',*,*,#7740,.T.); #11176=ORIENTED_EDGE('',*,*,#7737,.T.); #11177=ORIENTED_EDGE('',*,*,#7734,.T.); #11178=ORIENTED_EDGE('',*,*,#7744,.F.); #11179=ORIENTED_EDGE('',*,*,#7745,.T.); #11180=ORIENTED_EDGE('',*,*,#7746,.F.); #11181=ORIENTED_EDGE('',*,*,#7747,.F.); #11182=ORIENTED_EDGE('',*,*,#7748,.F.); #11183=ORIENTED_EDGE('',*,*,#7747,.T.); #11184=ORIENTED_EDGE('',*,*,#7749,.F.); #11185=ORIENTED_EDGE('',*,*,#7750,.F.); #11186=ORIENTED_EDGE('',*,*,#7751,.F.); #11187=ORIENTED_EDGE('',*,*,#7750,.T.); #11188=ORIENTED_EDGE('',*,*,#7752,.F.); #11189=ORIENTED_EDGE('',*,*,#7753,.F.); #11190=ORIENTED_EDGE('',*,*,#7754,.F.); #11191=ORIENTED_EDGE('',*,*,#7753,.T.); #11192=ORIENTED_EDGE('',*,*,#7755,.F.); #11193=ORIENTED_EDGE('',*,*,#7756,.F.); #11194=ORIENTED_EDGE('',*,*,#7757,.F.); #11195=ORIENTED_EDGE('',*,*,#7756,.T.); #11196=ORIENTED_EDGE('',*,*,#7758,.F.); #11197=ORIENTED_EDGE('',*,*,#7759,.F.); #11198=ORIENTED_EDGE('',*,*,#7760,.F.); #11199=ORIENTED_EDGE('',*,*,#7759,.T.); #11200=ORIENTED_EDGE('',*,*,#7761,.F.); #11201=ORIENTED_EDGE('',*,*,#7762,.F.); #11202=ORIENTED_EDGE('',*,*,#7763,.F.); #11203=ORIENTED_EDGE('',*,*,#7762,.T.); #11204=ORIENTED_EDGE('',*,*,#7764,.F.); #11205=ORIENTED_EDGE('',*,*,#7765,.F.); #11206=ORIENTED_EDGE('',*,*,#7766,.F.); #11207=ORIENTED_EDGE('',*,*,#7765,.T.); #11208=ORIENTED_EDGE('',*,*,#7767,.F.); #11209=ORIENTED_EDGE('',*,*,#7768,.F.); #11210=ORIENTED_EDGE('',*,*,#7769,.F.); #11211=ORIENTED_EDGE('',*,*,#7768,.T.); #11212=ORIENTED_EDGE('',*,*,#7770,.F.); #11213=ORIENTED_EDGE('',*,*,#7771,.F.); #11214=ORIENTED_EDGE('',*,*,#7772,.F.); #11215=ORIENTED_EDGE('',*,*,#7771,.T.); #11216=ORIENTED_EDGE('',*,*,#7773,.F.); #11217=ORIENTED_EDGE('',*,*,#7774,.F.); #11218=ORIENTED_EDGE('',*,*,#7775,.F.); #11219=ORIENTED_EDGE('',*,*,#7774,.T.); #11220=ORIENTED_EDGE('',*,*,#7776,.F.); #11221=ORIENTED_EDGE('',*,*,#7777,.F.); #11222=ORIENTED_EDGE('',*,*,#7778,.F.); #11223=ORIENTED_EDGE('',*,*,#7777,.T.); #11224=ORIENTED_EDGE('',*,*,#7779,.F.); #11225=ORIENTED_EDGE('',*,*,#7780,.F.); #11226=ORIENTED_EDGE('',*,*,#7781,.F.); #11227=ORIENTED_EDGE('',*,*,#7780,.T.); #11228=ORIENTED_EDGE('',*,*,#7782,.F.); #11229=ORIENTED_EDGE('',*,*,#7783,.F.); #11230=ORIENTED_EDGE('',*,*,#7784,.F.); #11231=ORIENTED_EDGE('',*,*,#7783,.T.); #11232=ORIENTED_EDGE('',*,*,#7785,.F.); #11233=ORIENTED_EDGE('',*,*,#7786,.F.); #11234=ORIENTED_EDGE('',*,*,#7787,.F.); #11235=ORIENTED_EDGE('',*,*,#7786,.T.); #11236=ORIENTED_EDGE('',*,*,#7788,.F.); #11237=ORIENTED_EDGE('',*,*,#7789,.F.); #11238=ORIENTED_EDGE('',*,*,#7790,.F.); #11239=ORIENTED_EDGE('',*,*,#7789,.T.); #11240=ORIENTED_EDGE('',*,*,#7791,.F.); #11241=ORIENTED_EDGE('',*,*,#7792,.F.); #11242=ORIENTED_EDGE('',*,*,#7793,.F.); #11243=ORIENTED_EDGE('',*,*,#7792,.T.); #11244=ORIENTED_EDGE('',*,*,#7794,.F.); #11245=ORIENTED_EDGE('',*,*,#7795,.F.); #11246=ORIENTED_EDGE('',*,*,#7796,.F.); #11247=ORIENTED_EDGE('',*,*,#7795,.T.); #11248=ORIENTED_EDGE('',*,*,#7797,.F.); #11249=ORIENTED_EDGE('',*,*,#7745,.F.); #11250=ORIENTED_EDGE('',*,*,#7796,.T.); #11251=ORIENTED_EDGE('',*,*,#7744,.T.); #11252=ORIENTED_EDGE('',*,*,#7748,.T.); #11253=ORIENTED_EDGE('',*,*,#7751,.T.); #11254=ORIENTED_EDGE('',*,*,#7754,.T.); #11255=ORIENTED_EDGE('',*,*,#7757,.T.); #11256=ORIENTED_EDGE('',*,*,#7760,.T.); #11257=ORIENTED_EDGE('',*,*,#7763,.T.); #11258=ORIENTED_EDGE('',*,*,#7766,.T.); #11259=ORIENTED_EDGE('',*,*,#7769,.T.); #11260=ORIENTED_EDGE('',*,*,#7772,.T.); #11261=ORIENTED_EDGE('',*,*,#7775,.T.); #11262=ORIENTED_EDGE('',*,*,#7778,.T.); #11263=ORIENTED_EDGE('',*,*,#7781,.T.); #11264=ORIENTED_EDGE('',*,*,#7784,.T.); #11265=ORIENTED_EDGE('',*,*,#7787,.T.); #11266=ORIENTED_EDGE('',*,*,#7790,.T.); #11267=ORIENTED_EDGE('',*,*,#7793,.T.); #11268=ORIENTED_EDGE('',*,*,#7797,.T.); #11269=ORIENTED_EDGE('',*,*,#7794,.T.); #11270=ORIENTED_EDGE('',*,*,#7791,.T.); #11271=ORIENTED_EDGE('',*,*,#7788,.T.); #11272=ORIENTED_EDGE('',*,*,#7785,.T.); #11273=ORIENTED_EDGE('',*,*,#7782,.T.); #11274=ORIENTED_EDGE('',*,*,#7779,.T.); #11275=ORIENTED_EDGE('',*,*,#7776,.T.); #11276=ORIENTED_EDGE('',*,*,#7773,.T.); #11277=ORIENTED_EDGE('',*,*,#7770,.T.); #11278=ORIENTED_EDGE('',*,*,#7767,.T.); #11279=ORIENTED_EDGE('',*,*,#7764,.T.); #11280=ORIENTED_EDGE('',*,*,#7761,.T.); #11281=ORIENTED_EDGE('',*,*,#7758,.T.); #11282=ORIENTED_EDGE('',*,*,#7755,.T.); #11283=ORIENTED_EDGE('',*,*,#7752,.T.); #11284=ORIENTED_EDGE('',*,*,#7749,.T.); #11285=ORIENTED_EDGE('',*,*,#7746,.T.); #11286=ORIENTED_EDGE('',*,*,#7798,.F.); #11287=ORIENTED_EDGE('',*,*,#7799,.T.); #11288=ORIENTED_EDGE('',*,*,#7800,.F.); #11289=ORIENTED_EDGE('',*,*,#7801,.F.); #11290=ORIENTED_EDGE('',*,*,#7802,.F.); #11291=ORIENTED_EDGE('',*,*,#7803,.T.); #11292=ORIENTED_EDGE('',*,*,#7804,.F.); #11293=ORIENTED_EDGE('',*,*,#7799,.F.); #11294=ORIENTED_EDGE('',*,*,#7805,.F.); #11295=ORIENTED_EDGE('',*,*,#7806,.T.); #11296=ORIENTED_EDGE('',*,*,#7807,.F.); #11297=ORIENTED_EDGE('',*,*,#7803,.F.); #11298=ORIENTED_EDGE('',*,*,#7808,.F.); #11299=ORIENTED_EDGE('',*,*,#7801,.T.); #11300=ORIENTED_EDGE('',*,*,#7809,.F.); #11301=ORIENTED_EDGE('',*,*,#7806,.F.); #11302=ORIENTED_EDGE('',*,*,#7810,.F.); #11303=ORIENTED_EDGE('',*,*,#7811,.T.); #11304=ORIENTED_EDGE('',*,*,#7812,.F.); #11305=ORIENTED_EDGE('',*,*,#7813,.F.); #11306=ORIENTED_EDGE('',*,*,#7814,.F.); #11307=ORIENTED_EDGE('',*,*,#7813,.T.); #11308=ORIENTED_EDGE('',*,*,#7815,.F.); #11309=ORIENTED_EDGE('',*,*,#7816,.F.); #11310=ORIENTED_EDGE('',*,*,#7817,.F.); #11311=ORIENTED_EDGE('',*,*,#7816,.T.); #11312=ORIENTED_EDGE('',*,*,#7818,.F.); #11313=ORIENTED_EDGE('',*,*,#7819,.F.); #11314=ORIENTED_EDGE('',*,*,#7820,.F.); #11315=ORIENTED_EDGE('',*,*,#7819,.T.); #11316=ORIENTED_EDGE('',*,*,#7821,.F.); #11317=ORIENTED_EDGE('',*,*,#7811,.F.); #11318=ORIENTED_EDGE('',*,*,#7820,.T.); #11319=ORIENTED_EDGE('',*,*,#7810,.T.); #11320=ORIENTED_EDGE('',*,*,#7814,.T.); #11321=ORIENTED_EDGE('',*,*,#7817,.T.); #11322=ORIENTED_EDGE('',*,*,#7798,.T.); #11323=ORIENTED_EDGE('',*,*,#7808,.T.); #11324=ORIENTED_EDGE('',*,*,#7805,.T.); #11325=ORIENTED_EDGE('',*,*,#7802,.T.); #11326=ORIENTED_EDGE('',*,*,#7821,.T.); #11327=ORIENTED_EDGE('',*,*,#7818,.T.); #11328=ORIENTED_EDGE('',*,*,#7815,.T.); #11329=ORIENTED_EDGE('',*,*,#7812,.T.); #11330=ORIENTED_EDGE('',*,*,#7800,.T.); #11331=ORIENTED_EDGE('',*,*,#7804,.T.); #11332=ORIENTED_EDGE('',*,*,#7807,.T.); #11333=ORIENTED_EDGE('',*,*,#7809,.T.); #11334=ORIENTED_EDGE('',*,*,#7822,.F.); #11335=ORIENTED_EDGE('',*,*,#7823,.T.); #11336=ORIENTED_EDGE('',*,*,#7824,.F.); #11337=ORIENTED_EDGE('',*,*,#7825,.F.); #11338=ORIENTED_EDGE('',*,*,#7826,.F.); #11339=ORIENTED_EDGE('',*,*,#7825,.T.); #11340=ORIENTED_EDGE('',*,*,#7827,.F.); #11341=ORIENTED_EDGE('',*,*,#7828,.F.); #11342=ORIENTED_EDGE('',*,*,#7829,.F.); #11343=ORIENTED_EDGE('',*,*,#7828,.T.); #11344=ORIENTED_EDGE('',*,*,#7830,.F.); #11345=ORIENTED_EDGE('',*,*,#7831,.F.); #11346=ORIENTED_EDGE('',*,*,#7832,.F.); #11347=ORIENTED_EDGE('',*,*,#7831,.T.); #11348=ORIENTED_EDGE('',*,*,#7833,.F.); #11349=ORIENTED_EDGE('',*,*,#7834,.F.); #11350=ORIENTED_EDGE('',*,*,#7835,.F.); #11351=ORIENTED_EDGE('',*,*,#7834,.T.); #11352=ORIENTED_EDGE('',*,*,#7836,.F.); #11353=ORIENTED_EDGE('',*,*,#7837,.F.); #11354=ORIENTED_EDGE('',*,*,#7838,.F.); #11355=ORIENTED_EDGE('',*,*,#7837,.T.); #11356=ORIENTED_EDGE('',*,*,#7839,.F.); #11357=ORIENTED_EDGE('',*,*,#7840,.F.); #11358=ORIENTED_EDGE('',*,*,#7841,.F.); #11359=ORIENTED_EDGE('',*,*,#7840,.T.); #11360=ORIENTED_EDGE('',*,*,#7842,.F.); #11361=ORIENTED_EDGE('',*,*,#7843,.F.); #11362=ORIENTED_EDGE('',*,*,#7844,.F.); #11363=ORIENTED_EDGE('',*,*,#7843,.T.); #11364=ORIENTED_EDGE('',*,*,#7845,.F.); #11365=ORIENTED_EDGE('',*,*,#7846,.F.); #11366=ORIENTED_EDGE('',*,*,#7847,.F.); #11367=ORIENTED_EDGE('',*,*,#7846,.T.); #11368=ORIENTED_EDGE('',*,*,#7848,.F.); #11369=ORIENTED_EDGE('',*,*,#7849,.F.); #11370=ORIENTED_EDGE('',*,*,#7850,.F.); #11371=ORIENTED_EDGE('',*,*,#7849,.T.); #11372=ORIENTED_EDGE('',*,*,#7851,.F.); #11373=ORIENTED_EDGE('',*,*,#7852,.F.); #11374=ORIENTED_EDGE('',*,*,#7853,.F.); #11375=ORIENTED_EDGE('',*,*,#7852,.T.); #11376=ORIENTED_EDGE('',*,*,#7854,.F.); #11377=ORIENTED_EDGE('',*,*,#7855,.F.); #11378=ORIENTED_EDGE('',*,*,#7856,.F.); #11379=ORIENTED_EDGE('',*,*,#7855,.T.); #11380=ORIENTED_EDGE('',*,*,#7857,.F.); #11381=ORIENTED_EDGE('',*,*,#7858,.F.); #11382=ORIENTED_EDGE('',*,*,#7859,.F.); #11383=ORIENTED_EDGE('',*,*,#7858,.T.); #11384=ORIENTED_EDGE('',*,*,#7860,.F.); #11385=ORIENTED_EDGE('',*,*,#7823,.F.); #11386=ORIENTED_EDGE('',*,*,#7859,.T.); #11387=ORIENTED_EDGE('',*,*,#7822,.T.); #11388=ORIENTED_EDGE('',*,*,#7826,.T.); #11389=ORIENTED_EDGE('',*,*,#7829,.T.); #11390=ORIENTED_EDGE('',*,*,#7832,.T.); #11391=ORIENTED_EDGE('',*,*,#7835,.T.); #11392=ORIENTED_EDGE('',*,*,#7838,.T.); #11393=ORIENTED_EDGE('',*,*,#7841,.T.); #11394=ORIENTED_EDGE('',*,*,#7844,.T.); #11395=ORIENTED_EDGE('',*,*,#7847,.T.); #11396=ORIENTED_EDGE('',*,*,#7850,.T.); #11397=ORIENTED_EDGE('',*,*,#7853,.T.); #11398=ORIENTED_EDGE('',*,*,#7856,.T.); #11399=ORIENTED_EDGE('',*,*,#7860,.T.); #11400=ORIENTED_EDGE('',*,*,#7857,.T.); #11401=ORIENTED_EDGE('',*,*,#7854,.T.); #11402=ORIENTED_EDGE('',*,*,#7851,.T.); #11403=ORIENTED_EDGE('',*,*,#7848,.T.); #11404=ORIENTED_EDGE('',*,*,#7845,.T.); #11405=ORIENTED_EDGE('',*,*,#7842,.T.); #11406=ORIENTED_EDGE('',*,*,#7839,.T.); #11407=ORIENTED_EDGE('',*,*,#7836,.T.); #11408=ORIENTED_EDGE('',*,*,#7833,.T.); #11409=ORIENTED_EDGE('',*,*,#7830,.T.); #11410=ORIENTED_EDGE('',*,*,#7827,.T.); #11411=ORIENTED_EDGE('',*,*,#7824,.T.); #11412=ORIENTED_EDGE('',*,*,#7861,.F.); #11413=ORIENTED_EDGE('',*,*,#7862,.T.); #11414=ORIENTED_EDGE('',*,*,#7863,.F.); #11415=ORIENTED_EDGE('',*,*,#7864,.F.); #11416=ORIENTED_EDGE('',*,*,#7865,.F.); #11417=ORIENTED_EDGE('',*,*,#7864,.T.); #11418=ORIENTED_EDGE('',*,*,#7866,.F.); #11419=ORIENTED_EDGE('',*,*,#7867,.F.); #11420=ORIENTED_EDGE('',*,*,#7868,.F.); #11421=ORIENTED_EDGE('',*,*,#7867,.T.); #11422=ORIENTED_EDGE('',*,*,#7869,.F.); #11423=ORIENTED_EDGE('',*,*,#7870,.F.); #11424=ORIENTED_EDGE('',*,*,#7871,.F.); #11425=ORIENTED_EDGE('',*,*,#7870,.T.); #11426=ORIENTED_EDGE('',*,*,#7872,.F.); #11427=ORIENTED_EDGE('',*,*,#7862,.F.); #11428=ORIENTED_EDGE('',*,*,#7871,.T.); #11429=ORIENTED_EDGE('',*,*,#7861,.T.); #11430=ORIENTED_EDGE('',*,*,#7865,.T.); #11431=ORIENTED_EDGE('',*,*,#7868,.T.); #11432=ORIENTED_EDGE('',*,*,#7872,.T.); #11433=ORIENTED_EDGE('',*,*,#7869,.T.); #11434=ORIENTED_EDGE('',*,*,#7866,.T.); #11435=ORIENTED_EDGE('',*,*,#7863,.T.); #11436=ORIENTED_EDGE('',*,*,#7873,.F.); #11437=ORIENTED_EDGE('',*,*,#7874,.T.); #11438=ORIENTED_EDGE('',*,*,#7875,.F.); #11439=ORIENTED_EDGE('',*,*,#7876,.F.); #11440=ORIENTED_EDGE('',*,*,#7877,.F.); #11441=ORIENTED_EDGE('',*,*,#7876,.T.); #11442=ORIENTED_EDGE('',*,*,#7878,.F.); #11443=ORIENTED_EDGE('',*,*,#7879,.F.); #11444=ORIENTED_EDGE('',*,*,#7880,.F.); #11445=ORIENTED_EDGE('',*,*,#7879,.T.); #11446=ORIENTED_EDGE('',*,*,#7881,.F.); #11447=ORIENTED_EDGE('',*,*,#7882,.F.); #11448=ORIENTED_EDGE('',*,*,#7883,.F.); #11449=ORIENTED_EDGE('',*,*,#7882,.T.); #11450=ORIENTED_EDGE('',*,*,#7884,.F.); #11451=ORIENTED_EDGE('',*,*,#7885,.F.); #11452=ORIENTED_EDGE('',*,*,#7886,.F.); #11453=ORIENTED_EDGE('',*,*,#7885,.T.); #11454=ORIENTED_EDGE('',*,*,#7887,.F.); #11455=ORIENTED_EDGE('',*,*,#7888,.F.); #11456=ORIENTED_EDGE('',*,*,#7889,.F.); #11457=ORIENTED_EDGE('',*,*,#7888,.T.); #11458=ORIENTED_EDGE('',*,*,#7890,.F.); #11459=ORIENTED_EDGE('',*,*,#7891,.F.); #11460=ORIENTED_EDGE('',*,*,#7892,.F.); #11461=ORIENTED_EDGE('',*,*,#7891,.T.); #11462=ORIENTED_EDGE('',*,*,#7893,.F.); #11463=ORIENTED_EDGE('',*,*,#7894,.F.); #11464=ORIENTED_EDGE('',*,*,#7895,.F.); #11465=ORIENTED_EDGE('',*,*,#7894,.T.); #11466=ORIENTED_EDGE('',*,*,#7896,.F.); #11467=ORIENTED_EDGE('',*,*,#7897,.F.); #11468=ORIENTED_EDGE('',*,*,#7898,.F.); #11469=ORIENTED_EDGE('',*,*,#7897,.T.); #11470=ORIENTED_EDGE('',*,*,#7899,.F.); #11471=ORIENTED_EDGE('',*,*,#7900,.F.); #11472=ORIENTED_EDGE('',*,*,#7901,.F.); #11473=ORIENTED_EDGE('',*,*,#7900,.T.); #11474=ORIENTED_EDGE('',*,*,#7902,.F.); #11475=ORIENTED_EDGE('',*,*,#7903,.F.); #11476=ORIENTED_EDGE('',*,*,#7904,.F.); #11477=ORIENTED_EDGE('',*,*,#7903,.T.); #11478=ORIENTED_EDGE('',*,*,#7905,.F.); #11479=ORIENTED_EDGE('',*,*,#7906,.F.); #11480=ORIENTED_EDGE('',*,*,#7907,.F.); #11481=ORIENTED_EDGE('',*,*,#7906,.T.); #11482=ORIENTED_EDGE('',*,*,#7908,.F.); #11483=ORIENTED_EDGE('',*,*,#7909,.F.); #11484=ORIENTED_EDGE('',*,*,#7910,.F.); #11485=ORIENTED_EDGE('',*,*,#7909,.T.); #11486=ORIENTED_EDGE('',*,*,#7911,.F.); #11487=ORIENTED_EDGE('',*,*,#7912,.F.); #11488=ORIENTED_EDGE('',*,*,#7913,.F.); #11489=ORIENTED_EDGE('',*,*,#7912,.T.); #11490=ORIENTED_EDGE('',*,*,#7914,.F.); #11491=ORIENTED_EDGE('',*,*,#7915,.F.); #11492=ORIENTED_EDGE('',*,*,#7916,.F.); #11493=ORIENTED_EDGE('',*,*,#7915,.T.); #11494=ORIENTED_EDGE('',*,*,#7917,.F.); #11495=ORIENTED_EDGE('',*,*,#7918,.F.); #11496=ORIENTED_EDGE('',*,*,#7919,.F.); #11497=ORIENTED_EDGE('',*,*,#7918,.T.); #11498=ORIENTED_EDGE('',*,*,#7920,.F.); #11499=ORIENTED_EDGE('',*,*,#7921,.F.); #11500=ORIENTED_EDGE('',*,*,#7922,.F.); #11501=ORIENTED_EDGE('',*,*,#7921,.T.); #11502=ORIENTED_EDGE('',*,*,#7923,.F.); #11503=ORIENTED_EDGE('',*,*,#7924,.F.); #11504=ORIENTED_EDGE('',*,*,#7925,.F.); #11505=ORIENTED_EDGE('',*,*,#7924,.T.); #11506=ORIENTED_EDGE('',*,*,#7926,.F.); #11507=ORIENTED_EDGE('',*,*,#7927,.F.); #11508=ORIENTED_EDGE('',*,*,#7928,.F.); #11509=ORIENTED_EDGE('',*,*,#7927,.T.); #11510=ORIENTED_EDGE('',*,*,#7929,.F.); #11511=ORIENTED_EDGE('',*,*,#7930,.F.); #11512=ORIENTED_EDGE('',*,*,#7931,.F.); #11513=ORIENTED_EDGE('',*,*,#7930,.T.); #11514=ORIENTED_EDGE('',*,*,#7932,.F.); #11515=ORIENTED_EDGE('',*,*,#7933,.F.); #11516=ORIENTED_EDGE('',*,*,#7934,.F.); #11517=ORIENTED_EDGE('',*,*,#7933,.T.); #11518=ORIENTED_EDGE('',*,*,#7935,.F.); #11519=ORIENTED_EDGE('',*,*,#7874,.F.); #11520=ORIENTED_EDGE('',*,*,#7934,.T.); #11521=ORIENTED_EDGE('',*,*,#7873,.T.); #11522=ORIENTED_EDGE('',*,*,#7877,.T.); #11523=ORIENTED_EDGE('',*,*,#7880,.T.); #11524=ORIENTED_EDGE('',*,*,#7883,.T.); #11525=ORIENTED_EDGE('',*,*,#7886,.T.); #11526=ORIENTED_EDGE('',*,*,#7889,.T.); #11527=ORIENTED_EDGE('',*,*,#7892,.T.); #11528=ORIENTED_EDGE('',*,*,#7895,.T.); #11529=ORIENTED_EDGE('',*,*,#7898,.T.); #11530=ORIENTED_EDGE('',*,*,#7901,.T.); #11531=ORIENTED_EDGE('',*,*,#7904,.T.); #11532=ORIENTED_EDGE('',*,*,#7907,.T.); #11533=ORIENTED_EDGE('',*,*,#7910,.T.); #11534=ORIENTED_EDGE('',*,*,#7913,.T.); #11535=ORIENTED_EDGE('',*,*,#7916,.T.); #11536=ORIENTED_EDGE('',*,*,#7919,.T.); #11537=ORIENTED_EDGE('',*,*,#7922,.T.); #11538=ORIENTED_EDGE('',*,*,#7925,.T.); #11539=ORIENTED_EDGE('',*,*,#7928,.T.); #11540=ORIENTED_EDGE('',*,*,#7931,.T.); #11541=ORIENTED_EDGE('',*,*,#7935,.T.); #11542=ORIENTED_EDGE('',*,*,#7932,.T.); #11543=ORIENTED_EDGE('',*,*,#7929,.T.); #11544=ORIENTED_EDGE('',*,*,#7926,.T.); #11545=ORIENTED_EDGE('',*,*,#7923,.T.); #11546=ORIENTED_EDGE('',*,*,#7920,.T.); #11547=ORIENTED_EDGE('',*,*,#7917,.T.); #11548=ORIENTED_EDGE('',*,*,#7914,.T.); #11549=ORIENTED_EDGE('',*,*,#7911,.T.); #11550=ORIENTED_EDGE('',*,*,#7908,.T.); #11551=ORIENTED_EDGE('',*,*,#7905,.T.); #11552=ORIENTED_EDGE('',*,*,#7902,.T.); #11553=ORIENTED_EDGE('',*,*,#7899,.T.); #11554=ORIENTED_EDGE('',*,*,#7896,.T.); #11555=ORIENTED_EDGE('',*,*,#7893,.T.); #11556=ORIENTED_EDGE('',*,*,#7890,.T.); #11557=ORIENTED_EDGE('',*,*,#7887,.T.); #11558=ORIENTED_EDGE('',*,*,#7884,.T.); #11559=ORIENTED_EDGE('',*,*,#7881,.T.); #11560=ORIENTED_EDGE('',*,*,#7878,.T.); #11561=ORIENTED_EDGE('',*,*,#7875,.T.); #11562=PLANE('',#12747); #11563=PLANE('',#12751); #11564=PLANE('',#12849); #11565=PLANE('',#12850); #11566=PLANE('',#12851); #11567=PLANE('',#12852); #11568=PLANE('',#12857); #11569=PLANE('',#12860); #11570=PLANE('',#12861); #11571=PLANE('',#12864); #11572=PLANE('',#12865); #11573=PLANE('',#12866); #11574=PLANE('',#12867); #11575=PLANE('',#12868); #11576=PLANE('',#12870); #11577=PLANE('',#12874); #11578=PLANE('',#12878); #11579=PLANE('',#12879); #11580=PLANE('',#12883); #11581=PLANE('',#12887); #11582=PLANE('',#12888); #11583=PLANE('',#12889); #11584=PLANE('',#12890); #11585=PLANE('',#12891); #11586=PLANE('',#12892); #11587=PLANE('',#12893); #11588=PLANE('',#12894); #11589=PLANE('',#12895); #11590=PLANE('',#12896); #11591=PLANE('',#12897); #11592=PLANE('',#12898); #11593=PLANE('',#12899); #11594=PLANE('',#12900); #11595=PLANE('',#12903); #11596=PLANE('',#12904); #11597=PLANE('',#12905); #11598=PLANE('',#12906); #11599=PLANE('',#12907); #11600=PLANE('',#12908); #11601=PLANE('',#12909); #11602=PLANE('',#12913); #11603=PLANE('',#12918); #11604=PLANE('',#12922); #11605=PLANE('',#12926); #11606=PLANE('',#12930); #11607=PLANE('',#12934); #11608=PLANE('',#12938); #11609=PLANE('',#12951); #11610=PLANE('',#12955); #11611=PLANE('',#12957); #11612=PLANE('',#12960); #11613=PLANE('',#12961); #11614=PLANE('',#12962); #11615=PLANE('',#12963); #11616=PLANE('',#12964); #11617=PLANE('',#12965); #11618=PLANE('',#12969); #11619=PLANE('',#12973); #11620=PLANE('',#12977); #11621=PLANE('',#12981); #11622=PLANE('',#12982); #11623=PLANE('',#12983); #11624=PLANE('',#12984); #11625=PLANE('',#12985); #11626=PLANE('',#12986); #11627=PLANE('',#12987); #11628=PLANE('',#12988); #11629=PLANE('',#12989); #11630=PLANE('',#12990); #11631=PLANE('',#12991); #11632=PLANE('',#12992); #11633=PLANE('',#12995); #11634=PLANE('',#12996); #11635=PLANE('',#12997); #11636=PLANE('',#12998); #11637=PLANE('',#13001); #11638=PLANE('',#13002); #11639=PLANE('',#13003); #11640=PLANE('',#13004); #11641=PLANE('',#13005); #11642=PLANE('',#13006); #11643=PLANE('',#13007); #11644=PLANE('',#13010); #11645=PLANE('',#13012); #11646=PLANE('',#13015); #11647=PLANE('',#13017); #11648=PLANE('',#13019); #11649=PLANE('',#13021); #11650=PLANE('',#13022); #11651=PLANE('',#13026); #11652=PLANE('',#13030); #11653=PLANE('',#13031); #11654=PLANE('',#13035); #11655=PLANE('',#13039); #11656=PLANE('',#13040); #11657=PLANE('',#13041); #11658=PLANE('',#13042); #11659=PLANE('',#13043); #11660=PLANE('',#13044); #11661=PLANE('',#13045); #11662=PLANE('',#13046); #11663=PLANE('',#13047); #11664=PLANE('',#13048); #11665=PLANE('',#13049); #11666=PLANE('',#13050); #11667=PLANE('',#13051); #11668=PLANE('',#13052); #11669=PLANE('',#13055); #11670=PLANE('',#13056); #11671=PLANE('',#13057); #11672=PLANE('',#13058); #11673=PLANE('',#13061); #11674=PLANE('',#13062); #11675=PLANE('',#13063); #11676=PLANE('',#13066); #11677=PLANE('',#13068); #11678=PLANE('',#13071); #11679=PLANE('',#13074); #11680=PLANE('',#13076); #11681=PLANE('',#13077); #11682=PLANE('',#13078); #11683=PLANE('',#13079); #11684=PLANE('',#13080); #11685=PLANE('',#13081); #11686=PLANE('',#13082); #11687=PLANE('',#13086); #11688=PLANE('',#13090); #11689=PLANE('',#13091); #11690=PLANE('',#13095); #11691=PLANE('',#13099); #11692=PLANE('',#13100); #11693=PLANE('',#13101); #11694=PLANE('',#13102); #11695=PLANE('',#13103); #11696=PLANE('',#13104); #11697=PLANE('',#13105); #11698=PLANE('',#13106); #11699=PLANE('',#13107); #11700=PLANE('',#13108); #11701=PLANE('',#13109); #11702=PLANE('',#13110); #11703=PLANE('',#13111); #11704=PLANE('',#13112); #11705=PLANE('',#13115); #11706=PLANE('',#13116); #11707=PLANE('',#13117); #11708=PLANE('',#13118); #11709=PLANE('',#13121); #11710=PLANE('',#13122); #11711=PLANE('',#13123); #11712=PLANE('',#13124); #11713=PLANE('',#13125); #11714=PLANE('',#13126); #11715=PLANE('',#13127); #11716=PLANE('',#13130); #11717=PLANE('',#13132); #11718=PLANE('',#13135); #11719=PLANE('',#13137); #11720=PLANE('',#13139); #11721=PLANE('',#13141); #11722=PLANE('',#13143); #11723=PLANE('',#13144); #11724=PLANE('',#13145); #11725=PLANE('',#13146); #11726=PLANE('',#13147); #11727=PLANE('',#13148); #11728=PLANE('',#13149); #11729=PLANE('',#13150); #11730=PLANE('',#13151); #11731=PLANE('',#13152); #11732=PLANE('',#13153); #11733=PLANE('',#13154); #11734=PLANE('',#13155); #11735=PLANE('',#13156); #11736=PLANE('',#13157); #11737=PLANE('',#13158); #11738=PLANE('',#13159); #11739=PLANE('',#13160); #11740=PLANE('',#13161); #11741=PLANE('',#13162); #11742=PLANE('',#13163); #11743=PLANE('',#13164); #11744=PLANE('',#13165); #11745=PLANE('',#13166); #11746=PLANE('',#13167); #11747=PLANE('',#13168); #11748=PLANE('',#13169); #11749=PLANE('',#13170); #11750=PLANE('',#13171); #11751=PLANE('',#13172); #11752=PLANE('',#13173); #11753=PLANE('',#13174); #11754=PLANE('',#13175); #11755=PLANE('',#13176); #11756=PLANE('',#13177); #11757=PLANE('',#13178); #11758=PLANE('',#13179); #11759=PLANE('',#13180); #11760=PLANE('',#13181); #11761=PLANE('',#13182); #11762=PLANE('',#13183); #11763=PLANE('',#13184); #11764=PLANE('',#13185); #11765=PLANE('',#13186); #11766=PLANE('',#13187); #11767=PLANE('',#13188); #11768=PLANE('',#13189); #11769=PLANE('',#13190); #11770=PLANE('',#13191); #11771=PLANE('',#13192); #11772=PLANE('',#13193); #11773=PLANE('',#13194); #11774=PLANE('',#13195); #11775=PLANE('',#13196); #11776=PLANE('',#13197); #11777=PLANE('',#13198); #11778=PLANE('',#13199); #11779=PLANE('',#13200); #11780=PLANE('',#13201); #11781=PLANE('',#13202); #11782=PLANE('',#13203); #11783=PLANE('',#13204); #11784=PLANE('',#13205); #11785=PLANE('',#13206); #11786=PLANE('',#13207); #11787=PLANE('',#13208); #11788=PLANE('',#13209); #11789=PLANE('',#13210); #11790=PLANE('',#13211); #11791=PLANE('',#13212); #11792=PLANE('',#13213); #11793=PLANE('',#13214); #11794=PLANE('',#13215); #11795=PLANE('',#13216); #11796=PLANE('',#13217); #11797=PLANE('',#13218); #11798=PLANE('',#13219); #11799=PLANE('',#13220); #11800=PLANE('',#13221); #11801=PLANE('',#13222); #11802=PLANE('',#13223); #11803=PLANE('',#13224); #11804=PLANE('',#13225); #11805=PLANE('',#13226); #11806=PLANE('',#13227); #11807=PLANE('',#13228); #11808=PLANE('',#13229); #11809=PLANE('',#13230); #11810=PLANE('',#13231); #11811=PLANE('',#13232); #11812=PLANE('',#13233); #11813=PLANE('',#13234); #11814=PLANE('',#13235); #11815=PLANE('',#13236); #11816=PLANE('',#13237); #11817=PLANE('',#13238); #11818=PLANE('',#13239); #11819=PLANE('',#13240); #11820=PLANE('',#13241); #11821=PLANE('',#13242); #11822=PLANE('',#13243); #11823=PLANE('',#13244); #11824=PLANE('',#13245); #11825=PLANE('',#13246); #11826=PLANE('',#13247); #11827=PLANE('',#13248); #11828=PLANE('',#13249); #11829=PLANE('',#13250); #11830=PLANE('',#13251); #11831=PLANE('',#13252); #11832=PLANE('',#13253); #11833=PLANE('',#13254); #11834=PLANE('',#13255); #11835=PLANE('',#13256); #11836=PLANE('',#13257); #11837=PLANE('',#13258); #11838=PLANE('',#13259); #11839=PLANE('',#13260); #11840=PLANE('',#13261); #11841=PLANE('',#13262); #11842=PLANE('',#13263); #11843=PLANE('',#13264); #11844=PLANE('',#13265); #11845=PLANE('',#13269); #11846=PLANE('',#13271); #11847=PLANE('',#13274); #11848=PLANE('',#13275); #11849=PLANE('',#13276); #11850=PLANE('',#13277); #11851=PLANE('',#13278); #11852=PLANE('',#13279); #11853=PLANE('',#13283); #11854=PLANE('',#13284); #11855=PLANE('',#13285); #11856=PLANE('',#13286); #11857=PLANE('',#13287); #11858=PLANE('',#13288); #11859=PLANE('',#13289); #11860=PLANE('',#13290); #11861=PLANE('',#13294); #11862=PLANE('',#13298); #11863=PLANE('',#13302); #11864=PLANE('',#13303); #11865=PLANE('',#13304); #11866=PLANE('',#13305); #11867=PLANE('',#13306); #11868=PLANE('',#13307); #11869=PLANE('',#13308); #11870=PLANE('',#13309); #11871=PLANE('',#13310); #11872=PLANE('',#13311); #11873=PLANE('',#13312); #11874=PLANE('',#13313); #11875=PLANE('',#13314); #11876=PLANE('',#13315); #11877=PLANE('',#13316); #11878=PLANE('',#13317); #11879=PLANE('',#13318); #11880=PLANE('',#13319); #11881=PLANE('',#13320); #11882=PLANE('',#13321); #11883=PLANE('',#13322); #11884=PLANE('',#13323); #11885=PLANE('',#13324); #11886=PLANE('',#13325); #11887=PLANE('',#13326); #11888=PLANE('',#13327); #11889=PLANE('',#13328); #11890=PLANE('',#13329); #11891=PLANE('',#13330); #11892=PLANE('',#13331); #11893=PLANE('',#13332); #11894=PLANE('',#13333); #11895=PLANE('',#13334); #11896=PLANE('',#13335); #11897=PLANE('',#13336); #11898=PLANE('',#13337); #11899=PLANE('',#13338); #11900=PLANE('',#13339); #11901=PLANE('',#13340); #11902=PLANE('',#13341); #11903=PLANE('',#13342); #11904=PLANE('',#13343); #11905=PLANE('',#13344); #11906=PLANE('',#13345); #11907=PLANE('',#13346); #11908=PLANE('',#13347); #11909=PLANE('',#13348); #11910=PLANE('',#13349); #11911=PLANE('',#13350); #11912=PLANE('',#13351); #11913=PLANE('',#13352); #11914=PLANE('',#13353); #11915=PLANE('',#13354); #11916=PLANE('',#13355); #11917=PLANE('',#13356); #11918=PLANE('',#13357); #11919=PLANE('',#13358); #11920=PLANE('',#13359); #11921=PLANE('',#13360); #11922=PLANE('',#13361); #11923=PLANE('',#13362); #11924=PLANE('',#13363); #11925=PLANE('',#13364); #11926=PLANE('',#13365); #11927=PLANE('',#13366); #11928=PLANE('',#13367); #11929=PLANE('',#13368); #11930=PLANE('',#13369); #11931=PLANE('',#13370); #11932=PLANE('',#13371); #11933=PLANE('',#13372); #11934=PLANE('',#13373); #11935=PLANE('',#13374); #11936=PLANE('',#13375); #11937=PLANE('',#13376); #11938=PLANE('',#13377); #11939=PLANE('',#13378); #11940=PLANE('',#13379); #11941=PLANE('',#13380); #11942=PLANE('',#13381); #11943=PLANE('',#13382); #11944=PLANE('',#13383); #11945=PLANE('',#13384); #11946=PLANE('',#13385); #11947=PLANE('',#13386); #11948=PLANE('',#13387); #11949=PLANE('',#13388); #11950=PLANE('',#13389); #11951=PLANE('',#13390); #11952=PLANE('',#13391); #11953=PLANE('',#13392); #11954=PLANE('',#13393); #11955=PLANE('',#13394); #11956=PLANE('',#13395); #11957=PLANE('',#13396); #11958=PLANE('',#13397); #11959=PLANE('',#13398); #11960=PLANE('',#13399); #11961=PLANE('',#13400); #11962=PLANE('',#13401); #11963=PLANE('',#13402); #11964=PLANE('',#13403); #11965=PLANE('',#13404); #11966=PLANE('',#13405); #11967=PLANE('',#13406); #11968=PLANE('',#13407); #11969=PLANE('',#13408); #11970=PLANE('',#13409); #11971=PLANE('',#13410); #11972=PLANE('',#13411); #11973=PLANE('',#13412); #11974=PLANE('',#13413); #11975=PLANE('',#13414); #11976=PLANE('',#13415); #11977=PLANE('',#13416); #11978=PLANE('',#13417); #11979=PLANE('',#13418); #11980=PLANE('',#13419); #11981=PLANE('',#13420); #11982=PLANE('',#13421); #11983=PLANE('',#13422); #11984=PLANE('',#13423); #11985=PLANE('',#13424); #11986=PLANE('',#13425); #11987=PLANE('',#13426); #11988=PLANE('',#13427); #11989=PLANE('',#13428); #11990=PLANE('',#13429); #11991=PLANE('',#13430); #11992=PLANE('',#13431); #11993=PLANE('',#13432); #11994=ADVANCED_FACE('',(#968),#11562,.T.); #11995=ADVANCED_FACE('',(#969,#788),#961,.T.); #11996=ADVANCED_FACE('',(#970,#789),#11563,.T.); #11997=ADVANCED_FACE('',(#971,#790),#722,.F.); #11998=ADVANCED_FACE('',(#972),#723,.T.); #11999=ADVANCED_FACE('',(#973),#724,.T.); #12000=ADVANCED_FACE('',(#974),#310,.T.); #12001=ADVANCED_FACE('',(#975),#311,.T.); #12002=ADVANCED_FACE('',(#976),#725,.T.); #12003=ADVANCED_FACE('',(#977),#119,.F.); #12004=ADVANCED_FACE('',(#978),#120,.F.); #12005=ADVANCED_FACE('',(#979),#312,.T.); #12006=ADVANCED_FACE('',(#980),#121,.F.); #12007=ADVANCED_FACE('',(#981),#313,.T.); #12008=ADVANCED_FACE('',(#982),#962,.T.); #12009=ADVANCED_FACE('',(#983),#122,.F.); #12010=ADVANCED_FACE('',(#984),#726,.T.); #12011=ADVANCED_FACE('',(#985),#314,.T.); #12012=ADVANCED_FACE('',(#986),#727,.T.); #12013=ADVANCED_FACE('',(#987),#123,.F.); #12014=ADVANCED_FACE('',(#988),#124,.F.); #12015=ADVANCED_FACE('',(#989),#315,.T.); #12016=ADVANCED_FACE('',(#990),#125,.F.); #12017=ADVANCED_FACE('',(#991),#728,.T.); #12018=ADVANCED_FACE('',(#992),#316,.T.); #12019=ADVANCED_FACE('',(#993),#963,.T.); #12020=ADVANCED_FACE('',(#994),#126,.F.); #12021=ADVANCED_FACE('',(#995),#317,.T.); #12022=ADVANCED_FACE('',(#996),#318,.T.); #12023=ADVANCED_FACE('',(#997),#729,.T.); #12024=ADVANCED_FACE('',(#998),#319,.T.); #12025=ADVANCED_FACE('',(#999),#730,.T.); #12026=ADVANCED_FACE('',(#1000),#731,.T.); #12027=ADVANCED_FACE('',(#1001),#127,.F.); #12028=ADVANCED_FACE('',(#1002),#964,.T.); #12029=ADVANCED_FACE('',(#1003),#732,.T.); #12030=ADVANCED_FACE('',(#1004),#965,.F.); #12031=ADVANCED_FACE('',(#1005),#966,.F.); #12032=ADVANCED_FACE('',(#1006),#128,.F.); #12033=ADVANCED_FACE('',(#1007),#967,.T.); #12034=ADVANCED_FACE('',(#1008),#129,.F.); #12035=ADVANCED_FACE('',(#1009),#130,.F.); #12036=ADVANCED_FACE('',(#1010),#733,.T.); #12037=ADVANCED_FACE('',(#1011),#734,.T.); #12038=ADVANCED_FACE('',(#1012),#735,.T.); #12039=ADVANCED_FACE('',(#1013),#736,.T.); #12040=ADVANCED_FACE('',(#1014),#737,.T.); #12041=ADVANCED_FACE('',(#1015),#11564,.T.); #12042=ADVANCED_FACE('',(#1016),#11565,.T.); #12043=ADVANCED_FACE('',(#1017),#11566,.T.); #12044=ADVANCED_FACE('',(#1018),#11567,.T.); #12045=ADVANCED_FACE('',(#1019),#738,.F.); #12046=ADVANCED_FACE('',(#1020),#11568,.T.); #12047=ADVANCED_FACE('',(#1021),#117,.F.); #12048=ADVANCED_FACE('',(#1022),#118,.F.); #12049=ADVANCED_FACE('',(#1023),#11569,.T.); #12050=ADVANCED_FACE('',(#1024),#11570,.T.); #12051=ADVANCED_FACE('',(#1025),#739,.F.); #12052=ADVANCED_FACE('',(#1026),#11571,.T.); #12053=ADVANCED_FACE('',(#1027),#11572,.T.); #12054=ADVANCED_FACE('',(#1028),#11573,.T.); #12055=ADVANCED_FACE('',(#1029),#11574,.T.); #12056=ADVANCED_FACE('',(#1030),#11575,.F.); #12057=ADVANCED_FACE('',(#1031),#11576,.F.); #12058=ADVANCED_FACE('',(#1032),#740,.F.); #12059=ADVANCED_FACE('',(#1033),#11577,.T.); #12060=ADVANCED_FACE('',(#1034),#741,.T.); #12061=ADVANCED_FACE('',(#1035),#11578,.T.); #12062=ADVANCED_FACE('',(#1036),#11579,.T.); #12063=ADVANCED_FACE('',(#1037),#742,.F.); #12064=ADVANCED_FACE('',(#1038),#11580,.T.); #12065=ADVANCED_FACE('',(#1039),#743,.T.); #12066=ADVANCED_FACE('',(#1040),#11581,.T.); #12067=ADVANCED_FACE('',(#1041),#11582,.T.); #12068=ADVANCED_FACE('',(#1042),#11583,.T.); #12069=ADVANCED_FACE('',(#1043),#11584,.T.); #12070=ADVANCED_FACE('',(#1044),#11585,.T.); #12071=ADVANCED_FACE('',(#1045),#11586,.T.); #12072=ADVANCED_FACE('',(#1046),#11587,.T.); #12073=ADVANCED_FACE('',(#1047),#11588,.T.); #12074=ADVANCED_FACE('',(#1048),#11589,.T.); #12075=ADVANCED_FACE('',(#1049),#11590,.T.); #12076=ADVANCED_FACE('',(#1050),#11591,.T.); #12077=ADVANCED_FACE('',(#1051),#11592,.T.); #12078=ADVANCED_FACE('',(#1052),#11593,.T.); #12079=ADVANCED_FACE('',(#1053),#11594,.T.); #12080=ADVANCED_FACE('',(#1054),#11595,.T.); #12081=ADVANCED_FACE('',(#1055),#11596,.T.); #12082=ADVANCED_FACE('',(#1056),#11597,.T.); #12083=ADVANCED_FACE('',(#1057),#11598,.T.); #12084=ADVANCED_FACE('',(#1058),#11599,.F.); #12085=ADVANCED_FACE('',(#1059),#11600,.F.); #12086=ADVANCED_FACE('',(#1060),#11601,.F.); #12087=ADVANCED_FACE('',(#1061),#744,.F.); #12088=ADVANCED_FACE('',(#1062),#11602,.T.); #12089=ADVANCED_FACE('',(#1063),#745,.T.); #12090=ADVANCED_FACE('',(#1064),#746,.T.); #12091=ADVANCED_FACE('',(#1065),#11603,.T.); #12092=ADVANCED_FACE('',(#1066),#747,.T.); #12093=ADVANCED_FACE('',(#1067),#11604,.T.); #12094=ADVANCED_FACE('',(#1068),#748,.T.); #12095=ADVANCED_FACE('',(#1069),#11605,.F.); #12096=ADVANCED_FACE('',(#1070),#749,.F.); #12097=ADVANCED_FACE('',(#1071),#11606,.F.); #12098=ADVANCED_FACE('',(#1072),#750,.F.); #12099=ADVANCED_FACE('',(#1073),#11607,.F.); #12100=ADVANCED_FACE('',(#1074),#751,.F.); #12101=ADVANCED_FACE('',(#1075),#11608,.F.); #12102=ADVANCED_FACE('',(#1076),#752,.F.); #12103=ADVANCED_FACE('',(#1077),#753,.T.); #12104=ADVANCED_FACE('',(#1078),#754,.F.); #12105=ADVANCED_FACE('',(#1079),#755,.T.); #12106=ADVANCED_FACE('',(#1080),#11609,.T.); #12107=ADVANCED_FACE('',(#1081),#756,.T.); #12108=ADVANCED_FACE('',(#1082,#791),#11610,.T.); #12109=ADVANCED_FACE('',(#1083),#11611,.T.); #12110=ADVANCED_FACE('',(#1084),#757,.T.); #12111=ADVANCED_FACE('',(#1085),#11612,.F.); #12112=ADVANCED_FACE('',(#1086,#792),#11613,.T.); #12113=ADVANCED_FACE('',(#1087),#11614,.F.); #12114=ADVANCED_FACE('',(#1088),#11615,.F.); #12115=ADVANCED_FACE('',(#1089),#11616,.F.); #12116=ADVANCED_FACE('',(#1090),#11617,.T.); #12117=ADVANCED_FACE('',(#1091),#758,.F.); #12118=ADVANCED_FACE('',(#1092),#11618,.T.); #12119=ADVANCED_FACE('',(#1093),#759,.T.); #12120=ADVANCED_FACE('',(#1094),#11619,.T.); #12121=ADVANCED_FACE('',(#1095),#760,.F.); #12122=ADVANCED_FACE('',(#1096),#11620,.T.); #12123=ADVANCED_FACE('',(#1097),#761,.T.); #12124=ADVANCED_FACE('',(#1098),#11621,.T.); #12125=ADVANCED_FACE('',(#1099),#11622,.T.); #12126=ADVANCED_FACE('',(#1100),#11623,.T.); #12127=ADVANCED_FACE('',(#1101),#11624,.T.); #12128=ADVANCED_FACE('',(#1102),#11625,.T.); #12129=ADVANCED_FACE('',(#1103),#11626,.T.); #12130=ADVANCED_FACE('',(#1104),#11627,.T.); #12131=ADVANCED_FACE('',(#1105),#11628,.T.); #12132=ADVANCED_FACE('',(#1106),#11629,.T.); #12133=ADVANCED_FACE('',(#1107),#11630,.T.); #12134=ADVANCED_FACE('',(#1108),#11631,.T.); #12135=ADVANCED_FACE('',(#1109),#11632,.T.); #12136=ADVANCED_FACE('',(#1110),#11633,.T.); #12137=ADVANCED_FACE('',(#1111),#11634,.T.); #12138=ADVANCED_FACE('',(#1112),#11635,.T.); #12139=ADVANCED_FACE('',(#1113),#11636,.T.); #12140=ADVANCED_FACE('',(#1114),#11637,.T.); #12141=ADVANCED_FACE('',(#1115),#11638,.T.); #12142=ADVANCED_FACE('',(#1116),#11639,.T.); #12143=ADVANCED_FACE('',(#1117),#11640,.T.); #12144=ADVANCED_FACE('',(#1118),#11641,.T.); #12145=ADVANCED_FACE('',(#1119),#11642,.T.); #12146=ADVANCED_FACE('',(#1120),#11643,.T.); #12147=ADVANCED_FACE('',(#1121),#11644,.T.); #12148=ADVANCED_FACE('',(#1122),#762,.T.); #12149=ADVANCED_FACE('',(#1123),#11645,.T.); #12150=ADVANCED_FACE('',(#1124),#763,.F.); #12151=ADVANCED_FACE('',(#1125),#11646,.T.); #12152=ADVANCED_FACE('',(#1126),#11647,.T.); #12153=ADVANCED_FACE('',(#1127),#764,.T.); #12154=ADVANCED_FACE('',(#1128),#11648,.T.); #12155=ADVANCED_FACE('',(#1129),#765,.F.); #12156=ADVANCED_FACE('',(#1130),#11649,.F.); #12157=ADVANCED_FACE('',(#1131),#11650,.F.); #12158=ADVANCED_FACE('',(#1132),#766,.F.); #12159=ADVANCED_FACE('',(#1133),#11651,.T.); #12160=ADVANCED_FACE('',(#1134),#767,.T.); #12161=ADVANCED_FACE('',(#1135),#11652,.T.); #12162=ADVANCED_FACE('',(#1136),#11653,.T.); #12163=ADVANCED_FACE('',(#1137),#768,.F.); #12164=ADVANCED_FACE('',(#1138),#11654,.T.); #12165=ADVANCED_FACE('',(#1139),#769,.T.); #12166=ADVANCED_FACE('',(#1140),#11655,.T.); #12167=ADVANCED_FACE('',(#1141),#11656,.T.); #12168=ADVANCED_FACE('',(#1142),#11657,.T.); #12169=ADVANCED_FACE('',(#1143),#11658,.T.); #12170=ADVANCED_FACE('',(#1144),#11659,.T.); #12171=ADVANCED_FACE('',(#1145),#11660,.T.); #12172=ADVANCED_FACE('',(#1146),#11661,.T.); #12173=ADVANCED_FACE('',(#1147),#11662,.T.); #12174=ADVANCED_FACE('',(#1148),#11663,.T.); #12175=ADVANCED_FACE('',(#1149),#11664,.T.); #12176=ADVANCED_FACE('',(#1150),#11665,.T.); #12177=ADVANCED_FACE('',(#1151),#11666,.T.); #12178=ADVANCED_FACE('',(#1152),#11667,.T.); #12179=ADVANCED_FACE('',(#1153),#11668,.T.); #12180=ADVANCED_FACE('',(#1154),#11669,.T.); #12181=ADVANCED_FACE('',(#1155),#11670,.T.); #12182=ADVANCED_FACE('',(#1156),#11671,.T.); #12183=ADVANCED_FACE('',(#1157),#11672,.T.); #12184=ADVANCED_FACE('',(#1158),#11673,.T.); #12185=ADVANCED_FACE('',(#1159),#11674,.T.); #12186=ADVANCED_FACE('',(#1160),#11675,.T.); #12187=ADVANCED_FACE('',(#1161),#11676,.T.); #12188=ADVANCED_FACE('',(#1162),#770,.T.); #12189=ADVANCED_FACE('',(#1163),#11677,.T.); #12190=ADVANCED_FACE('',(#1164),#771,.F.); #12191=ADVANCED_FACE('',(#1165),#11678,.T.); #12192=ADVANCED_FACE('',(#1166),#772,.T.); #12193=ADVANCED_FACE('',(#1167),#11679,.T.); #12194=ADVANCED_FACE('',(#1168),#773,.F.); #12195=ADVANCED_FACE('',(#1169),#11680,.T.); #12196=ADVANCED_FACE('',(#1170),#11681,.T.); #12197=ADVANCED_FACE('',(#1171),#11682,.T.); #12198=ADVANCED_FACE('',(#1172),#11683,.F.); #12199=ADVANCED_FACE('',(#1173),#11684,.F.); #12200=ADVANCED_FACE('',(#1174),#11685,.F.); #12201=ADVANCED_FACE('',(#1175),#11686,.F.); #12202=ADVANCED_FACE('',(#1176),#774,.F.); #12203=ADVANCED_FACE('',(#1177),#11687,.T.); #12204=ADVANCED_FACE('',(#1178),#775,.T.); #12205=ADVANCED_FACE('',(#1179),#11688,.T.); #12206=ADVANCED_FACE('',(#1180),#11689,.T.); #12207=ADVANCED_FACE('',(#1181),#776,.F.); #12208=ADVANCED_FACE('',(#1182),#11690,.T.); #12209=ADVANCED_FACE('',(#1183),#777,.T.); #12210=ADVANCED_FACE('',(#1184),#11691,.T.); #12211=ADVANCED_FACE('',(#1185),#11692,.T.); #12212=ADVANCED_FACE('',(#1186),#11693,.T.); #12213=ADVANCED_FACE('',(#1187),#11694,.T.); #12214=ADVANCED_FACE('',(#1188),#11695,.T.); #12215=ADVANCED_FACE('',(#1189),#11696,.T.); #12216=ADVANCED_FACE('',(#1190),#11697,.T.); #12217=ADVANCED_FACE('',(#1191),#11698,.T.); #12218=ADVANCED_FACE('',(#1192),#11699,.T.); #12219=ADVANCED_FACE('',(#1193),#11700,.T.); #12220=ADVANCED_FACE('',(#1194),#11701,.T.); #12221=ADVANCED_FACE('',(#1195),#11702,.T.); #12222=ADVANCED_FACE('',(#1196),#11703,.T.); #12223=ADVANCED_FACE('',(#1197),#11704,.T.); #12224=ADVANCED_FACE('',(#1198),#11705,.T.); #12225=ADVANCED_FACE('',(#1199),#11706,.T.); #12226=ADVANCED_FACE('',(#1200),#11707,.T.); #12227=ADVANCED_FACE('',(#1201),#11708,.T.); #12228=ADVANCED_FACE('',(#1202),#11709,.T.); #12229=ADVANCED_FACE('',(#1203),#11710,.T.); #12230=ADVANCED_FACE('',(#1204),#11711,.T.); #12231=ADVANCED_FACE('',(#1205),#11712,.T.); #12232=ADVANCED_FACE('',(#1206),#11713,.T.); #12233=ADVANCED_FACE('',(#1207),#11714,.T.); #12234=ADVANCED_FACE('',(#1208),#11715,.T.); #12235=ADVANCED_FACE('',(#1209),#11716,.T.); #12236=ADVANCED_FACE('',(#1210),#778,.T.); #12237=ADVANCED_FACE('',(#1211),#11717,.T.); #12238=ADVANCED_FACE('',(#1212),#779,.F.); #12239=ADVANCED_FACE('',(#1213),#11718,.T.); #12240=ADVANCED_FACE('',(#1214),#11719,.T.); #12241=ADVANCED_FACE('',(#1215),#780,.T.); #12242=ADVANCED_FACE('',(#1216),#11720,.T.); #12243=ADVANCED_FACE('',(#1217),#781,.F.); #12244=ADVANCED_FACE('',(#1218),#11721,.F.); #12245=ADVANCED_FACE('',(#1219),#131,.T.); #12246=ADVANCED_FACE('',(#1220),#132,.T.); #12247=ADVANCED_FACE('',(#1221),#133,.T.); #12248=ADVANCED_FACE('',(#1222),#134,.T.); #12249=ADVANCED_FACE('',(#1223),#11722,.T.); #12250=ADVANCED_FACE('',(#1224),#11723,.T.); #12251=ADVANCED_FACE('',(#1225),#135,.T.); #12252=ADVANCED_FACE('',(#1226),#136,.T.); #12253=ADVANCED_FACE('',(#1227),#137,.T.); #12254=ADVANCED_FACE('',(#1228),#138,.T.); #12255=ADVANCED_FACE('',(#1229),#139,.T.); #12256=ADVANCED_FACE('',(#1230),#11724,.T.); #12257=ADVANCED_FACE('',(#1231),#11725,.T.); #12258=ADVANCED_FACE('',(#1232),#140,.T.); #12259=ADVANCED_FACE('',(#1233),#141,.T.); #12260=ADVANCED_FACE('',(#1234),#142,.T.); #12261=ADVANCED_FACE('',(#1235),#11726,.F.); #12262=ADVANCED_FACE('',(#1236),#11727,.T.); #12263=ADVANCED_FACE('',(#1237),#11728,.T.); #12264=ADVANCED_FACE('',(#1238),#11729,.T.); #12265=ADVANCED_FACE('',(#1239),#11730,.T.); #12266=ADVANCED_FACE('',(#1240),#11731,.T.); #12267=ADVANCED_FACE('',(#1241),#11732,.F.); #12268=ADVANCED_FACE('',(#1242),#11733,.T.); #12269=ADVANCED_FACE('',(#1243),#143,.T.); #12270=ADVANCED_FACE('',(#1244),#144,.T.); #12271=ADVANCED_FACE('',(#1245),#11734,.T.); #12272=ADVANCED_FACE('',(#1246),#11735,.T.); #12273=ADVANCED_FACE('',(#1247),#11736,.T.); #12274=ADVANCED_FACE('',(#1248),#11737,.T.); #12275=ADVANCED_FACE('',(#1249),#11738,.T.); #12276=ADVANCED_FACE('',(#1250),#145,.T.); #12277=ADVANCED_FACE('',(#1251),#146,.T.); #12278=ADVANCED_FACE('',(#1252),#11739,.T.); #12279=ADVANCED_FACE('',(#1253),#11740,.T.); #12280=ADVANCED_FACE('',(#1254),#11741,.F.); #12281=ADVANCED_FACE('',(#1255),#11742,.T.); #12282=ADVANCED_FACE('',(#1256),#147,.T.); #12283=ADVANCED_FACE('',(#1257),#148,.T.); #12284=ADVANCED_FACE('',(#1258),#149,.T.); #12285=ADVANCED_FACE('',(#1259),#150,.T.); #12286=ADVANCED_FACE('',(#1260),#11743,.T.); #12287=ADVANCED_FACE('',(#1261),#11744,.T.); #12288=ADVANCED_FACE('',(#1262),#151,.T.); #12289=ADVANCED_FACE('',(#1263),#152,.T.); #12290=ADVANCED_FACE('',(#1264),#153,.T.); #12291=ADVANCED_FACE('',(#1265),#154,.T.); #12292=ADVANCED_FACE('',(#1266),#155,.T.); #12293=ADVANCED_FACE('',(#1267),#11745,.T.); #12294=ADVANCED_FACE('',(#1268),#11746,.T.); #12295=ADVANCED_FACE('',(#1269),#156,.T.); #12296=ADVANCED_FACE('',(#1270),#157,.T.); #12297=ADVANCED_FACE('',(#1271),#158,.T.); #12298=ADVANCED_FACE('',(#1272),#11747,.F.); #12299=ADVANCED_FACE('',(#1273),#11748,.T.); #12300=ADVANCED_FACE('',(#1274),#11749,.F.); #12301=ADVANCED_FACE('',(#1275),#159,.F.); #12302=ADVANCED_FACE('',(#1276),#160,.F.); #12303=ADVANCED_FACE('',(#1277),#161,.F.); #12304=ADVANCED_FACE('',(#1278),#162,.F.); #12305=ADVANCED_FACE('',(#1279),#163,.T.); #12306=ADVANCED_FACE('',(#1280),#164,.T.); #12307=ADVANCED_FACE('',(#1281),#165,.T.); #12308=ADVANCED_FACE('',(#1282),#11750,.T.); #12309=ADVANCED_FACE('',(#1283),#11751,.T.); #12310=ADVANCED_FACE('',(#1284),#166,.T.); #12311=ADVANCED_FACE('',(#1285),#167,.T.); #12312=ADVANCED_FACE('',(#1286),#168,.T.); #12313=ADVANCED_FACE('',(#1287),#11752,.T.); #12314=ADVANCED_FACE('',(#1288),#11753,.T.); #12315=ADVANCED_FACE('',(#1289),#169,.T.); #12316=ADVANCED_FACE('',(#1290),#170,.T.); #12317=ADVANCED_FACE('',(#1291),#171,.T.); #12318=ADVANCED_FACE('',(#1292,#793),#11754,.F.); #12319=ADVANCED_FACE('',(#1293,#794),#11755,.T.); #12320=ADVANCED_FACE('',(#1294),#172,.T.); #12321=ADVANCED_FACE('',(#1295),#173,.T.); #12322=ADVANCED_FACE('',(#1296),#11756,.T.); #12323=ADVANCED_FACE('',(#1297),#11757,.T.); #12324=ADVANCED_FACE('',(#1298),#11758,.T.); #12325=ADVANCED_FACE('',(#1299),#11759,.T.); #12326=ADVANCED_FACE('',(#1300),#11760,.T.); #12327=ADVANCED_FACE('',(#1301),#174,.T.); #12328=ADVANCED_FACE('',(#1302),#175,.T.); #12329=ADVANCED_FACE('',(#1303),#11761,.T.); #12330=ADVANCED_FACE('',(#1304),#11762,.T.); #12331=ADVANCED_FACE('',(#1305),#11763,.F.); #12332=ADVANCED_FACE('',(#1306),#11764,.T.); #12333=ADVANCED_FACE('',(#1307),#11765,.T.); #12334=ADVANCED_FACE('',(#1308),#11766,.T.); #12335=ADVANCED_FACE('',(#1309),#11767,.T.); #12336=ADVANCED_FACE('',(#1310),#11768,.T.); #12337=ADVANCED_FACE('',(#1311),#11769,.F.); #12338=ADVANCED_FACE('',(#1312),#11770,.T.); #12339=ADVANCED_FACE('',(#1313),#11771,.T.); #12340=ADVANCED_FACE('',(#1314),#11772,.T.); #12341=ADVANCED_FACE('',(#1315),#11773,.T.); #12342=ADVANCED_FACE('',(#1316),#11774,.T.); #12343=ADVANCED_FACE('',(#1317),#11775,.T.); #12344=ADVANCED_FACE('',(#1318),#11776,.T.); #12345=ADVANCED_FACE('',(#1319),#11777,.T.); #12346=ADVANCED_FACE('',(#1320),#11778,.T.); #12347=ADVANCED_FACE('',(#1321),#11779,.T.); #12348=ADVANCED_FACE('',(#1322),#11780,.T.); #12349=ADVANCED_FACE('',(#1323),#11781,.T.); #12350=ADVANCED_FACE('',(#1324),#11782,.T.); #12351=ADVANCED_FACE('',(#1325),#11783,.T.); #12352=ADVANCED_FACE('',(#1326),#11784,.F.); #12353=ADVANCED_FACE('',(#1327),#11785,.T.); #12354=ADVANCED_FACE('',(#1328),#11786,.T.); #12355=ADVANCED_FACE('',(#1329),#11787,.T.); #12356=ADVANCED_FACE('',(#1330),#176,.T.); #12357=ADVANCED_FACE('',(#1331),#177,.T.); #12358=ADVANCED_FACE('',(#1332),#178,.T.); #12359=ADVANCED_FACE('',(#1333),#179,.T.); #12360=ADVANCED_FACE('',(#1334),#180,.T.); #12361=ADVANCED_FACE('',(#1335),#181,.T.); #12362=ADVANCED_FACE('',(#1336),#182,.T.); #12363=ADVANCED_FACE('',(#1337),#183,.T.); #12364=ADVANCED_FACE('',(#1338),#11788,.T.); #12365=ADVANCED_FACE('',(#1339),#11789,.T.); #12366=ADVANCED_FACE('',(#1340),#184,.T.); #12367=ADVANCED_FACE('',(#1341),#185,.T.); #12368=ADVANCED_FACE('',(#1342),#186,.T.); #12369=ADVANCED_FACE('',(#1343),#187,.T.); #12370=ADVANCED_FACE('',(#1344),#188,.T.); #12371=ADVANCED_FACE('',(#1345),#189,.T.); #12372=ADVANCED_FACE('',(#1346),#190,.T.); #12373=ADVANCED_FACE('',(#1347),#191,.T.); #12374=ADVANCED_FACE('',(#1348),#11790,.F.); #12375=ADVANCED_FACE('',(#1349),#11791,.T.); #12376=ADVANCED_FACE('',(#1350),#192,.F.); #12377=ADVANCED_FACE('',(#1351),#193,.F.); #12378=ADVANCED_FACE('',(#1352),#11792,.F.); #12379=ADVANCED_FACE('',(#1353),#11793,.F.); #12380=ADVANCED_FACE('',(#1354),#11794,.F.); #12381=ADVANCED_FACE('',(#1355),#194,.F.); #12382=ADVANCED_FACE('',(#1356),#195,.F.); #12383=ADVANCED_FACE('',(#1357),#11795,.T.); #12384=ADVANCED_FACE('',(#1358),#11796,.T.); #12385=ADVANCED_FACE('',(#1359),#11797,.T.); #12386=ADVANCED_FACE('',(#1360),#11798,.T.); #12387=ADVANCED_FACE('',(#1361),#11799,.T.); #12388=ADVANCED_FACE('',(#1362),#11800,.T.); #12389=ADVANCED_FACE('',(#1363),#196,.T.); #12390=ADVANCED_FACE('',(#1364),#197,.T.); #12391=ADVANCED_FACE('',(#1365),#198,.T.); #12392=ADVANCED_FACE('',(#1366),#11801,.T.); #12393=ADVANCED_FACE('',(#1367),#11802,.T.); #12394=ADVANCED_FACE('',(#1368,#795),#11803,.F.); #12395=ADVANCED_FACE('',(#1369,#796),#11804,.T.); #12396=ADVANCED_FACE('',(#1370),#11805,.T.); #12397=ADVANCED_FACE('',(#1371),#11806,.T.); #12398=ADVANCED_FACE('',(#1372),#11807,.T.); #12399=ADVANCED_FACE('',(#1373),#11808,.T.); #12400=ADVANCED_FACE('',(#1374),#11809,.T.); #12401=ADVANCED_FACE('',(#1375),#11810,.T.); #12402=ADVANCED_FACE('',(#1376),#11811,.T.); #12403=ADVANCED_FACE('',(#1377),#11812,.T.); #12404=ADVANCED_FACE('',(#1378),#11813,.T.); #12405=ADVANCED_FACE('',(#1379),#11814,.T.); #12406=ADVANCED_FACE('',(#1380),#11815,.T.); #12407=ADVANCED_FACE('',(#1381),#11816,.T.); #12408=ADVANCED_FACE('',(#1382),#11817,.F.); #12409=ADVANCED_FACE('',(#1383),#11818,.T.); #12410=ADVANCED_FACE('',(#1384),#199,.T.); #12411=ADVANCED_FACE('',(#1385),#11819,.T.); #12412=ADVANCED_FACE('',(#1386),#11820,.T.); #12413=ADVANCED_FACE('',(#1387),#200,.T.); #12414=ADVANCED_FACE('',(#1388),#201,.T.); #12415=ADVANCED_FACE('',(#1389),#202,.T.); #12416=ADVANCED_FACE('',(#1390),#203,.T.); #12417=ADVANCED_FACE('',(#1391),#11821,.T.); #12418=ADVANCED_FACE('',(#1392),#204,.T.); #12419=ADVANCED_FACE('',(#1393),#205,.T.); #12420=ADVANCED_FACE('',(#1394),#206,.T.); #12421=ADVANCED_FACE('',(#1395),#207,.T.); #12422=ADVANCED_FACE('',(#1396),#208,.T.); #12423=ADVANCED_FACE('',(#1397),#11822,.T.); #12424=ADVANCED_FACE('',(#1398),#11823,.T.); #12425=ADVANCED_FACE('',(#1399),#209,.T.); #12426=ADVANCED_FACE('',(#1400),#210,.T.); #12427=ADVANCED_FACE('',(#1401),#211,.T.); #12428=ADVANCED_FACE('',(#1402),#212,.T.); #12429=ADVANCED_FACE('',(#1403),#213,.T.); #12430=ADVANCED_FACE('',(#1404),#11824,.T.); #12431=ADVANCED_FACE('',(#1405),#11825,.T.); #12432=ADVANCED_FACE('',(#1406),#11826,.T.); #12433=ADVANCED_FACE('',(#1407),#214,.T.); #12434=ADVANCED_FACE('',(#1408),#215,.T.); #12435=ADVANCED_FACE('',(#1409),#216,.T.); #12436=ADVANCED_FACE('',(#1410),#217,.T.); #12437=ADVANCED_FACE('',(#1411),#11827,.F.); #12438=ADVANCED_FACE('',(#1412),#11828,.T.); #12439=ADVANCED_FACE('',(#1413),#218,.F.); #12440=ADVANCED_FACE('',(#1414),#219,.F.); #12441=ADVANCED_FACE('',(#1415),#220,.F.); #12442=ADVANCED_FACE('',(#1416),#221,.F.); #12443=ADVANCED_FACE('',(#1417),#222,.F.); #12444=ADVANCED_FACE('',(#1418),#223,.F.); #12445=ADVANCED_FACE('',(#1419),#224,.F.); #12446=ADVANCED_FACE('',(#1420),#225,.F.); #12447=ADVANCED_FACE('',(#1421),#226,.T.); #12448=ADVANCED_FACE('',(#1422),#227,.T.); #12449=ADVANCED_FACE('',(#1423),#228,.T.); #12450=ADVANCED_FACE('',(#1424),#229,.T.); #12451=ADVANCED_FACE('',(#1425,#797),#11829,.F.); #12452=ADVANCED_FACE('',(#1426,#798),#11830,.T.); #12453=ADVANCED_FACE('',(#1427),#230,.F.); #12454=ADVANCED_FACE('',(#1428),#231,.F.); #12455=ADVANCED_FACE('',(#1429),#232,.F.); #12456=ADVANCED_FACE('',(#1430),#233,.F.); #12457=ADVANCED_FACE('',(#1431),#234,.F.); #12458=ADVANCED_FACE('',(#1432),#235,.F.); #12459=ADVANCED_FACE('',(#1433),#236,.F.); #12460=ADVANCED_FACE('',(#1434),#237,.F.); #12461=ADVANCED_FACE('',(#1435),#238,.T.); #12462=ADVANCED_FACE('',(#1436),#239,.T.); #12463=ADVANCED_FACE('',(#1437),#240,.T.); #12464=ADVANCED_FACE('',(#1438),#241,.T.); #12465=ADVANCED_FACE('',(#1439,#799),#11831,.F.); #12466=ADVANCED_FACE('',(#1440,#800),#11832,.T.); #12467=ADVANCED_FACE('',(#1441),#11833,.T.); #12468=ADVANCED_FACE('',(#1442),#11834,.T.); #12469=ADVANCED_FACE('',(#1443),#11835,.T.); #12470=ADVANCED_FACE('',(#1444),#11836,.T.); #12471=ADVANCED_FACE('',(#1445),#11837,.T.); #12472=ADVANCED_FACE('',(#1446),#11838,.T.); #12473=ADVANCED_FACE('',(#1447),#11839,.T.); #12474=ADVANCED_FACE('',(#1448),#11840,.T.); #12475=ADVANCED_FACE('',(#1449),#11841,.T.); #12476=ADVANCED_FACE('',(#1450),#11842,.T.); #12477=ADVANCED_FACE('',(#1451),#11843,.F.); #12478=ADVANCED_FACE('',(#1452),#11844,.T.); #12479=ADVANCED_FACE('',(#1453),#782,.T.); #12480=ADVANCED_FACE('',(#1454),#11845,.F.); #12481=ADVANCED_FACE('',(#1455),#11846,.T.); #12482=ADVANCED_FACE('',(#1456),#783,.F.); #12483=ADVANCED_FACE('',(#1457),#11847,.T.); #12484=ADVANCED_FACE('',(#1458),#11848,.T.); #12485=ADVANCED_FACE('',(#1459),#11849,.T.); #12486=ADVANCED_FACE('',(#1460),#11850,.T.); #12487=ADVANCED_FACE('',(#1461),#11851,.T.); #12488=ADVANCED_FACE('',(#1462),#11852,.T.); #12489=ADVANCED_FACE('',(#1463,#801),#784,.T.); #12490=ADVANCED_FACE('',(#1464),#11853,.F.); #12491=ADVANCED_FACE('',(#1465),#11854,.T.); #12492=ADVANCED_FACE('',(#1466),#11855,.T.); #12493=ADVANCED_FACE('',(#1467),#11856,.T.); #12494=ADVANCED_FACE('',(#1468),#11857,.T.); #12495=ADVANCED_FACE('',(#1469),#11858,.T.); #12496=ADVANCED_FACE('',(#1470),#11859,.T.); #12497=ADVANCED_FACE('',(#1471),#11860,.F.); #12498=ADVANCED_FACE('',(#1472),#785,.F.); #12499=ADVANCED_FACE('',(#1473),#11861,.T.); #12500=ADVANCED_FACE('',(#1474),#786,.F.); #12501=ADVANCED_FACE('',(#1475),#11862,.T.); #12502=ADVANCED_FACE('',(#1476),#787,.T.); #12503=ADVANCED_FACE('',(#1477),#11863,.T.); #12504=ADVANCED_FACE('',(#1478),#11864,.T.); #12505=ADVANCED_FACE('',(#1479),#11865,.T.); #12506=ADVANCED_FACE('',(#1480),#11866,.T.); #12507=ADVANCED_FACE('',(#1481),#11867,.T.); #12508=ADVANCED_FACE('',(#1482),#11868,.F.); #12509=ADVANCED_FACE('',(#1483),#11869,.T.); #12510=ADVANCED_FACE('',(#1484),#11870,.T.); #12511=ADVANCED_FACE('',(#1485),#11871,.T.); #12512=ADVANCED_FACE('',(#1486),#11872,.T.); #12513=ADVANCED_FACE('',(#1487),#11873,.T.); #12514=ADVANCED_FACE('',(#1488),#11874,.T.); #12515=ADVANCED_FACE('',(#1489),#11875,.T.); #12516=ADVANCED_FACE('',(#1490),#11876,.F.); #12517=ADVANCED_FACE('',(#1491),#11877,.T.); #12518=ADVANCED_FACE('',(#1492),#11878,.T.); #12519=ADVANCED_FACE('',(#1493),#11879,.T.); #12520=ADVANCED_FACE('',(#1494),#11880,.T.); #12521=ADVANCED_FACE('',(#1495),#11881,.T.); #12522=ADVANCED_FACE('',(#1496),#11882,.T.); #12523=ADVANCED_FACE('',(#1497),#11883,.T.); #12524=ADVANCED_FACE('',(#1498),#11884,.T.); #12525=ADVANCED_FACE('',(#1499),#11885,.F.); #12526=ADVANCED_FACE('',(#1500),#11886,.T.); #12527=ADVANCED_FACE('',(#1501),#11887,.F.); #12528=ADVANCED_FACE('',(#1502),#11888,.F.); #12529=ADVANCED_FACE('',(#1503),#11889,.F.); #12530=ADVANCED_FACE('',(#1504),#11890,.T.); #12531=ADVANCED_FACE('',(#1505),#11891,.T.); #12532=ADVANCED_FACE('',(#1506),#11892,.T.); #12533=ADVANCED_FACE('',(#1507),#11893,.T.); #12534=ADVANCED_FACE('',(#1508),#11894,.T.); #12535=ADVANCED_FACE('',(#1509),#11895,.T.); #12536=ADVANCED_FACE('',(#1510),#11896,.T.); #12537=ADVANCED_FACE('',(#1511),#11897,.T.); #12538=ADVANCED_FACE('',(#1512,#802),#11898,.F.); #12539=ADVANCED_FACE('',(#1513,#803),#11899,.T.); #12540=ADVANCED_FACE('',(#1514),#11900,.T.); #12541=ADVANCED_FACE('',(#1515),#11901,.T.); #12542=ADVANCED_FACE('',(#1516),#11902,.T.); #12543=ADVANCED_FACE('',(#1517),#11903,.T.); #12544=ADVANCED_FACE('',(#1518),#11904,.T.); #12545=ADVANCED_FACE('',(#1519),#11905,.T.); #12546=ADVANCED_FACE('',(#1520),#11906,.F.); #12547=ADVANCED_FACE('',(#1521),#11907,.T.); #12548=ADVANCED_FACE('',(#1522),#11908,.T.); #12549=ADVANCED_FACE('',(#1523),#11909,.T.); #12550=ADVANCED_FACE('',(#1524),#11910,.T.); #12551=ADVANCED_FACE('',(#1525),#11911,.T.); #12552=ADVANCED_FACE('',(#1526),#11912,.T.); #12553=ADVANCED_FACE('',(#1527),#11913,.T.); #12554=ADVANCED_FACE('',(#1528),#11914,.T.); #12555=ADVANCED_FACE('',(#1529),#11915,.T.); #12556=ADVANCED_FACE('',(#1530),#11916,.F.); #12557=ADVANCED_FACE('',(#1531),#11917,.T.); #12558=ADVANCED_FACE('',(#1532),#11918,.T.); #12559=ADVANCED_FACE('',(#1533),#11919,.T.); #12560=ADVANCED_FACE('',(#1534),#11920,.T.); #12561=ADVANCED_FACE('',(#1535),#11921,.T.); #12562=ADVANCED_FACE('',(#1536),#11922,.T.); #12563=ADVANCED_FACE('',(#1537),#11923,.T.); #12564=ADVANCED_FACE('',(#1538),#11924,.T.); #12565=ADVANCED_FACE('',(#1539),#11925,.T.); #12566=ADVANCED_FACE('',(#1540),#11926,.F.); #12567=ADVANCED_FACE('',(#1541),#11927,.T.); #12568=ADVANCED_FACE('',(#1542),#11928,.T.); #12569=ADVANCED_FACE('',(#1543),#11929,.T.); #12570=ADVANCED_FACE('',(#1544),#11930,.T.); #12571=ADVANCED_FACE('',(#1545),#11931,.T.); #12572=ADVANCED_FACE('',(#1546),#11932,.F.); #12573=ADVANCED_FACE('',(#1547),#11933,.T.); #12574=ADVANCED_FACE('',(#1548),#242,.T.); #12575=ADVANCED_FACE('',(#1549),#243,.T.); #12576=ADVANCED_FACE('',(#1550),#244,.T.); #12577=ADVANCED_FACE('',(#1551),#245,.T.); #12578=ADVANCED_FACE('',(#1552),#11934,.T.); #12579=ADVANCED_FACE('',(#1553),#11935,.T.); #12580=ADVANCED_FACE('',(#1554),#246,.T.); #12581=ADVANCED_FACE('',(#1555),#247,.T.); #12582=ADVANCED_FACE('',(#1556),#248,.T.); #12583=ADVANCED_FACE('',(#1557),#249,.T.); #12584=ADVANCED_FACE('',(#1558),#250,.T.); #12585=ADVANCED_FACE('',(#1559),#11936,.T.); #12586=ADVANCED_FACE('',(#1560),#11937,.T.); #12587=ADVANCED_FACE('',(#1561),#251,.T.); #12588=ADVANCED_FACE('',(#1562),#252,.T.); #12589=ADVANCED_FACE('',(#1563),#253,.T.); #12590=ADVANCED_FACE('',(#1564),#11938,.F.); #12591=ADVANCED_FACE('',(#1565),#11939,.T.); #12592=ADVANCED_FACE('',(#1566),#254,.F.); #12593=ADVANCED_FACE('',(#1567),#255,.F.); #12594=ADVANCED_FACE('',(#1568),#256,.F.); #12595=ADVANCED_FACE('',(#1569),#257,.F.); #12596=ADVANCED_FACE('',(#1570),#258,.T.); #12597=ADVANCED_FACE('',(#1571),#259,.T.); #12598=ADVANCED_FACE('',(#1572),#260,.T.); #12599=ADVANCED_FACE('',(#1573),#261,.T.); #12600=ADVANCED_FACE('',(#1574,#804),#11940,.F.); #12601=ADVANCED_FACE('',(#1575,#805),#11941,.T.); #12602=ADVANCED_FACE('',(#1576),#11942,.F.); #12603=ADVANCED_FACE('',(#1577),#262,.F.); #12604=ADVANCED_FACE('',(#1578),#263,.F.); #12605=ADVANCED_FACE('',(#1579),#264,.F.); #12606=ADVANCED_FACE('',(#1580),#265,.F.); #12607=ADVANCED_FACE('',(#1581),#266,.T.); #12608=ADVANCED_FACE('',(#1582),#267,.T.); #12609=ADVANCED_FACE('',(#1583),#268,.T.); #12610=ADVANCED_FACE('',(#1584),#11943,.T.); #12611=ADVANCED_FACE('',(#1585),#11944,.T.); #12612=ADVANCED_FACE('',(#1586),#269,.T.); #12613=ADVANCED_FACE('',(#1587),#270,.T.); #12614=ADVANCED_FACE('',(#1588),#271,.T.); #12615=ADVANCED_FACE('',(#1589),#11945,.T.); #12616=ADVANCED_FACE('',(#1590),#11946,.T.); #12617=ADVANCED_FACE('',(#1591),#272,.T.); #12618=ADVANCED_FACE('',(#1592),#273,.T.); #12619=ADVANCED_FACE('',(#1593),#274,.T.); #12620=ADVANCED_FACE('',(#1594,#806),#11947,.F.); #12621=ADVANCED_FACE('',(#1595,#807),#11948,.T.); #12622=ADVANCED_FACE('',(#1596),#11949,.T.); #12623=ADVANCED_FACE('',(#1597),#11950,.T.); #12624=ADVANCED_FACE('',(#1598),#11951,.T.); #12625=ADVANCED_FACE('',(#1599),#11952,.T.); #12626=ADVANCED_FACE('',(#1600),#11953,.F.); #12627=ADVANCED_FACE('',(#1601),#11954,.T.); #12628=ADVANCED_FACE('',(#1602),#11955,.T.); #12629=ADVANCED_FACE('',(#1603),#11956,.T.); #12630=ADVANCED_FACE('',(#1604),#11957,.T.); #12631=ADVANCED_FACE('',(#1605),#11958,.T.); #12632=ADVANCED_FACE('',(#1606),#11959,.T.); #12633=ADVANCED_FACE('',(#1607),#11960,.T.); #12634=ADVANCED_FACE('',(#1608),#11961,.T.); #12635=ADVANCED_FACE('',(#1609),#11962,.T.); #12636=ADVANCED_FACE('',(#1610),#11963,.T.); #12637=ADVANCED_FACE('',(#1611),#11964,.T.); #12638=ADVANCED_FACE('',(#1612),#11965,.T.); #12639=ADVANCED_FACE('',(#1613),#275,.T.); #12640=ADVANCED_FACE('',(#1614),#276,.T.); #12641=ADVANCED_FACE('',(#1615),#277,.T.); #12642=ADVANCED_FACE('',(#1616),#11966,.T.); #12643=ADVANCED_FACE('',(#1617),#11967,.T.); #12644=ADVANCED_FACE('',(#1618),#278,.T.); #12645=ADVANCED_FACE('',(#1619),#279,.T.); #12646=ADVANCED_FACE('',(#1620),#11968,.F.); #12647=ADVANCED_FACE('',(#1621),#11969,.T.); #12648=ADVANCED_FACE('',(#1622),#280,.F.); #12649=ADVANCED_FACE('',(#1623),#281,.F.); #12650=ADVANCED_FACE('',(#1624),#282,.F.); #12651=ADVANCED_FACE('',(#1625),#283,.F.); #12652=ADVANCED_FACE('',(#1626),#284,.T.); #12653=ADVANCED_FACE('',(#1627),#285,.T.); #12654=ADVANCED_FACE('',(#1628),#286,.T.); #12655=ADVANCED_FACE('',(#1629),#287,.T.); #12656=ADVANCED_FACE('',(#1630,#808),#11970,.F.); #12657=ADVANCED_FACE('',(#1631,#809),#11971,.T.); #12658=ADVANCED_FACE('',(#1632),#11972,.T.); #12659=ADVANCED_FACE('',(#1633),#288,.T.); #12660=ADVANCED_FACE('',(#1634),#289,.T.); #12661=ADVANCED_FACE('',(#1635),#290,.T.); #12662=ADVANCED_FACE('',(#1636),#11973,.T.); #12663=ADVANCED_FACE('',(#1637),#11974,.T.); #12664=ADVANCED_FACE('',(#1638),#11975,.T.); #12665=ADVANCED_FACE('',(#1639),#11976,.T.); #12666=ADVANCED_FACE('',(#1640),#11977,.T.); #12667=ADVANCED_FACE('',(#1641),#291,.T.); #12668=ADVANCED_FACE('',(#1642),#292,.T.); #12669=ADVANCED_FACE('',(#1643),#11978,.T.); #12670=ADVANCED_FACE('',(#1644),#11979,.T.); #12671=ADVANCED_FACE('',(#1645),#11980,.F.); #12672=ADVANCED_FACE('',(#1646),#11981,.T.); #12673=ADVANCED_FACE('',(#1647),#11982,.T.); #12674=ADVANCED_FACE('',(#1648),#11983,.T.); #12675=ADVANCED_FACE('',(#1649),#11984,.T.); #12676=ADVANCED_FACE('',(#1650),#11985,.T.); #12677=ADVANCED_FACE('',(#1651),#11986,.F.); #12678=ADVANCED_FACE('',(#1652),#11987,.T.); #12679=ADVANCED_FACE('',(#1653),#11988,.T.); #12680=ADVANCED_FACE('',(#1654),#11989,.T.); #12681=ADVANCED_FACE('',(#1655),#293,.T.); #12682=ADVANCED_FACE('',(#1656),#294,.T.); #12683=ADVANCED_FACE('',(#1657),#295,.T.); #12684=ADVANCED_FACE('',(#1658),#296,.T.); #12685=ADVANCED_FACE('',(#1659),#297,.T.); #12686=ADVANCED_FACE('',(#1660),#298,.T.); #12687=ADVANCED_FACE('',(#1661),#299,.T.); #12688=ADVANCED_FACE('',(#1662),#300,.T.); #12689=ADVANCED_FACE('',(#1663),#301,.T.); #12690=ADVANCED_FACE('',(#1664),#11990,.T.); #12691=ADVANCED_FACE('',(#1665),#11991,.T.); #12692=ADVANCED_FACE('',(#1666),#302,.T.); #12693=ADVANCED_FACE('',(#1667),#303,.T.); #12694=ADVANCED_FACE('',(#1668),#304,.T.); #12695=ADVANCED_FACE('',(#1669),#305,.T.); #12696=ADVANCED_FACE('',(#1670),#306,.T.); #12697=ADVANCED_FACE('',(#1671),#307,.T.); #12698=ADVANCED_FACE('',(#1672),#308,.T.); #12699=ADVANCED_FACE('',(#1673),#309,.T.); #12700=ADVANCED_FACE('',(#1674),#11992,.F.); #12701=ADVANCED_FACE('',(#1675),#11993,.T.); #12702=CLOSED_SHELL('',(#11994,#11995,#11996,#11997,#11998,#11999,#12000, #12001,#12002,#12003,#12004,#12005,#12006,#12007,#12008,#12009,#12010,#12011, #12012,#12013,#12014,#12015,#12016,#12017,#12018,#12019,#12020,#12021,#12022, #12023,#12024,#12025,#12026,#12027,#12028,#12029,#12030,#12031,#12032,#12033, #12034,#12035,#12036,#12037,#12038,#12039,#12040,#12041,#12042,#12043,#12044, #12045,#12046,#12047,#12048,#12049,#12050,#12051,#12052,#12053,#12054,#12055, #12056)); #12703=CLOSED_SHELL('',(#12057,#12058,#12059,#12060,#12061,#12062,#12063, #12064,#12065,#12066,#12067,#12068,#12069,#12070,#12071,#12072,#12073,#12074, #12075,#12076,#12077,#12078)); #12704=CLOSED_SHELL('',(#12079,#12080,#12081,#12082,#12083,#12084,#12085, #12086,#12087,#12088,#12089,#12090,#12091,#12092,#12093,#12094,#12095,#12096, #12097,#12098,#12099,#12100,#12101,#12102,#12103,#12104,#12105,#12106,#12107, #12108,#12109,#12110,#12111,#12112)); #12705=CLOSED_SHELL('',(#12113,#12114,#12115,#12116,#12117,#12118,#12119, #12120,#12121,#12122,#12123,#12124,#12125,#12126,#12127,#12128,#12129,#12130, #12131,#12132,#12133,#12134)); #12706=CLOSED_SHELL('',(#12135,#12136,#12137,#12138,#12139,#12140,#12141, #12142,#12143,#12144,#12145,#12146,#12147,#12148,#12149,#12150,#12151,#12152, #12153,#12154,#12155,#12156)); #12707=CLOSED_SHELL('',(#12157,#12158,#12159,#12160,#12161,#12162,#12163, #12164,#12165,#12166,#12167,#12168,#12169,#12170,#12171,#12172,#12173,#12174, #12175,#12176,#12177,#12178)); #12708=CLOSED_SHELL('',(#12179,#12180,#12181,#12182,#12183,#12184,#12185, #12186,#12187,#12188,#12189,#12190,#12191,#12192,#12193,#12194,#12195,#12196, #12197,#12198,#12199,#12200)); #12709=CLOSED_SHELL('',(#12201,#12202,#12203,#12204,#12205,#12206,#12207, #12208,#12209,#12210,#12211,#12212,#12213,#12214,#12215,#12216,#12217,#12218, #12219,#12220,#12221,#12222)); #12710=CLOSED_SHELL('',(#12223,#12224,#12225,#12226,#12227,#12228,#12229, #12230,#12231,#12232,#12233,#12234,#12235,#12236,#12237,#12238,#12239,#12240, #12241,#12242,#12243,#12244)); #12711=CLOSED_SHELL('',(#12245,#12246,#12247,#12248,#12249,#12250,#12251, #12252,#12253,#12254,#12255,#12256,#12257,#12258,#12259,#12260,#12261,#12262)); #12712=CLOSED_SHELL('',(#12263,#12264,#12265,#12266,#12267,#12268)); #12713=CLOSED_SHELL('',(#12269,#12270,#12271,#12272,#12273,#12274,#12275, #12276,#12277,#12278,#12279,#12280,#12281)); #12714=CLOSED_SHELL('',(#12282,#12283,#12284,#12285,#12286,#12287,#12288, #12289,#12290,#12291,#12292,#12293,#12294,#12295,#12296,#12297,#12298,#12299)); #12715=CLOSED_SHELL('',(#12300,#12301,#12302,#12303,#12304,#12305,#12306, #12307,#12308,#12309,#12310,#12311,#12312,#12313,#12314,#12315,#12316,#12317, #12318,#12319)); #12716=CLOSED_SHELL('',(#12320,#12321,#12322,#12323,#12324,#12325,#12326, #12327,#12328,#12329,#12330,#12331,#12332)); #12717=CLOSED_SHELL('',(#12333,#12334,#12335,#12336,#12337,#12338)); #12718=CLOSED_SHELL('',(#12339,#12340,#12341,#12342,#12343,#12344,#12345, #12346,#12347,#12348,#12349,#12350,#12351,#12352,#12353)); #12719=CLOSED_SHELL('',(#12354,#12355,#12356,#12357,#12358,#12359,#12360, #12361,#12362,#12363,#12364,#12365,#12366,#12367,#12368,#12369,#12370,#12371, #12372,#12373,#12374,#12375)); #12720=CLOSED_SHELL('',(#12376,#12377,#12378,#12379,#12380,#12381,#12382, #12383,#12384,#12385,#12386,#12387,#12388,#12389,#12390,#12391,#12392,#12393, #12394,#12395)); #12721=CLOSED_SHELL('',(#12396,#12397,#12398,#12399,#12400,#12401,#12402, #12403,#12404,#12405,#12406,#12407,#12408,#12409)); #12722=CLOSED_SHELL('',(#12410,#12411,#12412,#12413,#12414,#12415,#12416, #12417,#12418,#12419,#12420,#12421,#12422,#12423,#12424,#12425,#12426,#12427, #12428,#12429,#12430,#12431,#12432,#12433,#12434,#12435,#12436,#12437,#12438)); #12723=CLOSED_SHELL('',(#12439,#12440,#12441,#12442,#12443,#12444,#12445, #12446,#12447,#12448,#12449,#12450,#12451,#12452)); #12724=CLOSED_SHELL('',(#12453,#12454,#12455,#12456,#12457,#12458,#12459, #12460,#12461,#12462,#12463,#12464,#12465,#12466)); #12725=CLOSED_SHELL('',(#12467,#12468,#12469,#12470,#12471,#12472,#12473, #12474,#12475,#12476,#12477,#12478)); #12726=CLOSED_SHELL('',(#12479,#12480,#12481,#12482,#12483,#12484,#12485, #12486,#12487,#12488)); #12727=CLOSED_SHELL('',(#12489,#12490,#12491)); #12728=CLOSED_SHELL('',(#12492,#12493,#12494,#12495,#12496,#12497)); #12729=CLOSED_SHELL('',(#12498,#12499,#12500,#12501,#12502,#12503,#12504, #12505,#12506,#12507,#12508)); #12730=CLOSED_SHELL('',(#12509,#12510,#12511,#12512,#12513,#12514,#12515, #12516,#12517)); #12731=CLOSED_SHELL('',(#12518,#12519,#12520,#12521,#12522,#12523,#12524, #12525,#12526)); #12732=CLOSED_SHELL('',(#12527,#12528,#12529,#12530,#12531,#12532,#12533, #12534,#12535,#12536,#12537,#12538,#12539)); #12733=CLOSED_SHELL('',(#12540,#12541,#12542,#12543,#12544,#12545,#12546, #12547)); #12734=CLOSED_SHELL('',(#12548,#12549,#12550,#12551,#12552,#12553,#12554, #12555,#12556,#12557)); #12735=CLOSED_SHELL('',(#12558,#12559,#12560,#12561,#12562,#12563,#12564, #12565,#12566,#12567)); #12736=CLOSED_SHELL('',(#12568,#12569,#12570,#12571,#12572,#12573)); #12737=CLOSED_SHELL('',(#12574,#12575,#12576,#12577,#12578,#12579,#12580, #12581,#12582,#12583,#12584,#12585,#12586,#12587,#12588,#12589,#12590,#12591)); #12738=CLOSED_SHELL('',(#12592,#12593,#12594,#12595,#12596,#12597,#12598, #12599,#12600,#12601)); #12739=CLOSED_SHELL('',(#12602,#12603,#12604,#12605,#12606,#12607,#12608, #12609,#12610,#12611,#12612,#12613,#12614,#12615,#12616,#12617,#12618,#12619, #12620,#12621)); #12740=CLOSED_SHELL('',(#12622,#12623,#12624,#12625,#12626,#12627)); #12741=CLOSED_SHELL('',(#12628,#12629,#12630,#12631,#12632,#12633,#12634, #12635,#12636,#12637,#12638,#12639,#12640,#12641,#12642,#12643,#12644,#12645, #12646,#12647)); #12742=CLOSED_SHELL('',(#12648,#12649,#12650,#12651,#12652,#12653,#12654, #12655,#12656,#12657)); #12743=CLOSED_SHELL('',(#12658,#12659,#12660,#12661,#12662,#12663,#12664, #12665,#12666,#12667,#12668,#12669,#12670,#12671,#12672)); #12744=CLOSED_SHELL('',(#12673,#12674,#12675,#12676,#12677,#12678)); #12745=CLOSED_SHELL('',(#12679,#12680,#12681,#12682,#12683,#12684,#12685, #12686,#12687,#12688,#12689,#12690,#12691,#12692,#12693,#12694,#12695,#12696, #12697,#12698,#12699,#12700,#12701)); #12746=AXIS2_PLACEMENT_3D('placement',#16079,#13437,#13438); #12747=AXIS2_PLACEMENT_3D('',#16080,#13439,#13440); #12748=AXIS2_PLACEMENT_3D('',#16089,#13445,#13446); #12749=AXIS2_PLACEMENT_3D('',#16091,#13447,#13448); #12750=AXIS2_PLACEMENT_3D('',#16093,#13449,#13450); #12751=AXIS2_PLACEMENT_3D('',#16094,#13451,#13452); #12752=AXIS2_PLACEMENT_3D('',#16099,#13454,#13455); #12753=AXIS2_PLACEMENT_3D('',#16107,#13459,#13460); #12754=AXIS2_PLACEMENT_3D('',#16111,#13462,#13463); #12755=AXIS2_PLACEMENT_3D('',#16114,#13465,#13466); #12756=AXIS2_PLACEMENT_3D('',#16115,#13467,#13468); #12757=AXIS2_PLACEMENT_3D('',#16117,#13469,#13470); #12758=AXIS2_PLACEMENT_3D('',#16118,#13471,#13472); #12759=AXIS2_PLACEMENT_3D('',#16132,#13474,#13475); #12760=AXIS2_PLACEMENT_3D('',#16136,#13477,#13478); #12761=AXIS2_PLACEMENT_3D('',#16137,#13479,#13480); #12762=AXIS2_PLACEMENT_3D('',#16138,#13481,#13482); #12763=AXIS2_PLACEMENT_3D('',#16150,#13483,#13484); #12764=AXIS2_PLACEMENT_3D('',#16152,#13485,#13486); #12765=AXIS2_PLACEMENT_3D('',#16156,#13488,#13489); #12766=AXIS2_PLACEMENT_3D('',#16158,#13491,#13492); #12767=AXIS2_PLACEMENT_3D('',#16161,#13493,#13494); #12768=AXIS2_PLACEMENT_3D('',#16163,#13495,#13496); #12769=AXIS2_PLACEMENT_3D('',#16164,#13497,#13498); #12770=AXIS2_PLACEMENT_3D('',#16165,#13499,#13500); #12771=AXIS2_PLACEMENT_3D('',#16168,#13501,#13502); #12772=AXIS2_PLACEMENT_3D('',#16170,#13503,#13504); #12773=AXIS2_PLACEMENT_3D('',#16171,#13505,#13506); #12774=AXIS2_PLACEMENT_3D('',#16172,#13507,#13508); #12775=AXIS2_PLACEMENT_3D('',#16219,#13511,#13512); #12776=AXIS2_PLACEMENT_3D('',#16237,#13513,#13514); #12777=AXIS2_PLACEMENT_3D('',#16271,#13515,#13516); #12778=AXIS2_PLACEMENT_3D('',#16278,#13517,#13518); #12779=AXIS2_PLACEMENT_3D('',#16279,#13519,#13520); #12780=AXIS2_PLACEMENT_3D('',#16282,#13521,#13522); #12781=AXIS2_PLACEMENT_3D('',#16283,#13523,#13524); #12782=AXIS2_PLACEMENT_3D('',#16284,#13525,#13526); #12783=AXIS2_PLACEMENT_3D('',#16318,#13527,#13528); #12784=AXIS2_PLACEMENT_3D('',#16325,#13529,#13530); #12785=AXIS2_PLACEMENT_3D('',#16326,#13531,#13532); #12786=AXIS2_PLACEMENT_3D('',#16329,#13533,#13534); #12787=AXIS2_PLACEMENT_3D('',#16330,#13535,#13536); #12788=AXIS2_PLACEMENT_3D('',#16331,#13537,#13538); #12789=AXIS2_PLACEMENT_3D('',#16332,#13539,#13540); #12790=AXIS2_PLACEMENT_3D('',#16334,#13541,#13542); #12791=AXIS2_PLACEMENT_3D('',#16385,#13543,#13544); #12792=AXIS2_PLACEMENT_3D('',#16392,#13545,#13546); #12793=AXIS2_PLACEMENT_3D('',#16393,#13547,#13548); #12794=AXIS2_PLACEMENT_3D('',#16396,#13551,#13552); #12795=AXIS2_PLACEMENT_3D('',#16398,#13553,#13554); #12796=AXIS2_PLACEMENT_3D('',#16400,#13555,#13556); #12797=AXIS2_PLACEMENT_3D('',#16401,#13557,#13558); #12798=AXIS2_PLACEMENT_3D('',#16402,#13559,#13560); #12799=AXIS2_PLACEMENT_3D('',#16465,#13562,#13563); #12800=AXIS2_PLACEMENT_3D('',#16472,#13564,#13565); #12801=AXIS2_PLACEMENT_3D('',#16473,#13566,#13567); #12802=AXIS2_PLACEMENT_3D('',#16475,#13568,#13569); #12803=AXIS2_PLACEMENT_3D('',#16477,#13570,#13571); #12804=AXIS2_PLACEMENT_3D('',#16478,#13572,#13573); #12805=AXIS2_PLACEMENT_3D('',#16507,#13574,#13575); #12806=AXIS2_PLACEMENT_3D('',#16509,#13577,#13578); #12807=AXIS2_PLACEMENT_3D('',#16511,#13579,#13580); #12808=AXIS2_PLACEMENT_3D('',#16513,#13581,#13582); #12809=AXIS2_PLACEMENT_3D('',#16514,#13583,#13584); #12810=AXIS2_PLACEMENT_3D('',#16515,#13585,#13586); #12811=AXIS2_PLACEMENT_3D('',#16516,#13587,#13588); #12812=AXIS2_PLACEMENT_3D('',#16545,#13589,#13590); #12813=AXIS2_PLACEMENT_3D('',#16547,#13591,#13592); #12814=AXIS2_PLACEMENT_3D('',#16549,#13593,#13594); #12815=AXIS2_PLACEMENT_3D('',#16550,#13595,#13596); #12816=AXIS2_PLACEMENT_3D('',#16551,#13597,#13598); #12817=AXIS2_PLACEMENT_3D('',#16552,#13599,#13600); #12818=AXIS2_PLACEMENT_3D('',#16553,#13601,#13602); #12819=AXIS2_PLACEMENT_3D('',#16554,#13603,#13604); #12820=AXIS2_PLACEMENT_3D('',#16556,#13606,#13607); #12821=AXIS2_PLACEMENT_3D('',#16557,#13608,#13609); #12822=AXIS2_PLACEMENT_3D('',#16558,#13610,#13611); #12823=AXIS2_PLACEMENT_3D('',#16559,#13612,#13613); #12824=AXIS2_PLACEMENT_3D('',#16561,#13615,#13616); #12825=AXIS2_PLACEMENT_3D('',#16591,#13618,#13619); #12826=AXIS2_PLACEMENT_3D('',#16592,#13620,#13621); #12827=AXIS2_PLACEMENT_3D('',#16593,#13622,#13623); #12828=AXIS2_PLACEMENT_3D('',#16596,#13626,#13627); #12829=AXIS2_PLACEMENT_3D('',#16597,#13628,#13629); #12830=AXIS2_PLACEMENT_3D('',#16598,#13630,#13631); #12831=AXIS2_PLACEMENT_3D('',#16599,#13632,#13633); #12832=AXIS2_PLACEMENT_3D('',#16600,#13634,#13635); #12833=AXIS2_PLACEMENT_3D('',#16601,#13636,#13637); #12834=AXIS2_PLACEMENT_3D('',#16623,#13638,#13639); #12835=AXIS2_PLACEMENT_3D('',#16625,#13640,#13641); #12836=AXIS2_PLACEMENT_3D('',#16642,#13642,#13643); #12837=AXIS2_PLACEMENT_3D('',#16644,#13644,#13645); #12838=AXIS2_PLACEMENT_3D('',#16682,#13646,#13647); #12839=AXIS2_PLACEMENT_3D('',#16683,#13648,#13649); #12840=AXIS2_PLACEMENT_3D('',#16705,#13650,#13651); #12841=AXIS2_PLACEMENT_3D('',#16707,#13652,#13653); #12842=AXIS2_PLACEMENT_3D('',#16724,#13654,#13655); #12843=AXIS2_PLACEMENT_3D('',#16726,#13657,#13658); #12844=AXIS2_PLACEMENT_3D('',#16734,#13661,#13662); #12845=AXIS2_PLACEMENT_3D('',#16738,#13665,#13666); #12846=AXIS2_PLACEMENT_3D('',#16739,#13667,#13668); #12847=AXIS2_PLACEMENT_3D('',#16742,#13671,#13672); #12848=AXIS2_PLACEMENT_3D('',#16744,#13673,#13674); #12849=AXIS2_PLACEMENT_3D('',#16747,#13677,#13678); #12850=AXIS2_PLACEMENT_3D('',#16749,#13680,#13681); #12851=AXIS2_PLACEMENT_3D('',#16751,#13683,#13684); #12852=AXIS2_PLACEMENT_3D('',#16753,#13686,#13687); #12853=AXIS2_PLACEMENT_3D('',#16754,#13688,#13689); #12854=AXIS2_PLACEMENT_3D('',#16755,#13690,#13691); #12855=AXIS2_PLACEMENT_3D('',#16756,#13692,#13693); #12856=AXIS2_PLACEMENT_3D('',#16757,#13694,#13695); #12857=AXIS2_PLACEMENT_3D('',#16758,#13696,#13697); #12858=AXIS2_PLACEMENT_3D('',#16759,#13698,#13699); #12859=AXIS2_PLACEMENT_3D('',#16760,#13700,#13701); #12860=AXIS2_PLACEMENT_3D('',#16761,#13702,#13703); #12861=AXIS2_PLACEMENT_3D('',#16762,#13704,#13705); #12862=AXIS2_PLACEMENT_3D('',#16763,#13706,#13707); #12863=AXIS2_PLACEMENT_3D('',#16764,#13708,#13709); #12864=AXIS2_PLACEMENT_3D('',#16765,#13710,#13711); #12865=AXIS2_PLACEMENT_3D('',#16766,#13712,#13713); #12866=AXIS2_PLACEMENT_3D('',#16768,#13715,#13716); #12867=AXIS2_PLACEMENT_3D('',#16769,#13717,#13718); #12868=AXIS2_PLACEMENT_3D('',#16770,#13719,#13720); #12869=AXIS2_PLACEMENT_3D('placement',#16771,#13721,#13722); #12870=AXIS2_PLACEMENT_3D('',#16772,#13723,#13724); #12871=AXIS2_PLACEMENT_3D('',#16781,#13729,#13730); #12872=AXIS2_PLACEMENT_3D('',#16784,#13731,#13732); #12873=AXIS2_PLACEMENT_3D('',#16788,#13734,#13735); #12874=AXIS2_PLACEMENT_3D('',#16790,#13737,#13738); #12875=AXIS2_PLACEMENT_3D('',#16793,#13741,#13742); #12876=AXIS2_PLACEMENT_3D('',#16796,#13743,#13744); #12877=AXIS2_PLACEMENT_3D('',#16800,#13746,#13747); #12878=AXIS2_PLACEMENT_3D('',#16802,#13749,#13750); #12879=AXIS2_PLACEMENT_3D('',#16821,#13761,#13762); #12880=AXIS2_PLACEMENT_3D('',#16829,#13766,#13767); #12881=AXIS2_PLACEMENT_3D('',#16833,#13770,#13771); #12882=AXIS2_PLACEMENT_3D('',#16837,#13773,#13774); #12883=AXIS2_PLACEMENT_3D('',#16839,#13776,#13777); #12884=AXIS2_PLACEMENT_3D('',#16843,#13780,#13781); #12885=AXIS2_PLACEMENT_3D('',#16846,#13782,#13783); #12886=AXIS2_PLACEMENT_3D('',#16850,#13785,#13786); #12887=AXIS2_PLACEMENT_3D('',#16852,#13788,#13789); #12888=AXIS2_PLACEMENT_3D('',#16855,#13792,#13793); #12889=AXIS2_PLACEMENT_3D('',#16859,#13796,#13797); #12890=AXIS2_PLACEMENT_3D('',#16865,#13801,#13802); #12891=AXIS2_PLACEMENT_3D('',#16869,#13805,#13806); #12892=AXIS2_PLACEMENT_3D('',#16875,#13810,#13811); #12893=AXIS2_PLACEMENT_3D('',#16879,#13814,#13815); #12894=AXIS2_PLACEMENT_3D('',#16881,#13817,#13818); #12895=AXIS2_PLACEMENT_3D('',#16883,#13820,#13821); #12896=AXIS2_PLACEMENT_3D('',#16885,#13823,#13824); #12897=AXIS2_PLACEMENT_3D('',#16887,#13826,#13827); #12898=AXIS2_PLACEMENT_3D('',#16891,#13830,#13831); #12899=AXIS2_PLACEMENT_3D('',#16893,#13833,#13834); #12900=AXIS2_PLACEMENT_3D('',#16894,#13835,#13836); #12901=AXIS2_PLACEMENT_3D('',#16897,#13837,#13838); #12902=AXIS2_PLACEMENT_3D('',#16905,#13842,#13843); #12903=AXIS2_PLACEMENT_3D('',#16919,#13851,#13852); #12904=AXIS2_PLACEMENT_3D('',#16925,#13856,#13857); #12905=AXIS2_PLACEMENT_3D('',#16931,#13861,#13862); #12906=AXIS2_PLACEMENT_3D('',#16935,#13865,#13866); #12907=AXIS2_PLACEMENT_3D('',#16939,#13869,#13870); #12908=AXIS2_PLACEMENT_3D('',#16943,#13873,#13874); #12909=AXIS2_PLACEMENT_3D('',#16947,#13877,#13878); #12910=AXIS2_PLACEMENT_3D('',#16949,#13880,#13881); #12911=AXIS2_PLACEMENT_3D('',#16954,#13883,#13884); #12912=AXIS2_PLACEMENT_3D('',#16957,#13886,#13887); #12913=AXIS2_PLACEMENT_3D('',#16958,#13888,#13889); #12914=AXIS2_PLACEMENT_3D('',#16968,#13895,#13896); #12915=AXIS2_PLACEMENT_3D('',#16969,#13897,#13898); #12916=AXIS2_PLACEMENT_3D('',#16970,#13899,#13900); #12917=AXIS2_PLACEMENT_3D('',#16972,#13901,#13902); #12918=AXIS2_PLACEMENT_3D('',#16974,#13904,#13905); #12919=AXIS2_PLACEMENT_3D('',#16982,#13910,#13911); #12920=AXIS2_PLACEMENT_3D('',#16983,#13912,#13913); #12921=AXIS2_PLACEMENT_3D('',#16984,#13914,#13915); #12922=AXIS2_PLACEMENT_3D('',#16985,#13916,#13917); #12923=AXIS2_PLACEMENT_3D('',#16994,#13922,#13923); #12924=AXIS2_PLACEMENT_3D('',#16995,#13924,#13925); #12925=AXIS2_PLACEMENT_3D('',#16996,#13926,#13927); #12926=AXIS2_PLACEMENT_3D('',#16997,#13928,#13929); #12927=AXIS2_PLACEMENT_3D('',#17006,#13934,#13935); #12928=AXIS2_PLACEMENT_3D('',#17008,#13936,#13937); #12929=AXIS2_PLACEMENT_3D('',#17011,#13939,#13940); #12930=AXIS2_PLACEMENT_3D('',#17012,#13941,#13942); #12931=AXIS2_PLACEMENT_3D('',#17021,#13947,#13948); #12932=AXIS2_PLACEMENT_3D('',#17022,#13949,#13950); #12933=AXIS2_PLACEMENT_3D('',#17023,#13951,#13952); #12934=AXIS2_PLACEMENT_3D('',#17024,#13953,#13954); #12935=AXIS2_PLACEMENT_3D('',#17030,#13958,#13959); #12936=AXIS2_PLACEMENT_3D('',#17032,#13960,#13961); #12937=AXIS2_PLACEMENT_3D('',#17035,#13963,#13964); #12938=AXIS2_PLACEMENT_3D('',#17036,#13965,#13966); #12939=AXIS2_PLACEMENT_3D('',#17042,#13970,#13971); #12940=AXIS2_PLACEMENT_3D('',#17043,#13972,#13973); #12941=AXIS2_PLACEMENT_3D('',#17044,#13974,#13975); #12942=AXIS2_PLACEMENT_3D('',#17045,#13976,#13977); #12943=AXIS2_PLACEMENT_3D('',#17048,#13978,#13979); #12944=AXIS2_PLACEMENT_3D('',#17052,#13981,#13982); #12945=AXIS2_PLACEMENT_3D('',#17054,#13984,#13985); #12946=AXIS2_PLACEMENT_3D('',#17058,#13987,#13988); #12947=AXIS2_PLACEMENT_3D('',#17059,#13989,#13990); #12948=AXIS2_PLACEMENT_3D('',#17060,#13991,#13992); #12949=AXIS2_PLACEMENT_3D('',#17061,#13993,#13994); #12950=AXIS2_PLACEMENT_3D('',#17062,#13995,#13996); #12951=AXIS2_PLACEMENT_3D('',#17063,#13997,#13998); #12952=AXIS2_PLACEMENT_3D('',#17069,#14002,#14003); #12953=AXIS2_PLACEMENT_3D('',#17071,#14004,#14005); #12954=AXIS2_PLACEMENT_3D('',#17073,#14006,#14007); #12955=AXIS2_PLACEMENT_3D('',#17075,#14009,#14010); #12956=AXIS2_PLACEMENT_3D('',#17077,#14011,#14012); #12957=AXIS2_PLACEMENT_3D('',#17079,#14014,#14015); #12958=AXIS2_PLACEMENT_3D('',#17083,#14018,#14019); #12959=AXIS2_PLACEMENT_3D('',#17084,#14020,#14021); #12960=AXIS2_PLACEMENT_3D('',#17085,#14022,#14023); #12961=AXIS2_PLACEMENT_3D('',#17087,#14025,#14026); #12962=AXIS2_PLACEMENT_3D('',#17088,#14027,#14028); #12963=AXIS2_PLACEMENT_3D('',#17097,#14033,#14034); #12964=AXIS2_PLACEMENT_3D('',#17106,#14039,#14040); #12965=AXIS2_PLACEMENT_3D('',#17115,#14045,#14046); #12966=AXIS2_PLACEMENT_3D('',#17134,#14057,#14058); #12967=AXIS2_PLACEMENT_3D('',#17136,#14059,#14060); #12968=AXIS2_PLACEMENT_3D('',#17139,#14062,#14063); #12969=AXIS2_PLACEMENT_3D('',#17140,#14064,#14065); #12970=AXIS2_PLACEMENT_3D('',#17143,#14068,#14069); #12971=AXIS2_PLACEMENT_3D('',#17145,#14070,#14071); #12972=AXIS2_PLACEMENT_3D('',#17147,#14072,#14073); #12973=AXIS2_PLACEMENT_3D('',#17149,#14075,#14076); #12974=AXIS2_PLACEMENT_3D('',#17157,#14080,#14081); #12975=AXIS2_PLACEMENT_3D('',#17159,#14083,#14084); #12976=AXIS2_PLACEMENT_3D('',#17163,#14086,#14087); #12977=AXIS2_PLACEMENT_3D('',#17165,#14089,#14090); #12978=AXIS2_PLACEMENT_3D('',#17169,#14093,#14094); #12979=AXIS2_PLACEMENT_3D('',#17172,#14095,#14096); #12980=AXIS2_PLACEMENT_3D('',#17176,#14098,#14099); #12981=AXIS2_PLACEMENT_3D('',#17178,#14101,#14102); #12982=AXIS2_PLACEMENT_3D('',#17181,#14105,#14106); #12983=AXIS2_PLACEMENT_3D('',#17183,#14108,#14109); #12984=AXIS2_PLACEMENT_3D('',#17189,#14113,#14114); #12985=AXIS2_PLACEMENT_3D('',#17195,#14118,#14119); #12986=AXIS2_PLACEMENT_3D('',#17197,#14121,#14122); #12987=AXIS2_PLACEMENT_3D('',#17199,#14124,#14125); #12988=AXIS2_PLACEMENT_3D('',#17201,#14127,#14128); #12989=AXIS2_PLACEMENT_3D('',#17203,#14130,#14131); #12990=AXIS2_PLACEMENT_3D('',#17207,#14134,#14135); #12991=AXIS2_PLACEMENT_3D('',#17209,#14137,#14138); #12992=AXIS2_PLACEMENT_3D('',#17210,#14139,#14140); #12993=AXIS2_PLACEMENT_3D('',#17213,#14141,#14142); #12994=AXIS2_PLACEMENT_3D('',#17221,#14146,#14147); #12995=AXIS2_PLACEMENT_3D('',#17227,#14151,#14152); #12996=AXIS2_PLACEMENT_3D('',#17233,#14156,#14157); #12997=AXIS2_PLACEMENT_3D('',#17237,#14160,#14161); #12998=AXIS2_PLACEMENT_3D('',#17259,#14173,#14174); #12999=AXIS2_PLACEMENT_3D('',#17261,#14175,#14176); #13000=AXIS2_PLACEMENT_3D('',#17269,#14180,#14181); #13001=AXIS2_PLACEMENT_3D('',#17273,#14184,#14185); #13002=AXIS2_PLACEMENT_3D('',#17279,#14189,#14190); #13003=AXIS2_PLACEMENT_3D('',#17285,#14194,#14195); #13004=AXIS2_PLACEMENT_3D('',#17289,#14198,#14199); #13005=AXIS2_PLACEMENT_3D('',#17291,#14201,#14202); #13006=AXIS2_PLACEMENT_3D('',#17295,#14205,#14206); #13007=AXIS2_PLACEMENT_3D('',#17297,#14208,#14209); #13008=AXIS2_PLACEMENT_3D('',#17299,#14210,#14211); #13009=AXIS2_PLACEMENT_3D('',#17303,#14213,#14214); #13010=AXIS2_PLACEMENT_3D('',#17309,#14218,#14219); #13011=AXIS2_PLACEMENT_3D('',#17312,#14222,#14223); #13012=AXIS2_PLACEMENT_3D('',#17313,#14224,#14225); #13013=AXIS2_PLACEMENT_3D('',#17317,#14228,#14229); #13014=AXIS2_PLACEMENT_3D('',#17318,#14230,#14231); #13015=AXIS2_PLACEMENT_3D('',#17319,#14232,#14233); #13016=AXIS2_PLACEMENT_3D('',#17321,#14234,#14235); #13017=AXIS2_PLACEMENT_3D('',#17323,#14237,#14238); #13018=AXIS2_PLACEMENT_3D('',#17326,#14241,#14242); #13019=AXIS2_PLACEMENT_3D('',#17327,#14243,#14244); #13020=AXIS2_PLACEMENT_3D('',#17330,#14247,#14248); #13021=AXIS2_PLACEMENT_3D('',#17331,#14249,#14250); #13022=AXIS2_PLACEMENT_3D('',#17332,#14251,#14252); #13023=AXIS2_PLACEMENT_3D('',#17341,#14257,#14258); #13024=AXIS2_PLACEMENT_3D('',#17344,#14259,#14260); #13025=AXIS2_PLACEMENT_3D('',#17348,#14262,#14263); #13026=AXIS2_PLACEMENT_3D('',#17350,#14265,#14266); #13027=AXIS2_PLACEMENT_3D('',#17353,#14269,#14270); #13028=AXIS2_PLACEMENT_3D('',#17356,#14271,#14272); #13029=AXIS2_PLACEMENT_3D('',#17360,#14274,#14275); #13030=AXIS2_PLACEMENT_3D('',#17362,#14277,#14278); #13031=AXIS2_PLACEMENT_3D('',#17381,#14289,#14290); #13032=AXIS2_PLACEMENT_3D('',#17389,#14294,#14295); #13033=AXIS2_PLACEMENT_3D('',#17393,#14298,#14299); #13034=AXIS2_PLACEMENT_3D('',#17397,#14301,#14302); #13035=AXIS2_PLACEMENT_3D('',#17399,#14304,#14305); #13036=AXIS2_PLACEMENT_3D('',#17403,#14308,#14309); #13037=AXIS2_PLACEMENT_3D('',#17406,#14310,#14311); #13038=AXIS2_PLACEMENT_3D('',#17410,#14313,#14314); #13039=AXIS2_PLACEMENT_3D('',#17412,#14316,#14317); #13040=AXIS2_PLACEMENT_3D('',#17415,#14320,#14321); #13041=AXIS2_PLACEMENT_3D('',#17419,#14324,#14325); #13042=AXIS2_PLACEMENT_3D('',#17425,#14329,#14330); #13043=AXIS2_PLACEMENT_3D('',#17429,#14333,#14334); #13044=AXIS2_PLACEMENT_3D('',#17435,#14338,#14339); #13045=AXIS2_PLACEMENT_3D('',#17439,#14342,#14343); #13046=AXIS2_PLACEMENT_3D('',#17441,#14345,#14346); #13047=AXIS2_PLACEMENT_3D('',#17443,#14348,#14349); #13048=AXIS2_PLACEMENT_3D('',#17445,#14351,#14352); #13049=AXIS2_PLACEMENT_3D('',#17447,#14354,#14355); #13050=AXIS2_PLACEMENT_3D('',#17451,#14358,#14359); #13051=AXIS2_PLACEMENT_3D('',#17453,#14361,#14362); #13052=AXIS2_PLACEMENT_3D('',#17454,#14363,#14364); #13053=AXIS2_PLACEMENT_3D('',#17457,#14365,#14366); #13054=AXIS2_PLACEMENT_3D('',#17465,#14370,#14371); #13055=AXIS2_PLACEMENT_3D('',#17471,#14375,#14376); #13056=AXIS2_PLACEMENT_3D('',#17477,#14380,#14381); #13057=AXIS2_PLACEMENT_3D('',#17481,#14384,#14385); #13058=AXIS2_PLACEMENT_3D('',#17503,#14397,#14398); #13059=AXIS2_PLACEMENT_3D('',#17505,#14399,#14400); #13060=AXIS2_PLACEMENT_3D('',#17513,#14404,#14405); #13061=AXIS2_PLACEMENT_3D('',#17517,#14408,#14409); #13062=AXIS2_PLACEMENT_3D('',#17523,#14413,#14414); #13063=AXIS2_PLACEMENT_3D('',#17529,#14418,#14419); #13064=AXIS2_PLACEMENT_3D('',#17531,#14420,#14421); #13065=AXIS2_PLACEMENT_3D('',#17535,#14423,#14424); #13066=AXIS2_PLACEMENT_3D('',#17541,#14428,#14429); #13067=AXIS2_PLACEMENT_3D('',#17544,#14432,#14433); #13068=AXIS2_PLACEMENT_3D('',#17545,#14434,#14435); #13069=AXIS2_PLACEMENT_3D('',#17549,#14438,#14439); #13070=AXIS2_PLACEMENT_3D('',#17550,#14440,#14441); #13071=AXIS2_PLACEMENT_3D('',#17551,#14442,#14443); #13072=AXIS2_PLACEMENT_3D('',#17553,#14444,#14445); #13073=AXIS2_PLACEMENT_3D('',#17555,#14447,#14448); #13074=AXIS2_PLACEMENT_3D('',#17557,#14450,#14451); #13075=AXIS2_PLACEMENT_3D('',#17560,#14454,#14455); #13076=AXIS2_PLACEMENT_3D('',#17562,#14457,#14458); #13077=AXIS2_PLACEMENT_3D('',#17569,#14463,#14464); #13078=AXIS2_PLACEMENT_3D('',#17571,#14466,#14467); #13079=AXIS2_PLACEMENT_3D('',#17573,#14469,#14470); #13080=AXIS2_PLACEMENT_3D('',#17574,#14471,#14472); #13081=AXIS2_PLACEMENT_3D('',#17575,#14473,#14474); #13082=AXIS2_PLACEMENT_3D('',#17576,#14475,#14476); #13083=AXIS2_PLACEMENT_3D('',#17585,#14481,#14482); #13084=AXIS2_PLACEMENT_3D('',#17588,#14483,#14484); #13085=AXIS2_PLACEMENT_3D('',#17592,#14486,#14487); #13086=AXIS2_PLACEMENT_3D('',#17594,#14489,#14490); #13087=AXIS2_PLACEMENT_3D('',#17597,#14493,#14494); #13088=AXIS2_PLACEMENT_3D('',#17600,#14495,#14496); #13089=AXIS2_PLACEMENT_3D('',#17604,#14498,#14499); #13090=AXIS2_PLACEMENT_3D('',#17606,#14501,#14502); #13091=AXIS2_PLACEMENT_3D('',#17625,#14513,#14514); #13092=AXIS2_PLACEMENT_3D('',#17633,#14518,#14519); #13093=AXIS2_PLACEMENT_3D('',#17637,#14522,#14523); #13094=AXIS2_PLACEMENT_3D('',#17641,#14525,#14526); #13095=AXIS2_PLACEMENT_3D('',#17643,#14528,#14529); #13096=AXIS2_PLACEMENT_3D('',#17647,#14532,#14533); #13097=AXIS2_PLACEMENT_3D('',#17650,#14534,#14535); #13098=AXIS2_PLACEMENT_3D('',#17654,#14537,#14538); #13099=AXIS2_PLACEMENT_3D('',#17656,#14540,#14541); #13100=AXIS2_PLACEMENT_3D('',#17659,#14544,#14545); #13101=AXIS2_PLACEMENT_3D('',#17663,#14548,#14549); #13102=AXIS2_PLACEMENT_3D('',#17669,#14553,#14554); #13103=AXIS2_PLACEMENT_3D('',#17673,#14557,#14558); #13104=AXIS2_PLACEMENT_3D('',#17679,#14562,#14563); #13105=AXIS2_PLACEMENT_3D('',#17683,#14566,#14567); #13106=AXIS2_PLACEMENT_3D('',#17685,#14569,#14570); #13107=AXIS2_PLACEMENT_3D('',#17687,#14572,#14573); #13108=AXIS2_PLACEMENT_3D('',#17689,#14575,#14576); #13109=AXIS2_PLACEMENT_3D('',#17691,#14578,#14579); #13110=AXIS2_PLACEMENT_3D('',#17695,#14582,#14583); #13111=AXIS2_PLACEMENT_3D('',#17697,#14585,#14586); #13112=AXIS2_PLACEMENT_3D('',#17698,#14587,#14588); #13113=AXIS2_PLACEMENT_3D('',#17701,#14589,#14590); #13114=AXIS2_PLACEMENT_3D('',#17709,#14594,#14595); #13115=AXIS2_PLACEMENT_3D('',#17715,#14599,#14600); #13116=AXIS2_PLACEMENT_3D('',#17721,#14604,#14605); #13117=AXIS2_PLACEMENT_3D('',#17725,#14608,#14609); #13118=AXIS2_PLACEMENT_3D('',#17747,#14621,#14622); #13119=AXIS2_PLACEMENT_3D('',#17749,#14623,#14624); #13120=AXIS2_PLACEMENT_3D('',#17757,#14628,#14629); #13121=AXIS2_PLACEMENT_3D('',#17761,#14632,#14633); #13122=AXIS2_PLACEMENT_3D('',#17767,#14637,#14638); #13123=AXIS2_PLACEMENT_3D('',#17773,#14642,#14643); #13124=AXIS2_PLACEMENT_3D('',#17777,#14646,#14647); #13125=AXIS2_PLACEMENT_3D('',#17779,#14649,#14650); #13126=AXIS2_PLACEMENT_3D('',#17783,#14653,#14654); #13127=AXIS2_PLACEMENT_3D('',#17785,#14656,#14657); #13128=AXIS2_PLACEMENT_3D('',#17787,#14658,#14659); #13129=AXIS2_PLACEMENT_3D('',#17791,#14661,#14662); #13130=AXIS2_PLACEMENT_3D('',#17797,#14666,#14667); #13131=AXIS2_PLACEMENT_3D('',#17800,#14670,#14671); #13132=AXIS2_PLACEMENT_3D('',#17801,#14672,#14673); #13133=AXIS2_PLACEMENT_3D('',#17805,#14676,#14677); #13134=AXIS2_PLACEMENT_3D('',#17806,#14678,#14679); #13135=AXIS2_PLACEMENT_3D('',#17807,#14680,#14681); #13136=AXIS2_PLACEMENT_3D('',#17809,#14682,#14683); #13137=AXIS2_PLACEMENT_3D('',#17811,#14685,#14686); #13138=AXIS2_PLACEMENT_3D('',#17814,#14689,#14690); #13139=AXIS2_PLACEMENT_3D('',#17815,#14691,#14692); #13140=AXIS2_PLACEMENT_3D('',#17818,#14695,#14696); #13141=AXIS2_PLACEMENT_3D('',#17819,#14697,#14698); #13142=AXIS2_PLACEMENT_3D('placement',#17820,#14699,#14700); #13143=AXIS2_PLACEMENT_3D('',#17900,#14706,#14707); #13144=AXIS2_PLACEMENT_3D('',#17906,#14711,#14712); #13145=AXIS2_PLACEMENT_3D('',#18007,#14721,#14722); #13146=AXIS2_PLACEMENT_3D('',#18013,#14726,#14727); #13147=AXIS2_PLACEMENT_3D('',#18073,#14733,#14734); #13148=AXIS2_PLACEMENT_3D('',#18074,#14735,#14736); #13149=AXIS2_PLACEMENT_3D('',#18075,#14737,#14738); #13150=AXIS2_PLACEMENT_3D('',#18084,#14743,#14744); #13151=AXIS2_PLACEMENT_3D('',#18090,#14748,#14749); #13152=AXIS2_PLACEMENT_3D('',#18096,#14753,#14754); #13153=AXIS2_PLACEMENT_3D('',#18099,#14757,#14758); #13154=AXIS2_PLACEMENT_3D('',#18100,#14759,#14760); #13155=AXIS2_PLACEMENT_3D('',#18142,#14764,#14765); #13156=AXIS2_PLACEMENT_3D('',#18148,#14769,#14770); #13157=AXIS2_PLACEMENT_3D('',#18154,#14774,#14775); #13158=AXIS2_PLACEMENT_3D('',#18160,#14779,#14780); #13159=AXIS2_PLACEMENT_3D('',#18166,#14784,#14785); #13160=AXIS2_PLACEMENT_3D('',#18210,#14791,#14792); #13161=AXIS2_PLACEMENT_3D('',#18216,#14796,#14797); #13162=AXIS2_PLACEMENT_3D('',#18219,#14800,#14801); #13163=AXIS2_PLACEMENT_3D('',#18220,#14802,#14803); #13164=AXIS2_PLACEMENT_3D('',#18300,#14809,#14810); #13165=AXIS2_PLACEMENT_3D('',#18306,#14814,#14815); #13166=AXIS2_PLACEMENT_3D('',#18407,#14824,#14825); #13167=AXIS2_PLACEMENT_3D('',#18413,#14829,#14830); #13168=AXIS2_PLACEMENT_3D('',#18473,#14836,#14837); #13169=AXIS2_PLACEMENT_3D('',#18474,#14838,#14839); #13170=AXIS2_PLACEMENT_3D('',#18475,#14840,#14841); #13171=AXIS2_PLACEMENT_3D('',#18617,#14853,#14854); #13172=AXIS2_PLACEMENT_3D('',#18623,#14858,#14859); #13173=AXIS2_PLACEMENT_3D('',#18686,#14866,#14867); #13174=AXIS2_PLACEMENT_3D('',#18692,#14871,#14872); #13175=AXIS2_PLACEMENT_3D('',#18752,#14878,#14879); #13176=AXIS2_PLACEMENT_3D('',#18753,#14880,#14881); #13177=AXIS2_PLACEMENT_3D('',#18795,#14885,#14886); #13178=AXIS2_PLACEMENT_3D('',#18801,#14890,#14891); #13179=AXIS2_PLACEMENT_3D('',#18807,#14895,#14896); #13180=AXIS2_PLACEMENT_3D('',#18813,#14900,#14901); #13181=AXIS2_PLACEMENT_3D('',#18819,#14905,#14906); #13182=AXIS2_PLACEMENT_3D('',#18863,#14912,#14913); #13183=AXIS2_PLACEMENT_3D('',#18869,#14917,#14918); #13184=AXIS2_PLACEMENT_3D('',#18872,#14921,#14922); #13185=AXIS2_PLACEMENT_3D('',#18873,#14923,#14924); #13186=AXIS2_PLACEMENT_3D('',#18874,#14925,#14926); #13187=AXIS2_PLACEMENT_3D('',#18883,#14931,#14932); #13188=AXIS2_PLACEMENT_3D('',#18889,#14936,#14937); #13189=AXIS2_PLACEMENT_3D('',#18895,#14941,#14942); #13190=AXIS2_PLACEMENT_3D('',#18898,#14945,#14946); #13191=AXIS2_PLACEMENT_3D('',#18899,#14947,#14948); #13192=AXIS2_PLACEMENT_3D('',#18900,#14949,#14950); #13193=AXIS2_PLACEMENT_3D('',#18909,#14955,#14956); #13194=AXIS2_PLACEMENT_3D('',#18915,#14960,#14961); #13195=AXIS2_PLACEMENT_3D('',#18921,#14965,#14966); #13196=AXIS2_PLACEMENT_3D('',#18927,#14970,#14971); #13197=AXIS2_PLACEMENT_3D('',#18933,#14975,#14976); #13198=AXIS2_PLACEMENT_3D('',#18939,#14980,#14981); #13199=AXIS2_PLACEMENT_3D('',#18945,#14985,#14986); #13200=AXIS2_PLACEMENT_3D('',#18951,#14990,#14991); #13201=AXIS2_PLACEMENT_3D('',#18957,#14995,#14996); #13202=AXIS2_PLACEMENT_3D('',#18963,#15000,#15001); #13203=AXIS2_PLACEMENT_3D('',#18969,#15005,#15006); #13204=AXIS2_PLACEMENT_3D('',#18975,#15010,#15011); #13205=AXIS2_PLACEMENT_3D('',#18978,#15014,#15015); #13206=AXIS2_PLACEMENT_3D('',#18979,#15016,#15017); #13207=AXIS2_PLACEMENT_3D('',#18980,#15018,#15019); #13208=AXIS2_PLACEMENT_3D('',#18989,#15024,#15025); #13209=AXIS2_PLACEMENT_3D('',#19147,#15037,#15038); #13210=AXIS2_PLACEMENT_3D('',#19153,#15042,#15043); #13211=AXIS2_PLACEMENT_3D('',#19308,#15054,#15055); #13212=AXIS2_PLACEMENT_3D('',#19309,#15056,#15057); #13213=AXIS2_PLACEMENT_3D('',#19351,#15061,#15062); #13214=AXIS2_PLACEMENT_3D('',#19357,#15066,#15067); #13215=AXIS2_PLACEMENT_3D('',#19363,#15071,#15072); #13216=AXIS2_PLACEMENT_3D('',#19404,#15077,#15078); #13217=AXIS2_PLACEMENT_3D('',#19413,#15083,#15084); #13218=AXIS2_PLACEMENT_3D('',#19419,#15088,#15089); #13219=AXIS2_PLACEMENT_3D('',#19425,#15093,#15094); #13220=AXIS2_PLACEMENT_3D('',#19431,#15098,#15099); #13221=AXIS2_PLACEMENT_3D('',#19437,#15103,#15104); #13222=AXIS2_PLACEMENT_3D('',#19500,#15111,#15112); #13223=AXIS2_PLACEMENT_3D('',#19506,#15116,#15117); #13224=AXIS2_PLACEMENT_3D('',#19509,#15120,#15121); #13225=AXIS2_PLACEMENT_3D('',#19510,#15122,#15123); #13226=AXIS2_PLACEMENT_3D('',#19511,#15124,#15125); #13227=AXIS2_PLACEMENT_3D('',#19520,#15130,#15131); #13228=AXIS2_PLACEMENT_3D('',#19526,#15135,#15136); #13229=AXIS2_PLACEMENT_3D('',#19532,#15140,#15141); #13230=AXIS2_PLACEMENT_3D('',#19538,#15145,#15146); #13231=AXIS2_PLACEMENT_3D('',#19544,#15150,#15151); #13232=AXIS2_PLACEMENT_3D('',#19550,#15155,#15156); #13233=AXIS2_PLACEMENT_3D('',#19556,#15160,#15161); #13234=AXIS2_PLACEMENT_3D('',#19562,#15165,#15166); #13235=AXIS2_PLACEMENT_3D('',#19568,#15170,#15171); #13236=AXIS2_PLACEMENT_3D('',#19574,#15175,#15176); #13237=AXIS2_PLACEMENT_3D('',#19580,#15180,#15181); #13238=AXIS2_PLACEMENT_3D('',#19583,#15184,#15185); #13239=AXIS2_PLACEMENT_3D('',#19584,#15186,#15187); #13240=AXIS2_PLACEMENT_3D('',#19607,#15190,#15191); #13241=AXIS2_PLACEMENT_3D('',#19613,#15195,#15196); #13242=AXIS2_PLACEMENT_3D('',#19695,#15204,#15205); #13243=AXIS2_PLACEMENT_3D('',#19796,#15214,#15215); #13244=AXIS2_PLACEMENT_3D('',#19802,#15219,#15220); #13245=AXIS2_PLACEMENT_3D('',#19903,#15229,#15230); #13246=AXIS2_PLACEMENT_3D('',#19909,#15234,#15235); #13247=AXIS2_PLACEMENT_3D('',#19915,#15239,#15240); #13248=AXIS2_PLACEMENT_3D('',#19994,#15247,#15248); #13249=AXIS2_PLACEMENT_3D('',#19995,#15249,#15250); #13250=AXIS2_PLACEMENT_3D('',#20224,#15263,#15264); #13251=AXIS2_PLACEMENT_3D('',#20225,#15265,#15266); #13252=AXIS2_PLACEMENT_3D('',#20454,#15279,#15280); #13253=AXIS2_PLACEMENT_3D('',#20455,#15281,#15282); #13254=AXIS2_PLACEMENT_3D('',#20456,#15283,#15284); #13255=AXIS2_PLACEMENT_3D('',#20465,#15289,#15290); #13256=AXIS2_PLACEMENT_3D('',#20471,#15294,#15295); #13257=AXIS2_PLACEMENT_3D('',#20477,#15299,#15300); #13258=AXIS2_PLACEMENT_3D('',#20483,#15304,#15305); #13259=AXIS2_PLACEMENT_3D('',#20489,#15309,#15310); #13260=AXIS2_PLACEMENT_3D('',#20495,#15314,#15315); #13261=AXIS2_PLACEMENT_3D('',#20501,#15319,#15320); #13262=AXIS2_PLACEMENT_3D('',#20507,#15324,#15325); #13263=AXIS2_PLACEMENT_3D('',#20513,#15329,#15330); #13264=AXIS2_PLACEMENT_3D('',#20516,#15333,#15334); #13265=AXIS2_PLACEMENT_3D('',#20517,#15335,#15336); #13266=AXIS2_PLACEMENT_3D('',#20518,#15337,#15338); #13267=AXIS2_PLACEMENT_3D('',#20521,#15339,#15340); #13268=AXIS2_PLACEMENT_3D('',#20525,#15342,#15343); #13269=AXIS2_PLACEMENT_3D('',#20527,#15345,#15346); #13270=AXIS2_PLACEMENT_3D('',#20539,#15352,#15353); #13271=AXIS2_PLACEMENT_3D('',#20541,#15355,#15356); #13272=AXIS2_PLACEMENT_3D('',#20545,#15359,#15360); #13273=AXIS2_PLACEMENT_3D('',#20549,#15362,#15363); #13274=AXIS2_PLACEMENT_3D('',#20551,#15365,#15366); #13275=AXIS2_PLACEMENT_3D('',#20553,#15368,#15369); #13276=AXIS2_PLACEMENT_3D('',#20559,#15373,#15374); #13277=AXIS2_PLACEMENT_3D('',#20561,#15376,#15377); #13278=AXIS2_PLACEMENT_3D('',#20565,#15380,#15381); #13279=AXIS2_PLACEMENT_3D('',#20567,#15383,#15384); #13280=AXIS2_PLACEMENT_3D('',#20568,#15385,#15386); #13281=AXIS2_PLACEMENT_3D('',#20570,#15387,#15388); #13282=AXIS2_PLACEMENT_3D('',#20572,#15389,#15390); #13283=AXIS2_PLACEMENT_3D('',#20573,#15391,#15392); #13284=AXIS2_PLACEMENT_3D('',#20574,#15393,#15394); #13285=AXIS2_PLACEMENT_3D('',#20575,#15395,#15396); #13286=AXIS2_PLACEMENT_3D('',#20584,#15401,#15402); #13287=AXIS2_PLACEMENT_3D('',#20590,#15406,#15407); #13288=AXIS2_PLACEMENT_3D('',#20596,#15411,#15412); #13289=AXIS2_PLACEMENT_3D('',#20599,#15415,#15416); #13290=AXIS2_PLACEMENT_3D('',#20600,#15417,#15418); #13291=AXIS2_PLACEMENT_3D('',#20601,#15419,#15420); #13292=AXIS2_PLACEMENT_3D('',#20604,#15421,#15422); #13293=AXIS2_PLACEMENT_3D('',#20608,#15424,#15425); #13294=AXIS2_PLACEMENT_3D('',#20610,#15427,#15428); #13295=AXIS2_PLACEMENT_3D('',#20616,#15432,#15433); #13296=AXIS2_PLACEMENT_3D('',#20619,#15434,#15435); #13297=AXIS2_PLACEMENT_3D('',#20623,#15437,#15438); #13298=AXIS2_PLACEMENT_3D('',#20625,#15440,#15441); #13299=AXIS2_PLACEMENT_3D('',#20628,#15444,#15445); #13300=AXIS2_PLACEMENT_3D('',#20631,#15446,#15447); #13301=AXIS2_PLACEMENT_3D('',#20635,#15449,#15450); #13302=AXIS2_PLACEMENT_3D('',#20637,#15452,#15453); #13303=AXIS2_PLACEMENT_3D('',#20644,#15458,#15459); #13304=AXIS2_PLACEMENT_3D('',#20646,#15461,#15462); #13305=AXIS2_PLACEMENT_3D('',#20650,#15465,#15466); #13306=AXIS2_PLACEMENT_3D('',#20654,#15469,#15470); #13307=AXIS2_PLACEMENT_3D('',#20656,#15472,#15473); #13308=AXIS2_PLACEMENT_3D('',#20657,#15474,#15475); #13309=AXIS2_PLACEMENT_3D('',#20666,#15480,#15481); #13310=AXIS2_PLACEMENT_3D('',#20672,#15485,#15486); #13311=AXIS2_PLACEMENT_3D('',#20678,#15490,#15491); #13312=AXIS2_PLACEMENT_3D('',#20684,#15495,#15496); #13313=AXIS2_PLACEMENT_3D('',#20690,#15500,#15501); #13314=AXIS2_PLACEMENT_3D('',#20696,#15505,#15506); #13315=AXIS2_PLACEMENT_3D('',#20699,#15509,#15510); #13316=AXIS2_PLACEMENT_3D('',#20700,#15511,#15512); #13317=AXIS2_PLACEMENT_3D('',#20701,#15513,#15514); #13318=AXIS2_PLACEMENT_3D('',#20710,#15519,#15520); #13319=AXIS2_PLACEMENT_3D('',#20716,#15524,#15525); #13320=AXIS2_PLACEMENT_3D('',#20722,#15529,#15530); #13321=AXIS2_PLACEMENT_3D('',#20728,#15534,#15535); #13322=AXIS2_PLACEMENT_3D('',#20734,#15539,#15540); #13323=AXIS2_PLACEMENT_3D('',#20740,#15544,#15545); #13324=AXIS2_PLACEMENT_3D('',#20743,#15548,#15549); #13325=AXIS2_PLACEMENT_3D('',#20744,#15550,#15551); #13326=AXIS2_PLACEMENT_3D('',#20745,#15552,#15553); #13327=AXIS2_PLACEMENT_3D('',#20754,#15558,#15559); #13328=AXIS2_PLACEMENT_3D('',#20760,#15563,#15564); #13329=AXIS2_PLACEMENT_3D('',#20763,#15567,#15568); #13330=AXIS2_PLACEMENT_3D('',#20772,#15573,#15574); #13331=AXIS2_PLACEMENT_3D('',#20778,#15578,#15579); #13332=AXIS2_PLACEMENT_3D('',#20784,#15583,#15584); #13333=AXIS2_PLACEMENT_3D('',#20790,#15588,#15589); #13334=AXIS2_PLACEMENT_3D('',#20796,#15593,#15594); #13335=AXIS2_PLACEMENT_3D('',#20802,#15598,#15599); #13336=AXIS2_PLACEMENT_3D('',#20808,#15603,#15604); #13337=AXIS2_PLACEMENT_3D('',#20811,#15607,#15608); #13338=AXIS2_PLACEMENT_3D('',#20812,#15609,#15610); #13339=AXIS2_PLACEMENT_3D('',#20813,#15611,#15612); #13340=AXIS2_PLACEMENT_3D('',#20822,#15617,#15618); #13341=AXIS2_PLACEMENT_3D('',#20828,#15622,#15623); #13342=AXIS2_PLACEMENT_3D('',#20834,#15627,#15628); #13343=AXIS2_PLACEMENT_3D('',#20840,#15632,#15633); #13344=AXIS2_PLACEMENT_3D('',#20846,#15637,#15638); #13345=AXIS2_PLACEMENT_3D('',#20849,#15641,#15642); #13346=AXIS2_PLACEMENT_3D('',#20850,#15643,#15644); #13347=AXIS2_PLACEMENT_3D('',#20851,#15645,#15646); #13348=AXIS2_PLACEMENT_3D('',#20860,#15651,#15652); #13349=AXIS2_PLACEMENT_3D('',#20866,#15656,#15657); #13350=AXIS2_PLACEMENT_3D('',#20872,#15661,#15662); #13351=AXIS2_PLACEMENT_3D('',#20878,#15666,#15667); #13352=AXIS2_PLACEMENT_3D('',#20884,#15671,#15672); #13353=AXIS2_PLACEMENT_3D('',#20890,#15676,#15677); #13354=AXIS2_PLACEMENT_3D('',#20896,#15681,#15682); #13355=AXIS2_PLACEMENT_3D('',#20899,#15685,#15686); #13356=AXIS2_PLACEMENT_3D('',#20900,#15687,#15688); #13357=AXIS2_PLACEMENT_3D('',#20901,#15689,#15690); #13358=AXIS2_PLACEMENT_3D('',#20910,#15695,#15696); #13359=AXIS2_PLACEMENT_3D('',#20916,#15700,#15701); #13360=AXIS2_PLACEMENT_3D('',#20922,#15705,#15706); #13361=AXIS2_PLACEMENT_3D('',#20928,#15710,#15711); #13362=AXIS2_PLACEMENT_3D('',#20934,#15715,#15716); #13363=AXIS2_PLACEMENT_3D('',#20940,#15720,#15721); #13364=AXIS2_PLACEMENT_3D('',#20946,#15725,#15726); #13365=AXIS2_PLACEMENT_3D('',#20949,#15729,#15730); #13366=AXIS2_PLACEMENT_3D('',#20950,#15731,#15732); #13367=AXIS2_PLACEMENT_3D('',#20951,#15733,#15734); #13368=AXIS2_PLACEMENT_3D('',#20960,#15739,#15740); #13369=AXIS2_PLACEMENT_3D('',#20966,#15744,#15745); #13370=AXIS2_PLACEMENT_3D('',#20972,#15749,#15750); #13371=AXIS2_PLACEMENT_3D('',#20975,#15753,#15754); #13372=AXIS2_PLACEMENT_3D('',#20976,#15755,#15756); #13373=AXIS2_PLACEMENT_3D('',#21056,#15762,#15763); #13374=AXIS2_PLACEMENT_3D('',#21062,#15767,#15768); #13375=AXIS2_PLACEMENT_3D('',#21163,#15777,#15778); #13376=AXIS2_PLACEMENT_3D('',#21169,#15782,#15783); #13377=AXIS2_PLACEMENT_3D('',#21229,#15789,#15790); #13378=AXIS2_PLACEMENT_3D('',#21230,#15791,#15792); #13379=AXIS2_PLACEMENT_3D('',#21383,#15801,#15802); #13380=AXIS2_PLACEMENT_3D('',#21384,#15803,#15804); #13381=AXIS2_PLACEMENT_3D('',#21385,#15805,#15806); #13382=AXIS2_PLACEMENT_3D('',#21527,#15818,#15819); #13383=AXIS2_PLACEMENT_3D('',#21533,#15823,#15824); #13384=AXIS2_PLACEMENT_3D('',#21596,#15831,#15832); #13385=AXIS2_PLACEMENT_3D('',#21602,#15836,#15837); #13386=AXIS2_PLACEMENT_3D('',#21662,#15843,#15844); #13387=AXIS2_PLACEMENT_3D('',#21663,#15845,#15846); #13388=AXIS2_PLACEMENT_3D('',#21664,#15847,#15848); #13389=AXIS2_PLACEMENT_3D('',#21673,#15853,#15854); #13390=AXIS2_PLACEMENT_3D('',#21679,#15858,#15859); #13391=AXIS2_PLACEMENT_3D('',#21685,#15863,#15864); #13392=AXIS2_PLACEMENT_3D('',#21688,#15867,#15868); #13393=AXIS2_PLACEMENT_3D('',#21689,#15869,#15870); #13394=AXIS2_PLACEMENT_3D('',#21690,#15871,#15872); #13395=AXIS2_PLACEMENT_3D('',#21699,#15877,#15878); #13396=AXIS2_PLACEMENT_3D('',#21705,#15882,#15883); #13397=AXIS2_PLACEMENT_3D('',#21711,#15887,#15888); #13398=AXIS2_PLACEMENT_3D('',#21717,#15892,#15893); #13399=AXIS2_PLACEMENT_3D('',#21723,#15897,#15898); #13400=AXIS2_PLACEMENT_3D('',#21729,#15902,#15903); #13401=AXIS2_PLACEMENT_3D('',#21735,#15907,#15908); #13402=AXIS2_PLACEMENT_3D('',#21741,#15912,#15913); #13403=AXIS2_PLACEMENT_3D('',#21747,#15917,#15918); #13404=AXIS2_PLACEMENT_3D('',#21753,#15922,#15923); #13405=AXIS2_PLACEMENT_3D('',#21816,#15930,#15931); #13406=AXIS2_PLACEMENT_3D('',#21822,#15935,#15936); #13407=AXIS2_PLACEMENT_3D('',#21863,#15941,#15942); #13408=AXIS2_PLACEMENT_3D('',#21864,#15943,#15944); #13409=AXIS2_PLACEMENT_3D('',#22017,#15953,#15954); #13410=AXIS2_PLACEMENT_3D('',#22018,#15955,#15956); #13411=AXIS2_PLACEMENT_3D('',#22019,#15957,#15958); #13412=AXIS2_PLACEMENT_3D('',#22085,#15966,#15967); #13413=AXIS2_PLACEMENT_3D('',#22091,#15971,#15972); #13414=AXIS2_PLACEMENT_3D('',#22097,#15976,#15977); #13415=AXIS2_PLACEMENT_3D('',#22103,#15981,#15982); #13416=AXIS2_PLACEMENT_3D('',#22109,#15986,#15987); #13417=AXIS2_PLACEMENT_3D('',#22153,#15993,#15994); #13418=AXIS2_PLACEMENT_3D('',#22159,#15998,#15999); #13419=AXIS2_PLACEMENT_3D('',#22162,#16002,#16003); #13420=AXIS2_PLACEMENT_3D('',#22163,#16004,#16005); #13421=AXIS2_PLACEMENT_3D('',#22164,#16006,#16007); #13422=AXIS2_PLACEMENT_3D('',#22173,#16012,#16013); #13423=AXIS2_PLACEMENT_3D('',#22179,#16017,#16018); #13424=AXIS2_PLACEMENT_3D('',#22185,#16022,#16023); #13425=AXIS2_PLACEMENT_3D('',#22188,#16026,#16027); #13426=AXIS2_PLACEMENT_3D('',#22189,#16028,#16029); #13427=AXIS2_PLACEMENT_3D('',#22190,#16030,#16031); #13428=AXIS2_PLACEMENT_3D('',#22199,#16036,#16037); #13429=AXIS2_PLACEMENT_3D('',#22376,#16050,#16051); #13430=AXIS2_PLACEMENT_3D('',#22382,#16055,#16056); #13431=AXIS2_PLACEMENT_3D('',#22537,#16067,#16068); #13432=AXIS2_PLACEMENT_3D('',#22538,#16069,#16070); #13433=AXIS2_PLACEMENT_3D('placement',#22539,#16071,#16072); #13434=AXIS2_PLACEMENT_3D('',#22540,#16073,#16074); #13435=AXIS2_PLACEMENT_3D('',#22541,#16075,#16076); #13436=AXIS2_PLACEMENT_3D('',#22542,#16077,#16078); #13437=DIRECTION('axis',(0.,0.,1.)); #13438=DIRECTION('refdir',(1.,0.,0.)); #13439=DIRECTION('center_axis',(0.,1.,0.)); #13440=DIRECTION('ref_axis',(1.,0.,0.)); #13441=DIRECTION('',(0.,0.,1.)); #13442=DIRECTION('',(1.,0.,0.)); #13443=DIRECTION('',(0.,0.,-1.)); #13444=DIRECTION('',(-1.,0.,0.)); #13445=DIRECTION('center_axis',(0.,0.,-1.)); #13446=DIRECTION('ref_axis',(-1.,0.,0.)); #13447=DIRECTION('center_axis',(0.,0.,-1.)); #13448=DIRECTION('ref_axis',(-1.,0.,0.)); #13449=DIRECTION('center_axis',(0.,0.,1.)); #13450=DIRECTION('ref_axis',(-1.,0.,0.)); #13451=DIRECTION('center_axis',(0.,0.,1.)); #13452=DIRECTION('ref_axis',(1.,0.,0.)); #13453=DIRECTION('',(0.,1.,0.)); #13454=DIRECTION('center_axis',(0.,0.,1.)); #13455=DIRECTION('ref_axis',(1.,1.85037170770859E-16,0.)); #13456=DIRECTION('',(0.,1.,0.)); #13457=DIRECTION('',(-1.,0.,0.)); #13458=DIRECTION('',(0.,-1.,0.)); #13459=DIRECTION('center_axis',(0.,0.,1.)); #13460=DIRECTION('ref_axis',(-1.,1.85037170770859E-16,0.)); #13461=DIRECTION('',(0.,-1.,0.)); #13462=DIRECTION('center_axis',(0.,0.,1.)); #13463=DIRECTION('ref_axis',(-0.707106781186548,-0.707106781186548,0.)); #13464=DIRECTION('',(1.,0.,0.)); #13465=DIRECTION('center_axis',(0.,0.,1.)); #13466=DIRECTION('ref_axis',(0.707106781186548,-0.707106781186548,0.)); #13467=DIRECTION('center_axis',(0.,0.,-1.)); #13468=DIRECTION('ref_axis',(-1.,0.,0.)); #13469=DIRECTION('center_axis',(0.,0.,-1.)); #13470=DIRECTION('ref_axis',(-1.,0.,0.)); #13471=DIRECTION('center_axis',(-0.137844537491629,0.137844537491628,0.980814848463989)); #13472=DIRECTION('ref_axis',(0.693540830437343,-0.693540830437343,0.194941614419708)); #13473=DIRECTION('',(-0.137844537491629,0.137844537491628,0.980814848463989)); #13474=DIRECTION('center_axis',(-0.137844537491629,0.137844537491629,0.980814848463989)); #13475=DIRECTION('ref_axis',(0.99026806874157,0.,0.139173100960066)); #13476=DIRECTION('',(0.137844537491629,-0.137844537491628,-0.980814848463989)); #13477=DIRECTION('center_axis',(0.,1.,0.)); #13478=DIRECTION('ref_axis',(-0.139173100960065,0.,0.99026806874157)); #13479=DIRECTION('center_axis',(0.,0.99026806874157,0.139173100960065)); #13480=DIRECTION('ref_axis',(-0.143287707131292,-0.137736984364139,0.980049568197104)); #13481=DIRECTION('center_axis',(-0.137844537491629,-0.137844537491628,-0.980814848463989)); #13482=DIRECTION('ref_axis',(-0.693540830437343,-0.693540830437343,0.194941614419708)); #13483=DIRECTION('center_axis',(0.,0.99026806874157,0.139173100960065)); #13484=DIRECTION('ref_axis',(0.143287707131292,-0.137736984364139,0.980049568197104)); #13485=DIRECTION('center_axis',(0.,1.,0.)); #13486=DIRECTION('ref_axis',(0.139173100960065,0.,0.99026806874157)); #13487=DIRECTION('',(0.137844537491629,0.137844537491628,0.980814848463989)); #13488=DIRECTION('center_axis',(0.13784453749163,0.137844537491628,0.980814848463989)); #13489=DIRECTION('ref_axis',(0.,-0.99026806874157,0.139173100960065)); #13490=DIRECTION('',(-0.137844537491629,-0.137844537491628,-0.980814848463989)); #13491=DIRECTION('center_axis',(0.319823861567038,-0.852793270944464,0.412863578684521)); #13492=DIRECTION('ref_axis',(-0.522248635260876,-0.522248635260871,-0.674175589840147)); #13493=DIRECTION('center_axis',(-5.60566910955748E-15,-1.,0.)); #13494=DIRECTION('ref_axis',(0.,0.,-1.)); #13495=DIRECTION('center_axis',(-1.,0.,0.)); #13496=DIRECTION('ref_axis',(0.,-0.99026806874157,-0.139173100960065)); #13497=DIRECTION('center_axis',(0.137844537491629,0.137844537491628,-0.980814848463989)); #13498=DIRECTION('ref_axis',(-0.99026806874157,0.,-0.139173100960065)); #13499=DIRECTION('center_axis',(-0.319823861567049,-0.852793270944457,0.412863578684528)); #13500=DIRECTION('ref_axis',(0.522248635260873,-0.522248635260882,-0.674175589840141)); #13501=DIRECTION('center_axis',(1.,0.,0.)); #13502=DIRECTION('ref_axis',(0.,0.,-1.)); #13503=DIRECTION('center_axis',(1.56031670586633E-15,-1.,1.11022302462516E-14)); #13504=DIRECTION('ref_axis',(0.99026806874157,0.,-0.139173100960065)); #13505=DIRECTION('center_axis',(-0.13784453749163,0.137844537491628,-0.980814848463989)); #13506=DIRECTION('ref_axis',(0.,-0.99026806874157,-0.139173100960065)); #13507=DIRECTION('center_axis',(0.,-1.,0.)); #13508=DIRECTION('ref_axis',(-0.656059028990508,0.,-0.754709580222771)); #13509=DIRECTION('',(0.,-1.,0.)); #13510=DIRECTION('',(0.,1.,0.)); #13511=DIRECTION('center_axis',(-0.99026806874157,0.,-0.139173100960065)); #13512=DIRECTION('ref_axis',(0.139173100960065,0.,-0.99026806874157)); #13513=DIRECTION('center_axis',(0.992822289409785,0.,0.119598919941249)); #13514=DIRECTION('ref_axis',(0.119598919941249,0.,-0.992822289409785)); #13515=DIRECTION('center_axis',(0.138926750637776,0.0594732459138877,0.98851519511725)); #13516=DIRECTION('ref_axis',(-0.99026806874157,-4.16333634234432E-15,0.139173100960066)); #13517=DIRECTION('center_axis',(0.,-1.,0.)); #13518=DIRECTION('ref_axis',(0.,0.,1.)); #13519=DIRECTION('center_axis',(-0.475475045233051,0.285354420448622,-0.832163647422224)); #13520=DIRECTION('ref_axis',(-0.713528494207147,0.428221232595418,0.554530128946067)); #13521=DIRECTION('center_axis',(0.138780909431282,0.0750205549903533,0.987477481012284)); #13522=DIRECTION('ref_axis',(-0.99026806874157,0.,0.139173100960066)); #13523=DIRECTION('center_axis',(-5.60566910955748E-15,1.,0.)); #13524=DIRECTION('ref_axis',(0.,0.,1.)); #13525=DIRECTION('center_axis',(-0.879696312191018,-0.475535906444007,6.20317278328686E-15)); #13526=DIRECTION('ref_axis',(-0.475535906444007,0.879696312191018,0.)); #13527=DIRECTION('center_axis',(0.,-1.,0.)); #13528=DIRECTION('ref_axis',(0.99026806874157,0.,0.139173100960065)); #13529=DIRECTION('center_axis',(-0.138926750637787,0.0594732459138849,0.988515195117249)); #13530=DIRECTION('ref_axis',(0.202595868050664,-0.975376230361855,0.0871557427476573)); #13531=DIRECTION('center_axis',(0.475475045233055,0.285354420448622,-0.832163647422222)); #13532=DIRECTION('ref_axis',(0.713528494207147,0.428221232595414,0.554530128946071)); #13533=DIRECTION('center_axis',(-0.138780909431282,0.0750205549903441,0.987477481012285)); #13534=DIRECTION('ref_axis',(0.475535906444012,0.879696312191015,0.)); #13535=DIRECTION('center_axis',(0.879696312191015,-0.475535906444012,0.)); #13536=DIRECTION('ref_axis',(0.,0.,1.)); #13537=DIRECTION('center_axis',(0.,1.,0.)); #13538=DIRECTION('ref_axis',(0.99026806874157,0.,0.139173100960066)); #13539=DIRECTION('center_axis',(0.,0.,-1.)); #13540=DIRECTION('ref_axis',(-1.,0.,0.)); #13541=DIRECTION('center_axis',(0.,0.,-1.)); #13542=DIRECTION('ref_axis',(-0.707106781186547,-0.707106781186547,0.)); #13543=DIRECTION('center_axis',(0.,1.,0.)); #13544=DIRECTION('ref_axis',(-0.99026806874157,0.,0.139173100960065)); #13545=DIRECTION('center_axis',(0.138926750637776,-0.0594732459138865,0.98851519511725)); #13546=DIRECTION('ref_axis',(-0.202595868050666,0.975376230361855,0.0871557427476568)); #13547=DIRECTION('center_axis',(0.,1.,0.)); #13548=DIRECTION('ref_axis',(-0.656059028990504,0.,0.754709580222775)); #13549=DIRECTION('',(0.,-1.,0.)); #13550=DIRECTION('',(0.,1.,0.)); #13551=DIRECTION('center_axis',(-0.4958279598585,-0.32772835045333,-0.804206915247374)); #13552=DIRECTION('ref_axis',(-0.670898730918206,-0.443445211253927,0.594349423713274)); #13553=DIRECTION('center_axis',(-0.918461249874978,0.395510976431872,0.)); #13554=DIRECTION('ref_axis',(0.,0.,1.)); #13555=DIRECTION('center_axis',(8.92863929389657E-11,-1.,6.35305696938814E-10)); #13556=DIRECTION('ref_axis',(-0.99026806874157,0.,0.139173100960066)); #13557=DIRECTION('center_axis',(0.139090840976379,0.0343771359405272,0.989682752441918)); #13558=DIRECTION('ref_axis',(-0.394005935798341,-0.914966228372271,0.0871557427476575)); #13559=DIRECTION('center_axis',(0.,1.,0.)); #13560=DIRECTION('ref_axis',(-0.656059028990508,0.,0.754709580222772)); #13561=DIRECTION('',(0.,-1.,0.)); #13562=DIRECTION('center_axis',(-0.138926750637776,-0.0594732459138759, 0.988515195117251)); #13563=DIRECTION('ref_axis',(0.99026806874157,0.,0.139173100960066)); #13564=DIRECTION('center_axis',(0.,1.,0.)); #13565=DIRECTION('ref_axis',(0.,0.,1.)); #13566=DIRECTION('center_axis',(0.495827966451873,-0.327728357042687,-0.804206908497)); #13567=DIRECTION('ref_axis',(0.670898723897965,-0.443445209632921,0.594349432847124)); #13568=DIRECTION('center_axis',(0.918461250696195,0.395510974524831,2.26593008611173E-9)); #13569=DIRECTION('ref_axis',(0.39400593567735,-0.914966228424372,0.0871557427476579)); #13570=DIRECTION('center_axis',(-0.13909084013801,0.0343771353864045,0.989682752578991)); #13571=DIRECTION('ref_axis',(0.99026806874157,2.7755575615629E-15,0.139173100960064)); #13572=DIRECTION('center_axis',(-6.41542202660583E-10,-1.,0.)); #13573=DIRECTION('ref_axis',(0.,0.,1.)); #13574=DIRECTION('center_axis',(0.,-1.,0.)); #13575=DIRECTION('ref_axis',(0.656059028990508,0.,0.754709580222772)); #13576=DIRECTION('',(0.,1.,0.)); #13577=DIRECTION('center_axis',(-0.495827958405749,0.327728353593415,-0.804206914863418)); #13578=DIRECTION('ref_axis',(-0.670898728045755,0.4434452149034,0.594349424232804)); #13579=DIRECTION('center_axis',(6.41540801243306E-10,1.,0.)); #13580=DIRECTION('ref_axis',(0.,0.,1.)); #13581=DIRECTION('center_axis',(-0.918461250696195,-0.395510974524832,2.26592953722999E-9)); #13582=DIRECTION('ref_axis',(-0.394005935677351,0.914966228424372,0.087155742747658)); #13583=DIRECTION('center_axis',(0.13909084013801,-0.0343771353863888,0.989682752578991)); #13584=DIRECTION('ref_axis',(-0.99026806874157,-8.3266726846887E-15,0.139173100960064)); #13585=DIRECTION('center_axis',(0.,0.,-1.)); #13586=DIRECTION('ref_axis',(-1.,0.,0.)); #13587=DIRECTION('center_axis',(0.,0.,-1.)); #13588=DIRECTION('ref_axis',(1.,1.87028740682066E-16,0.)); #13589=DIRECTION('center_axis',(0.495827959858492,0.327728350453329,-0.80420691524738)); #13590=DIRECTION('ref_axis',(0.670898730918206,0.443445211253933,0.59434942371327)); #13591=DIRECTION('center_axis',(0.91846124987498,-0.395510976431869,0.)); #13592=DIRECTION('ref_axis',(0.,0.,1.)); #13593=DIRECTION('center_axis',(-8.92860028597892E-11,1.,6.35302921381253E-10)); #13594=DIRECTION('ref_axis',(0.99026806874157,0.,0.139173100960066)); #13595=DIRECTION('center_axis',(-0.139090840976365,-0.0343771359405336, 0.98968275244192)); #13596=DIRECTION('ref_axis',(0.394005935798342,0.91496622837227,0.0871557427476578)); #13597=DIRECTION('center_axis',(0.319823861567044,-0.852793270944461,-0.412863578684524)); #13598=DIRECTION('ref_axis',(-0.522248635260876,-0.522248635260876,0.674175589840143)); #13599=DIRECTION('center_axis',(-1.,5.60566910955745E-15,0.)); #13600=DIRECTION('ref_axis',(0.,0.,1.)); #13601=DIRECTION('center_axis',(0.,-1.,0.)); #13602=DIRECTION('ref_axis',(-0.99026806874157,0.,0.139173100960066)); #13603=DIRECTION('center_axis',(0.,1.,0.)); #13604=DIRECTION('ref_axis',(-0.656059028990508,0.,0.754709580222772)); #13605=DIRECTION('',(0.,-1.,0.)); #13606=DIRECTION('center_axis',(-0.319823861567043,-0.852793270944459,-0.412863578684527)); #13607=DIRECTION('ref_axis',(0.522248635260874,-0.522248635260878,0.674175589840143)); #13608=DIRECTION('center_axis',(-5.60566910955748E-15,-1.,0.)); #13609=DIRECTION('ref_axis',(0.,0.,1.)); #13610=DIRECTION('center_axis',(1.,0.,0.)); #13611=DIRECTION('ref_axis',(0.,-0.99026806874157,0.139173100960065)); #13612=DIRECTION('center_axis',(-1.,0.,0.)); #13613=DIRECTION('ref_axis',(0.,-0.656059028990508,0.754709580222772)); #13614=DIRECTION('',(1.,0.,0.)); #13615=DIRECTION('center_axis',(0.,-1.,0.)); #13616=DIRECTION('ref_axis',(0.656059028990508,0.,0.754709580222772)); #13617=DIRECTION('',(0.,1.,0.)); #13618=DIRECTION('center_axis',(0.,0.,-1.)); #13619=DIRECTION('ref_axis',(-1.,0.,0.)); #13620=DIRECTION('center_axis',(0.,0.,-1.)); #13621=DIRECTION('ref_axis',(-1.,0.,0.)); #13622=DIRECTION('center_axis',(0.,-1.,0.)); #13623=DIRECTION('ref_axis',(0.656059028990504,0.,0.754709580222775)); #13624=DIRECTION('',(0.,1.,0.)); #13625=DIRECTION('',(0.,-1.,0.)); #13626=DIRECTION('center_axis',(0.,0.,-1.)); #13627=DIRECTION('ref_axis',(-1.,0.,0.)); #13628=DIRECTION('center_axis',(0.,0.,1.)); #13629=DIRECTION('ref_axis',(-1.,0.,0.)); #13630=DIRECTION('center_axis',(0.,0.,-1.)); #13631=DIRECTION('ref_axis',(-1.,0.,0.)); #13632=DIRECTION('center_axis',(0.,0.,-1.)); #13633=DIRECTION('ref_axis',(-1.,0.,0.)); #13634=DIRECTION('center_axis',(0.,0.,1.)); #13635=DIRECTION('ref_axis',(1.,0.,0.)); #13636=DIRECTION('center_axis',(0.,0.,-1.)); #13637=DIRECTION('ref_axis',(1.,0.,0.)); #13638=DIRECTION('center_axis',(-0.992822289409785,-5.53256144329481E-17, -0.119598919941249)); #13639=DIRECTION('ref_axis',(-0.119598919941249,0.,0.992822289409785)); #13640=DIRECTION('center_axis',(0.99026806874157,0.,0.139173100960065)); #13641=DIRECTION('ref_axis',(-0.139173100960065,0.,0.99026806874157)); #13642=DIRECTION('center_axis',(0.,0.,-1.)); #13643=DIRECTION('ref_axis',(-1.,0.,0.)); #13644=DIRECTION('center_axis',(0.,0.,-1.)); #13645=DIRECTION('ref_axis',(0.707106781186547,-0.707106781186547,0.)); #13646=DIRECTION('center_axis',(-0.99026806874157,0.,0.139173100960065)); #13647=DIRECTION('ref_axis',(0.139173100960065,0.,0.99026806874157)); #13648=DIRECTION('center_axis',(0.992822289409785,5.53256144329481E-17, -0.119598919941249)); #13649=DIRECTION('ref_axis',(0.119598919941249,0.,0.992822289409785)); #13650=DIRECTION('center_axis',(-0.992822289409785,0.,0.119598919941249)); #13651=DIRECTION('ref_axis',(-0.119598919941249,0.,-0.992822289409785)); #13652=DIRECTION('center_axis',(0.99026806874157,0.,-0.139173100960065)); #13653=DIRECTION('ref_axis',(-0.139173100960065,0.,-0.99026806874157)); #13654=DIRECTION('center_axis',(1.,0.,0.)); #13655=DIRECTION('ref_axis',(0.,0.656059028990508,0.754709580222772)); #13656=DIRECTION('',(-1.,0.,0.)); #13657=DIRECTION('center_axis',(0.,1.,0.)); #13658=DIRECTION('ref_axis',(0.656059028990508,0.,-0.754709580222771)); #13659=DIRECTION('',(0.,-1.,0.)); #13660=DIRECTION('',(0.,1.,0.)); #13661=DIRECTION('center_axis',(-0.137844537491628,0.137844537491628,-0.980814848463989)); #13662=DIRECTION('ref_axis',(0.693540830437343,-0.693540830437343,-0.194941614419708)); #13663=DIRECTION('',(-0.137844537491628,0.137844537491628,-0.980814848463989)); #13664=DIRECTION('',(0.137844537491628,-0.137844537491628,0.980814848463989)); #13665=DIRECTION('center_axis',(-0.99026806874157,0.,-0.139173100960065)); #13666=DIRECTION('ref_axis',(0.137736984364139,0.143287707131292,-0.980049568197104)); #13667=DIRECTION('center_axis',(1.,0.,0.)); #13668=DIRECTION('ref_axis',(0.,-0.656059028990504,-0.754709580222774)); #13669=DIRECTION('',(-1.,0.,0.)); #13670=DIRECTION('',(1.,0.,0.)); #13671=DIRECTION('center_axis',(-0.137844537491628,-0.137844537491628,0.980814848463989)); #13672=DIRECTION('ref_axis',(-0.693540830437343,-0.693540830437343,-0.194941614419707)); #13673=DIRECTION('center_axis',(0.99026806874157,0.,-0.139173100960065)); #13674=DIRECTION('ref_axis',(-0.137736984364139,0.143287707131292,-0.980049568197104)); #13675=DIRECTION('',(0.137844537491628,0.137844537491628,-0.980814848463989)); #13676=DIRECTION('',(-0.137844537491628,-0.137844537491628,0.980814848463989)); #13677=DIRECTION('center_axis',(0.,-0.99026806874157,0.139173100960065)); #13678=DIRECTION('ref_axis',(0.,-0.139173100960065,-0.99026806874157)); #13679=DIRECTION('',(1.,0.,0.)); #13680=DIRECTION('center_axis',(-0.99026806874157,0.,0.139173100960065)); #13681=DIRECTION('ref_axis',(0.139173100960065,0.,0.99026806874157)); #13682=DIRECTION('',(0.,-1.,0.)); #13683=DIRECTION('center_axis',(0.99026806874157,0.,0.139173100960065)); #13684=DIRECTION('ref_axis',(0.139173100960065,0.,-0.99026806874157)); #13685=DIRECTION('',(0.,1.,0.)); #13686=DIRECTION('center_axis',(0.,0.99026806874157,0.139173100960065)); #13687=DIRECTION('ref_axis',(0.,-0.139173100960065,0.99026806874157)); #13688=DIRECTION('center_axis',(0.,-0.99026806874157,-0.139173100960065)); #13689=DIRECTION('ref_axis',(0.,-0.139173100960065,0.99026806874157)); #13690=DIRECTION('center_axis',(0.,-0.99026806874157,-0.139173100960065)); #13691=DIRECTION('ref_axis',(0.,-0.139173100960065,0.99026806874157)); #13692=DIRECTION('center_axis',(0.,0.,1.)); #13693=DIRECTION('ref_axis',(-1.,0.,0.)); #13694=DIRECTION('center_axis',(0.,0.,1.)); #13695=DIRECTION('ref_axis',(-1.,0.,0.)); #13696=DIRECTION('center_axis',(0.,0.,1.)); #13697=DIRECTION('ref_axis',(1.,0.,0.)); #13698=DIRECTION('center_axis',(0.,0.,1.)); #13699=DIRECTION('ref_axis',(1.,0.,0.)); #13700=DIRECTION('center_axis',(0.,0.,1.)); #13701=DIRECTION('ref_axis',(-1.,0.,0.)); #13702=DIRECTION('center_axis',(0.,0.,1.)); #13703=DIRECTION('ref_axis',(1.,0.,0.)); #13704=DIRECTION('center_axis',(-0.99026806874157,0.,-0.139173100960065)); #13705=DIRECTION('ref_axis',(-0.139173100960065,0.,0.99026806874157)); #13706=DIRECTION('center_axis',(0.,0.,1.)); #13707=DIRECTION('ref_axis',(-1.,0.,0.)); #13708=DIRECTION('center_axis',(0.,0.,1.)); #13709=DIRECTION('ref_axis',(-1.,0.,0.)); #13710=DIRECTION('center_axis',(0.99026806874157,0.,-0.139173100960065)); #13711=DIRECTION('ref_axis',(-0.139173100960065,0.,-0.99026806874157)); #13712=DIRECTION('center_axis',(0.,-0.99026806874157,-0.139173100960065)); #13713=DIRECTION('ref_axis',(0.,0.139173100960065,-0.99026806874157)); #13714=DIRECTION('',(-1.,0.,0.)); #13715=DIRECTION('center_axis',(0.,-1.,0.)); #13716=DIRECTION('ref_axis',(1.,0.,0.)); #13717=DIRECTION('center_axis',(0.,0.,1.)); #13718=DIRECTION('ref_axis',(1.,0.,0.)); #13719=DIRECTION('center_axis',(0.,0.,1.)); #13720=DIRECTION('ref_axis',(1.,0.,0.)); #13721=DIRECTION('axis',(0.,0.,1.)); #13722=DIRECTION('refdir',(1.,0.,0.)); #13723=DIRECTION('center_axis',(0.,-1.,0.)); #13724=DIRECTION('ref_axis',(-1.,0.,0.)); #13725=DIRECTION('',(0.,0.,1.)); #13726=DIRECTION('',(1.,0.,0.)); #13727=DIRECTION('',(0.,0.,-1.)); #13728=DIRECTION('',(-1.,0.,0.)); #13729=DIRECTION('center_axis',(1.,0.,0.)); #13730=DIRECTION('ref_axis',(0.,-0.463106635561077,0.886302569159821)); #13731=DIRECTION('center_axis',(-1.,0.,0.)); #13732=DIRECTION('ref_axis',(0.,-0.463106635561077,0.886302569159821)); #13733=DIRECTION('',(1.,0.,0.)); #13734=DIRECTION('center_axis',(1.,0.,0.)); #13735=DIRECTION('ref_axis',(0.,-0.463106635561077,0.886302569159821)); #13736=DIRECTION('',(-1.,0.,0.)); #13737=DIRECTION('center_axis',(0.,0.,-1.)); #13738=DIRECTION('ref_axis',(0.,1.,0.)); #13739=DIRECTION('',(0.,-1.,0.)); #13740=DIRECTION('',(0.,1.,0.)); #13741=DIRECTION('center_axis',(-1.,0.,0.)); #13742=DIRECTION('ref_axis',(0.,0.431893009921604,-0.901924846082453)); #13743=DIRECTION('center_axis',(1.,0.,0.)); #13744=DIRECTION('ref_axis',(0.,0.431893009921604,-0.901924846082453)); #13745=DIRECTION('',(1.,0.,0.)); #13746=DIRECTION('center_axis',(-1.,0.,0.)); #13747=DIRECTION('ref_axis',(0.,0.431893009921604,-0.901924846082453)); #13748=DIRECTION('',(-1.,0.,0.)); #13749=DIRECTION('center_axis',(0.,0.820905201785487,-0.5710644881986)); #13750=DIRECTION('ref_axis',(0.,0.5710644881986,0.820905201785487)); #13751=DIRECTION('',(0.,0.5710644881986,0.820905201785487)); #13752=DIRECTION('',(1.,0.,0.)); #13753=DIRECTION('',(0.,0.571064488198599,0.820905201785487)); #13754=DIRECTION('',(1.,0.,0.)); #13755=DIRECTION('',(0.,0.5710644881986,0.820905201785487)); #13756=DIRECTION('',(0.,-0.5710644881986,-0.820905201785487)); #13757=DIRECTION('',(1.,0.,0.)); #13758=DIRECTION('',(0.,-0.571064488198599,-0.820905201785487)); #13759=DIRECTION('',(1.,0.,0.)); #13760=DIRECTION('',(0.,-0.5710644881986,-0.820905201785487)); #13761=DIRECTION('center_axis',(-1.,0.,0.)); #13762=DIRECTION('ref_axis',(0.,0.,1.)); #13763=DIRECTION('',(0.,-0.997564050259824,0.0697564737441255)); #13764=DIRECTION('',(0.,0.0697564737441248,0.997564050259824)); #13765=DIRECTION('',(0.,0.997564050259824,-0.0697564737441255)); #13766=DIRECTION('center_axis',(-1.,0.,0.)); #13767=DIRECTION('ref_axis',(0.,0.431893009921604,-0.901924846082453)); #13768=DIRECTION('',(0.,0.5710644881986,0.820905201785487)); #13769=DIRECTION('',(0.,0.820905201785487,-0.5710644881986)); #13770=DIRECTION('center_axis',(1.,0.,0.)); #13771=DIRECTION('ref_axis',(0.,0.431893009921604,-0.901924846082453)); #13772=DIRECTION('',(1.,0.,0.)); #13773=DIRECTION('center_axis',(1.,0.,0.)); #13774=DIRECTION('ref_axis',(0.,0.431893009921604,-0.901924846082453)); #13775=DIRECTION('',(-1.,0.,0.)); #13776=DIRECTION('center_axis',(0.,0.0697564737441255,0.997564050259824)); #13777=DIRECTION('ref_axis',(0.,-0.997564050259824,0.0697564737441255)); #13778=DIRECTION('',(1.,0.,0.)); #13779=DIRECTION('',(0.,-0.997564050259824,0.0697564737441255)); #13780=DIRECTION('center_axis',(1.,0.,0.)); #13781=DIRECTION('ref_axis',(0.,-0.463106635561077,0.886302569159821)); #13782=DIRECTION('center_axis',(-1.,0.,0.)); #13783=DIRECTION('ref_axis',(0.,-0.463106635561077,0.886302569159821)); #13784=DIRECTION('',(-1.,0.,0.)); #13785=DIRECTION('center_axis',(1.,0.,0.)); #13786=DIRECTION('ref_axis',(0.,-0.463106635561077,0.886302569159821)); #13787=DIRECTION('',(1.,0.,0.)); #13788=DIRECTION('center_axis',(0.,0.,1.)); #13789=DIRECTION('ref_axis',(0.,-1.,0.)); #13790=DIRECTION('',(0.,-1.,0.)); #13791=DIRECTION('',(0.,1.,0.)); #13792=DIRECTION('center_axis',(1.,0.,0.)); #13793=DIRECTION('ref_axis',(0.,0.,-1.)); #13794=DIRECTION('',(0.,-0.5710644881986,-0.820905201785487)); #13795=DIRECTION('',(0.,0.820905201785487,-0.5710644881986)); #13796=DIRECTION('center_axis',(0.,-0.5710644881986,-0.820905201785487)); #13797=DIRECTION('ref_axis',(0.,0.820905201785487,-0.5710644881986)); #13798=DIRECTION('',(0.,-0.820905201785487,0.5710644881986)); #13799=DIRECTION('',(0.,0.820905201785487,-0.5710644881986)); #13800=DIRECTION('',(-1.,0.,0.)); #13801=DIRECTION('center_axis',(0.,0.5710644881986,0.820905201785487)); #13802=DIRECTION('ref_axis',(0.,-0.820905201785487,0.5710644881986)); #13803=DIRECTION('',(1.,0.,0.)); #13804=DIRECTION('',(0.,-0.820905201785487,0.5710644881986)); #13805=DIRECTION('center_axis',(0.,0.5710644881986,0.820905201785487)); #13806=DIRECTION('ref_axis',(0.,-0.820905201785487,0.5710644881986)); #13807=DIRECTION('',(0.,-0.820905201785487,0.5710644881986)); #13808=DIRECTION('',(0.,0.820905201785487,-0.5710644881986)); #13809=DIRECTION('',(1.,0.,0.)); #13810=DIRECTION('center_axis',(-1.,0.,0.)); #13811=DIRECTION('ref_axis',(0.,0.,1.)); #13812=DIRECTION('',(0.,-0.820905201785487,0.5710644881986)); #13813=DIRECTION('',(0.,0.571064488198599,0.820905201785487)); #13814=DIRECTION('center_axis',(0.,-0.5710644881986,-0.820905201785487)); #13815=DIRECTION('ref_axis',(0.,0.820905201785487,-0.5710644881986)); #13816=DIRECTION('',(-1.,0.,0.)); #13817=DIRECTION('center_axis',(1.,0.,0.)); #13818=DIRECTION('ref_axis',(0.,0.,-1.)); #13819=DIRECTION('',(0.,-0.571064488198599,-0.820905201785487)); #13820=DIRECTION('center_axis',(-1.,0.,0.)); #13821=DIRECTION('ref_axis',(0.,0.,1.)); #13822=DIRECTION('',(0.,0.5710644881986,0.820905201785487)); #13823=DIRECTION('center_axis',(0.,-0.820905201785487,0.5710644881986)); #13824=DIRECTION('ref_axis',(0.,-0.5710644881986,-0.820905201785487)); #13825=DIRECTION('',(0.,-0.5710644881986,-0.820905201785487)); #13826=DIRECTION('center_axis',(0.,-0.0697564737441255,-0.997564050259824)); #13827=DIRECTION('ref_axis',(0.,0.997564050259824,-0.0697564737441255)); #13828=DIRECTION('',(0.,0.997564050259824,-0.0697564737441255)); #13829=DIRECTION('',(1.,0.,0.)); #13830=DIRECTION('center_axis',(0.,-0.997564050259824,0.0697564737441248)); #13831=DIRECTION('ref_axis',(0.,-0.0697564737441248,-0.997564050259824)); #13832=DIRECTION('',(0.,-0.0697564737441248,-0.997564050259824)); #13833=DIRECTION('center_axis',(1.,0.,0.)); #13834=DIRECTION('ref_axis',(0.,0.,-1.)); #13835=DIRECTION('center_axis',(0.,0.,1.)); #13836=DIRECTION('ref_axis',(1.,0.,0.)); #13837=DIRECTION('center_axis',(0.,0.,-1.)); #13838=DIRECTION('ref_axis',(-0.773342141337903,0.633988905605537,0.)); #13839=DIRECTION('',(0.,-1.,0.)); #13840=DIRECTION('',(-1.,0.,0.)); #13841=DIRECTION('',(0.,1.,0.)); #13842=DIRECTION('center_axis',(0.,0.,-1.)); #13843=DIRECTION('ref_axis',(0.7733421413379,0.633988905605541,0.)); #13844=DIRECTION('',(0.98058067569092,-0.196116135138184,0.)); #13845=DIRECTION('',(-1.,0.,0.)); #13846=DIRECTION('',(0.,-1.,0.)); #13847=DIRECTION('',(-1.,0.,0.)); #13848=DIRECTION('',(0.,1.,0.)); #13849=DIRECTION('',(-1.,0.,0.)); #13850=DIRECTION('',(0.98058067569092,0.196116135138184,0.)); #13851=DIRECTION('center_axis',(-0.196116135138184,0.98058067569092,0.)); #13852=DIRECTION('ref_axis',(0.,0.,1.)); #13853=DIRECTION('',(0.,0.,-1.)); #13854=DIRECTION('',(0.,0.,-1.)); #13855=DIRECTION('',(-0.98058067569092,-0.196116135138184,0.)); #13856=DIRECTION('center_axis',(0.196116135138184,0.98058067569092,0.)); #13857=DIRECTION('ref_axis',(0.,0.,1.)); #13858=DIRECTION('',(0.,0.,1.)); #13859=DIRECTION('',(-0.98058067569092,0.196116135138184,0.)); #13860=DIRECTION('',(0.,0.,1.)); #13861=DIRECTION('center_axis',(0.,1.,0.)); #13862=DIRECTION('ref_axis',(-1.,0.,0.)); #13863=DIRECTION('',(0.,0.,-1.)); #13864=DIRECTION('',(1.,0.,0.)); #13865=DIRECTION('center_axis',(0.,1.,0.)); #13866=DIRECTION('ref_axis',(-1.,0.,0.)); #13867=DIRECTION('',(0.,0.,1.)); #13868=DIRECTION('',(1.,0.,0.)); #13869=DIRECTION('center_axis',(1.,0.,0.)); #13870=DIRECTION('ref_axis',(0.,-1.,0.)); #13871=DIRECTION('',(0.,1.,0.)); #13872=DIRECTION('',(0.,0.,-1.)); #13873=DIRECTION('center_axis',(0.,-1.,0.)); #13874=DIRECTION('ref_axis',(-1.,0.,0.)); #13875=DIRECTION('',(1.,0.,0.)); #13876=DIRECTION('',(0.,0.,-1.)); #13877=DIRECTION('center_axis',(-1.,0.,0.)); #13878=DIRECTION('ref_axis',(0.,1.,0.)); #13879=DIRECTION('',(0.,-1.,0.)); #13880=DIRECTION('center_axis',(0.,0.,1.)); #13881=DIRECTION('ref_axis',(1.,0.,0.)); #13882=DIRECTION('',(0.,0.,-1.)); #13883=DIRECTION('center_axis',(0.,0.,-1.)); #13884=DIRECTION('ref_axis',(1.,0.,0.)); #13885=DIRECTION('',(0.,0.,1.)); #13886=DIRECTION('center_axis',(0.,0.,1.)); #13887=DIRECTION('ref_axis',(1.,0.,0.)); #13888=DIRECTION('center_axis',(1.,0.,0.)); #13889=DIRECTION('ref_axis',(0.,1.,0.)); #13890=DIRECTION('',(0.,1.,0.)); #13891=DIRECTION('',(0.,0.,1.)); #13892=DIRECTION('',(0.,-1.,0.)); #13893=DIRECTION('',(0.,0.,-1.)); #13894=DIRECTION('',(0.,0.,1.)); #13895=DIRECTION('center_axis',(0.,0.,-1.)); #13896=DIRECTION('ref_axis',(0.7733421413379,0.633988905605541,0.)); #13897=DIRECTION('center_axis',(0.,0.,1.)); #13898=DIRECTION('ref_axis',(0.7733421413379,0.633988905605541,0.)); #13899=DIRECTION('center_axis',(0.,0.,1.)); #13900=DIRECTION('ref_axis',(-0.773342141337903,0.633988905605537,0.)); #13901=DIRECTION('center_axis',(0.,0.,1.)); #13902=DIRECTION('ref_axis',(-0.773342141337903,0.633988905605537,0.)); #13903=DIRECTION('',(0.,0.,1.)); #13904=DIRECTION('center_axis',(-1.,0.,0.)); #13905=DIRECTION('ref_axis',(0.,-1.,0.)); #13906=DIRECTION('',(0.,0.,-1.)); #13907=DIRECTION('',(0.,1.,0.)); #13908=DIRECTION('',(0.,0.,-1.)); #13909=DIRECTION('',(0.,-1.,0.)); #13910=DIRECTION('center_axis',(0.,0.,1.)); #13911=DIRECTION('ref_axis',(-0.825722823844771,-0.564076074817765,0.)); #13912=DIRECTION('center_axis',(0.,0.,1.)); #13913=DIRECTION('ref_axis',(-0.825722823844771,-0.564076074817765,0.)); #13914=DIRECTION('center_axis',(0.,0.,1.)); #13915=DIRECTION('ref_axis',(-0.825722823844771,-0.564076074817765,0.)); #13916=DIRECTION('center_axis',(-1.,0.,0.)); #13917=DIRECTION('ref_axis',(0.,-1.,0.)); #13918=DIRECTION('',(0.,0.,-1.)); #13919=DIRECTION('',(0.,-1.,0.)); #13920=DIRECTION('',(0.,0.,1.)); #13921=DIRECTION('',(0.,1.,0.)); #13922=DIRECTION('center_axis',(0.,0.,-1.)); #13923=DIRECTION('ref_axis',(-0.825722823844771,0.564076074817765,0.)); #13924=DIRECTION('center_axis',(0.,0.,1.)); #13925=DIRECTION('ref_axis',(-0.825722823844771,0.564076074817765,0.)); #13926=DIRECTION('center_axis',(0.,0.,1.)); #13927=DIRECTION('ref_axis',(-0.825722823844771,0.564076074817765,0.)); #13928=DIRECTION('center_axis',(-1.,0.,0.)); #13929=DIRECTION('ref_axis',(0.,-1.,0.)); #13930=DIRECTION('',(0.,0.,-1.)); #13931=DIRECTION('',(0.,1.,0.)); #13932=DIRECTION('',(0.,0.,1.)); #13933=DIRECTION('',(0.,-1.,0.)); #13934=DIRECTION('center_axis',(0.,0.,1.)); #13935=DIRECTION('ref_axis',(-0.707106781186548,-0.707106781186548,0.)); #13936=DIRECTION('center_axis',(0.,0.,-1.)); #13937=DIRECTION('ref_axis',(-0.707106781186548,-0.707106781186548,0.)); #13938=DIRECTION('',(0.,0.,-1.)); #13939=DIRECTION('center_axis',(0.,0.,-1.)); #13940=DIRECTION('ref_axis',(-0.707106781186548,-0.707106781186548,0.)); #13941=DIRECTION('center_axis',(0.,1.,0.)); #13942=DIRECTION('ref_axis',(-1.,0.,0.)); #13943=DIRECTION('',(0.,0.,-1.)); #13944=DIRECTION('',(1.,0.,0.)); #13945=DIRECTION('',(0.,0.,1.)); #13946=DIRECTION('',(-1.,0.,0.)); #13947=DIRECTION('center_axis',(0.,0.,1.)); #13948=DIRECTION('ref_axis',(-0.707106781186548,0.707106781186548,0.)); #13949=DIRECTION('center_axis',(0.,0.,-1.)); #13950=DIRECTION('ref_axis',(-0.707106781186548,0.707106781186548,0.)); #13951=DIRECTION('center_axis',(0.,0.,-1.)); #13952=DIRECTION('ref_axis',(-0.707106781186548,0.707106781186548,0.)); #13953=DIRECTION('center_axis',(0.,-1.,0.)); #13954=DIRECTION('ref_axis',(1.,0.,0.)); #13955=DIRECTION('',(0.,0.,1.)); #13956=DIRECTION('',(1.,0.,0.)); #13957=DIRECTION('',(-1.,0.,0.)); #13958=DIRECTION('center_axis',(0.,0.,1.)); #13959=DIRECTION('ref_axis',(0.707106781186548,-0.707106781186548,0.)); #13960=DIRECTION('center_axis',(0.,0.,-1.)); #13961=DIRECTION('ref_axis',(0.707106781186548,-0.707106781186548,0.)); #13962=DIRECTION('',(0.,0.,-1.)); #13963=DIRECTION('center_axis',(0.,0.,-1.)); #13964=DIRECTION('ref_axis',(0.707106781186548,-0.707106781186548,0.)); #13965=DIRECTION('center_axis',(1.,0.,0.)); #13966=DIRECTION('ref_axis',(0.,1.,0.)); #13967=DIRECTION('',(0.,0.,1.)); #13968=DIRECTION('',(0.,1.,0.)); #13969=DIRECTION('',(0.,-1.,0.)); #13970=DIRECTION('center_axis',(0.,0.,1.)); #13971=DIRECTION('ref_axis',(0.707106781186548,0.707106781186548,0.)); #13972=DIRECTION('center_axis',(0.,0.,-1.)); #13973=DIRECTION('ref_axis',(0.707106781186548,0.707106781186548,0.)); #13974=DIRECTION('center_axis',(0.,0.,-1.)); #13975=DIRECTION('ref_axis',(0.707106781186548,0.707106781186548,0.)); #13976=DIRECTION('center_axis',(0.,0.,1.)); #13977=DIRECTION('ref_axis',(0.825722823844771,0.564076074817765,0.)); #13978=DIRECTION('center_axis',(0.,0.,1.)); #13979=DIRECTION('ref_axis',(0.825722823844771,0.564076074817765,0.)); #13980=DIRECTION('',(0.,0.,1.)); #13981=DIRECTION('center_axis',(0.,0.,1.)); #13982=DIRECTION('ref_axis',(0.825722823844771,0.564076074817765,0.)); #13983=DIRECTION('',(0.,0.,-1.)); #13984=DIRECTION('center_axis',(0.,0.,1.)); #13985=DIRECTION('ref_axis',(1.,0.,0.)); #13986=DIRECTION('',(0.,0.,-1.)); #13987=DIRECTION('center_axis',(0.,0.,-1.)); #13988=DIRECTION('ref_axis',(1.,0.,0.)); #13989=DIRECTION('center_axis',(0.,0.,1.)); #13990=DIRECTION('ref_axis',(1.,0.,0.)); #13991=DIRECTION('center_axis',(0.,0.,-1.)); #13992=DIRECTION('ref_axis',(0.825722823844771,-0.564076074817765,0.)); #13993=DIRECTION('center_axis',(0.,0.,1.)); #13994=DIRECTION('ref_axis',(0.825722823844771,-0.564076074817765,0.)); #13995=DIRECTION('center_axis',(0.,0.,1.)); #13996=DIRECTION('ref_axis',(0.825722823844771,-0.564076074817765,0.)); #13997=DIRECTION('center_axis',(1.,0.,0.)); #13998=DIRECTION('ref_axis',(0.,1.,0.)); #13999=DIRECTION('',(0.,0.,1.)); #14000=DIRECTION('',(0.,-1.,0.)); #14001=DIRECTION('',(0.,1.,0.)); #14002=DIRECTION('center_axis',(0.,0.,-1.)); #14003=DIRECTION('ref_axis',(0.707106781186548,-0.707106781186548,0.)); #14004=DIRECTION('center_axis',(0.,0.,1.)); #14005=DIRECTION('ref_axis',(0.707106781186548,-0.707106781186548,0.)); #14006=DIRECTION('center_axis',(0.,0.,1.)); #14007=DIRECTION('ref_axis',(0.707106781186548,-0.707106781186548,0.)); #14008=DIRECTION('',(0.,0.,-1.)); #14009=DIRECTION('center_axis',(0.,0.,-1.)); #14010=DIRECTION('ref_axis',(-1.,0.,0.)); #14011=DIRECTION('center_axis',(0.,0.,1.)); #14012=DIRECTION('ref_axis',(-0.707106781186548,-0.707106781186548,0.)); #14013=DIRECTION('',(-1.,0.,0.)); #14014=DIRECTION('center_axis',(0.,-1.,0.)); #14015=DIRECTION('ref_axis',(1.,0.,0.)); #14016=DIRECTION('',(0.,0.,1.)); #14017=DIRECTION('',(1.,0.,0.)); #14018=DIRECTION('center_axis',(0.,0.,-1.)); #14019=DIRECTION('ref_axis',(-0.707106781186548,-0.707106781186548,0.)); #14020=DIRECTION('center_axis',(0.,0.,1.)); #14021=DIRECTION('ref_axis',(-0.707106781186548,-0.707106781186548,0.)); #14022=DIRECTION('center_axis',(0.,1.,0.)); #14023=DIRECTION('ref_axis',(1.,0.,0.)); #14024=DIRECTION('',(1.,0.,0.)); #14025=DIRECTION('center_axis',(0.,0.,1.)); #14026=DIRECTION('ref_axis',(1.,0.,0.)); #14027=DIRECTION('center_axis',(0.,-1.,0.)); #14028=DIRECTION('ref_axis',(-1.,0.,0.)); #14029=DIRECTION('',(0.,0.,1.)); #14030=DIRECTION('',(1.,0.,0.)); #14031=DIRECTION('',(0.,0.,-1.)); #14032=DIRECTION('',(-1.,0.,0.)); #14033=DIRECTION('center_axis',(0.,-0.5710644881986,-0.820905201785487)); #14034=DIRECTION('ref_axis',(1.,0.,0.)); #14035=DIRECTION('',(-1.,0.,0.)); #14036=DIRECTION('',(0.,-0.820905201785487,0.5710644881986)); #14037=DIRECTION('',(1.,0.,0.)); #14038=DIRECTION('',(0.,-0.820905201785487,0.5710644881986)); #14039=DIRECTION('center_axis',(0.,0.5710644881986,0.820905201785487)); #14040=DIRECTION('ref_axis',(-1.,0.,0.)); #14041=DIRECTION('',(1.,0.,0.)); #14042=DIRECTION('',(0.,-0.820905201785487,0.5710644881986)); #14043=DIRECTION('',(-1.,0.,0.)); #14044=DIRECTION('',(0.,-0.820905201785487,0.5710644881986)); #14045=DIRECTION('center_axis',(0.,0.820905201785487,-0.5710644881986)); #14046=DIRECTION('ref_axis',(0.,0.5710644881986,0.820905201785487)); #14047=DIRECTION('',(0.,0.5710644881986,0.820905201785487)); #14048=DIRECTION('',(0.,0.571064488198599,0.820905201785487)); #14049=DIRECTION('',(1.,0.,0.)); #14050=DIRECTION('',(0.,0.5710644881986,0.820905201785487)); #14051=DIRECTION('',(1.,0.,0.)); #14052=DIRECTION('',(0.,-0.5710644881986,-0.820905201785487)); #14053=DIRECTION('',(0.,-0.571064488198599,-0.820905201785487)); #14054=DIRECTION('',(1.,0.,0.)); #14055=DIRECTION('',(0.,-0.5710644881986,-0.820905201785487)); #14056=DIRECTION('',(-1.,0.,0.)); #14057=DIRECTION('center_axis',(1.,0.,0.)); #14058=DIRECTION('ref_axis',(0.,-0.463106635561077,0.886302569159821)); #14059=DIRECTION('center_axis',(-1.,0.,0.)); #14060=DIRECTION('ref_axis',(0.,-0.463106635561077,0.886302569159821)); #14061=DIRECTION('',(1.,0.,0.)); #14062=DIRECTION('center_axis',(1.,0.,0.)); #14063=DIRECTION('ref_axis',(0.,-0.463106635561077,0.886302569159821)); #14064=DIRECTION('center_axis',(0.,0.,-1.)); #14065=DIRECTION('ref_axis',(0.,1.,0.)); #14066=DIRECTION('',(0.,-1.,0.)); #14067=DIRECTION('',(0.,1.,0.)); #14068=DIRECTION('center_axis',(-1.,0.,0.)); #14069=DIRECTION('ref_axis',(0.,0.431893009921604,-0.901924846082453)); #14070=DIRECTION('center_axis',(1.,0.,0.)); #14071=DIRECTION('ref_axis',(0.,0.431893009921604,-0.901924846082453)); #14072=DIRECTION('center_axis',(-1.,0.,0.)); #14073=DIRECTION('ref_axis',(0.,0.431893009921604,-0.901924846082453)); #14074=DIRECTION('',(-1.,0.,0.)); #14075=DIRECTION('center_axis',(-1.,0.,0.)); #14076=DIRECTION('ref_axis',(0.,0.,1.)); #14077=DIRECTION('',(0.,-0.997564050259824,0.0697564737441255)); #14078=DIRECTION('',(0.,0.0697564737441248,0.997564050259824)); #14079=DIRECTION('',(0.,0.997564050259824,-0.0697564737441255)); #14080=DIRECTION('center_axis',(-1.,0.,0.)); #14081=DIRECTION('ref_axis',(0.,0.431893009921604,-0.901924846082453)); #14082=DIRECTION('',(0.,0.5710644881986,0.820905201785487)); #14083=DIRECTION('center_axis',(1.,0.,0.)); #14084=DIRECTION('ref_axis',(0.,0.431893009921604,-0.901924846082453)); #14085=DIRECTION('',(1.,0.,0.)); #14086=DIRECTION('center_axis',(1.,0.,0.)); #14087=DIRECTION('ref_axis',(0.,0.431893009921604,-0.901924846082453)); #14088=DIRECTION('',(-1.,0.,0.)); #14089=DIRECTION('center_axis',(0.,0.0697564737441255,0.997564050259824)); #14090=DIRECTION('ref_axis',(0.,-0.997564050259824,0.0697564737441255)); #14091=DIRECTION('',(1.,0.,0.)); #14092=DIRECTION('',(0.,-0.997564050259824,0.0697564737441255)); #14093=DIRECTION('center_axis',(1.,0.,0.)); #14094=DIRECTION('ref_axis',(0.,-0.463106635561077,0.886302569159821)); #14095=DIRECTION('center_axis',(-1.,0.,0.)); #14096=DIRECTION('ref_axis',(0.,-0.463106635561077,0.886302569159821)); #14097=DIRECTION('',(-1.,0.,0.)); #14098=DIRECTION('center_axis',(1.,0.,0.)); #14099=DIRECTION('ref_axis',(0.,-0.463106635561077,0.886302569159821)); #14100=DIRECTION('',(1.,0.,0.)); #14101=DIRECTION('center_axis',(0.,0.,1.)); #14102=DIRECTION('ref_axis',(0.,-1.,0.)); #14103=DIRECTION('',(0.,-1.,0.)); #14104=DIRECTION('',(0.,1.,0.)); #14105=DIRECTION('center_axis',(1.,0.,0.)); #14106=DIRECTION('ref_axis',(0.,0.,-1.)); #14107=DIRECTION('',(0.,-0.571064488198599,-0.820905201785487)); #14108=DIRECTION('center_axis',(0.,-0.5710644881986,-0.820905201785487)); #14109=DIRECTION('ref_axis',(0.,0.820905201785487,-0.5710644881986)); #14110=DIRECTION('',(0.,-0.820905201785487,0.5710644881986)); #14111=DIRECTION('',(0.,0.820905201785487,-0.5710644881986)); #14112=DIRECTION('',(-1.,0.,0.)); #14113=DIRECTION('center_axis',(0.,0.5710644881986,0.820905201785487)); #14114=DIRECTION('ref_axis',(0.,-0.820905201785487,0.5710644881986)); #14115=DIRECTION('',(0.,-0.820905201785487,0.5710644881986)); #14116=DIRECTION('',(0.,0.820905201785487,-0.5710644881986)); #14117=DIRECTION('',(1.,0.,0.)); #14118=DIRECTION('center_axis',(-1.,0.,0.)); #14119=DIRECTION('ref_axis',(0.,0.,1.)); #14120=DIRECTION('',(0.,0.571064488198599,0.820905201785487)); #14121=DIRECTION('center_axis',(1.,0.,0.)); #14122=DIRECTION('ref_axis',(0.,0.,-1.)); #14123=DIRECTION('',(0.,-0.571064488198599,-0.820905201785487)); #14124=DIRECTION('center_axis',(-1.,0.,0.)); #14125=DIRECTION('ref_axis',(0.,0.,1.)); #14126=DIRECTION('',(0.,0.5710644881986,0.820905201785487)); #14127=DIRECTION('center_axis',(0.,-0.820905201785487,0.5710644881986)); #14128=DIRECTION('ref_axis',(0.,-0.5710644881986,-0.820905201785487)); #14129=DIRECTION('',(0.,-0.5710644881986,-0.820905201785487)); #14130=DIRECTION('center_axis',(0.,-0.0697564737441255,-0.997564050259824)); #14131=DIRECTION('ref_axis',(0.,0.997564050259824,-0.0697564737441255)); #14132=DIRECTION('',(0.,0.997564050259824,-0.0697564737441255)); #14133=DIRECTION('',(1.,0.,0.)); #14134=DIRECTION('center_axis',(0.,-0.997564050259824,0.0697564737441248)); #14135=DIRECTION('ref_axis',(0.,-0.0697564737441248,-0.997564050259824)); #14136=DIRECTION('',(0.,-0.0697564737441248,-0.997564050259824)); #14137=DIRECTION('center_axis',(1.,0.,0.)); #14138=DIRECTION('ref_axis',(0.,0.,-1.)); #14139=DIRECTION('center_axis',(1.,0.,0.)); #14140=DIRECTION('ref_axis',(0.,0.,-1.)); #14141=DIRECTION('center_axis',(-1.,0.,0.)); #14142=DIRECTION('ref_axis',(0.,0.431893009921604,-0.901924846082453)); #14143=DIRECTION('',(0.,0.5710644881986,0.820905201785487)); #14144=DIRECTION('',(0.,-0.820905201785487,0.5710644881986)); #14145=DIRECTION('',(0.,-0.5710644881986,-0.820905201785487)); #14146=DIRECTION('center_axis',(1.,0.,0.)); #14147=DIRECTION('ref_axis',(0.,0.431893009921604,-0.901924846082453)); #14148=DIRECTION('',(0.,-0.997564050259824,0.0697564737441255)); #14149=DIRECTION('',(0.,-0.0697564737441248,-0.997564050259824)); #14150=DIRECTION('',(0.,0.997564050259824,-0.0697564737441255)); #14151=DIRECTION('center_axis',(0.,-0.997564050259824,0.0697564737441248)); #14152=DIRECTION('ref_axis',(0.,-0.0697564737441248,-0.997564050259824)); #14153=DIRECTION('',(1.,0.,0.)); #14154=DIRECTION('',(1.,0.,0.)); #14155=DIRECTION('',(0.,0.0697564737441248,0.997564050259824)); #14156=DIRECTION('center_axis',(0.,-0.0697564737441255,-0.997564050259824)); #14157=DIRECTION('ref_axis',(0.,0.997564050259824,-0.0697564737441255)); #14158=DIRECTION('',(-1.,0.,0.)); #14159=DIRECTION('',(0.,-0.997564050259824,0.0697564737441255)); #14160=DIRECTION('center_axis',(0.,-0.820905201785487,0.5710644881986)); #14161=DIRECTION('ref_axis',(0.,-0.5710644881986,-0.820905201785487)); #14162=DIRECTION('',(-1.,0.,0.)); #14163=DIRECTION('',(-1.,0.,0.)); #14164=DIRECTION('',(0.,-0.571064488198599,-0.820905201785487)); #14165=DIRECTION('',(1.,0.,0.)); #14166=DIRECTION('',(0.,-0.5710644881986,-0.820905201785487)); #14167=DIRECTION('',(1.,0.,0.)); #14168=DIRECTION('',(0.,0.5710644881986,0.820905201785487)); #14169=DIRECTION('',(1.,0.,0.)); #14170=DIRECTION('',(0.,0.571064488198599,0.820905201785487)); #14171=DIRECTION('',(-1.,0.,0.)); #14172=DIRECTION('',(0.,0.5710644881986,0.820905201785487)); #14173=DIRECTION('center_axis',(-1.,0.,0.)); #14174=DIRECTION('ref_axis',(0.,0.,1.)); #14175=DIRECTION('center_axis',(1.,0.,0.)); #14176=DIRECTION('ref_axis',(0.,-0.463106635561077,0.886302569159821)); #14177=DIRECTION('',(0.,1.,0.)); #14178=DIRECTION('',(0.,0.,1.)); #14179=DIRECTION('',(0.,-1.,0.)); #14180=DIRECTION('center_axis',(-1.,0.,0.)); #14181=DIRECTION('ref_axis',(0.,-0.463106635561077,0.886302569159821)); #14182=DIRECTION('',(0.,-0.5710644881986,-0.820905201785487)); #14183=DIRECTION('',(0.,-0.820905201785487,0.5710644881986)); #14184=DIRECTION('center_axis',(1.,0.,0.)); #14185=DIRECTION('ref_axis',(0.,0.,-1.)); #14186=DIRECTION('',(0.,0.820905201785487,-0.5710644881986)); #14187=DIRECTION('',(0.,0.571064488198599,0.820905201785487)); #14188=DIRECTION('',(0.,-0.820905201785487,0.5710644881986)); #14189=DIRECTION('center_axis',(0.,-0.5710644881986,-0.820905201785487)); #14190=DIRECTION('ref_axis',(0.,0.820905201785487,-0.5710644881986)); #14191=DIRECTION('',(0.,0.820905201785487,-0.5710644881986)); #14192=DIRECTION('',(0.,-0.820905201785487,0.5710644881986)); #14193=DIRECTION('',(1.,0.,0.)); #14194=DIRECTION('center_axis',(-1.,0.,0.)); #14195=DIRECTION('ref_axis',(0.,0.,1.)); #14196=DIRECTION('',(0.,0.820905201785487,-0.5710644881986)); #14197=DIRECTION('',(0.,-0.571064488198599,-0.820905201785487)); #14198=DIRECTION('center_axis',(0.,0.5710644881986,0.820905201785487)); #14199=DIRECTION('ref_axis',(0.,-0.820905201785487,0.5710644881986)); #14200=DIRECTION('',(1.,0.,0.)); #14201=DIRECTION('center_axis',(0.,0.5710644881986,0.820905201785487)); #14202=DIRECTION('ref_axis',(0.,-0.820905201785487,0.5710644881986)); #14203=DIRECTION('',(0.,0.820905201785487,-0.5710644881986)); #14204=DIRECTION('',(1.,0.,0.)); #14205=DIRECTION('center_axis',(0.,-0.5710644881986,-0.820905201785487)); #14206=DIRECTION('ref_axis',(0.,0.820905201785487,-0.5710644881986)); #14207=DIRECTION('',(1.,0.,0.)); #14208=DIRECTION('center_axis',(1.,0.,0.)); #14209=DIRECTION('ref_axis',(0.,0.,-1.)); #14210=DIRECTION('center_axis',(-1.,0.,0.)); #14211=DIRECTION('ref_axis',(0.,-0.463106635561077,0.886302569159821)); #14212=DIRECTION('',(0.,0.5710644881986,0.820905201785487)); #14213=DIRECTION('center_axis',(1.,0.,0.)); #14214=DIRECTION('ref_axis',(0.,-0.463106635561077,0.886302569159821)); #14215=DIRECTION('',(0.,1.,0.)); #14216=DIRECTION('',(0.,0.,-1.)); #14217=DIRECTION('',(0.,-1.,0.)); #14218=DIRECTION('center_axis',(0.,0.,1.)); #14219=DIRECTION('ref_axis',(0.,-1.,0.)); #14220=DIRECTION('',(-1.,0.,0.)); #14221=DIRECTION('',(1.,0.,0.)); #14222=DIRECTION('center_axis',(1.,0.,0.)); #14223=DIRECTION('ref_axis',(0.,-0.463106635561077,0.886302569159821)); #14224=DIRECTION('center_axis',(0.,0.0697564737441255,0.997564050259824)); #14225=DIRECTION('ref_axis',(0.,-0.997564050259824,0.0697564737441255)); #14226=DIRECTION('',(1.,0.,0.)); #14227=DIRECTION('',(0.,0.997564050259824,-0.0697564737441255)); #14228=DIRECTION('center_axis',(1.,0.,0.)); #14229=DIRECTION('ref_axis',(0.,0.431893009921604,-0.901924846082453)); #14230=DIRECTION('center_axis',(-1.,0.,0.)); #14231=DIRECTION('ref_axis',(0.,0.431893009921604,-0.901924846082453)); #14232=DIRECTION('center_axis',(-1.,0.,0.)); #14233=DIRECTION('ref_axis',(0.,0.,1.)); #14234=DIRECTION('center_axis',(1.,0.,0.)); #14235=DIRECTION('ref_axis',(0.,0.431893009921604,-0.901924846082453)); #14236=DIRECTION('',(0.,-0.5710644881986,-0.820905201785487)); #14237=DIRECTION('center_axis',(0.,0.820905201785487,-0.5710644881986)); #14238=DIRECTION('ref_axis',(0.,0.5710644881986,0.820905201785487)); #14239=DIRECTION('',(-1.,0.,0.)); #14240=DIRECTION('',(1.,0.,0.)); #14241=DIRECTION('center_axis',(-1.,0.,0.)); #14242=DIRECTION('ref_axis',(0.,0.431893009921604,-0.901924846082453)); #14243=DIRECTION('center_axis',(0.,0.,-1.)); #14244=DIRECTION('ref_axis',(0.,1.,0.)); #14245=DIRECTION('',(1.,0.,0.)); #14246=DIRECTION('',(-1.,0.,0.)); #14247=DIRECTION('center_axis',(1.,0.,0.)); #14248=DIRECTION('ref_axis',(0.,-0.463106635561077,0.886302569159821)); #14249=DIRECTION('center_axis',(0.,-1.,0.)); #14250=DIRECTION('ref_axis',(-1.,0.,0.)); #14251=DIRECTION('center_axis',(0.,-1.,0.)); #14252=DIRECTION('ref_axis',(-1.,0.,0.)); #14253=DIRECTION('',(0.,0.,1.)); #14254=DIRECTION('',(1.,0.,0.)); #14255=DIRECTION('',(0.,0.,-1.)); #14256=DIRECTION('',(-1.,0.,0.)); #14257=DIRECTION('center_axis',(1.,0.,0.)); #14258=DIRECTION('ref_axis',(0.,-0.463106635561077,0.886302569159821)); #14259=DIRECTION('center_axis',(-1.,0.,0.)); #14260=DIRECTION('ref_axis',(0.,-0.463106635561077,0.886302569159821)); #14261=DIRECTION('',(1.,0.,0.)); #14262=DIRECTION('center_axis',(1.,0.,0.)); #14263=DIRECTION('ref_axis',(0.,-0.463106635561077,0.886302569159821)); #14264=DIRECTION('',(-1.,0.,0.)); #14265=DIRECTION('center_axis',(0.,0.,-1.)); #14266=DIRECTION('ref_axis',(0.,1.,0.)); #14267=DIRECTION('',(0.,-1.,0.)); #14268=DIRECTION('',(0.,1.,0.)); #14269=DIRECTION('center_axis',(-1.,0.,0.)); #14270=DIRECTION('ref_axis',(0.,0.431893009921604,-0.901924846082453)); #14271=DIRECTION('center_axis',(1.,0.,0.)); #14272=DIRECTION('ref_axis',(0.,0.431893009921604,-0.901924846082453)); #14273=DIRECTION('',(1.,0.,0.)); #14274=DIRECTION('center_axis',(-1.,0.,0.)); #14275=DIRECTION('ref_axis',(0.,0.431893009921604,-0.901924846082453)); #14276=DIRECTION('',(-1.,0.,0.)); #14277=DIRECTION('center_axis',(0.,0.820905201785487,-0.5710644881986)); #14278=DIRECTION('ref_axis',(0.,0.5710644881986,0.820905201785487)); #14279=DIRECTION('',(0.,0.5710644881986,0.820905201785487)); #14280=DIRECTION('',(1.,0.,0.)); #14281=DIRECTION('',(0.,0.571064488198599,0.820905201785487)); #14282=DIRECTION('',(1.,0.,0.)); #14283=DIRECTION('',(0.,0.5710644881986,0.820905201785487)); #14284=DIRECTION('',(0.,-0.5710644881986,-0.820905201785487)); #14285=DIRECTION('',(1.,0.,0.)); #14286=DIRECTION('',(0.,-0.571064488198599,-0.820905201785487)); #14287=DIRECTION('',(1.,0.,0.)); #14288=DIRECTION('',(0.,-0.5710644881986,-0.820905201785487)); #14289=DIRECTION('center_axis',(-1.,0.,0.)); #14290=DIRECTION('ref_axis',(0.,0.,1.)); #14291=DIRECTION('',(0.,-0.997564050259824,0.0697564737441255)); #14292=DIRECTION('',(0.,0.0697564737441248,0.997564050259824)); #14293=DIRECTION('',(0.,0.997564050259824,-0.0697564737441255)); #14294=DIRECTION('center_axis',(-1.,0.,0.)); #14295=DIRECTION('ref_axis',(0.,0.431893009921604,-0.901924846082453)); #14296=DIRECTION('',(0.,0.5710644881986,0.820905201785487)); #14297=DIRECTION('',(0.,0.820905201785487,-0.5710644881986)); #14298=DIRECTION('center_axis',(1.,0.,0.)); #14299=DIRECTION('ref_axis',(0.,0.431893009921604,-0.901924846082453)); #14300=DIRECTION('',(1.,0.,0.)); #14301=DIRECTION('center_axis',(1.,0.,0.)); #14302=DIRECTION('ref_axis',(0.,0.431893009921604,-0.901924846082453)); #14303=DIRECTION('',(-1.,0.,0.)); #14304=DIRECTION('center_axis',(0.,0.0697564737441255,0.997564050259824)); #14305=DIRECTION('ref_axis',(0.,-0.997564050259824,0.0697564737441255)); #14306=DIRECTION('',(1.,0.,0.)); #14307=DIRECTION('',(0.,-0.997564050259824,0.0697564737441255)); #14308=DIRECTION('center_axis',(1.,0.,0.)); #14309=DIRECTION('ref_axis',(0.,-0.463106635561077,0.886302569159821)); #14310=DIRECTION('center_axis',(-1.,0.,0.)); #14311=DIRECTION('ref_axis',(0.,-0.463106635561077,0.886302569159821)); #14312=DIRECTION('',(-1.,0.,0.)); #14313=DIRECTION('center_axis',(1.,0.,0.)); #14314=DIRECTION('ref_axis',(0.,-0.463106635561077,0.886302569159821)); #14315=DIRECTION('',(1.,0.,0.)); #14316=DIRECTION('center_axis',(0.,0.,1.)); #14317=DIRECTION('ref_axis',(0.,-1.,0.)); #14318=DIRECTION('',(0.,-1.,0.)); #14319=DIRECTION('',(0.,1.,0.)); #14320=DIRECTION('center_axis',(1.,0.,0.)); #14321=DIRECTION('ref_axis',(0.,0.,-1.)); #14322=DIRECTION('',(0.,-0.5710644881986,-0.820905201785487)); #14323=DIRECTION('',(0.,0.820905201785487,-0.5710644881986)); #14324=DIRECTION('center_axis',(0.,-0.5710644881986,-0.820905201785487)); #14325=DIRECTION('ref_axis',(0.,0.820905201785487,-0.5710644881986)); #14326=DIRECTION('',(0.,-0.820905201785487,0.5710644881986)); #14327=DIRECTION('',(0.,0.820905201785487,-0.5710644881986)); #14328=DIRECTION('',(-1.,0.,0.)); #14329=DIRECTION('center_axis',(0.,0.5710644881986,0.820905201785487)); #14330=DIRECTION('ref_axis',(0.,-0.820905201785487,0.5710644881986)); #14331=DIRECTION('',(1.,0.,0.)); #14332=DIRECTION('',(0.,-0.820905201785487,0.5710644881986)); #14333=DIRECTION('center_axis',(0.,0.5710644881986,0.820905201785487)); #14334=DIRECTION('ref_axis',(0.,-0.820905201785487,0.5710644881986)); #14335=DIRECTION('',(0.,-0.820905201785487,0.5710644881986)); #14336=DIRECTION('',(0.,0.820905201785487,-0.5710644881986)); #14337=DIRECTION('',(1.,0.,0.)); #14338=DIRECTION('center_axis',(-1.,0.,0.)); #14339=DIRECTION('ref_axis',(0.,0.,1.)); #14340=DIRECTION('',(0.,-0.820905201785487,0.5710644881986)); #14341=DIRECTION('',(0.,0.571064488198599,0.820905201785487)); #14342=DIRECTION('center_axis',(0.,-0.5710644881986,-0.820905201785487)); #14343=DIRECTION('ref_axis',(0.,0.820905201785487,-0.5710644881986)); #14344=DIRECTION('',(-1.,0.,0.)); #14345=DIRECTION('center_axis',(1.,0.,0.)); #14346=DIRECTION('ref_axis',(0.,0.,-1.)); #14347=DIRECTION('',(0.,-0.571064488198599,-0.820905201785487)); #14348=DIRECTION('center_axis',(-1.,0.,0.)); #14349=DIRECTION('ref_axis',(0.,0.,1.)); #14350=DIRECTION('',(0.,0.5710644881986,0.820905201785487)); #14351=DIRECTION('center_axis',(0.,-0.820905201785487,0.5710644881986)); #14352=DIRECTION('ref_axis',(0.,-0.5710644881986,-0.820905201785487)); #14353=DIRECTION('',(0.,-0.5710644881986,-0.820905201785487)); #14354=DIRECTION('center_axis',(0.,-0.0697564737441255,-0.997564050259824)); #14355=DIRECTION('ref_axis',(0.,0.997564050259824,-0.0697564737441255)); #14356=DIRECTION('',(0.,0.997564050259824,-0.0697564737441255)); #14357=DIRECTION('',(1.,0.,0.)); #14358=DIRECTION('center_axis',(0.,-0.997564050259824,0.0697564737441248)); #14359=DIRECTION('ref_axis',(0.,-0.0697564737441248,-0.997564050259824)); #14360=DIRECTION('',(0.,-0.0697564737441248,-0.997564050259824)); #14361=DIRECTION('center_axis',(1.,0.,0.)); #14362=DIRECTION('ref_axis',(0.,0.,-1.)); #14363=DIRECTION('center_axis',(1.,0.,0.)); #14364=DIRECTION('ref_axis',(0.,0.,-1.)); #14365=DIRECTION('center_axis',(-1.,0.,0.)); #14366=DIRECTION('ref_axis',(0.,0.431893009921604,-0.901924846082453)); #14367=DIRECTION('',(0.,0.5710644881986,0.820905201785487)); #14368=DIRECTION('',(0.,0.820905201785487,-0.5710644881986)); #14369=DIRECTION('',(0.,-0.571064488198599,-0.820905201785487)); #14370=DIRECTION('center_axis',(1.,0.,0.)); #14371=DIRECTION('ref_axis',(0.,0.431893009921604,-0.901924846082453)); #14372=DIRECTION('',(0.,-0.997564050259824,0.0697564737441255)); #14373=DIRECTION('',(0.,-0.0697564737441248,-0.997564050259824)); #14374=DIRECTION('',(0.,0.997564050259824,-0.0697564737441255)); #14375=DIRECTION('center_axis',(0.,-0.997564050259824,0.0697564737441248)); #14376=DIRECTION('ref_axis',(0.,-0.0697564737441248,-0.997564050259824)); #14377=DIRECTION('',(1.,0.,0.)); #14378=DIRECTION('',(1.,0.,0.)); #14379=DIRECTION('',(0.,0.0697564737441248,0.997564050259824)); #14380=DIRECTION('center_axis',(0.,-0.0697564737441255,-0.997564050259824)); #14381=DIRECTION('ref_axis',(0.,0.997564050259824,-0.0697564737441255)); #14382=DIRECTION('',(-1.,0.,0.)); #14383=DIRECTION('',(0.,-0.997564050259824,0.0697564737441255)); #14384=DIRECTION('center_axis',(0.,-0.820905201785487,0.5710644881986)); #14385=DIRECTION('ref_axis',(0.,-0.5710644881986,-0.820905201785487)); #14386=DIRECTION('',(-1.,0.,0.)); #14387=DIRECTION('',(0.,0.571064488198599,0.820905201785487)); #14388=DIRECTION('',(-1.,0.,0.)); #14389=DIRECTION('',(0.,0.5710644881986,0.820905201785487)); #14390=DIRECTION('',(-1.,0.,0.)); #14391=DIRECTION('',(1.,0.,0.)); #14392=DIRECTION('',(0.,-0.571064488198599,-0.820905201785487)); #14393=DIRECTION('',(1.,0.,0.)); #14394=DIRECTION('',(0.,-0.5710644881986,-0.820905201785487)); #14395=DIRECTION('',(1.,0.,0.)); #14396=DIRECTION('',(0.,0.571064488198599,0.820905201785487)); #14397=DIRECTION('center_axis',(-1.,0.,0.)); #14398=DIRECTION('ref_axis',(0.,0.,1.)); #14399=DIRECTION('center_axis',(1.,0.,0.)); #14400=DIRECTION('ref_axis',(0.,-0.463106635561077,0.886302569159821)); #14401=DIRECTION('',(0.,1.,0.)); #14402=DIRECTION('',(0.,0.,1.)); #14403=DIRECTION('',(0.,-1.,0.)); #14404=DIRECTION('center_axis',(-1.,0.,0.)); #14405=DIRECTION('ref_axis',(0.,-0.463106635561077,0.886302569159821)); #14406=DIRECTION('',(0.,-0.5710644881986,-0.820905201785487)); #14407=DIRECTION('',(0.,-0.820905201785487,0.5710644881986)); #14408=DIRECTION('center_axis',(0.,-0.5710644881986,-0.820905201785487)); #14409=DIRECTION('ref_axis',(0.,0.820905201785487,-0.5710644881986)); #14410=DIRECTION('',(0.,0.820905201785487,-0.5710644881986)); #14411=DIRECTION('',(0.,-0.820905201785487,0.5710644881986)); #14412=DIRECTION('',(1.,0.,0.)); #14413=DIRECTION('center_axis',(0.,0.5710644881986,0.820905201785487)); #14414=DIRECTION('ref_axis',(0.,-0.820905201785487,0.5710644881986)); #14415=DIRECTION('',(0.,0.820905201785487,-0.5710644881986)); #14416=DIRECTION('',(0.,-0.820905201785487,0.5710644881986)); #14417=DIRECTION('',(1.,0.,0.)); #14418=DIRECTION('center_axis',(1.,0.,0.)); #14419=DIRECTION('ref_axis',(0.,0.,-1.)); #14420=DIRECTION('center_axis',(-1.,0.,0.)); #14421=DIRECTION('ref_axis',(0.,-0.463106635561077,0.886302569159821)); #14422=DIRECTION('',(0.,0.5710644881986,0.820905201785487)); #14423=DIRECTION('center_axis',(1.,0.,0.)); #14424=DIRECTION('ref_axis',(0.,-0.463106635561077,0.886302569159821)); #14425=DIRECTION('',(0.,1.,0.)); #14426=DIRECTION('',(0.,0.,-1.)); #14427=DIRECTION('',(0.,-1.,0.)); #14428=DIRECTION('center_axis',(0.,0.,1.)); #14429=DIRECTION('ref_axis',(0.,-1.,0.)); #14430=DIRECTION('',(-1.,0.,0.)); #14431=DIRECTION('',(1.,0.,0.)); #14432=DIRECTION('center_axis',(1.,0.,0.)); #14433=DIRECTION('ref_axis',(0.,-0.463106635561077,0.886302569159821)); #14434=DIRECTION('center_axis',(0.,0.0697564737441255,0.997564050259824)); #14435=DIRECTION('ref_axis',(0.,-0.997564050259824,0.0697564737441255)); #14436=DIRECTION('',(1.,0.,0.)); #14437=DIRECTION('',(0.,0.997564050259824,-0.0697564737441255)); #14438=DIRECTION('center_axis',(1.,0.,0.)); #14439=DIRECTION('ref_axis',(0.,0.431893009921604,-0.901924846082453)); #14440=DIRECTION('center_axis',(-1.,0.,0.)); #14441=DIRECTION('ref_axis',(0.,0.431893009921604,-0.901924846082453)); #14442=DIRECTION('center_axis',(-1.,0.,0.)); #14443=DIRECTION('ref_axis',(0.,0.,1.)); #14444=DIRECTION('center_axis',(1.,0.,0.)); #14445=DIRECTION('ref_axis',(0.,0.431893009921604,-0.901924846082453)); #14446=DIRECTION('',(0.,-0.5710644881986,-0.820905201785487)); #14447=DIRECTION('center_axis',(-1.,0.,0.)); #14448=DIRECTION('ref_axis',(0.,0.431893009921604,-0.901924846082453)); #14449=DIRECTION('',(1.,0.,0.)); #14450=DIRECTION('center_axis',(0.,0.,-1.)); #14451=DIRECTION('ref_axis',(0.,1.,0.)); #14452=DIRECTION('',(1.,0.,0.)); #14453=DIRECTION('',(-1.,0.,0.)); #14454=DIRECTION('center_axis',(1.,0.,0.)); #14455=DIRECTION('ref_axis',(0.,-0.463106635561077,0.886302569159821)); #14456=DIRECTION('',(-1.,0.,0.)); #14457=DIRECTION('center_axis',(0.,0.820905201785487,-0.5710644881986)); #14458=DIRECTION('ref_axis',(0.,0.5710644881986,0.820905201785487)); #14459=DIRECTION('',(1.,0.,0.)); #14460=DIRECTION('',(0.,0.571064488198599,0.820905201785487)); #14461=DIRECTION('',(-1.,0.,0.)); #14462=DIRECTION('',(0.,-0.571064488198599,-0.820905201785487)); #14463=DIRECTION('center_axis',(1.,0.,0.)); #14464=DIRECTION('ref_axis',(0.,0.,-1.)); #14465=DIRECTION('',(0.,0.820905201785487,-0.5710644881986)); #14466=DIRECTION('center_axis',(-1.,0.,0.)); #14467=DIRECTION('ref_axis',(0.,0.,1.)); #14468=DIRECTION('',(0.,0.820905201785487,-0.5710644881986)); #14469=DIRECTION('center_axis',(0.,0.5710644881986,0.820905201785487)); #14470=DIRECTION('ref_axis',(-1.,0.,0.)); #14471=DIRECTION('center_axis',(0.,-0.5710644881986,-0.820905201785487)); #14472=DIRECTION('ref_axis',(1.,0.,0.)); #14473=DIRECTION('center_axis',(0.,-1.,0.)); #14474=DIRECTION('ref_axis',(-1.,0.,0.)); #14475=DIRECTION('center_axis',(0.,-1.,0.)); #14476=DIRECTION('ref_axis',(-1.,0.,0.)); #14477=DIRECTION('',(0.,0.,1.)); #14478=DIRECTION('',(1.,0.,0.)); #14479=DIRECTION('',(0.,0.,-1.)); #14480=DIRECTION('',(-1.,0.,0.)); #14481=DIRECTION('center_axis',(1.,0.,0.)); #14482=DIRECTION('ref_axis',(0.,-0.463106635561077,0.886302569159821)); #14483=DIRECTION('center_axis',(-1.,0.,0.)); #14484=DIRECTION('ref_axis',(0.,-0.463106635561077,0.886302569159821)); #14485=DIRECTION('',(1.,0.,0.)); #14486=DIRECTION('center_axis',(1.,0.,0.)); #14487=DIRECTION('ref_axis',(0.,-0.463106635561077,0.886302569159821)); #14488=DIRECTION('',(-1.,0.,0.)); #14489=DIRECTION('center_axis',(0.,0.,-1.)); #14490=DIRECTION('ref_axis',(0.,1.,0.)); #14491=DIRECTION('',(0.,-1.,0.)); #14492=DIRECTION('',(0.,1.,0.)); #14493=DIRECTION('center_axis',(-1.,0.,0.)); #14494=DIRECTION('ref_axis',(0.,0.431893009921604,-0.901924846082453)); #14495=DIRECTION('center_axis',(1.,0.,0.)); #14496=DIRECTION('ref_axis',(0.,0.431893009921604,-0.901924846082453)); #14497=DIRECTION('',(1.,0.,0.)); #14498=DIRECTION('center_axis',(-1.,0.,0.)); #14499=DIRECTION('ref_axis',(0.,0.431893009921604,-0.901924846082453)); #14500=DIRECTION('',(-1.,0.,0.)); #14501=DIRECTION('center_axis',(0.,0.820905201785487,-0.5710644881986)); #14502=DIRECTION('ref_axis',(0.,0.5710644881986,0.820905201785487)); #14503=DIRECTION('',(0.,0.5710644881986,0.820905201785487)); #14504=DIRECTION('',(1.,0.,0.)); #14505=DIRECTION('',(0.,0.571064488198599,0.820905201785487)); #14506=DIRECTION('',(1.,0.,0.)); #14507=DIRECTION('',(0.,0.5710644881986,0.820905201785487)); #14508=DIRECTION('',(0.,-0.5710644881986,-0.820905201785487)); #14509=DIRECTION('',(1.,0.,0.)); #14510=DIRECTION('',(0.,-0.571064488198599,-0.820905201785487)); #14511=DIRECTION('',(1.,0.,0.)); #14512=DIRECTION('',(0.,-0.5710644881986,-0.820905201785487)); #14513=DIRECTION('center_axis',(-1.,0.,0.)); #14514=DIRECTION('ref_axis',(0.,0.,1.)); #14515=DIRECTION('',(0.,-0.997564050259824,0.0697564737441255)); #14516=DIRECTION('',(0.,0.0697564737441248,0.997564050259824)); #14517=DIRECTION('',(0.,0.997564050259824,-0.0697564737441255)); #14518=DIRECTION('center_axis',(-1.,0.,0.)); #14519=DIRECTION('ref_axis',(0.,0.431893009921604,-0.901924846082453)); #14520=DIRECTION('',(0.,0.5710644881986,0.820905201785487)); #14521=DIRECTION('',(0.,0.820905201785487,-0.5710644881986)); #14522=DIRECTION('center_axis',(1.,0.,0.)); #14523=DIRECTION('ref_axis',(0.,0.431893009921604,-0.901924846082453)); #14524=DIRECTION('',(1.,0.,0.)); #14525=DIRECTION('center_axis',(1.,0.,0.)); #14526=DIRECTION('ref_axis',(0.,0.431893009921604,-0.901924846082453)); #14527=DIRECTION('',(-1.,0.,0.)); #14528=DIRECTION('center_axis',(0.,0.0697564737441255,0.997564050259824)); #14529=DIRECTION('ref_axis',(0.,-0.997564050259824,0.0697564737441255)); #14530=DIRECTION('',(1.,0.,0.)); #14531=DIRECTION('',(0.,-0.997564050259824,0.0697564737441255)); #14532=DIRECTION('center_axis',(1.,0.,0.)); #14533=DIRECTION('ref_axis',(0.,-0.463106635561077,0.886302569159821)); #14534=DIRECTION('center_axis',(-1.,0.,0.)); #14535=DIRECTION('ref_axis',(0.,-0.463106635561077,0.886302569159821)); #14536=DIRECTION('',(-1.,0.,0.)); #14537=DIRECTION('center_axis',(1.,0.,0.)); #14538=DIRECTION('ref_axis',(0.,-0.463106635561077,0.886302569159821)); #14539=DIRECTION('',(1.,0.,0.)); #14540=DIRECTION('center_axis',(0.,0.,1.)); #14541=DIRECTION('ref_axis',(0.,-1.,0.)); #14542=DIRECTION('',(0.,-1.,0.)); #14543=DIRECTION('',(0.,1.,0.)); #14544=DIRECTION('center_axis',(1.,0.,0.)); #14545=DIRECTION('ref_axis',(0.,0.,-1.)); #14546=DIRECTION('',(0.,-0.5710644881986,-0.820905201785487)); #14547=DIRECTION('',(0.,0.820905201785487,-0.5710644881986)); #14548=DIRECTION('center_axis',(0.,-0.5710644881986,-0.820905201785487)); #14549=DIRECTION('ref_axis',(0.,0.820905201785487,-0.5710644881986)); #14550=DIRECTION('',(0.,-0.820905201785487,0.5710644881986)); #14551=DIRECTION('',(0.,0.820905201785487,-0.5710644881986)); #14552=DIRECTION('',(-1.,0.,0.)); #14553=DIRECTION('center_axis',(0.,0.5710644881986,0.820905201785487)); #14554=DIRECTION('ref_axis',(0.,-0.820905201785487,0.5710644881986)); #14555=DIRECTION('',(1.,0.,0.)); #14556=DIRECTION('',(0.,-0.820905201785487,0.5710644881986)); #14557=DIRECTION('center_axis',(0.,0.5710644881986,0.820905201785487)); #14558=DIRECTION('ref_axis',(0.,-0.820905201785487,0.5710644881986)); #14559=DIRECTION('',(0.,-0.820905201785487,0.5710644881986)); #14560=DIRECTION('',(0.,0.820905201785487,-0.5710644881986)); #14561=DIRECTION('',(1.,0.,0.)); #14562=DIRECTION('center_axis',(-1.,0.,0.)); #14563=DIRECTION('ref_axis',(0.,0.,1.)); #14564=DIRECTION('',(0.,-0.820905201785487,0.5710644881986)); #14565=DIRECTION('',(0.,0.571064488198599,0.820905201785487)); #14566=DIRECTION('center_axis',(0.,-0.5710644881986,-0.820905201785487)); #14567=DIRECTION('ref_axis',(0.,0.820905201785487,-0.5710644881986)); #14568=DIRECTION('',(-1.,0.,0.)); #14569=DIRECTION('center_axis',(1.,0.,0.)); #14570=DIRECTION('ref_axis',(0.,0.,-1.)); #14571=DIRECTION('',(0.,-0.571064488198599,-0.820905201785487)); #14572=DIRECTION('center_axis',(-1.,0.,0.)); #14573=DIRECTION('ref_axis',(0.,0.,1.)); #14574=DIRECTION('',(0.,0.5710644881986,0.820905201785487)); #14575=DIRECTION('center_axis',(0.,-0.820905201785487,0.5710644881986)); #14576=DIRECTION('ref_axis',(0.,-0.5710644881986,-0.820905201785487)); #14577=DIRECTION('',(0.,-0.5710644881986,-0.820905201785487)); #14578=DIRECTION('center_axis',(0.,-0.0697564737441255,-0.997564050259824)); #14579=DIRECTION('ref_axis',(0.,0.997564050259824,-0.0697564737441255)); #14580=DIRECTION('',(0.,0.997564050259824,-0.0697564737441255)); #14581=DIRECTION('',(1.,0.,0.)); #14582=DIRECTION('center_axis',(0.,-0.997564050259824,0.0697564737441248)); #14583=DIRECTION('ref_axis',(0.,-0.0697564737441248,-0.997564050259824)); #14584=DIRECTION('',(0.,-0.0697564737441248,-0.997564050259824)); #14585=DIRECTION('center_axis',(1.,0.,0.)); #14586=DIRECTION('ref_axis',(0.,0.,-1.)); #14587=DIRECTION('center_axis',(1.,0.,0.)); #14588=DIRECTION('ref_axis',(0.,0.,-1.)); #14589=DIRECTION('center_axis',(-1.,0.,0.)); #14590=DIRECTION('ref_axis',(0.,0.431893009921604,-0.901924846082453)); #14591=DIRECTION('',(0.,0.5710644881986,0.820905201785487)); #14592=DIRECTION('',(0.,-0.820905201785487,0.5710644881986)); #14593=DIRECTION('',(0.,-0.5710644881986,-0.820905201785487)); #14594=DIRECTION('center_axis',(1.,0.,0.)); #14595=DIRECTION('ref_axis',(0.,0.431893009921604,-0.901924846082453)); #14596=DIRECTION('',(0.,-0.997564050259824,0.0697564737441255)); #14597=DIRECTION('',(0.,-0.0697564737441248,-0.997564050259824)); #14598=DIRECTION('',(0.,0.997564050259824,-0.0697564737441255)); #14599=DIRECTION('center_axis',(0.,-0.997564050259824,0.0697564737441248)); #14600=DIRECTION('ref_axis',(0.,-0.0697564737441248,-0.997564050259824)); #14601=DIRECTION('',(1.,0.,0.)); #14602=DIRECTION('',(1.,0.,0.)); #14603=DIRECTION('',(0.,0.0697564737441248,0.997564050259824)); #14604=DIRECTION('center_axis',(0.,-0.0697564737441255,-0.997564050259824)); #14605=DIRECTION('ref_axis',(0.,0.997564050259824,-0.0697564737441255)); #14606=DIRECTION('',(-1.,0.,0.)); #14607=DIRECTION('',(0.,-0.997564050259824,0.0697564737441255)); #14608=DIRECTION('center_axis',(0.,-0.820905201785487,0.5710644881986)); #14609=DIRECTION('ref_axis',(0.,-0.5710644881986,-0.820905201785487)); #14610=DIRECTION('',(-1.,0.,0.)); #14611=DIRECTION('',(-1.,0.,0.)); #14612=DIRECTION('',(0.,-0.571064488198599,-0.820905201785487)); #14613=DIRECTION('',(1.,0.,0.)); #14614=DIRECTION('',(0.,-0.5710644881986,-0.820905201785487)); #14615=DIRECTION('',(1.,0.,0.)); #14616=DIRECTION('',(0.,0.5710644881986,0.820905201785487)); #14617=DIRECTION('',(1.,0.,0.)); #14618=DIRECTION('',(0.,0.571064488198599,0.820905201785487)); #14619=DIRECTION('',(-1.,0.,0.)); #14620=DIRECTION('',(0.,0.5710644881986,0.820905201785487)); #14621=DIRECTION('center_axis',(-1.,0.,0.)); #14622=DIRECTION('ref_axis',(0.,0.,1.)); #14623=DIRECTION('center_axis',(1.,0.,0.)); #14624=DIRECTION('ref_axis',(0.,-0.463106635561077,0.886302569159821)); #14625=DIRECTION('',(0.,1.,0.)); #14626=DIRECTION('',(0.,0.,1.)); #14627=DIRECTION('',(0.,-1.,0.)); #14628=DIRECTION('center_axis',(-1.,0.,0.)); #14629=DIRECTION('ref_axis',(0.,-0.463106635561077,0.886302569159821)); #14630=DIRECTION('',(0.,-0.5710644881986,-0.820905201785487)); #14631=DIRECTION('',(0.,-0.820905201785487,0.5710644881986)); #14632=DIRECTION('center_axis',(1.,0.,0.)); #14633=DIRECTION('ref_axis',(0.,0.,-1.)); #14634=DIRECTION('',(0.,0.820905201785487,-0.5710644881986)); #14635=DIRECTION('',(0.,0.571064488198599,0.820905201785487)); #14636=DIRECTION('',(0.,-0.820905201785487,0.5710644881986)); #14637=DIRECTION('center_axis',(0.,-0.5710644881986,-0.820905201785487)); #14638=DIRECTION('ref_axis',(0.,0.820905201785487,-0.5710644881986)); #14639=DIRECTION('',(0.,0.820905201785487,-0.5710644881986)); #14640=DIRECTION('',(0.,-0.820905201785487,0.5710644881986)); #14641=DIRECTION('',(1.,0.,0.)); #14642=DIRECTION('center_axis',(-1.,0.,0.)); #14643=DIRECTION('ref_axis',(0.,0.,1.)); #14644=DIRECTION('',(0.,0.820905201785487,-0.5710644881986)); #14645=DIRECTION('',(0.,-0.571064488198599,-0.820905201785487)); #14646=DIRECTION('center_axis',(0.,0.5710644881986,0.820905201785487)); #14647=DIRECTION('ref_axis',(0.,-0.820905201785487,0.5710644881986)); #14648=DIRECTION('',(1.,0.,0.)); #14649=DIRECTION('center_axis',(0.,0.5710644881986,0.820905201785487)); #14650=DIRECTION('ref_axis',(0.,-0.820905201785487,0.5710644881986)); #14651=DIRECTION('',(0.,0.820905201785487,-0.5710644881986)); #14652=DIRECTION('',(1.,0.,0.)); #14653=DIRECTION('center_axis',(0.,-0.5710644881986,-0.820905201785487)); #14654=DIRECTION('ref_axis',(0.,0.820905201785487,-0.5710644881986)); #14655=DIRECTION('',(1.,0.,0.)); #14656=DIRECTION('center_axis',(1.,0.,0.)); #14657=DIRECTION('ref_axis',(0.,0.,-1.)); #14658=DIRECTION('center_axis',(-1.,0.,0.)); #14659=DIRECTION('ref_axis',(0.,-0.463106635561077,0.886302569159821)); #14660=DIRECTION('',(0.,0.5710644881986,0.820905201785487)); #14661=DIRECTION('center_axis',(1.,0.,0.)); #14662=DIRECTION('ref_axis',(0.,-0.463106635561077,0.886302569159821)); #14663=DIRECTION('',(0.,1.,0.)); #14664=DIRECTION('',(0.,0.,-1.)); #14665=DIRECTION('',(0.,-1.,0.)); #14666=DIRECTION('center_axis',(0.,0.,1.)); #14667=DIRECTION('ref_axis',(0.,-1.,0.)); #14668=DIRECTION('',(-1.,0.,0.)); #14669=DIRECTION('',(1.,0.,0.)); #14670=DIRECTION('center_axis',(1.,0.,0.)); #14671=DIRECTION('ref_axis',(0.,-0.463106635561077,0.886302569159821)); #14672=DIRECTION('center_axis',(0.,0.0697564737441255,0.997564050259824)); #14673=DIRECTION('ref_axis',(0.,-0.997564050259824,0.0697564737441255)); #14674=DIRECTION('',(1.,0.,0.)); #14675=DIRECTION('',(0.,0.997564050259824,-0.0697564737441255)); #14676=DIRECTION('center_axis',(1.,0.,0.)); #14677=DIRECTION('ref_axis',(0.,0.431893009921604,-0.901924846082453)); #14678=DIRECTION('center_axis',(-1.,0.,0.)); #14679=DIRECTION('ref_axis',(0.,0.431893009921604,-0.901924846082453)); #14680=DIRECTION('center_axis',(-1.,0.,0.)); #14681=DIRECTION('ref_axis',(0.,0.,1.)); #14682=DIRECTION('center_axis',(1.,0.,0.)); #14683=DIRECTION('ref_axis',(0.,0.431893009921604,-0.901924846082453)); #14684=DIRECTION('',(0.,-0.5710644881986,-0.820905201785487)); #14685=DIRECTION('center_axis',(0.,0.820905201785487,-0.5710644881986)); #14686=DIRECTION('ref_axis',(0.,0.5710644881986,0.820905201785487)); #14687=DIRECTION('',(-1.,0.,0.)); #14688=DIRECTION('',(1.,0.,0.)); #14689=DIRECTION('center_axis',(-1.,0.,0.)); #14690=DIRECTION('ref_axis',(0.,0.431893009921604,-0.901924846082453)); #14691=DIRECTION('center_axis',(0.,0.,-1.)); #14692=DIRECTION('ref_axis',(0.,1.,0.)); #14693=DIRECTION('',(1.,0.,0.)); #14694=DIRECTION('',(-1.,0.,0.)); #14695=DIRECTION('center_axis',(1.,0.,0.)); #14696=DIRECTION('ref_axis',(0.,-0.463106635561077,0.886302569159821)); #14697=DIRECTION('center_axis',(0.,-1.,0.)); #14698=DIRECTION('ref_axis',(-1.,0.,0.)); #14699=DIRECTION('axis',(0.,0.,1.)); #14700=DIRECTION('refdir',(1.,0.,0.)); #14701=DIRECTION('',(0.,0.,1.)); #14702=DIRECTION('',(0.,0.,1.)); #14703=DIRECTION('',(0.,0.,1.)); #14704=DIRECTION('',(0.,0.,1.)); #14705=DIRECTION('',(0.,0.,1.)); #14706=DIRECTION('center_axis',(1.,0.,0.)); #14707=DIRECTION('ref_axis',(0.,1.,0.)); #14708=DIRECTION('',(0.,-1.,0.)); #14709=DIRECTION('',(0.,1.,0.)); #14710=DIRECTION('',(0.,0.,1.)); #14711=DIRECTION('center_axis',(0.,-1.,0.)); #14712=DIRECTION('ref_axis',(1.,0.,0.)); #14713=DIRECTION('',(-1.,0.,0.)); #14714=DIRECTION('',(1.,0.,0.)); #14715=DIRECTION('',(0.,0.,1.)); #14716=DIRECTION('',(0.,0.,1.)); #14717=DIRECTION('',(0.,0.,1.)); #14718=DIRECTION('',(0.,0.,1.)); #14719=DIRECTION('',(0.,0.,1.)); #14720=DIRECTION('',(0.,0.,1.)); #14721=DIRECTION('center_axis',(0.,1.,0.)); #14722=DIRECTION('ref_axis',(-1.,0.,0.)); #14723=DIRECTION('',(1.,0.,0.)); #14724=DIRECTION('',(-1.,0.,0.)); #14725=DIRECTION('',(0.,0.,1.)); #14726=DIRECTION('center_axis',(1.,0.,0.)); #14727=DIRECTION('ref_axis',(0.,1.,0.)); #14728=DIRECTION('',(0.,-1.,0.)); #14729=DIRECTION('',(0.,1.,0.)); #14730=DIRECTION('',(0.,0.,1.)); #14731=DIRECTION('',(0.,0.,1.)); #14732=DIRECTION('',(0.,0.,1.)); #14733=DIRECTION('center_axis',(0.,0.,1.)); #14734=DIRECTION('ref_axis',(1.,0.,0.)); #14735=DIRECTION('center_axis',(0.,0.,1.)); #14736=DIRECTION('ref_axis',(1.,0.,0.)); #14737=DIRECTION('center_axis',(-1.,0.,0.)); #14738=DIRECTION('ref_axis',(0.,-1.,0.)); #14739=DIRECTION('',(0.,1.,0.)); #14740=DIRECTION('',(0.,0.,1.)); #14741=DIRECTION('',(0.,-1.,0.)); #14742=DIRECTION('',(0.,0.,1.)); #14743=DIRECTION('center_axis',(0.,1.,0.)); #14744=DIRECTION('ref_axis',(-1.,0.,0.)); #14745=DIRECTION('',(1.,0.,0.)); #14746=DIRECTION('',(-1.,0.,0.)); #14747=DIRECTION('',(0.,0.,1.)); #14748=DIRECTION('center_axis',(1.,0.,0.)); #14749=DIRECTION('ref_axis',(0.,1.,0.)); #14750=DIRECTION('',(0.,-1.,0.)); #14751=DIRECTION('',(0.,1.,0.)); #14752=DIRECTION('',(0.,0.,1.)); #14753=DIRECTION('center_axis',(0.,-1.,0.)); #14754=DIRECTION('ref_axis',(1.,0.,0.)); #14755=DIRECTION('',(-1.,0.,0.)); #14756=DIRECTION('',(1.,0.,0.)); #14757=DIRECTION('center_axis',(0.,0.,1.)); #14758=DIRECTION('ref_axis',(1.,0.,0.)); #14759=DIRECTION('center_axis',(0.,0.,1.)); #14760=DIRECTION('ref_axis',(1.,0.,0.)); #14761=DIRECTION('',(0.,0.,1.)); #14762=DIRECTION('',(0.,0.,1.)); #14763=DIRECTION('',(0.,0.,1.)); #14764=DIRECTION('center_axis',(1.,0.,0.)); #14765=DIRECTION('ref_axis',(0.,1.,0.)); #14766=DIRECTION('',(0.,-1.,0.)); #14767=DIRECTION('',(0.,1.,0.)); #14768=DIRECTION('',(0.,0.,1.)); #14769=DIRECTION('center_axis',(0.,-1.,0.)); #14770=DIRECTION('ref_axis',(1.,0.,0.)); #14771=DIRECTION('',(-1.,0.,0.)); #14772=DIRECTION('',(1.,0.,0.)); #14773=DIRECTION('',(0.,0.,1.)); #14774=DIRECTION('center_axis',(-1.,0.,0.)); #14775=DIRECTION('ref_axis',(0.,-1.,0.)); #14776=DIRECTION('',(0.,1.,0.)); #14777=DIRECTION('',(0.,-1.,0.)); #14778=DIRECTION('',(0.,0.,1.)); #14779=DIRECTION('center_axis',(0.,1.,0.)); #14780=DIRECTION('ref_axis',(-1.,0.,0.)); #14781=DIRECTION('',(1.,0.,0.)); #14782=DIRECTION('',(-1.,0.,0.)); #14783=DIRECTION('',(0.,0.,1.)); #14784=DIRECTION('center_axis',(1.,0.,0.)); #14785=DIRECTION('ref_axis',(0.,1.,0.)); #14786=DIRECTION('',(0.,-1.,0.)); #14787=DIRECTION('',(0.,1.,0.)); #14788=DIRECTION('',(0.,0.,1.)); #14789=DIRECTION('',(0.,0.,1.)); #14790=DIRECTION('',(0.,0.,1.)); #14791=DIRECTION('center_axis',(1.,9.97783866376016E-15,0.)); #14792=DIRECTION('ref_axis',(-9.96980276113391E-15,1.,0.)); #14793=DIRECTION('',(9.97783866376016E-15,-1.,0.)); #14794=DIRECTION('',(-9.97783866376016E-15,1.,0.)); #14795=DIRECTION('',(0.,0.,1.)); #14796=DIRECTION('center_axis',(0.,-1.,0.)); #14797=DIRECTION('ref_axis',(1.,0.,0.)); #14798=DIRECTION('',(-1.,0.,0.)); #14799=DIRECTION('',(1.,0.,0.)); #14800=DIRECTION('center_axis',(0.,0.,1.)); #14801=DIRECTION('ref_axis',(1.,0.,0.)); #14802=DIRECTION('center_axis',(0.,0.,1.)); #14803=DIRECTION('ref_axis',(1.,0.,0.)); #14804=DIRECTION('',(0.,0.,1.)); #14805=DIRECTION('',(0.,0.,1.)); #14806=DIRECTION('',(0.,0.,1.)); #14807=DIRECTION('',(0.,0.,1.)); #14808=DIRECTION('',(0.,0.,1.)); #14809=DIRECTION('center_axis',(1.,0.,0.)); #14810=DIRECTION('ref_axis',(0.,1.,0.)); #14811=DIRECTION('',(0.,-1.,0.)); #14812=DIRECTION('',(0.,1.,0.)); #14813=DIRECTION('',(0.,0.,1.)); #14814=DIRECTION('center_axis',(0.,-1.,0.)); #14815=DIRECTION('ref_axis',(1.,0.,0.)); #14816=DIRECTION('',(-1.,0.,0.)); #14817=DIRECTION('',(1.,0.,0.)); #14818=DIRECTION('',(0.,0.,1.)); #14819=DIRECTION('',(0.,0.,1.)); #14820=DIRECTION('',(0.,0.,1.)); #14821=DIRECTION('',(0.,0.,1.)); #14822=DIRECTION('',(0.,0.,1.)); #14823=DIRECTION('',(0.,0.,1.)); #14824=DIRECTION('center_axis',(0.,1.,0.)); #14825=DIRECTION('ref_axis',(-1.,0.,0.)); #14826=DIRECTION('',(1.,0.,0.)); #14827=DIRECTION('',(-1.,0.,0.)); #14828=DIRECTION('',(0.,0.,1.)); #14829=DIRECTION('center_axis',(1.,0.,0.)); #14830=DIRECTION('ref_axis',(0.,1.,0.)); #14831=DIRECTION('',(0.,-1.,0.)); #14832=DIRECTION('',(0.,1.,0.)); #14833=DIRECTION('',(0.,0.,1.)); #14834=DIRECTION('',(0.,0.,1.)); #14835=DIRECTION('',(0.,0.,1.)); #14836=DIRECTION('center_axis',(0.,0.,1.)); #14837=DIRECTION('ref_axis',(1.,0.,0.)); #14838=DIRECTION('center_axis',(0.,0.,1.)); #14839=DIRECTION('ref_axis',(1.,0.,0.)); #14840=DIRECTION('center_axis',(-6.61108328641768E-15,-1.,0.)); #14841=DIRECTION('ref_axis',(1.,-6.61692922676593E-15,0.)); #14842=DIRECTION('',(1.,-6.61108328641768E-15,0.)); #14843=DIRECTION('',(0.,0.,1.)); #14844=DIRECTION('',(-1.,6.61108328641768E-15,0.)); #14845=DIRECTION('',(0.,0.,1.)); #14846=DIRECTION('',(0.,0.,1.)); #14847=DIRECTION('',(0.,0.,1.)); #14848=DIRECTION('',(0.,0.,1.)); #14849=DIRECTION('',(0.,0.,1.)); #14850=DIRECTION('',(0.,0.,1.)); #14851=DIRECTION('',(0.,0.,1.)); #14852=DIRECTION('',(0.,0.,1.)); #14853=DIRECTION('center_axis',(1.,0.,0.)); #14854=DIRECTION('ref_axis',(0.,1.,0.)); #14855=DIRECTION('',(0.,-1.,0.)); #14856=DIRECTION('',(0.,1.,0.)); #14857=DIRECTION('',(0.,0.,1.)); #14858=DIRECTION('center_axis',(0.,-1.,0.)); #14859=DIRECTION('ref_axis',(1.,0.,0.)); #14860=DIRECTION('',(-1.,0.,0.)); #14861=DIRECTION('',(1.,0.,0.)); #14862=DIRECTION('',(0.,0.,1.)); #14863=DIRECTION('',(0.,0.,1.)); #14864=DIRECTION('',(0.,0.,1.)); #14865=DIRECTION('',(0.,0.,1.)); #14866=DIRECTION('center_axis',(0.,1.,0.)); #14867=DIRECTION('ref_axis',(-1.,0.,0.)); #14868=DIRECTION('',(1.,0.,0.)); #14869=DIRECTION('',(-1.,0.,0.)); #14870=DIRECTION('',(0.,0.,1.)); #14871=DIRECTION('center_axis',(1.,0.,0.)); #14872=DIRECTION('ref_axis',(0.,1.,0.)); #14873=DIRECTION('',(0.,-1.,0.)); #14874=DIRECTION('',(0.,1.,0.)); #14875=DIRECTION('',(0.,0.,1.)); #14876=DIRECTION('',(0.,0.,1.)); #14877=DIRECTION('',(0.,0.,1.)); #14878=DIRECTION('center_axis',(0.,0.,1.)); #14879=DIRECTION('ref_axis',(1.,0.,0.)); #14880=DIRECTION('center_axis',(0.,0.,1.)); #14881=DIRECTION('ref_axis',(1.,0.,0.)); #14882=DIRECTION('',(0.,0.,1.)); #14883=DIRECTION('',(0.,0.,1.)); #14884=DIRECTION('',(0.,0.,1.)); #14885=DIRECTION('center_axis',(1.,0.,0.)); #14886=DIRECTION('ref_axis',(0.,1.,0.)); #14887=DIRECTION('',(0.,-1.,0.)); #14888=DIRECTION('',(0.,1.,0.)); #14889=DIRECTION('',(0.,0.,1.)); #14890=DIRECTION('center_axis',(0.,-1.,0.)); #14891=DIRECTION('ref_axis',(1.,0.,0.)); #14892=DIRECTION('',(-1.,0.,0.)); #14893=DIRECTION('',(1.,0.,0.)); #14894=DIRECTION('',(0.,0.,1.)); #14895=DIRECTION('center_axis',(-1.,0.,0.)); #14896=DIRECTION('ref_axis',(0.,-1.,0.)); #14897=DIRECTION('',(0.,1.,0.)); #14898=DIRECTION('',(0.,-1.,0.)); #14899=DIRECTION('',(0.,0.,1.)); #14900=DIRECTION('center_axis',(0.,1.,0.)); #14901=DIRECTION('ref_axis',(-1.,0.,0.)); #14902=DIRECTION('',(1.,0.,0.)); #14903=DIRECTION('',(-1.,0.,0.)); #14904=DIRECTION('',(0.,0.,1.)); #14905=DIRECTION('center_axis',(1.,0.,0.)); #14906=DIRECTION('ref_axis',(0.,1.,0.)); #14907=DIRECTION('',(0.,-1.,0.)); #14908=DIRECTION('',(0.,1.,0.)); #14909=DIRECTION('',(0.,0.,1.)); #14910=DIRECTION('',(0.,0.,1.)); #14911=DIRECTION('',(0.,0.,1.)); #14912=DIRECTION('center_axis',(1.,0.,0.)); #14913=DIRECTION('ref_axis',(0.,1.,0.)); #14914=DIRECTION('',(0.,-1.,0.)); #14915=DIRECTION('',(0.,1.,0.)); #14916=DIRECTION('',(0.,0.,1.)); #14917=DIRECTION('center_axis',(0.,-1.,0.)); #14918=DIRECTION('ref_axis',(1.,0.,0.)); #14919=DIRECTION('',(-1.,0.,0.)); #14920=DIRECTION('',(1.,0.,0.)); #14921=DIRECTION('center_axis',(0.,0.,1.)); #14922=DIRECTION('ref_axis',(1.,0.,0.)); #14923=DIRECTION('center_axis',(0.,0.,1.)); #14924=DIRECTION('ref_axis',(1.,0.,0.)); #14925=DIRECTION('center_axis',(-1.,0.,0.)); #14926=DIRECTION('ref_axis',(0.,-1.,0.)); #14927=DIRECTION('',(0.,1.,0.)); #14928=DIRECTION('',(0.,0.,1.)); #14929=DIRECTION('',(0.,-1.,0.)); #14930=DIRECTION('',(0.,0.,1.)); #14931=DIRECTION('center_axis',(0.,1.,0.)); #14932=DIRECTION('ref_axis',(-1.,0.,0.)); #14933=DIRECTION('',(1.,0.,0.)); #14934=DIRECTION('',(-1.,0.,0.)); #14935=DIRECTION('',(0.,0.,1.)); #14936=DIRECTION('center_axis',(1.,0.,0.)); #14937=DIRECTION('ref_axis',(0.,1.,0.)); #14938=DIRECTION('',(0.,-1.,0.)); #14939=DIRECTION('',(0.,1.,0.)); #14940=DIRECTION('',(0.,0.,1.)); #14941=DIRECTION('center_axis',(0.,-1.,0.)); #14942=DIRECTION('ref_axis',(1.,0.,0.)); #14943=DIRECTION('',(-1.,0.,0.)); #14944=DIRECTION('',(1.,0.,0.)); #14945=DIRECTION('center_axis',(0.,0.,1.)); #14946=DIRECTION('ref_axis',(1.,0.,0.)); #14947=DIRECTION('center_axis',(0.,0.,1.)); #14948=DIRECTION('ref_axis',(1.,0.,0.)); #14949=DIRECTION('center_axis',(-1.,0.,0.)); #14950=DIRECTION('ref_axis',(0.,-1.,0.)); #14951=DIRECTION('',(0.,1.,0.)); #14952=DIRECTION('',(0.,0.,1.)); #14953=DIRECTION('',(0.,-1.,0.)); #14954=DIRECTION('',(0.,0.,1.)); #14955=DIRECTION('center_axis',(0.913498663408962,-0.406841728378544,0.)); #14956=DIRECTION('ref_axis',(0.406841728378544,0.913498663408962,0.)); #14957=DIRECTION('',(-0.406841728378544,-0.913498663408962,0.)); #14958=DIRECTION('',(0.406841728378544,0.913498663408962,0.)); #14959=DIRECTION('',(0.,0.,1.)); #14960=DIRECTION('center_axis',(0.,-1.,0.)); #14961=DIRECTION('ref_axis',(1.,0.,0.)); #14962=DIRECTION('',(-1.,0.,0.)); #14963=DIRECTION('',(1.,0.,0.)); #14964=DIRECTION('',(0.,0.,1.)); #14965=DIRECTION('center_axis',(-0.914904056356069,-0.403671360964847,0.)); #14966=DIRECTION('ref_axis',(0.403671360964847,-0.914904056356069,0.)); #14967=DIRECTION('',(-0.403671360964847,0.914904056356069,0.)); #14968=DIRECTION('',(0.403671360964847,-0.914904056356069,0.)); #14969=DIRECTION('',(0.,0.,1.)); #14970=DIRECTION('center_axis',(1.,0.,0.)); #14971=DIRECTION('ref_axis',(0.,1.,0.)); #14972=DIRECTION('',(0.,-1.,0.)); #14973=DIRECTION('',(0.,1.,0.)); #14974=DIRECTION('',(0.,0.,1.)); #14975=DIRECTION('center_axis',(0.,-1.,0.)); #14976=DIRECTION('ref_axis',(1.,0.,0.)); #14977=DIRECTION('',(-1.,0.,0.)); #14978=DIRECTION('',(1.,0.,0.)); #14979=DIRECTION('',(0.,0.,1.)); #14980=DIRECTION('center_axis',(-1.,0.,0.)); #14981=DIRECTION('ref_axis',(0.,-1.,0.)); #14982=DIRECTION('',(0.,1.,0.)); #14983=DIRECTION('',(0.,-1.,0.)); #14984=DIRECTION('',(0.,0.,1.)); #14985=DIRECTION('center_axis',(0.,1.,0.)); #14986=DIRECTION('ref_axis',(-1.,0.,0.)); #14987=DIRECTION('',(1.,0.,0.)); #14988=DIRECTION('',(-1.,0.,0.)); #14989=DIRECTION('',(0.,0.,1.)); #14990=DIRECTION('center_axis',(0.912492227721691,0.409094040958196,0.)); #14991=DIRECTION('ref_axis',(-0.409094040958196,0.912492227721691,0.)); #14992=DIRECTION('',(0.409094040958196,-0.91249222772169,0.)); #14993=DIRECTION('',(-0.409094040958196,0.91249222772169,0.)); #14994=DIRECTION('',(0.,0.,1.)); #14995=DIRECTION('center_axis',(-0.917409408006232,0.397944692264711,0.)); #14996=DIRECTION('ref_axis',(-0.397944692264711,-0.917409408006232,0.)); #14997=DIRECTION('',(0.397944692264711,0.917409408006232,0.)); #14998=DIRECTION('',(-0.397944692264711,-0.917409408006232,0.)); #14999=DIRECTION('',(0.,0.,1.)); #15000=DIRECTION('center_axis',(0.,1.,0.)); #15001=DIRECTION('ref_axis',(-1.,0.,0.)); #15002=DIRECTION('',(1.,0.,0.)); #15003=DIRECTION('',(-1.,0.,0.)); #15004=DIRECTION('',(0.,0.,1.)); #15005=DIRECTION('center_axis',(1.,0.,0.)); #15006=DIRECTION('ref_axis',(0.,1.,0.)); #15007=DIRECTION('',(0.,-1.,0.)); #15008=DIRECTION('',(0.,1.,0.)); #15009=DIRECTION('',(0.,0.,1.)); #15010=DIRECTION('center_axis',(0.,-1.,0.)); #15011=DIRECTION('ref_axis',(1.,0.,0.)); #15012=DIRECTION('',(-1.,0.,0.)); #15013=DIRECTION('',(1.,0.,0.)); #15014=DIRECTION('center_axis',(0.,0.,1.)); #15015=DIRECTION('ref_axis',(1.,0.,0.)); #15016=DIRECTION('center_axis',(0.,0.,1.)); #15017=DIRECTION('ref_axis',(1.,0.,0.)); #15018=DIRECTION('center_axis',(-1.,0.,0.)); #15019=DIRECTION('ref_axis',(0.,-1.,0.)); #15020=DIRECTION('',(0.,1.,0.)); #15021=DIRECTION('',(0.,0.,1.)); #15022=DIRECTION('',(0.,-1.,0.)); #15023=DIRECTION('',(0.,0.,1.)); #15024=DIRECTION('center_axis',(0.,1.,0.)); #15025=DIRECTION('ref_axis',(-1.,0.,0.)); #15026=DIRECTION('',(1.,0.,0.)); #15027=DIRECTION('',(-1.,0.,0.)); #15028=DIRECTION('',(0.,0.,1.)); #15029=DIRECTION('',(0.,0.,1.)); #15030=DIRECTION('',(0.,0.,1.)); #15031=DIRECTION('',(0.,0.,1.)); #15032=DIRECTION('',(0.,0.,1.)); #15033=DIRECTION('',(0.,0.,1.)); #15034=DIRECTION('',(0.,0.,1.)); #15035=DIRECTION('',(0.,0.,1.)); #15036=DIRECTION('',(0.,0.,1.)); #15037=DIRECTION('center_axis',(1.,0.,0.)); #15038=DIRECTION('ref_axis',(0.,1.,0.)); #15039=DIRECTION('',(0.,-1.,0.)); #15040=DIRECTION('',(0.,1.,0.)); #15041=DIRECTION('',(0.,0.,1.)); #15042=DIRECTION('center_axis',(0.,-1.,0.)); #15043=DIRECTION('ref_axis',(1.,0.,0.)); #15044=DIRECTION('',(-1.,0.,0.)); #15045=DIRECTION('',(1.,0.,0.)); #15046=DIRECTION('',(0.,0.,1.)); #15047=DIRECTION('',(0.,0.,1.)); #15048=DIRECTION('',(0.,0.,1.)); #15049=DIRECTION('',(0.,0.,1.)); #15050=DIRECTION('',(0.,0.,1.)); #15051=DIRECTION('',(0.,0.,1.)); #15052=DIRECTION('',(0.,0.,1.)); #15053=DIRECTION('',(0.,0.,1.)); #15054=DIRECTION('center_axis',(0.,0.,1.)); #15055=DIRECTION('ref_axis',(1.,0.,0.)); #15056=DIRECTION('center_axis',(0.,0.,1.)); #15057=DIRECTION('ref_axis',(1.,0.,0.)); #15058=DIRECTION('',(0.,0.,1.)); #15059=DIRECTION('',(0.,0.,1.)); #15060=DIRECTION('',(0.,0.,1.)); #15061=DIRECTION('center_axis',(0.,-1.,0.)); #15062=DIRECTION('ref_axis',(1.,0.,0.)); #15063=DIRECTION('',(1.,0.,0.)); #15064=DIRECTION('',(0.,0.,1.)); #15065=DIRECTION('',(-1.,0.,0.)); #15066=DIRECTION('center_axis',(-1.,0.,0.)); #15067=DIRECTION('ref_axis',(0.,-1.,0.)); #15068=DIRECTION('',(0.,-1.,0.)); #15069=DIRECTION('',(0.,0.,1.)); #15070=DIRECTION('',(0.,1.,0.)); #15071=DIRECTION('center_axis',(0.,1.,0.)); #15072=DIRECTION('ref_axis',(-1.,0.,0.)); #15073=DIRECTION('',(-1.,0.,0.)); #15074=DIRECTION('',(0.,0.,1.)); #15075=DIRECTION('',(1.,0.,0.)); #15076=DIRECTION('',(0.,0.,1.)); #15077=DIRECTION('center_axis',(-0.783042313268788,-0.621968436201279,0.)); #15078=DIRECTION('ref_axis',(0.621968436201279,-0.783042313268788,0.)); #15079=DIRECTION('',(-0.621968436201279,0.783042313268788,0.)); #15080=DIRECTION('',(0.,0.,1.)); #15081=DIRECTION('',(0.621968436201279,-0.783042313268788,0.)); #15082=DIRECTION('',(0.,0.,1.)); #15083=DIRECTION('center_axis',(0.,-1.,0.)); #15084=DIRECTION('ref_axis',(1.,0.,0.)); #15085=DIRECTION('',(-1.,0.,0.)); #15086=DIRECTION('',(1.,0.,0.)); #15087=DIRECTION('',(0.,0.,1.)); #15088=DIRECTION('center_axis',(1.,0.,0.)); #15089=DIRECTION('ref_axis',(0.,1.,0.)); #15090=DIRECTION('',(0.,-1.,0.)); #15091=DIRECTION('',(0.,1.,0.)); #15092=DIRECTION('',(0.,0.,1.)); #15093=DIRECTION('center_axis',(0.,-1.,0.)); #15094=DIRECTION('ref_axis',(1.,0.,0.)); #15095=DIRECTION('',(-1.,0.,0.)); #15096=DIRECTION('',(1.,0.,0.)); #15097=DIRECTION('',(0.,0.,1.)); #15098=DIRECTION('center_axis',(-1.,0.,0.)); #15099=DIRECTION('ref_axis',(0.,-1.,0.)); #15100=DIRECTION('',(0.,1.,0.)); #15101=DIRECTION('',(0.,-1.,0.)); #15102=DIRECTION('',(0.,0.,1.)); #15103=DIRECTION('center_axis',(0.,1.,0.)); #15104=DIRECTION('ref_axis',(-1.,0.,0.)); #15105=DIRECTION('',(1.,0.,0.)); #15106=DIRECTION('',(-1.,0.,0.)); #15107=DIRECTION('',(0.,0.,1.)); #15108=DIRECTION('',(0.,0.,1.)); #15109=DIRECTION('',(0.,0.,1.)); #15110=DIRECTION('',(0.,0.,1.)); #15111=DIRECTION('center_axis',(0.774214179185868,0.632923695833512,0.)); #15112=DIRECTION('ref_axis',(-0.632923695833512,0.774214179185868,0.)); #15113=DIRECTION('',(0.632923695833512,-0.774214179185868,0.)); #15114=DIRECTION('',(-0.632923695833512,0.774214179185868,0.)); #15115=DIRECTION('',(0.,0.,1.)); #15116=DIRECTION('center_axis',(0.,-1.,0.)); #15117=DIRECTION('ref_axis',(1.,0.,0.)); #15118=DIRECTION('',(-1.,0.,0.)); #15119=DIRECTION('',(1.,0.,0.)); #15120=DIRECTION('center_axis',(0.,0.,1.)); #15121=DIRECTION('ref_axis',(1.,0.,0.)); #15122=DIRECTION('center_axis',(0.,0.,1.)); #15123=DIRECTION('ref_axis',(1.,0.,0.)); #15124=DIRECTION('center_axis',(-1.,0.,0.)); #15125=DIRECTION('ref_axis',(0.,-1.,0.)); #15126=DIRECTION('',(0.,1.,0.)); #15127=DIRECTION('',(0.,0.,1.)); #15128=DIRECTION('',(0.,-1.,0.)); #15129=DIRECTION('',(0.,0.,1.)); #15130=DIRECTION('center_axis',(0.,-1.,0.)); #15131=DIRECTION('ref_axis',(1.,0.,0.)); #15132=DIRECTION('',(-1.,0.,0.)); #15133=DIRECTION('',(1.,0.,0.)); #15134=DIRECTION('',(0.,0.,1.)); #15135=DIRECTION('center_axis',(1.,0.,0.)); #15136=DIRECTION('ref_axis',(0.,1.,0.)); #15137=DIRECTION('',(0.,-1.,0.)); #15138=DIRECTION('',(0.,1.,0.)); #15139=DIRECTION('',(0.,0.,1.)); #15140=DIRECTION('center_axis',(0.,-1.,0.)); #15141=DIRECTION('ref_axis',(1.,0.,0.)); #15142=DIRECTION('',(-1.,0.,0.)); #15143=DIRECTION('',(1.,0.,0.)); #15144=DIRECTION('',(0.,0.,1.)); #15145=DIRECTION('center_axis',(-1.,0.,0.)); #15146=DIRECTION('ref_axis',(0.,-1.,0.)); #15147=DIRECTION('',(0.,1.,0.)); #15148=DIRECTION('',(0.,-1.,0.)); #15149=DIRECTION('',(0.,0.,1.)); #15150=DIRECTION('center_axis',(0.,1.,0.)); #15151=DIRECTION('ref_axis',(-1.,0.,0.)); #15152=DIRECTION('',(1.,0.,0.)); #15153=DIRECTION('',(-1.,0.,0.)); #15154=DIRECTION('',(0.,0.,1.)); #15155=DIRECTION('center_axis',(1.,0.,0.)); #15156=DIRECTION('ref_axis',(0.,1.,0.)); #15157=DIRECTION('',(0.,-1.,0.)); #15158=DIRECTION('',(0.,1.,0.)); #15159=DIRECTION('',(0.,0.,1.)); #15160=DIRECTION('center_axis',(0.,1.,0.)); #15161=DIRECTION('ref_axis',(-1.,0.,0.)); #15162=DIRECTION('',(1.,0.,0.)); #15163=DIRECTION('',(-1.,0.,0.)); #15164=DIRECTION('',(0.,0.,1.)); #15165=DIRECTION('center_axis',(-1.,0.,0.)); #15166=DIRECTION('ref_axis',(0.,-1.,0.)); #15167=DIRECTION('',(0.,1.,0.)); #15168=DIRECTION('',(0.,-1.,0.)); #15169=DIRECTION('',(0.,0.,1.)); #15170=DIRECTION('center_axis',(0.,1.,0.)); #15171=DIRECTION('ref_axis',(-1.,0.,0.)); #15172=DIRECTION('',(1.,0.,0.)); #15173=DIRECTION('',(-1.,0.,0.)); #15174=DIRECTION('',(0.,0.,1.)); #15175=DIRECTION('center_axis',(1.,0.,0.)); #15176=DIRECTION('ref_axis',(0.,1.,0.)); #15177=DIRECTION('',(0.,-1.,0.)); #15178=DIRECTION('',(0.,1.,0.)); #15179=DIRECTION('',(0.,0.,1.)); #15180=DIRECTION('center_axis',(0.,-1.,0.)); #15181=DIRECTION('ref_axis',(1.,0.,0.)); #15182=DIRECTION('',(-1.,0.,0.)); #15183=DIRECTION('',(1.,0.,0.)); #15184=DIRECTION('center_axis',(0.,0.,1.)); #15185=DIRECTION('ref_axis',(1.,0.,0.)); #15186=DIRECTION('center_axis',(0.,0.,1.)); #15187=DIRECTION('ref_axis',(1.,0.,0.)); #15188=DIRECTION('',(0.,0.,1.)); #15189=DIRECTION('',(0.,0.,1.)); #15190=DIRECTION('center_axis',(0.,-1.,0.)); #15191=DIRECTION('ref_axis',(1.,0.,0.)); #15192=DIRECTION('',(-1.,0.,0.)); #15193=DIRECTION('',(1.,0.,0.)); #15194=DIRECTION('',(0.,0.,1.)); #15195=DIRECTION('center_axis',(-1.,0.,0.)); #15196=DIRECTION('ref_axis',(0.,-1.,0.)); #15197=DIRECTION('',(0.,1.,0.)); #15198=DIRECTION('',(0.,-1.,0.)); #15199=DIRECTION('',(0.,0.,1.)); #15200=DIRECTION('',(0.,0.,1.)); #15201=DIRECTION('',(0.,0.,1.)); #15202=DIRECTION('',(0.,0.,1.)); #15203=DIRECTION('',(0.,0.,1.)); #15204=DIRECTION('center_axis',(1.,0.,0.)); #15205=DIRECTION('ref_axis',(0.,1.,0.)); #15206=DIRECTION('',(0.,-1.,0.)); #15207=DIRECTION('',(0.,1.,0.)); #15208=DIRECTION('',(0.,0.,1.)); #15209=DIRECTION('',(0.,0.,1.)); #15210=DIRECTION('',(0.,0.,1.)); #15211=DIRECTION('',(0.,0.,1.)); #15212=DIRECTION('',(0.,0.,1.)); #15213=DIRECTION('',(0.,0.,1.)); #15214=DIRECTION('center_axis',(-1.,0.,0.)); #15215=DIRECTION('ref_axis',(0.,-1.,0.)); #15216=DIRECTION('',(0.,1.,0.)); #15217=DIRECTION('',(0.,-1.,0.)); #15218=DIRECTION('',(0.,0.,1.)); #15219=DIRECTION('center_axis',(0.,1.,0.)); #15220=DIRECTION('ref_axis',(-1.,0.,0.)); #15221=DIRECTION('',(1.,0.,0.)); #15222=DIRECTION('',(-1.,0.,0.)); #15223=DIRECTION('',(0.,0.,1.)); #15224=DIRECTION('',(0.,0.,1.)); #15225=DIRECTION('',(0.,0.,1.)); #15226=DIRECTION('',(0.,0.,1.)); #15227=DIRECTION('',(0.,0.,1.)); #15228=DIRECTION('',(0.,0.,1.)); #15229=DIRECTION('center_axis',(0.,-1.,0.)); #15230=DIRECTION('ref_axis',(1.,0.,0.)); #15231=DIRECTION('',(-1.,0.,0.)); #15232=DIRECTION('',(1.,0.,0.)); #15233=DIRECTION('',(0.,0.,1.)); #15234=DIRECTION('center_axis',(-1.,0.,0.)); #15235=DIRECTION('ref_axis',(0.,-1.,0.)); #15236=DIRECTION('',(0.,1.,0.)); #15237=DIRECTION('',(0.,-1.,0.)); #15238=DIRECTION('',(0.,0.,1.)); #15239=DIRECTION('center_axis',(0.,1.,0.)); #15240=DIRECTION('ref_axis',(-1.,0.,0.)); #15241=DIRECTION('',(1.,0.,0.)); #15242=DIRECTION('',(-1.,0.,0.)); #15243=DIRECTION('',(0.,0.,1.)); #15244=DIRECTION('',(0.,0.,1.)); #15245=DIRECTION('',(0.,0.,1.)); #15246=DIRECTION('',(0.,0.,1.)); #15247=DIRECTION('center_axis',(0.,0.,1.)); #15248=DIRECTION('ref_axis',(1.,0.,0.)); #15249=DIRECTION('center_axis',(0.,0.,1.)); #15250=DIRECTION('ref_axis',(1.,0.,0.)); #15251=DIRECTION('',(0.,0.,1.)); #15252=DIRECTION('',(0.,0.,1.)); #15253=DIRECTION('',(0.,0.,1.)); #15254=DIRECTION('',(0.,0.,1.)); #15255=DIRECTION('',(0.,0.,1.)); #15256=DIRECTION('',(0.,0.,1.)); #15257=DIRECTION('',(0.,0.,1.)); #15258=DIRECTION('',(0.,0.,1.)); #15259=DIRECTION('',(0.,0.,1.)); #15260=DIRECTION('',(0.,0.,1.)); #15261=DIRECTION('',(0.,0.,1.)); #15262=DIRECTION('',(0.,0.,1.)); #15263=DIRECTION('center_axis',(0.,0.,1.)); #15264=DIRECTION('ref_axis',(1.,0.,0.)); #15265=DIRECTION('center_axis',(0.,0.,1.)); #15266=DIRECTION('ref_axis',(1.,0.,0.)); #15267=DIRECTION('',(0.,0.,1.)); #15268=DIRECTION('',(0.,0.,1.)); #15269=DIRECTION('',(0.,0.,1.)); #15270=DIRECTION('',(0.,0.,1.)); #15271=DIRECTION('',(0.,0.,1.)); #15272=DIRECTION('',(0.,0.,1.)); #15273=DIRECTION('',(0.,0.,1.)); #15274=DIRECTION('',(0.,0.,1.)); #15275=DIRECTION('',(0.,0.,1.)); #15276=DIRECTION('',(0.,0.,1.)); #15277=DIRECTION('',(0.,0.,1.)); #15278=DIRECTION('',(0.,0.,1.)); #15279=DIRECTION('center_axis',(0.,0.,1.)); #15280=DIRECTION('ref_axis',(1.,0.,0.)); #15281=DIRECTION('center_axis',(0.,0.,1.)); #15282=DIRECTION('ref_axis',(1.,0.,0.)); #15283=DIRECTION('center_axis',(-0.889695551631173,-0.456554296231787,0.)); #15284=DIRECTION('ref_axis',(0.456554296231787,-0.889695551631173,0.)); #15285=DIRECTION('',(-0.456554296231787,0.889695551631173,0.)); #15286=DIRECTION('',(0.,0.,1.)); #15287=DIRECTION('',(0.456554296231787,-0.889695551631173,0.)); #15288=DIRECTION('',(0.,0.,1.)); #15289=DIRECTION('center_axis',(1.,0.,0.)); #15290=DIRECTION('ref_axis',(0.,1.,0.)); #15291=DIRECTION('',(0.,-1.,0.)); #15292=DIRECTION('',(0.,1.,0.)); #15293=DIRECTION('',(0.,0.,1.)); #15294=DIRECTION('center_axis',(0.,-1.,0.)); #15295=DIRECTION('ref_axis',(1.,0.,0.)); #15296=DIRECTION('',(-1.,0.,0.)); #15297=DIRECTION('',(1.,0.,0.)); #15298=DIRECTION('',(0.,0.,1.)); #15299=DIRECTION('center_axis',(-1.,0.,0.)); #15300=DIRECTION('ref_axis',(0.,-1.,0.)); #15301=DIRECTION('',(0.,1.,0.)); #15302=DIRECTION('',(0.,-1.,0.)); #15303=DIRECTION('',(0.,0.,1.)); #15304=DIRECTION('center_axis',(0.,1.,0.)); #15305=DIRECTION('ref_axis',(-1.,0.,0.)); #15306=DIRECTION('',(1.,0.,0.)); #15307=DIRECTION('',(-1.,0.,0.)); #15308=DIRECTION('',(0.,0.,1.)); #15309=DIRECTION('center_axis',(0.891303903450308,0.45340638691382,0.)); #15310=DIRECTION('ref_axis',(-0.45340638691382,0.891303903450308,0.)); #15311=DIRECTION('',(0.45340638691382,-0.891303903450308,0.)); #15312=DIRECTION('',(-0.45340638691382,0.891303903450308,0.)); #15313=DIRECTION('',(0.,0.,1.)); #15314=DIRECTION('center_axis',(-1.,0.,0.)); #15315=DIRECTION('ref_axis',(0.,-1.,0.)); #15316=DIRECTION('',(0.,1.,0.)); #15317=DIRECTION('',(0.,-1.,0.)); #15318=DIRECTION('',(0.,0.,1.)); #15319=DIRECTION('center_axis',(0.,1.,0.)); #15320=DIRECTION('ref_axis',(-1.,0.,0.)); #15321=DIRECTION('',(1.,0.,0.)); #15322=DIRECTION('',(-1.,0.,0.)); #15323=DIRECTION('',(0.,0.,1.)); #15324=DIRECTION('center_axis',(1.,0.,0.)); #15325=DIRECTION('ref_axis',(0.,1.,0.)); #15326=DIRECTION('',(0.,-1.,0.)); #15327=DIRECTION('',(0.,1.,0.)); #15328=DIRECTION('',(0.,0.,1.)); #15329=DIRECTION('center_axis',(0.,-1.,0.)); #15330=DIRECTION('ref_axis',(1.,0.,0.)); #15331=DIRECTION('',(-1.,0.,0.)); #15332=DIRECTION('',(1.,0.,0.)); #15333=DIRECTION('center_axis',(0.,0.,1.)); #15334=DIRECTION('ref_axis',(1.,0.,0.)); #15335=DIRECTION('center_axis',(0.,0.,1.)); #15336=DIRECTION('ref_axis',(1.,0.,0.)); #15337=DIRECTION('center_axis',(0.,0.,1.)); #15338=DIRECTION('ref_axis',(0.842412213008148,-0.538833613812942,0.)); #15339=DIRECTION('center_axis',(0.,0.,-1.)); #15340=DIRECTION('ref_axis',(0.842412213008148,-0.538833613812942,0.)); #15341=DIRECTION('',(0.,0.,-1.)); #15342=DIRECTION('center_axis',(0.,0.,1.)); #15343=DIRECTION('ref_axis',(0.842412213008148,-0.538833613812942,0.)); #15344=DIRECTION('',(0.,0.,1.)); #15345=DIRECTION('center_axis',(0.,0.,1.)); #15346=DIRECTION('ref_axis',(1.,0.,0.)); #15347=DIRECTION('',(1.,0.,0.)); #15348=DIRECTION('',(-0.283427278082505,-0.958993732012229,0.)); #15349=DIRECTION('',(-1.,0.,0.)); #15350=DIRECTION('',(0.283427278082506,0.958993732012228,0.)); #15351=DIRECTION('',(1.,0.,0.)); #15352=DIRECTION('center_axis',(0.,0.,-1.)); #15353=DIRECTION('ref_axis',(-0.907840034110669,-0.419316673250586,0.)); #15354=DIRECTION('',(-0.419316673250587,0.907840034110669,0.)); #15355=DIRECTION('center_axis',(0.,-1.,0.)); #15356=DIRECTION('ref_axis',(1.,0.,0.)); #15357=DIRECTION('',(1.,0.,0.)); #15358=DIRECTION('',(0.,0.,1.)); #15359=DIRECTION('center_axis',(0.,0.,-1.)); #15360=DIRECTION('ref_axis',(-0.907840034110669,-0.419316673250586,0.)); #15361=DIRECTION('',(0.,0.,1.)); #15362=DIRECTION('center_axis',(0.,0.,1.)); #15363=DIRECTION('ref_axis',(-0.907840034110669,-0.419316673250586,0.)); #15364=DIRECTION('',(0.,0.,-1.)); #15365=DIRECTION('center_axis',(0.907840034110669,0.419316673250587,0.)); #15366=DIRECTION('ref_axis',(-0.419316673250587,0.907840034110669,0.)); #15367=DIRECTION('',(-0.419316673250587,0.907840034110669,0.)); #15368=DIRECTION('center_axis',(0.958993732012228,-0.283427278082506,0.)); #15369=DIRECTION('ref_axis',(0.283427278082506,0.958993732012228,0.)); #15370=DIRECTION('',(0.,0.,1.)); #15371=DIRECTION('',(0.283427278082506,0.958993732012228,0.)); #15372=DIRECTION('',(0.,0.,1.)); #15373=DIRECTION('center_axis',(0.,-1.,0.)); #15374=DIRECTION('ref_axis',(1.,0.,0.)); #15375=DIRECTION('',(1.,0.,0.)); #15376=DIRECTION('center_axis',(-0.958993732012229,0.283427278082505,0.)); #15377=DIRECTION('ref_axis',(-0.283427278082505,-0.958993732012229,0.)); #15378=DIRECTION('',(-0.283427278082505,-0.958993732012229,0.)); #15379=DIRECTION('',(0.,0.,1.)); #15380=DIRECTION('center_axis',(0.,1.,0.)); #15381=DIRECTION('ref_axis',(-1.,0.,0.)); #15382=DIRECTION('',(-1.,0.,0.)); #15383=DIRECTION('center_axis',(0.,0.,1.)); #15384=DIRECTION('ref_axis',(1.,0.,0.)); #15385=DIRECTION('center_axis',(0.,0.,1.)); #15386=DIRECTION('ref_axis',(-1.,0.,0.)); #15387=DIRECTION('center_axis',(0.,0.,1.)); #15388=DIRECTION('ref_axis',(-1.,0.,0.)); #15389=DIRECTION('center_axis',(0.,0.,-1.)); #15390=DIRECTION('ref_axis',(-1.,0.,0.)); #15391=DIRECTION('center_axis',(0.,0.,1.)); #15392=DIRECTION('ref_axis',(1.,0.,0.)); #15393=DIRECTION('center_axis',(0.,0.,1.)); #15394=DIRECTION('ref_axis',(1.,0.,0.)); #15395=DIRECTION('center_axis',(0.,-1.,0.)); #15396=DIRECTION('ref_axis',(1.,0.,0.)); #15397=DIRECTION('',(1.,0.,0.)); #15398=DIRECTION('',(0.,0.,1.)); #15399=DIRECTION('',(1.,0.,0.)); #15400=DIRECTION('',(0.,0.,1.)); #15401=DIRECTION('center_axis',(-0.958993732012228,0.283427278082506,0.)); #15402=DIRECTION('ref_axis',(-0.283427278082506,-0.958993732012228,0.)); #15403=DIRECTION('',(-0.283427278082506,-0.958993732012228,0.)); #15404=DIRECTION('',(-0.283427278082506,-0.958993732012228,0.)); #15405=DIRECTION('',(0.,0.,1.)); #15406=DIRECTION('center_axis',(0.,1.,0.)); #15407=DIRECTION('ref_axis',(-1.,0.,0.)); #15408=DIRECTION('',(-1.,0.,0.)); #15409=DIRECTION('',(-1.,0.,0.)); #15410=DIRECTION('',(0.,0.,1.)); #15411=DIRECTION('center_axis',(0.958993732012229,-0.283427278082505,0.)); #15412=DIRECTION('ref_axis',(0.283427278082506,0.958993732012229,0.)); #15413=DIRECTION('',(0.283427278082505,0.958993732012229,0.)); #15414=DIRECTION('',(0.283427278082505,0.958993732012229,0.)); #15415=DIRECTION('center_axis',(0.,0.,1.)); #15416=DIRECTION('ref_axis',(1.,0.,0.)); #15417=DIRECTION('center_axis',(0.,0.,1.)); #15418=DIRECTION('ref_axis',(1.,0.,0.)); #15419=DIRECTION('center_axis',(0.,0.,1.)); #15420=DIRECTION('ref_axis',(0.690993368401873,-0.722861096494086,0.)); #15421=DIRECTION('center_axis',(0.,0.,-1.)); #15422=DIRECTION('ref_axis',(0.690993368401873,-0.722861096494086,0.)); #15423=DIRECTION('',(0.,0.,1.)); #15424=DIRECTION('center_axis',(0.,0.,1.)); #15425=DIRECTION('ref_axis',(0.690993368401873,-0.722861096494086,0.)); #15426=DIRECTION('',(0.,0.,-1.)); #15427=DIRECTION('center_axis',(-0.251422998089574,0.967877304223862,0.)); #15428=DIRECTION('ref_axis',(-0.967877304223862,-0.251422998089574,0.)); #15429=DIRECTION('',(-0.967877304223862,-0.251422998089574,0.)); #15430=DIRECTION('',(0.,0.,1.)); #15431=DIRECTION('',(-0.967877304223862,-0.251422998089574,0.)); #15432=DIRECTION('center_axis',(0.,0.,1.)); #15433=DIRECTION('ref_axis',(0.997774022680354,0.0666858280616196,0.)); #15434=DIRECTION('center_axis',(0.,0.,-1.)); #15435=DIRECTION('ref_axis',(0.997774022680354,0.0666858280616196,0.)); #15436=DIRECTION('',(0.,0.,1.)); #15437=DIRECTION('center_axis',(0.,0.,1.)); #15438=DIRECTION('ref_axis',(0.997774022680354,0.0666858280616196,0.)); #15439=DIRECTION('',(0.,0.,-1.)); #15440=DIRECTION('center_axis',(-0.955566176917725,0.294776663816598,0.)); #15441=DIRECTION('ref_axis',(-0.294776663816598,-0.955566176917725,0.)); #15442=DIRECTION('',(-0.294776663816598,-0.955566176917725,0.)); #15443=DIRECTION('',(-0.294776663816598,-0.955566176917725,0.)); #15444=DIRECTION('center_axis',(0.,0.,1.)); #15445=DIRECTION('ref_axis',(-0.84241221300815,0.538833613812938,0.)); #15446=DIRECTION('center_axis',(0.,0.,-1.)); #15447=DIRECTION('ref_axis',(-0.84241221300815,0.538833613812938,0.)); #15448=DIRECTION('',(0.,0.,-1.)); #15449=DIRECTION('center_axis',(0.,0.,1.)); #15450=DIRECTION('ref_axis',(-0.84241221300815,0.538833613812938,0.)); #15451=DIRECTION('',(0.,0.,1.)); #15452=DIRECTION('center_axis',(0.,0.,1.)); #15453=DIRECTION('ref_axis',(1.,0.,0.)); #15454=DIRECTION('',(0.419316673250586,-0.907840034110669,0.)); #15455=DIRECTION('',(1.,0.,0.)); #15456=DIRECTION('',(0.283427278082505,0.958993732012229,0.)); #15457=DIRECTION('',(-1.,0.,0.)); #15458=DIRECTION('center_axis',(-0.907840034110669,-0.419316673250586,0.)); #15459=DIRECTION('ref_axis',(0.419316673250586,-0.907840034110669,0.)); #15460=DIRECTION('',(0.419316673250586,-0.907840034110669,0.)); #15461=DIRECTION('center_axis',(0.,1.,0.)); #15462=DIRECTION('ref_axis',(-1.,0.,0.)); #15463=DIRECTION('',(0.,0.,1.)); #15464=DIRECTION('',(-1.,0.,0.)); #15465=DIRECTION('center_axis',(0.958993732012229,-0.283427278082505,0.)); #15466=DIRECTION('ref_axis',(0.283427278082505,0.958993732012229,0.)); #15467=DIRECTION('',(0.283427278082505,0.958993732012229,0.)); #15468=DIRECTION('',(0.,0.,1.)); #15469=DIRECTION('center_axis',(0.,-1.,0.)); #15470=DIRECTION('ref_axis',(1.,0.,0.)); #15471=DIRECTION('',(1.,0.,0.)); #15472=DIRECTION('center_axis',(0.,0.,1.)); #15473=DIRECTION('ref_axis',(1.,0.,0.)); #15474=DIRECTION('center_axis',(0.,-1.,0.)); #15475=DIRECTION('ref_axis',(1.,0.,0.)); #15476=DIRECTION('',(-1.,0.,0.)); #15477=DIRECTION('',(0.,0.,1.)); #15478=DIRECTION('',(1.,0.,0.)); #15479=DIRECTION('',(0.,0.,1.)); #15480=DIRECTION('center_axis',(-0.945495051848976,-0.325636464372622,0.)); #15481=DIRECTION('ref_axis',(0.325636464372622,-0.945495051848976,0.)); #15482=DIRECTION('',(-0.325636464372622,0.945495051848976,0.)); #15483=DIRECTION('',(0.325636464372622,-0.945495051848976,0.)); #15484=DIRECTION('',(0.,0.,1.)); #15485=DIRECTION('center_axis',(0.,1.,0.)); #15486=DIRECTION('ref_axis',(-1.,0.,0.)); #15487=DIRECTION('',(1.,0.,0.)); #15488=DIRECTION('',(-1.,0.,0.)); #15489=DIRECTION('',(0.,0.,1.)); #15490=DIRECTION('center_axis',(0.948590711989459,0.316505388780872,0.)); #15491=DIRECTION('ref_axis',(-0.316505388780872,0.948590711989459,0.)); #15492=DIRECTION('',(0.316505388780872,-0.948590711989459,0.)); #15493=DIRECTION('',(-0.316505388780872,0.948590711989459,0.)); #15494=DIRECTION('',(0.,0.,1.)); #15495=DIRECTION('center_axis',(-0.948590711989459,0.316505388780874,0.)); #15496=DIRECTION('ref_axis',(-0.316505388780874,-0.948590711989459,0.)); #15497=DIRECTION('',(0.316505388780874,0.948590711989459,0.)); #15498=DIRECTION('',(-0.316505388780874,-0.948590711989459,0.)); #15499=DIRECTION('',(0.,0.,1.)); #15500=DIRECTION('center_axis',(0.,1.,0.)); #15501=DIRECTION('ref_axis',(-1.,0.,0.)); #15502=DIRECTION('',(1.,0.,0.)); #15503=DIRECTION('',(-1.,0.,0.)); #15504=DIRECTION('',(0.,0.,1.)); #15505=DIRECTION('center_axis',(0.945495051848977,-0.32563646437262,0.)); #15506=DIRECTION('ref_axis',(0.32563646437262,0.945495051848977,0.)); #15507=DIRECTION('',(-0.32563646437262,-0.945495051848977,0.)); #15508=DIRECTION('',(0.32563646437262,0.945495051848977,0.)); #15509=DIRECTION('center_axis',(0.,0.,1.)); #15510=DIRECTION('ref_axis',(1.,0.,0.)); #15511=DIRECTION('center_axis',(0.,0.,1.)); #15512=DIRECTION('ref_axis',(1.,0.,0.)); #15513=DIRECTION('center_axis',(0.,-1.,0.)); #15514=DIRECTION('ref_axis',(1.,0.,0.)); #15515=DIRECTION('',(-1.,0.,0.)); #15516=DIRECTION('',(0.,0.,1.)); #15517=DIRECTION('',(1.,0.,0.)); #15518=DIRECTION('',(0.,0.,1.)); #15519=DIRECTION('center_axis',(-0.887976570973569,0.459888692405045,0.)); #15520=DIRECTION('ref_axis',(-0.459888692405045,-0.887976570973569,0.)); #15521=DIRECTION('',(0.459888692405045,0.887976570973569,0.)); #15522=DIRECTION('',(-0.459888692405045,-0.887976570973569,0.)); #15523=DIRECTION('',(0.,0.,1.)); #15524=DIRECTION('center_axis',(0.,-1.,0.)); #15525=DIRECTION('ref_axis',(1.,0.,0.)); #15526=DIRECTION('',(-1.,0.,0.)); #15527=DIRECTION('',(1.,0.,0.)); #15528=DIRECTION('',(0.,0.,1.)); #15529=DIRECTION('center_axis',(-1.,0.,0.)); #15530=DIRECTION('ref_axis',(0.,-1.,0.)); #15531=DIRECTION('',(0.,1.,0.)); #15532=DIRECTION('',(0.,-1.,0.)); #15533=DIRECTION('',(0.,0.,1.)); #15534=DIRECTION('center_axis',(0.,1.,0.)); #15535=DIRECTION('ref_axis',(-1.,0.,0.)); #15536=DIRECTION('',(1.,0.,0.)); #15537=DIRECTION('',(-1.,0.,0.)); #15538=DIRECTION('',(0.,0.,1.)); #15539=DIRECTION('center_axis',(1.,0.,0.)); #15540=DIRECTION('ref_axis',(0.,1.,0.)); #15541=DIRECTION('',(0.,-1.,0.)); #15542=DIRECTION('',(0.,1.,0.)); #15543=DIRECTION('',(0.,0.,1.)); #15544=DIRECTION('center_axis',(0.891175605333304,-0.453658506432778,0.)); #15545=DIRECTION('ref_axis',(0.453658506432778,0.891175605333304,0.)); #15546=DIRECTION('',(-0.453658506432778,-0.891175605333304,0.)); #15547=DIRECTION('',(0.453658506432778,0.891175605333304,0.)); #15548=DIRECTION('center_axis',(0.,0.,1.)); #15549=DIRECTION('ref_axis',(1.,0.,0.)); #15550=DIRECTION('center_axis',(0.,0.,1.)); #15551=DIRECTION('ref_axis',(1.,0.,0.)); #15552=DIRECTION('center_axis',(0.,-1.,0.)); #15553=DIRECTION('ref_axis',(1.,0.,0.)); #15554=DIRECTION('',(1.,0.,0.)); #15555=DIRECTION('',(0.,0.,1.)); #15556=DIRECTION('',(-1.,0.,0.)); #15557=DIRECTION('',(0.,0.,1.)); #15558=DIRECTION('center_axis',(-0.95046744572869,0.310824121666869,0.)); #15559=DIRECTION('ref_axis',(-0.310824121666869,-0.95046744572869,0.)); #15560=DIRECTION('',(-0.310824121666869,-0.95046744572869,0.)); #15561=DIRECTION('',(0.,0.,1.)); #15562=DIRECTION('',(0.310824121666869,0.95046744572869,0.)); #15563=DIRECTION('center_axis',(0.949983248285707,0.312300861312512,0.)); #15564=DIRECTION('ref_axis',(-0.312300861312512,0.949983248285707,0.)); #15565=DIRECTION('',(-0.312300861312512,0.949983248285707,0.)); #15566=DIRECTION('',(0.312300861312512,-0.949983248285707,0.)); #15567=DIRECTION('center_axis',(0.,1.,0.)); #15568=DIRECTION('ref_axis',(-1.,0.,0.)); #15569=DIRECTION('',(1.,0.,0.)); #15570=DIRECTION('',(0.,0.,1.)); #15571=DIRECTION('',(-1.,0.,0.)); #15572=DIRECTION('',(0.,0.,1.)); #15573=DIRECTION('center_axis',(0.947602739606771,0.319451166674568,0.)); #15574=DIRECTION('ref_axis',(-0.319451166674568,0.947602739606771,0.)); #15575=DIRECTION('',(0.319451166674568,-0.947602739606771,0.)); #15576=DIRECTION('',(-0.319451166674568,0.947602739606771,0.)); #15577=DIRECTION('',(0.,0.,1.)); #15578=DIRECTION('center_axis',(0.,-1.,0.)); #15579=DIRECTION('ref_axis',(1.,0.,0.)); #15580=DIRECTION('',(-1.,0.,0.)); #15581=DIRECTION('',(1.,0.,0.)); #15582=DIRECTION('',(0.,0.,1.)); #15583=DIRECTION('center_axis',(-0.951135317488762,-0.308774363938381,0.)); #15584=DIRECTION('ref_axis',(0.308774363938381,-0.951135317488762,0.)); #15585=DIRECTION('',(-0.308774363938381,0.951135317488762,0.)); #15586=DIRECTION('',(0.308774363938381,-0.951135317488762,0.)); #15587=DIRECTION('',(0.,0.,1.)); #15588=DIRECTION('center_axis',(0.,-1.,0.)); #15589=DIRECTION('ref_axis',(1.,0.,0.)); #15590=DIRECTION('',(-1.,0.,0.)); #15591=DIRECTION('',(1.,0.,0.)); #15592=DIRECTION('',(0.,0.,1.)); #15593=DIRECTION('center_axis',(0.951135317488762,-0.308774363938381,0.)); #15594=DIRECTION('ref_axis',(0.308774363938381,0.951135317488762,0.)); #15595=DIRECTION('',(-0.308774363938381,-0.951135317488762,0.)); #15596=DIRECTION('',(0.308774363938381,0.951135317488762,0.)); #15597=DIRECTION('',(0.,0.,1.)); #15598=DIRECTION('center_axis',(0.,-1.,0.)); #15599=DIRECTION('ref_axis',(1.,0.,0.)); #15600=DIRECTION('',(-1.,0.,0.)); #15601=DIRECTION('',(1.,0.,0.)); #15602=DIRECTION('',(0.,0.,1.)); #15603=DIRECTION('center_axis',(-0.947602739606771,0.319451166674568,0.)); #15604=DIRECTION('ref_axis',(-0.319451166674568,-0.947602739606771,0.)); #15605=DIRECTION('',(0.319451166674568,0.947602739606771,0.)); #15606=DIRECTION('',(-0.319451166674568,-0.947602739606771,0.)); #15607=DIRECTION('center_axis',(0.,0.,1.)); #15608=DIRECTION('ref_axis',(1.,0.,0.)); #15609=DIRECTION('center_axis',(0.,0.,1.)); #15610=DIRECTION('ref_axis',(1.,0.,0.)); #15611=DIRECTION('center_axis',(-1.,0.,0.)); #15612=DIRECTION('ref_axis',(0.,-1.,0.)); #15613=DIRECTION('',(0.,1.,0.)); #15614=DIRECTION('',(0.,0.,1.)); #15615=DIRECTION('',(0.,-1.,0.)); #15616=DIRECTION('',(0.,0.,1.)); #15617=DIRECTION('center_axis',(0.,1.,0.)); #15618=DIRECTION('ref_axis',(-1.,0.,0.)); #15619=DIRECTION('',(1.,0.,0.)); #15620=DIRECTION('',(-1.,0.,0.)); #15621=DIRECTION('',(0.,0.,1.)); #15622=DIRECTION('center_axis',(1.,0.,0.)); #15623=DIRECTION('ref_axis',(0.,1.,0.)); #15624=DIRECTION('',(0.,-1.,0.)); #15625=DIRECTION('',(0.,1.,0.)); #15626=DIRECTION('',(0.,0.,1.)); #15627=DIRECTION('center_axis',(0.,1.,0.)); #15628=DIRECTION('ref_axis',(-1.,0.,0.)); #15629=DIRECTION('',(1.,0.,0.)); #15630=DIRECTION('',(-1.,0.,0.)); #15631=DIRECTION('',(0.,0.,1.)); #15632=DIRECTION('center_axis',(1.,0.,0.)); #15633=DIRECTION('ref_axis',(0.,1.,0.)); #15634=DIRECTION('',(0.,-1.,0.)); #15635=DIRECTION('',(0.,1.,0.)); #15636=DIRECTION('',(0.,0.,1.)); #15637=DIRECTION('center_axis',(0.,-1.,0.)); #15638=DIRECTION('ref_axis',(1.,0.,0.)); #15639=DIRECTION('',(-1.,0.,0.)); #15640=DIRECTION('',(1.,0.,0.)); #15641=DIRECTION('center_axis',(0.,0.,1.)); #15642=DIRECTION('ref_axis',(1.,0.,0.)); #15643=DIRECTION('center_axis',(0.,0.,1.)); #15644=DIRECTION('ref_axis',(1.,0.,0.)); #15645=DIRECTION('center_axis',(0.,-1.,0.)); #15646=DIRECTION('ref_axis',(1.,0.,0.)); #15647=DIRECTION('',(-1.,0.,0.)); #15648=DIRECTION('',(0.,0.,1.)); #15649=DIRECTION('',(1.,0.,0.)); #15650=DIRECTION('',(0.,0.,1.)); #15651=DIRECTION('center_axis',(-1.,0.,0.)); #15652=DIRECTION('ref_axis',(0.,-1.,0.)); #15653=DIRECTION('',(0.,1.,0.)); #15654=DIRECTION('',(0.,-1.,0.)); #15655=DIRECTION('',(0.,0.,1.)); #15656=DIRECTION('center_axis',(0.,1.,0.)); #15657=DIRECTION('ref_axis',(-1.,0.,0.)); #15658=DIRECTION('',(1.,0.,0.)); #15659=DIRECTION('',(-1.,0.,0.)); #15660=DIRECTION('',(0.,0.,1.)); #15661=DIRECTION('center_axis',(1.,0.,0.)); #15662=DIRECTION('ref_axis',(0.,1.,0.)); #15663=DIRECTION('',(0.,-1.,0.)); #15664=DIRECTION('',(0.,1.,0.)); #15665=DIRECTION('',(0.,0.,1.)); #15666=DIRECTION('center_axis',(0.,-1.,0.)); #15667=DIRECTION('ref_axis',(1.,0.,0.)); #15668=DIRECTION('',(-1.,0.,0.)); #15669=DIRECTION('',(1.,0.,0.)); #15670=DIRECTION('',(0.,0.,1.)); #15671=DIRECTION('center_axis',(1.,0.,0.)); #15672=DIRECTION('ref_axis',(0.,1.,0.)); #15673=DIRECTION('',(0.,-1.,0.)); #15674=DIRECTION('',(0.,1.,0.)); #15675=DIRECTION('',(0.,0.,1.)); #15676=DIRECTION('center_axis',(0.,-1.,0.)); #15677=DIRECTION('ref_axis',(1.,0.,0.)); #15678=DIRECTION('',(-1.,0.,0.)); #15679=DIRECTION('',(1.,0.,0.)); #15680=DIRECTION('',(0.,0.,1.)); #15681=DIRECTION('center_axis',(-1.,0.,0.)); #15682=DIRECTION('ref_axis',(0.,-1.,0.)); #15683=DIRECTION('',(0.,1.,0.)); #15684=DIRECTION('',(0.,-1.,0.)); #15685=DIRECTION('center_axis',(0.,0.,1.)); #15686=DIRECTION('ref_axis',(1.,0.,0.)); #15687=DIRECTION('center_axis',(0.,0.,1.)); #15688=DIRECTION('ref_axis',(1.,0.,0.)); #15689=DIRECTION('center_axis',(0.,-1.,0.)); #15690=DIRECTION('ref_axis',(1.,0.,0.)); #15691=DIRECTION('',(-1.,0.,0.)); #15692=DIRECTION('',(0.,0.,1.)); #15693=DIRECTION('',(1.,0.,0.)); #15694=DIRECTION('',(0.,0.,1.)); #15695=DIRECTION('center_axis',(-1.,0.,0.)); #15696=DIRECTION('ref_axis',(0.,-1.,0.)); #15697=DIRECTION('',(0.,1.,0.)); #15698=DIRECTION('',(0.,-1.,0.)); #15699=DIRECTION('',(0.,0.,1.)); #15700=DIRECTION('center_axis',(0.,1.,0.)); #15701=DIRECTION('ref_axis',(-1.,0.,0.)); #15702=DIRECTION('',(1.,0.,0.)); #15703=DIRECTION('',(-1.,0.,0.)); #15704=DIRECTION('',(0.,0.,1.)); #15705=DIRECTION('center_axis',(1.,0.,0.)); #15706=DIRECTION('ref_axis',(0.,1.,0.)); #15707=DIRECTION('',(0.,-1.,0.)); #15708=DIRECTION('',(0.,1.,0.)); #15709=DIRECTION('',(0.,0.,1.)); #15710=DIRECTION('center_axis',(0.,-1.,0.)); #15711=DIRECTION('ref_axis',(1.,0.,0.)); #15712=DIRECTION('',(-1.,0.,0.)); #15713=DIRECTION('',(1.,0.,0.)); #15714=DIRECTION('',(0.,0.,1.)); #15715=DIRECTION('center_axis',(1.,0.,0.)); #15716=DIRECTION('ref_axis',(0.,1.,0.)); #15717=DIRECTION('',(0.,-1.,0.)); #15718=DIRECTION('',(0.,1.,0.)); #15719=DIRECTION('',(0.,0.,1.)); #15720=DIRECTION('center_axis',(0.,-1.,0.)); #15721=DIRECTION('ref_axis',(1.,0.,0.)); #15722=DIRECTION('',(-1.,0.,0.)); #15723=DIRECTION('',(1.,0.,0.)); #15724=DIRECTION('',(0.,0.,1.)); #15725=DIRECTION('center_axis',(-1.,0.,0.)); #15726=DIRECTION('ref_axis',(0.,-1.,0.)); #15727=DIRECTION('',(0.,1.,0.)); #15728=DIRECTION('',(0.,-1.,0.)); #15729=DIRECTION('center_axis',(0.,0.,1.)); #15730=DIRECTION('ref_axis',(1.,0.,0.)); #15731=DIRECTION('center_axis',(0.,0.,1.)); #15732=DIRECTION('ref_axis',(1.,0.,0.)); #15733=DIRECTION('center_axis',(-1.,0.,0.)); #15734=DIRECTION('ref_axis',(0.,-1.,0.)); #15735=DIRECTION('',(0.,1.,0.)); #15736=DIRECTION('',(0.,0.,1.)); #15737=DIRECTION('',(0.,-1.,0.)); #15738=DIRECTION('',(0.,0.,1.)); #15739=DIRECTION('center_axis',(0.,1.,0.)); #15740=DIRECTION('ref_axis',(-1.,0.,0.)); #15741=DIRECTION('',(1.,0.,0.)); #15742=DIRECTION('',(-1.,0.,0.)); #15743=DIRECTION('',(0.,0.,1.)); #15744=DIRECTION('center_axis',(1.,0.,0.)); #15745=DIRECTION('ref_axis',(0.,1.,0.)); #15746=DIRECTION('',(0.,-1.,0.)); #15747=DIRECTION('',(0.,1.,0.)); #15748=DIRECTION('',(0.,0.,1.)); #15749=DIRECTION('center_axis',(0.,-1.,0.)); #15750=DIRECTION('ref_axis',(1.,0.,0.)); #15751=DIRECTION('',(-1.,0.,0.)); #15752=DIRECTION('',(1.,0.,0.)); #15753=DIRECTION('center_axis',(0.,0.,1.)); #15754=DIRECTION('ref_axis',(1.,0.,0.)); #15755=DIRECTION('center_axis',(0.,0.,1.)); #15756=DIRECTION('ref_axis',(1.,0.,0.)); #15757=DIRECTION('',(0.,0.,1.)); #15758=DIRECTION('',(0.,0.,1.)); #15759=DIRECTION('',(0.,0.,1.)); #15760=DIRECTION('',(0.,0.,1.)); #15761=DIRECTION('',(0.,0.,1.)); #15762=DIRECTION('center_axis',(1.,0.,0.)); #15763=DIRECTION('ref_axis',(0.,1.,0.)); #15764=DIRECTION('',(0.,-1.,0.)); #15765=DIRECTION('',(0.,1.,0.)); #15766=DIRECTION('',(0.,0.,1.)); #15767=DIRECTION('center_axis',(0.,-1.,0.)); #15768=DIRECTION('ref_axis',(1.,0.,0.)); #15769=DIRECTION('',(-1.,0.,0.)); #15770=DIRECTION('',(1.,0.,0.)); #15771=DIRECTION('',(0.,0.,1.)); #15772=DIRECTION('',(0.,0.,1.)); #15773=DIRECTION('',(0.,0.,1.)); #15774=DIRECTION('',(0.,0.,1.)); #15775=DIRECTION('',(0.,0.,1.)); #15776=DIRECTION('',(0.,0.,1.)); #15777=DIRECTION('center_axis',(0.,1.,0.)); #15778=DIRECTION('ref_axis',(-1.,0.,0.)); #15779=DIRECTION('',(1.,0.,0.)); #15780=DIRECTION('',(-1.,0.,0.)); #15781=DIRECTION('',(0.,0.,1.)); #15782=DIRECTION('center_axis',(1.,0.,0.)); #15783=DIRECTION('ref_axis',(0.,1.,0.)); #15784=DIRECTION('',(0.,-1.,0.)); #15785=DIRECTION('',(0.,1.,0.)); #15786=DIRECTION('',(0.,0.,1.)); #15787=DIRECTION('',(0.,0.,1.)); #15788=DIRECTION('',(0.,0.,1.)); #15789=DIRECTION('center_axis',(0.,0.,1.)); #15790=DIRECTION('ref_axis',(1.,0.,0.)); #15791=DIRECTION('center_axis',(0.,0.,1.)); #15792=DIRECTION('ref_axis',(1.,0.,0.)); #15793=DIRECTION('',(0.,0.,1.)); #15794=DIRECTION('',(0.,0.,1.)); #15795=DIRECTION('',(0.,0.,1.)); #15796=DIRECTION('',(0.,0.,1.)); #15797=DIRECTION('',(0.,0.,1.)); #15798=DIRECTION('',(0.,0.,1.)); #15799=DIRECTION('',(0.,0.,1.)); #15800=DIRECTION('',(0.,0.,1.)); #15801=DIRECTION('center_axis',(0.,0.,1.)); #15802=DIRECTION('ref_axis',(1.,0.,0.)); #15803=DIRECTION('center_axis',(0.,0.,1.)); #15804=DIRECTION('ref_axis',(1.,0.,0.)); #15805=DIRECTION('center_axis',(-6.61108328641768E-15,-1.,0.)); #15806=DIRECTION('ref_axis',(1.,-6.61692922676593E-15,0.)); #15807=DIRECTION('',(1.,-6.61108328641768E-15,0.)); #15808=DIRECTION('',(0.,0.,1.)); #15809=DIRECTION('',(-1.,6.61108328641768E-15,0.)); #15810=DIRECTION('',(0.,0.,1.)); #15811=DIRECTION('',(0.,0.,1.)); #15812=DIRECTION('',(0.,0.,1.)); #15813=DIRECTION('',(0.,0.,1.)); #15814=DIRECTION('',(0.,0.,1.)); #15815=DIRECTION('',(0.,0.,1.)); #15816=DIRECTION('',(0.,0.,1.)); #15817=DIRECTION('',(0.,0.,1.)); #15818=DIRECTION('center_axis',(1.,0.,0.)); #15819=DIRECTION('ref_axis',(0.,1.,0.)); #15820=DIRECTION('',(0.,-1.,0.)); #15821=DIRECTION('',(0.,1.,0.)); #15822=DIRECTION('',(0.,0.,1.)); #15823=DIRECTION('center_axis',(0.,-1.,0.)); #15824=DIRECTION('ref_axis',(1.,0.,0.)); #15825=DIRECTION('',(-1.,0.,0.)); #15826=DIRECTION('',(1.,0.,0.)); #15827=DIRECTION('',(0.,0.,1.)); #15828=DIRECTION('',(0.,0.,1.)); #15829=DIRECTION('',(0.,0.,1.)); #15830=DIRECTION('',(0.,0.,1.)); #15831=DIRECTION('center_axis',(0.,1.,0.)); #15832=DIRECTION('ref_axis',(-1.,0.,0.)); #15833=DIRECTION('',(1.,0.,0.)); #15834=DIRECTION('',(-1.,0.,0.)); #15835=DIRECTION('',(0.,0.,1.)); #15836=DIRECTION('center_axis',(1.,0.,0.)); #15837=DIRECTION('ref_axis',(0.,1.,0.)); #15838=DIRECTION('',(0.,-1.,0.)); #15839=DIRECTION('',(0.,1.,0.)); #15840=DIRECTION('',(0.,0.,1.)); #15841=DIRECTION('',(0.,0.,1.)); #15842=DIRECTION('',(0.,0.,1.)); #15843=DIRECTION('center_axis',(0.,0.,1.)); #15844=DIRECTION('ref_axis',(1.,0.,0.)); #15845=DIRECTION('center_axis',(0.,0.,1.)); #15846=DIRECTION('ref_axis',(1.,0.,0.)); #15847=DIRECTION('center_axis',(-1.,0.,0.)); #15848=DIRECTION('ref_axis',(0.,-1.,0.)); #15849=DIRECTION('',(0.,1.,0.)); #15850=DIRECTION('',(0.,0.,1.)); #15851=DIRECTION('',(0.,-1.,0.)); #15852=DIRECTION('',(0.,0.,1.)); #15853=DIRECTION('center_axis',(0.,1.,0.)); #15854=DIRECTION('ref_axis',(-1.,0.,0.)); #15855=DIRECTION('',(1.,0.,0.)); #15856=DIRECTION('',(-1.,0.,0.)); #15857=DIRECTION('',(0.,0.,1.)); #15858=DIRECTION('center_axis',(1.,0.,0.)); #15859=DIRECTION('ref_axis',(0.,1.,0.)); #15860=DIRECTION('',(0.,-1.,0.)); #15861=DIRECTION('',(0.,1.,0.)); #15862=DIRECTION('',(0.,0.,1.)); #15863=DIRECTION('center_axis',(0.,-1.,0.)); #15864=DIRECTION('ref_axis',(1.,0.,0.)); #15865=DIRECTION('',(-1.,0.,0.)); #15866=DIRECTION('',(1.,0.,0.)); #15867=DIRECTION('center_axis',(0.,0.,1.)); #15868=DIRECTION('ref_axis',(1.,0.,0.)); #15869=DIRECTION('center_axis',(0.,0.,1.)); #15870=DIRECTION('ref_axis',(1.,0.,0.)); #15871=DIRECTION('center_axis',(-1.,0.,0.)); #15872=DIRECTION('ref_axis',(0.,-1.,0.)); #15873=DIRECTION('',(0.,1.,0.)); #15874=DIRECTION('',(0.,0.,1.)); #15875=DIRECTION('',(0.,-1.,0.)); #15876=DIRECTION('',(0.,0.,1.)); #15877=DIRECTION('center_axis',(0.,-1.,0.)); #15878=DIRECTION('ref_axis',(1.,0.,0.)); #15879=DIRECTION('',(-1.,0.,0.)); #15880=DIRECTION('',(1.,0.,0.)); #15881=DIRECTION('',(0.,0.,1.)); #15882=DIRECTION('center_axis',(-1.,0.,0.)); #15883=DIRECTION('ref_axis',(0.,-1.,0.)); #15884=DIRECTION('',(0.,1.,0.)); #15885=DIRECTION('',(0.,-1.,0.)); #15886=DIRECTION('',(0.,0.,1.)); #15887=DIRECTION('center_axis',(0.,1.,0.)); #15888=DIRECTION('ref_axis',(-1.,0.,0.)); #15889=DIRECTION('',(1.,0.,0.)); #15890=DIRECTION('',(-1.,0.,0.)); #15891=DIRECTION('',(0.,0.,1.)); #15892=DIRECTION('center_axis',(-1.,0.,0.)); #15893=DIRECTION('ref_axis',(0.,-1.,0.)); #15894=DIRECTION('',(0.,1.,0.)); #15895=DIRECTION('',(0.,-1.,0.)); #15896=DIRECTION('',(0.,0.,1.)); #15897=DIRECTION('center_axis',(0.,1.,0.)); #15898=DIRECTION('ref_axis',(-1.,0.,0.)); #15899=DIRECTION('',(1.,0.,0.)); #15900=DIRECTION('',(-1.,0.,0.)); #15901=DIRECTION('',(0.,0.,1.)); #15902=DIRECTION('center_axis',(1.,0.,0.)); #15903=DIRECTION('ref_axis',(0.,1.,0.)); #15904=DIRECTION('',(0.,-1.,0.)); #15905=DIRECTION('',(0.,1.,0.)); #15906=DIRECTION('',(0.,0.,1.)); #15907=DIRECTION('center_axis',(0.,1.,0.)); #15908=DIRECTION('ref_axis',(-1.,0.,0.)); #15909=DIRECTION('',(1.,0.,0.)); #15910=DIRECTION('',(-1.,0.,0.)); #15911=DIRECTION('',(0.,0.,1.)); #15912=DIRECTION('center_axis',(1.,0.,0.)); #15913=DIRECTION('ref_axis',(0.,1.,0.)); #15914=DIRECTION('',(0.,-1.,0.)); #15915=DIRECTION('',(0.,1.,0.)); #15916=DIRECTION('',(0.,0.,1.)); #15917=DIRECTION('center_axis',(0.,-1.,0.)); #15918=DIRECTION('ref_axis',(1.,0.,0.)); #15919=DIRECTION('',(-1.,0.,0.)); #15920=DIRECTION('',(1.,0.,0.)); #15921=DIRECTION('',(0.,0.,1.)); #15922=DIRECTION('center_axis',(1.,0.,0.)); #15923=DIRECTION('ref_axis',(0.,1.,0.)); #15924=DIRECTION('',(0.,-1.,0.)); #15925=DIRECTION('',(0.,1.,0.)); #15926=DIRECTION('',(0.,0.,1.)); #15927=DIRECTION('',(0.,0.,1.)); #15928=DIRECTION('',(0.,0.,1.)); #15929=DIRECTION('',(0.,0.,1.)); #15930=DIRECTION('center_axis',(0.,1.,0.)); #15931=DIRECTION('ref_axis',(-1.,0.,0.)); #15932=DIRECTION('',(1.,0.,0.)); #15933=DIRECTION('',(-1.,0.,0.)); #15934=DIRECTION('',(0.,0.,1.)); #15935=DIRECTION('center_axis',(1.,0.,0.)); #15936=DIRECTION('ref_axis',(0.,1.,0.)); #15937=DIRECTION('',(0.,-1.,0.)); #15938=DIRECTION('',(0.,1.,0.)); #15939=DIRECTION('',(0.,0.,1.)); #15940=DIRECTION('',(0.,0.,1.)); #15941=DIRECTION('center_axis',(0.,0.,1.)); #15942=DIRECTION('ref_axis',(1.,0.,0.)); #15943=DIRECTION('center_axis',(0.,0.,1.)); #15944=DIRECTION('ref_axis',(1.,0.,0.)); #15945=DIRECTION('',(0.,0.,1.)); #15946=DIRECTION('',(0.,0.,1.)); #15947=DIRECTION('',(0.,0.,1.)); #15948=DIRECTION('',(0.,0.,1.)); #15949=DIRECTION('',(0.,0.,1.)); #15950=DIRECTION('',(0.,0.,1.)); #15951=DIRECTION('',(0.,0.,1.)); #15952=DIRECTION('',(0.,0.,1.)); #15953=DIRECTION('center_axis',(0.,0.,1.)); #15954=DIRECTION('ref_axis',(1.,0.,0.)); #15955=DIRECTION('center_axis',(0.,0.,1.)); #15956=DIRECTION('ref_axis',(1.,0.,0.)); #15957=DIRECTION('center_axis',(-1.,0.,0.)); #15958=DIRECTION('ref_axis',(0.,-1.,0.)); #15959=DIRECTION('',(0.,1.,0.)); #15960=DIRECTION('',(0.,0.,1.)); #15961=DIRECTION('',(0.,-1.,0.)); #15962=DIRECTION('',(0.,0.,1.)); #15963=DIRECTION('',(0.,0.,1.)); #15964=DIRECTION('',(0.,0.,1.)); #15965=DIRECTION('',(0.,0.,1.)); #15966=DIRECTION('center_axis',(1.,0.,0.)); #15967=DIRECTION('ref_axis',(0.,1.,0.)); #15968=DIRECTION('',(0.,-1.,0.)); #15969=DIRECTION('',(0.,1.,0.)); #15970=DIRECTION('',(0.,0.,1.)); #15971=DIRECTION('center_axis',(0.,-1.,0.)); #15972=DIRECTION('ref_axis',(1.,0.,0.)); #15973=DIRECTION('',(-1.,0.,0.)); #15974=DIRECTION('',(1.,0.,0.)); #15975=DIRECTION('',(0.,0.,1.)); #15976=DIRECTION('center_axis',(-1.,0.,0.)); #15977=DIRECTION('ref_axis',(0.,-1.,0.)); #15978=DIRECTION('',(0.,1.,0.)); #15979=DIRECTION('',(0.,-1.,0.)); #15980=DIRECTION('',(0.,0.,1.)); #15981=DIRECTION('center_axis',(0.,1.,0.)); #15982=DIRECTION('ref_axis',(-1.,0.,0.)); #15983=DIRECTION('',(1.,0.,0.)); #15984=DIRECTION('',(-1.,0.,0.)); #15985=DIRECTION('',(0.,0.,1.)); #15986=DIRECTION('center_axis',(1.,0.,0.)); #15987=DIRECTION('ref_axis',(0.,1.,0.)); #15988=DIRECTION('',(0.,-1.,0.)); #15989=DIRECTION('',(0.,1.,0.)); #15990=DIRECTION('',(0.,0.,1.)); #15991=DIRECTION('',(0.,0.,1.)); #15992=DIRECTION('',(0.,0.,1.)); #15993=DIRECTION('center_axis',(1.,0.,0.)); #15994=DIRECTION('ref_axis',(0.,1.,0.)); #15995=DIRECTION('',(0.,-1.,0.)); #15996=DIRECTION('',(0.,1.,0.)); #15997=DIRECTION('',(0.,0.,1.)); #15998=DIRECTION('center_axis',(0.,-1.,0.)); #15999=DIRECTION('ref_axis',(1.,0.,0.)); #16000=DIRECTION('',(-1.,0.,0.)); #16001=DIRECTION('',(1.,0.,0.)); #16002=DIRECTION('center_axis',(0.,0.,1.)); #16003=DIRECTION('ref_axis',(1.,0.,0.)); #16004=DIRECTION('center_axis',(0.,0.,1.)); #16005=DIRECTION('ref_axis',(1.,0.,0.)); #16006=DIRECTION('center_axis',(-1.,0.,0.)); #16007=DIRECTION('ref_axis',(0.,-1.,0.)); #16008=DIRECTION('',(0.,1.,0.)); #16009=DIRECTION('',(0.,0.,1.)); #16010=DIRECTION('',(0.,-1.,0.)); #16011=DIRECTION('',(0.,0.,1.)); #16012=DIRECTION('center_axis',(0.,1.,0.)); #16013=DIRECTION('ref_axis',(-1.,0.,0.)); #16014=DIRECTION('',(1.,0.,0.)); #16015=DIRECTION('',(-1.,0.,0.)); #16016=DIRECTION('',(0.,0.,1.)); #16017=DIRECTION('center_axis',(1.,0.,0.)); #16018=DIRECTION('ref_axis',(0.,1.,0.)); #16019=DIRECTION('',(0.,-1.,0.)); #16020=DIRECTION('',(0.,1.,0.)); #16021=DIRECTION('',(0.,0.,1.)); #16022=DIRECTION('center_axis',(0.,-1.,0.)); #16023=DIRECTION('ref_axis',(1.,0.,0.)); #16024=DIRECTION('',(-1.,0.,0.)); #16025=DIRECTION('',(1.,0.,0.)); #16026=DIRECTION('center_axis',(0.,0.,1.)); #16027=DIRECTION('ref_axis',(1.,0.,0.)); #16028=DIRECTION('center_axis',(0.,0.,1.)); #16029=DIRECTION('ref_axis',(1.,0.,0.)); #16030=DIRECTION('center_axis',(-1.,0.,0.)); #16031=DIRECTION('ref_axis',(0.,-1.,0.)); #16032=DIRECTION('',(0.,1.,0.)); #16033=DIRECTION('',(0.,0.,1.)); #16034=DIRECTION('',(0.,-1.,0.)); #16035=DIRECTION('',(0.,0.,1.)); #16036=DIRECTION('center_axis',(0.,1.,0.)); #16037=DIRECTION('ref_axis',(-1.,0.,0.)); #16038=DIRECTION('',(1.,0.,0.)); #16039=DIRECTION('',(-1.,0.,0.)); #16040=DIRECTION('',(0.,0.,1.)); #16041=DIRECTION('',(0.,0.,1.)); #16042=DIRECTION('',(0.,0.,1.)); #16043=DIRECTION('',(0.,0.,1.)); #16044=DIRECTION('',(0.,0.,1.)); #16045=DIRECTION('',(0.,0.,1.)); #16046=DIRECTION('',(0.,0.,1.)); #16047=DIRECTION('',(0.,0.,1.)); #16048=DIRECTION('',(0.,0.,1.)); #16049=DIRECTION('',(0.,0.,1.)); #16050=DIRECTION('center_axis',(1.,0.,0.)); #16051=DIRECTION('ref_axis',(0.,1.,0.)); #16052=DIRECTION('',(0.,-1.,0.)); #16053=DIRECTION('',(0.,1.,0.)); #16054=DIRECTION('',(0.,0.,1.)); #16055=DIRECTION('center_axis',(0.,-1.,0.)); #16056=DIRECTION('ref_axis',(1.,0.,0.)); #16057=DIRECTION('',(-1.,0.,0.)); #16058=DIRECTION('',(1.,0.,0.)); #16059=DIRECTION('',(0.,0.,1.)); #16060=DIRECTION('',(0.,0.,1.)); #16061=DIRECTION('',(0.,0.,1.)); #16062=DIRECTION('',(0.,0.,1.)); #16063=DIRECTION('',(0.,0.,1.)); #16064=DIRECTION('',(0.,0.,1.)); #16065=DIRECTION('',(0.,0.,1.)); #16066=DIRECTION('',(0.,0.,1.)); #16067=DIRECTION('center_axis',(0.,0.,1.)); #16068=DIRECTION('ref_axis',(1.,0.,0.)); #16069=DIRECTION('center_axis',(0.,0.,1.)); #16070=DIRECTION('ref_axis',(1.,0.,0.)); #16071=DIRECTION('axis',(0.,0.,1.)); #16072=DIRECTION('refdir',(1.,0.,0.)); #16073=DIRECTION('',(0.,0.,1.)); #16074=DIRECTION('',(1.,0.,0.)); #16075=DIRECTION('',(0.,0.,1.)); #16076=DIRECTION('',(1.,0.,0.)); #16077=DIRECTION('',(0.,0.,1.)); #16078=DIRECTION('',(1.,5.55111512312578E-17,0.)); #16079=CARTESIAN_POINT('',(0.,0.,0.)); #16080=CARTESIAN_POINT('Origin',(-3.52122937758704,3.05,2.4)); #16081=CARTESIAN_POINT('',(2.65,3.05,0.)); #16082=CARTESIAN_POINT('',(2.65,3.05,0.65)); #16083=CARTESIAN_POINT('',(2.65,3.05,0.)); #16084=CARTESIAN_POINT('',(-2.65,3.05,0.)); #16085=CARTESIAN_POINT('',(-1.76061468879352,3.05,0.)); #16086=CARTESIAN_POINT('',(-2.65,3.05,0.65)); #16087=CARTESIAN_POINT('',(-2.65,3.05,0.)); #16088=CARTESIAN_POINT('',(1.625,3.05,0.65)); #16089=CARTESIAN_POINT('Origin',(0.,1.47043793961598,2.3)); #16090=CARTESIAN_POINT('',(0.8,1.47043793961598,2.3)); #16091=CARTESIAN_POINT('Origin',(0.,1.47043793961598,2.3)); #16092=CARTESIAN_POINT('',(0.9,1.47043793961598,2.4)); #16093=CARTESIAN_POINT('Origin',(0.,1.47043793961598,2.4)); #16094=CARTESIAN_POINT('Origin',(0.,0.,2.4)); #16095=CARTESIAN_POINT('',(-2.91712486548919,-0.409682327912465,2.4)); #16096=CARTESIAN_POINT('',(-2.91712486548919,2.43421258146629,2.4)); #16097=CARTESIAN_POINT('',(-2.91712486548919,0.7625,2.4)); #16098=CARTESIAN_POINT('',(-2.91712486548919,-1.95569713913749,2.4)); #16099=CARTESIAN_POINT('Origin',(-3.25,-1.18268973352498,2.4)); #16100=CARTESIAN_POINT('',(-2.91712486548919,-2.83658457498622,2.4)); #16101=CARTESIAN_POINT('',(-2.91712486548919,0.7625,2.4)); #16102=CARTESIAN_POINT('',(2.91712486548919,-2.83658457498622,2.4)); #16103=CARTESIAN_POINT('',(-0.8125,-2.83658457498622,2.4)); #16104=CARTESIAN_POINT('',(2.91712486548919,-1.95569713913749,2.4)); #16105=CARTESIAN_POINT('',(2.91712486548919,-0.7625,2.4)); #16106=CARTESIAN_POINT('',(2.91712486548919,-0.409682327912465,2.4)); #16107=CARTESIAN_POINT('Origin',(3.25,-1.18268973352498,2.4)); #16108=CARTESIAN_POINT('',(2.91712486548919,2.43421258146629,2.4)); #16109=CARTESIAN_POINT('',(2.91712486548919,-0.7625,2.4)); #16110=CARTESIAN_POINT('',(2.63421258146629,2.71712486548919,2.4)); #16111=CARTESIAN_POINT('Origin',(3.25,3.05,2.4)); #16112=CARTESIAN_POINT('',(-2.63421258146629,2.71712486548919,2.4)); #16113=CARTESIAN_POINT('',(0.8125,2.71712486548919,2.4)); #16114=CARTESIAN_POINT('Origin',(-3.25,3.05,2.4)); #16115=CARTESIAN_POINT('Origin',(0.,1.47043793961598,2.4)); #16116=CARTESIAN_POINT('',(0.8,1.47043793961598,2.2)); #16117=CARTESIAN_POINT('Origin',(0.,1.47043793961598,2.2)); #16118=CARTESIAN_POINT('Origin',(2.9409822441443,-2.86044195364133,2.13024593026201)); #16119=CARTESIAN_POINT('',(3.21347915427115,-3.03391205689403,0.90985931993489)); #16120=CARTESIAN_POINT('',(3.19877684821843,-3.04861436294675,0.990140680065111)); #16121=CARTESIAN_POINT('Ctrl Pts',(3.21347915427115,-3.03391205689403,0.90985931993489)); #16122=CARTESIAN_POINT('Ctrl Pts',(3.21310551053476,-3.03448635442987,0.912517933263817)); #16123=CARTESIAN_POINT('Ctrl Pts',(3.21272102882114,-3.03505100709898,0.915158608852946)); #16124=CARTESIAN_POINT('Ctrl Pts',(3.2100212762921,-3.03884671479164,0.933116835905421)); #16125=CARTESIAN_POINT('Ctrl Pts',(3.20671435629752,-3.04242953394029,0.951494326897016)); #16126=CARTESIAN_POINT('Ctrl Pts',(3.20217730875881,-3.04623799147671,0.974137118707089)); #16127=CARTESIAN_POINT('Ctrl Pts',(3.2005139150698,-3.04748420983237,0.98209922281335)); #16128=CARTESIAN_POINT('Ctrl Pts',(3.19877684821843,-3.04861436294675,0.990140680065111)); #16129=CARTESIAN_POINT('',(3.01615167236335,-2.83658457498623,2.31391731009601)); #16130=CARTESIAN_POINT('',(3.04000905101845,-2.86044195364133,2.14416324035802)); #16131=CARTESIAN_POINT('',(2.91712486548919,-2.93561138186038,2.31391731009601)); #16132=CARTESIAN_POINT('Origin',(2.91712486548919,-2.83658457498623,2.3)); #16133=CARTESIAN_POINT('',(3.03151348362881,-3.05,1.5)); #16134=CARTESIAN_POINT('',(2.9409822441443,-2.95946876051549,2.14416324035802)); #16135=CARTESIAN_POINT('',(3.19660388917523,-3.05,1.)); #16136=CARTESIAN_POINT('Origin',(3.13054029050297,-3.05,0.781470346567226)); #16137=CARTESIAN_POINT('Origin',(3.11518412055263,-3.03464383004967,0.890735173283612)); #16138=CARTESIAN_POINT('Origin',(-2.94288235579593,-2.86234206529296,2.11672593334687)); #16139=CARTESIAN_POINT('',(-3.19877684821843,-3.04861436294675,0.990140680065111)); #16140=CARTESIAN_POINT('',(-3.21347915427116,-3.03391205689403,0.909859319934888)); #16141=CARTESIAN_POINT('Ctrl Pts',(-3.19877684821843,-3.04861436294675, 0.990140680065111)); #16142=CARTESIAN_POINT('Ctrl Pts',(-3.2005139150698,-3.04748420983237,0.98209922281335)); #16143=CARTESIAN_POINT('Ctrl Pts',(-3.20217730875881,-3.04623799147671, 0.97413711870709)); #16144=CARTESIAN_POINT('Ctrl Pts',(-3.20671435629752,-3.04242953394029, 0.951494326897017)); #16145=CARTESIAN_POINT('Ctrl Pts',(-3.2100212762921,-3.03884671479164,0.933116835905422)); #16146=CARTESIAN_POINT('Ctrl Pts',(-3.21272102882114,-3.03505100709898, 0.915158608852947)); #16147=CARTESIAN_POINT('Ctrl Pts',(-3.21310551053476,-3.03448635442987, 0.912517933263816)); #16148=CARTESIAN_POINT('Ctrl Pts',(-3.21347915427116,-3.03391205689403, 0.909859319934888)); #16149=CARTESIAN_POINT('',(-3.19660388917523,-3.05,1.)); #16150=CARTESIAN_POINT('Origin',(-3.11518412055264,-3.03464383004967,0.890735173283611)); #16151=CARTESIAN_POINT('',(-3.03151348362881,-3.05,1.5)); #16152=CARTESIAN_POINT('Origin',(-3.13054029050297,-3.05,0.781470346567223)); #16153=CARTESIAN_POINT('',(-2.91712486548919,-2.93561138186038,2.31391731009601)); #16154=CARTESIAN_POINT('',(-2.94288235579593,-2.96136887216711,2.13064324344288)); #16155=CARTESIAN_POINT('',(-3.01615167236335,-2.83658457498622,2.31391731009601)); #16156=CARTESIAN_POINT('Origin',(-2.91712486548919,-2.83658457498622,2.3)); #16157=CARTESIAN_POINT('',(-3.04190916267008,-2.86234206529296,2.13064324344288)); #16158=CARTESIAN_POINT('Origin',(-3.07171978366182,-2.82253049151599,0.1)); #16159=CARTESIAN_POINT('',(-3.07171978366182,-2.82253049151599,0.)); #16160=CARTESIAN_POINT('',(-3.17074659053598,-2.82253049151599,0.0860826899039935)); #16161=CARTESIAN_POINT('Origin',(-3.07171978366182,-2.82253049151599,0.1)); #16162=CARTESIAN_POINT('',(-3.07171978366182,-2.92155729839014,0.0860826899039936)); #16163=CARTESIAN_POINT('Origin',(-3.07171978366182,-2.82253049151599,0.1)); #16164=CARTESIAN_POINT('Origin',(-3.07171978366182,-2.82253049151599,0.1)); #16165=CARTESIAN_POINT('Origin',(3.07171978366182,-2.82253049151599,0.1)); #16166=CARTESIAN_POINT('',(3.07171978366182,-2.82253049151599,0.)); #16167=CARTESIAN_POINT('',(3.07171978366182,-2.92155729839014,0.0860826899039935)); #16168=CARTESIAN_POINT('Origin',(3.07171978366182,-2.82253049151599,0.1)); #16169=CARTESIAN_POINT('',(3.17074659053598,-2.82253049151599,0.0860826899039934)); #16170=CARTESIAN_POINT('Origin',(3.07171978366182,-2.82253049151599,0.1)); #16171=CARTESIAN_POINT('Origin',(3.07171978366182,-2.82253049151599,0.1)); #16172=CARTESIAN_POINT('Origin',(-3.07171978366182,0.7625,0.1)); #16173=CARTESIAN_POINT('',(-3.07171978366182,2.47709846879031,0.)); #16174=CARTESIAN_POINT('',(-3.07171978366182,0.7625,0.)); #16175=CARTESIAN_POINT('',(-3.17074659053598,2.37308334009096,0.0860826899039938)); #16176=CARTESIAN_POINT('',(-3.17074659053598,0.7625,0.0860826899039935)); #16177=CARTESIAN_POINT('',(-3.08525284930485,2.47306120225987,0.000919950876569204)); #16178=CARTESIAN_POINT('Ctrl Pts',(-3.17074662663219,2.37308350185599,0.086082946741871)); #16179=CARTESIAN_POINT('Ctrl Pts',(-3.16923641767083,2.38434474081258,0.0753319679003736)); #16180=CARTESIAN_POINT('Ctrl Pts',(-3.16594156035387,2.39569776227976,0.0647593920429741)); #16181=CARTESIAN_POINT('Ctrl Pts',(-3.16091374185912,2.4066625134991,0.0548128669074693)); #16182=CARTESIAN_POINT('Ctrl Pts',(-3.15754509408859,2.41400891727005,0.0481486765121232)); #16183=CARTESIAN_POINT('Ctrl Pts',(-3.15336068877322,2.42125432429795,0.0416953008296392)); #16184=CARTESIAN_POINT('Ctrl Pts',(-3.14829484244448,2.42817218430167,0.0356711462207999)); #16185=CARTESIAN_POINT('Ctrl Pts',(-3.14637607456716,2.43079243108642,0.0333894042173231)); #16186=CARTESIAN_POINT('Ctrl Pts',(-3.14433041259198,2.43336475128669,0.0311692433139577)); #16187=CARTESIAN_POINT('Ctrl Pts',(-3.14215981441885,2.43587828747296,0.0290217359078115)); #16188=CARTESIAN_POINT('Ctrl Pts',(-3.13423463643492,2.44505558334089,0.0211808657614045)); #16189=CARTESIAN_POINT('Ctrl Pts',(-3.12451363817034,2.45362576373961,0.0141841349435867)); #16190=CARTESIAN_POINT('Ctrl Pts',(-3.1130862046299,2.46066192986989,0.00897878716538576)); #16191=CARTESIAN_POINT('Ctrl Pts',(-3.10466730579789,2.46584566343582,0.00514386691185861)); #16192=CARTESIAN_POINT('Ctrl Pts',(-3.0953418008244,2.47018026233546,0.00229797242976038)); #16193=CARTESIAN_POINT('Ctrl Pts',(-3.08525284930485,2.47306120225987,0.000919950876568654)); #16194=CARTESIAN_POINT('Ctrl Pts',(-3.08525284930485,2.47306120225987,0.000919950876569352)); #16195=CARTESIAN_POINT('Ctrl Pts',(-3.08067315114946,2.4743689531428,0.000294422767625561)); #16196=CARTESIAN_POINT('Ctrl Pts',(-3.07613180571514,2.47572549943466,-7.14440758398454E-18)); #16197=CARTESIAN_POINT('Ctrl Pts',(-3.07171978366182,2.47709846879031,1.73472347597681E-17)); #16198=CARTESIAN_POINT('Ctrl Pts',(-3.16511987982215,2.45603420536314,0.663917310096008)); #16199=CARTESIAN_POINT('Ctrl Pts',(-3.13815217216892,2.45988800012236,0.440051231158472)); #16200=CARTESIAN_POINT('Ctrl Pts',(-3.11144748369583,2.46558122102734,0.218368544050161)); #16201=CARTESIAN_POINT('Ctrl Pts',(-3.08525284930485,2.47306120225987,0.000919950876568654)); #16202=CARTESIAN_POINT('Ctrl Pts',(-3.19182090179772,2.45221852106849,0.660088092529767)); #16203=CARTESIAN_POINT('Ctrl Pts',(-3.16383044834688,2.45495030442574,0.436319730864124)); #16204=CARTESIAN_POINT('Ctrl Pts',(-3.13605712319371,2.45973028857416,0.214720430468506)); #16205=CARTESIAN_POINT('Ctrl Pts',(-3.10872975294532,2.46635727976919,-0.00264855450778658)); #16206=CARTESIAN_POINT('Ctrl Pts',(-3.23532267866914,2.42521962829496,0.653432074647551)); #16207=CARTESIAN_POINT('Ctrl Pts',(-3.20488767737401,2.42756810386731,0.429821863635532)); #16208=CARTESIAN_POINT('Ctrl Pts',(-3.1746824961592,2.43202728589265,0.208373053443536)); #16209=CARTESIAN_POINT('Ctrl Pts',(-3.14503741334892,2.43859983985565,-0.00886522470861287)); #16210=CARTESIAN_POINT('Ctrl Pts',(-3.25005654332526,2.37746792214944,0.650402326664542)); #16211=CARTESIAN_POINT('Ctrl Pts',(-3.21860291362928,2.38132358304204,0.426654975906945)); #16212=CARTESIAN_POINT('Ctrl Pts',(-3.18747572075303,2.38731274589065,0.20507852450984)); #16213=CARTESIAN_POINT('Ctrl Pts',(-3.15692407275276,2.39539617928735,-0.0122696346178426)); #16214=CARTESIAN_POINT('Ctrl Pts',(-3.25,2.357039906257,0.650000000000002)); #16215=CARTESIAN_POINT('Ctrl Pts',(-3.21853767440457,2.36153600014276,0.426133921062466)); #16216=CARTESIAN_POINT('Ctrl Pts',(-3.1873822045193,2.36817809119856,0.204451233954155)); #16217=CARTESIAN_POINT('Ctrl Pts',(-3.15682179772982,2.37690473596984,-0.0129973592194378)); #16218=CARTESIAN_POINT('',(-3.25,2.357039906257,0.65)); #16219=CARTESIAN_POINT('Origin',(-3.34902680687416,3.05,1.35461234333677)); #16220=CARTESIAN_POINT('',(-3.16344335092698,2.45627620352453,0.649999999999995)); #16221=CARTESIAN_POINT('Ctrl Pts',(-3.25,2.357039906257,0.65)); #16222=CARTESIAN_POINT('Ctrl Pts',(-3.25,2.36995043016491,0.65)); #16223=CARTESIAN_POINT('Ctrl Pts',(-3.24743918492559,2.38275028659948,0.650005634246338)); #16224=CARTESIAN_POINT('Ctrl Pts',(-3.24256555206762,2.39471430783513,0.650003391579258)); #16225=CARTESIAN_POINT('Ctrl Pts',(-3.2396890858806,2.40177559118334,0.650002067935026)); #16226=CARTESIAN_POINT('Ctrl Pts',(-3.23603300944085,2.40846379885769,0.649999023550797)); #16227=CARTESIAN_POINT('Ctrl Pts',(-3.23164665040712,2.41463412131202,0.649998836766857)); #16228=CARTESIAN_POINT('Ctrl Pts',(-3.22854694338998,2.41899450122223,0.649998704772307)); #16229=CARTESIAN_POINT('Ctrl Pts',(-3.22508151790566,2.42309620542769,0.650000140848775)); #16230=CARTESIAN_POINT('Ctrl Pts',(-3.22129404310016,2.42691333120614,0.650001546690405)); #16231=CARTESIAN_POINT('Ctrl Pts',(-3.21362005295535,2.43464739865466,0.650004395135705)); #16232=CARTESIAN_POINT('Ctrl Pts',(-3.20474133650587,2.44111132782931,0.650006328845354)); #16233=CARTESIAN_POINT('Ctrl Pts',(-3.19503255980613,2.44609576286116,0.650005148474452)); #16234=CARTESIAN_POINT('Ctrl Pts',(-3.18512246341734,2.45118355436538,0.650003943627562)); #16235=CARTESIAN_POINT('Ctrl Pts',(-3.17446722191377,2.45466833632806,0.650000045665963)); #16236=CARTESIAN_POINT('Ctrl Pts',(-3.16344335162057,2.45627620699981,0.650000005757683)); #16237=CARTESIAN_POINT('Origin',(-3.25,3.05,1.36852965343277)); #16238=CARTESIAN_POINT('Ctrl Pts',(-3.12793611754278,-0.669883197149553, 0.9)); #16239=CARTESIAN_POINT('Ctrl Pts',(-3.13274324786323,-0.647399313382476, 0.9)); #16240=CARTESIAN_POINT('Ctrl Pts',(-3.13706525166557,-0.595980201135775, 0.915753667698878)); #16241=CARTESIAN_POINT('Ctrl Pts',(-3.12899563858698,-0.570206037348593, 0.963158350993531)); #16242=CARTESIAN_POINT('Ctrl Pts',(-3.12253732563142,-0.56903426237135, 0.991284425493645)); #16243=CARTESIAN_POINT('Ctrl Pts',(-3.1551964982406,-0.669883197149553, 0.9)); #16244=CARTESIAN_POINT('Ctrl Pts',(-3.1590850220067,-0.646668286373517, 0.898656560501112)); #16245=CARTESIAN_POINT('Ctrl Pts',(-3.16185658542073,-0.591698821697783, 0.913658527353511)); #16246=CARTESIAN_POINT('Ctrl Pts',(-3.15364763043185,-0.564259018520355, 0.964711604576551)); #16247=CARTESIAN_POINT('Ctrl Pts',(-3.14758190394078,-0.563547225331355, 0.994474088115892)); #16248=CARTESIAN_POINT('Ctrl Pts',(-3.20258484347723,-0.669883197149553, 0.879403247739011)); #16249=CARTESIAN_POINT('Ctrl Pts',(-3.20394363052243,-0.641102777316128, 0.877283979326086)); #16250=CARTESIAN_POINT('Ctrl Pts',(-3.20269812156725,-0.57194346507134, 0.895752971280997)); #16251=CARTESIAN_POINT('Ctrl Pts',(-3.19329521278849,-0.537116685922732, 0.960557394604386)); #16252=CARTESIAN_POINT('Ctrl Pts',(-3.1874464859455,-0.536045155518169, 0.998422049094543)); #16253=CARTESIAN_POINT('Ctrl Pts',(-3.22411749063064,-0.669883197149553, 0.834163623506096)); #16254=CARTESIAN_POINT('Ctrl Pts',(-3.22420403368563,-0.631367242454435, 0.833486879066378)); #16255=CARTESIAN_POINT('Ctrl Pts',(-3.2203280045405,-0.54044050381865,0.861033769530571)); #16256=CARTESIAN_POINT('Ctrl Pts',(-3.20827510212751,-0.493532396559972, 0.946862157651886)); #16257=CARTESIAN_POINT('Ctrl Pts',(-3.20114415917394,-0.490839536153173, 0.997627370575404)); #16258=CARTESIAN_POINT('Ctrl Pts',(-3.22696292441694,-0.669883197149553, 0.813917310096006)); #16259=CARTESIAN_POINT('Ctrl Pts',(-3.22696292441694,-0.627203922248661, 0.813917310096006)); #16260=CARTESIAN_POINT('Ctrl Pts',(-3.22253485720089,-0.526960831709916, 0.845424645493764)); #16261=CARTESIAN_POINT('Ctrl Pts',(-3.20921026968282,-0.474881006170733, 0.940234012083069)); #16262=CARTESIAN_POINT('Ctrl Pts',(-3.20130454570853,-0.471496639354194, 0.996486161083296)); #16263=CARTESIAN_POINT('',(-3.12253732560691,-0.569034262376454,0.991284425493508)); #16264=CARTESIAN_POINT('',(-3.12793611754278,-0.669883197149552,0.9)); #16265=CARTESIAN_POINT('Ctrl Pts',(-3.12793611754278,-0.669883197149553, 0.9)); #16266=CARTESIAN_POINT('Ctrl Pts',(-3.13274324786323,-0.647399313382476, 0.9)); #16267=CARTESIAN_POINT('Ctrl Pts',(-3.13706525166557,-0.595980201135775, 0.915753667698878)); #16268=CARTESIAN_POINT('Ctrl Pts',(-3.12899563858698,-0.570206037348593, 0.963158350993531)); #16269=CARTESIAN_POINT('Ctrl Pts',(-3.12253732563142,-0.56903426237135, 0.991284425493645)); #16270=CARTESIAN_POINT('',(-3.201304545676,-0.471496639340269,0.996486161314749)); #16271=CARTESIAN_POINT('Origin',(-3.10227773880184,-0.471496639340269,0.982568851218742)); #16272=CARTESIAN_POINT('',(-3.22696292441694,-0.669883197149552,0.813917310096006)); #16273=CARTESIAN_POINT('Ctrl Pts',(-3.20130454570853,-0.471496639354194, 0.996486161083296)); #16274=CARTESIAN_POINT('Ctrl Pts',(-3.20921026968282,-0.474881006170733, 0.940234012083069)); #16275=CARTESIAN_POINT('Ctrl Pts',(-3.22253485720089,-0.526960831709916, 0.845424645493764)); #16276=CARTESIAN_POINT('Ctrl Pts',(-3.22696292441694,-0.627203922248661, 0.813917310096006)); #16277=CARTESIAN_POINT('Ctrl Pts',(-3.22696292441694,-0.669883197149553, 0.813917310096006)); #16278=CARTESIAN_POINT('Origin',(-3.12793611754278,-0.669883197149552,0.8)); #16279=CARTESIAN_POINT('Origin',(-2.91712486548919,2.43421258146629,2.3)); #16280=CARTESIAN_POINT('',(-3.01615167236335,2.43421258146629,2.31391731009601)); #16281=CARTESIAN_POINT('',(-2.96467845613359,2.52218221268539,2.3)); #16282=CARTESIAN_POINT('Origin',(-2.91712486548919,2.43421258146629,2.3)); #16283=CARTESIAN_POINT('Origin',(-2.91712486548919,2.43421258146629,2.3)); #16284=CARTESIAN_POINT('Origin',(-2.91712486548919,2.43421258146629,2.3)); #16285=CARTESIAN_POINT('Ctrl Pts',(3.12253732563142,-0.56903426237135,0.991284425493644)); #16286=CARTESIAN_POINT('Ctrl Pts',(3.12899563987996,-0.570206037583187, 0.963158345362579)); #16287=CARTESIAN_POINT('Ctrl Pts',(3.13706533048507,-0.59598081832988,0.915753002440741)); #16288=CARTESIAN_POINT('Ctrl Pts',(3.13274324882564,-0.647399308881113, 0.9)); #16289=CARTESIAN_POINT('Ctrl Pts',(3.12793611754278,-0.669883197149552, 0.9)); #16290=CARTESIAN_POINT('Ctrl Pts',(3.14758190394078,-0.563547225331354, 0.994474088115892)); #16291=CARTESIAN_POINT('Ctrl Pts',(3.15364763164623,-0.564259018662859, 0.964711598617983)); #16292=CARTESIAN_POINT('Ctrl Pts',(3.16185667393657,-0.591699482943893, 0.913657819924618)); #16293=CARTESIAN_POINT('Ctrl Pts',(3.15908502278519,-0.6466682817258,0.89865656023215)); #16294=CARTESIAN_POINT('Ctrl Pts',(3.1551964982406,-0.669883197149552,0.9)); #16295=CARTESIAN_POINT('Ctrl Pts',(3.1874464859455,-0.536045155518168,0.998422049094541)); #16296=CARTESIAN_POINT('Ctrl Pts',(3.19329521395943,-0.537116686137256, 0.960557387023731)); #16297=CARTESIAN_POINT('Ctrl Pts',(3.20269824487692,-0.57194430500655,0.89575207234336)); #16298=CARTESIAN_POINT('Ctrl Pts',(3.20394363079447,-0.641102771554174, 0.8772839789018)); #16299=CARTESIAN_POINT('Ctrl Pts',(3.20258484347723,-0.669883197149552, 0.879403247739011)); #16300=CARTESIAN_POINT('Ctrl Pts',(3.20114415917394,-0.490839536153172, 0.997627370575403)); #16301=CARTESIAN_POINT('Ctrl Pts',(3.20827510355515,-0.493532397099092, 0.946862147488488)); #16302=CARTESIAN_POINT('Ctrl Pts',(3.22032817336212,-0.540441616057931, 0.861032568464499)); #16303=CARTESIAN_POINT('Ctrl Pts',(3.22420403370295,-0.631367234743388, 0.833486878930891)); #16304=CARTESIAN_POINT('Ctrl Pts',(3.22411749063064,-0.669883197149552, 0.834163623506096)); #16305=CARTESIAN_POINT('Ctrl Pts',(3.20130454570853,-0.471496639354193, 0.996486161083295)); #16306=CARTESIAN_POINT('Ctrl Pts',(3.20921027126558,-0.474881006848296, 0.940234000821164)); #16307=CARTESIAN_POINT('Ctrl Pts',(3.22253504419276,-0.526962060472144, 0.845423314977488)); #16308=CARTESIAN_POINT('Ctrl Pts',(3.22696292441694,-0.627203913704101, 0.813917310096006)); #16309=CARTESIAN_POINT('Ctrl Pts',(3.22696292441694,-0.669883197149552, 0.813917310096006)); #16310=CARTESIAN_POINT('',(3.12793611754278,-0.669883197149552,0.9)); #16311=CARTESIAN_POINT('',(3.12253732562641,-0.569034262351697,0.991284425725234)); #16312=CARTESIAN_POINT('Ctrl Pts',(3.12253732563142,-0.56903426237135,0.991284425493644)); #16313=CARTESIAN_POINT('Ctrl Pts',(3.12899563987996,-0.570206037583187, 0.963158345362579)); #16314=CARTESIAN_POINT('Ctrl Pts',(3.13706533048507,-0.59598081832988,0.915753002440741)); #16315=CARTESIAN_POINT('Ctrl Pts',(3.13274324882564,-0.647399308881113, 0.9)); #16316=CARTESIAN_POINT('Ctrl Pts',(3.12793611754278,-0.669883197149552, 0.9)); #16317=CARTESIAN_POINT('',(3.22696292441694,-0.669883197149552,0.813917310096006)); #16318=CARTESIAN_POINT('Origin',(3.12793611754278,-0.669883197149552,0.8)); #16319=CARTESIAN_POINT('',(3.201304545676,-0.471496639340267,0.996486161314749)); #16320=CARTESIAN_POINT('Ctrl Pts',(3.22696292441694,-0.669883197149552, 0.813917310096006)); #16321=CARTESIAN_POINT('Ctrl Pts',(3.22696292441694,-0.627203913704101, 0.813917310096006)); #16322=CARTESIAN_POINT('Ctrl Pts',(3.22253504419276,-0.526962060472144, 0.845423314977488)); #16323=CARTESIAN_POINT('Ctrl Pts',(3.20921027126558,-0.474881006848296, 0.940234000821164)); #16324=CARTESIAN_POINT('Ctrl Pts',(3.20130454570853,-0.471496639354193, 0.996486161083295)); #16325=CARTESIAN_POINT('Origin',(3.10227773880184,-0.471496639340268,0.982568851218741)); #16326=CARTESIAN_POINT('Origin',(2.91712486548919,2.43421258146629,2.3)); #16327=CARTESIAN_POINT('',(2.96467845613359,2.52218221268539,2.3)); #16328=CARTESIAN_POINT('',(3.01615167236335,2.43421258146629,2.31391731009601)); #16329=CARTESIAN_POINT('Origin',(2.91712486548919,2.43421258146629,2.3)); #16330=CARTESIAN_POINT('Origin',(2.91712486548919,2.43421258146629,2.3)); #16331=CARTESIAN_POINT('Origin',(2.91712486548919,2.43421258146629,2.3)); #16332=CARTESIAN_POINT('Origin',(3.25,3.05,2.3)); #16333=CARTESIAN_POINT('',(2.69662316151722,2.81810762274105,2.3)); #16334=CARTESIAN_POINT('Origin',(3.25,3.05,2.3)); #16335=CARTESIAN_POINT('',(2.69639026515296,2.81615167236335,2.31391731009601)); #16336=CARTESIAN_POINT('Ctrl Pts',(2.69662316151722,2.81810762274105,2.3)); #16337=CARTESIAN_POINT('Ctrl Pts',(2.69688328414833,2.81748687857982,2.30441682421017)); #16338=CARTESIAN_POINT('Ctrl Pts',(2.69683481977649,2.81682204310201,2.30914737443938)); #16339=CARTESIAN_POINT('Ctrl Pts',(2.69639026515296,2.81615167236335,2.31391731009601)); #16340=CARTESIAN_POINT('Ctrl Pts',(2.63421258146629,2.71712486548919,2.4)); #16341=CARTESIAN_POINT('Ctrl Pts',(2.63449347029544,2.71759600711771,2.4)); #16342=CARTESIAN_POINT('Ctrl Pts',(2.63477450097955,2.71806706430349,2.39999667038391)); #16343=CARTESIAN_POINT('Ctrl Pts',(2.64233998695931,2.7307394634583,2.39981757421995)); #16344=CARTESIAN_POINT('Ctrl Pts',(2.64971166426607,2.74286286555462,2.39741259773015)); #16345=CARTESIAN_POINT('Ctrl Pts',(2.66368787701877,2.76544611021733,2.38837039538762)); #16346=CARTESIAN_POINT('Ctrl Pts',(2.67030971839145,2.77594383223109,2.38183546898141)); #16347=CARTESIAN_POINT('Ctrl Pts',(2.68160917841327,2.79360493272236,2.36545701150651)); #16348=CARTESIAN_POINT('Ctrl Pts',(2.68636096764175,2.80090864670037,2.35594534939952)); #16349=CARTESIAN_POINT('Ctrl Pts',(2.69314107198102,2.81125132567223,2.33543391095901)); #16350=CARTESIAN_POINT('Ctrl Pts',(2.69536211721006,2.81460126604779,2.32494902425112)); #16351=CARTESIAN_POINT('Ctrl Pts',(2.69639026515296,2.81615167236335,2.31391731009601)); #16352=CARTESIAN_POINT('Ctrl Pts',(-3.12253732563142,-1.7963452046786,0.991284425493644)); #16353=CARTESIAN_POINT('Ctrl Pts',(-3.12738106131783,-1.79546637326973, 0.970189865395345)); #16354=CARTESIAN_POINT('Ctrl Pts',(-3.13629813408696,-1.77605134625524, 0.921786939149123)); #16355=CARTESIAN_POINT('Ctrl Pts',(-3.13434562591992,-1.72547478759165, 0.9)); #16356=CARTESIAN_POINT('Ctrl Pts',(-3.12793611754278,-1.6954962699004,0.9)); #16357=CARTESIAN_POINT('Ctrl Pts',(-3.14758190394078,-1.8018322417186,0.994474088115892)); #16358=CARTESIAN_POINT('Ctrl Pts',(-3.15213119971987,-1.80129839671997, 0.972152220992461)); #16359=CARTESIAN_POINT('Ctrl Pts',(-3.16097998412217,-1.78101684221352, 0.920226769157196)); #16360=CARTESIAN_POINT('Ctrl Pts',(-3.16038119763339,-1.7264494904654,0.8982087469762)); #16361=CARTESIAN_POINT('Ctrl Pts',(-3.1551964982406,-1.6954962699004,0.9)); #16362=CARTESIAN_POINT('Ctrl Pts',(-3.18744270692201,-1.82933693923688, 0.998421359893592)); #16363=CARTESIAN_POINT('Ctrl Pts',(-3.19182925293245,-1.82853329127256, 0.970022863340484)); #16364=CARTESIAN_POINT('Ctrl Pts',(-3.20153474684719,-1.80272948923802, 0.90402362375291)); #16365=CARTESIAN_POINT('Ctrl Pts',(-3.20439246797687,-1.73387017069424, 0.876573560195472)); #16366=CARTESIAN_POINT('Ctrl Pts',(-3.2025807515539,-1.6954962699004,0.87939925197842)); #16367=CARTESIAN_POINT('Ctrl Pts',(-3.20114415917394,-1.87453993089678, 0.997627370575403)); #16368=CARTESIAN_POINT('Ctrl Pts',(-3.20649236745985,-1.87252028518734, 0.959553453260217)); #16369=CARTESIAN_POINT('Ctrl Pts',(-3.21879586174543,-1.83705786457557, 0.871962440586661)); #16370=CARTESIAN_POINT('Ctrl Pts',(-3.22423288139372,-1.74685088644195, 0.833261297405823)); #16371=CARTESIAN_POINT('Ctrl Pts',(-3.22411749063064,-1.6954962699004,0.834163623506097)); #16372=CARTESIAN_POINT('Ctrl Pts',(-3.20130454570853,-1.89388282769576, 0.996486161083295)); #16373=CARTESIAN_POINT('Ctrl Pts',(-3.20723383987632,-1.89134455207518, 0.954297040886698)); #16374=CARTESIAN_POINT('Ctrl Pts',(-3.22083901518968,-1.85174932792789, 0.857491188394253)); #16375=CARTESIAN_POINT('Ctrl Pts',(-3.22696292441694,-1.752401981161,0.813917310096007)); #16376=CARTESIAN_POINT('Ctrl Pts',(-3.22696292441694,-1.6954962699004,0.813917310096007)); #16377=CARTESIAN_POINT('',(-3.12793611754278,-1.6954962699004,0.9)); #16378=CARTESIAN_POINT('',(-3.12253732562641,-1.79634520469826,0.991284425725234)); #16379=CARTESIAN_POINT('Ctrl Pts',(-3.12253732563142,-1.7963452046786,0.991284425493644)); #16380=CARTESIAN_POINT('Ctrl Pts',(-3.12738106131783,-1.79546637326973, 0.970189865395345)); #16381=CARTESIAN_POINT('Ctrl Pts',(-3.13629813408696,-1.77605134625524, 0.921786939149123)); #16382=CARTESIAN_POINT('Ctrl Pts',(-3.13434562591992,-1.72547478759165, 0.9)); #16383=CARTESIAN_POINT('Ctrl Pts',(-3.12793611754278,-1.6954962699004,0.9)); #16384=CARTESIAN_POINT('',(-3.22696292441694,-1.6954962699004,0.813917310096006)); #16385=CARTESIAN_POINT('Origin',(-3.12793611754278,-1.6954962699004,0.8)); #16386=CARTESIAN_POINT('',(-3.201304545676,-1.89388282770969,0.996486161314749)); #16387=CARTESIAN_POINT('Ctrl Pts',(-3.22696292441694,-1.6954962699004,0.813917310096007)); #16388=CARTESIAN_POINT('Ctrl Pts',(-3.22696292441694,-1.752401981161,0.813917310096007)); #16389=CARTESIAN_POINT('Ctrl Pts',(-3.22083901518968,-1.85174932792789, 0.857491188394253)); #16390=CARTESIAN_POINT('Ctrl Pts',(-3.20723383987632,-1.89134455207518, 0.954297040886698)); #16391=CARTESIAN_POINT('Ctrl Pts',(-3.20130454570853,-1.89388282769576, 0.996486161083295)); #16392=CARTESIAN_POINT('Origin',(-3.10227773880184,-1.89388282770968,0.982568851218742)); #16393=CARTESIAN_POINT('Origin',(-3.12793611754278,0.171155133237512,0.8)); #16394=CARTESIAN_POINT('',(-3.22696292441694,0.171155133237512,0.813917310096006)); #16395=CARTESIAN_POINT('',(-3.12793611754278,0.171155133237512,0.9)); #16396=CARTESIAN_POINT('Origin',(-2.91712486548919,-0.409682327975996,2.3)); #16397=CARTESIAN_POINT('',(-2.95652545926504,-0.501178950665282,2.30871557427477)); #16398=CARTESIAN_POINT('Origin',(-2.91712486548919,-0.409682327912465,2.3)); #16399=CARTESIAN_POINT('',(-3.01615167249202,-0.409682327944268,2.31391730918044)); #16400=CARTESIAN_POINT('Origin',(-2.91712486548919,-0.409682327975996,2.3)); #16401=CARTESIAN_POINT('Origin',(-2.91712486562968,-0.409682327947187,2.29999999900038)); #16402=CARTESIAN_POINT('Origin',(-2.91712486548919,0.7625,2.3)); #16403=CARTESIAN_POINT('',(-3.01615167236335,0.7625,2.31391731009601)); #16404=CARTESIAN_POINT('Ctrl Pts',(-3.01615167236615,-0.409682327913158, 2.31391731007605)); #16405=CARTESIAN_POINT('Ctrl Pts',(-3.08023663076136,-0.425521310172612, 1.85792913745055)); #16406=CARTESIAN_POINT('Ctrl Pts',(-3.14234420516579,-0.446256267603131, 1.41601078300254)); #16407=CARTESIAN_POINT('Ctrl Pts',(-3.201304545676,-0.471496639340269,0.996486161314749)); #16408=CARTESIAN_POINT('Ctrl Pts',(-3.01604625511647,-0.431702966428225, 2.3146673927827)); #16409=CARTESIAN_POINT('Ctrl Pts',(-3.08012189482564,-0.448720901126071, 1.85889189741454)); #16410=CARTESIAN_POINT('Ctrl Pts',(-3.14213784747926,-0.47068354636939, 1.41721173967205)); #16411=CARTESIAN_POINT('Ctrl Pts',(-3.20109069697166,-0.497287168413937, 0.998007773910747)); #16412=CARTESIAN_POINT('Ctrl Pts',(-3.00277509392083,-0.470129232852578, 2.31413700871705)); #16413=CARTESIAN_POINT('Ctrl Pts',(-3.06532235543238,-0.489154118076335, 1.85851758379299)); #16414=CARTESIAN_POINT('Ctrl Pts',(-3.12567862636891,-0.513309452672509, 1.4170479653666)); #16415=CARTESIAN_POINT('Ctrl Pts',(-3.18249059005966,-0.542176327279342, 0.998094420600341)); #16416=CARTESIAN_POINT('Ctrl Pts',(-2.97153901663283,-0.494534753238399, 2.31059480256791)); #16417=CARTESIAN_POINT('Ctrl Pts',(-3.03111663347574,-0.513422823038415, 1.85474515596172)); #16418=CARTESIAN_POINT('Ctrl Pts',(-3.08815209642091,-0.537063770021179, 1.4129913826476)); #16419=CARTESIAN_POINT('Ctrl Pts',(-3.14132075934199,-0.564918984599822, 0.993676672470693)); #16420=CARTESIAN_POINT('Ctrl Pts',(-2.95652545908412,-0.501178950745095, 2.30871557425481)); #16421=CARTESIAN_POINT('Ctrl Pts',(-3.01489264064383,-0.519480141929563, 1.85272740162931)); #16422=CARTESIAN_POINT('Ctrl Pts',(-3.07063946997935,-0.54232693849218, 1.4108090471813)); #16423=CARTESIAN_POINT('Ctrl Pts',(-3.12253732560691,-0.569034262376454, 0.991284425493508)); #16424=CARTESIAN_POINT('Ctrl Pts',(-3.12253732560691,-0.569034262376454, 0.991284425493508)); #16425=CARTESIAN_POINT('Ctrl Pts',(-3.07063946997935,-0.54232693849218, 1.4108090471813)); #16426=CARTESIAN_POINT('Ctrl Pts',(-3.01489264064383,-0.519480141929563, 1.85272740162931)); #16427=CARTESIAN_POINT('Ctrl Pts',(-2.95652545908412,-0.501178950745095, 2.30871557425481)); #16428=CARTESIAN_POINT('Ctrl Pts',(-3.01615167249202,-0.409682327944268, 2.31391730918044)); #16429=CARTESIAN_POINT('Ctrl Pts',(-3.0802366308872,-0.425521310210764, 1.85792913655518)); #16430=CARTESIAN_POINT('Ctrl Pts',(-3.14234420516579,-0.446256267603131, 1.41601078300254)); #16431=CARTESIAN_POINT('Ctrl Pts',(-3.201304545676,-0.471496639340269,0.996486161314749)); #16432=CARTESIAN_POINT('Ctrl Pts',(3.12793611754278,-1.6954962699004,0.9)); #16433=CARTESIAN_POINT('Ctrl Pts',(3.13434562463671,-1.72547478158984,0.9)); #16434=CARTESIAN_POINT('Ctrl Pts',(3.13629800479893,-1.77605250763233,0.921788145098939)); #16435=CARTESIAN_POINT('Ctrl Pts',(3.12738106034809,-1.79546637344567,0.970189869618559)); #16436=CARTESIAN_POINT('Ctrl Pts',(3.12253732563142,-1.7963452046786,0.991284425493644)); #16437=CARTESIAN_POINT('Ctrl Pts',(3.1551964982406,-1.6954962699004,0.9)); #16438=CARTESIAN_POINT('Ctrl Pts',(3.1603811965954,-1.72644948426845,0.898208747334816)); #16439=CARTESIAN_POINT('Ctrl Pts',(3.16097983495867,-1.78101808229093,0.920228043993329)); #16440=CARTESIAN_POINT('Ctrl Pts',(3.15213119880908,-1.80129839682685,0.972152225461386)); #16441=CARTESIAN_POINT('Ctrl Pts',(3.14758190394078,-1.8018322417186,0.994474088115892)); #16442=CARTESIAN_POINT('Ctrl Pts',(3.2025807515539,-1.6954962699004,0.87939925197842)); #16443=CARTESIAN_POINT('Ctrl Pts',(3.20439246761416,-1.73387016301163,0.876573560761187)); #16444=CARTESIAN_POINT('Ctrl Pts',(3.20153452776988,-1.80273106234812,0.904025241975226)); #16445=CARTESIAN_POINT('Ctrl Pts',(3.19182925205425,-1.82853329143346,0.970022869025974)); #16446=CARTESIAN_POINT('Ctrl Pts',(3.18744270692201,-1.82933693923688,0.998421359893591)); #16447=CARTESIAN_POINT('Ctrl Pts',(3.22411749063064,-1.6954962699004,0.834163623506096)); #16448=CARTESIAN_POINT('Ctrl Pts',(3.22423288137062,-1.74685087616056,0.833261297586472)); #16449=CARTESIAN_POINT('Ctrl Pts',(3.21879555618872,-1.83705995151834,0.871964614327425)); #16450=CARTESIAN_POINT('Ctrl Pts',(3.20649236638912,-1.87252028559168,0.959553460882765)); #16451=CARTESIAN_POINT('Ctrl Pts',(3.20114415917394,-1.87453993089678,0.997627370575403)); #16452=CARTESIAN_POINT('Ctrl Pts',(3.22696292441694,-1.6954962699004,0.813917310096006)); #16453=CARTESIAN_POINT('Ctrl Pts',(3.22696292441694,-1.75240196976825,0.813917310096006)); #16454=CARTESIAN_POINT('Ctrl Pts',(3.22083867621929,-1.85175163473465,0.857493600293884)); #16455=CARTESIAN_POINT('Ctrl Pts',(3.20723383868925,-1.89134455258336,0.954297049333125)); #16456=CARTESIAN_POINT('Ctrl Pts',(3.20130454570853,-1.89388282769576,0.996486161083295)); #16457=CARTESIAN_POINT('',(3.12253732560691,-1.7963452046735,0.991284425493507)); #16458=CARTESIAN_POINT('',(3.12793611754278,-1.6954962699004,0.9)); #16459=CARTESIAN_POINT('Ctrl Pts',(3.12793611754278,-1.6954962699004,0.9)); #16460=CARTESIAN_POINT('Ctrl Pts',(3.13434562463671,-1.72547478158984,0.9)); #16461=CARTESIAN_POINT('Ctrl Pts',(3.13629800479893,-1.77605250763233,0.921788145098939)); #16462=CARTESIAN_POINT('Ctrl Pts',(3.12738106034809,-1.79546637344567,0.970189869618559)); #16463=CARTESIAN_POINT('Ctrl Pts',(3.12253732563142,-1.7963452046786,0.991284425493644)); #16464=CARTESIAN_POINT('',(3.201304545676,-1.89388282770969,0.996486161314749)); #16465=CARTESIAN_POINT('Origin',(3.10227773880184,-1.89388282770969,0.982568851218742)); #16466=CARTESIAN_POINT('',(3.22696292441694,-1.6954962699004,0.813917310096006)); #16467=CARTESIAN_POINT('Ctrl Pts',(3.20130454570853,-1.89388282769576,0.996486161083295)); #16468=CARTESIAN_POINT('Ctrl Pts',(3.20723383868925,-1.89134455258336,0.954297049333125)); #16469=CARTESIAN_POINT('Ctrl Pts',(3.22083867621929,-1.85175163473465,0.857493600293884)); #16470=CARTESIAN_POINT('Ctrl Pts',(3.22696292441694,-1.75240196976825,0.813917310096006)); #16471=CARTESIAN_POINT('Ctrl Pts',(3.22696292441694,-1.6954962699004,0.813917310096006)); #16472=CARTESIAN_POINT('Origin',(3.12793611754278,-1.6954962699004,0.8)); #16473=CARTESIAN_POINT('Origin',(2.91712486561787,-0.409682327944267,2.29999999908443)); #16474=CARTESIAN_POINT('',(2.95652545920951,-0.501178950784414,2.30871557327515)); #16475=CARTESIAN_POINT('Origin',(2.91712486569731,-0.409682327822845,2.3)); #16476=CARTESIAN_POINT('',(3.01615167236335,-0.409682327975995,2.31391731009601)); #16477=CARTESIAN_POINT('Origin',(2.91712486561787,-0.409682327944267,2.29999999908443)); #16478=CARTESIAN_POINT('Origin',(2.91712486548919,-0.409682327912465,2.3)); #16479=CARTESIAN_POINT('Ctrl Pts',(3.201304545676,-0.471496639340268,0.996486161314748)); #16480=CARTESIAN_POINT('Ctrl Pts',(3.14234420516502,-0.446256267602801, 1.416010783008)); #16481=CARTESIAN_POINT('Ctrl Pts',(3.08023663075974,-0.425521310172072, 1.85792913746205)); #16482=CARTESIAN_POINT('Ctrl Pts',(3.01615167236365,-0.409682327912539, 2.31391731009384)); #16483=CARTESIAN_POINT('Ctrl Pts',(3.20109069697166,-0.497287168413935, 0.998007773910746)); #16484=CARTESIAN_POINT('Ctrl Pts',(3.14213784747849,-0.470683546369043, 1.4172117396775)); #16485=CARTESIAN_POINT('Ctrl Pts',(3.08012189482403,-0.448720901125498, 1.85889189742603)); #16486=CARTESIAN_POINT('Ctrl Pts',(3.01604625511397,-0.43170296642756,2.31466739280048)); #16487=CARTESIAN_POINT('Ctrl Pts',(3.18249059005966,-0.54217632727934,0.998094420600341)); #16488=CARTESIAN_POINT('Ctrl Pts',(3.12567862636817,-0.513309452672133, 1.41704796537205)); #16489=CARTESIAN_POINT('Ctrl Pts',(3.06532235543081,-0.489154118075707, 1.85851758380447)); #16490=CARTESIAN_POINT('Ctrl Pts',(3.00277509391839,-0.470129232851835, 2.31413700873483)); #16491=CARTESIAN_POINT('Ctrl Pts',(3.14132075934199,-0.564918984599821, 0.993676672470693)); #16492=CARTESIAN_POINT('Ctrl Pts',(3.08815209642021,-0.537063770020816, 1.41299138265305)); #16493=CARTESIAN_POINT('Ctrl Pts',(3.03111663347425,-0.5134228230378,1.85474515597321)); #16494=CARTESIAN_POINT('Ctrl Pts',(2.97153901663051,-0.494534753237662, 2.3105948025857)); #16495=CARTESIAN_POINT('Ctrl Pts',(3.12253732560691,-0.569034262376453, 0.991284425493507)); #16496=CARTESIAN_POINT('Ctrl Pts',(3.07063946997868,-0.542326938491831, 1.41080904718676)); #16497=CARTESIAN_POINT('Ctrl Pts',(3.01489264064238,-0.519480141928969, 1.85272740164081)); #16498=CARTESIAN_POINT('Ctrl Pts',(2.95652545908184,-0.50117895074438,2.3087155742726)); #16499=CARTESIAN_POINT('Ctrl Pts',(2.95652545920951,-0.501178950784413, 2.30871557327515)); #16500=CARTESIAN_POINT('Ctrl Pts',(3.01489264076885,-0.519480141976449, 1.85272740064349)); #16501=CARTESIAN_POINT('Ctrl Pts',(3.07063946995026,-0.54232693847931,1.41080904741334)); #16502=CARTESIAN_POINT('Ctrl Pts',(3.12253732557889,-0.569034262362034, 0.991284425720014)); #16503=CARTESIAN_POINT('Ctrl Pts',(3.201304545676,-0.471496639340268,0.996486161314748)); #16504=CARTESIAN_POINT('Ctrl Pts',(3.14234420516502,-0.446256267602801, 1.416010783008)); #16505=CARTESIAN_POINT('Ctrl Pts',(3.08023663075974,-0.425521310172072, 1.85792913746205)); #16506=CARTESIAN_POINT('Ctrl Pts',(3.01615167236365,-0.409682327912539, 2.31391731009384)); #16507=CARTESIAN_POINT('Origin',(2.91712486548919,-0.7625,2.3)); #16508=CARTESIAN_POINT('',(3.01615167236335,-0.7625,2.31391731009601)); #16509=CARTESIAN_POINT('Origin',(-2.91712486569731,-1.95569713922711,2.3)); #16510=CARTESIAN_POINT('',(-3.01615167236335,-1.95569713907396,2.31391731009601)); #16511=CARTESIAN_POINT('Origin',(-2.91712486548919,-1.95569713913749,2.3)); #16512=CARTESIAN_POINT('',(-2.95652545920951,-1.86420051626554,2.30871557327515)); #16513=CARTESIAN_POINT('Origin',(-2.91712486569731,-1.95569713922711,2.3)); #16514=CARTESIAN_POINT('Origin',(-2.91712486561787,-1.95569713910569,2.29999999908443)); #16515=CARTESIAN_POINT('Origin',(-3.25,-1.18268973352498,2.3)); #16516=CARTESIAN_POINT('Origin',(-3.25,-1.18268973352498,2.30871557427477)); #16517=CARTESIAN_POINT('Ctrl Pts',(-3.201304545676,-1.89388282770969,0.996486161314749)); #16518=CARTESIAN_POINT('Ctrl Pts',(-3.14234420516502,-1.91912319944715, 1.416010783008)); #16519=CARTESIAN_POINT('Ctrl Pts',(-3.08023663075974,-1.93985815687788, 1.85792913746205)); #16520=CARTESIAN_POINT('Ctrl Pts',(-3.01615167236365,-1.95569713913741, 2.31391731009384)); #16521=CARTESIAN_POINT('Ctrl Pts',(-3.20109069697166,-1.86809229863602, 0.998007773910747)); #16522=CARTESIAN_POINT('Ctrl Pts',(-3.14213784747849,-1.89469592068091, 1.4172117396775)); #16523=CARTESIAN_POINT('Ctrl Pts',(-3.08012189482403,-1.91665856592445, 1.85889189742603)); #16524=CARTESIAN_POINT('Ctrl Pts',(-3.01604625511397,-1.93367650062239, 2.31466739280048)); #16525=CARTESIAN_POINT('Ctrl Pts',(-3.18248733721753,-1.82320625123645, 0.998093776244276)); #16526=CARTESIAN_POINT('Ctrl Pts',(-3.12567537352603,-1.85207312584365, 1.41704732101598)); #16527=CARTESIAN_POINT('Ctrl Pts',(-3.06532041737573,-1.87622682064926, 1.85851726030921)); #16528=CARTESIAN_POINT('Ctrl Pts',(-3.00277315586331,-1.89525170587313, 2.31413668523956)); #16529=CARTESIAN_POINT('Ctrl Pts',(-3.14132075934199,-1.80046048245013, 0.993676672470694)); #16530=CARTESIAN_POINT('Ctrl Pts',(-3.08815209642021,-1.82831569702914, 1.41299138265305)); #16531=CARTESIAN_POINT('Ctrl Pts',(-3.03111663347425,-1.85195664401215, 1.85474515597321)); #16532=CARTESIAN_POINT('Ctrl Pts',(-2.97153901663051,-1.87084471381229, 2.3105948025857)); #16533=CARTESIAN_POINT('Ctrl Pts',(-3.12253732560691,-1.7963452046735,0.991284425493508)); #16534=CARTESIAN_POINT('Ctrl Pts',(-3.07063946997868,-1.82305252855812, 1.41080904718676)); #16535=CARTESIAN_POINT('Ctrl Pts',(-3.01489264064238,-1.84589932512098, 1.85272740164081)); #16536=CARTESIAN_POINT('Ctrl Pts',(-2.95652545908184,-1.86420051630557, 2.3087155742726)); #16537=CARTESIAN_POINT('Ctrl Pts',(-2.95652545920951,-1.86420051626554, 2.30871557327515)); #16538=CARTESIAN_POINT('Ctrl Pts',(-3.01489264076885,-1.8458993250735,1.85272740064349)); #16539=CARTESIAN_POINT('Ctrl Pts',(-3.07063946995026,-1.82305252857064, 1.41080904741334)); #16540=CARTESIAN_POINT('Ctrl Pts',(-3.12253732557889,-1.79634520468792, 0.991284425720014)); #16541=CARTESIAN_POINT('Ctrl Pts',(-3.201304545676,-1.89388282770969,0.996486161314749)); #16542=CARTESIAN_POINT('Ctrl Pts',(-3.14234420516502,-1.91912319944715, 1.416010783008)); #16543=CARTESIAN_POINT('Ctrl Pts',(-3.08023663075974,-1.93985815687788, 1.85792913746205)); #16544=CARTESIAN_POINT('Ctrl Pts',(-3.01615167236365,-1.95569713913741, 2.31391731009384)); #16545=CARTESIAN_POINT('Origin',(2.91712486548919,-1.95569713907396,2.3)); #16546=CARTESIAN_POINT('',(2.95652545926504,-1.86420051638467,2.30871557427477)); #16547=CARTESIAN_POINT('Origin',(2.91712486548919,-1.95569713913749,2.3)); #16548=CARTESIAN_POINT('',(3.01615167249202,-1.95569713910569,2.31391730918044)); #16549=CARTESIAN_POINT('Origin',(2.91712486548919,-1.95569713907396,2.3)); #16550=CARTESIAN_POINT('Origin',(2.91712486562968,-1.95569713910277,2.29999999900038)); #16551=CARTESIAN_POINT('Origin',(-2.91712486548919,-2.83658457498622,2.3)); #16552=CARTESIAN_POINT('Origin',(-2.91712486548919,-2.83658457498622,2.3)); #16553=CARTESIAN_POINT('Origin',(-2.91712486548919,-2.83658457498622,2.3)); #16554=CARTESIAN_POINT('Origin',(-2.91712486548919,0.7625,2.3)); #16555=CARTESIAN_POINT('',(-3.01615167236335,0.7625,2.31391731009601)); #16556=CARTESIAN_POINT('Origin',(2.91712486548919,-2.83658457498622,2.3)); #16557=CARTESIAN_POINT('Origin',(2.91712486548919,-2.83658457498622,2.3)); #16558=CARTESIAN_POINT('Origin',(2.91712486548919,-2.83658457498622,2.3)); #16559=CARTESIAN_POINT('Origin',(-0.8125,-2.83658457498622,2.3)); #16560=CARTESIAN_POINT('',(-0.8125,-2.93561138186038,2.31391731009601)); #16561=CARTESIAN_POINT('Origin',(2.91712486548919,-0.7625,2.3)); #16562=CARTESIAN_POINT('',(3.01615167236335,-0.7625,2.31391731009601)); #16563=CARTESIAN_POINT('Ctrl Pts',(3.01615167236615,-1.9556971391368,2.31391731007605)); #16564=CARTESIAN_POINT('Ctrl Pts',(3.08023663076136,-1.93985815687734,1.85792913745055)); #16565=CARTESIAN_POINT('Ctrl Pts',(3.14234420516579,-1.91912319944682,1.41601078300254)); #16566=CARTESIAN_POINT('Ctrl Pts',(3.201304545676,-1.89388282770969,0.996486161314748)); #16567=CARTESIAN_POINT('Ctrl Pts',(3.01604625511647,-1.93367650062173,2.3146673927827)); #16568=CARTESIAN_POINT('Ctrl Pts',(3.08012189482564,-1.91665856592388,1.85889189741454)); #16569=CARTESIAN_POINT('Ctrl Pts',(3.14213784747926,-1.89469592068056,1.41721173967205)); #16570=CARTESIAN_POINT('Ctrl Pts',(3.20109069697166,-1.86809229863602,0.998007773910746)); #16571=CARTESIAN_POINT('Ctrl Pts',(3.00277315586575,-1.89525170587239,2.31413668522178)); #16572=CARTESIAN_POINT('Ctrl Pts',(3.0653204173773,-1.87622682064863,1.85851726029773)); #16573=CARTESIAN_POINT('Ctrl Pts',(3.12567537352677,-1.85207312584328,1.41704732101053)); #16574=CARTESIAN_POINT('Ctrl Pts',(3.18248733721753,-1.82320625123645,0.998093776244276)); #16575=CARTESIAN_POINT('Ctrl Pts',(2.97153901663283,-1.87084471381156,2.31059480256791)); #16576=CARTESIAN_POINT('Ctrl Pts',(3.03111663347574,-1.85195664401154,1.85474515596171)); #16577=CARTESIAN_POINT('Ctrl Pts',(3.08815209642091,-1.82831569702878,1.4129913826476)); #16578=CARTESIAN_POINT('Ctrl Pts',(3.14132075934199,-1.80046048245013,0.993676672470693)); #16579=CARTESIAN_POINT('Ctrl Pts',(2.95652545908412,-1.86420051630486,2.30871557425481)); #16580=CARTESIAN_POINT('Ctrl Pts',(3.01489264064383,-1.84589932512039,1.85272740162931)); #16581=CARTESIAN_POINT('Ctrl Pts',(3.07063946997935,-1.82305252855778,1.4108090471813)); #16582=CARTESIAN_POINT('Ctrl Pts',(3.12253732560691,-1.7963452046735,0.991284425493507)); #16583=CARTESIAN_POINT('Ctrl Pts',(3.12253732560691,-1.7963452046735,0.991284425493507)); #16584=CARTESIAN_POINT('Ctrl Pts',(3.07063946997935,-1.82305252855778,1.4108090471813)); #16585=CARTESIAN_POINT('Ctrl Pts',(3.01489264064383,-1.84589932512039,1.85272740162931)); #16586=CARTESIAN_POINT('Ctrl Pts',(2.95652545908412,-1.86420051630486,2.30871557425481)); #16587=CARTESIAN_POINT('Ctrl Pts',(3.01615167249202,-1.95569713910569,2.31391730918044)); #16588=CARTESIAN_POINT('Ctrl Pts',(3.0802366308872,-1.93985815683919,1.85792913655517)); #16589=CARTESIAN_POINT('Ctrl Pts',(3.14234420516579,-1.91912319944682,1.41601078300254)); #16590=CARTESIAN_POINT('Ctrl Pts',(3.201304545676,-1.89388282770969,0.996486161314748)); #16591=CARTESIAN_POINT('Origin',(3.25,-1.18268973352498,2.3)); #16592=CARTESIAN_POINT('Origin',(3.25,-1.18268973352498,2.30871557427477)); #16593=CARTESIAN_POINT('Origin',(3.12793611754278,-1.35384486676249,0.8)); #16594=CARTESIAN_POINT('',(3.22696292441694,-1.35384486676249,0.813917310096006)); #16595=CARTESIAN_POINT('',(3.12793611754278,-1.35384486676249,0.9)); #16596=CARTESIAN_POINT('Origin',(3.25,-1.18268973352498,1.)); #16597=CARTESIAN_POINT('Origin',(3.25,-1.18268973352498,0.991284425725234)); #16598=CARTESIAN_POINT('Origin',(3.25,-1.18268973352498,0.9)); #16599=CARTESIAN_POINT('Origin',(-3.25,-1.18268973352498,1.)); #16600=CARTESIAN_POINT('Origin',(-3.25,-1.18268973352498,0.991284425725234)); #16601=CARTESIAN_POINT('Origin',(-3.25,-1.18268973352498,0.9)); #16602=CARTESIAN_POINT('Ctrl Pts',(3.16511987982215,2.45603420536314,0.636082689903993)); #16603=CARTESIAN_POINT('Ctrl Pts',(3.09510515227941,2.46603959379074,1.21729347446234)); #16604=CARTESIAN_POINT('Ctrl Pts',(3.02689587488855,2.48854945077173,1.78351673945041)); #16605=CARTESIAN_POINT('Ctrl Pts',(2.96467845613359,2.52218221268539,2.3)); #16606=CARTESIAN_POINT('Ctrl Pts',(3.19182090179772,2.45221852106849,0.639911907470235)); #16607=CARTESIAN_POINT('Ctrl Pts',(3.11915087743532,2.45931089502637,1.22086899422616)); #16608=CARTESIAN_POINT('Ctrl Pts',(3.04788502896885,2.47996497577641,1.78691306140985)); #16609=CARTESIAN_POINT('Ctrl Pts',(2.98255633579125,2.51251799835314,2.30324678099703)); #16610=CARTESIAN_POINT('Ctrl Pts',(3.23531850998209,2.42521654343818,0.64656740143751)); #16611=CARTESIAN_POINT('Ctrl Pts',(3.15630184490837,2.43131375716702,1.22711389063481)); #16612=CARTESIAN_POINT('Ctrl Pts',(3.07896394403795,2.45191468375941,1.79283283350491)); #16613=CARTESIAN_POINT('Ctrl Pts',(3.00831421883694,2.48554349726085,2.30891611987744)); #16614=CARTESIAN_POINT('Ctrl Pts',(3.25005654332526,2.37746792214944,0.64959767333546)); #16615=CARTESIAN_POINT('Ctrl Pts',(3.16839527119519,2.38747815551312,1.23050021066431)); #16616=CARTESIAN_POINT('Ctrl Pts',(3.08887864862395,2.41204452334655,1.79648618912043)); #16617=CARTESIAN_POINT('Ctrl Pts',(3.01631283073765,2.44960446349957,2.312770608679)); #16618=CARTESIAN_POINT('Ctrl Pts',(3.25,2.357039906257,0.65)); #16619=CARTESIAN_POINT('Ctrl Pts',(3.16831615120014,2.36871285942253,1.23121078455834)); #16620=CARTESIAN_POINT('Ctrl Pts',(3.0887386609108,2.39497435923369,1.79743404954642)); #16621=CARTESIAN_POINT('Ctrl Pts',(3.01615167236335,2.43421258146629,2.31391731009601)); #16622=CARTESIAN_POINT('',(3.16344335092698,2.45627620352453,0.650000000000006)); #16623=CARTESIAN_POINT('Origin',(3.25,3.05,-0.0685296534327703)); #16624=CARTESIAN_POINT('',(3.25,2.357039906257,0.65)); #16625=CARTESIAN_POINT('Origin',(3.34902680687416,3.05,-0.0546123433367641)); #16626=CARTESIAN_POINT('Ctrl Pts',(3.25,2.357039906257,0.65)); #16627=CARTESIAN_POINT('Ctrl Pts',(3.25,2.36995043016491,0.649999999999999)); #16628=CARTESIAN_POINT('Ctrl Pts',(3.24743847886008,2.38274976413083,0.649994277043885)); #16629=CARTESIAN_POINT('Ctrl Pts',(3.24256425655855,2.39471334970195,0.649996444754762)); #16630=CARTESIAN_POINT('Ctrl Pts',(3.23968744247613,2.4017743759166,0.649997724159105)); #16631=CARTESIAN_POINT('Ctrl Pts',(3.23603106230527,2.40846235932831,0.650000729522973)); #16632=CARTESIAN_POINT('Ctrl Pts',(3.23164460905751,2.41463261231992,0.650000903002949)); #16633=CARTESIAN_POINT('Ctrl Pts',(3.22854483546213,2.418992943143,0.650001025595991)); #16634=CARTESIAN_POINT('Ctrl Pts',(3.22507944797954,2.42309467549527,0.649999592951716)); #16635=CARTESIAN_POINT('Ctrl Pts',(3.22129207800017,2.42691187848148,0.649998198525889)); #16636=CARTESIAN_POINT('Ctrl Pts',(3.21361830024883,2.43464610236441,0.649995373210711)); #16637=CARTESIAN_POINT('Ctrl Pts',(3.20474006569564,2.44111038492318,0.649993494794255)); #16638=CARTESIAN_POINT('Ctrl Pts',(3.19503172371798,2.44609513943991,0.649994722440963)); #16639=CARTESIAN_POINT('Ctrl Pts',(3.18512207106561,2.45118325705379,0.649995975543963)); #16640=CARTESIAN_POINT('Ctrl Pts',(3.1744672196891,2.45466832514256,0.649999912882834)); #16641=CARTESIAN_POINT('Ctrl Pts',(3.1634433577795,2.4562762270059,0.64999994311536)); #16642=CARTESIAN_POINT('Origin',(-3.25,3.05,2.3)); #16643=CARTESIAN_POINT('',(-2.69662316151722,2.81810762274105,2.3)); #16644=CARTESIAN_POINT('Origin',(-3.25,3.05,2.3)); #16645=CARTESIAN_POINT('',(-2.69639026515296,2.81615167236335,2.31391731009601)); #16646=CARTESIAN_POINT('Ctrl Pts',(-2.63421258146629,2.71712486548919,2.4)); #16647=CARTESIAN_POINT('Ctrl Pts',(-2.63449347029544,2.71759600711771,2.4)); #16648=CARTESIAN_POINT('Ctrl Pts',(-2.63477450097955,2.7180670643035,2.39999667038391)); #16649=CARTESIAN_POINT('Ctrl Pts',(-2.64233998695929,2.73073946345828,2.39981757421995)); #16650=CARTESIAN_POINT('Ctrl Pts',(-2.64971166426607,2.74286286555461,2.39741259773015)); #16651=CARTESIAN_POINT('Ctrl Pts',(-2.66368787701877,2.76544611021733,2.38837039538762)); #16652=CARTESIAN_POINT('Ctrl Pts',(-2.67030971839145,2.77594383223109,2.38183546898141)); #16653=CARTESIAN_POINT('Ctrl Pts',(-2.68160917841327,2.79360493272236,2.36545701150651)); #16654=CARTESIAN_POINT('Ctrl Pts',(-2.68636096764175,2.80090864670037,2.35594534939952)); #16655=CARTESIAN_POINT('Ctrl Pts',(-2.69314107198102,2.81125132567223,2.33543391095901)); #16656=CARTESIAN_POINT('Ctrl Pts',(-2.69536211721006,2.81460126604779,2.32494902425112)); #16657=CARTESIAN_POINT('Ctrl Pts',(-2.69639026515296,2.81615167236335,2.31391731009601)); #16658=CARTESIAN_POINT('Ctrl Pts',(-2.69639026515296,2.81615167236335,2.31391731009601)); #16659=CARTESIAN_POINT('Ctrl Pts',(-2.69683481977649,2.81682204310201,2.30914737443938)); #16660=CARTESIAN_POINT('Ctrl Pts',(-2.69688328414833,2.81748687857982,2.30441682421017)); #16661=CARTESIAN_POINT('Ctrl Pts',(-2.69662316151722,2.81810762274105,2.3)); #16662=CARTESIAN_POINT('Ctrl Pts',(-2.96467845613359,2.52218221268539,2.3)); #16663=CARTESIAN_POINT('Ctrl Pts',(-3.02689587488855,2.48854945077173,1.78351673945041)); #16664=CARTESIAN_POINT('Ctrl Pts',(-3.09510515227941,2.46603959379074,1.21729347446234)); #16665=CARTESIAN_POINT('Ctrl Pts',(-3.16511987982215,2.45603420536314,0.636082689903993)); #16666=CARTESIAN_POINT('Ctrl Pts',(-2.98255633579125,2.51251799835314,2.30324678099703)); #16667=CARTESIAN_POINT('Ctrl Pts',(-3.04788502896885,2.47996497577641,1.78691306140985)); #16668=CARTESIAN_POINT('Ctrl Pts',(-3.11915087743532,2.45931089502637,1.22086899422616)); #16669=CARTESIAN_POINT('Ctrl Pts',(-3.19182090179772,2.45221852106849,0.639911907470235)); #16670=CARTESIAN_POINT('Ctrl Pts',(-3.00831421883694,2.48554349726085,2.30891611987744)); #16671=CARTESIAN_POINT('Ctrl Pts',(-3.07896394403795,2.45191468375941,1.79283283350491)); #16672=CARTESIAN_POINT('Ctrl Pts',(-3.15630184490837,2.43131375716702,1.22711389063481)); #16673=CARTESIAN_POINT('Ctrl Pts',(-3.23531850998209,2.42521654343818,0.64656740143751)); #16674=CARTESIAN_POINT('Ctrl Pts',(-3.01631283073765,2.44960446349957,2.312770608679)); #16675=CARTESIAN_POINT('Ctrl Pts',(-3.08887864862395,2.41204452334655,1.79648618912043)); #16676=CARTESIAN_POINT('Ctrl Pts',(-3.16839527119519,2.38747815551312,1.23050021066431)); #16677=CARTESIAN_POINT('Ctrl Pts',(-3.25005654332526,2.37746792214944,0.64959767333546)); #16678=CARTESIAN_POINT('Ctrl Pts',(-3.01615167236335,2.43421258146629,2.31391731009601)); #16679=CARTESIAN_POINT('Ctrl Pts',(-3.0887386609108,2.39497435923368,1.79743404954642)); #16680=CARTESIAN_POINT('Ctrl Pts',(-3.16831615120014,2.36871285942253,1.23121078455834)); #16681=CARTESIAN_POINT('Ctrl Pts',(-3.25,2.357039906257,0.65)); #16682=CARTESIAN_POINT('Origin',(-3.34902680687416,3.05,-0.0546123433367641)); #16683=CARTESIAN_POINT('Origin',(-3.25,3.05,-0.0685296534327703)); #16684=CARTESIAN_POINT('Ctrl Pts',(3.08525284930485,2.47306120225987,0.000919950876568654)); #16685=CARTESIAN_POINT('Ctrl Pts',(3.11144748369583,2.46558122102734,0.218368544050161)); #16686=CARTESIAN_POINT('Ctrl Pts',(3.13815217216892,2.45988800012236,0.440051231158471)); #16687=CARTESIAN_POINT('Ctrl Pts',(3.16511987982215,2.45603420536314,0.663917310096007)); #16688=CARTESIAN_POINT('Ctrl Pts',(3.10872975294532,2.46635727976919,-0.00264855450778657)); #16689=CARTESIAN_POINT('Ctrl Pts',(3.13605712319371,2.45973028857416,0.214720430468505)); #16690=CARTESIAN_POINT('Ctrl Pts',(3.16383044834688,2.45495030442574,0.436319730864123)); #16691=CARTESIAN_POINT('Ctrl Pts',(3.19182090179772,2.45221852106849,0.660088092529765)); #16692=CARTESIAN_POINT('Ctrl Pts',(3.14503741334892,2.43859983985565,-0.00886522470861285)); #16693=CARTESIAN_POINT('Ctrl Pts',(3.1746824961592,2.43202728589265,0.208373053443535)); #16694=CARTESIAN_POINT('Ctrl Pts',(3.20488767737401,2.42756810386731,0.429821863635531)); #16695=CARTESIAN_POINT('Ctrl Pts',(3.23532267866914,2.42521962829496,0.65343207464755)); #16696=CARTESIAN_POINT('Ctrl Pts',(3.15692407275276,2.39539617928735,-0.0122696346178426)); #16697=CARTESIAN_POINT('Ctrl Pts',(3.18747572075303,2.38731274589065,0.20507852450984)); #16698=CARTESIAN_POINT('Ctrl Pts',(3.21860291362928,2.38132358304204,0.426654975906944)); #16699=CARTESIAN_POINT('Ctrl Pts',(3.25005654332526,2.37746792214944,0.650402326664541)); #16700=CARTESIAN_POINT('Ctrl Pts',(3.15682179772982,2.37690473596984,-0.0129973592194378)); #16701=CARTESIAN_POINT('Ctrl Pts',(3.1873822045193,2.36817809119856,0.204451233954154)); #16702=CARTESIAN_POINT('Ctrl Pts',(3.21853767440457,2.36153600014275,0.426133921062465)); #16703=CARTESIAN_POINT('Ctrl Pts',(3.25,2.357039906257,0.65)); #16704=CARTESIAN_POINT('',(3.08525284930485,2.47306120225987,0.000919950876569486)); #16705=CARTESIAN_POINT('Origin',(3.25,3.05,1.36852965343277)); #16706=CARTESIAN_POINT('',(3.17074659053598,2.37308334009096,0.0860826899039935)); #16707=CARTESIAN_POINT('Origin',(3.34902680687416,3.05,1.35461234333677)); #16708=CARTESIAN_POINT('Ctrl Pts',(3.17074662663219,2.37308350185599,0.086082946741871)); #16709=CARTESIAN_POINT('Ctrl Pts',(3.16923641767083,2.38434474081259,0.0753319679003814)); #16710=CARTESIAN_POINT('Ctrl Pts',(3.16594156035387,2.39569776227976,0.0647593920429742)); #16711=CARTESIAN_POINT('Ctrl Pts',(3.16091374185912,2.4066625134991,0.0548128669074693)); #16712=CARTESIAN_POINT('Ctrl Pts',(3.15754509408859,2.41400891727005,0.0481486765121225)); #16713=CARTESIAN_POINT('Ctrl Pts',(3.15336068877322,2.42125432429795,0.0416953008296382)); #16714=CARTESIAN_POINT('Ctrl Pts',(3.14829484244448,2.42817218430167,0.0356711462207967)); #16715=CARTESIAN_POINT('Ctrl Pts',(3.14637607456716,2.43079243108642,0.0333894042173192)); #16716=CARTESIAN_POINT('Ctrl Pts',(3.14433041259198,2.43336475128669,0.0311692433139568)); #16717=CARTESIAN_POINT('Ctrl Pts',(3.14215981441885,2.43587828747296,0.0290217359078105)); #16718=CARTESIAN_POINT('Ctrl Pts',(3.13423463643492,2.44505558334089,0.0211808657614045)); #16719=CARTESIAN_POINT('Ctrl Pts',(3.12451363817034,2.45362576373961,0.0141841349435868)); #16720=CARTESIAN_POINT('Ctrl Pts',(3.1130862046299,2.46066192986989,0.00897878716538588)); #16721=CARTESIAN_POINT('Ctrl Pts',(3.10466730579789,2.46584566343582,0.00514386691185872)); #16722=CARTESIAN_POINT('Ctrl Pts',(3.0953418008244,2.47018026233546,0.00229797242976037)); #16723=CARTESIAN_POINT('Ctrl Pts',(3.08525284930485,2.47306120225987,0.000919950876568654)); #16724=CARTESIAN_POINT('Origin',(0.8125,2.71712486548919,2.3)); #16725=CARTESIAN_POINT('',(0.8125,2.81615167236335,2.31391731009601)); #16726=CARTESIAN_POINT('Origin',(3.07171978366182,-0.7625,0.1)); #16727=CARTESIAN_POINT('',(3.17074659053598,-0.7625,0.0860826899039935)); #16728=CARTESIAN_POINT('',(3.07171978366182,2.47709846879031,0.)); #16729=CARTESIAN_POINT('',(3.07171978366182,-0.7625,0.)); #16730=CARTESIAN_POINT('Ctrl Pts',(3.07171978366182,2.47709846879031,1.73472347597681E-17)); #16731=CARTESIAN_POINT('Ctrl Pts',(3.07613180571514,2.47572549943466,-7.1444075839841E-18)); #16732=CARTESIAN_POINT('Ctrl Pts',(3.08067315114946,2.4743689531428,0.000294422767625523)); #16733=CARTESIAN_POINT('Ctrl Pts',(3.08525284930485,2.47306120225987,0.000919950876569384)); #16734=CARTESIAN_POINT('Origin',(3.05977434544746,-2.81058505330162,0.0150037906089159)); #16735=CARTESIAN_POINT('',(3.05977434544746,-2.90961186017578,0.00108648051290927)); #16736=CARTESIAN_POINT('',(3.25,-2.90178390098001,0.65)); #16737=CARTESIAN_POINT('',(3.15880115232162,-2.81058505330162,0.00108648051290928)); #16738=CARTESIAN_POINT('Origin',(3.19950862137407,-2.95031932922823,1.00926482671639)); #16739=CARTESIAN_POINT('Origin',(-0.8125,-2.82253049151599,0.1)); #16740=CARTESIAN_POINT('',(-0.8125,-2.92155729839014,0.0860826899039935)); #16741=CARTESIAN_POINT('',(-0.8125,-2.82253049151599,0.)); #16742=CARTESIAN_POINT('Origin',(-3.06167445709909,-2.81248516495325,0.0285237875240598)); #16743=CARTESIAN_POINT('',(-3.25,-2.90178390098001,0.65)); #16744=CARTESIAN_POINT('Origin',(-3.19950862137407,-2.95031932922823,1.00926482671639)); #16745=CARTESIAN_POINT('',(-3.16070126397325,-2.81248516495325,0.0146064774280532)); #16746=CARTESIAN_POINT('',(-3.06167445709909,-2.91151197182741,0.0146064774280532)); #16747=CARTESIAN_POINT('Origin',(-1.625,-2.98675662438392,1.95)); #16748=CARTESIAN_POINT('',(-0.35,-3.05,1.5)); #16749=CARTESIAN_POINT('Origin',(-3.12702676963541,1.525,1.525)); #16750=CARTESIAN_POINT('',(-3.25,1.525,0.65)); #16751=CARTESIAN_POINT('Origin',(3.12702676963541,-1.525,1.525)); #16752=CARTESIAN_POINT('',(3.25,-1.525,0.65)); #16753=CARTESIAN_POINT('Origin',(1.625,2.92702676963541,1.525)); #16754=CARTESIAN_POINT('Origin',(3.25,3.05,0.65)); #16755=CARTESIAN_POINT('Origin',(-3.25,3.05,0.65)); #16756=CARTESIAN_POINT('Origin',(3.25,3.05,2.4)); #16757=CARTESIAN_POINT('Origin',(3.25,3.05,0.)); #16758=CARTESIAN_POINT('Origin',(-3.25,-1.18268973352498,0.9)); #16759=CARTESIAN_POINT('Origin',(-3.25,-1.18268973352498,1.65)); #16760=CARTESIAN_POINT('Origin',(3.25,-1.18268973352498,1.65)); #16761=CARTESIAN_POINT('Origin',(3.25,-1.18268973352498,0.9)); #16762=CARTESIAN_POINT('Origin',(-3.20432422872172,1.525,0.325)); #16763=CARTESIAN_POINT('Origin',(-3.25,3.05,2.4)); #16764=CARTESIAN_POINT('Origin',(-3.25,3.05,0.)); #16765=CARTESIAN_POINT('Origin',(3.20432422872172,-1.525,0.325)); #16766=CARTESIAN_POINT('Origin',(-1.625,-2.9797295826488,0.5)); #16767=CARTESIAN_POINT('',(-0.35,-3.05,1.)); #16768=CARTESIAN_POINT('Origin',(-3.25,-3.05,0.)); #16769=CARTESIAN_POINT('Origin',(-8.16431199431569E-18,1.47043793961598, 2.2)); #16770=CARTESIAN_POINT('Origin',(-2.77555756156289E-16,2.61127735915403, 0.)); #16771=CARTESIAN_POINT('',(0.,0.,0.)); #16772=CARTESIAN_POINT('Origin',(3.52122937758704,-3.05,2.4)); #16773=CARTESIAN_POINT('',(-1.925,-3.05,1.)); #16774=CARTESIAN_POINT('',(-1.925,-3.05,1.5)); #16775=CARTESIAN_POINT('',(-1.925,-3.05,0.0548000272793604)); #16776=CARTESIAN_POINT('',(-1.475,-3.05,1.5)); #16777=CARTESIAN_POINT('',(-2.475,-3.05,1.5)); #16778=CARTESIAN_POINT('',(-1.475,-3.05,1.)); #16779=CARTESIAN_POINT('',(-1.475,-3.05,0.0548000272793604)); #16780=CARTESIAN_POINT('',(-2.475,-3.05,1.)); #16781=CARTESIAN_POINT('Origin',(-1.7,-3.84099388778706,0.6)); #16782=CARTESIAN_POINT('',(-1.925,-4.16935596850126,0.82842579527944)); #16783=CARTESIAN_POINT('',(-1.925,-3.84099388778706,1.)); #16784=CARTESIAN_POINT('Origin',(-1.925,-3.84099388778706,0.6)); #16785=CARTESIAN_POINT('',(-1.475,-3.84099388778706,1.)); #16786=CARTESIAN_POINT('',(-1.7,-3.84099388778706,1.)); #16787=CARTESIAN_POINT('',(-1.475,-4.16935596850126,0.82842579527944)); #16788=CARTESIAN_POINT('Origin',(-1.475,-3.84099388778706,0.6)); #16789=CARTESIAN_POINT('',(-1.7,-4.16935596850126,0.82842579527944)); #16790=CARTESIAN_POINT('Origin',(-1.7,-4.05,1.)); #16791=CARTESIAN_POINT('',(-1.925,-4.05,1.)); #16792=CARTESIAN_POINT('',(-1.475,-4.05,1.)); #16793=CARTESIAN_POINT('Origin',(-1.7,-5.04866273088743,0.264868610655418)); #16794=CARTESIAN_POINT('',(-1.925,-5.07656532038508,-0.134157009448511)); #16795=CARTESIAN_POINT('',(-1.925,-4.72030065017323,0.0364428153759782)); #16796=CARTESIAN_POINT('Origin',(-1.925,-5.04866273088743,0.264868610655418)); #16797=CARTESIAN_POINT('',(-1.475,-4.72030065017323,0.0364428153759782)); #16798=CARTESIAN_POINT('',(-1.7,-4.72030065017323,0.0364428153759782)); #16799=CARTESIAN_POINT('',(-1.475,-5.07656532038508,-0.134157009448511)); #16800=CARTESIAN_POINT('Origin',(-1.475,-5.04866273088743,0.264868610655418)); #16801=CARTESIAN_POINT('',(-1.7,-5.07656532038508,-0.134157009448511)); #16802=CARTESIAN_POINT('Origin',(-1.7,-4.85,-0.15)); #16803=CARTESIAN_POINT('',(-1.475,-4.17705644020449,0.817356367206042)); #16804=CARTESIAN_POINT('',(-1.475,-4.85,-0.15)); #16805=CARTESIAN_POINT('',(-1.35,-4.17705644020449,0.817356367206042)); #16806=CARTESIAN_POINT('',(-1.7,-4.17705644020449,0.817356367206042)); #16807=CARTESIAN_POINT('',(-1.35,-4.5524268067404,0.277761465310675)); #16808=CARTESIAN_POINT('',(-1.35,-4.5524268067404,0.277761465310675)); #16809=CARTESIAN_POINT('',(-1.475,-4.5524268067404,0.277761465310675)); #16810=CARTESIAN_POINT('',(-1.7,-4.5524268067404,0.277761465310675)); #16811=CARTESIAN_POINT('',(-1.475,-4.85,-0.15)); #16812=CARTESIAN_POINT('',(-1.925,-4.5524268067404,0.277761465310675)); #16813=CARTESIAN_POINT('',(-1.925,-4.85,-0.15)); #16814=CARTESIAN_POINT('',(-2.05,-4.5524268067404,0.277761465310675)); #16815=CARTESIAN_POINT('',(-1.7,-4.5524268067404,0.277761465310675)); #16816=CARTESIAN_POINT('',(-2.05,-4.17705644020449,0.817356367206042)); #16817=CARTESIAN_POINT('',(-2.05,-4.5524268067404,0.277761465310675)); #16818=CARTESIAN_POINT('',(-1.925,-4.17705644020449,0.817356367206042)); #16819=CARTESIAN_POINT('',(-1.7,-4.17705644020449,0.817356367206042)); #16820=CARTESIAN_POINT('',(-1.925,-4.85,-0.15)); #16821=CARTESIAN_POINT('Origin',(-1.925,-5.39099485797536,0.109600054558721)); #16822=CARTESIAN_POINT('',(-1.925,-5.85,-0.0800731880564894)); #16823=CARTESIAN_POINT('',(-1.925,-5.85,-0.0800731880564894)); #16824=CARTESIAN_POINT('',(-1.925,-5.81512176312794,0.418708837073423)); #16825=CARTESIAN_POINT('',(-1.925,-5.81512176312794,0.418708837073423)); #16826=CARTESIAN_POINT('',(-1.925,-5.36067459409595,0.386930795346262)); #16827=CARTESIAN_POINT('',(-1.925,-4.81512176312794,0.348782025129912)); #16828=CARTESIAN_POINT('',(-1.925,-5.00440992388411,0.557530620170752)); #16829=CARTESIAN_POINT('Origin',(-1.925,-5.3327720045983,0.785956415450192)); #16830=CARTESIAN_POINT('',(-1.925,-4.9881645366226,0.580883364359164)); #16831=CARTESIAN_POINT('',(-1.925,-4.34877905095941,1.5)); #16832=CARTESIAN_POINT('',(-1.925,-5.01342885636085,0.59845854330751)); #16833=CARTESIAN_POINT('Origin',(-1.7,-5.3327720045983,0.785956415450192)); #16834=CARTESIAN_POINT('',(-1.475,-5.36067459409595,0.386930795346262)); #16835=CARTESIAN_POINT('',(-1.7,-5.36067459409595,0.386930795346262)); #16836=CARTESIAN_POINT('',(-1.475,-5.00440992388411,0.557530620170752)); #16837=CARTESIAN_POINT('Origin',(-1.475,-5.3327720045983,0.785956415450192)); #16838=CARTESIAN_POINT('',(-1.7,-5.00440992388411,0.557530620170752)); #16839=CARTESIAN_POINT('Origin',(-1.7,-5.13410927371087,0.371087804794774)); #16840=CARTESIAN_POINT('',(-1.475,-5.81512176312794,0.418708837073423)); #16841=CARTESIAN_POINT('',(-1.7,-5.81512176312794,0.418708837073423)); #16842=CARTESIAN_POINT('',(-1.475,-4.81512176312794,0.348782025129912)); #16843=CARTESIAN_POINT('Origin',(-1.7,-4.13977293874648,1.1)); #16844=CARTESIAN_POINT('',(-1.475,-4.46813501946067,1.32842579527944)); #16845=CARTESIAN_POINT('',(-1.475,-4.13977293874648,1.5)); #16846=CARTESIAN_POINT('Origin',(-1.475,-4.13977293874648,1.1)); #16847=CARTESIAN_POINT('',(-1.925,-4.13977293874648,1.5)); #16848=CARTESIAN_POINT('',(-1.7,-4.13977293874648,1.5)); #16849=CARTESIAN_POINT('',(-1.925,-4.46813501946067,1.32842579527944)); #16850=CARTESIAN_POINT('Origin',(-1.925,-4.13977293874648,1.1)); #16851=CARTESIAN_POINT('',(-1.7,-4.46813501946067,1.32842579527944)); #16852=CARTESIAN_POINT('Origin',(-1.7,-3.05,1.5)); #16853=CARTESIAN_POINT('',(-1.475,-3.05,1.5)); #16854=CARTESIAN_POINT('',(-1.925,-4.05,1.5)); #16855=CARTESIAN_POINT('Origin',(-1.475,-5.39099485797536,0.109600054558721)); #16856=CARTESIAN_POINT('',(-1.475,-4.6127941700867,1.12047826625453)); #16857=CARTESIAN_POINT('',(-1.475,-4.34877905095941,1.5)); #16858=CARTESIAN_POINT('',(-1.475,-4.42018962488384,0.986492495678632)); #16859=CARTESIAN_POINT('Origin',(-1.7,-4.9881645366226,0.580883364359164)); #16860=CARTESIAN_POINT('',(-1.475,-4.9881645366226,0.580883364359164)); #16861=CARTESIAN_POINT('',(-1.475,-5.01342885636085,0.59845854330751)); #16862=CARTESIAN_POINT('',(-1.35,-4.9881645366226,0.580883364359164)); #16863=CARTESIAN_POINT('',(-1.35,-4.9881645366226,0.580883364359164)); #16864=CARTESIAN_POINT('',(-1.7,-4.9881645366226,0.580883364359164)); #16865=CARTESIAN_POINT('Origin',(-1.7,-4.17705644020449,0.817356367206042)); #16866=CARTESIAN_POINT('',(-1.35,-4.6127941700867,1.12047826625453)); #16867=CARTESIAN_POINT('',(-1.7,-4.6127941700867,1.12047826625453)); #16868=CARTESIAN_POINT('',(-1.35,-4.17705644020449,0.817356367206042)); #16869=CARTESIAN_POINT('Origin',(-1.7,-4.17705644020449,0.817356367206042)); #16870=CARTESIAN_POINT('',(-1.925,-4.6127941700867,1.12047826625453)); #16871=CARTESIAN_POINT('',(-1.925,-4.42018962488384,0.986492495678632)); #16872=CARTESIAN_POINT('',(-2.05,-4.6127941700867,1.12047826625453)); #16873=CARTESIAN_POINT('',(-2.05,-4.17705644020449,0.817356367206042)); #16874=CARTESIAN_POINT('',(-1.7,-4.6127941700867,1.12047826625453)); #16875=CARTESIAN_POINT('Origin',(-2.05,-4.58261048841355,0.699119865782603)); #16876=CARTESIAN_POINT('',(-2.05,-4.9881645366226,0.580883364359164)); #16877=CARTESIAN_POINT('',(-2.05,-4.9881645366226,0.580883364359164)); #16878=CARTESIAN_POINT('',(-2.05,-4.6127941700867,1.12047826625453)); #16879=CARTESIAN_POINT('Origin',(-1.7,-4.9881645366226,0.580883364359164)); #16880=CARTESIAN_POINT('',(-1.7,-4.9881645366226,0.580883364359164)); #16881=CARTESIAN_POINT('Origin',(-1.35,-4.58261048841355,0.699119865782603)); #16882=CARTESIAN_POINT('',(-1.35,-4.6127941700867,1.12047826625453)); #16883=CARTESIAN_POINT('Origin',(-1.925,-5.39099485797536,0.109600054558721)); #16884=CARTESIAN_POINT('',(-1.925,-4.34877905095941,1.5)); #16885=CARTESIAN_POINT('Origin',(-1.7,-4.34877905095941,1.5)); #16886=CARTESIAN_POINT('',(-1.475,-4.34877905095941,1.5)); #16887=CARTESIAN_POINT('Origin',(-1.7,-5.85,-0.0800731880564894)); #16888=CARTESIAN_POINT('',(-1.475,-5.85,-0.0800731880564894)); #16889=CARTESIAN_POINT('',(-1.475,-5.85,-0.0800731880564894)); #16890=CARTESIAN_POINT('',(-1.7,-5.85,-0.0800731880564894)); #16891=CARTESIAN_POINT('Origin',(-1.7,-5.81512176312794,0.418708837073423)); #16892=CARTESIAN_POINT('',(-1.475,-5.81512176312794,0.418708837073423)); #16893=CARTESIAN_POINT('Origin',(-1.475,-5.39099485797536,0.109600054558721)); #16894=CARTESIAN_POINT('Origin',(0.,1.275,0.65)); #16895=CARTESIAN_POINT('',(-2.65,3.46801960972814,0.65)); #16896=CARTESIAN_POINT('',(-2.56961161351382,3.56607767729724,0.65)); #16897=CARTESIAN_POINT('Origin',(-2.55,3.46801960972814,0.65)); #16898=CARTESIAN_POINT('',(-2.65,3.05,0.65)); #16899=CARTESIAN_POINT('',(-2.65,-1.3,0.65)); #16900=CARTESIAN_POINT('',(2.65,3.05,0.65)); #16901=CARTESIAN_POINT('',(1.625,3.05,0.65)); #16902=CARTESIAN_POINT('',(2.65,3.46801960972814,0.65)); #16903=CARTESIAN_POINT('',(2.65,3.85,0.65)); #16904=CARTESIAN_POINT('',(2.56961161351382,3.56607767729724,0.65)); #16905=CARTESIAN_POINT('Origin',(2.55,3.46801960972814,0.65)); #16906=CARTESIAN_POINT('',(1.15,3.85,0.65)); #16907=CARTESIAN_POINT('',(1.21971153846154,3.83605769230769,0.65)); #16908=CARTESIAN_POINT('',(0.688177942864957,3.85,0.65)); #16909=CARTESIAN_POINT('',(-2.65,3.85,0.65)); #16910=CARTESIAN_POINT('',(0.688177942864957,3.6731412933882,0.65)); #16911=CARTESIAN_POINT('',(0.688177942864957,2.6509293533059,0.65)); #16912=CARTESIAN_POINT('',(-0.688177942864957,3.6731412933882,0.65)); #16913=CARTESIAN_POINT('',(0.344088971432479,3.6731412933882,0.65)); #16914=CARTESIAN_POINT('',(-0.688177942864957,3.85,0.65)); #16915=CARTESIAN_POINT('',(-0.688177942864957,2.4740706466941,0.65)); #16916=CARTESIAN_POINT('',(-1.15,3.85,0.65)); #16917=CARTESIAN_POINT('',(-2.65,3.85,0.65)); #16918=CARTESIAN_POINT('',(-1.21971153846154,3.83605769230769,0.65)); #16919=CARTESIAN_POINT('Origin',(-1.9,3.7,0.)); #16920=CARTESIAN_POINT('',(-2.56961161351382,3.56607767729724,-0.15)); #16921=CARTESIAN_POINT('',(-2.56961161351382,3.56607767729724,0.)); #16922=CARTESIAN_POINT('',(-1.15,3.85,-0.15)); #16923=CARTESIAN_POINT('',(-1.15,3.85,0.)); #16924=CARTESIAN_POINT('',(-1.21971153846154,3.83605769230769,-0.15)); #16925=CARTESIAN_POINT('Origin',(1.9,3.7,0.)); #16926=CARTESIAN_POINT('',(2.56961161351382,3.56607767729724,-0.15)); #16927=CARTESIAN_POINT('',(2.56961161351382,3.56607767729724,0.)); #16928=CARTESIAN_POINT('',(1.15,3.85,-0.15)); #16929=CARTESIAN_POINT('',(1.21971153846154,3.83605769230769,-0.15)); #16930=CARTESIAN_POINT('',(1.15,3.85,0.)); #16931=CARTESIAN_POINT('Origin',(2.65,3.85,0.)); #16932=CARTESIAN_POINT('',(-0.688177942864957,3.85,-0.15)); #16933=CARTESIAN_POINT('',(-0.688177942864957,3.85,-0.075)); #16934=CARTESIAN_POINT('',(-2.65,3.85,-0.15)); #16935=CARTESIAN_POINT('Origin',(2.65,3.85,0.)); #16936=CARTESIAN_POINT('',(0.688177942864957,3.85,-0.15)); #16937=CARTESIAN_POINT('',(0.688177942864957,3.85,-0.075)); #16938=CARTESIAN_POINT('',(-2.65,3.85,-0.15)); #16939=CARTESIAN_POINT('Origin',(0.688177942864957,4.0268587066118,-0.15)); #16940=CARTESIAN_POINT('',(0.688177942864957,3.6731412933882,-0.15)); #16941=CARTESIAN_POINT('',(0.688177942864957,2.6509293533059,-0.15)); #16942=CARTESIAN_POINT('',(0.688177942864957,3.6731412933882,-0.15)); #16943=CARTESIAN_POINT('Origin',(0.688177942864957,3.6731412933882,-0.15)); #16944=CARTESIAN_POINT('',(-0.688177942864957,3.6731412933882,-0.15)); #16945=CARTESIAN_POINT('',(0.344088971432479,3.6731412933882,-0.15)); #16946=CARTESIAN_POINT('',(-0.688177942864957,3.6731412933882,-0.15)); #16947=CARTESIAN_POINT('Origin',(-0.688177942864957,3.6731412933882,-0.15)); #16948=CARTESIAN_POINT('',(-0.688177942864957,2.4740706466941,-0.15)); #16949=CARTESIAN_POINT('Origin',(-2.65,2.61127735915403,-0.15)); #16950=CARTESIAN_POINT('',(-2.58636363636364,2.4482576878774,0.)); #16951=CARTESIAN_POINT('',(-2.58636363636364,2.4482576878774,-0.15)); #16952=CARTESIAN_POINT('',(-2.58636363636364,2.4482576878774,-0.15)); #16953=CARTESIAN_POINT('',(-2.58636363636364,2.77429703043066,0.)); #16954=CARTESIAN_POINT('Origin',(-2.65,2.61127735915403,0.)); #16955=CARTESIAN_POINT('',(-2.58636363636364,2.77429703043066,-0.15)); #16956=CARTESIAN_POINT('',(-2.58636363636364,2.77429703043066,-0.15)); #16957=CARTESIAN_POINT('Origin',(-2.65,2.61127735915403,-0.15)); #16958=CARTESIAN_POINT('Origin',(2.65,-1.3,0.)); #16959=CARTESIAN_POINT('',(2.65,2.86745112830302,0.)); #16960=CARTESIAN_POINT('',(2.65,3.05,0.)); #16961=CARTESIAN_POINT('',(2.65,-0.65,0.)); #16962=CARTESIAN_POINT('',(2.65,2.86745112830302,-0.15)); #16963=CARTESIAN_POINT('',(2.65,2.86745112830302,-0.15)); #16964=CARTESIAN_POINT('',(2.65,3.46801960972814,-0.15)); #16965=CARTESIAN_POINT('',(2.65,3.85,-0.15)); #16966=CARTESIAN_POINT('',(2.65,3.46801960972814,0.)); #16967=CARTESIAN_POINT('',(2.65,3.05,0.)); #16968=CARTESIAN_POINT('Origin',(2.55,3.46801960972814,0.)); #16969=CARTESIAN_POINT('Origin',(2.55,3.46801960972814,-0.15)); #16970=CARTESIAN_POINT('Origin',(-2.55,3.46801960972814,0.)); #16971=CARTESIAN_POINT('',(-2.65,3.46801960972814,-0.15)); #16972=CARTESIAN_POINT('Origin',(-2.55,3.46801960972814,-0.15)); #16973=CARTESIAN_POINT('',(-2.65,3.46801960972814,0.)); #16974=CARTESIAN_POINT('Origin',(-2.65,3.85,0.)); #16975=CARTESIAN_POINT('',(-2.65,3.05,0.)); #16976=CARTESIAN_POINT('',(-2.65,3.05,0.)); #16977=CARTESIAN_POINT('',(-2.65,2.86745112830302,-0.15)); #16978=CARTESIAN_POINT('',(-2.65,-1.3,-0.15)); #16979=CARTESIAN_POINT('',(-2.65,2.86745112830302,0.)); #16980=CARTESIAN_POINT('',(-2.65,2.86745112830302,-0.15)); #16981=CARTESIAN_POINT('',(-2.65,1.925,0.)); #16982=CARTESIAN_POINT('Origin',(-2.55,2.86745112830302,-0.15)); #16983=CARTESIAN_POINT('Origin',(-2.55,2.86745112830302,-0.15)); #16984=CARTESIAN_POINT('Origin',(-2.55,2.86745112830302,0.)); #16985=CARTESIAN_POINT('Origin',(-2.65,3.85,0.)); #16986=CARTESIAN_POINT('',(-2.65,-1.2,0.)); #16987=CARTESIAN_POINT('',(-2.65,-1.2,-0.15)); #16988=CARTESIAN_POINT('',(-2.65,-1.2,0.)); #16989=CARTESIAN_POINT('',(-2.65,2.35510359000504,0.)); #16990=CARTESIAN_POINT('',(-2.65,1.925,0.)); #16991=CARTESIAN_POINT('',(-2.65,2.35510359000504,-0.15)); #16992=CARTESIAN_POINT('',(-2.65,2.35510359000504,-0.15)); #16993=CARTESIAN_POINT('',(-2.65,-1.3,-0.15)); #16994=CARTESIAN_POINT('Origin',(-2.55,2.35510359000504,-0.15)); #16995=CARTESIAN_POINT('Origin',(-2.55,2.35510359000504,-0.15)); #16996=CARTESIAN_POINT('Origin',(-2.55,2.35510359000504,0.)); #16997=CARTESIAN_POINT('Origin',(-0.842502989792879,2.78878283046082,-0.15)); #16998=CARTESIAN_POINT('',(-0.842502989792879,2.68878283046082,0.)); #16999=CARTESIAN_POINT('',(-0.842502989792879,2.68878283046082,-0.15)); #17000=CARTESIAN_POINT('',(-0.842502989792879,2.68878283046082,-0.15)); #17001=CARTESIAN_POINT('',(-0.842502989792879,2.53377188784723,0.)); #17002=CARTESIAN_POINT('',(-0.842502989792879,2.70003009480742,0.)); #17003=CARTESIAN_POINT('',(-0.842502989792879,2.53377188784723,-0.15)); #17004=CARTESIAN_POINT('',(-0.842502989792879,2.53377188784723,-0.15)); #17005=CARTESIAN_POINT('',(-0.842502989792879,2.03189141523041,-0.15)); #17006=CARTESIAN_POINT('Origin',(-0.742502989792879,2.53377188784723,-0.15)); #17007=CARTESIAN_POINT('',(-0.742502989792879,2.43377188784723,0.)); #17008=CARTESIAN_POINT('Origin',(-0.742502989792879,2.53377188784723,0.)); #17009=CARTESIAN_POINT('',(-0.742502989792879,2.43377188784723,-0.15)); #17010=CARTESIAN_POINT('',(-0.742502989792879,2.43377188784723,-0.15)); #17011=CARTESIAN_POINT('Origin',(-0.742502989792879,2.53377188784723,-0.15)); #17012=CARTESIAN_POINT('Origin',(0.842502989792879,2.78878283046082,-0.15)); #17013=CARTESIAN_POINT('',(0.742502989792879,2.78878283046082,0.)); #17014=CARTESIAN_POINT('',(0.742502989792879,2.78878283046082,-0.15)); #17015=CARTESIAN_POINT('',(0.742502989792879,2.78878283046082,-0.15)); #17016=CARTESIAN_POINT('',(-0.742502989792879,2.78878283046082,0.)); #17017=CARTESIAN_POINT('',(0.421251494896439,2.78878283046082,0.)); #17018=CARTESIAN_POINT('',(-0.742502989792879,2.78878283046082,-0.15)); #17019=CARTESIAN_POINT('',(-0.742502989792879,2.78878283046082,-0.15)); #17020=CARTESIAN_POINT('',(0.42125149489644,2.78878283046082,-0.15)); #17021=CARTESIAN_POINT('Origin',(-0.742502989792879,2.68878283046082,-0.15)); #17022=CARTESIAN_POINT('Origin',(-0.742502989792879,2.68878283046082,0.)); #17023=CARTESIAN_POINT('Origin',(-0.742502989792879,2.68878283046082,-0.15)); #17024=CARTESIAN_POINT('Origin',(-0.842502989792879,2.43377188784723,-0.15)); #17025=CARTESIAN_POINT('',(0.742502989792879,2.43377188784723,-0.15)); #17026=CARTESIAN_POINT('',(0.742502989792879,2.43377188784723,0.)); #17027=CARTESIAN_POINT('',(0.742502989792879,2.43377188784723,-0.15)); #17028=CARTESIAN_POINT('',(-0.42125149489644,2.43377188784723,-0.15)); #17029=CARTESIAN_POINT('',(-0.42125149489644,2.43377188784723,0.)); #17030=CARTESIAN_POINT('Origin',(0.742502989792879,2.53377188784723,-0.15)); #17031=CARTESIAN_POINT('',(0.842502989792879,2.53377188784723,0.)); #17032=CARTESIAN_POINT('Origin',(0.742502989792879,2.53377188784723,0.)); #17033=CARTESIAN_POINT('',(0.842502989792879,2.53377188784723,-0.15)); #17034=CARTESIAN_POINT('',(0.842502989792879,2.53377188784723,-0.15)); #17035=CARTESIAN_POINT('Origin',(0.742502989792879,2.53377188784723,-0.15)); #17036=CARTESIAN_POINT('Origin',(0.842502989792879,2.43377188784723,-0.15)); #17037=CARTESIAN_POINT('',(0.842502989792879,2.68878283046082,-0.15)); #17038=CARTESIAN_POINT('',(0.842502989792879,2.68878283046082,0.)); #17039=CARTESIAN_POINT('',(0.842502989792879,2.68878283046082,-0.15)); #17040=CARTESIAN_POINT('',(0.842502989792879,1.85438594392362,-0.15)); #17041=CARTESIAN_POINT('',(0.842502989792879,2.52252462350063,0.)); #17042=CARTESIAN_POINT('Origin',(0.742502989792879,2.68878283046082,-0.15)); #17043=CARTESIAN_POINT('Origin',(0.742502989792879,2.68878283046082,0.)); #17044=CARTESIAN_POINT('Origin',(0.742502989792879,2.68878283046082,-0.15)); #17045=CARTESIAN_POINT('Origin',(2.55,2.35510359000504,-0.15)); #17046=CARTESIAN_POINT('',(2.65,2.35510359000504,-0.15)); #17047=CARTESIAN_POINT('',(2.58636363636364,2.4482576878774,-0.15)); #17048=CARTESIAN_POINT('Origin',(2.55,2.35510359000504,-0.15)); #17049=CARTESIAN_POINT('',(2.58636363636364,2.4482576878774,0.)); #17050=CARTESIAN_POINT('',(2.58636363636364,2.4482576878774,-0.15)); #17051=CARTESIAN_POINT('',(2.65,2.35510359000504,0.)); #17052=CARTESIAN_POINT('Origin',(2.55,2.35510359000504,0.)); #17053=CARTESIAN_POINT('',(2.65,2.35510359000504,-0.15)); #17054=CARTESIAN_POINT('Origin',(2.65,2.61127735915403,-0.15)); #17055=CARTESIAN_POINT('',(2.58636363636364,2.77429703043066,0.)); #17056=CARTESIAN_POINT('',(2.58636363636364,2.77429703043066,-0.15)); #17057=CARTESIAN_POINT('',(2.58636363636364,2.77429703043066,-0.15)); #17058=CARTESIAN_POINT('Origin',(2.65,2.61127735915403,0.)); #17059=CARTESIAN_POINT('Origin',(2.65,2.61127735915403,-0.15)); #17060=CARTESIAN_POINT('Origin',(2.55,2.86745112830302,-0.15)); #17061=CARTESIAN_POINT('Origin',(2.55,2.86745112830302,-0.15)); #17062=CARTESIAN_POINT('Origin',(2.55,2.86745112830302,0.)); #17063=CARTESIAN_POINT('Origin',(2.65,-1.3,0.)); #17064=CARTESIAN_POINT('',(2.65,-1.2,-0.15)); #17065=CARTESIAN_POINT('',(2.65,-1.2,0.)); #17066=CARTESIAN_POINT('',(2.65,-1.2,0.)); #17067=CARTESIAN_POINT('',(2.65,3.85,-0.15)); #17068=CARTESIAN_POINT('',(2.65,-0.65,0.)); #17069=CARTESIAN_POINT('Origin',(2.55,-1.2,0.)); #17070=CARTESIAN_POINT('',(2.55,-1.3,-0.15)); #17071=CARTESIAN_POINT('Origin',(2.55,-1.2,-0.15)); #17072=CARTESIAN_POINT('',(2.55,-1.3,0.)); #17073=CARTESIAN_POINT('Origin',(2.55,-1.2,0.)); #17074=CARTESIAN_POINT('',(2.55,-1.3,0.)); #17075=CARTESIAN_POINT('Origin',(0.,1.275,-0.15)); #17076=CARTESIAN_POINT('',(-2.55,-1.3,-0.15)); #17077=CARTESIAN_POINT('Origin',(-2.55,-1.2,-0.15)); #17078=CARTESIAN_POINT('',(2.65,-1.3,-0.15)); #17079=CARTESIAN_POINT('Origin',(-2.65,-1.3,0.)); #17080=CARTESIAN_POINT('',(-2.55,-1.3,0.)); #17081=CARTESIAN_POINT('',(-2.55,-1.3,0.)); #17082=CARTESIAN_POINT('',(-1.325,-1.3,0.)); #17083=CARTESIAN_POINT('Origin',(-2.55,-1.2,0.)); #17084=CARTESIAN_POINT('Origin',(-2.55,-1.2,0.)); #17085=CARTESIAN_POINT('Origin',(-3.52122937758704,3.05,2.4)); #17086=CARTESIAN_POINT('',(-1.76061468879352,3.05,0.)); #17087=CARTESIAN_POINT('Origin',(0.,0.,0.)); #17088=CARTESIAN_POINT('Origin',(3.52122937758704,-3.05,2.4)); #17089=CARTESIAN_POINT('',(2.325,-3.05,1.)); #17090=CARTESIAN_POINT('',(2.325,-3.05,1.5)); #17091=CARTESIAN_POINT('',(2.325,-3.05,0.0548000272793604)); #17092=CARTESIAN_POINT('',(2.775,-3.05,1.5)); #17093=CARTESIAN_POINT('',(-0.35,-3.05,1.5)); #17094=CARTESIAN_POINT('',(2.775,-3.05,1.)); #17095=CARTESIAN_POINT('',(2.775,-3.05,0.0548000272793604)); #17096=CARTESIAN_POINT('',(-0.35,-3.05,1.)); #17097=CARTESIAN_POINT('Origin',(2.775,-4.68417723111152,1.01786511603135)); #17098=CARTESIAN_POINT('',(2.9,-4.68417723111152,1.01786511603135)); #17099=CARTESIAN_POINT('',(2.775,-4.68417723111152,1.01786511603135)); #17100=CARTESIAN_POINT('',(2.6625,-4.68417723111152,1.01786511603135)); #17101=CARTESIAN_POINT('',(2.9,-4.24843950122932,0.714743216982856)); #17102=CARTESIAN_POINT('',(2.9,-4.57524279864097,0.942084641269223)); #17103=CARTESIAN_POINT('',(2.775,-4.24843950122932,0.714743216982856)); #17104=CARTESIAN_POINT('',(2.6625,-4.24843950122932,0.714743216982856)); #17105=CARTESIAN_POINT('',(2.775,-4.68417723111152,1.01786511603135)); #17106=CARTESIAN_POINT('Origin',(2.325,-4.91678147559778,0.68349651458235)); #17107=CARTESIAN_POINT('',(2.2,-4.91678147559778,0.68349651458235)); #17108=CARTESIAN_POINT('',(2.325,-4.91678147559778,0.68349651458235)); #17109=CARTESIAN_POINT('',(2.4375,-4.91678147559778,0.68349651458235)); #17110=CARTESIAN_POINT('',(2.2,-4.48104374571558,0.380374615533861)); #17111=CARTESIAN_POINT('',(2.2,-4.80784704312723,0.607716039820227)); #17112=CARTESIAN_POINT('',(2.325,-4.48104374571558,0.380374615533861)); #17113=CARTESIAN_POINT('',(2.4375,-4.48104374571558,0.380374615533861)); #17114=CARTESIAN_POINT('',(2.325,-4.91678147559778,0.68349651458235)); #17115=CARTESIAN_POINT('Origin',(2.55,-4.85,-0.15)); #17116=CARTESIAN_POINT('',(2.775,-4.16935596850126,0.82842579527944)); #17117=CARTESIAN_POINT('',(2.775,-4.85,-0.15)); #17118=CARTESIAN_POINT('',(2.9,-4.5524268067404,0.277761465310675)); #17119=CARTESIAN_POINT('',(2.9,-4.5524268067404,0.277761465310675)); #17120=CARTESIAN_POINT('',(2.775,-4.5524268067404,0.277761465310675)); #17121=CARTESIAN_POINT('',(2.55,-4.5524268067404,0.277761465310675)); #17122=CARTESIAN_POINT('',(2.775,-4.72030065017323,0.0364428153759782)); #17123=CARTESIAN_POINT('',(2.775,-4.85,-0.15)); #17124=CARTESIAN_POINT('',(2.325,-4.72030065017323,0.0364428153759782)); #17125=CARTESIAN_POINT('',(2.55,-4.72030065017323,0.0364428153759782)); #17126=CARTESIAN_POINT('',(2.325,-4.85,-0.15)); #17127=CARTESIAN_POINT('',(2.2,-4.17705644020449,0.817356367206042)); #17128=CARTESIAN_POINT('',(2.2,-4.5524268067404,0.277761465310675)); #17129=CARTESIAN_POINT('',(2.325,-4.17705644020449,0.817356367206042)); #17130=CARTESIAN_POINT('',(2.55,-4.17705644020449,0.817356367206042)); #17131=CARTESIAN_POINT('',(2.325,-4.16935596850126,0.82842579527944)); #17132=CARTESIAN_POINT('',(2.325,-4.85,-0.15)); #17133=CARTESIAN_POINT('',(2.55,-4.16935596850126,0.82842579527944)); #17134=CARTESIAN_POINT('Origin',(2.55,-3.84099388778706,0.6)); #17135=CARTESIAN_POINT('',(2.325,-3.84099388778706,1.)); #17136=CARTESIAN_POINT('Origin',(2.325,-3.84099388778706,0.6)); #17137=CARTESIAN_POINT('',(2.775,-3.84099388778706,1.)); #17138=CARTESIAN_POINT('',(2.55,-3.84099388778706,1.)); #17139=CARTESIAN_POINT('Origin',(2.775,-3.84099388778706,0.6)); #17140=CARTESIAN_POINT('Origin',(2.55,-4.05,1.)); #17141=CARTESIAN_POINT('',(2.325,-4.05,1.)); #17142=CARTESIAN_POINT('',(2.775,-4.05,1.)); #17143=CARTESIAN_POINT('Origin',(2.55,-5.04866273088743,0.264868610655418)); #17144=CARTESIAN_POINT('',(2.325,-5.07656532038508,-0.134157009448511)); #17145=CARTESIAN_POINT('Origin',(2.325,-5.04866273088743,0.264868610655418)); #17146=CARTESIAN_POINT('',(2.775,-5.07656532038508,-0.134157009448511)); #17147=CARTESIAN_POINT('Origin',(2.775,-5.04866273088743,0.264868610655418)); #17148=CARTESIAN_POINT('',(2.55,-5.07656532038508,-0.134157009448511)); #17149=CARTESIAN_POINT('Origin',(2.325,-5.39099485797536,0.109600054558721)); #17150=CARTESIAN_POINT('',(2.325,-5.85,-0.0800731880564894)); #17151=CARTESIAN_POINT('',(2.325,-5.85,-0.0800731880564894)); #17152=CARTESIAN_POINT('',(2.325,-5.81512176312794,0.418708837073423)); #17153=CARTESIAN_POINT('',(2.325,-5.81512176312794,0.418708837073423)); #17154=CARTESIAN_POINT('',(2.325,-5.36067459409595,0.386930795346262)); #17155=CARTESIAN_POINT('',(2.325,-4.81512176312794,0.348782025129912)); #17156=CARTESIAN_POINT('',(2.325,-5.00440992388411,0.557530620170752)); #17157=CARTESIAN_POINT('Origin',(2.325,-5.3327720045983,0.785956415450192)); #17158=CARTESIAN_POINT('',(2.325,-4.34877905095941,1.5)); #17159=CARTESIAN_POINT('Origin',(2.55,-5.3327720045983,0.785956415450192)); #17160=CARTESIAN_POINT('',(2.775,-5.36067459409595,0.386930795346262)); #17161=CARTESIAN_POINT('',(2.55,-5.36067459409595,0.386930795346262)); #17162=CARTESIAN_POINT('',(2.775,-5.00440992388411,0.557530620170752)); #17163=CARTESIAN_POINT('Origin',(2.775,-5.3327720045983,0.785956415450192)); #17164=CARTESIAN_POINT('',(2.55,-5.00440992388411,0.557530620170752)); #17165=CARTESIAN_POINT('Origin',(2.55,-5.13410927371087,0.371087804794774)); #17166=CARTESIAN_POINT('',(2.775,-5.81512176312794,0.418708837073423)); #17167=CARTESIAN_POINT('',(2.55,-5.81512176312794,0.418708837073423)); #17168=CARTESIAN_POINT('',(2.775,-4.81512176312794,0.348782025129912)); #17169=CARTESIAN_POINT('Origin',(2.55,-4.13977293874648,1.1)); #17170=CARTESIAN_POINT('',(2.775,-4.46813501946067,1.32842579527944)); #17171=CARTESIAN_POINT('',(2.775,-4.13977293874648,1.5)); #17172=CARTESIAN_POINT('Origin',(2.775,-4.13977293874648,1.1)); #17173=CARTESIAN_POINT('',(2.325,-4.13977293874648,1.5)); #17174=CARTESIAN_POINT('',(2.55,-4.13977293874648,1.5)); #17175=CARTESIAN_POINT('',(2.325,-4.46813501946067,1.32842579527944)); #17176=CARTESIAN_POINT('Origin',(2.325,-4.13977293874648,1.1)); #17177=CARTESIAN_POINT('',(2.55,-4.46813501946067,1.32842579527944)); #17178=CARTESIAN_POINT('Origin',(2.55,-3.05,1.5)); #17179=CARTESIAN_POINT('',(2.775,-3.05,1.5)); #17180=CARTESIAN_POINT('',(2.325,-4.05,1.5)); #17181=CARTESIAN_POINT('Origin',(2.775,-5.39099485797536,0.109600054558721)); #17182=CARTESIAN_POINT('',(2.775,-4.34877905095941,1.5)); #17183=CARTESIAN_POINT('Origin',(2.55,-4.9881645366226,0.580883364359164)); #17184=CARTESIAN_POINT('',(2.775,-4.9881645366226,0.580883364359164)); #17185=CARTESIAN_POINT('',(2.775,-5.01342885636085,0.59845854330751)); #17186=CARTESIAN_POINT('',(2.9,-4.9881645366226,0.580883364359164)); #17187=CARTESIAN_POINT('',(2.9,-4.9881645366226,0.580883364359164)); #17188=CARTESIAN_POINT('',(2.55,-4.9881645366226,0.580883364359164)); #17189=CARTESIAN_POINT('Origin',(2.55,-4.17705644020449,0.817356367206042)); #17190=CARTESIAN_POINT('',(2.325,-4.6127941700867,1.12047826625453)); #17191=CARTESIAN_POINT('',(2.325,-4.42018962488384,0.986492495678632)); #17192=CARTESIAN_POINT('',(2.2,-4.6127941700867,1.12047826625453)); #17193=CARTESIAN_POINT('',(2.2,-4.17705644020449,0.817356367206042)); #17194=CARTESIAN_POINT('',(2.55,-4.6127941700867,1.12047826625453)); #17195=CARTESIAN_POINT('Origin',(2.2,-4.58261048841355,0.699119865782603)); #17196=CARTESIAN_POINT('',(2.2,-4.6127941700867,1.12047826625453)); #17197=CARTESIAN_POINT('Origin',(2.9,-4.58261048841355,0.699119865782603)); #17198=CARTESIAN_POINT('',(2.9,-4.6127941700867,1.12047826625453)); #17199=CARTESIAN_POINT('Origin',(2.325,-5.39099485797536,0.109600054558721)); #17200=CARTESIAN_POINT('',(2.325,-4.34877905095941,1.5)); #17201=CARTESIAN_POINT('Origin',(2.55,-4.34877905095941,1.5)); #17202=CARTESIAN_POINT('',(2.775,-4.34877905095941,1.5)); #17203=CARTESIAN_POINT('Origin',(2.55,-5.85,-0.0800731880564894)); #17204=CARTESIAN_POINT('',(2.775,-5.85,-0.0800731880564894)); #17205=CARTESIAN_POINT('',(2.775,-5.85,-0.0800731880564894)); #17206=CARTESIAN_POINT('',(2.55,-5.85,-0.0800731880564894)); #17207=CARTESIAN_POINT('Origin',(2.55,-5.81512176312794,0.418708837073423)); #17208=CARTESIAN_POINT('',(2.775,-5.81512176312794,0.418708837073423)); #17209=CARTESIAN_POINT('Origin',(2.775,-5.39099485797536,0.109600054558721)); #17210=CARTESIAN_POINT('Origin',(1.925,-5.39099485797536,0.109600054558721)); #17211=CARTESIAN_POINT('',(1.925,-4.72030065017323,0.0364428153759782)); #17212=CARTESIAN_POINT('',(1.925,-5.07656532038508,-0.134157009448511)); #17213=CARTESIAN_POINT('Origin',(1.925,-5.04866273088743,0.264868610655418)); #17214=CARTESIAN_POINT('',(1.925,-4.5524268067404,0.277761465310675)); #17215=CARTESIAN_POINT('',(1.925,-4.85,-0.15)); #17216=CARTESIAN_POINT('',(1.925,-4.9881645366226,0.580883364359164)); #17217=CARTESIAN_POINT('',(1.925,-5.01342885636085,0.59845854330751)); #17218=CARTESIAN_POINT('',(1.925,-5.00440992388411,0.557530620170752)); #17219=CARTESIAN_POINT('',(1.925,-4.34877905095941,1.5)); #17220=CARTESIAN_POINT('',(1.925,-5.36067459409595,0.386930795346262)); #17221=CARTESIAN_POINT('Origin',(1.925,-5.3327720045983,0.785956415450192)); #17222=CARTESIAN_POINT('',(1.925,-5.81512176312794,0.418708837073423)); #17223=CARTESIAN_POINT('',(1.925,-4.81512176312794,0.348782025129912)); #17224=CARTESIAN_POINT('',(1.925,-5.85,-0.0800731880564894)); #17225=CARTESIAN_POINT('',(1.925,-5.81512176312794,0.418708837073423)); #17226=CARTESIAN_POINT('',(1.925,-5.85,-0.0800731880564894)); #17227=CARTESIAN_POINT('Origin',(1.7,-5.81512176312794,0.418708837073423)); #17228=CARTESIAN_POINT('',(1.475,-5.85,-0.0800731880564894)); #17229=CARTESIAN_POINT('',(1.7,-5.85,-0.0800731880564894)); #17230=CARTESIAN_POINT('',(1.475,-5.81512176312794,0.418708837073423)); #17231=CARTESIAN_POINT('',(1.7,-5.81512176312794,0.418708837073423)); #17232=CARTESIAN_POINT('',(1.475,-5.81512176312794,0.418708837073423)); #17233=CARTESIAN_POINT('Origin',(1.7,-5.85,-0.0800731880564894)); #17234=CARTESIAN_POINT('',(1.475,-5.07656532038508,-0.134157009448511)); #17235=CARTESIAN_POINT('',(1.7,-5.07656532038508,-0.134157009448511)); #17236=CARTESIAN_POINT('',(1.475,-5.85,-0.0800731880564894)); #17237=CARTESIAN_POINT('Origin',(1.7,-4.34877905095941,1.5)); #17238=CARTESIAN_POINT('',(1.475,-5.00440992388411,0.557530620170752)); #17239=CARTESIAN_POINT('',(1.7,-5.00440992388411,0.557530620170752)); #17240=CARTESIAN_POINT('',(2.05,-4.9881645366226,0.580883364359164)); #17241=CARTESIAN_POINT('',(1.7,-4.9881645366226,0.580883364359164)); #17242=CARTESIAN_POINT('',(2.05,-4.6127941700867,1.12047826625453)); #17243=CARTESIAN_POINT('',(2.05,-4.6127941700867,1.12047826625453)); #17244=CARTESIAN_POINT('',(1.925,-4.6127941700867,1.12047826625453)); #17245=CARTESIAN_POINT('',(1.7,-4.6127941700867,1.12047826625453)); #17246=CARTESIAN_POINT('',(1.925,-4.46813501946067,1.32842579527944)); #17247=CARTESIAN_POINT('',(1.925,-4.34877905095941,1.5)); #17248=CARTESIAN_POINT('',(1.475,-4.46813501946067,1.32842579527944)); #17249=CARTESIAN_POINT('',(1.7,-4.46813501946067,1.32842579527944)); #17250=CARTESIAN_POINT('',(1.475,-4.6127941700867,1.12047826625453)); #17251=CARTESIAN_POINT('',(1.475,-4.34877905095941,1.5)); #17252=CARTESIAN_POINT('',(1.35,-4.6127941700867,1.12047826625453)); #17253=CARTESIAN_POINT('',(1.7,-4.6127941700867,1.12047826625453)); #17254=CARTESIAN_POINT('',(1.35,-4.9881645366226,0.580883364359164)); #17255=CARTESIAN_POINT('',(1.35,-4.6127941700867,1.12047826625453)); #17256=CARTESIAN_POINT('',(1.475,-4.9881645366226,0.580883364359164)); #17257=CARTESIAN_POINT('',(1.7,-4.9881645366226,0.580883364359164)); #17258=CARTESIAN_POINT('',(1.475,-4.34877905095941,1.5)); #17259=CARTESIAN_POINT('Origin',(1.475,-5.39099485797536,0.109600054558721)); #17260=CARTESIAN_POINT('',(1.475,-4.13977293874648,1.5)); #17261=CARTESIAN_POINT('Origin',(1.475,-4.13977293874648,1.1)); #17262=CARTESIAN_POINT('',(1.475,-3.05,1.5)); #17263=CARTESIAN_POINT('',(1.475,-4.05,1.5)); #17264=CARTESIAN_POINT('',(1.475,-3.05,1.)); #17265=CARTESIAN_POINT('',(1.475,-3.05,0.0548000272793604)); #17266=CARTESIAN_POINT('',(1.475,-3.84099388778706,1.)); #17267=CARTESIAN_POINT('',(1.475,-4.05,1.)); #17268=CARTESIAN_POINT('',(1.475,-4.16935596850126,0.82842579527944)); #17269=CARTESIAN_POINT('Origin',(1.475,-3.84099388778706,0.6)); #17270=CARTESIAN_POINT('',(1.475,-4.17705644020449,0.817356367206042)); #17271=CARTESIAN_POINT('',(1.475,-4.85,-0.15)); #17272=CARTESIAN_POINT('',(1.475,-4.42018962488384,0.986492495678632)); #17273=CARTESIAN_POINT('Origin',(2.05,-4.58261048841355,0.699119865782603)); #17274=CARTESIAN_POINT('',(2.05,-4.5524268067404,0.277761465310675)); #17275=CARTESIAN_POINT('',(2.05,-4.9881645366226,0.580883364359164)); #17276=CARTESIAN_POINT('',(2.05,-4.17705644020449,0.817356367206042)); #17277=CARTESIAN_POINT('',(2.05,-4.5524268067404,0.277761465310675)); #17278=CARTESIAN_POINT('',(2.05,-4.17705644020449,0.817356367206042)); #17279=CARTESIAN_POINT('Origin',(1.7,-4.9881645366226,0.580883364359164)); #17280=CARTESIAN_POINT('',(1.475,-4.5524268067404,0.277761465310675)); #17281=CARTESIAN_POINT('',(1.475,-5.01342885636085,0.59845854330751)); #17282=CARTESIAN_POINT('',(1.35,-4.5524268067404,0.277761465310675)); #17283=CARTESIAN_POINT('',(1.35,-4.9881645366226,0.580883364359164)); #17284=CARTESIAN_POINT('',(1.7,-4.5524268067404,0.277761465310675)); #17285=CARTESIAN_POINT('Origin',(1.35,-4.58261048841355,0.699119865782603)); #17286=CARTESIAN_POINT('',(1.35,-4.17705644020449,0.817356367206042)); #17287=CARTESIAN_POINT('',(1.35,-4.17705644020449,0.817356367206042)); #17288=CARTESIAN_POINT('',(1.35,-4.5524268067404,0.277761465310675)); #17289=CARTESIAN_POINT('Origin',(1.7,-4.17705644020449,0.817356367206042)); #17290=CARTESIAN_POINT('',(1.7,-4.17705644020449,0.817356367206042)); #17291=CARTESIAN_POINT('Origin',(1.7,-4.17705644020449,0.817356367206042)); #17292=CARTESIAN_POINT('',(1.925,-4.17705644020449,0.817356367206042)); #17293=CARTESIAN_POINT('',(1.925,-4.42018962488384,0.986492495678632)); #17294=CARTESIAN_POINT('',(1.7,-4.17705644020449,0.817356367206042)); #17295=CARTESIAN_POINT('Origin',(1.7,-4.9881645366226,0.580883364359164)); #17296=CARTESIAN_POINT('',(1.7,-4.5524268067404,0.277761465310675)); #17297=CARTESIAN_POINT('Origin',(1.925,-5.39099485797536,0.109600054558721)); #17298=CARTESIAN_POINT('',(1.925,-4.13977293874648,1.5)); #17299=CARTESIAN_POINT('Origin',(1.925,-4.13977293874648,1.1)); #17300=CARTESIAN_POINT('',(1.925,-4.16935596850126,0.82842579527944)); #17301=CARTESIAN_POINT('',(1.925,-4.85,-0.15)); #17302=CARTESIAN_POINT('',(1.925,-3.84099388778706,1.)); #17303=CARTESIAN_POINT('Origin',(1.925,-3.84099388778706,0.6)); #17304=CARTESIAN_POINT('',(1.925,-3.05,1.)); #17305=CARTESIAN_POINT('',(1.925,-4.05,1.)); #17306=CARTESIAN_POINT('',(1.925,-3.05,1.5)); #17307=CARTESIAN_POINT('',(1.925,-3.05,0.0548000272793604)); #17308=CARTESIAN_POINT('',(1.925,-3.05,1.5)); #17309=CARTESIAN_POINT('Origin',(1.7,-3.05,1.5)); #17310=CARTESIAN_POINT('',(1.7,-4.13977293874648,1.5)); #17311=CARTESIAN_POINT('',(-0.775,-3.05,1.5)); #17312=CARTESIAN_POINT('Origin',(1.7,-4.13977293874648,1.1)); #17313=CARTESIAN_POINT('Origin',(1.7,-5.13410927371087,0.371087804794774)); #17314=CARTESIAN_POINT('',(1.475,-5.36067459409595,0.386930795346262)); #17315=CARTESIAN_POINT('',(1.7,-5.36067459409595,0.386930795346262)); #17316=CARTESIAN_POINT('',(1.475,-4.81512176312794,0.348782025129912)); #17317=CARTESIAN_POINT('Origin',(1.7,-5.3327720045983,0.785956415450192)); #17318=CARTESIAN_POINT('Origin',(1.475,-5.3327720045983,0.785956415450192)); #17319=CARTESIAN_POINT('Origin',(1.475,-5.39099485797536,0.109600054558721)); #17320=CARTESIAN_POINT('',(1.475,-4.72030065017323,0.0364428153759782)); #17321=CARTESIAN_POINT('Origin',(1.475,-5.04866273088743,0.264868610655418)); #17322=CARTESIAN_POINT('',(1.475,-4.85,-0.15)); #17323=CARTESIAN_POINT('Origin',(1.7,-4.85,-0.15)); #17324=CARTESIAN_POINT('',(1.7,-4.16935596850126,0.82842579527944)); #17325=CARTESIAN_POINT('',(1.7,-4.72030065017323,0.0364428153759782)); #17326=CARTESIAN_POINT('Origin',(1.7,-5.04866273088743,0.264868610655418)); #17327=CARTESIAN_POINT('Origin',(1.7,-4.05,1.)); #17328=CARTESIAN_POINT('',(1.7,-3.84099388778706,1.)); #17329=CARTESIAN_POINT('',(-0.775,-3.05,1.)); #17330=CARTESIAN_POINT('Origin',(1.7,-3.84099388778706,0.6)); #17331=CARTESIAN_POINT('Origin',(3.52122937758704,-3.05,2.4)); #17332=CARTESIAN_POINT('Origin',(3.52122937758704,-3.05,2.4)); #17333=CARTESIAN_POINT('',(0.625,-3.05,1.)); #17334=CARTESIAN_POINT('',(0.625,-3.05,1.5)); #17335=CARTESIAN_POINT('',(0.625,-3.05,0.0548000272793604)); #17336=CARTESIAN_POINT('',(1.075,-3.05,1.5)); #17337=CARTESIAN_POINT('',(-1.2,-3.05,1.5)); #17338=CARTESIAN_POINT('',(1.075,-3.05,1.)); #17339=CARTESIAN_POINT('',(1.075,-3.05,0.0548000272793604)); #17340=CARTESIAN_POINT('',(-1.2,-3.05,1.)); #17341=CARTESIAN_POINT('Origin',(0.85,-3.84099388778706,0.6)); #17342=CARTESIAN_POINT('',(0.625,-4.16935596850126,0.82842579527944)); #17343=CARTESIAN_POINT('',(0.625,-3.84099388778706,1.)); #17344=CARTESIAN_POINT('Origin',(0.625,-3.84099388778706,0.6)); #17345=CARTESIAN_POINT('',(1.075,-3.84099388778706,1.)); #17346=CARTESIAN_POINT('',(0.85,-3.84099388778706,1.)); #17347=CARTESIAN_POINT('',(1.075,-4.16935596850126,0.82842579527944)); #17348=CARTESIAN_POINT('Origin',(1.075,-3.84099388778706,0.6)); #17349=CARTESIAN_POINT('',(0.85,-4.16935596850126,0.82842579527944)); #17350=CARTESIAN_POINT('Origin',(0.85,-4.05,1.)); #17351=CARTESIAN_POINT('',(0.625,-4.05,1.)); #17352=CARTESIAN_POINT('',(1.075,-4.05,1.)); #17353=CARTESIAN_POINT('Origin',(0.85,-5.04866273088743,0.264868610655418)); #17354=CARTESIAN_POINT('',(0.625,-5.07656532038508,-0.134157009448511)); #17355=CARTESIAN_POINT('',(0.625,-4.72030065017323,0.0364428153759782)); #17356=CARTESIAN_POINT('Origin',(0.625,-5.04866273088743,0.264868610655418)); #17357=CARTESIAN_POINT('',(1.075,-4.72030065017323,0.0364428153759782)); #17358=CARTESIAN_POINT('',(0.85,-4.72030065017323,0.0364428153759782)); #17359=CARTESIAN_POINT('',(1.075,-5.07656532038508,-0.134157009448511)); #17360=CARTESIAN_POINT('Origin',(1.075,-5.04866273088743,0.264868610655418)); #17361=CARTESIAN_POINT('',(0.85,-5.07656532038508,-0.134157009448511)); #17362=CARTESIAN_POINT('Origin',(0.85,-4.85,-0.15)); #17363=CARTESIAN_POINT('',(1.075,-4.17705644020449,0.817356367206042)); #17364=CARTESIAN_POINT('',(1.075,-4.85,-0.15)); #17365=CARTESIAN_POINT('',(1.2,-4.17705644020449,0.817356367206042)); #17366=CARTESIAN_POINT('',(0.85,-4.17705644020449,0.817356367206042)); #17367=CARTESIAN_POINT('',(1.2,-4.5524268067404,0.277761465310675)); #17368=CARTESIAN_POINT('',(1.2,-4.5524268067404,0.277761465310675)); #17369=CARTESIAN_POINT('',(1.075,-4.5524268067404,0.277761465310675)); #17370=CARTESIAN_POINT('',(0.85,-4.5524268067404,0.277761465310675)); #17371=CARTESIAN_POINT('',(1.075,-4.85,-0.15)); #17372=CARTESIAN_POINT('',(0.625,-4.5524268067404,0.277761465310675)); #17373=CARTESIAN_POINT('',(0.625,-4.85,-0.15)); #17374=CARTESIAN_POINT('',(0.5,-4.5524268067404,0.277761465310675)); #17375=CARTESIAN_POINT('',(0.85,-4.5524268067404,0.277761465310675)); #17376=CARTESIAN_POINT('',(0.5,-4.17705644020449,0.817356367206042)); #17377=CARTESIAN_POINT('',(0.5,-4.5524268067404,0.277761465310675)); #17378=CARTESIAN_POINT('',(0.625,-4.17705644020449,0.817356367206042)); #17379=CARTESIAN_POINT('',(0.85,-4.17705644020449,0.817356367206042)); #17380=CARTESIAN_POINT('',(0.625,-4.85,-0.15)); #17381=CARTESIAN_POINT('Origin',(0.625,-5.39099485797536,0.109600054558721)); #17382=CARTESIAN_POINT('',(0.625,-5.85,-0.0800731880564894)); #17383=CARTESIAN_POINT('',(0.625,-5.85,-0.0800731880564894)); #17384=CARTESIAN_POINT('',(0.625,-5.81512176312794,0.418708837073423)); #17385=CARTESIAN_POINT('',(0.625,-5.81512176312794,0.418708837073423)); #17386=CARTESIAN_POINT('',(0.625,-5.36067459409595,0.386930795346262)); #17387=CARTESIAN_POINT('',(0.625,-4.81512176312794,0.348782025129912)); #17388=CARTESIAN_POINT('',(0.625,-5.00440992388411,0.557530620170752)); #17389=CARTESIAN_POINT('Origin',(0.625,-5.3327720045983,0.785956415450192)); #17390=CARTESIAN_POINT('',(0.625,-4.9881645366226,0.580883364359164)); #17391=CARTESIAN_POINT('',(0.625,-4.34877905095941,1.5)); #17392=CARTESIAN_POINT('',(0.625,-5.01342885636085,0.59845854330751)); #17393=CARTESIAN_POINT('Origin',(0.85,-5.3327720045983,0.785956415450192)); #17394=CARTESIAN_POINT('',(1.075,-5.36067459409595,0.386930795346262)); #17395=CARTESIAN_POINT('',(0.85,-5.36067459409595,0.386930795346262)); #17396=CARTESIAN_POINT('',(1.075,-5.00440992388411,0.557530620170752)); #17397=CARTESIAN_POINT('Origin',(1.075,-5.3327720045983,0.785956415450192)); #17398=CARTESIAN_POINT('',(0.85,-5.00440992388411,0.557530620170752)); #17399=CARTESIAN_POINT('Origin',(0.85,-5.13410927371087,0.371087804794774)); #17400=CARTESIAN_POINT('',(1.075,-5.81512176312794,0.418708837073423)); #17401=CARTESIAN_POINT('',(0.85,-5.81512176312794,0.418708837073423)); #17402=CARTESIAN_POINT('',(1.075,-4.81512176312794,0.348782025129912)); #17403=CARTESIAN_POINT('Origin',(0.85,-4.13977293874648,1.1)); #17404=CARTESIAN_POINT('',(1.075,-4.46813501946067,1.32842579527944)); #17405=CARTESIAN_POINT('',(1.075,-4.13977293874648,1.5)); #17406=CARTESIAN_POINT('Origin',(1.075,-4.13977293874648,1.1)); #17407=CARTESIAN_POINT('',(0.625,-4.13977293874648,1.5)); #17408=CARTESIAN_POINT('',(0.85,-4.13977293874648,1.5)); #17409=CARTESIAN_POINT('',(0.625,-4.46813501946067,1.32842579527944)); #17410=CARTESIAN_POINT('Origin',(0.625,-4.13977293874648,1.1)); #17411=CARTESIAN_POINT('',(0.85,-4.46813501946067,1.32842579527944)); #17412=CARTESIAN_POINT('Origin',(0.85,-3.05,1.5)); #17413=CARTESIAN_POINT('',(1.075,-3.05,1.5)); #17414=CARTESIAN_POINT('',(0.625,-4.05,1.5)); #17415=CARTESIAN_POINT('Origin',(1.075,-5.39099485797536,0.109600054558721)); #17416=CARTESIAN_POINT('',(1.075,-4.6127941700867,1.12047826625453)); #17417=CARTESIAN_POINT('',(1.075,-4.34877905095941,1.5)); #17418=CARTESIAN_POINT('',(1.075,-4.42018962488384,0.986492495678632)); #17419=CARTESIAN_POINT('Origin',(0.85,-4.9881645366226,0.580883364359164)); #17420=CARTESIAN_POINT('',(1.075,-4.9881645366226,0.580883364359164)); #17421=CARTESIAN_POINT('',(1.075,-5.01342885636085,0.59845854330751)); #17422=CARTESIAN_POINT('',(1.2,-4.9881645366226,0.580883364359164)); #17423=CARTESIAN_POINT('',(1.2,-4.9881645366226,0.580883364359164)); #17424=CARTESIAN_POINT('',(0.85,-4.9881645366226,0.580883364359164)); #17425=CARTESIAN_POINT('Origin',(0.85,-4.17705644020449,0.817356367206042)); #17426=CARTESIAN_POINT('',(1.2,-4.6127941700867,1.12047826625453)); #17427=CARTESIAN_POINT('',(0.85,-4.6127941700867,1.12047826625453)); #17428=CARTESIAN_POINT('',(1.2,-4.17705644020449,0.817356367206042)); #17429=CARTESIAN_POINT('Origin',(0.85,-4.17705644020449,0.817356367206042)); #17430=CARTESIAN_POINT('',(0.625,-4.6127941700867,1.12047826625453)); #17431=CARTESIAN_POINT('',(0.625,-4.42018962488384,0.986492495678632)); #17432=CARTESIAN_POINT('',(0.5,-4.6127941700867,1.12047826625453)); #17433=CARTESIAN_POINT('',(0.5,-4.17705644020449,0.817356367206042)); #17434=CARTESIAN_POINT('',(0.85,-4.6127941700867,1.12047826625453)); #17435=CARTESIAN_POINT('Origin',(0.5,-4.58261048841355,0.699119865782603)); #17436=CARTESIAN_POINT('',(0.5,-4.9881645366226,0.580883364359164)); #17437=CARTESIAN_POINT('',(0.5,-4.9881645366226,0.580883364359164)); #17438=CARTESIAN_POINT('',(0.5,-4.6127941700867,1.12047826625453)); #17439=CARTESIAN_POINT('Origin',(0.85,-4.9881645366226,0.580883364359164)); #17440=CARTESIAN_POINT('',(0.85,-4.9881645366226,0.580883364359164)); #17441=CARTESIAN_POINT('Origin',(1.2,-4.58261048841355,0.699119865782603)); #17442=CARTESIAN_POINT('',(1.2,-4.6127941700867,1.12047826625453)); #17443=CARTESIAN_POINT('Origin',(0.625,-5.39099485797536,0.109600054558721)); #17444=CARTESIAN_POINT('',(0.625,-4.34877905095941,1.5)); #17445=CARTESIAN_POINT('Origin',(0.85,-4.34877905095941,1.5)); #17446=CARTESIAN_POINT('',(1.075,-4.34877905095941,1.5)); #17447=CARTESIAN_POINT('Origin',(0.85,-5.85,-0.0800731880564894)); #17448=CARTESIAN_POINT('',(1.075,-5.85,-0.0800731880564894)); #17449=CARTESIAN_POINT('',(1.075,-5.85,-0.0800731880564894)); #17450=CARTESIAN_POINT('',(0.85,-5.85,-0.0800731880564894)); #17451=CARTESIAN_POINT('Origin',(0.85,-5.81512176312794,0.418708837073423)); #17452=CARTESIAN_POINT('',(1.075,-5.81512176312794,0.418708837073423)); #17453=CARTESIAN_POINT('Origin',(1.075,-5.39099485797536,0.109600054558721)); #17454=CARTESIAN_POINT('Origin',(-2.325,-5.39099485797536,0.109600054558721)); #17455=CARTESIAN_POINT('',(-2.325,-4.72030065017323,0.0364428153759782)); #17456=CARTESIAN_POINT('',(-2.325,-5.07656532038508,-0.134157009448511)); #17457=CARTESIAN_POINT('Origin',(-2.325,-5.04866273088743,0.264868610655418)); #17458=CARTESIAN_POINT('',(-2.325,-4.48104374571558,0.380374615533861)); #17459=CARTESIAN_POINT('',(-2.325,-4.85,-0.15)); #17460=CARTESIAN_POINT('',(-2.325,-4.91678147559778,0.68349651458235)); #17461=CARTESIAN_POINT('',(-2.325,-4.91678147559778,0.68349651458235)); #17462=CARTESIAN_POINT('',(-2.325,-5.00440992388411,0.557530620170752)); #17463=CARTESIAN_POINT('',(-2.325,-4.34877905095941,1.5)); #17464=CARTESIAN_POINT('',(-2.325,-5.36067459409595,0.386930795346262)); #17465=CARTESIAN_POINT('Origin',(-2.325,-5.3327720045983,0.785956415450192)); #17466=CARTESIAN_POINT('',(-2.325,-5.81512176312794,0.418708837073423)); #17467=CARTESIAN_POINT('',(-2.325,-4.81512176312794,0.348782025129912)); #17468=CARTESIAN_POINT('',(-2.325,-5.85,-0.0800731880564894)); #17469=CARTESIAN_POINT('',(-2.325,-5.81512176312794,0.418708837073423)); #17470=CARTESIAN_POINT('',(-2.325,-5.85,-0.0800731880564894)); #17471=CARTESIAN_POINT('Origin',(-2.55,-5.81512176312794,0.418708837073423)); #17472=CARTESIAN_POINT('',(-2.775,-5.85,-0.0800731880564894)); #17473=CARTESIAN_POINT('',(-2.55,-5.85,-0.0800731880564894)); #17474=CARTESIAN_POINT('',(-2.775,-5.81512176312794,0.418708837073423)); #17475=CARTESIAN_POINT('',(-2.55,-5.81512176312794,0.418708837073423)); #17476=CARTESIAN_POINT('',(-2.775,-5.81512176312794,0.418708837073423)); #17477=CARTESIAN_POINT('Origin',(-2.55,-5.85,-0.0800731880564894)); #17478=CARTESIAN_POINT('',(-2.775,-5.07656532038508,-0.134157009448511)); #17479=CARTESIAN_POINT('',(-2.55,-5.07656532038508,-0.134157009448511)); #17480=CARTESIAN_POINT('',(-2.775,-5.85,-0.0800731880564894)); #17481=CARTESIAN_POINT('Origin',(-2.55,-4.34877905095941,1.5)); #17482=CARTESIAN_POINT('',(-2.775,-4.68417723111152,1.01786511603135)); #17483=CARTESIAN_POINT('',(-2.9,-4.68417723111152,1.01786511603135)); #17484=CARTESIAN_POINT('',(-2.725,-4.68417723111152,1.01786511603135)); #17485=CARTESIAN_POINT('',(-2.9,-4.9881645366226,0.580883364359164)); #17486=CARTESIAN_POINT('',(-2.9,-4.6127941700867,1.12047826625453)); #17487=CARTESIAN_POINT('',(-2.775,-4.9881645366226,0.580883364359164)); #17488=CARTESIAN_POINT('',(-2.55,-4.9881645366226,0.580883364359164)); #17489=CARTESIAN_POINT('',(-2.775,-5.00440992388411,0.557530620170752)); #17490=CARTESIAN_POINT('',(-2.775,-4.34877905095941,1.5)); #17491=CARTESIAN_POINT('',(-2.55,-5.00440992388411,0.557530620170752)); #17492=CARTESIAN_POINT('',(-2.2,-4.91678147559778,0.68349651458235)); #17493=CARTESIAN_POINT('',(-2.375,-4.91678147559778,0.68349651458235)); #17494=CARTESIAN_POINT('',(-2.2,-4.6127941700867,1.12047826625453)); #17495=CARTESIAN_POINT('',(-2.2,-4.6127941700867,1.12047826625453)); #17496=CARTESIAN_POINT('',(-2.325,-4.6127941700867,1.12047826625453)); #17497=CARTESIAN_POINT('',(-2.55,-4.6127941700867,1.12047826625453)); #17498=CARTESIAN_POINT('',(-2.325,-4.46813501946067,1.32842579527944)); #17499=CARTESIAN_POINT('',(-2.325,-4.34877905095941,1.5)); #17500=CARTESIAN_POINT('',(-2.775,-4.46813501946067,1.32842579527944)); #17501=CARTESIAN_POINT('',(-2.55,-4.46813501946067,1.32842579527944)); #17502=CARTESIAN_POINT('',(-2.775,-4.34877905095941,1.5)); #17503=CARTESIAN_POINT('Origin',(-2.775,-5.39099485797536,0.109600054558721)); #17504=CARTESIAN_POINT('',(-2.775,-4.13977293874648,1.5)); #17505=CARTESIAN_POINT('Origin',(-2.775,-4.13977293874648,1.1)); #17506=CARTESIAN_POINT('',(-2.775,-3.05,1.5)); #17507=CARTESIAN_POINT('',(-2.775,-4.05,1.5)); #17508=CARTESIAN_POINT('',(-2.775,-3.05,1.)); #17509=CARTESIAN_POINT('',(-2.775,-3.05,0.0548000272793604)); #17510=CARTESIAN_POINT('',(-2.775,-3.84099388778706,1.)); #17511=CARTESIAN_POINT('',(-2.775,-4.05,1.)); #17512=CARTESIAN_POINT('',(-2.775,-4.16935596850126,0.82842579527944)); #17513=CARTESIAN_POINT('Origin',(-2.775,-3.84099388778706,0.6)); #17514=CARTESIAN_POINT('',(-2.775,-4.24843950122932,0.714743216982856)); #17515=CARTESIAN_POINT('',(-2.775,-4.85,-0.15)); #17516=CARTESIAN_POINT('',(-2.775,-4.68417723111152,1.01786511603135)); #17517=CARTESIAN_POINT('Origin',(-2.55,-4.9881645366226,0.580883364359164)); #17518=CARTESIAN_POINT('',(-2.775,-4.5524268067404,0.277761465310675)); #17519=CARTESIAN_POINT('',(-2.775,-5.01342885636085,0.59845854330751)); #17520=CARTESIAN_POINT('',(-2.9,-4.5524268067404,0.277761465310675)); #17521=CARTESIAN_POINT('',(-2.9,-4.9881645366226,0.580883364359164)); #17522=CARTESIAN_POINT('',(-2.55,-4.5524268067404,0.277761465310675)); #17523=CARTESIAN_POINT('Origin',(-2.55,-4.17705644020449,0.817356367206042)); #17524=CARTESIAN_POINT('',(-2.325,-4.17705644020449,0.817356367206042)); #17525=CARTESIAN_POINT('',(-2.325,-4.42018962488384,0.986492495678632)); #17526=CARTESIAN_POINT('',(-2.2,-4.17705644020449,0.817356367206042)); #17527=CARTESIAN_POINT('',(-2.2,-4.17705644020449,0.817356367206042)); #17528=CARTESIAN_POINT('',(-2.55,-4.17705644020449,0.817356367206042)); #17529=CARTESIAN_POINT('Origin',(-2.325,-5.39099485797536,0.109600054558721)); #17530=CARTESIAN_POINT('',(-2.325,-4.13977293874648,1.5)); #17531=CARTESIAN_POINT('Origin',(-2.325,-4.13977293874648,1.1)); #17532=CARTESIAN_POINT('',(-2.325,-4.16935596850126,0.82842579527944)); #17533=CARTESIAN_POINT('',(-2.325,-4.85,-0.15)); #17534=CARTESIAN_POINT('',(-2.325,-3.84099388778706,1.)); #17535=CARTESIAN_POINT('Origin',(-2.325,-3.84099388778706,0.6)); #17536=CARTESIAN_POINT('',(-2.325,-3.05,1.)); #17537=CARTESIAN_POINT('',(-2.325,-4.05,1.)); #17538=CARTESIAN_POINT('',(-2.325,-3.05,1.5)); #17539=CARTESIAN_POINT('',(-2.325,-3.05,0.0548000272793604)); #17540=CARTESIAN_POINT('',(-2.325,-3.05,1.5)); #17541=CARTESIAN_POINT('Origin',(-2.55,-3.05,1.5)); #17542=CARTESIAN_POINT('',(-2.55,-4.13977293874648,1.5)); #17543=CARTESIAN_POINT('',(-2.9,-3.05,1.5)); #17544=CARTESIAN_POINT('Origin',(-2.55,-4.13977293874648,1.1)); #17545=CARTESIAN_POINT('Origin',(-2.55,-5.13410927371087,0.371087804794774)); #17546=CARTESIAN_POINT('',(-2.775,-5.36067459409595,0.386930795346262)); #17547=CARTESIAN_POINT('',(-2.55,-5.36067459409595,0.386930795346262)); #17548=CARTESIAN_POINT('',(-2.775,-4.81512176312794,0.348782025129912)); #17549=CARTESIAN_POINT('Origin',(-2.55,-5.3327720045983,0.785956415450192)); #17550=CARTESIAN_POINT('Origin',(-2.775,-5.3327720045983,0.785956415450192)); #17551=CARTESIAN_POINT('Origin',(-2.775,-5.39099485797536,0.109600054558721)); #17552=CARTESIAN_POINT('',(-2.775,-4.72030065017323,0.0364428153759782)); #17553=CARTESIAN_POINT('Origin',(-2.775,-5.04866273088743,0.264868610655418)); #17554=CARTESIAN_POINT('',(-2.775,-4.85,-0.15)); #17555=CARTESIAN_POINT('Origin',(-2.55,-5.04866273088743,0.264868610655418)); #17556=CARTESIAN_POINT('',(-2.55,-4.72030065017323,0.0364428153759782)); #17557=CARTESIAN_POINT('Origin',(-2.55,-4.05,1.)); #17558=CARTESIAN_POINT('',(-2.55,-3.84099388778706,1.)); #17559=CARTESIAN_POINT('',(-2.9,-3.05,1.)); #17560=CARTESIAN_POINT('Origin',(-2.55,-3.84099388778706,0.6)); #17561=CARTESIAN_POINT('',(-2.55,-4.16935596850126,0.82842579527944)); #17562=CARTESIAN_POINT('Origin',(-2.55,-4.85,-0.15)); #17563=CARTESIAN_POINT('',(-2.9,-4.24843950122932,0.714743216982856)); #17564=CARTESIAN_POINT('',(-2.725,-4.24843950122932,0.714743216982856)); #17565=CARTESIAN_POINT('',(-2.2,-4.48104374571558,0.380374615533861)); #17566=CARTESIAN_POINT('',(-2.2,-4.5524268067404,0.277761465310675)); #17567=CARTESIAN_POINT('',(-2.375,-4.48104374571558,0.380374615533861)); #17568=CARTESIAN_POINT('',(-2.9,-4.5524268067404,0.277761465310675)); #17569=CARTESIAN_POINT('Origin',(-2.2,-4.58261048841355,0.699119865782603)); #17570=CARTESIAN_POINT('',(-2.2,-4.80784704312723,0.607716039820227)); #17571=CARTESIAN_POINT('Origin',(-2.9,-4.58261048841355,0.699119865782603)); #17572=CARTESIAN_POINT('',(-2.9,-4.57524279864097,0.942084641269223)); #17573=CARTESIAN_POINT('Origin',(-2.2,-4.91678147559778,0.68349651458235)); #17574=CARTESIAN_POINT('Origin',(-2.9,-4.68417723111152,1.01786511603135)); #17575=CARTESIAN_POINT('Origin',(3.52122937758704,-3.05,2.4)); #17576=CARTESIAN_POINT('Origin',(3.52122937758704,-3.05,2.4)); #17577=CARTESIAN_POINT('',(-1.075,-3.05,1.)); #17578=CARTESIAN_POINT('',(-1.075,-3.05,1.5)); #17579=CARTESIAN_POINT('',(-1.075,-3.05,0.0548000272793604)); #17580=CARTESIAN_POINT('',(-0.625,-3.05,1.5)); #17581=CARTESIAN_POINT('',(-2.05,-3.05,1.5)); #17582=CARTESIAN_POINT('',(-0.625,-3.05,1.)); #17583=CARTESIAN_POINT('',(-0.625000000000001,-3.05,0.0548000272793604)); #17584=CARTESIAN_POINT('',(-2.05,-3.05,1.)); #17585=CARTESIAN_POINT('Origin',(-0.85,-3.84099388778706,0.6)); #17586=CARTESIAN_POINT('',(-1.075,-4.16935596850126,0.82842579527944)); #17587=CARTESIAN_POINT('',(-1.075,-3.84099388778706,1.)); #17588=CARTESIAN_POINT('Origin',(-1.075,-3.84099388778706,0.6)); #17589=CARTESIAN_POINT('',(-0.625,-3.84099388778706,1.)); #17590=CARTESIAN_POINT('',(-0.85,-3.84099388778706,1.)); #17591=CARTESIAN_POINT('',(-0.625,-4.16935596850126,0.82842579527944)); #17592=CARTESIAN_POINT('Origin',(-0.625,-3.84099388778706,0.6)); #17593=CARTESIAN_POINT('',(-0.85,-4.16935596850126,0.82842579527944)); #17594=CARTESIAN_POINT('Origin',(-0.85,-4.05,1.)); #17595=CARTESIAN_POINT('',(-1.075,-4.05,1.)); #17596=CARTESIAN_POINT('',(-0.625,-4.05,1.)); #17597=CARTESIAN_POINT('Origin',(-0.85,-5.04866273088743,0.264868610655418)); #17598=CARTESIAN_POINT('',(-1.075,-5.07656532038508,-0.134157009448511)); #17599=CARTESIAN_POINT('',(-1.075,-4.72030065017323,0.0364428153759782)); #17600=CARTESIAN_POINT('Origin',(-1.075,-5.04866273088743,0.264868610655418)); #17601=CARTESIAN_POINT('',(-0.625,-4.72030065017323,0.0364428153759782)); #17602=CARTESIAN_POINT('',(-0.85,-4.72030065017323,0.0364428153759782)); #17603=CARTESIAN_POINT('',(-0.625,-5.07656532038508,-0.134157009448511)); #17604=CARTESIAN_POINT('Origin',(-0.625,-5.04866273088743,0.264868610655418)); #17605=CARTESIAN_POINT('',(-0.85,-5.07656532038508,-0.134157009448511)); #17606=CARTESIAN_POINT('Origin',(-0.85,-4.85,-0.15)); #17607=CARTESIAN_POINT('',(-0.625,-4.17705644020449,0.817356367206042)); #17608=CARTESIAN_POINT('',(-0.625,-4.85,-0.15)); #17609=CARTESIAN_POINT('',(-0.5,-4.17705644020449,0.817356367206042)); #17610=CARTESIAN_POINT('',(-0.85,-4.17705644020449,0.817356367206042)); #17611=CARTESIAN_POINT('',(-0.5,-4.5524268067404,0.277761465310675)); #17612=CARTESIAN_POINT('',(-0.5,-4.5524268067404,0.277761465310675)); #17613=CARTESIAN_POINT('',(-0.625,-4.5524268067404,0.277761465310675)); #17614=CARTESIAN_POINT('',(-0.85,-4.5524268067404,0.277761465310675)); #17615=CARTESIAN_POINT('',(-0.625,-4.85,-0.15)); #17616=CARTESIAN_POINT('',(-1.075,-4.5524268067404,0.277761465310675)); #17617=CARTESIAN_POINT('',(-1.075,-4.85,-0.15)); #17618=CARTESIAN_POINT('',(-1.2,-4.5524268067404,0.277761465310675)); #17619=CARTESIAN_POINT('',(-0.85,-4.5524268067404,0.277761465310675)); #17620=CARTESIAN_POINT('',(-1.2,-4.17705644020449,0.817356367206042)); #17621=CARTESIAN_POINT('',(-1.2,-4.5524268067404,0.277761465310675)); #17622=CARTESIAN_POINT('',(-1.075,-4.17705644020449,0.817356367206042)); #17623=CARTESIAN_POINT('',(-0.85,-4.17705644020449,0.817356367206042)); #17624=CARTESIAN_POINT('',(-1.075,-4.85,-0.15)); #17625=CARTESIAN_POINT('Origin',(-1.075,-5.39099485797536,0.109600054558721)); #17626=CARTESIAN_POINT('',(-1.075,-5.85,-0.0800731880564894)); #17627=CARTESIAN_POINT('',(-1.075,-5.85,-0.0800731880564894)); #17628=CARTESIAN_POINT('',(-1.075,-5.81512176312794,0.418708837073423)); #17629=CARTESIAN_POINT('',(-1.075,-5.81512176312794,0.418708837073423)); #17630=CARTESIAN_POINT('',(-1.075,-5.36067459409595,0.386930795346262)); #17631=CARTESIAN_POINT('',(-1.075,-4.81512176312794,0.348782025129912)); #17632=CARTESIAN_POINT('',(-1.075,-5.00440992388411,0.557530620170752)); #17633=CARTESIAN_POINT('Origin',(-1.075,-5.3327720045983,0.785956415450192)); #17634=CARTESIAN_POINT('',(-1.075,-4.9881645366226,0.580883364359164)); #17635=CARTESIAN_POINT('',(-1.075,-4.34877905095941,1.5)); #17636=CARTESIAN_POINT('',(-1.075,-5.01342885636085,0.59845854330751)); #17637=CARTESIAN_POINT('Origin',(-0.85,-5.3327720045983,0.785956415450192)); #17638=CARTESIAN_POINT('',(-0.625,-5.36067459409595,0.386930795346262)); #17639=CARTESIAN_POINT('',(-0.85,-5.36067459409595,0.386930795346262)); #17640=CARTESIAN_POINT('',(-0.625,-5.00440992388411,0.557530620170752)); #17641=CARTESIAN_POINT('Origin',(-0.625,-5.3327720045983,0.785956415450192)); #17642=CARTESIAN_POINT('',(-0.85,-5.00440992388411,0.557530620170752)); #17643=CARTESIAN_POINT('Origin',(-0.85,-5.13410927371087,0.371087804794774)); #17644=CARTESIAN_POINT('',(-0.625,-5.81512176312794,0.418708837073423)); #17645=CARTESIAN_POINT('',(-0.85,-5.81512176312794,0.418708837073423)); #17646=CARTESIAN_POINT('',(-0.625,-4.81512176312794,0.348782025129912)); #17647=CARTESIAN_POINT('Origin',(-0.85,-4.13977293874648,1.1)); #17648=CARTESIAN_POINT('',(-0.625,-4.46813501946067,1.32842579527944)); #17649=CARTESIAN_POINT('',(-0.625,-4.13977293874648,1.5)); #17650=CARTESIAN_POINT('Origin',(-0.625,-4.13977293874648,1.1)); #17651=CARTESIAN_POINT('',(-1.075,-4.13977293874648,1.5)); #17652=CARTESIAN_POINT('',(-0.85,-4.13977293874648,1.5)); #17653=CARTESIAN_POINT('',(-1.075,-4.46813501946067,1.32842579527944)); #17654=CARTESIAN_POINT('Origin',(-1.075,-4.13977293874648,1.1)); #17655=CARTESIAN_POINT('',(-0.85,-4.46813501946067,1.32842579527944)); #17656=CARTESIAN_POINT('Origin',(-0.85,-3.05,1.5)); #17657=CARTESIAN_POINT('',(-0.625,-3.05,1.5)); #17658=CARTESIAN_POINT('',(-1.075,-4.05,1.5)); #17659=CARTESIAN_POINT('Origin',(-0.625,-5.39099485797536,0.109600054558721)); #17660=CARTESIAN_POINT('',(-0.625,-4.6127941700867,1.12047826625453)); #17661=CARTESIAN_POINT('',(-0.625,-4.34877905095941,1.5)); #17662=CARTESIAN_POINT('',(-0.625,-4.42018962488384,0.986492495678632)); #17663=CARTESIAN_POINT('Origin',(-0.85,-4.9881645366226,0.580883364359164)); #17664=CARTESIAN_POINT('',(-0.625,-4.9881645366226,0.580883364359164)); #17665=CARTESIAN_POINT('',(-0.625,-5.01342885636085,0.59845854330751)); #17666=CARTESIAN_POINT('',(-0.5,-4.9881645366226,0.580883364359164)); #17667=CARTESIAN_POINT('',(-0.5,-4.9881645366226,0.580883364359164)); #17668=CARTESIAN_POINT('',(-0.85,-4.9881645366226,0.580883364359164)); #17669=CARTESIAN_POINT('Origin',(-0.85,-4.17705644020449,0.817356367206042)); #17670=CARTESIAN_POINT('',(-0.5,-4.6127941700867,1.12047826625453)); #17671=CARTESIAN_POINT('',(-0.85,-4.6127941700867,1.12047826625453)); #17672=CARTESIAN_POINT('',(-0.5,-4.17705644020449,0.817356367206042)); #17673=CARTESIAN_POINT('Origin',(-0.85,-4.17705644020449,0.817356367206042)); #17674=CARTESIAN_POINT('',(-1.075,-4.6127941700867,1.12047826625453)); #17675=CARTESIAN_POINT('',(-1.075,-4.42018962488384,0.986492495678632)); #17676=CARTESIAN_POINT('',(-1.2,-4.6127941700867,1.12047826625453)); #17677=CARTESIAN_POINT('',(-1.2,-4.17705644020449,0.817356367206042)); #17678=CARTESIAN_POINT('',(-0.85,-4.6127941700867,1.12047826625453)); #17679=CARTESIAN_POINT('Origin',(-1.2,-4.58261048841355,0.699119865782603)); #17680=CARTESIAN_POINT('',(-1.2,-4.9881645366226,0.580883364359164)); #17681=CARTESIAN_POINT('',(-1.2,-4.9881645366226,0.580883364359164)); #17682=CARTESIAN_POINT('',(-1.2,-4.6127941700867,1.12047826625453)); #17683=CARTESIAN_POINT('Origin',(-0.85,-4.9881645366226,0.580883364359164)); #17684=CARTESIAN_POINT('',(-0.85,-4.9881645366226,0.580883364359164)); #17685=CARTESIAN_POINT('Origin',(-0.5,-4.58261048841355,0.699119865782603)); #17686=CARTESIAN_POINT('',(-0.5,-4.6127941700867,1.12047826625453)); #17687=CARTESIAN_POINT('Origin',(-1.075,-5.39099485797536,0.109600054558721)); #17688=CARTESIAN_POINT('',(-1.075,-4.34877905095941,1.5)); #17689=CARTESIAN_POINT('Origin',(-0.85,-4.34877905095941,1.5)); #17690=CARTESIAN_POINT('',(-0.625,-4.34877905095941,1.5)); #17691=CARTESIAN_POINT('Origin',(-0.85,-5.85,-0.0800731880564894)); #17692=CARTESIAN_POINT('',(-0.625,-5.85,-0.0800731880564894)); #17693=CARTESIAN_POINT('',(-0.625,-5.85,-0.0800731880564894)); #17694=CARTESIAN_POINT('',(-0.85,-5.85,-0.0800731880564894)); #17695=CARTESIAN_POINT('Origin',(-0.85,-5.81512176312794,0.418708837073423)); #17696=CARTESIAN_POINT('',(-0.625,-5.81512176312794,0.418708837073423)); #17697=CARTESIAN_POINT('Origin',(-0.625,-5.39099485797536,0.109600054558721)); #17698=CARTESIAN_POINT('Origin',(0.225,-5.39099485797536,0.109600054558721)); #17699=CARTESIAN_POINT('',(0.225,-4.72030065017323,0.0364428153759782)); #17700=CARTESIAN_POINT('',(0.225,-5.07656532038508,-0.134157009448511)); #17701=CARTESIAN_POINT('Origin',(0.225,-5.04866273088743,0.264868610655418)); #17702=CARTESIAN_POINT('',(0.225,-4.5524268067404,0.277761465310675)); #17703=CARTESIAN_POINT('',(0.225,-4.85,-0.15)); #17704=CARTESIAN_POINT('',(0.225,-4.9881645366226,0.580883364359164)); #17705=CARTESIAN_POINT('',(0.225,-5.01342885636085,0.59845854330751)); #17706=CARTESIAN_POINT('',(0.225,-5.00440992388411,0.557530620170752)); #17707=CARTESIAN_POINT('',(0.225,-4.34877905095941,1.5)); #17708=CARTESIAN_POINT('',(0.225,-5.36067459409595,0.386930795346262)); #17709=CARTESIAN_POINT('Origin',(0.225,-5.3327720045983,0.785956415450192)); #17710=CARTESIAN_POINT('',(0.225,-5.81512176312794,0.418708837073423)); #17711=CARTESIAN_POINT('',(0.225,-4.81512176312794,0.348782025129912)); #17712=CARTESIAN_POINT('',(0.225,-5.85,-0.0800731880564894)); #17713=CARTESIAN_POINT('',(0.225,-5.81512176312794,0.418708837073423)); #17714=CARTESIAN_POINT('',(0.225,-5.85,-0.0800731880564894)); #17715=CARTESIAN_POINT('Origin',(0.,-5.81512176312794,0.418708837073423)); #17716=CARTESIAN_POINT('',(-0.225,-5.85,-0.0800731880564894)); #17717=CARTESIAN_POINT('',(0.,-5.85,-0.0800731880564894)); #17718=CARTESIAN_POINT('',(-0.225,-5.81512176312794,0.418708837073423)); #17719=CARTESIAN_POINT('',(0.,-5.81512176312794,0.418708837073423)); #17720=CARTESIAN_POINT('',(-0.225,-5.81512176312794,0.418708837073423)); #17721=CARTESIAN_POINT('Origin',(0.,-5.85,-0.0800731880564894)); #17722=CARTESIAN_POINT('',(-0.225,-5.07656532038508,-0.134157009448511)); #17723=CARTESIAN_POINT('',(0.,-5.07656532038508,-0.134157009448511)); #17724=CARTESIAN_POINT('',(-0.225,-5.85,-0.0800731880564894)); #17725=CARTESIAN_POINT('Origin',(0.,-4.34877905095941,1.5)); #17726=CARTESIAN_POINT('',(-0.225,-5.00440992388411,0.557530620170752)); #17727=CARTESIAN_POINT('',(0.,-5.00440992388411,0.557530620170752)); #17728=CARTESIAN_POINT('',(0.35,-4.9881645366226,0.580883364359164)); #17729=CARTESIAN_POINT('',(0.,-4.9881645366226,0.580883364359164)); #17730=CARTESIAN_POINT('',(0.35,-4.6127941700867,1.12047826625453)); #17731=CARTESIAN_POINT('',(0.35,-4.6127941700867,1.12047826625453)); #17732=CARTESIAN_POINT('',(0.225,-4.6127941700867,1.12047826625453)); #17733=CARTESIAN_POINT('',(0.,-4.6127941700867,1.12047826625453)); #17734=CARTESIAN_POINT('',(0.225,-4.46813501946067,1.32842579527944)); #17735=CARTESIAN_POINT('',(0.225,-4.34877905095941,1.5)); #17736=CARTESIAN_POINT('',(-0.225,-4.46813501946067,1.32842579527944)); #17737=CARTESIAN_POINT('',(0.,-4.46813501946067,1.32842579527944)); #17738=CARTESIAN_POINT('',(-0.225,-4.6127941700867,1.12047826625453)); #17739=CARTESIAN_POINT('',(-0.225,-4.34877905095941,1.5)); #17740=CARTESIAN_POINT('',(-0.35,-4.6127941700867,1.12047826625453)); #17741=CARTESIAN_POINT('',(0.,-4.6127941700867,1.12047826625453)); #17742=CARTESIAN_POINT('',(-0.35,-4.9881645366226,0.580883364359164)); #17743=CARTESIAN_POINT('',(-0.35,-4.6127941700867,1.12047826625453)); #17744=CARTESIAN_POINT('',(-0.225,-4.9881645366226,0.580883364359164)); #17745=CARTESIAN_POINT('',(0.,-4.9881645366226,0.580883364359164)); #17746=CARTESIAN_POINT('',(-0.225,-4.34877905095941,1.5)); #17747=CARTESIAN_POINT('Origin',(-0.225,-5.39099485797536,0.109600054558721)); #17748=CARTESIAN_POINT('',(-0.225,-4.13977293874648,1.5)); #17749=CARTESIAN_POINT('Origin',(-0.225,-4.13977293874648,1.1)); #17750=CARTESIAN_POINT('',(-0.225,-3.05,1.5)); #17751=CARTESIAN_POINT('',(-0.225,-4.05,1.5)); #17752=CARTESIAN_POINT('',(-0.225,-3.05,1.)); #17753=CARTESIAN_POINT('',(-0.225,-3.05,0.0548000272793604)); #17754=CARTESIAN_POINT('',(-0.225,-3.84099388778706,1.)); #17755=CARTESIAN_POINT('',(-0.225,-4.05,1.)); #17756=CARTESIAN_POINT('',(-0.225,-4.16935596850126,0.82842579527944)); #17757=CARTESIAN_POINT('Origin',(-0.225,-3.84099388778706,0.6)); #17758=CARTESIAN_POINT('',(-0.225,-4.17705644020449,0.817356367206042)); #17759=CARTESIAN_POINT('',(-0.225,-4.85,-0.15)); #17760=CARTESIAN_POINT('',(-0.225,-4.42018962488384,0.986492495678632)); #17761=CARTESIAN_POINT('Origin',(0.35,-4.58261048841355,0.699119865782603)); #17762=CARTESIAN_POINT('',(0.35,-4.5524268067404,0.277761465310675)); #17763=CARTESIAN_POINT('',(0.35,-4.9881645366226,0.580883364359164)); #17764=CARTESIAN_POINT('',(0.35,-4.17705644020449,0.817356367206042)); #17765=CARTESIAN_POINT('',(0.35,-4.5524268067404,0.277761465310675)); #17766=CARTESIAN_POINT('',(0.35,-4.17705644020449,0.817356367206042)); #17767=CARTESIAN_POINT('Origin',(0.,-4.9881645366226,0.580883364359164)); #17768=CARTESIAN_POINT('',(-0.225,-4.5524268067404,0.277761465310675)); #17769=CARTESIAN_POINT('',(-0.225,-5.01342885636085,0.59845854330751)); #17770=CARTESIAN_POINT('',(-0.35,-4.5524268067404,0.277761465310675)); #17771=CARTESIAN_POINT('',(-0.35,-4.9881645366226,0.580883364359164)); #17772=CARTESIAN_POINT('',(0.,-4.5524268067404,0.277761465310675)); #17773=CARTESIAN_POINT('Origin',(-0.35,-4.58261048841355,0.699119865782603)); #17774=CARTESIAN_POINT('',(-0.35,-4.17705644020449,0.817356367206042)); #17775=CARTESIAN_POINT('',(-0.35,-4.17705644020449,0.817356367206042)); #17776=CARTESIAN_POINT('',(-0.35,-4.5524268067404,0.277761465310675)); #17777=CARTESIAN_POINT('Origin',(0.,-4.17705644020449,0.817356367206042)); #17778=CARTESIAN_POINT('',(0.,-4.17705644020449,0.817356367206042)); #17779=CARTESIAN_POINT('Origin',(0.,-4.17705644020449,0.817356367206042)); #17780=CARTESIAN_POINT('',(0.225,-4.17705644020449,0.817356367206042)); #17781=CARTESIAN_POINT('',(0.225,-4.42018962488384,0.986492495678632)); #17782=CARTESIAN_POINT('',(0.,-4.17705644020449,0.817356367206042)); #17783=CARTESIAN_POINT('Origin',(0.,-4.9881645366226,0.580883364359164)); #17784=CARTESIAN_POINT('',(0.,-4.5524268067404,0.277761465310675)); #17785=CARTESIAN_POINT('Origin',(0.225,-5.39099485797536,0.109600054558721)); #17786=CARTESIAN_POINT('',(0.225,-4.13977293874648,1.5)); #17787=CARTESIAN_POINT('Origin',(0.225,-4.13977293874648,1.1)); #17788=CARTESIAN_POINT('',(0.225,-4.16935596850126,0.82842579527944)); #17789=CARTESIAN_POINT('',(0.225,-4.85,-0.15)); #17790=CARTESIAN_POINT('',(0.225,-3.84099388778706,1.)); #17791=CARTESIAN_POINT('Origin',(0.225,-3.84099388778706,0.6)); #17792=CARTESIAN_POINT('',(0.225,-3.05,1.)); #17793=CARTESIAN_POINT('',(0.225,-4.05,1.)); #17794=CARTESIAN_POINT('',(0.225,-3.05,1.5)); #17795=CARTESIAN_POINT('',(0.225,-3.05,0.0548000272793604)); #17796=CARTESIAN_POINT('',(0.225,-3.05,1.5)); #17797=CARTESIAN_POINT('Origin',(0.,-3.05,1.5)); #17798=CARTESIAN_POINT('',(0.,-4.13977293874648,1.5)); #17799=CARTESIAN_POINT('',(-1.625,-3.05,1.5)); #17800=CARTESIAN_POINT('Origin',(0.,-4.13977293874648,1.1)); #17801=CARTESIAN_POINT('Origin',(0.,-5.13410927371087,0.371087804794774)); #17802=CARTESIAN_POINT('',(-0.225,-5.36067459409595,0.386930795346262)); #17803=CARTESIAN_POINT('',(0.,-5.36067459409595,0.386930795346262)); #17804=CARTESIAN_POINT('',(-0.225,-4.81512176312794,0.348782025129912)); #17805=CARTESIAN_POINT('Origin',(0.,-5.3327720045983,0.785956415450192)); #17806=CARTESIAN_POINT('Origin',(-0.225,-5.3327720045983,0.785956415450192)); #17807=CARTESIAN_POINT('Origin',(-0.225,-5.39099485797536,0.109600054558721)); #17808=CARTESIAN_POINT('',(-0.225,-4.72030065017323,0.0364428153759782)); #17809=CARTESIAN_POINT('Origin',(-0.225,-5.04866273088743,0.264868610655418)); #17810=CARTESIAN_POINT('',(-0.225,-4.85,-0.15)); #17811=CARTESIAN_POINT('Origin',(0.,-4.85,-0.15)); #17812=CARTESIAN_POINT('',(0.,-4.16935596850126,0.82842579527944)); #17813=CARTESIAN_POINT('',(0.,-4.72030065017323,0.0364428153759782)); #17814=CARTESIAN_POINT('Origin',(0.,-5.04866273088743,0.264868610655418)); #17815=CARTESIAN_POINT('Origin',(0.,-4.05,1.)); #17816=CARTESIAN_POINT('',(0.,-3.84099388778706,1.)); #17817=CARTESIAN_POINT('',(-1.625,-3.05,1.)); #17818=CARTESIAN_POINT('Origin',(0.,-3.84099388778706,0.6)); #17819=CARTESIAN_POINT('Origin',(3.52122937758704,-3.05,2.4)); #17820=CARTESIAN_POINT('',(0.,0.,0.)); #17821=CARTESIAN_POINT('Ctrl Pts',(-1.57785538560883,-3.26954825524113, 0.)); #17822=CARTESIAN_POINT('Ctrl Pts',(-1.57785538560883,-3.26954825524113, 0.1)); #17823=CARTESIAN_POINT('Ctrl Pts',(-1.57785538560883,-3.29049702758847, 0.)); #17824=CARTESIAN_POINT('Ctrl Pts',(-1.57785538560883,-3.29049702758847, 0.1)); #17825=CARTESIAN_POINT('Ctrl Pts',(-1.56703757693766,-3.32174847486074, 0.)); #17826=CARTESIAN_POINT('Ctrl Pts',(-1.56703757693766,-3.32174847486074, 0.1)); #17827=CARTESIAN_POINT('Ctrl Pts',(-1.55725003575898,-3.33187943853691, 0.)); #17828=CARTESIAN_POINT('Ctrl Pts',(-1.55725003575898,-3.33187943853691, 0.1)); #17829=CARTESIAN_POINT('',(-1.55725003575898,-3.33187943853691,0.)); #17830=CARTESIAN_POINT('',(-1.57785538560883,-3.26954825524113,0.)); #17831=CARTESIAN_POINT('Ctrl Pts',(-1.55725003575898,-3.33187943853691, 0.)); #17832=CARTESIAN_POINT('Ctrl Pts',(-1.56703757693766,-3.32174847486074, 0.)); #17833=CARTESIAN_POINT('Ctrl Pts',(-1.57785538560883,-3.29049702758847, 0.)); #17834=CARTESIAN_POINT('Ctrl Pts',(-1.57785538560883,-3.26954825524113, 0.)); #17835=CARTESIAN_POINT('',(-1.55725003575898,-3.33187943853691,0.1)); #17836=CARTESIAN_POINT('',(-1.55725003575898,-3.33187943853691,0.)); #17837=CARTESIAN_POINT('',(-1.57785538560883,-3.26954825524113,0.1)); #17838=CARTESIAN_POINT('Ctrl Pts',(-1.57785538560883,-3.26954825524113, 0.1)); #17839=CARTESIAN_POINT('Ctrl Pts',(-1.57785538560883,-3.29049702758847, 0.1)); #17840=CARTESIAN_POINT('Ctrl Pts',(-1.56703757693766,-3.32174847486074, 0.1)); #17841=CARTESIAN_POINT('Ctrl Pts',(-1.55725003575898,-3.33187943853691, 0.1)); #17842=CARTESIAN_POINT('',(-1.57785538560883,-3.26954825524113,0.)); #17843=CARTESIAN_POINT('Ctrl Pts',(-1.55725003575898,-3.2077322056916,0.)); #17844=CARTESIAN_POINT('Ctrl Pts',(-1.55725003575898,-3.2077322056916,0.1)); #17845=CARTESIAN_POINT('Ctrl Pts',(-1.56669415444016,-3.21803488061652, 0.)); #17846=CARTESIAN_POINT('Ctrl Pts',(-1.56669415444016,-3.21803488061652, 0.1)); #17847=CARTESIAN_POINT('Ctrl Pts',(-1.57785538560883,-3.24859948289379, 0.)); #17848=CARTESIAN_POINT('Ctrl Pts',(-1.57785538560883,-3.24859948289379, 0.1)); #17849=CARTESIAN_POINT('Ctrl Pts',(-1.57785538560883,-3.26954825524113, 0.)); #17850=CARTESIAN_POINT('Ctrl Pts',(-1.57785538560883,-3.26954825524113, 0.1)); #17851=CARTESIAN_POINT('',(-1.55725003575898,-3.2077322056916,0.)); #17852=CARTESIAN_POINT('Ctrl Pts',(-1.57785538560883,-3.26954825524113, 0.)); #17853=CARTESIAN_POINT('Ctrl Pts',(-1.57785538560883,-3.24859948289379, 0.)); #17854=CARTESIAN_POINT('Ctrl Pts',(-1.56669415444016,-3.21803488061652, 0.)); #17855=CARTESIAN_POINT('Ctrl Pts',(-1.55725003575898,-3.2077322056916,0.)); #17856=CARTESIAN_POINT('',(-1.55725003575898,-3.2077322056916,0.1)); #17857=CARTESIAN_POINT('Ctrl Pts',(-1.55725003575898,-3.2077322056916,0.1)); #17858=CARTESIAN_POINT('Ctrl Pts',(-1.56669415444016,-3.21803488061652, 0.1)); #17859=CARTESIAN_POINT('Ctrl Pts',(-1.57785538560883,-3.24859948289379, 0.1)); #17860=CARTESIAN_POINT('Ctrl Pts',(-1.57785538560883,-3.26954825524113, 0.1)); #17861=CARTESIAN_POINT('',(-1.55725003575898,-3.2077322056916,0.)); #17862=CARTESIAN_POINT('Ctrl Pts',(-1.50367612614939,-3.18609658834927, 0.)); #17863=CARTESIAN_POINT('Ctrl Pts',(-1.50367612614939,-3.18609658834927, 0.1)); #17864=CARTESIAN_POINT('Ctrl Pts',(-1.51981698353177,-3.18609658834927, 0.)); #17865=CARTESIAN_POINT('Ctrl Pts',(-1.51981698353177,-3.18609658834927, 0.1)); #17866=CARTESIAN_POINT('Ctrl Pts',(-1.54780591707781,-3.19725781951793, 0.)); #17867=CARTESIAN_POINT('Ctrl Pts',(-1.54780591707781,-3.19725781951793, 0.1)); #17868=CARTESIAN_POINT('Ctrl Pts',(-1.55725003575898,-3.2077322056916,0.)); #17869=CARTESIAN_POINT('Ctrl Pts',(-1.55725003575898,-3.2077322056916,0.1)); #17870=CARTESIAN_POINT('',(-1.50367612614939,-3.18609658834927,0.)); #17871=CARTESIAN_POINT('Ctrl Pts',(-1.55725003575898,-3.2077322056916,0.)); #17872=CARTESIAN_POINT('Ctrl Pts',(-1.54780591707781,-3.19725781951793, 0.)); #17873=CARTESIAN_POINT('Ctrl Pts',(-1.51981698353177,-3.18609658834927, 0.)); #17874=CARTESIAN_POINT('Ctrl Pts',(-1.50367612614939,-3.18609658834927, 0.)); #17875=CARTESIAN_POINT('',(-1.50367612614939,-3.18609658834927,0.1)); #17876=CARTESIAN_POINT('Ctrl Pts',(-1.50367612614939,-3.18609658834927, 0.1)); #17877=CARTESIAN_POINT('Ctrl Pts',(-1.51981698353177,-3.18609658834927, 0.1)); #17878=CARTESIAN_POINT('Ctrl Pts',(-1.54780591707781,-3.19725781951793, 0.1)); #17879=CARTESIAN_POINT('Ctrl Pts',(-1.55725003575898,-3.2077322056916,0.1)); #17880=CARTESIAN_POINT('',(-1.50367612614939,-3.18609658834927,0.)); #17881=CARTESIAN_POINT('Ctrl Pts',(-1.456798955241,-3.19828808701043,0.)); #17882=CARTESIAN_POINT('Ctrl Pts',(-1.456798955241,-3.19828808701043,0.1)); #17883=CARTESIAN_POINT('Ctrl Pts',(-1.46624307392218,-3.19348017204546, 0.)); #17884=CARTESIAN_POINT('Ctrl Pts',(-1.46624307392218,-3.19348017204546, 0.1)); #17885=CARTESIAN_POINT('Ctrl Pts',(-1.49062607124449,-3.18609658834927, 0.)); #17886=CARTESIAN_POINT('Ctrl Pts',(-1.49062607124449,-3.18609658834927, 0.1)); #17887=CARTESIAN_POINT('Ctrl Pts',(-1.50367612614939,-3.18609658834927, 0.)); #17888=CARTESIAN_POINT('Ctrl Pts',(-1.50367612614939,-3.18609658834927, 0.1)); #17889=CARTESIAN_POINT('',(-1.456798955241,-3.19828808701043,0.)); #17890=CARTESIAN_POINT('Ctrl Pts',(-1.50367612614939,-3.18609658834927, 0.)); #17891=CARTESIAN_POINT('Ctrl Pts',(-1.49062607124449,-3.18609658834927, 0.)); #17892=CARTESIAN_POINT('Ctrl Pts',(-1.46624307392218,-3.19348017204546, 0.)); #17893=CARTESIAN_POINT('Ctrl Pts',(-1.456798955241,-3.19828808701043,0.)); #17894=CARTESIAN_POINT('',(-1.456798955241,-3.19828808701043,0.1)); #17895=CARTESIAN_POINT('Ctrl Pts',(-1.456798955241,-3.19828808701043,0.1)); #17896=CARTESIAN_POINT('Ctrl Pts',(-1.46624307392218,-3.19348017204546, 0.1)); #17897=CARTESIAN_POINT('Ctrl Pts',(-1.49062607124449,-3.18609658834927, 0.1)); #17898=CARTESIAN_POINT('Ctrl Pts',(-1.50367612614939,-3.18609658834927, 0.1)); #17899=CARTESIAN_POINT('',(-1.456798955241,-3.19828808701043,0.)); #17900=CARTESIAN_POINT('Origin',(-1.456798955241,-3.22833755554145,0.)); #17901=CARTESIAN_POINT('',(-1.456798955241,-3.22833755554145,0.)); #17902=CARTESIAN_POINT('',(-1.456798955241,-3.19828808701043,0.)); #17903=CARTESIAN_POINT('',(-1.456798955241,-3.22833755554145,0.1)); #17904=CARTESIAN_POINT('',(-1.456798955241,-3.19828808701043,0.1)); #17905=CARTESIAN_POINT('',(-1.456798955241,-3.22833755554145,0.)); #17906=CARTESIAN_POINT('Origin',(-1.45834435647974,-3.22833755554145,0.)); #17907=CARTESIAN_POINT('',(-1.45834435647974,-3.22833755554145,0.)); #17908=CARTESIAN_POINT('',(-1.456798955241,-3.22833755554145,0.)); #17909=CARTESIAN_POINT('',(-1.45834435647974,-3.22833755554145,0.1)); #17910=CARTESIAN_POINT('',(-1.456798955241,-3.22833755554145,0.1)); #17911=CARTESIAN_POINT('',(-1.45834435647974,-3.22833755554145,0.)); #17912=CARTESIAN_POINT('Ctrl Pts',(-1.4765457488471,-3.21648947937779,0.)); #17913=CARTESIAN_POINT('Ctrl Pts',(-1.4765457488471,-3.21648947937779,0.1)); #17914=CARTESIAN_POINT('Ctrl Pts',(-1.4701924326434,-3.21975199310401,0.)); #17915=CARTESIAN_POINT('Ctrl Pts',(-1.4701924326434,-3.21975199310401,0.1)); #17916=CARTESIAN_POINT('Ctrl Pts',(-1.46126344770846,-3.22593359805897, 0.)); #17917=CARTESIAN_POINT('Ctrl Pts',(-1.46126344770846,-3.22593359805897, 0.1)); #17918=CARTESIAN_POINT('Ctrl Pts',(-1.45834435647974,-3.22833755554145, 0.)); #17919=CARTESIAN_POINT('Ctrl Pts',(-1.45834435647974,-3.22833755554145, 0.1)); #17920=CARTESIAN_POINT('',(-1.4765457488471,-3.21648947937779,0.)); #17921=CARTESIAN_POINT('Ctrl Pts',(-1.45834435647974,-3.22833755554145, 0.)); #17922=CARTESIAN_POINT('Ctrl Pts',(-1.46126344770846,-3.22593359805897, 0.)); #17923=CARTESIAN_POINT('Ctrl Pts',(-1.4701924326434,-3.21975199310401,0.)); #17924=CARTESIAN_POINT('Ctrl Pts',(-1.4765457488471,-3.21648947937779,0.)); #17925=CARTESIAN_POINT('',(-1.4765457488471,-3.21648947937779,0.1)); #17926=CARTESIAN_POINT('Ctrl Pts',(-1.4765457488471,-3.21648947937779,0.1)); #17927=CARTESIAN_POINT('Ctrl Pts',(-1.4701924326434,-3.21975199310401,0.1)); #17928=CARTESIAN_POINT('Ctrl Pts',(-1.46126344770846,-3.22593359805897, 0.1)); #17929=CARTESIAN_POINT('Ctrl Pts',(-1.45834435647974,-3.22833755554145, 0.1)); #17930=CARTESIAN_POINT('',(-1.4765457488471,-3.21648947937779,0.)); #17931=CARTESIAN_POINT('Ctrl Pts',(-1.50419125989564,-3.20944931817909, 0.)); #17932=CARTESIAN_POINT('Ctrl Pts',(-1.50419125989564,-3.20944931817909, 0.1)); #17933=CARTESIAN_POINT('Ctrl Pts',(-1.49732280994569,-3.20944931817909, 0.)); #17934=CARTESIAN_POINT('Ctrl Pts',(-1.49732280994569,-3.20944931817909, 0.1)); #17935=CARTESIAN_POINT('Ctrl Pts',(-1.4822122200558,-3.21374209939781,0.)); #17936=CARTESIAN_POINT('Ctrl Pts',(-1.4822122200558,-3.21374209939781,0.1)); #17937=CARTESIAN_POINT('Ctrl Pts',(-1.4765457488471,-3.21648947937779,0.)); #17938=CARTESIAN_POINT('Ctrl Pts',(-1.4765457488471,-3.21648947937779,0.1)); #17939=CARTESIAN_POINT('',(-1.50419125989564,-3.20944931817909,0.)); #17940=CARTESIAN_POINT('Ctrl Pts',(-1.4765457488471,-3.21648947937779,0.)); #17941=CARTESIAN_POINT('Ctrl Pts',(-1.4822122200558,-3.21374209939781,0.)); #17942=CARTESIAN_POINT('Ctrl Pts',(-1.49732280994569,-3.20944931817909, 0.)); #17943=CARTESIAN_POINT('Ctrl Pts',(-1.50419125989564,-3.20944931817909, 0.)); #17944=CARTESIAN_POINT('',(-1.50419125989564,-3.20944931817909,0.1)); #17945=CARTESIAN_POINT('Ctrl Pts',(-1.50419125989564,-3.20944931817909, 0.1)); #17946=CARTESIAN_POINT('Ctrl Pts',(-1.49732280994569,-3.20944931817909, 0.1)); #17947=CARTESIAN_POINT('Ctrl Pts',(-1.4822122200558,-3.21374209939781,0.1)); #17948=CARTESIAN_POINT('Ctrl Pts',(-1.4765457488471,-3.21648947937779,0.1)); #17949=CARTESIAN_POINT('',(-1.50419125989564,-3.20944931817909,0.)); #17950=CARTESIAN_POINT('Ctrl Pts',(-1.55020987456029,-3.26954825524113, 0.)); #17951=CARTESIAN_POINT('Ctrl Pts',(-1.55020987456029,-3.26954825524113, 0.1)); #17952=CARTESIAN_POINT('Ctrl Pts',(-1.55020987456029,-3.2408724767001,0.)); #17953=CARTESIAN_POINT('Ctrl Pts',(-1.55020987456029,-3.2408724767001,0.1)); #17954=CARTESIAN_POINT('Ctrl Pts',(-1.52496832099423,-3.20944931817909, 0.)); #17955=CARTESIAN_POINT('Ctrl Pts',(-1.52496832099423,-3.20944931817909, 0.1)); #17956=CARTESIAN_POINT('Ctrl Pts',(-1.50419125989564,-3.20944931817909, 0.)); #17957=CARTESIAN_POINT('Ctrl Pts',(-1.50419125989564,-3.20944931817909, 0.1)); #17958=CARTESIAN_POINT('',(-1.55020987456029,-3.26954825524113,0.)); #17959=CARTESIAN_POINT('Ctrl Pts',(-1.50419125989564,-3.20944931817909, 0.)); #17960=CARTESIAN_POINT('Ctrl Pts',(-1.52496832099423,-3.20944931817909, 0.)); #17961=CARTESIAN_POINT('Ctrl Pts',(-1.55020987456029,-3.2408724767001,0.)); #17962=CARTESIAN_POINT('Ctrl Pts',(-1.55020987456029,-3.26954825524113, 0.)); #17963=CARTESIAN_POINT('',(-1.55020987456029,-3.26954825524113,0.1)); #17964=CARTESIAN_POINT('Ctrl Pts',(-1.55020987456029,-3.26954825524113, 0.1)); #17965=CARTESIAN_POINT('Ctrl Pts',(-1.55020987456029,-3.2408724767001,0.1)); #17966=CARTESIAN_POINT('Ctrl Pts',(-1.52496832099423,-3.20944931817909, 0.1)); #17967=CARTESIAN_POINT('Ctrl Pts',(-1.50419125989564,-3.20944931817909, 0.1)); #17968=CARTESIAN_POINT('',(-1.55020987456029,-3.26954825524113,0.)); #17969=CARTESIAN_POINT('Ctrl Pts',(-1.50419125989564,-3.32896034730818, 0.)); #17970=CARTESIAN_POINT('Ctrl Pts',(-1.50419125989564,-3.32896034730818, 0.1)); #17971=CARTESIAN_POINT('Ctrl Pts',(-1.52582687723797,-3.32896034730818, 0.)); #17972=CARTESIAN_POINT('Ctrl Pts',(-1.52582687723797,-3.32896034730818, 0.1)); #17973=CARTESIAN_POINT('Ctrl Pts',(-1.55020987456029,-3.29753718878717, 0.)); #17974=CARTESIAN_POINT('Ctrl Pts',(-1.55020987456029,-3.29753718878717, 0.1)); #17975=CARTESIAN_POINT('Ctrl Pts',(-1.55020987456029,-3.26954825524113, 0.)); #17976=CARTESIAN_POINT('Ctrl Pts',(-1.55020987456029,-3.26954825524113, 0.1)); #17977=CARTESIAN_POINT('',(-1.50419125989564,-3.32896034730818,0.)); #17978=CARTESIAN_POINT('Ctrl Pts',(-1.55020987456029,-3.26954825524113, 0.)); #17979=CARTESIAN_POINT('Ctrl Pts',(-1.55020987456029,-3.29753718878717, 0.)); #17980=CARTESIAN_POINT('Ctrl Pts',(-1.52582687723797,-3.32896034730818, 0.)); #17981=CARTESIAN_POINT('Ctrl Pts',(-1.50419125989564,-3.32896034730818, 0.)); #17982=CARTESIAN_POINT('',(-1.50419125989564,-3.32896034730818,0.1)); #17983=CARTESIAN_POINT('Ctrl Pts',(-1.50419125989564,-3.32896034730818, 0.1)); #17984=CARTESIAN_POINT('Ctrl Pts',(-1.52582687723797,-3.32896034730818, 0.1)); #17985=CARTESIAN_POINT('Ctrl Pts',(-1.55020987456029,-3.29753718878717, 0.1)); #17986=CARTESIAN_POINT('Ctrl Pts',(-1.55020987456029,-3.26954825524113, 0.1)); #17987=CARTESIAN_POINT('',(-1.50419125989564,-3.32896034730818,0.)); #17988=CARTESIAN_POINT('Ctrl Pts',(-1.45834435647974,-3.30972868744833, 0.)); #17989=CARTESIAN_POINT('Ctrl Pts',(-1.45834435647974,-3.30972868744833, 0.1)); #17990=CARTESIAN_POINT('Ctrl Pts',(-1.46744505266342,-3.31814253863701, 0.)); #17991=CARTESIAN_POINT('Ctrl Pts',(-1.46744505266342,-3.31814253863701, 0.1)); #17992=CARTESIAN_POINT('Ctrl Pts',(-1.49114120499074,-3.32896034730818, 0.)); #17993=CARTESIAN_POINT('Ctrl Pts',(-1.49114120499074,-3.32896034730818, 0.1)); #17994=CARTESIAN_POINT('Ctrl Pts',(-1.50419125989564,-3.32896034730818, 0.)); #17995=CARTESIAN_POINT('Ctrl Pts',(-1.50419125989564,-3.32896034730818, 0.1)); #17996=CARTESIAN_POINT('',(-1.45834435647974,-3.30972868744833,0.)); #17997=CARTESIAN_POINT('Ctrl Pts',(-1.50419125989564,-3.32896034730818, 0.)); #17998=CARTESIAN_POINT('Ctrl Pts',(-1.49114120499074,-3.32896034730818, 0.)); #17999=CARTESIAN_POINT('Ctrl Pts',(-1.46744505266342,-3.31814253863701, 0.)); #18000=CARTESIAN_POINT('Ctrl Pts',(-1.45834435647974,-3.30972868744833, 0.)); #18001=CARTESIAN_POINT('',(-1.45834435647974,-3.30972868744833,0.1)); #18002=CARTESIAN_POINT('Ctrl Pts',(-1.45834435647974,-3.30972868744833, 0.1)); #18003=CARTESIAN_POINT('Ctrl Pts',(-1.46744505266342,-3.31814253863701, 0.1)); #18004=CARTESIAN_POINT('Ctrl Pts',(-1.49114120499074,-3.32896034730818, 0.1)); #18005=CARTESIAN_POINT('Ctrl Pts',(-1.50419125989564,-3.32896034730818, 0.1)); #18006=CARTESIAN_POINT('',(-1.45834435647974,-3.30972868744833,0.)); #18007=CARTESIAN_POINT('Origin',(-1.456798955241,-3.30972868744833,0.)); #18008=CARTESIAN_POINT('',(-1.456798955241,-3.30972868744833,0.)); #18009=CARTESIAN_POINT('',(-1.45834435647974,-3.30972868744833,0.)); #18010=CARTESIAN_POINT('',(-1.456798955241,-3.30972868744833,0.1)); #18011=CARTESIAN_POINT('',(-1.45834435647974,-3.30972868744833,0.1)); #18012=CARTESIAN_POINT('',(-1.456798955241,-3.30972868744833,0.)); #18013=CARTESIAN_POINT('Origin',(-1.456798955241,-3.33977815597935,0.)); #18014=CARTESIAN_POINT('',(-1.456798955241,-3.33977815597935,0.)); #18015=CARTESIAN_POINT('',(-1.456798955241,-3.30972868744833,0.)); #18016=CARTESIAN_POINT('',(-1.456798955241,-3.33977815597935,0.1)); #18017=CARTESIAN_POINT('',(-1.456798955241,-3.30972868744833,0.1)); #18018=CARTESIAN_POINT('',(-1.456798955241,-3.33977815597935,0.)); #18019=CARTESIAN_POINT('Ctrl Pts',(-1.47757601633959,-3.34819200716803, 0.)); #18020=CARTESIAN_POINT('Ctrl Pts',(-1.47757601633959,-3.34819200716803, 0.1)); #18021=CARTESIAN_POINT('Ctrl Pts',(-1.47276810137463,-3.34699002842679, 0.)); #18022=CARTESIAN_POINT('Ctrl Pts',(-1.47276810137463,-3.34699002842679, 0.1)); #18023=CARTESIAN_POINT('Ctrl Pts',(-1.46074831396222,-3.34166697971558, 0.)); #18024=CARTESIAN_POINT('Ctrl Pts',(-1.46074831396222,-3.34166697971558, 0.1)); #18025=CARTESIAN_POINT('Ctrl Pts',(-1.456798955241,-3.33977815597935,0.)); #18026=CARTESIAN_POINT('Ctrl Pts',(-1.456798955241,-3.33977815597935,0.1)); #18027=CARTESIAN_POINT('',(-1.47757601633959,-3.34819200716803,0.)); #18028=CARTESIAN_POINT('Ctrl Pts',(-1.456798955241,-3.33977815597935,0.)); #18029=CARTESIAN_POINT('Ctrl Pts',(-1.46074831396222,-3.34166697971558, 0.)); #18030=CARTESIAN_POINT('Ctrl Pts',(-1.47276810137463,-3.34699002842679, 0.)); #18031=CARTESIAN_POINT('Ctrl Pts',(-1.47757601633959,-3.34819200716803, 0.)); #18032=CARTESIAN_POINT('',(-1.47757601633959,-3.34819200716803,0.1)); #18033=CARTESIAN_POINT('Ctrl Pts',(-1.47757601633959,-3.34819200716803, 0.1)); #18034=CARTESIAN_POINT('Ctrl Pts',(-1.47276810137463,-3.34699002842679, 0.1)); #18035=CARTESIAN_POINT('Ctrl Pts',(-1.46074831396222,-3.34166697971558, 0.1)); #18036=CARTESIAN_POINT('Ctrl Pts',(-1.456798955241,-3.33977815597935,0.1)); #18037=CARTESIAN_POINT('',(-1.47757601633959,-3.34819200716803,0.)); #18038=CARTESIAN_POINT('Ctrl Pts',(-1.50367612614939,-3.352313077138,0.)); #18039=CARTESIAN_POINT('Ctrl Pts',(-1.50367612614939,-3.352313077138,0.1)); #18040=CARTESIAN_POINT('Ctrl Pts',(-1.49526227496071,-3.352313077138,0.)); #18041=CARTESIAN_POINT('Ctrl Pts',(-1.49526227496071,-3.352313077138,0.1)); #18042=CARTESIAN_POINT('Ctrl Pts',(-1.48444446628954,-3.35025254215302, 0.)); #18043=CARTESIAN_POINT('Ctrl Pts',(-1.48444446628954,-3.35025254215302, 0.1)); #18044=CARTESIAN_POINT('Ctrl Pts',(-1.47757601633959,-3.34819200716803, 0.)); #18045=CARTESIAN_POINT('Ctrl Pts',(-1.47757601633959,-3.34819200716803, 0.1)); #18046=CARTESIAN_POINT('',(-1.50367612614939,-3.352313077138,0.)); #18047=CARTESIAN_POINT('Ctrl Pts',(-1.47757601633959,-3.34819200716803, 0.)); #18048=CARTESIAN_POINT('Ctrl Pts',(-1.48444446628954,-3.35025254215302, 0.)); #18049=CARTESIAN_POINT('Ctrl Pts',(-1.49526227496071,-3.352313077138,0.)); #18050=CARTESIAN_POINT('Ctrl Pts',(-1.50367612614939,-3.352313077138,0.)); #18051=CARTESIAN_POINT('',(-1.50367612614939,-3.352313077138,0.1)); #18052=CARTESIAN_POINT('Ctrl Pts',(-1.50367612614939,-3.352313077138,0.1)); #18053=CARTESIAN_POINT('Ctrl Pts',(-1.49526227496071,-3.352313077138,0.1)); #18054=CARTESIAN_POINT('Ctrl Pts',(-1.48444446628954,-3.35025254215302, 0.1)); #18055=CARTESIAN_POINT('Ctrl Pts',(-1.47757601633959,-3.34819200716803, 0.1)); #18056=CARTESIAN_POINT('',(-1.50367612614939,-3.352313077138,0.)); #18057=CARTESIAN_POINT('Ctrl Pts',(-1.55725003575898,-3.33187943853691, 0.)); #18058=CARTESIAN_POINT('Ctrl Pts',(-1.55725003575898,-3.33187943853691, 0.1)); #18059=CARTESIAN_POINT('Ctrl Pts',(-1.54746249458031,-3.34218211346183, 0.)); #18060=CARTESIAN_POINT('Ctrl Pts',(-1.54746249458031,-3.34218211346183, 0.1)); #18061=CARTESIAN_POINT('Ctrl Pts',(-1.52016040602927,-3.352313077138,0.)); #18062=CARTESIAN_POINT('Ctrl Pts',(-1.52016040602927,-3.352313077138,0.1)); #18063=CARTESIAN_POINT('Ctrl Pts',(-1.50367612614939,-3.352313077138,0.)); #18064=CARTESIAN_POINT('Ctrl Pts',(-1.50367612614939,-3.352313077138,0.1)); #18065=CARTESIAN_POINT('Ctrl Pts',(-1.50367612614939,-3.352313077138,0.)); #18066=CARTESIAN_POINT('Ctrl Pts',(-1.52016040602927,-3.352313077138,0.)); #18067=CARTESIAN_POINT('Ctrl Pts',(-1.54746249458031,-3.34218211346183, 0.)); #18068=CARTESIAN_POINT('Ctrl Pts',(-1.55725003575898,-3.33187943853691, 0.)); #18069=CARTESIAN_POINT('Ctrl Pts',(-1.55725003575898,-3.33187943853691, 0.1)); #18070=CARTESIAN_POINT('Ctrl Pts',(-1.54746249458031,-3.34218211346183, 0.1)); #18071=CARTESIAN_POINT('Ctrl Pts',(-1.52016040602927,-3.352313077138,0.1)); #18072=CARTESIAN_POINT('Ctrl Pts',(-1.50367612614939,-3.352313077138,0.1)); #18073=CARTESIAN_POINT('Origin',(-1.51668762073621,-3.26937317486116,0.)); #18074=CARTESIAN_POINT('Origin',(-1.51668762073621,-3.26937317486116,0.1)); #18075=CARTESIAN_POINT('Origin',(-1.63297469645716,-3.18970252457299,0.)); #18076=CARTESIAN_POINT('',(-1.63297469645716,-3.34870714091428,0.)); #18077=CARTESIAN_POINT('',(-1.63297469645716,-3.18970252457299,0.)); #18078=CARTESIAN_POINT('',(-1.63297469645716,-3.34870714091428,0.)); #18079=CARTESIAN_POINT('',(-1.63297469645716,-3.34870714091428,0.1)); #18080=CARTESIAN_POINT('',(-1.63297469645716,-3.34870714091428,0.)); #18081=CARTESIAN_POINT('',(-1.63297469645716,-3.18970252457299,0.1)); #18082=CARTESIAN_POINT('',(-1.63297469645716,-3.34870714091428,0.1)); #18083=CARTESIAN_POINT('',(-1.63297469645716,-3.18970252457299,0.)); #18084=CARTESIAN_POINT('Origin',(-1.60618774165236,-3.18970252457299,0.)); #18085=CARTESIAN_POINT('',(-1.60618774165236,-3.18970252457299,0.)); #18086=CARTESIAN_POINT('',(-1.63297469645716,-3.18970252457299,0.)); #18087=CARTESIAN_POINT('',(-1.60618774165236,-3.18970252457299,0.1)); #18088=CARTESIAN_POINT('',(-1.63297469645716,-3.18970252457299,0.1)); #18089=CARTESIAN_POINT('',(-1.60618774165236,-3.18970252457299,0.)); #18090=CARTESIAN_POINT('Origin',(-1.60618774165236,-3.34870714091428,0.)); #18091=CARTESIAN_POINT('',(-1.60618774165236,-3.34870714091428,0.)); #18092=CARTESIAN_POINT('',(-1.60618774165236,-3.18970252457299,0.)); #18093=CARTESIAN_POINT('',(-1.60618774165236,-3.34870714091428,0.1)); #18094=CARTESIAN_POINT('',(-1.60618774165236,-3.18970252457299,0.1)); #18095=CARTESIAN_POINT('',(-1.60618774165236,-3.34870714091428,0.)); #18096=CARTESIAN_POINT('Origin',(-1.63297469645716,-3.34870714091428,0.)); #18097=CARTESIAN_POINT('',(-1.60618774165236,-3.34870714091428,0.)); #18098=CARTESIAN_POINT('',(-1.60618774165236,-3.34870714091428,0.1)); #18099=CARTESIAN_POINT('Origin',(-1.61958121905476,-3.26920483274363,0.)); #18100=CARTESIAN_POINT('Origin',(-1.61958121905476,-3.26920483274363,0.1)); #18101=CARTESIAN_POINT('Ctrl Pts',(-1.99064922760068,-3.21717632437278, 0.)); #18102=CARTESIAN_POINT('Ctrl Pts',(-1.99064922760068,-3.21717632437278, 0.1)); #18103=CARTESIAN_POINT('Ctrl Pts',(-1.98601302388447,-3.21717632437278, 0.)); #18104=CARTESIAN_POINT('Ctrl Pts',(-1.98601302388447,-3.21717632437278, 0.1)); #18105=CARTESIAN_POINT('Ctrl Pts',(-1.97931628518327,-3.21751974687028, 0.)); #18106=CARTESIAN_POINT('Ctrl Pts',(-1.97931628518327,-3.21751974687028, 0.1)); #18107=CARTESIAN_POINT('Ctrl Pts',(-1.97622548270579,-3.21837830311402, 0.)); #18108=CARTESIAN_POINT('Ctrl Pts',(-1.97622548270579,-3.21837830311402, 0.1)); #18109=CARTESIAN_POINT('',(-1.97622548270579,-3.21837830311402,0.)); #18110=CARTESIAN_POINT('',(-1.99064922760068,-3.21717632437278,0.)); #18111=CARTESIAN_POINT('Ctrl Pts',(-1.97622548270579,-3.21837830311402, 0.)); #18112=CARTESIAN_POINT('Ctrl Pts',(-1.97931628518327,-3.21751974687028, 0.)); #18113=CARTESIAN_POINT('Ctrl Pts',(-1.98601302388447,-3.21717632437278, 0.)); #18114=CARTESIAN_POINT('Ctrl Pts',(-1.99064922760068,-3.21717632437278, 0.)); #18115=CARTESIAN_POINT('',(-1.97622548270579,-3.21837830311402,0.1)); #18116=CARTESIAN_POINT('',(-1.97622548270579,-3.21837830311402,0.)); #18117=CARTESIAN_POINT('',(-1.99064922760068,-3.21717632437278,0.1)); #18118=CARTESIAN_POINT('Ctrl Pts',(-1.99064922760068,-3.21717632437278, 0.1)); #18119=CARTESIAN_POINT('Ctrl Pts',(-1.98601302388447,-3.21717632437278, 0.1)); #18120=CARTESIAN_POINT('Ctrl Pts',(-1.97931628518327,-3.21751974687028, 0.1)); #18121=CARTESIAN_POINT('Ctrl Pts',(-1.97622548270579,-3.21837830311402, 0.1)); #18122=CARTESIAN_POINT('',(-1.99064922760068,-3.21717632437278,0.)); #18123=CARTESIAN_POINT('Ctrl Pts',(-2.03237506104662,-3.23589285048639, 0.)); #18124=CARTESIAN_POINT('Ctrl Pts',(-2.03237506104662,-3.23589285048639, 0.1)); #18125=CARTESIAN_POINT('Ctrl Pts',(-2.02275923111669,-3.22662044305396, 0.)); #18126=CARTESIAN_POINT('Ctrl Pts',(-2.02275923111669,-3.22662044305396, 0.1)); #18127=CARTESIAN_POINT('Ctrl Pts',(-2.00146703627185,-3.21717632437278, 0.)); #18128=CARTESIAN_POINT('Ctrl Pts',(-2.00146703627185,-3.21717632437278, 0.1)); #18129=CARTESIAN_POINT('Ctrl Pts',(-1.99064922760068,-3.21717632437278, 0.)); #18130=CARTESIAN_POINT('Ctrl Pts',(-1.99064922760068,-3.21717632437278, 0.1)); #18131=CARTESIAN_POINT('',(-2.03237506104662,-3.23589285048639,0.)); #18132=CARTESIAN_POINT('Ctrl Pts',(-1.99064922760068,-3.21717632437278, 0.)); #18133=CARTESIAN_POINT('Ctrl Pts',(-2.00146703627185,-3.21717632437278, 0.)); #18134=CARTESIAN_POINT('Ctrl Pts',(-2.02275923111669,-3.22662044305396, 0.)); #18135=CARTESIAN_POINT('Ctrl Pts',(-2.03237506104662,-3.23589285048639, 0.)); #18136=CARTESIAN_POINT('',(-2.03237506104662,-3.23589285048639,0.1)); #18137=CARTESIAN_POINT('Ctrl Pts',(-2.03237506104662,-3.23589285048639, 0.1)); #18138=CARTESIAN_POINT('Ctrl Pts',(-2.02275923111669,-3.22662044305396, 0.1)); #18139=CARTESIAN_POINT('Ctrl Pts',(-2.00146703627185,-3.21717632437278, 0.1)); #18140=CARTESIAN_POINT('Ctrl Pts',(-1.99064922760068,-3.21717632437278, 0.1)); #18141=CARTESIAN_POINT('',(-2.03237506104662,-3.23589285048639,0.)); #18142=CARTESIAN_POINT('Origin',(-2.03237506104662,-3.34870714091428,0.)); #18143=CARTESIAN_POINT('',(-2.03237506104662,-3.34870714091428,0.)); #18144=CARTESIAN_POINT('',(-2.03237506104662,-3.23589285048639,0.)); #18145=CARTESIAN_POINT('',(-2.03237506104662,-3.34870714091428,0.1)); #18146=CARTESIAN_POINT('',(-2.03237506104662,-3.23589285048639,0.1)); #18147=CARTESIAN_POINT('',(-2.03237506104662,-3.34870714091428,0.)); #18148=CARTESIAN_POINT('Origin',(-2.05916201585141,-3.34870714091428,0.)); #18149=CARTESIAN_POINT('',(-2.05916201585141,-3.34870714091428,0.)); #18150=CARTESIAN_POINT('',(-2.03237506104662,-3.34870714091428,0.)); #18151=CARTESIAN_POINT('',(-2.05916201585141,-3.34870714091428,0.1)); #18152=CARTESIAN_POINT('',(-2.03237506104662,-3.34870714091428,0.1)); #18153=CARTESIAN_POINT('',(-2.05916201585141,-3.34870714091428,0.)); #18154=CARTESIAN_POINT('Origin',(-2.05916201585141,-3.18970252457299,0.)); #18155=CARTESIAN_POINT('',(-2.05916201585141,-3.18970252457299,0.)); #18156=CARTESIAN_POINT('',(-2.05916201585141,-3.34870714091428,0.)); #18157=CARTESIAN_POINT('',(-2.05916201585141,-3.18970252457299,0.1)); #18158=CARTESIAN_POINT('',(-2.05916201585141,-3.34870714091428,0.1)); #18159=CARTESIAN_POINT('',(-2.05916201585141,-3.18970252457299,0.)); #18160=CARTESIAN_POINT('Origin',(-2.03237506104662,-3.18970252457299,0.)); #18161=CARTESIAN_POINT('',(-2.03237506104662,-3.18970252457299,0.)); #18162=CARTESIAN_POINT('',(-2.05916201585141,-3.18970252457299,0.)); #18163=CARTESIAN_POINT('',(-2.03237506104662,-3.18970252457299,0.1)); #18164=CARTESIAN_POINT('',(-2.05916201585141,-3.18970252457299,0.1)); #18165=CARTESIAN_POINT('',(-2.03237506104662,-3.18970252457299,0.)); #18166=CARTESIAN_POINT('Origin',(-2.03237506104662,-3.21339867690031,0.)); #18167=CARTESIAN_POINT('',(-2.03237506104662,-3.21339867690031,0.)); #18168=CARTESIAN_POINT('',(-2.03237506104662,-3.18970252457299,0.)); #18169=CARTESIAN_POINT('',(-2.03237506104662,-3.21339867690031,0.1)); #18170=CARTESIAN_POINT('',(-2.03237506104662,-3.18970252457299,0.1)); #18171=CARTESIAN_POINT('',(-2.03237506104662,-3.21339867690031,0.)); #18172=CARTESIAN_POINT('Ctrl Pts',(-1.98566960138697,-3.18970252457299, 0.)); #18173=CARTESIAN_POINT('Ctrl Pts',(-1.98566960138697,-3.18970252457299, 0.1)); #18174=CARTESIAN_POINT('Ctrl Pts',(-1.99597227631189,-3.18970252457299, 0.)); #18175=CARTESIAN_POINT('Ctrl Pts',(-1.99597227631189,-3.18970252457299, 0.1)); #18176=CARTESIAN_POINT('Ctrl Pts',(-2.01777960490298,-3.20034862199541, 0.)); #18177=CARTESIAN_POINT('Ctrl Pts',(-2.01777960490298,-3.20034862199541, 0.1)); #18178=CARTESIAN_POINT('Ctrl Pts',(-2.03237506104662,-3.21339867690031, 0.)); #18179=CARTESIAN_POINT('Ctrl Pts',(-2.03237506104662,-3.21339867690031, 0.1)); #18180=CARTESIAN_POINT('',(-1.98566960138697,-3.18970252457299,0.)); #18181=CARTESIAN_POINT('Ctrl Pts',(-2.03237506104662,-3.21339867690031, 0.)); #18182=CARTESIAN_POINT('Ctrl Pts',(-2.01777960490298,-3.20034862199541, 0.)); #18183=CARTESIAN_POINT('Ctrl Pts',(-1.99597227631189,-3.18970252457299, 0.)); #18184=CARTESIAN_POINT('Ctrl Pts',(-1.98566960138697,-3.18970252457299, 0.)); #18185=CARTESIAN_POINT('',(-1.98566960138697,-3.18970252457299,0.1)); #18186=CARTESIAN_POINT('Ctrl Pts',(-1.98566960138697,-3.18970252457299, 0.1)); #18187=CARTESIAN_POINT('Ctrl Pts',(-1.99597227631189,-3.18970252457299, 0.1)); #18188=CARTESIAN_POINT('Ctrl Pts',(-2.01777960490298,-3.20034862199541, 0.1)); #18189=CARTESIAN_POINT('Ctrl Pts',(-2.03237506104662,-3.21339867690031, 0.1)); #18190=CARTESIAN_POINT('',(-1.98566960138697,-3.18970252457299,0.)); #18191=CARTESIAN_POINT('Ctrl Pts',(-1.9748517927158,-3.19056108081673,0.)); #18192=CARTESIAN_POINT('Ctrl Pts',(-1.9748517927158,-3.19056108081673,0.1)); #18193=CARTESIAN_POINT('Ctrl Pts',(-1.97742746144703,-3.19004594707049, 0.)); #18194=CARTESIAN_POINT('Ctrl Pts',(-1.97742746144703,-3.19004594707049, 0.1)); #18195=CARTESIAN_POINT('Ctrl Pts',(-1.981548531417,-3.18970252457299,0.)); #18196=CARTESIAN_POINT('Ctrl Pts',(-1.981548531417,-3.18970252457299,0.1)); #18197=CARTESIAN_POINT('Ctrl Pts',(-1.98566960138697,-3.18970252457299, 0.)); #18198=CARTESIAN_POINT('Ctrl Pts',(-1.98566960138697,-3.18970252457299, 0.1)); #18199=CARTESIAN_POINT('',(-1.9748517927158,-3.19056108081673,0.)); #18200=CARTESIAN_POINT('Ctrl Pts',(-1.98566960138697,-3.18970252457299, 0.)); #18201=CARTESIAN_POINT('Ctrl Pts',(-1.981548531417,-3.18970252457299,0.)); #18202=CARTESIAN_POINT('Ctrl Pts',(-1.97742746144703,-3.19004594707049, 0.)); #18203=CARTESIAN_POINT('Ctrl Pts',(-1.9748517927158,-3.19056108081673,0.)); #18204=CARTESIAN_POINT('',(-1.9748517927158,-3.19056108081673,0.1)); #18205=CARTESIAN_POINT('Ctrl Pts',(-1.9748517927158,-3.19056108081673,0.1)); #18206=CARTESIAN_POINT('Ctrl Pts',(-1.97742746144703,-3.19004594707049, 0.1)); #18207=CARTESIAN_POINT('Ctrl Pts',(-1.981548531417,-3.18970252457299,0.1)); #18208=CARTESIAN_POINT('Ctrl Pts',(-1.98566960138697,-3.18970252457299, 0.1)); #18209=CARTESIAN_POINT('',(-1.9748517927158,-3.19056108081673,0.)); #18210=CARTESIAN_POINT('Origin',(-1.9748517927158,-3.21837830311402,0.)); #18211=CARTESIAN_POINT('',(-1.9748517927158,-3.21837830311402,0.)); #18212=CARTESIAN_POINT('',(-1.9748517927158,-3.19056108081673,0.)); #18213=CARTESIAN_POINT('',(-1.9748517927158,-3.21837830311402,0.1)); #18214=CARTESIAN_POINT('',(-1.9748517927158,-3.19056108081673,0.1)); #18215=CARTESIAN_POINT('',(-1.9748517927158,-3.21837830311402,0.)); #18216=CARTESIAN_POINT('Origin',(-1.97622548270579,-3.21837830311402,0.)); #18217=CARTESIAN_POINT('',(-1.9748517927158,-3.21837830311402,0.)); #18218=CARTESIAN_POINT('',(-1.9748517927158,-3.21837830311402,0.1)); #18219=CARTESIAN_POINT('Origin',(-2.03398607925162,-3.2554340607523,0.)); #18220=CARTESIAN_POINT('Origin',(-2.03398607925162,-3.2554340607523,0.1)); #18221=CARTESIAN_POINT('Ctrl Pts',(-2.30213343283081,-3.26954825524113, 0.)); #18222=CARTESIAN_POINT('Ctrl Pts',(-2.30213343283081,-3.26954825524113, 0.1)); #18223=CARTESIAN_POINT('Ctrl Pts',(-2.30213343283081,-3.29049702758847, 0.)); #18224=CARTESIAN_POINT('Ctrl Pts',(-2.30213343283081,-3.29049702758847, 0.1)); #18225=CARTESIAN_POINT('Ctrl Pts',(-2.29131562415964,-3.32174847486074, 0.)); #18226=CARTESIAN_POINT('Ctrl Pts',(-2.29131562415964,-3.32174847486074, 0.1)); #18227=CARTESIAN_POINT('Ctrl Pts',(-2.28152808298097,-3.33187943853691, 0.)); #18228=CARTESIAN_POINT('Ctrl Pts',(-2.28152808298097,-3.33187943853691, 0.1)); #18229=CARTESIAN_POINT('',(-2.28152808298097,-3.33187943853691,0.)); #18230=CARTESIAN_POINT('',(-2.30213343283081,-3.26954825524113,0.)); #18231=CARTESIAN_POINT('Ctrl Pts',(-2.28152808298097,-3.33187943853691, 0.)); #18232=CARTESIAN_POINT('Ctrl Pts',(-2.29131562415964,-3.32174847486074, 0.)); #18233=CARTESIAN_POINT('Ctrl Pts',(-2.30213343283081,-3.29049702758847, 0.)); #18234=CARTESIAN_POINT('Ctrl Pts',(-2.30213343283081,-3.26954825524113, 0.)); #18235=CARTESIAN_POINT('',(-2.28152808298097,-3.33187943853691,0.1)); #18236=CARTESIAN_POINT('',(-2.28152808298097,-3.33187943853691,0.)); #18237=CARTESIAN_POINT('',(-2.30213343283081,-3.26954825524113,0.1)); #18238=CARTESIAN_POINT('Ctrl Pts',(-2.30213343283081,-3.26954825524113, 0.1)); #18239=CARTESIAN_POINT('Ctrl Pts',(-2.30213343283081,-3.29049702758847, 0.1)); #18240=CARTESIAN_POINT('Ctrl Pts',(-2.29131562415964,-3.32174847486074, 0.1)); #18241=CARTESIAN_POINT('Ctrl Pts',(-2.28152808298097,-3.33187943853691, 0.1)); #18242=CARTESIAN_POINT('',(-2.30213343283081,-3.26954825524113,0.)); #18243=CARTESIAN_POINT('Ctrl Pts',(-2.28152808298097,-3.2077322056916,0.)); #18244=CARTESIAN_POINT('Ctrl Pts',(-2.28152808298097,-3.2077322056916,0.1)); #18245=CARTESIAN_POINT('Ctrl Pts',(-2.29097220166215,-3.21803488061652, 0.)); #18246=CARTESIAN_POINT('Ctrl Pts',(-2.29097220166215,-3.21803488061652, 0.1)); #18247=CARTESIAN_POINT('Ctrl Pts',(-2.30213343283081,-3.24859948289379, 0.)); #18248=CARTESIAN_POINT('Ctrl Pts',(-2.30213343283081,-3.24859948289379, 0.1)); #18249=CARTESIAN_POINT('Ctrl Pts',(-2.30213343283081,-3.26954825524113, 0.)); #18250=CARTESIAN_POINT('Ctrl Pts',(-2.30213343283081,-3.26954825524113, 0.1)); #18251=CARTESIAN_POINT('',(-2.28152808298097,-3.2077322056916,0.)); #18252=CARTESIAN_POINT('Ctrl Pts',(-2.30213343283081,-3.26954825524113, 0.)); #18253=CARTESIAN_POINT('Ctrl Pts',(-2.30213343283081,-3.24859948289379, 0.)); #18254=CARTESIAN_POINT('Ctrl Pts',(-2.29097220166215,-3.21803488061652, 0.)); #18255=CARTESIAN_POINT('Ctrl Pts',(-2.28152808298097,-3.2077322056916,0.)); #18256=CARTESIAN_POINT('',(-2.28152808298097,-3.2077322056916,0.1)); #18257=CARTESIAN_POINT('Ctrl Pts',(-2.28152808298097,-3.2077322056916,0.1)); #18258=CARTESIAN_POINT('Ctrl Pts',(-2.29097220166215,-3.21803488061652, 0.1)); #18259=CARTESIAN_POINT('Ctrl Pts',(-2.30213343283081,-3.24859948289379, 0.1)); #18260=CARTESIAN_POINT('Ctrl Pts',(-2.30213343283081,-3.26954825524113, 0.1)); #18261=CARTESIAN_POINT('',(-2.28152808298097,-3.2077322056916,0.)); #18262=CARTESIAN_POINT('Ctrl Pts',(-2.22795417337138,-3.18609658834927, 0.)); #18263=CARTESIAN_POINT('Ctrl Pts',(-2.22795417337138,-3.18609658834927, 0.1)); #18264=CARTESIAN_POINT('Ctrl Pts',(-2.24409503075375,-3.18609658834927, 0.)); #18265=CARTESIAN_POINT('Ctrl Pts',(-2.24409503075375,-3.18609658834927, 0.1)); #18266=CARTESIAN_POINT('Ctrl Pts',(-2.27208396429979,-3.19725781951793, 0.)); #18267=CARTESIAN_POINT('Ctrl Pts',(-2.27208396429979,-3.19725781951793, 0.1)); #18268=CARTESIAN_POINT('Ctrl Pts',(-2.28152808298097,-3.2077322056916,0.)); #18269=CARTESIAN_POINT('Ctrl Pts',(-2.28152808298097,-3.2077322056916,0.1)); #18270=CARTESIAN_POINT('',(-2.22795417337138,-3.18609658834927,0.)); #18271=CARTESIAN_POINT('Ctrl Pts',(-2.28152808298097,-3.2077322056916,0.)); #18272=CARTESIAN_POINT('Ctrl Pts',(-2.27208396429979,-3.19725781951793, 0.)); #18273=CARTESIAN_POINT('Ctrl Pts',(-2.24409503075375,-3.18609658834927, 0.)); #18274=CARTESIAN_POINT('Ctrl Pts',(-2.22795417337138,-3.18609658834927, 0.)); #18275=CARTESIAN_POINT('',(-2.22795417337138,-3.18609658834927,0.1)); #18276=CARTESIAN_POINT('Ctrl Pts',(-2.22795417337138,-3.18609658834927, 0.1)); #18277=CARTESIAN_POINT('Ctrl Pts',(-2.24409503075375,-3.18609658834927, 0.1)); #18278=CARTESIAN_POINT('Ctrl Pts',(-2.27208396429979,-3.19725781951793, 0.1)); #18279=CARTESIAN_POINT('Ctrl Pts',(-2.28152808298097,-3.2077322056916,0.1)); #18280=CARTESIAN_POINT('',(-2.22795417337138,-3.18609658834927,0.)); #18281=CARTESIAN_POINT('Ctrl Pts',(-2.18107700246298,-3.19828808701043, 0.)); #18282=CARTESIAN_POINT('Ctrl Pts',(-2.18107700246298,-3.19828808701043, 0.1)); #18283=CARTESIAN_POINT('Ctrl Pts',(-2.19052112114416,-3.19348017204546, 0.)); #18284=CARTESIAN_POINT('Ctrl Pts',(-2.19052112114416,-3.19348017204546, 0.1)); #18285=CARTESIAN_POINT('Ctrl Pts',(-2.21490411846648,-3.18609658834927, 0.)); #18286=CARTESIAN_POINT('Ctrl Pts',(-2.21490411846648,-3.18609658834927, 0.1)); #18287=CARTESIAN_POINT('Ctrl Pts',(-2.22795417337138,-3.18609658834927, 0.)); #18288=CARTESIAN_POINT('Ctrl Pts',(-2.22795417337138,-3.18609658834927, 0.1)); #18289=CARTESIAN_POINT('',(-2.18107700246298,-3.19828808701043,0.)); #18290=CARTESIAN_POINT('Ctrl Pts',(-2.22795417337138,-3.18609658834927, 0.)); #18291=CARTESIAN_POINT('Ctrl Pts',(-2.21490411846648,-3.18609658834927, 0.)); #18292=CARTESIAN_POINT('Ctrl Pts',(-2.19052112114416,-3.19348017204546, 0.)); #18293=CARTESIAN_POINT('Ctrl Pts',(-2.18107700246298,-3.19828808701043, 0.)); #18294=CARTESIAN_POINT('',(-2.18107700246298,-3.19828808701043,0.1)); #18295=CARTESIAN_POINT('Ctrl Pts',(-2.18107700246298,-3.19828808701043, 0.1)); #18296=CARTESIAN_POINT('Ctrl Pts',(-2.19052112114416,-3.19348017204546, 0.1)); #18297=CARTESIAN_POINT('Ctrl Pts',(-2.21490411846648,-3.18609658834927, 0.1)); #18298=CARTESIAN_POINT('Ctrl Pts',(-2.22795417337138,-3.18609658834927, 0.1)); #18299=CARTESIAN_POINT('',(-2.18107700246298,-3.19828808701043,0.)); #18300=CARTESIAN_POINT('Origin',(-2.18107700246298,-3.22833755554145,0.)); #18301=CARTESIAN_POINT('',(-2.18107700246298,-3.22833755554145,0.)); #18302=CARTESIAN_POINT('',(-2.18107700246298,-3.19828808701043,0.)); #18303=CARTESIAN_POINT('',(-2.18107700246298,-3.22833755554145,0.1)); #18304=CARTESIAN_POINT('',(-2.18107700246298,-3.19828808701043,0.1)); #18305=CARTESIAN_POINT('',(-2.18107700246298,-3.22833755554145,0.)); #18306=CARTESIAN_POINT('Origin',(-2.18262240370172,-3.22833755554145,0.)); #18307=CARTESIAN_POINT('',(-2.18262240370172,-3.22833755554145,0.)); #18308=CARTESIAN_POINT('',(-2.18107700246298,-3.22833755554145,0.)); #18309=CARTESIAN_POINT('',(-2.18262240370172,-3.22833755554145,0.1)); #18310=CARTESIAN_POINT('',(-2.18107700246298,-3.22833755554145,0.1)); #18311=CARTESIAN_POINT('',(-2.18262240370172,-3.22833755554145,0.)); #18312=CARTESIAN_POINT('Ctrl Pts',(-2.20082379606908,-3.21648947937779, 0.)); #18313=CARTESIAN_POINT('Ctrl Pts',(-2.20082379606908,-3.21648947937779, 0.1)); #18314=CARTESIAN_POINT('Ctrl Pts',(-2.19447047986538,-3.21975199310401, 0.)); #18315=CARTESIAN_POINT('Ctrl Pts',(-2.19447047986538,-3.21975199310401, 0.1)); #18316=CARTESIAN_POINT('Ctrl Pts',(-2.18554149493045,-3.22593359805897, 0.)); #18317=CARTESIAN_POINT('Ctrl Pts',(-2.18554149493045,-3.22593359805897, 0.1)); #18318=CARTESIAN_POINT('Ctrl Pts',(-2.18262240370172,-3.22833755554145, 0.)); #18319=CARTESIAN_POINT('Ctrl Pts',(-2.18262240370172,-3.22833755554145, 0.1)); #18320=CARTESIAN_POINT('',(-2.20082379606908,-3.21648947937779,0.)); #18321=CARTESIAN_POINT('Ctrl Pts',(-2.18262240370172,-3.22833755554145, 0.)); #18322=CARTESIAN_POINT('Ctrl Pts',(-2.18554149493045,-3.22593359805897, 0.)); #18323=CARTESIAN_POINT('Ctrl Pts',(-2.19447047986538,-3.21975199310401, 0.)); #18324=CARTESIAN_POINT('Ctrl Pts',(-2.20082379606908,-3.21648947937779, 0.)); #18325=CARTESIAN_POINT('',(-2.20082379606908,-3.21648947937779,0.1)); #18326=CARTESIAN_POINT('Ctrl Pts',(-2.20082379606908,-3.21648947937779, 0.1)); #18327=CARTESIAN_POINT('Ctrl Pts',(-2.19447047986538,-3.21975199310401, 0.1)); #18328=CARTESIAN_POINT('Ctrl Pts',(-2.18554149493045,-3.22593359805897, 0.1)); #18329=CARTESIAN_POINT('Ctrl Pts',(-2.18262240370172,-3.22833755554145, 0.1)); #18330=CARTESIAN_POINT('',(-2.20082379606908,-3.21648947937779,0.)); #18331=CARTESIAN_POINT('Ctrl Pts',(-2.22846930711762,-3.20944931817909, 0.)); #18332=CARTESIAN_POINT('Ctrl Pts',(-2.22846930711762,-3.20944931817909, 0.1)); #18333=CARTESIAN_POINT('Ctrl Pts',(-2.22160085716768,-3.20944931817909, 0.)); #18334=CARTESIAN_POINT('Ctrl Pts',(-2.22160085716768,-3.20944931817909, 0.1)); #18335=CARTESIAN_POINT('Ctrl Pts',(-2.20649026727779,-3.21374209939781, 0.)); #18336=CARTESIAN_POINT('Ctrl Pts',(-2.20649026727779,-3.21374209939781, 0.1)); #18337=CARTESIAN_POINT('Ctrl Pts',(-2.20082379606908,-3.21648947937779, 0.)); #18338=CARTESIAN_POINT('Ctrl Pts',(-2.20082379606908,-3.21648947937779, 0.1)); #18339=CARTESIAN_POINT('',(-2.22846930711762,-3.20944931817909,0.)); #18340=CARTESIAN_POINT('Ctrl Pts',(-2.20082379606908,-3.21648947937779, 0.)); #18341=CARTESIAN_POINT('Ctrl Pts',(-2.20649026727779,-3.21374209939781, 0.)); #18342=CARTESIAN_POINT('Ctrl Pts',(-2.22160085716768,-3.20944931817909, 0.)); #18343=CARTESIAN_POINT('Ctrl Pts',(-2.22846930711762,-3.20944931817909, 0.)); #18344=CARTESIAN_POINT('',(-2.22846930711762,-3.20944931817909,0.1)); #18345=CARTESIAN_POINT('Ctrl Pts',(-2.22846930711762,-3.20944931817909, 0.1)); #18346=CARTESIAN_POINT('Ctrl Pts',(-2.22160085716768,-3.20944931817909, 0.1)); #18347=CARTESIAN_POINT('Ctrl Pts',(-2.20649026727779,-3.21374209939781, 0.1)); #18348=CARTESIAN_POINT('Ctrl Pts',(-2.20082379606908,-3.21648947937779, 0.1)); #18349=CARTESIAN_POINT('',(-2.22846930711762,-3.20944931817909,0.)); #18350=CARTESIAN_POINT('Ctrl Pts',(-2.27448792178227,-3.26954825524113, 0.)); #18351=CARTESIAN_POINT('Ctrl Pts',(-2.27448792178227,-3.26954825524113, 0.1)); #18352=CARTESIAN_POINT('Ctrl Pts',(-2.27448792178227,-3.2408724767001,0.)); #18353=CARTESIAN_POINT('Ctrl Pts',(-2.27448792178227,-3.2408724767001,0.1)); #18354=CARTESIAN_POINT('Ctrl Pts',(-2.24924636821622,-3.20944931817909, 0.)); #18355=CARTESIAN_POINT('Ctrl Pts',(-2.24924636821622,-3.20944931817909, 0.1)); #18356=CARTESIAN_POINT('Ctrl Pts',(-2.22846930711762,-3.20944931817909, 0.)); #18357=CARTESIAN_POINT('Ctrl Pts',(-2.22846930711762,-3.20944931817909, 0.1)); #18358=CARTESIAN_POINT('',(-2.27448792178227,-3.26954825524113,0.)); #18359=CARTESIAN_POINT('Ctrl Pts',(-2.22846930711762,-3.20944931817909, 0.)); #18360=CARTESIAN_POINT('Ctrl Pts',(-2.24924636821622,-3.20944931817909, 0.)); #18361=CARTESIAN_POINT('Ctrl Pts',(-2.27448792178227,-3.2408724767001,0.)); #18362=CARTESIAN_POINT('Ctrl Pts',(-2.27448792178227,-3.26954825524113, 0.)); #18363=CARTESIAN_POINT('',(-2.27448792178227,-3.26954825524113,0.1)); #18364=CARTESIAN_POINT('Ctrl Pts',(-2.27448792178227,-3.26954825524113, 0.1)); #18365=CARTESIAN_POINT('Ctrl Pts',(-2.27448792178227,-3.2408724767001,0.1)); #18366=CARTESIAN_POINT('Ctrl Pts',(-2.24924636821622,-3.20944931817909, 0.1)); #18367=CARTESIAN_POINT('Ctrl Pts',(-2.22846930711762,-3.20944931817909, 0.1)); #18368=CARTESIAN_POINT('',(-2.27448792178227,-3.26954825524113,0.)); #18369=CARTESIAN_POINT('Ctrl Pts',(-2.22846930711762,-3.32896034730818, 0.)); #18370=CARTESIAN_POINT('Ctrl Pts',(-2.22846930711762,-3.32896034730818, 0.1)); #18371=CARTESIAN_POINT('Ctrl Pts',(-2.25010492445996,-3.32896034730818, 0.)); #18372=CARTESIAN_POINT('Ctrl Pts',(-2.25010492445996,-3.32896034730818, 0.1)); #18373=CARTESIAN_POINT('Ctrl Pts',(-2.27448792178227,-3.29753718878717, 0.)); #18374=CARTESIAN_POINT('Ctrl Pts',(-2.27448792178227,-3.29753718878717, 0.1)); #18375=CARTESIAN_POINT('Ctrl Pts',(-2.27448792178227,-3.26954825524113, 0.)); #18376=CARTESIAN_POINT('Ctrl Pts',(-2.27448792178227,-3.26954825524113, 0.1)); #18377=CARTESIAN_POINT('',(-2.22846930711762,-3.32896034730818,0.)); #18378=CARTESIAN_POINT('Ctrl Pts',(-2.27448792178227,-3.26954825524113, 0.)); #18379=CARTESIAN_POINT('Ctrl Pts',(-2.27448792178227,-3.29753718878717, 0.)); #18380=CARTESIAN_POINT('Ctrl Pts',(-2.25010492445996,-3.32896034730818, 0.)); #18381=CARTESIAN_POINT('Ctrl Pts',(-2.22846930711762,-3.32896034730818, 0.)); #18382=CARTESIAN_POINT('',(-2.22846930711762,-3.32896034730818,0.1)); #18383=CARTESIAN_POINT('Ctrl Pts',(-2.22846930711762,-3.32896034730818, 0.1)); #18384=CARTESIAN_POINT('Ctrl Pts',(-2.25010492445996,-3.32896034730818, 0.1)); #18385=CARTESIAN_POINT('Ctrl Pts',(-2.27448792178227,-3.29753718878717, 0.1)); #18386=CARTESIAN_POINT('Ctrl Pts',(-2.27448792178227,-3.26954825524113, 0.1)); #18387=CARTESIAN_POINT('',(-2.22846930711762,-3.32896034730818,0.)); #18388=CARTESIAN_POINT('Ctrl Pts',(-2.18262240370172,-3.30972868744833, 0.)); #18389=CARTESIAN_POINT('Ctrl Pts',(-2.18262240370172,-3.30972868744833, 0.1)); #18390=CARTESIAN_POINT('Ctrl Pts',(-2.1917230998854,-3.31814253863701,0.)); #18391=CARTESIAN_POINT('Ctrl Pts',(-2.1917230998854,-3.31814253863701,0.1)); #18392=CARTESIAN_POINT('Ctrl Pts',(-2.21541925221272,-3.32896034730818, 0.)); #18393=CARTESIAN_POINT('Ctrl Pts',(-2.21541925221272,-3.32896034730818, 0.1)); #18394=CARTESIAN_POINT('Ctrl Pts',(-2.22846930711762,-3.32896034730818, 0.)); #18395=CARTESIAN_POINT('Ctrl Pts',(-2.22846930711762,-3.32896034730818, 0.1)); #18396=CARTESIAN_POINT('',(-2.18262240370172,-3.30972868744833,0.)); #18397=CARTESIAN_POINT('Ctrl Pts',(-2.22846930711762,-3.32896034730818, 0.)); #18398=CARTESIAN_POINT('Ctrl Pts',(-2.21541925221272,-3.32896034730818, 0.)); #18399=CARTESIAN_POINT('Ctrl Pts',(-2.1917230998854,-3.31814253863701,0.)); #18400=CARTESIAN_POINT('Ctrl Pts',(-2.18262240370172,-3.30972868744833, 0.)); #18401=CARTESIAN_POINT('',(-2.18262240370172,-3.30972868744833,0.1)); #18402=CARTESIAN_POINT('Ctrl Pts',(-2.18262240370172,-3.30972868744833, 0.1)); #18403=CARTESIAN_POINT('Ctrl Pts',(-2.1917230998854,-3.31814253863701,0.1)); #18404=CARTESIAN_POINT('Ctrl Pts',(-2.21541925221272,-3.32896034730818, 0.1)); #18405=CARTESIAN_POINT('Ctrl Pts',(-2.22846930711762,-3.32896034730818, 0.1)); #18406=CARTESIAN_POINT('',(-2.18262240370172,-3.30972868744833,0.)); #18407=CARTESIAN_POINT('Origin',(-2.18107700246298,-3.30972868744833,0.)); #18408=CARTESIAN_POINT('',(-2.18107700246298,-3.30972868744833,0.)); #18409=CARTESIAN_POINT('',(-2.18262240370172,-3.30972868744833,0.)); #18410=CARTESIAN_POINT('',(-2.18107700246298,-3.30972868744833,0.1)); #18411=CARTESIAN_POINT('',(-2.18262240370172,-3.30972868744833,0.1)); #18412=CARTESIAN_POINT('',(-2.18107700246298,-3.30972868744833,0.)); #18413=CARTESIAN_POINT('Origin',(-2.18107700246298,-3.33977815597935,0.)); #18414=CARTESIAN_POINT('',(-2.18107700246298,-3.33977815597935,0.)); #18415=CARTESIAN_POINT('',(-2.18107700246298,-3.30972868744833,0.)); #18416=CARTESIAN_POINT('',(-2.18107700246298,-3.33977815597935,0.1)); #18417=CARTESIAN_POINT('',(-2.18107700246298,-3.30972868744833,0.1)); #18418=CARTESIAN_POINT('',(-2.18107700246298,-3.33977815597935,0.)); #18419=CARTESIAN_POINT('Ctrl Pts',(-2.20185406356158,-3.34819200716803, 0.)); #18420=CARTESIAN_POINT('Ctrl Pts',(-2.20185406356158,-3.34819200716803, 0.1)); #18421=CARTESIAN_POINT('Ctrl Pts',(-2.19704614859661,-3.34699002842679, 0.)); #18422=CARTESIAN_POINT('Ctrl Pts',(-2.19704614859661,-3.34699002842679, 0.1)); #18423=CARTESIAN_POINT('Ctrl Pts',(-2.1850263611842,-3.34166697971558,0.)); #18424=CARTESIAN_POINT('Ctrl Pts',(-2.1850263611842,-3.34166697971558,0.1)); #18425=CARTESIAN_POINT('Ctrl Pts',(-2.18107700246298,-3.33977815597935, 0.)); #18426=CARTESIAN_POINT('Ctrl Pts',(-2.18107700246298,-3.33977815597935, 0.1)); #18427=CARTESIAN_POINT('',(-2.20185406356158,-3.34819200716803,0.)); #18428=CARTESIAN_POINT('Ctrl Pts',(-2.18107700246298,-3.33977815597935, 0.)); #18429=CARTESIAN_POINT('Ctrl Pts',(-2.1850263611842,-3.34166697971558,0.)); #18430=CARTESIAN_POINT('Ctrl Pts',(-2.19704614859661,-3.34699002842679, 0.)); #18431=CARTESIAN_POINT('Ctrl Pts',(-2.20185406356158,-3.34819200716803, 0.)); #18432=CARTESIAN_POINT('',(-2.20185406356158,-3.34819200716803,0.1)); #18433=CARTESIAN_POINT('Ctrl Pts',(-2.20185406356158,-3.34819200716803, 0.1)); #18434=CARTESIAN_POINT('Ctrl Pts',(-2.19704614859661,-3.34699002842679, 0.1)); #18435=CARTESIAN_POINT('Ctrl Pts',(-2.1850263611842,-3.34166697971558,0.1)); #18436=CARTESIAN_POINT('Ctrl Pts',(-2.18107700246298,-3.33977815597935, 0.1)); #18437=CARTESIAN_POINT('',(-2.20185406356158,-3.34819200716803,0.)); #18438=CARTESIAN_POINT('Ctrl Pts',(-2.22795417337138,-3.352313077138,0.)); #18439=CARTESIAN_POINT('Ctrl Pts',(-2.22795417337138,-3.352313077138,0.1)); #18440=CARTESIAN_POINT('Ctrl Pts',(-2.21954032218269,-3.352313077138,0.)); #18441=CARTESIAN_POINT('Ctrl Pts',(-2.21954032218269,-3.352313077138,0.1)); #18442=CARTESIAN_POINT('Ctrl Pts',(-2.20872251351152,-3.35025254215302, 0.)); #18443=CARTESIAN_POINT('Ctrl Pts',(-2.20872251351152,-3.35025254215302, 0.1)); #18444=CARTESIAN_POINT('Ctrl Pts',(-2.20185406356158,-3.34819200716803, 0.)); #18445=CARTESIAN_POINT('Ctrl Pts',(-2.20185406356158,-3.34819200716803, 0.1)); #18446=CARTESIAN_POINT('',(-2.22795417337138,-3.352313077138,0.)); #18447=CARTESIAN_POINT('Ctrl Pts',(-2.20185406356158,-3.34819200716803, 0.)); #18448=CARTESIAN_POINT('Ctrl Pts',(-2.20872251351152,-3.35025254215302, 0.)); #18449=CARTESIAN_POINT('Ctrl Pts',(-2.21954032218269,-3.352313077138,0.)); #18450=CARTESIAN_POINT('Ctrl Pts',(-2.22795417337138,-3.352313077138,0.)); #18451=CARTESIAN_POINT('',(-2.22795417337138,-3.352313077138,0.1)); #18452=CARTESIAN_POINT('Ctrl Pts',(-2.22795417337138,-3.352313077138,0.1)); #18453=CARTESIAN_POINT('Ctrl Pts',(-2.21954032218269,-3.352313077138,0.1)); #18454=CARTESIAN_POINT('Ctrl Pts',(-2.20872251351152,-3.35025254215302, 0.1)); #18455=CARTESIAN_POINT('Ctrl Pts',(-2.20185406356158,-3.34819200716803, 0.1)); #18456=CARTESIAN_POINT('',(-2.22795417337138,-3.352313077138,0.)); #18457=CARTESIAN_POINT('Ctrl Pts',(-2.28152808298097,-3.33187943853691, 0.)); #18458=CARTESIAN_POINT('Ctrl Pts',(-2.28152808298097,-3.33187943853691, 0.1)); #18459=CARTESIAN_POINT('Ctrl Pts',(-2.27174054180229,-3.34218211346183, 0.)); #18460=CARTESIAN_POINT('Ctrl Pts',(-2.27174054180229,-3.34218211346183, 0.1)); #18461=CARTESIAN_POINT('Ctrl Pts',(-2.24443845325125,-3.352313077138,0.)); #18462=CARTESIAN_POINT('Ctrl Pts',(-2.24443845325125,-3.352313077138,0.1)); #18463=CARTESIAN_POINT('Ctrl Pts',(-2.22795417337138,-3.352313077138,0.)); #18464=CARTESIAN_POINT('Ctrl Pts',(-2.22795417337138,-3.352313077138,0.1)); #18465=CARTESIAN_POINT('Ctrl Pts',(-2.22795417337138,-3.352313077138,0.)); #18466=CARTESIAN_POINT('Ctrl Pts',(-2.24443845325125,-3.352313077138,0.)); #18467=CARTESIAN_POINT('Ctrl Pts',(-2.27174054180229,-3.34218211346183, 0.)); #18468=CARTESIAN_POINT('Ctrl Pts',(-2.28152808298097,-3.33187943853691, 0.)); #18469=CARTESIAN_POINT('Ctrl Pts',(-2.28152808298097,-3.33187943853691, 0.1)); #18470=CARTESIAN_POINT('Ctrl Pts',(-2.27174054180229,-3.34218211346183, 0.1)); #18471=CARTESIAN_POINT('Ctrl Pts',(-2.24443845325125,-3.352313077138,0.1)); #18472=CARTESIAN_POINT('Ctrl Pts',(-2.22795417337138,-3.352313077138,0.1)); #18473=CARTESIAN_POINT('Origin',(-2.24096566795819,-3.26937317486116,0.)); #18474=CARTESIAN_POINT('Origin',(-2.24096566795819,-3.26937317486116,0.1)); #18475=CARTESIAN_POINT('Origin',(-2.4283412006611,-3.25151857412252,0.)); #18476=CARTESIAN_POINT('',(-2.4283412006611,-3.25151857412252,0.)); #18477=CARTESIAN_POINT('',(-2.34437440002299,-3.25151857412252,0.)); #18478=CARTESIAN_POINT('',(-2.40591808194756,-3.25151857412252,0.)); #18479=CARTESIAN_POINT('',(-2.4283412006611,-3.25151857412252,0.1)); #18480=CARTESIAN_POINT('',(-2.4283412006611,-3.25151857412252,0.)); #18481=CARTESIAN_POINT('',(-2.34437440002299,-3.25151857412252,0.1)); #18482=CARTESIAN_POINT('',(-2.40591808194756,-3.25151857412252,0.1)); #18483=CARTESIAN_POINT('',(-2.34437440002299,-3.25151857412252,0.)); #18484=CARTESIAN_POINT('Ctrl Pts',(-2.4152911457562,-3.21975199310401,0.)); #18485=CARTESIAN_POINT('Ctrl Pts',(-2.4152911457562,-3.21975199310401,0.1)); #18486=CARTESIAN_POINT('Ctrl Pts',(-2.42130103946241,-3.22610530930771, 0.)); #18487=CARTESIAN_POINT('Ctrl Pts',(-2.42130103946241,-3.22610530930771, 0.1)); #18488=CARTESIAN_POINT('Ctrl Pts',(-2.42748264441736,-3.24138761044635, 0.)); #18489=CARTESIAN_POINT('Ctrl Pts',(-2.42748264441736,-3.24138761044635, 0.1)); #18490=CARTESIAN_POINT('Ctrl Pts',(-2.4283412006611,-3.25151857412252,0.)); #18491=CARTESIAN_POINT('Ctrl Pts',(-2.4283412006611,-3.25151857412252,0.1)); #18492=CARTESIAN_POINT('',(-2.4152911457562,-3.21975199310401,0.)); #18493=CARTESIAN_POINT('Ctrl Pts',(-2.4152911457562,-3.21975199310401,0.)); #18494=CARTESIAN_POINT('Ctrl Pts',(-2.42130103946241,-3.22610530930771, 0.)); #18495=CARTESIAN_POINT('Ctrl Pts',(-2.42748264441736,-3.24138761044635, 0.)); #18496=CARTESIAN_POINT('Ctrl Pts',(-2.4283412006611,-3.25151857412252,0.)); #18497=CARTESIAN_POINT('',(-2.4152911457562,-3.21975199310401,0.1)); #18498=CARTESIAN_POINT('',(-2.4152911457562,-3.21975199310401,0.)); #18499=CARTESIAN_POINT('Ctrl Pts',(-2.4283412006611,-3.25151857412252,0.1)); #18500=CARTESIAN_POINT('Ctrl Pts',(-2.42748264441736,-3.24138761044635, 0.1)); #18501=CARTESIAN_POINT('Ctrl Pts',(-2.42130103946241,-3.22610530930771, 0.1)); #18502=CARTESIAN_POINT('Ctrl Pts',(-2.4152911457562,-3.21975199310401,0.1)); #18503=CARTESIAN_POINT('Ctrl Pts',(-2.38352456473769,-3.20721707194536, 0.)); #18504=CARTESIAN_POINT('Ctrl Pts',(-2.38352456473769,-3.20721707194536, 0.1)); #18505=CARTESIAN_POINT('Ctrl Pts',(-2.39417066216011,-3.20721707194536, 0.)); #18506=CARTESIAN_POINT('Ctrl Pts',(-2.39417066216011,-3.20721707194536, 0.1)); #18507=CARTESIAN_POINT('Ctrl Pts',(-2.40910954080125,-3.21357038814906, 0.)); #18508=CARTESIAN_POINT('Ctrl Pts',(-2.40910954080125,-3.21357038814906, 0.1)); #18509=CARTESIAN_POINT('Ctrl Pts',(-2.4152911457562,-3.21975199310401,0.)); #18510=CARTESIAN_POINT('Ctrl Pts',(-2.4152911457562,-3.21975199310401,0.1)); #18511=CARTESIAN_POINT('',(-2.38352456473769,-3.20721707194536,0.)); #18512=CARTESIAN_POINT('Ctrl Pts',(-2.38352456473769,-3.20721707194536, 0.)); #18513=CARTESIAN_POINT('Ctrl Pts',(-2.39417066216011,-3.20721707194536, 0.)); #18514=CARTESIAN_POINT('Ctrl Pts',(-2.40910954080125,-3.21357038814906, 0.)); #18515=CARTESIAN_POINT('Ctrl Pts',(-2.4152911457562,-3.21975199310401,0.)); #18516=CARTESIAN_POINT('',(-2.38352456473769,-3.20721707194536,0.1)); #18517=CARTESIAN_POINT('',(-2.38352456473769,-3.20721707194536,0.)); #18518=CARTESIAN_POINT('Ctrl Pts',(-2.4152911457562,-3.21975199310401,0.1)); #18519=CARTESIAN_POINT('Ctrl Pts',(-2.40910954080125,-3.21357038814906, 0.1)); #18520=CARTESIAN_POINT('Ctrl Pts',(-2.39417066216011,-3.20721707194536, 0.1)); #18521=CARTESIAN_POINT('Ctrl Pts',(-2.38352456473769,-3.20721707194536, 0.1)); #18522=CARTESIAN_POINT('Ctrl Pts',(-2.35347509620667,-3.21958028185526, 0.)); #18523=CARTESIAN_POINT('Ctrl Pts',(-2.35347509620667,-3.21958028185526, 0.1)); #18524=CARTESIAN_POINT('Ctrl Pts',(-2.35811129992289,-3.21357038814906, 0.)); #18525=CARTESIAN_POINT('Ctrl Pts',(-2.35811129992289,-3.21357038814906, 0.1)); #18526=CARTESIAN_POINT('Ctrl Pts',(-2.37270675606653,-3.20721707194536, 0.)); #18527=CARTESIAN_POINT('Ctrl Pts',(-2.37270675606653,-3.20721707194536, 0.1)); #18528=CARTESIAN_POINT('Ctrl Pts',(-2.38352456473769,-3.20721707194536, 0.)); #18529=CARTESIAN_POINT('Ctrl Pts',(-2.38352456473769,-3.20721707194536, 0.1)); #18530=CARTESIAN_POINT('',(-2.35347509620667,-3.21958028185526,0.)); #18531=CARTESIAN_POINT('Ctrl Pts',(-2.35347509620667,-3.21958028185526, 0.)); #18532=CARTESIAN_POINT('Ctrl Pts',(-2.35811129992289,-3.21357038814906, 0.)); #18533=CARTESIAN_POINT('Ctrl Pts',(-2.37270675606653,-3.20721707194536, 0.)); #18534=CARTESIAN_POINT('Ctrl Pts',(-2.38352456473769,-3.20721707194536, 0.)); #18535=CARTESIAN_POINT('',(-2.35347509620667,-3.21958028185526,0.1)); #18536=CARTESIAN_POINT('',(-2.35347509620667,-3.21958028185526,0.)); #18537=CARTESIAN_POINT('Ctrl Pts',(-2.38352456473769,-3.20721707194536, 0.1)); #18538=CARTESIAN_POINT('Ctrl Pts',(-2.37270675606653,-3.20721707194536, 0.1)); #18539=CARTESIAN_POINT('Ctrl Pts',(-2.35811129992289,-3.21357038814906, 0.1)); #18540=CARTESIAN_POINT('Ctrl Pts',(-2.35347509620667,-3.21958028185526, 0.1)); #18541=CARTESIAN_POINT('Ctrl Pts',(-2.34437440002299,-3.25151857412252, 0.)); #18542=CARTESIAN_POINT('Ctrl Pts',(-2.34437440002299,-3.25151857412252, 0.1)); #18543=CARTESIAN_POINT('Ctrl Pts',(-2.34471782252049,-3.24070076545135, 0.)); #18544=CARTESIAN_POINT('Ctrl Pts',(-2.34471782252049,-3.24070076545135, 0.1)); #18545=CARTESIAN_POINT('Ctrl Pts',(-2.34918231498795,-3.22490333056647, 0.)); #18546=CARTESIAN_POINT('Ctrl Pts',(-2.34918231498795,-3.22490333056647, 0.1)); #18547=CARTESIAN_POINT('Ctrl Pts',(-2.35347509620667,-3.21958028185526, 0.)); #18548=CARTESIAN_POINT('Ctrl Pts',(-2.35347509620667,-3.21958028185526, 0.1)); #18549=CARTESIAN_POINT('Ctrl Pts',(-2.34437440002299,-3.25151857412252, 0.)); #18550=CARTESIAN_POINT('Ctrl Pts',(-2.34471782252049,-3.24070076545135, 0.)); #18551=CARTESIAN_POINT('Ctrl Pts',(-2.34918231498795,-3.22490333056647, 0.)); #18552=CARTESIAN_POINT('Ctrl Pts',(-2.35347509620667,-3.21958028185526, 0.)); #18553=CARTESIAN_POINT('Ctrl Pts',(-2.35347509620667,-3.21958028185526, 0.1)); #18554=CARTESIAN_POINT('Ctrl Pts',(-2.34918231498795,-3.22490333056647, 0.1)); #18555=CARTESIAN_POINT('Ctrl Pts',(-2.34471782252049,-3.24070076545135, 0.1)); #18556=CARTESIAN_POINT('Ctrl Pts',(-2.34437440002299,-3.25151857412252, 0.1)); #18557=CARTESIAN_POINT('Ctrl Pts',(-2.38197916349895,-3.18523803210552, 0.)); #18558=CARTESIAN_POINT('Ctrl Pts',(-2.38197916349895,-3.18523803210552, 0.1)); #18559=CARTESIAN_POINT('Ctrl Pts',(-2.41477601200996,-3.18523803210552, 0.)); #18560=CARTESIAN_POINT('Ctrl Pts',(-2.41477601200996,-3.18523803210552, 0.1)); #18561=CARTESIAN_POINT('Ctrl Pts',(-2.4554715779634,-3.23125664677017,0.)); #18562=CARTESIAN_POINT('Ctrl Pts',(-2.4554715779634,-3.23125664677017,0.1)); #18563=CARTESIAN_POINT('Ctrl Pts',(-2.4554715779634,-3.27006338898738,0.)); #18564=CARTESIAN_POINT('Ctrl Pts',(-2.4554715779634,-3.27006338898738,0.1)); #18565=CARTESIAN_POINT('',(-2.4554715779634,-3.27006338898738,0.)); #18566=CARTESIAN_POINT('',(-2.38197916349895,-3.18523803210552,0.)); #18567=CARTESIAN_POINT('Ctrl Pts',(-2.4554715779634,-3.27006338898738,0.)); #18568=CARTESIAN_POINT('Ctrl Pts',(-2.4554715779634,-3.23125664677017,0.)); #18569=CARTESIAN_POINT('Ctrl Pts',(-2.41477601200996,-3.18523803210552, 0.)); #18570=CARTESIAN_POINT('Ctrl Pts',(-2.38197916349895,-3.18523803210552, 0.)); #18571=CARTESIAN_POINT('',(-2.4554715779634,-3.27006338898738,0.1)); #18572=CARTESIAN_POINT('',(-2.4554715779634,-3.27006338898738,0.)); #18573=CARTESIAN_POINT('',(-2.38197916349895,-3.18523803210552,0.1)); #18574=CARTESIAN_POINT('Ctrl Pts',(-2.38197916349895,-3.18523803210552, 0.1)); #18575=CARTESIAN_POINT('Ctrl Pts',(-2.41477601200996,-3.18523803210552, 0.1)); #18576=CARTESIAN_POINT('Ctrl Pts',(-2.4554715779634,-3.23125664677017,0.1)); #18577=CARTESIAN_POINT('Ctrl Pts',(-2.4554715779634,-3.27006338898738,0.1)); #18578=CARTESIAN_POINT('',(-2.38197916349895,-3.18523803210552,0.)); #18579=CARTESIAN_POINT('Ctrl Pts',(-2.33596054883431,-3.20292429072664, 0.)); #18580=CARTESIAN_POINT('Ctrl Pts',(-2.33596054883431,-3.20292429072664, 0.1)); #18581=CARTESIAN_POINT('Ctrl Pts',(-2.34437440002299,-3.19382359454296, 0.)); #18582=CARTESIAN_POINT('Ctrl Pts',(-2.34437440002299,-3.19382359454296, 0.1)); #18583=CARTESIAN_POINT('Ctrl Pts',(-2.36721199610657,-3.18523803210552, 0.)); #18584=CARTESIAN_POINT('Ctrl Pts',(-2.36721199610657,-3.18523803210552, 0.1)); #18585=CARTESIAN_POINT('Ctrl Pts',(-2.38197916349895,-3.18523803210552, 0.)); #18586=CARTESIAN_POINT('Ctrl Pts',(-2.38197916349895,-3.18523803210552, 0.1)); #18587=CARTESIAN_POINT('',(-2.33596054883431,-3.20292429072664,0.)); #18588=CARTESIAN_POINT('Ctrl Pts',(-2.38197916349895,-3.18523803210552, 0.)); #18589=CARTESIAN_POINT('Ctrl Pts',(-2.36721199610657,-3.18523803210552, 0.)); #18590=CARTESIAN_POINT('Ctrl Pts',(-2.34437440002299,-3.19382359454296, 0.)); #18591=CARTESIAN_POINT('Ctrl Pts',(-2.33596054883431,-3.20292429072664, 0.)); #18592=CARTESIAN_POINT('',(-2.33596054883431,-3.20292429072664,0.1)); #18593=CARTESIAN_POINT('Ctrl Pts',(-2.33596054883431,-3.20292429072664, 0.1)); #18594=CARTESIAN_POINT('Ctrl Pts',(-2.34437440002299,-3.19382359454296, 0.1)); #18595=CARTESIAN_POINT('Ctrl Pts',(-2.36721199610657,-3.18523803210552, 0.1)); #18596=CARTESIAN_POINT('Ctrl Pts',(-2.38197916349895,-3.18523803210552, 0.1)); #18597=CARTESIAN_POINT('',(-2.33596054883431,-3.20292429072664,0.)); #18598=CARTESIAN_POINT('Ctrl Pts',(-2.31827429021319,-3.25735675657998, 0.)); #18599=CARTESIAN_POINT('Ctrl Pts',(-2.31827429021319,-3.25735675657998, 0.1)); #18600=CARTESIAN_POINT('Ctrl Pts',(-2.31827429021319,-3.23829680796887, 0.)); #18601=CARTESIAN_POINT('Ctrl Pts',(-2.31827429021319,-3.23829680796887, 0.1)); #18602=CARTESIAN_POINT('Ctrl Pts',(-2.32737498639687,-3.21202498691032, 0.)); #18603=CARTESIAN_POINT('Ctrl Pts',(-2.32737498639687,-3.21202498691032, 0.1)); #18604=CARTESIAN_POINT('Ctrl Pts',(-2.33596054883431,-3.20292429072664, 0.)); #18605=CARTESIAN_POINT('Ctrl Pts',(-2.33596054883431,-3.20292429072664, 0.1)); #18606=CARTESIAN_POINT('',(-2.31827429021319,-3.25735675657998,0.)); #18607=CARTESIAN_POINT('Ctrl Pts',(-2.33596054883431,-3.20292429072664, 0.)); #18608=CARTESIAN_POINT('Ctrl Pts',(-2.32737498639687,-3.21202498691032, 0.)); #18609=CARTESIAN_POINT('Ctrl Pts',(-2.31827429021319,-3.23829680796887, 0.)); #18610=CARTESIAN_POINT('Ctrl Pts',(-2.31827429021319,-3.25735675657998, 0.)); #18611=CARTESIAN_POINT('',(-2.31827429021319,-3.25735675657998,0.1)); #18612=CARTESIAN_POINT('Ctrl Pts',(-2.31827429021319,-3.25735675657998, 0.1)); #18613=CARTESIAN_POINT('Ctrl Pts',(-2.31827429021319,-3.23829680796887, 0.1)); #18614=CARTESIAN_POINT('Ctrl Pts',(-2.32737498639687,-3.21202498691032, 0.1)); #18615=CARTESIAN_POINT('Ctrl Pts',(-2.33596054883431,-3.20292429072664, 0.1)); #18616=CARTESIAN_POINT('',(-2.31827429021319,-3.25735675657998,0.)); #18617=CARTESIAN_POINT('Origin',(-2.31827429021319,-3.27195221272361,0.)); #18618=CARTESIAN_POINT('',(-2.31827429021319,-3.27195221272361,0.)); #18619=CARTESIAN_POINT('',(-2.31827429021319,-3.25735675657998,0.)); #18620=CARTESIAN_POINT('',(-2.31827429021319,-3.27195221272361,0.1)); #18621=CARTESIAN_POINT('',(-2.31827429021319,-3.25735675657998,0.1)); #18622=CARTESIAN_POINT('',(-2.31827429021319,-3.27195221272361,0.)); #18623=CARTESIAN_POINT('Origin',(-2.4283412006611,-3.27195221272361,0.)); #18624=CARTESIAN_POINT('',(-2.4283412006611,-3.27195221272361,0.)); #18625=CARTESIAN_POINT('',(-2.31827429021319,-3.27195221272361,0.)); #18626=CARTESIAN_POINT('',(-2.4283412006611,-3.27195221272361,0.1)); #18627=CARTESIAN_POINT('',(-2.31827429021319,-3.27195221272361,0.1)); #18628=CARTESIAN_POINT('',(-2.4283412006611,-3.27195221272361,0.)); #18629=CARTESIAN_POINT('Ctrl Pts',(-2.375797558544,-3.32896034730818,0.)); #18630=CARTESIAN_POINT('Ctrl Pts',(-2.375797558544,-3.32896034730818,0.1)); #18631=CARTESIAN_POINT('Ctrl Pts',(-2.40052397836381,-3.32896034730818, 0.)); #18632=CARTESIAN_POINT('Ctrl Pts',(-2.40052397836381,-3.32896034730818, 0.1)); #18633=CARTESIAN_POINT('Ctrl Pts',(-2.4283412006611,-3.29959772377215,0.)); #18634=CARTESIAN_POINT('Ctrl Pts',(-2.4283412006611,-3.29959772377215,0.1)); #18635=CARTESIAN_POINT('Ctrl Pts',(-2.4283412006611,-3.27195221272361,0.)); #18636=CARTESIAN_POINT('Ctrl Pts',(-2.4283412006611,-3.27195221272361,0.1)); #18637=CARTESIAN_POINT('',(-2.375797558544,-3.32896034730818,0.)); #18638=CARTESIAN_POINT('Ctrl Pts',(-2.4283412006611,-3.27195221272361,0.)); #18639=CARTESIAN_POINT('Ctrl Pts',(-2.4283412006611,-3.29959772377215,0.)); #18640=CARTESIAN_POINT('Ctrl Pts',(-2.40052397836381,-3.32896034730818, 0.)); #18641=CARTESIAN_POINT('Ctrl Pts',(-2.375797558544,-3.32896034730818,0.)); #18642=CARTESIAN_POINT('',(-2.375797558544,-3.32896034730818,0.1)); #18643=CARTESIAN_POINT('Ctrl Pts',(-2.375797558544,-3.32896034730818,0.1)); #18644=CARTESIAN_POINT('Ctrl Pts',(-2.40052397836381,-3.32896034730818, 0.1)); #18645=CARTESIAN_POINT('Ctrl Pts',(-2.4283412006611,-3.29959772377215,0.1)); #18646=CARTESIAN_POINT('Ctrl Pts',(-2.4283412006611,-3.27195221272361,0.1)); #18647=CARTESIAN_POINT('',(-2.375797558544,-3.32896034730818,0.)); #18648=CARTESIAN_POINT('Ctrl Pts',(-2.34317242128175,-3.32192018610948, 0.)); #18649=CARTESIAN_POINT('Ctrl Pts',(-2.34317242128175,-3.32192018610948, 0.1)); #18650=CARTESIAN_POINT('Ctrl Pts',(-2.3500408712317,-3.32501098858696,0.)); #18651=CARTESIAN_POINT('Ctrl Pts',(-2.3500408712317,-3.32501098858696,0.1)); #18652=CARTESIAN_POINT('Ctrl Pts',(-2.36704028485782,-3.32896034730818, 0.)); #18653=CARTESIAN_POINT('Ctrl Pts',(-2.36704028485782,-3.32896034730818, 0.1)); #18654=CARTESIAN_POINT('Ctrl Pts',(-2.375797558544,-3.32896034730818,0.)); #18655=CARTESIAN_POINT('Ctrl Pts',(-2.375797558544,-3.32896034730818,0.1)); #18656=CARTESIAN_POINT('',(-2.34317242128175,-3.32192018610948,0.)); #18657=CARTESIAN_POINT('Ctrl Pts',(-2.375797558544,-3.32896034730818,0.)); #18658=CARTESIAN_POINT('Ctrl Pts',(-2.36704028485782,-3.32896034730818, 0.)); #18659=CARTESIAN_POINT('Ctrl Pts',(-2.3500408712317,-3.32501098858696,0.)); #18660=CARTESIAN_POINT('Ctrl Pts',(-2.34317242128175,-3.32192018610948, 0.)); #18661=CARTESIAN_POINT('',(-2.34317242128175,-3.32192018610948,0.1)); #18662=CARTESIAN_POINT('Ctrl Pts',(-2.34317242128175,-3.32192018610948, 0.1)); #18663=CARTESIAN_POINT('Ctrl Pts',(-2.3500408712317,-3.32501098858696,0.1)); #18664=CARTESIAN_POINT('Ctrl Pts',(-2.36704028485782,-3.32896034730818, 0.1)); #18665=CARTESIAN_POINT('Ctrl Pts',(-2.375797558544,-3.32896034730818,0.1)); #18666=CARTESIAN_POINT('',(-2.34317242128175,-3.32192018610948,0.)); #18667=CARTESIAN_POINT('Ctrl Pts',(-2.32273878268066,-3.30972868744833, 0.)); #18668=CARTESIAN_POINT('Ctrl Pts',(-2.32273878268066,-3.30972868744833, 0.1)); #18669=CARTESIAN_POINT('Ctrl Pts',(-2.32600129640688,-3.31247606742831, 0.)); #18670=CARTESIAN_POINT('Ctrl Pts',(-2.32600129640688,-3.31247606742831, 0.1)); #18671=CARTESIAN_POINT('Ctrl Pts',(-2.33596054883431,-3.31848596113451, 0.)); #18672=CARTESIAN_POINT('Ctrl Pts',(-2.33596054883431,-3.31848596113451, 0.1)); #18673=CARTESIAN_POINT('Ctrl Pts',(-2.34317242128175,-3.32192018610948, 0.)); #18674=CARTESIAN_POINT('Ctrl Pts',(-2.34317242128175,-3.32192018610948, 0.1)); #18675=CARTESIAN_POINT('',(-2.32273878268066,-3.30972868744833,0.)); #18676=CARTESIAN_POINT('Ctrl Pts',(-2.34317242128175,-3.32192018610948, 0.)); #18677=CARTESIAN_POINT('Ctrl Pts',(-2.33596054883431,-3.31848596113451, 0.)); #18678=CARTESIAN_POINT('Ctrl Pts',(-2.32600129640688,-3.31247606742831, 0.)); #18679=CARTESIAN_POINT('Ctrl Pts',(-2.32273878268066,-3.30972868744833, 0.)); #18680=CARTESIAN_POINT('',(-2.32273878268066,-3.30972868744833,0.1)); #18681=CARTESIAN_POINT('Ctrl Pts',(-2.32273878268066,-3.30972868744833, 0.1)); #18682=CARTESIAN_POINT('Ctrl Pts',(-2.32600129640688,-3.31247606742831, 0.1)); #18683=CARTESIAN_POINT('Ctrl Pts',(-2.33596054883431,-3.31848596113451, 0.1)); #18684=CARTESIAN_POINT('Ctrl Pts',(-2.34317242128175,-3.32192018610948, 0.1)); #18685=CARTESIAN_POINT('',(-2.32273878268066,-3.30972868744833,0.)); #18686=CARTESIAN_POINT('Origin',(-2.32119338144192,-3.30972868744833,0.)); #18687=CARTESIAN_POINT('',(-2.32119338144192,-3.30972868744833,0.)); #18688=CARTESIAN_POINT('',(-2.32273878268066,-3.30972868744833,0.)); #18689=CARTESIAN_POINT('',(-2.32119338144192,-3.30972868744833,0.1)); #18690=CARTESIAN_POINT('',(-2.32273878268066,-3.30972868744833,0.1)); #18691=CARTESIAN_POINT('',(-2.32119338144192,-3.30972868744833,0.)); #18692=CARTESIAN_POINT('Origin',(-2.32119338144192,-3.3389195997356,0.)); #18693=CARTESIAN_POINT('',(-2.32119338144192,-3.3389195997356,0.)); #18694=CARTESIAN_POINT('',(-2.32119338144192,-3.30972868744833,0.)); #18695=CARTESIAN_POINT('',(-2.32119338144192,-3.3389195997356,0.1)); #18696=CARTESIAN_POINT('',(-2.32119338144192,-3.30972868744833,0.1)); #18697=CARTESIAN_POINT('',(-2.32119338144192,-3.3389195997356,0.)); #18698=CARTESIAN_POINT('Ctrl Pts',(-2.34540466751548,-3.34784858467054, 0.)); #18699=CARTESIAN_POINT('Ctrl Pts',(-2.34540466751548,-3.34784858467054, 0.1)); #18700=CARTESIAN_POINT('Ctrl Pts',(-2.33990990755553,-3.3463031834318,0.)); #18701=CARTESIAN_POINT('Ctrl Pts',(-2.33990990755553,-3.3463031834318,0.1)); #18702=CARTESIAN_POINT('Ctrl Pts',(-2.32582958515813,-3.34080842347184, 0.)); #18703=CARTESIAN_POINT('Ctrl Pts',(-2.32582958515813,-3.34080842347184, 0.1)); #18704=CARTESIAN_POINT('Ctrl Pts',(-2.32119338144192,-3.3389195997356,0.)); #18705=CARTESIAN_POINT('Ctrl Pts',(-2.32119338144192,-3.3389195997356,0.1)); #18706=CARTESIAN_POINT('',(-2.34540466751548,-3.34784858467054,0.)); #18707=CARTESIAN_POINT('Ctrl Pts',(-2.32119338144192,-3.3389195997356,0.)); #18708=CARTESIAN_POINT('Ctrl Pts',(-2.32582958515813,-3.34080842347184, 0.)); #18709=CARTESIAN_POINT('Ctrl Pts',(-2.33990990755553,-3.3463031834318,0.)); #18710=CARTESIAN_POINT('Ctrl Pts',(-2.34540466751548,-3.34784858467054, 0.)); #18711=CARTESIAN_POINT('',(-2.34540466751548,-3.34784858467054,0.1)); #18712=CARTESIAN_POINT('Ctrl Pts',(-2.34540466751548,-3.34784858467054, 0.1)); #18713=CARTESIAN_POINT('Ctrl Pts',(-2.33990990755553,-3.3463031834318,0.1)); #18714=CARTESIAN_POINT('Ctrl Pts',(-2.32582958515813,-3.34080842347184, 0.1)); #18715=CARTESIAN_POINT('Ctrl Pts',(-2.32119338144192,-3.3389195997356,0.1)); #18716=CARTESIAN_POINT('',(-2.34540466751548,-3.34784858467054,0.)); #18717=CARTESIAN_POINT('Ctrl Pts',(-2.3754541360465,-3.352313077138,0.)); #18718=CARTESIAN_POINT('Ctrl Pts',(-2.3754541360465,-3.352313077138,0.1)); #18719=CARTESIAN_POINT('Ctrl Pts',(-2.36583830611658,-3.352313077138,0.)); #18720=CARTESIAN_POINT('Ctrl Pts',(-2.36583830611658,-3.352313077138,0.1)); #18721=CARTESIAN_POINT('Ctrl Pts',(-2.35313167370917,-3.35008083090427, 0.)); #18722=CARTESIAN_POINT('Ctrl Pts',(-2.35313167370917,-3.35008083090427, 0.1)); #18723=CARTESIAN_POINT('Ctrl Pts',(-2.34540466751548,-3.34784858467054, 0.)); #18724=CARTESIAN_POINT('Ctrl Pts',(-2.34540466751548,-3.34784858467054, 0.1)); #18725=CARTESIAN_POINT('',(-2.3754541360465,-3.352313077138,0.)); #18726=CARTESIAN_POINT('Ctrl Pts',(-2.34540466751548,-3.34784858467054, 0.)); #18727=CARTESIAN_POINT('Ctrl Pts',(-2.35313167370917,-3.35008083090427, 0.)); #18728=CARTESIAN_POINT('Ctrl Pts',(-2.36583830611658,-3.352313077138,0.)); #18729=CARTESIAN_POINT('Ctrl Pts',(-2.3754541360465,-3.352313077138,0.)); #18730=CARTESIAN_POINT('',(-2.3754541360465,-3.352313077138,0.1)); #18731=CARTESIAN_POINT('Ctrl Pts',(-2.3754541360465,-3.352313077138,0.1)); #18732=CARTESIAN_POINT('Ctrl Pts',(-2.36583830611658,-3.352313077138,0.1)); #18733=CARTESIAN_POINT('Ctrl Pts',(-2.35313167370917,-3.35008083090427, 0.1)); #18734=CARTESIAN_POINT('Ctrl Pts',(-2.34540466751548,-3.34784858467054, 0.1)); #18735=CARTESIAN_POINT('',(-2.3754541360465,-3.352313077138,0.)); #18736=CARTESIAN_POINT('Ctrl Pts',(-2.4554715779634,-3.27006338898738,0.)); #18737=CARTESIAN_POINT('Ctrl Pts',(-2.4554715779634,-3.27006338898738,0.1)); #18738=CARTESIAN_POINT('Ctrl Pts',(-2.4554715779634,-3.30955697619958,0.)); #18739=CARTESIAN_POINT('Ctrl Pts',(-2.4554715779634,-3.30955697619958,0.1)); #18740=CARTESIAN_POINT('Ctrl Pts',(-2.41357403326871,-3.352313077138,0.)); #18741=CARTESIAN_POINT('Ctrl Pts',(-2.41357403326871,-3.352313077138,0.1)); #18742=CARTESIAN_POINT('Ctrl Pts',(-2.3754541360465,-3.352313077138,0.)); #18743=CARTESIAN_POINT('Ctrl Pts',(-2.3754541360465,-3.352313077138,0.1)); #18744=CARTESIAN_POINT('Ctrl Pts',(-2.3754541360465,-3.352313077138,0.)); #18745=CARTESIAN_POINT('Ctrl Pts',(-2.41357403326871,-3.352313077138,0.)); #18746=CARTESIAN_POINT('Ctrl Pts',(-2.4554715779634,-3.30955697619958,0.)); #18747=CARTESIAN_POINT('Ctrl Pts',(-2.4554715779634,-3.27006338898738,0.)); #18748=CARTESIAN_POINT('Ctrl Pts',(-2.4554715779634,-3.27006338898738,0.1)); #18749=CARTESIAN_POINT('Ctrl Pts',(-2.4554715779634,-3.30955697619958,0.1)); #18750=CARTESIAN_POINT('Ctrl Pts',(-2.41357403326871,-3.352313077138,0.1)); #18751=CARTESIAN_POINT('Ctrl Pts',(-2.3754541360465,-3.352313077138,0.1)); #18752=CARTESIAN_POINT('Origin',(-2.38349496323401,-3.2789727215046,0.)); #18753=CARTESIAN_POINT('Origin',(-2.38349496323401,-3.2789727215046,0.1)); #18754=CARTESIAN_POINT('Ctrl Pts',(-2.85916472377157,-3.21717632437278, 0.)); #18755=CARTESIAN_POINT('Ctrl Pts',(-2.85916472377157,-3.21717632437278, 0.1)); #18756=CARTESIAN_POINT('Ctrl Pts',(-2.85452852005536,-3.21717632437278, 0.)); #18757=CARTESIAN_POINT('Ctrl Pts',(-2.85452852005536,-3.21717632437278, 0.1)); #18758=CARTESIAN_POINT('Ctrl Pts',(-2.84783178135416,-3.21751974687028, 0.)); #18759=CARTESIAN_POINT('Ctrl Pts',(-2.84783178135416,-3.21751974687028, 0.1)); #18760=CARTESIAN_POINT('Ctrl Pts',(-2.84474097887668,-3.21837830311402, 0.)); #18761=CARTESIAN_POINT('Ctrl Pts',(-2.84474097887668,-3.21837830311402, 0.1)); #18762=CARTESIAN_POINT('',(-2.84474097887668,-3.21837830311402,0.)); #18763=CARTESIAN_POINT('',(-2.85916472377157,-3.21717632437278,0.)); #18764=CARTESIAN_POINT('Ctrl Pts',(-2.84474097887668,-3.21837830311402, 0.)); #18765=CARTESIAN_POINT('Ctrl Pts',(-2.84783178135416,-3.21751974687028, 0.)); #18766=CARTESIAN_POINT('Ctrl Pts',(-2.85452852005536,-3.21717632437278, 0.)); #18767=CARTESIAN_POINT('Ctrl Pts',(-2.85916472377157,-3.21717632437278, 0.)); #18768=CARTESIAN_POINT('',(-2.84474097887668,-3.21837830311402,0.1)); #18769=CARTESIAN_POINT('',(-2.84474097887668,-3.21837830311402,0.)); #18770=CARTESIAN_POINT('',(-2.85916472377157,-3.21717632437278,0.1)); #18771=CARTESIAN_POINT('Ctrl Pts',(-2.85916472377157,-3.21717632437278, 0.1)); #18772=CARTESIAN_POINT('Ctrl Pts',(-2.85452852005536,-3.21717632437278, 0.1)); #18773=CARTESIAN_POINT('Ctrl Pts',(-2.84783178135416,-3.21751974687028, 0.1)); #18774=CARTESIAN_POINT('Ctrl Pts',(-2.84474097887668,-3.21837830311402, 0.1)); #18775=CARTESIAN_POINT('',(-2.85916472377157,-3.21717632437278,0.)); #18776=CARTESIAN_POINT('Ctrl Pts',(-2.9008905572175,-3.23589285048639,0.)); #18777=CARTESIAN_POINT('Ctrl Pts',(-2.9008905572175,-3.23589285048639,0.1)); #18778=CARTESIAN_POINT('Ctrl Pts',(-2.89127472728758,-3.22662044305396, 0.)); #18779=CARTESIAN_POINT('Ctrl Pts',(-2.89127472728758,-3.22662044305396, 0.1)); #18780=CARTESIAN_POINT('Ctrl Pts',(-2.86998253244274,-3.21717632437278, 0.)); #18781=CARTESIAN_POINT('Ctrl Pts',(-2.86998253244274,-3.21717632437278, 0.1)); #18782=CARTESIAN_POINT('Ctrl Pts',(-2.85916472377157,-3.21717632437278, 0.)); #18783=CARTESIAN_POINT('Ctrl Pts',(-2.85916472377157,-3.21717632437278, 0.1)); #18784=CARTESIAN_POINT('',(-2.9008905572175,-3.23589285048639,0.)); #18785=CARTESIAN_POINT('Ctrl Pts',(-2.85916472377157,-3.21717632437278, 0.)); #18786=CARTESIAN_POINT('Ctrl Pts',(-2.86998253244274,-3.21717632437278, 0.)); #18787=CARTESIAN_POINT('Ctrl Pts',(-2.89127472728758,-3.22662044305396, 0.)); #18788=CARTESIAN_POINT('Ctrl Pts',(-2.9008905572175,-3.23589285048639,0.)); #18789=CARTESIAN_POINT('',(-2.9008905572175,-3.23589285048639,0.1)); #18790=CARTESIAN_POINT('Ctrl Pts',(-2.9008905572175,-3.23589285048639,0.1)); #18791=CARTESIAN_POINT('Ctrl Pts',(-2.89127472728758,-3.22662044305396, 0.1)); #18792=CARTESIAN_POINT('Ctrl Pts',(-2.86998253244274,-3.21717632437278, 0.1)); #18793=CARTESIAN_POINT('Ctrl Pts',(-2.85916472377157,-3.21717632437278, 0.1)); #18794=CARTESIAN_POINT('',(-2.9008905572175,-3.23589285048639,0.)); #18795=CARTESIAN_POINT('Origin',(-2.9008905572175,-3.34870714091428,0.)); #18796=CARTESIAN_POINT('',(-2.9008905572175,-3.34870714091428,0.)); #18797=CARTESIAN_POINT('',(-2.9008905572175,-3.23589285048639,0.)); #18798=CARTESIAN_POINT('',(-2.9008905572175,-3.34870714091428,0.1)); #18799=CARTESIAN_POINT('',(-2.9008905572175,-3.23589285048639,0.1)); #18800=CARTESIAN_POINT('',(-2.9008905572175,-3.34870714091428,0.)); #18801=CARTESIAN_POINT('Origin',(-2.9276775120223,-3.34870714091428,0.)); #18802=CARTESIAN_POINT('',(-2.9276775120223,-3.34870714091428,0.)); #18803=CARTESIAN_POINT('',(-2.9008905572175,-3.34870714091428,0.)); #18804=CARTESIAN_POINT('',(-2.9276775120223,-3.34870714091428,0.1)); #18805=CARTESIAN_POINT('',(-2.9008905572175,-3.34870714091428,0.1)); #18806=CARTESIAN_POINT('',(-2.9276775120223,-3.34870714091428,0.)); #18807=CARTESIAN_POINT('Origin',(-2.9276775120223,-3.18970252457299,0.)); #18808=CARTESIAN_POINT('',(-2.9276775120223,-3.18970252457299,0.)); #18809=CARTESIAN_POINT('',(-2.9276775120223,-3.34870714091428,0.)); #18810=CARTESIAN_POINT('',(-2.9276775120223,-3.18970252457299,0.1)); #18811=CARTESIAN_POINT('',(-2.9276775120223,-3.34870714091428,0.1)); #18812=CARTESIAN_POINT('',(-2.9276775120223,-3.18970252457299,0.)); #18813=CARTESIAN_POINT('Origin',(-2.9008905572175,-3.18970252457299,0.)); #18814=CARTESIAN_POINT('',(-2.9008905572175,-3.18970252457299,0.)); #18815=CARTESIAN_POINT('',(-2.9276775120223,-3.18970252457299,0.)); #18816=CARTESIAN_POINT('',(-2.9008905572175,-3.18970252457299,0.1)); #18817=CARTESIAN_POINT('',(-2.9276775120223,-3.18970252457299,0.1)); #18818=CARTESIAN_POINT('',(-2.9008905572175,-3.18970252457299,0.)); #18819=CARTESIAN_POINT('Origin',(-2.9008905572175,-3.21339867690031,0.)); #18820=CARTESIAN_POINT('',(-2.9008905572175,-3.21339867690031,0.)); #18821=CARTESIAN_POINT('',(-2.9008905572175,-3.18970252457299,0.)); #18822=CARTESIAN_POINT('',(-2.9008905572175,-3.21339867690031,0.1)); #18823=CARTESIAN_POINT('',(-2.9008905572175,-3.18970252457299,0.1)); #18824=CARTESIAN_POINT('',(-2.9008905572175,-3.21339867690031,0.)); #18825=CARTESIAN_POINT('Ctrl Pts',(-2.85418509755786,-3.18970252457299, 0.)); #18826=CARTESIAN_POINT('Ctrl Pts',(-2.85418509755786,-3.18970252457299, 0.1)); #18827=CARTESIAN_POINT('Ctrl Pts',(-2.86448777248278,-3.18970252457299, 0.)); #18828=CARTESIAN_POINT('Ctrl Pts',(-2.86448777248278,-3.18970252457299, 0.1)); #18829=CARTESIAN_POINT('Ctrl Pts',(-2.88629510107387,-3.20034862199541, 0.)); #18830=CARTESIAN_POINT('Ctrl Pts',(-2.88629510107387,-3.20034862199541, 0.1)); #18831=CARTESIAN_POINT('Ctrl Pts',(-2.9008905572175,-3.21339867690031,0.)); #18832=CARTESIAN_POINT('Ctrl Pts',(-2.9008905572175,-3.21339867690031,0.1)); #18833=CARTESIAN_POINT('',(-2.85418509755786,-3.18970252457299,0.)); #18834=CARTESIAN_POINT('Ctrl Pts',(-2.9008905572175,-3.21339867690031,0.)); #18835=CARTESIAN_POINT('Ctrl Pts',(-2.88629510107387,-3.20034862199541, 0.)); #18836=CARTESIAN_POINT('Ctrl Pts',(-2.86448777248278,-3.18970252457299, 0.)); #18837=CARTESIAN_POINT('Ctrl Pts',(-2.85418509755786,-3.18970252457299, 0.)); #18838=CARTESIAN_POINT('',(-2.85418509755786,-3.18970252457299,0.1)); #18839=CARTESIAN_POINT('Ctrl Pts',(-2.85418509755786,-3.18970252457299, 0.1)); #18840=CARTESIAN_POINT('Ctrl Pts',(-2.86448777248278,-3.18970252457299, 0.1)); #18841=CARTESIAN_POINT('Ctrl Pts',(-2.88629510107387,-3.20034862199541, 0.1)); #18842=CARTESIAN_POINT('Ctrl Pts',(-2.9008905572175,-3.21339867690031,0.1)); #18843=CARTESIAN_POINT('',(-2.85418509755786,-3.18970252457299,0.)); #18844=CARTESIAN_POINT('Ctrl Pts',(-2.84336728888669,-3.19056108081673, 0.)); #18845=CARTESIAN_POINT('Ctrl Pts',(-2.84336728888669,-3.19056108081673, 0.1)); #18846=CARTESIAN_POINT('Ctrl Pts',(-2.84594295761792,-3.19004594707049, 0.)); #18847=CARTESIAN_POINT('Ctrl Pts',(-2.84594295761792,-3.19004594707049, 0.1)); #18848=CARTESIAN_POINT('Ctrl Pts',(-2.85006402758789,-3.18970252457299, 0.)); #18849=CARTESIAN_POINT('Ctrl Pts',(-2.85006402758789,-3.18970252457299, 0.1)); #18850=CARTESIAN_POINT('Ctrl Pts',(-2.85418509755786,-3.18970252457299, 0.)); #18851=CARTESIAN_POINT('Ctrl Pts',(-2.85418509755786,-3.18970252457299, 0.1)); #18852=CARTESIAN_POINT('',(-2.84336728888669,-3.19056108081673,0.)); #18853=CARTESIAN_POINT('Ctrl Pts',(-2.85418509755786,-3.18970252457299, 0.)); #18854=CARTESIAN_POINT('Ctrl Pts',(-2.85006402758789,-3.18970252457299, 0.)); #18855=CARTESIAN_POINT('Ctrl Pts',(-2.84594295761792,-3.19004594707049, 0.)); #18856=CARTESIAN_POINT('Ctrl Pts',(-2.84336728888669,-3.19056108081673, 0.)); #18857=CARTESIAN_POINT('',(-2.84336728888669,-3.19056108081673,0.1)); #18858=CARTESIAN_POINT('Ctrl Pts',(-2.84336728888669,-3.19056108081673, 0.1)); #18859=CARTESIAN_POINT('Ctrl Pts',(-2.84594295761792,-3.19004594707049, 0.1)); #18860=CARTESIAN_POINT('Ctrl Pts',(-2.85006402758789,-3.18970252457299, 0.1)); #18861=CARTESIAN_POINT('Ctrl Pts',(-2.85418509755786,-3.18970252457299, 0.1)); #18862=CARTESIAN_POINT('',(-2.84336728888669,-3.19056108081673,0.)); #18863=CARTESIAN_POINT('Origin',(-2.84336728888669,-3.21837830311402,0.)); #18864=CARTESIAN_POINT('',(-2.84336728888669,-3.21837830311402,0.)); #18865=CARTESIAN_POINT('',(-2.84336728888669,-3.19056108081673,0.)); #18866=CARTESIAN_POINT('',(-2.84336728888669,-3.21837830311402,0.1)); #18867=CARTESIAN_POINT('',(-2.84336728888669,-3.19056108081673,0.1)); #18868=CARTESIAN_POINT('',(-2.84336728888669,-3.21837830311402,0.)); #18869=CARTESIAN_POINT('Origin',(-2.84474097887668,-3.21837830311402,0.)); #18870=CARTESIAN_POINT('',(-2.84336728888669,-3.21837830311402,0.)); #18871=CARTESIAN_POINT('',(-2.84336728888669,-3.21837830311402,0.1)); #18872=CARTESIAN_POINT('Origin',(-2.90250157542251,-3.2554340607523,0.)); #18873=CARTESIAN_POINT('Origin',(-2.90250157542251,-3.2554340607523,0.1)); #18874=CARTESIAN_POINT('Origin',(-3.12995336304826,-3.1354417699684,0.)); #18875=CARTESIAN_POINT('',(-3.12995336304826,-3.16325899226569,0.)); #18876=CARTESIAN_POINT('',(-3.12995336304826,-3.1354417699684,0.)); #18877=CARTESIAN_POINT('',(-3.12995336304826,-3.16325899226569,0.)); #18878=CARTESIAN_POINT('',(-3.12995336304826,-3.16325899226569,0.1)); #18879=CARTESIAN_POINT('',(-3.12995336304826,-3.16325899226569,0.)); #18880=CARTESIAN_POINT('',(-3.12995336304826,-3.1354417699684,0.1)); #18881=CARTESIAN_POINT('',(-3.12995336304826,-3.16325899226569,0.1)); #18882=CARTESIAN_POINT('',(-3.12995336304826,-3.1354417699684,0.)); #18883=CARTESIAN_POINT('Origin',(-3.09956047201974,-3.1354417699684,0.)); #18884=CARTESIAN_POINT('',(-3.09956047201974,-3.1354417699684,0.)); #18885=CARTESIAN_POINT('',(-3.12995336304826,-3.1354417699684,0.)); #18886=CARTESIAN_POINT('',(-3.09956047201974,-3.1354417699684,0.1)); #18887=CARTESIAN_POINT('',(-3.12995336304826,-3.1354417699684,0.1)); #18888=CARTESIAN_POINT('',(-3.09956047201974,-3.1354417699684,0.)); #18889=CARTESIAN_POINT('Origin',(-3.09956047201974,-3.16325899226569,0.)); #18890=CARTESIAN_POINT('',(-3.09956047201974,-3.16325899226569,0.)); #18891=CARTESIAN_POINT('',(-3.09956047201974,-3.1354417699684,0.)); #18892=CARTESIAN_POINT('',(-3.09956047201974,-3.16325899226569,0.1)); #18893=CARTESIAN_POINT('',(-3.09956047201974,-3.1354417699684,0.1)); #18894=CARTESIAN_POINT('',(-3.09956047201974,-3.16325899226569,0.)); #18895=CARTESIAN_POINT('Origin',(-3.12995336304826,-3.16325899226569,0.)); #18896=CARTESIAN_POINT('',(-3.09956047201974,-3.16325899226569,0.)); #18897=CARTESIAN_POINT('',(-3.09956047201974,-3.16325899226569,0.1)); #18898=CARTESIAN_POINT('Origin',(-3.114756917534,-3.14935038111705,0.)); #18899=CARTESIAN_POINT('Origin',(-3.114756917534,-3.14935038111705,0.1)); #18900=CARTESIAN_POINT('Origin',(-3.19777930630399,-3.16617808349442,0.)); #18901=CARTESIAN_POINT('',(-3.19777930630399,-3.34870714091428,0.)); #18902=CARTESIAN_POINT('',(-3.19777930630399,-3.16617808349442,0.)); #18903=CARTESIAN_POINT('',(-3.19777930630399,-3.34870714091428,0.)); #18904=CARTESIAN_POINT('',(-3.19777930630399,-3.34870714091428,0.1)); #18905=CARTESIAN_POINT('',(-3.19777930630399,-3.34870714091428,0.)); #18906=CARTESIAN_POINT('',(-3.19777930630399,-3.16617808349442,0.1)); #18907=CARTESIAN_POINT('',(-3.19777930630399,-3.34870714091428,0.1)); #18908=CARTESIAN_POINT('',(-3.19777930630399,-3.16617808349442,0.)); #18909=CARTESIAN_POINT('Origin',(-3.25307032840107,-3.29032531633972,0.)); #18910=CARTESIAN_POINT('',(-3.25307032840107,-3.29032531633972,0.)); #18911=CARTESIAN_POINT('',(-3.19777930630399,-3.16617808349442,0.)); #18912=CARTESIAN_POINT('',(-3.25307032840107,-3.29032531633972,0.1)); #18913=CARTESIAN_POINT('',(-3.19777930630399,-3.16617808349442,0.1)); #18914=CARTESIAN_POINT('',(-3.25307032840107,-3.29032531633972,0.)); #18915=CARTESIAN_POINT('Origin',(-3.27024145327594,-3.29032531633972,0.)); #18916=CARTESIAN_POINT('',(-3.27024145327594,-3.29032531633972,0.)); #18917=CARTESIAN_POINT('',(-3.25307032840107,-3.29032531633972,0.)); #18918=CARTESIAN_POINT('',(-3.27024145327594,-3.29032531633972,0.1)); #18919=CARTESIAN_POINT('',(-3.25307032840107,-3.29032531633972,0.1)); #18920=CARTESIAN_POINT('',(-3.27024145327594,-3.29032531633972,0.)); #18921=CARTESIAN_POINT('Origin',(-3.32501734162678,-3.16617808349442,0.)); #18922=CARTESIAN_POINT('',(-3.32501734162678,-3.16617808349442,0.)); #18923=CARTESIAN_POINT('',(-3.27024145327594,-3.29032531633972,0.)); #18924=CARTESIAN_POINT('',(-3.32501734162678,-3.16617808349442,0.1)); #18925=CARTESIAN_POINT('',(-3.27024145327594,-3.29032531633972,0.1)); #18926=CARTESIAN_POINT('',(-3.32501734162678,-3.16617808349442,0.)); #18927=CARTESIAN_POINT('Origin',(-3.32501734162678,-3.34870714091428,0.)); #18928=CARTESIAN_POINT('',(-3.32501734162678,-3.34870714091428,0.)); #18929=CARTESIAN_POINT('',(-3.32501734162678,-3.16617808349442,0.)); #18930=CARTESIAN_POINT('',(-3.32501734162678,-3.34870714091428,0.1)); #18931=CARTESIAN_POINT('',(-3.32501734162678,-3.16617808349442,0.1)); #18932=CARTESIAN_POINT('',(-3.32501734162678,-3.34870714091428,0.)); #18933=CARTESIAN_POINT('Origin',(-3.35128916268533,-3.34870714091428,0.)); #18934=CARTESIAN_POINT('',(-3.35128916268533,-3.34870714091428,0.)); #18935=CARTESIAN_POINT('',(-3.32501734162678,-3.34870714091428,0.)); #18936=CARTESIAN_POINT('',(-3.35128916268533,-3.34870714091428,0.1)); #18937=CARTESIAN_POINT('',(-3.32501734162678,-3.34870714091428,0.1)); #18938=CARTESIAN_POINT('',(-3.35128916268533,-3.34870714091428,0.)); #18939=CARTESIAN_POINT('Origin',(-3.35128916268533,-3.13681545995839,0.)); #18940=CARTESIAN_POINT('',(-3.35128916268533,-3.13681545995839,0.)); #18941=CARTESIAN_POINT('',(-3.35128916268533,-3.34870714091428,0.)); #18942=CARTESIAN_POINT('',(-3.35128916268533,-3.13681545995839,0.1)); #18943=CARTESIAN_POINT('',(-3.35128916268533,-3.34870714091428,0.1)); #18944=CARTESIAN_POINT('',(-3.35128916268533,-3.13681545995839,0.)); #18945=CARTESIAN_POINT('Origin',(-3.31282584296562,-3.13681545995839,0.)); #18946=CARTESIAN_POINT('',(-3.31282584296562,-3.13681545995839,0.)); #18947=CARTESIAN_POINT('',(-3.35128916268533,-3.13681545995839,0.)); #18948=CARTESIAN_POINT('',(-3.31282584296562,-3.13681545995839,0.1)); #18949=CARTESIAN_POINT('',(-3.35128916268533,-3.13681545995839,0.1)); #18950=CARTESIAN_POINT('',(-3.31282584296562,-3.13681545995839,0.)); #18951=CARTESIAN_POINT('Origin',(-3.25993877835102,-3.25478108784874,0.)); #18952=CARTESIAN_POINT('',(-3.25993877835102,-3.25478108784874,0.)); #18953=CARTESIAN_POINT('',(-3.31282584296562,-3.13681545995839,0.)); #18954=CARTESIAN_POINT('',(-3.25993877835102,-3.25478108784874,0.1)); #18955=CARTESIAN_POINT('',(-3.31282584296562,-3.13681545995839,0.1)); #18956=CARTESIAN_POINT('',(-3.25993877835102,-3.25478108784874,0.)); #18957=CARTESIAN_POINT('Origin',(-3.20876882622391,-3.13681545995839,0.)); #18958=CARTESIAN_POINT('',(-3.20876882622391,-3.13681545995839,0.)); #18959=CARTESIAN_POINT('',(-3.25993877835102,-3.25478108784874,0.)); #18960=CARTESIAN_POINT('',(-3.20876882622391,-3.13681545995839,0.1)); #18961=CARTESIAN_POINT('',(-3.25993877835102,-3.25478108784874,0.1)); #18962=CARTESIAN_POINT('',(-3.20876882622391,-3.13681545995839,0.)); #18963=CARTESIAN_POINT('Origin',(-3.16961866150921,-3.13681545995839,0.)); #18964=CARTESIAN_POINT('',(-3.16961866150921,-3.13681545995839,0.)); #18965=CARTESIAN_POINT('',(-3.20876882622391,-3.13681545995839,0.)); #18966=CARTESIAN_POINT('',(-3.16961866150921,-3.13681545995839,0.1)); #18967=CARTESIAN_POINT('',(-3.20876882622391,-3.13681545995839,0.1)); #18968=CARTESIAN_POINT('',(-3.16961866150921,-3.13681545995839,0.)); #18969=CARTESIAN_POINT('Origin',(-3.16961866150921,-3.34870714091428,0.)); #18970=CARTESIAN_POINT('',(-3.16961866150921,-3.34870714091428,0.)); #18971=CARTESIAN_POINT('',(-3.16961866150921,-3.13681545995839,0.)); #18972=CARTESIAN_POINT('',(-3.16961866150921,-3.34870714091428,0.1)); #18973=CARTESIAN_POINT('',(-3.16961866150921,-3.13681545995839,0.1)); #18974=CARTESIAN_POINT('',(-3.16961866150921,-3.34870714091428,0.)); #18975=CARTESIAN_POINT('Origin',(-3.19777930630399,-3.34870714091428,0.)); #18976=CARTESIAN_POINT('',(-3.16961866150921,-3.34870714091428,0.)); #18977=CARTESIAN_POINT('',(-3.16961866150921,-3.34870714091428,0.1)); #18978=CARTESIAN_POINT('Origin',(-3.26078735262442,-3.23435901653525,0.)); #18979=CARTESIAN_POINT('Origin',(-3.26078735262442,-3.23435901653525,0.1)); #18980=CARTESIAN_POINT('Origin',(-3.69419652643646,-3.30062799126465,0.)); #18981=CARTESIAN_POINT('',(-3.69419652643646,-3.33600050850688,0.)); #18982=CARTESIAN_POINT('',(-3.69419652643646,-3.30062799126465,0.)); #18983=CARTESIAN_POINT('',(-3.69419652643646,-3.33600050850688,0.)); #18984=CARTESIAN_POINT('',(-3.69419652643646,-3.33600050850688,0.1)); #18985=CARTESIAN_POINT('',(-3.69419652643646,-3.33600050850688,0.)); #18986=CARTESIAN_POINT('',(-3.69419652643646,-3.30062799126465,0.1)); #18987=CARTESIAN_POINT('',(-3.69419652643646,-3.33600050850688,0.1)); #18988=CARTESIAN_POINT('',(-3.69419652643646,-3.30062799126465,0.)); #18989=CARTESIAN_POINT('Origin',(-3.69213599145148,-3.30062799126465,0.)); #18990=CARTESIAN_POINT('',(-3.69213599145148,-3.30062799126465,0.)); #18991=CARTESIAN_POINT('',(-3.69419652643646,-3.30062799126465,0.)); #18992=CARTESIAN_POINT('',(-3.69213599145148,-3.30062799126465,0.1)); #18993=CARTESIAN_POINT('',(-3.69419652643646,-3.30062799126465,0.1)); #18994=CARTESIAN_POINT('',(-3.69213599145148,-3.30062799126465,0.)); #18995=CARTESIAN_POINT('Ctrl Pts',(-3.62671400567823,-3.32810179106444, 0.)); #18996=CARTESIAN_POINT('Ctrl Pts',(-3.62671400567823,-3.32810179106444, 0.1)); #18997=CARTESIAN_POINT('Ctrl Pts',(-3.64302657430935,-3.32810179106444, 0.)); #18998=CARTESIAN_POINT('Ctrl Pts',(-3.64302657430935,-3.32810179106444, 0.1)); #18999=CARTESIAN_POINT('Ctrl Pts',(-3.67822738030284,-3.31367804616955, 0.)); #19000=CARTESIAN_POINT('Ctrl Pts',(-3.67822738030284,-3.31367804616955, 0.1)); #19001=CARTESIAN_POINT('Ctrl Pts',(-3.69213599145148,-3.30062799126465, 0.)); #19002=CARTESIAN_POINT('Ctrl Pts',(-3.69213599145148,-3.30062799126465, 0.1)); #19003=CARTESIAN_POINT('',(-3.62671400567823,-3.32810179106444,0.)); #19004=CARTESIAN_POINT('Ctrl Pts',(-3.69213599145148,-3.30062799126465, 0.)); #19005=CARTESIAN_POINT('Ctrl Pts',(-3.67822738030284,-3.31367804616955, 0.)); #19006=CARTESIAN_POINT('Ctrl Pts',(-3.64302657430935,-3.32810179106444, 0.)); #19007=CARTESIAN_POINT('Ctrl Pts',(-3.62671400567823,-3.32810179106444, 0.)); #19008=CARTESIAN_POINT('',(-3.62671400567823,-3.32810179106444,0.1)); #19009=CARTESIAN_POINT('Ctrl Pts',(-3.62671400567823,-3.32810179106444, 0.1)); #19010=CARTESIAN_POINT('Ctrl Pts',(-3.64302657430935,-3.32810179106444, 0.1)); #19011=CARTESIAN_POINT('Ctrl Pts',(-3.67822738030284,-3.31367804616955, 0.1)); #19012=CARTESIAN_POINT('Ctrl Pts',(-3.69213599145148,-3.30062799126465, 0.1)); #19013=CARTESIAN_POINT('',(-3.62671400567823,-3.32810179106444,0.)); #19014=CARTESIAN_POINT('Ctrl Pts',(-3.57949341227234,-3.29272927382221, 0.)); #19015=CARTESIAN_POINT('Ctrl Pts',(-3.57949341227234,-3.29272927382221, 0.1)); #19016=CARTESIAN_POINT('Ctrl Pts',(-3.57949341227234,-3.30869841995583, 0.)); #19017=CARTESIAN_POINT('Ctrl Pts',(-3.57949341227234,-3.30869841995583, 0.1)); #19018=CARTESIAN_POINT('Ctrl Pts',(-3.60336127584841,-3.32810179106444, 0.)); #19019=CARTESIAN_POINT('Ctrl Pts',(-3.60336127584841,-3.32810179106444, 0.1)); #19020=CARTESIAN_POINT('Ctrl Pts',(-3.62671400567823,-3.32810179106444, 0.)); #19021=CARTESIAN_POINT('Ctrl Pts',(-3.62671400567823,-3.32810179106444, 0.1)); #19022=CARTESIAN_POINT('',(-3.57949341227234,-3.29272927382221,0.)); #19023=CARTESIAN_POINT('Ctrl Pts',(-3.62671400567823,-3.32810179106444, 0.)); #19024=CARTESIAN_POINT('Ctrl Pts',(-3.60336127584841,-3.32810179106444, 0.)); #19025=CARTESIAN_POINT('Ctrl Pts',(-3.57949341227234,-3.30869841995583, 0.)); #19026=CARTESIAN_POINT('Ctrl Pts',(-3.57949341227234,-3.29272927382221, 0.)); #19027=CARTESIAN_POINT('',(-3.57949341227234,-3.29272927382221,0.1)); #19028=CARTESIAN_POINT('Ctrl Pts',(-3.57949341227234,-3.29272927382221, 0.1)); #19029=CARTESIAN_POINT('Ctrl Pts',(-3.57949341227234,-3.30869841995583, 0.1)); #19030=CARTESIAN_POINT('Ctrl Pts',(-3.60336127584841,-3.32810179106444, 0.1)); #19031=CARTESIAN_POINT('Ctrl Pts',(-3.62671400567823,-3.32810179106444, 0.1)); #19032=CARTESIAN_POINT('',(-3.57949341227234,-3.29272927382221,0.)); #19033=CARTESIAN_POINT('Ctrl Pts',(-3.60559352208214,-3.2602758478087,0.)); #19034=CARTESIAN_POINT('Ctrl Pts',(-3.60559352208214,-3.2602758478087,0.1)); #19035=CARTESIAN_POINT('Ctrl Pts',(-3.59202833343099,-3.26422520652992, 0.)); #19036=CARTESIAN_POINT('Ctrl Pts',(-3.59202833343099,-3.26422520652992, 0.1)); #19037=CARTESIAN_POINT('Ctrl Pts',(-3.57949341227234,-3.2800226414148,0.)); #19038=CARTESIAN_POINT('Ctrl Pts',(-3.57949341227234,-3.2800226414148,0.1)); #19039=CARTESIAN_POINT('Ctrl Pts',(-3.57949341227234,-3.29272927382221, 0.)); #19040=CARTESIAN_POINT('Ctrl Pts',(-3.57949341227234,-3.29272927382221, 0.1)); #19041=CARTESIAN_POINT('',(-3.60559352208214,-3.2602758478087,0.)); #19042=CARTESIAN_POINT('Ctrl Pts',(-3.57949341227234,-3.29272927382221, 0.)); #19043=CARTESIAN_POINT('Ctrl Pts',(-3.57949341227234,-3.2800226414148,0.)); #19044=CARTESIAN_POINT('Ctrl Pts',(-3.59202833343099,-3.26422520652992, 0.)); #19045=CARTESIAN_POINT('Ctrl Pts',(-3.60559352208214,-3.2602758478087,0.)); #19046=CARTESIAN_POINT('',(-3.60559352208214,-3.2602758478087,0.1)); #19047=CARTESIAN_POINT('Ctrl Pts',(-3.60559352208214,-3.2602758478087,0.1)); #19048=CARTESIAN_POINT('Ctrl Pts',(-3.59202833343099,-3.26422520652992, 0.1)); #19049=CARTESIAN_POINT('Ctrl Pts',(-3.57949341227234,-3.2800226414148,0.1)); #19050=CARTESIAN_POINT('Ctrl Pts',(-3.57949341227234,-3.29272927382221, 0.1)); #19051=CARTESIAN_POINT('',(-3.60559352208214,-3.2602758478087,0.)); #19052=CARTESIAN_POINT('Ctrl Pts',(-3.6438851305531,-3.25066001787878,0.)); #19053=CARTESIAN_POINT('Ctrl Pts',(-3.6438851305531,-3.25066001787878,0.1)); #19054=CARTESIAN_POINT('Ctrl Pts',(-3.63169363189194,-3.25375082035625, 0.)); #19055=CARTESIAN_POINT('Ctrl Pts',(-3.63169363189194,-3.25375082035625, 0.1)); #19056=CARTESIAN_POINT('Ctrl Pts',(-3.61538106326082,-3.25752846782872, 0.)); #19057=CARTESIAN_POINT('Ctrl Pts',(-3.61538106326082,-3.25752846782872, 0.1)); #19058=CARTESIAN_POINT('Ctrl Pts',(-3.60559352208214,-3.2602758478087,0.)); #19059=CARTESIAN_POINT('Ctrl Pts',(-3.60559352208214,-3.2602758478087,0.1)); #19060=CARTESIAN_POINT('',(-3.6438851305531,-3.25066001787878,0.)); #19061=CARTESIAN_POINT('Ctrl Pts',(-3.60559352208214,-3.2602758478087,0.)); #19062=CARTESIAN_POINT('Ctrl Pts',(-3.61538106326082,-3.25752846782872, 0.)); #19063=CARTESIAN_POINT('Ctrl Pts',(-3.63169363189194,-3.25375082035625, 0.)); #19064=CARTESIAN_POINT('Ctrl Pts',(-3.6438851305531,-3.25066001787878,0.)); #19065=CARTESIAN_POINT('',(-3.6438851305531,-3.25066001787878,0.1)); #19066=CARTESIAN_POINT('Ctrl Pts',(-3.6438851305531,-3.25066001787878,0.1)); #19067=CARTESIAN_POINT('Ctrl Pts',(-3.63169363189194,-3.25375082035625, 0.1)); #19068=CARTESIAN_POINT('Ctrl Pts',(-3.61538106326082,-3.25752846782872, 0.1)); #19069=CARTESIAN_POINT('Ctrl Pts',(-3.60559352208214,-3.2602758478087,0.1)); #19070=CARTESIAN_POINT('',(-3.6438851305531,-3.25066001787878,0.)); #19071=CARTESIAN_POINT('Ctrl Pts',(-3.67891422529783,-3.23194349176517, 0.)); #19072=CARTESIAN_POINT('Ctrl Pts',(-3.67891422529783,-3.23194349176517, 0.1)); #19073=CARTESIAN_POINT('Ctrl Pts',(-3.67221748659663,-3.23898365296387, 0.)); #19074=CARTESIAN_POINT('Ctrl Pts',(-3.67221748659663,-3.23898365296387, 0.1)); #19075=CARTESIAN_POINT('Ctrl Pts',(-3.65487465047301,-3.24774092665005, 0.)); #19076=CARTESIAN_POINT('Ctrl Pts',(-3.65487465047301,-3.24774092665005, 0.1)); #19077=CARTESIAN_POINT('Ctrl Pts',(-3.6438851305531,-3.25066001787878,0.)); #19078=CARTESIAN_POINT('Ctrl Pts',(-3.6438851305531,-3.25066001787878,0.1)); #19079=CARTESIAN_POINT('',(-3.67891422529783,-3.23194349176517,0.)); #19080=CARTESIAN_POINT('Ctrl Pts',(-3.6438851305531,-3.25066001787878,0.)); #19081=CARTESIAN_POINT('Ctrl Pts',(-3.65487465047301,-3.24774092665005, 0.)); #19082=CARTESIAN_POINT('Ctrl Pts',(-3.67221748659663,-3.23898365296387, 0.)); #19083=CARTESIAN_POINT('Ctrl Pts',(-3.67891422529783,-3.23194349176517, 0.)); #19084=CARTESIAN_POINT('',(-3.67891422529783,-3.23194349176517,0.1)); #19085=CARTESIAN_POINT('Ctrl Pts',(-3.67891422529783,-3.23194349176517, 0.1)); #19086=CARTESIAN_POINT('Ctrl Pts',(-3.67221748659663,-3.23898365296387, 0.1)); #19087=CARTESIAN_POINT('Ctrl Pts',(-3.65487465047301,-3.24774092665005, 0.1)); #19088=CARTESIAN_POINT('Ctrl Pts',(-3.6438851305531,-3.25066001787878,0.1)); #19089=CARTESIAN_POINT('',(-3.67891422529783,-3.23194349176517,0.)); #19090=CARTESIAN_POINT('Ctrl Pts',(-3.69265112519773,-3.19365188329421, 0.)); #19091=CARTESIAN_POINT('Ctrl Pts',(-3.69265112519773,-3.19365188329421, 0.1)); #19092=CARTESIAN_POINT('Ctrl Pts',(-3.69265112519773,-3.20601509320412, 0.)); #19093=CARTESIAN_POINT('Ctrl Pts',(-3.69265112519773,-3.20601509320412, 0.1)); #19094=CARTESIAN_POINT('Ctrl Pts',(-3.68543925275028,-3.22490333056647, 0.)); #19095=CARTESIAN_POINT('Ctrl Pts',(-3.68543925275028,-3.22490333056647, 0.1)); #19096=CARTESIAN_POINT('Ctrl Pts',(-3.67891422529783,-3.23194349176517, 0.)); #19097=CARTESIAN_POINT('Ctrl Pts',(-3.67891422529783,-3.23194349176517, 0.1)); #19098=CARTESIAN_POINT('',(-3.69265112519773,-3.19365188329421,0.)); #19099=CARTESIAN_POINT('Ctrl Pts',(-3.67891422529783,-3.23194349176517, 0.)); #19100=CARTESIAN_POINT('Ctrl Pts',(-3.68543925275028,-3.22490333056647, 0.)); #19101=CARTESIAN_POINT('Ctrl Pts',(-3.69265112519773,-3.20601509320412, 0.)); #19102=CARTESIAN_POINT('Ctrl Pts',(-3.69265112519773,-3.19365188329421, 0.)); #19103=CARTESIAN_POINT('',(-3.69265112519773,-3.19365188329421,0.1)); #19104=CARTESIAN_POINT('Ctrl Pts',(-3.69265112519773,-3.19365188329421, 0.1)); #19105=CARTESIAN_POINT('Ctrl Pts',(-3.69265112519773,-3.20601509320412, 0.1)); #19106=CARTESIAN_POINT('Ctrl Pts',(-3.68543925275028,-3.22490333056647, 0.1)); #19107=CARTESIAN_POINT('Ctrl Pts',(-3.67891422529783,-3.23194349176517, 0.1)); #19108=CARTESIAN_POINT('',(-3.69265112519773,-3.19365188329421,0.)); #19109=CARTESIAN_POINT('Ctrl Pts',(-3.62139095696702,-3.13303781248592, 0.)); #19110=CARTESIAN_POINT('Ctrl Pts',(-3.62139095696702,-3.13303781248592, 0.1)); #19111=CARTESIAN_POINT('Ctrl Pts',(-3.65247069299053,-3.13303781248592, 0.)); #19112=CARTESIAN_POINT('Ctrl Pts',(-3.65247069299053,-3.13303781248592, 0.1)); #19113=CARTESIAN_POINT('Ctrl Pts',(-3.69265112519773,-3.16789519598191, 0.)); #19114=CARTESIAN_POINT('Ctrl Pts',(-3.69265112519773,-3.16789519598191, 0.1)); #19115=CARTESIAN_POINT('Ctrl Pts',(-3.69265112519773,-3.19365188329421, 0.)); #19116=CARTESIAN_POINT('Ctrl Pts',(-3.69265112519773,-3.19365188329421, 0.1)); #19117=CARTESIAN_POINT('',(-3.62139095696702,-3.13303781248592,0.)); #19118=CARTESIAN_POINT('Ctrl Pts',(-3.69265112519773,-3.19365188329421, 0.)); #19119=CARTESIAN_POINT('Ctrl Pts',(-3.69265112519773,-3.16789519598191, 0.)); #19120=CARTESIAN_POINT('Ctrl Pts',(-3.65247069299053,-3.13303781248592, 0.)); #19121=CARTESIAN_POINT('Ctrl Pts',(-3.62139095696702,-3.13303781248592, 0.)); #19122=CARTESIAN_POINT('',(-3.62139095696702,-3.13303781248592,0.1)); #19123=CARTESIAN_POINT('Ctrl Pts',(-3.62139095696702,-3.13303781248592, 0.1)); #19124=CARTESIAN_POINT('Ctrl Pts',(-3.65247069299053,-3.13303781248592, 0.1)); #19125=CARTESIAN_POINT('Ctrl Pts',(-3.69265112519773,-3.16789519598191, 0.1)); #19126=CARTESIAN_POINT('Ctrl Pts',(-3.69265112519773,-3.19365188329421, 0.1)); #19127=CARTESIAN_POINT('',(-3.62139095696702,-3.13303781248592,0.)); #19128=CARTESIAN_POINT('Ctrl Pts',(-3.55837292867625,-3.14677471238582, 0.)); #19129=CARTESIAN_POINT('Ctrl Pts',(-3.55837292867625,-3.14677471238582, 0.1)); #19130=CARTESIAN_POINT('Ctrl Pts',(-3.5719381173274,-3.14007797368462,0.)); #19131=CARTESIAN_POINT('Ctrl Pts',(-3.5719381173274,-3.14007797368462,0.1)); #19132=CARTESIAN_POINT('Ctrl Pts',(-3.60353298709716,-3.13303781248592, 0.)); #19133=CARTESIAN_POINT('Ctrl Pts',(-3.60353298709716,-3.13303781248592, 0.1)); #19134=CARTESIAN_POINT('Ctrl Pts',(-3.62139095696702,-3.13303781248592, 0.)); #19135=CARTESIAN_POINT('Ctrl Pts',(-3.62139095696702,-3.13303781248592, 0.1)); #19136=CARTESIAN_POINT('',(-3.55837292867625,-3.14677471238582,0.)); #19137=CARTESIAN_POINT('Ctrl Pts',(-3.62139095696702,-3.13303781248592, 0.)); #19138=CARTESIAN_POINT('Ctrl Pts',(-3.60353298709716,-3.13303781248592, 0.)); #19139=CARTESIAN_POINT('Ctrl Pts',(-3.5719381173274,-3.14007797368462,0.)); #19140=CARTESIAN_POINT('Ctrl Pts',(-3.55837292867625,-3.14677471238582, 0.)); #19141=CARTESIAN_POINT('',(-3.55837292867625,-3.14677471238582,0.1)); #19142=CARTESIAN_POINT('Ctrl Pts',(-3.55837292867625,-3.14677471238582, 0.1)); #19143=CARTESIAN_POINT('Ctrl Pts',(-3.5719381173274,-3.14007797368462,0.1)); #19144=CARTESIAN_POINT('Ctrl Pts',(-3.60353298709716,-3.13303781248592, 0.1)); #19145=CARTESIAN_POINT('Ctrl Pts',(-3.62139095696702,-3.13303781248592, 0.1)); #19146=CARTESIAN_POINT('',(-3.55837292867625,-3.14677471238582,0.)); #19147=CARTESIAN_POINT('Origin',(-3.55837292867625,-3.18043011714056,0.)); #19148=CARTESIAN_POINT('',(-3.55837292867625,-3.18043011714056,0.)); #19149=CARTESIAN_POINT('',(-3.55837292867625,-3.14677471238582,0.)); #19150=CARTESIAN_POINT('',(-3.55837292867625,-3.18043011714056,0.1)); #19151=CARTESIAN_POINT('',(-3.55837292867625,-3.14677471238582,0.1)); #19152=CARTESIAN_POINT('',(-3.55837292867625,-3.18043011714056,0.)); #19153=CARTESIAN_POINT('Origin',(-3.56043346366123,-3.18043011714056,0.)); #19154=CARTESIAN_POINT('',(-3.56043346366123,-3.18043011714056,0.)); #19155=CARTESIAN_POINT('',(-3.55837292867625,-3.18043011714056,0.)); #19156=CARTESIAN_POINT('',(-3.56043346366123,-3.18043011714056,0.1)); #19157=CARTESIAN_POINT('',(-3.55837292867625,-3.18043011714056,0.1)); #19158=CARTESIAN_POINT('',(-3.56043346366123,-3.18043011714056,0.)); #19159=CARTESIAN_POINT('Ctrl Pts',(-3.61950213323078,-3.15742080980824, 0.)); #19160=CARTESIAN_POINT('Ctrl Pts',(-3.61950213323078,-3.15742080980824, 0.1)); #19161=CARTESIAN_POINT('Ctrl Pts',(-3.60215929710717,-3.15742080980824, 0.)); #19162=CARTESIAN_POINT('Ctrl Pts',(-3.60215929710717,-3.15742080980824, 0.1)); #19163=CARTESIAN_POINT('Ctrl Pts',(-3.57056442733741,-3.17115770970813, 0.)); #19164=CARTESIAN_POINT('Ctrl Pts',(-3.57056442733741,-3.17115770970813, 0.1)); #19165=CARTESIAN_POINT('Ctrl Pts',(-3.56043346366123,-3.18043011714056, 0.)); #19166=CARTESIAN_POINT('Ctrl Pts',(-3.56043346366123,-3.18043011714056, 0.1)); #19167=CARTESIAN_POINT('',(-3.61950213323078,-3.15742080980824,0.)); #19168=CARTESIAN_POINT('Ctrl Pts',(-3.56043346366123,-3.18043011714056, 0.)); #19169=CARTESIAN_POINT('Ctrl Pts',(-3.57056442733741,-3.17115770970813, 0.)); #19170=CARTESIAN_POINT('Ctrl Pts',(-3.60215929710717,-3.15742080980824, 0.)); #19171=CARTESIAN_POINT('Ctrl Pts',(-3.61950213323078,-3.15742080980824, 0.)); #19172=CARTESIAN_POINT('',(-3.61950213323078,-3.15742080980824,0.1)); #19173=CARTESIAN_POINT('Ctrl Pts',(-3.61950213323078,-3.15742080980824, 0.1)); #19174=CARTESIAN_POINT('Ctrl Pts',(-3.60215929710717,-3.15742080980824, 0.1)); #19175=CARTESIAN_POINT('Ctrl Pts',(-3.57056442733741,-3.17115770970813, 0.1)); #19176=CARTESIAN_POINT('Ctrl Pts',(-3.56043346366123,-3.18043011714056, 0.1)); #19177=CARTESIAN_POINT('',(-3.61950213323078,-3.15742080980824,0.)); #19178=CARTESIAN_POINT('Ctrl Pts',(-3.6632885016617,-3.19073279206548,0.)); #19179=CARTESIAN_POINT('Ctrl Pts',(-3.6632885016617,-3.19073279206548,0.1)); #19180=CARTESIAN_POINT('Ctrl Pts',(-3.6632885016617,-3.17579391342435,0.)); #19181=CARTESIAN_POINT('Ctrl Pts',(-3.6632885016617,-3.17579391342435,0.1)); #19182=CARTESIAN_POINT('Ctrl Pts',(-3.63907721558813,-3.15742080980824, 0.)); #19183=CARTESIAN_POINT('Ctrl Pts',(-3.63907721558813,-3.15742080980824, 0.1)); #19184=CARTESIAN_POINT('Ctrl Pts',(-3.61950213323078,-3.15742080980824, 0.)); #19185=CARTESIAN_POINT('Ctrl Pts',(-3.61950213323078,-3.15742080980824, 0.1)); #19186=CARTESIAN_POINT('',(-3.6632885016617,-3.19073279206548,0.)); #19187=CARTESIAN_POINT('Ctrl Pts',(-3.61950213323078,-3.15742080980824, 0.)); #19188=CARTESIAN_POINT('Ctrl Pts',(-3.63907721558813,-3.15742080980824, 0.)); #19189=CARTESIAN_POINT('Ctrl Pts',(-3.6632885016617,-3.17579391342435,0.)); #19190=CARTESIAN_POINT('Ctrl Pts',(-3.6632885016617,-3.19073279206548,0.)); #19191=CARTESIAN_POINT('',(-3.6632885016617,-3.19073279206548,0.1)); #19192=CARTESIAN_POINT('Ctrl Pts',(-3.6632885016617,-3.19073279206548,0.1)); #19193=CARTESIAN_POINT('Ctrl Pts',(-3.6632885016617,-3.17579391342435,0.1)); #19194=CARTESIAN_POINT('Ctrl Pts',(-3.63907721558813,-3.15742080980824, 0.1)); #19195=CARTESIAN_POINT('Ctrl Pts',(-3.61950213323078,-3.15742080980824, 0.1)); #19196=CARTESIAN_POINT('',(-3.6632885016617,-3.19073279206548,0.)); #19197=CARTESIAN_POINT('Ctrl Pts',(-3.63564299061316,-3.22370135182523, 0.)); #19198=CARTESIAN_POINT('Ctrl Pts',(-3.63564299061316,-3.22370135182523, 0.1)); #19199=CARTESIAN_POINT('Ctrl Pts',(-3.64903646801556,-3.22009541560151, 0.)); #19200=CARTESIAN_POINT('Ctrl Pts',(-3.64903646801556,-3.22009541560151, 0.1)); #19201=CARTESIAN_POINT('Ctrl Pts',(-3.6632885016617,-3.20412626946788,0.)); #19202=CARTESIAN_POINT('Ctrl Pts',(-3.6632885016617,-3.20412626946788,0.1)); #19203=CARTESIAN_POINT('Ctrl Pts',(-3.6632885016617,-3.19073279206548,0.)); #19204=CARTESIAN_POINT('Ctrl Pts',(-3.6632885016617,-3.19073279206548,0.1)); #19205=CARTESIAN_POINT('',(-3.63564299061316,-3.22370135182523,0.)); #19206=CARTESIAN_POINT('Ctrl Pts',(-3.6632885016617,-3.19073279206548,0.)); #19207=CARTESIAN_POINT('Ctrl Pts',(-3.6632885016617,-3.20412626946788,0.)); #19208=CARTESIAN_POINT('Ctrl Pts',(-3.64903646801556,-3.22009541560151, 0.)); #19209=CARTESIAN_POINT('Ctrl Pts',(-3.63564299061316,-3.22370135182523, 0.)); #19210=CARTESIAN_POINT('',(-3.63564299061316,-3.22370135182523,0.1)); #19211=CARTESIAN_POINT('Ctrl Pts',(-3.63564299061316,-3.22370135182523, 0.1)); #19212=CARTESIAN_POINT('Ctrl Pts',(-3.64903646801556,-3.22009541560151, 0.1)); #19213=CARTESIAN_POINT('Ctrl Pts',(-3.6632885016617,-3.20412626946788,0.1)); #19214=CARTESIAN_POINT('Ctrl Pts',(-3.6632885016617,-3.19073279206548,0.1)); #19215=CARTESIAN_POINT('',(-3.63564299061316,-3.22370135182523,0.)); #19216=CARTESIAN_POINT('Ctrl Pts',(-3.59220004467974,-3.2348625829939,0.)); #19217=CARTESIAN_POINT('Ctrl Pts',(-3.59220004467974,-3.2348625829939,0.1)); #19218=CARTESIAN_POINT('Ctrl Pts',(-3.60078560711718,-3.23228691426267, 0.)); #19219=CARTESIAN_POINT('Ctrl Pts',(-3.60078560711718,-3.23228691426267, 0.1)); #19220=CARTESIAN_POINT('Ctrl Pts',(-3.62671400567823,-3.22610530930771, 0.)); #19221=CARTESIAN_POINT('Ctrl Pts',(-3.62671400567823,-3.22610530930771, 0.1)); #19222=CARTESIAN_POINT('Ctrl Pts',(-3.63564299061316,-3.22370135182523, 0.)); #19223=CARTESIAN_POINT('Ctrl Pts',(-3.63564299061316,-3.22370135182523, 0.1)); #19224=CARTESIAN_POINT('',(-3.59220004467974,-3.2348625829939,0.)); #19225=CARTESIAN_POINT('Ctrl Pts',(-3.63564299061316,-3.22370135182523, 0.)); #19226=CARTESIAN_POINT('Ctrl Pts',(-3.62671400567823,-3.22610530930771, 0.)); #19227=CARTESIAN_POINT('Ctrl Pts',(-3.60078560711718,-3.23228691426267, 0.)); #19228=CARTESIAN_POINT('Ctrl Pts',(-3.59220004467974,-3.2348625829939,0.)); #19229=CARTESIAN_POINT('',(-3.59220004467974,-3.2348625829939,0.1)); #19230=CARTESIAN_POINT('Ctrl Pts',(-3.59220004467974,-3.2348625829939,0.1)); #19231=CARTESIAN_POINT('Ctrl Pts',(-3.60078560711718,-3.23228691426267, 0.1)); #19232=CARTESIAN_POINT('Ctrl Pts',(-3.62671400567823,-3.22610530930771, 0.1)); #19233=CARTESIAN_POINT('Ctrl Pts',(-3.63564299061316,-3.22370135182523, 0.1)); #19234=CARTESIAN_POINT('',(-3.59220004467974,-3.2348625829939,0.)); #19235=CARTESIAN_POINT('Ctrl Pts',(-3.55013078873631,-3.28826478135474, 0.)); #19236=CARTESIAN_POINT('Ctrl Pts',(-3.55013078873631,-3.28826478135474, 0.1)); #19237=CARTESIAN_POINT('Ctrl Pts',(-3.55013078873631,-3.26851798774864, 0.)); #19238=CARTESIAN_POINT('Ctrl Pts',(-3.55013078873631,-3.26851798774864, 0.1)); #19239=CARTESIAN_POINT('Ctrl Pts',(-3.57039271608866,-3.2415593216951,0.)); #19240=CARTESIAN_POINT('Ctrl Pts',(-3.57039271608866,-3.2415593216951,0.1)); #19241=CARTESIAN_POINT('Ctrl Pts',(-3.59220004467974,-3.2348625829939,0.)); #19242=CARTESIAN_POINT('Ctrl Pts',(-3.59220004467974,-3.2348625829939,0.1)); #19243=CARTESIAN_POINT('',(-3.55013078873631,-3.28826478135474,0.)); #19244=CARTESIAN_POINT('Ctrl Pts',(-3.59220004467974,-3.2348625829939,0.)); #19245=CARTESIAN_POINT('Ctrl Pts',(-3.57039271608866,-3.2415593216951,0.)); #19246=CARTESIAN_POINT('Ctrl Pts',(-3.55013078873631,-3.26851798774864, 0.)); #19247=CARTESIAN_POINT('Ctrl Pts',(-3.55013078873631,-3.28826478135474, 0.)); #19248=CARTESIAN_POINT('',(-3.55013078873631,-3.28826478135474,0.1)); #19249=CARTESIAN_POINT('Ctrl Pts',(-3.55013078873631,-3.28826478135474, 0.1)); #19250=CARTESIAN_POINT('Ctrl Pts',(-3.55013078873631,-3.26851798774864, 0.1)); #19251=CARTESIAN_POINT('Ctrl Pts',(-3.57039271608866,-3.2415593216951,0.1)); #19252=CARTESIAN_POINT('Ctrl Pts',(-3.59220004467974,-3.2348625829939,0.1)); #19253=CARTESIAN_POINT('',(-3.55013078873631,-3.28826478135474,0.)); #19254=CARTESIAN_POINT('Ctrl Pts',(-3.56936244859617,-3.3332531285269,0.)); #19255=CARTESIAN_POINT('Ctrl Pts',(-3.56936244859617,-3.3332531285269,0.1)); #19256=CARTESIAN_POINT('Ctrl Pts',(-3.56026175241248,-3.32483927733821, 0.)); #19257=CARTESIAN_POINT('Ctrl Pts',(-3.56026175241248,-3.32483927733821, 0.1)); #19258=CARTESIAN_POINT('Ctrl Pts',(-3.55013078873631,-3.30079970251339, 0.)); #19259=CARTESIAN_POINT('Ctrl Pts',(-3.55013078873631,-3.30079970251339, 0.1)); #19260=CARTESIAN_POINT('Ctrl Pts',(-3.55013078873631,-3.28826478135474, 0.)); #19261=CARTESIAN_POINT('Ctrl Pts',(-3.55013078873631,-3.28826478135474, 0.1)); #19262=CARTESIAN_POINT('',(-3.56936244859617,-3.3332531285269,0.)); #19263=CARTESIAN_POINT('Ctrl Pts',(-3.55013078873631,-3.28826478135474, 0.)); #19264=CARTESIAN_POINT('Ctrl Pts',(-3.55013078873631,-3.30079970251339, 0.)); #19265=CARTESIAN_POINT('Ctrl Pts',(-3.56026175241248,-3.32483927733821, 0.)); #19266=CARTESIAN_POINT('Ctrl Pts',(-3.56936244859617,-3.3332531285269,0.)); #19267=CARTESIAN_POINT('',(-3.56936244859617,-3.3332531285269,0.1)); #19268=CARTESIAN_POINT('Ctrl Pts',(-3.56936244859617,-3.3332531285269,0.1)); #19269=CARTESIAN_POINT('Ctrl Pts',(-3.56026175241248,-3.32483927733821, 0.1)); #19270=CARTESIAN_POINT('Ctrl Pts',(-3.55013078873631,-3.30079970251339, 0.1)); #19271=CARTESIAN_POINT('Ctrl Pts',(-3.55013078873631,-3.28826478135474, 0.1)); #19272=CARTESIAN_POINT('',(-3.56936244859617,-3.3332531285269,0.)); #19273=CARTESIAN_POINT('Ctrl Pts',(-3.62465347069324,-3.35248478838675, 0.)); #19274=CARTESIAN_POINT('Ctrl Pts',(-3.62465347069324,-3.35248478838675, 0.1)); #19275=CARTESIAN_POINT('Ctrl Pts',(-3.60525009958464,-3.35248478838675, 0.)); #19276=CARTESIAN_POINT('Ctrl Pts',(-3.60525009958464,-3.35248478838675, 0.1)); #19277=CARTESIAN_POINT('Ctrl Pts',(-3.57949341227234,-3.34252553595933, 0.)); #19278=CARTESIAN_POINT('Ctrl Pts',(-3.57949341227234,-3.34252553595933, 0.1)); #19279=CARTESIAN_POINT('Ctrl Pts',(-3.56936244859617,-3.3332531285269,0.)); #19280=CARTESIAN_POINT('Ctrl Pts',(-3.56936244859617,-3.3332531285269,0.1)); #19281=CARTESIAN_POINT('',(-3.62465347069324,-3.35248478838675,0.)); #19282=CARTESIAN_POINT('Ctrl Pts',(-3.56936244859617,-3.3332531285269,0.)); #19283=CARTESIAN_POINT('Ctrl Pts',(-3.57949341227234,-3.34252553595933, 0.)); #19284=CARTESIAN_POINT('Ctrl Pts',(-3.60525009958464,-3.35248478838675, 0.)); #19285=CARTESIAN_POINT('Ctrl Pts',(-3.62465347069324,-3.35248478838675, 0.)); #19286=CARTESIAN_POINT('',(-3.62465347069324,-3.35248478838675,0.1)); #19287=CARTESIAN_POINT('Ctrl Pts',(-3.62465347069324,-3.35248478838675, 0.1)); #19288=CARTESIAN_POINT('Ctrl Pts',(-3.60525009958464,-3.35248478838675, 0.1)); #19289=CARTESIAN_POINT('Ctrl Pts',(-3.57949341227234,-3.34252553595933, 0.1)); #19290=CARTESIAN_POINT('Ctrl Pts',(-3.56936244859617,-3.3332531285269,0.1)); #19291=CARTESIAN_POINT('',(-3.62465347069324,-3.35248478838675,0.)); #19292=CARTESIAN_POINT('Ctrl Pts',(-3.69419652643646,-3.33600050850688, 0.)); #19293=CARTESIAN_POINT('Ctrl Pts',(-3.69419652643646,-3.33600050850688, 0.1)); #19294=CARTESIAN_POINT('Ctrl Pts',(-3.67994449279032,-3.34286895845682, 0.)); #19295=CARTESIAN_POINT('Ctrl Pts',(-3.67994449279032,-3.34286895845682, 0.1)); #19296=CARTESIAN_POINT('Ctrl Pts',(-3.64766277802557,-3.35248478838675, 0.)); #19297=CARTESIAN_POINT('Ctrl Pts',(-3.64766277802557,-3.35248478838675, 0.1)); #19298=CARTESIAN_POINT('Ctrl Pts',(-3.62465347069324,-3.35248478838675, 0.)); #19299=CARTESIAN_POINT('Ctrl Pts',(-3.62465347069324,-3.35248478838675, 0.1)); #19300=CARTESIAN_POINT('Ctrl Pts',(-3.62465347069324,-3.35248478838675, 0.)); #19301=CARTESIAN_POINT('Ctrl Pts',(-3.64766277802557,-3.35248478838675, 0.)); #19302=CARTESIAN_POINT('Ctrl Pts',(-3.67994449279032,-3.34286895845682, 0.)); #19303=CARTESIAN_POINT('Ctrl Pts',(-3.69419652643646,-3.33600050850688, 0.)); #19304=CARTESIAN_POINT('Ctrl Pts',(-3.69419652643646,-3.33600050850688, 0.1)); #19305=CARTESIAN_POINT('Ctrl Pts',(-3.67994449279032,-3.34286895845682, 0.1)); #19306=CARTESIAN_POINT('Ctrl Pts',(-3.64766277802557,-3.35248478838675, 0.1)); #19307=CARTESIAN_POINT('Ctrl Pts',(-3.62465347069324,-3.35248478838675, 0.1)); #19308=CARTESIAN_POINT('Origin',(-3.62326669408874,-3.24418573589537,0.)); #19309=CARTESIAN_POINT('Origin',(-3.62326669408874,-3.24418573589537,0.1)); #19310=CARTESIAN_POINT('Ctrl Pts',(-1.36525002038037,-3.62865939805775, 0.)); #19311=CARTESIAN_POINT('Ctrl Pts',(-1.36525002038037,-3.62865939805775, 0.1)); #19312=CARTESIAN_POINT('Ctrl Pts',(-1.35716314824572,-3.62102179659726, 0.)); #19313=CARTESIAN_POINT('Ctrl Pts',(-1.35716314824572,-3.62102179659726, 0.1)); #19314=CARTESIAN_POINT('Ctrl Pts',(-1.34952554678523,-3.59945680423821, 0.)); #19315=CARTESIAN_POINT('Ctrl Pts',(-1.34952554678523,-3.59945680423821, 0.1)); #19316=CARTESIAN_POINT('Ctrl Pts',(-1.34952554678523,-3.58508014266552, 0.)); #19317=CARTESIAN_POINT('Ctrl Pts',(-1.34952554678523,-3.58508014266552, 0.1)); #19318=CARTESIAN_POINT('',(-1.36525002038037,-3.62865939805775,0.)); #19319=CARTESIAN_POINT('',(-1.34952554678523,-3.58508014266552,0.)); #19320=CARTESIAN_POINT('Ctrl Pts',(-1.36525002038037,-3.62865939805775, 0.)); #19321=CARTESIAN_POINT('Ctrl Pts',(-1.35716314824572,-3.62102179659726, 0.)); #19322=CARTESIAN_POINT('Ctrl Pts',(-1.34952554678523,-3.59945680423821, 0.)); #19323=CARTESIAN_POINT('Ctrl Pts',(-1.34952554678523,-3.58508014266552, 0.)); #19324=CARTESIAN_POINT('',(-1.36525002038037,-3.62865939805775,0.1)); #19325=CARTESIAN_POINT('',(-1.36525002038037,-3.62865939805775,0.)); #19326=CARTESIAN_POINT('',(-1.34952554678523,-3.58508014266552,0.1)); #19327=CARTESIAN_POINT('Ctrl Pts',(-1.34952554678523,-3.58508014266552, 0.1)); #19328=CARTESIAN_POINT('Ctrl Pts',(-1.34952554678523,-3.59945680423821, 0.1)); #19329=CARTESIAN_POINT('Ctrl Pts',(-1.35716314824572,-3.62102179659726, 0.1)); #19330=CARTESIAN_POINT('Ctrl Pts',(-1.36525002038037,-3.62865939805775, 0.1)); #19331=CARTESIAN_POINT('',(-1.34952554678523,-3.58508014266552,0.)); #19332=CARTESIAN_POINT('Ctrl Pts',(-1.41534370054773,-3.64303605963045, 0.)); #19333=CARTESIAN_POINT('Ctrl Pts',(-1.41534370054773,-3.64303605963045, 0.1)); #19334=CARTESIAN_POINT('Ctrl Pts',(-1.39939459161552,-3.64303605963045, 0.)); #19335=CARTESIAN_POINT('Ctrl Pts',(-1.39939459161552,-3.64303605963045, 0.1)); #19336=CARTESIAN_POINT('Ctrl Pts',(-1.37401079852623,-3.63742017620361, 0.)); #19337=CARTESIAN_POINT('Ctrl Pts',(-1.37401079852623,-3.63742017620361, 0.1)); #19338=CARTESIAN_POINT('Ctrl Pts',(-1.36525002038037,-3.62865939805775, 0.)); #19339=CARTESIAN_POINT('Ctrl Pts',(-1.36525002038037,-3.62865939805775, 0.1)); #19340=CARTESIAN_POINT('',(-1.41534370054773,-3.64303605963045,0.)); #19341=CARTESIAN_POINT('Ctrl Pts',(-1.41534370054773,-3.64303605963045, 0.)); #19342=CARTESIAN_POINT('Ctrl Pts',(-1.39939459161552,-3.64303605963045, 0.)); #19343=CARTESIAN_POINT('Ctrl Pts',(-1.37401079852623,-3.63742017620361, 0.)); #19344=CARTESIAN_POINT('Ctrl Pts',(-1.36525002038037,-3.62865939805775, 0.)); #19345=CARTESIAN_POINT('',(-1.41534370054773,-3.64303605963045,0.1)); #19346=CARTESIAN_POINT('',(-1.41534370054773,-3.64303605963045,0.)); #19347=CARTESIAN_POINT('Ctrl Pts',(-1.36525002038037,-3.62865939805775, 0.1)); #19348=CARTESIAN_POINT('Ctrl Pts',(-1.37401079852623,-3.63742017620361, 0.1)); #19349=CARTESIAN_POINT('Ctrl Pts',(-1.39939459161552,-3.64303605963045, 0.1)); #19350=CARTESIAN_POINT('Ctrl Pts',(-1.41534370054773,-3.64303605963045, 0.1)); #19351=CARTESIAN_POINT('Origin',(-1.44769118908629,-3.64303605963045,0.)); #19352=CARTESIAN_POINT('',(-1.44769118908629,-3.64303605963045,0.)); #19353=CARTESIAN_POINT('',(-1.42462651709037,-3.64303605963045,0.)); #19354=CARTESIAN_POINT('',(-1.44769118908629,-3.64303605963045,0.1)); #19355=CARTESIAN_POINT('',(-1.44769118908629,-3.64303605963045,0.)); #19356=CARTESIAN_POINT('',(-1.42462651709037,-3.64303605963045,0.1)); #19357=CARTESIAN_POINT('Origin',(-1.44769118908629,-3.5388052632284,0.)); #19358=CARTESIAN_POINT('',(-1.44769118908629,-3.5388052632284,0.)); #19359=CARTESIAN_POINT('',(-1.44769118908629,-3.60256382108636,0.)); #19360=CARTESIAN_POINT('',(-1.44769118908629,-3.5388052632284,0.1)); #19361=CARTESIAN_POINT('',(-1.44769118908629,-3.5388052632284,0.)); #19362=CARTESIAN_POINT('',(-1.44769118908629,-3.60256382108636,0.1)); #19363=CARTESIAN_POINT('Origin',(-1.41107562914333,-3.5388052632284,0.)); #19364=CARTESIAN_POINT('',(-1.41107562914333,-3.5388052632284,0.)); #19365=CARTESIAN_POINT('',(-1.40631873711889,-3.5388052632284,0.)); #19366=CARTESIAN_POINT('',(-1.41107562914333,-3.5388052632284,0.1)); #19367=CARTESIAN_POINT('',(-1.41107562914333,-3.5388052632284,0.)); #19368=CARTESIAN_POINT('',(-1.40631873711889,-3.5388052632284,0.1)); #19369=CARTESIAN_POINT('Ctrl Pts',(-1.36704710307695,-3.54823994738548, 0.)); #19370=CARTESIAN_POINT('Ctrl Pts',(-1.36704710307695,-3.54823994738548, 0.1)); #19371=CARTESIAN_POINT('Ctrl Pts',(-1.37490933987452,-3.54307333463279, 0.)); #19372=CARTESIAN_POINT('Ctrl Pts',(-1.37490933987452,-3.54307333463279, 0.1)); #19373=CARTESIAN_POINT('Ctrl Pts',(-1.39580042622234,-3.5388052632284,0.)); #19374=CARTESIAN_POINT('Ctrl Pts',(-1.39580042622234,-3.5388052632284,0.1)); #19375=CARTESIAN_POINT('Ctrl Pts',(-1.41107562914333,-3.5388052632284,0.)); #19376=CARTESIAN_POINT('Ctrl Pts',(-1.41107562914333,-3.5388052632284,0.1)); #19377=CARTESIAN_POINT('',(-1.36704710307695,-3.54823994738548,0.)); #19378=CARTESIAN_POINT('Ctrl Pts',(-1.36704710307695,-3.54823994738548, 0.)); #19379=CARTESIAN_POINT('Ctrl Pts',(-1.37490933987452,-3.54307333463279, 0.)); #19380=CARTESIAN_POINT('Ctrl Pts',(-1.39580042622234,-3.5388052632284,0.)); #19381=CARTESIAN_POINT('Ctrl Pts',(-1.41107562914333,-3.5388052632284,0.)); #19382=CARTESIAN_POINT('',(-1.36704710307695,-3.54823994738548,0.1)); #19383=CARTESIAN_POINT('',(-1.36704710307695,-3.54823994738548,0.)); #19384=CARTESIAN_POINT('Ctrl Pts',(-1.41107562914333,-3.5388052632284,0.1)); #19385=CARTESIAN_POINT('Ctrl Pts',(-1.39580042622234,-3.5388052632284,0.1)); #19386=CARTESIAN_POINT('Ctrl Pts',(-1.37490933987452,-3.54307333463279, 0.1)); #19387=CARTESIAN_POINT('Ctrl Pts',(-1.36704710307695,-3.54823994738548, 0.1)); #19388=CARTESIAN_POINT('Ctrl Pts',(-1.34952554678523,-3.58508014266552, 0.)); #19389=CARTESIAN_POINT('Ctrl Pts',(-1.34952554678523,-3.58508014266552, 0.1)); #19390=CARTESIAN_POINT('Ctrl Pts',(-1.34952554678523,-3.57294983446355, 0.)); #19391=CARTESIAN_POINT('Ctrl Pts',(-1.34952554678523,-3.57294983446355, 0.1)); #19392=CARTESIAN_POINT('Ctrl Pts',(-1.35806168959402,-3.55430510148646, 0.)); #19393=CARTESIAN_POINT('Ctrl Pts',(-1.35806168959402,-3.55430510148646, 0.1)); #19394=CARTESIAN_POINT('Ctrl Pts',(-1.36704710307695,-3.54823994738548, 0.)); #19395=CARTESIAN_POINT('Ctrl Pts',(-1.36704710307695,-3.54823994738548, 0.1)); #19396=CARTESIAN_POINT('Ctrl Pts',(-1.34952554678523,-3.58508014266552, 0.)); #19397=CARTESIAN_POINT('Ctrl Pts',(-1.34952554678523,-3.57294983446355, 0.)); #19398=CARTESIAN_POINT('Ctrl Pts',(-1.35806168959402,-3.55430510148646, 0.)); #19399=CARTESIAN_POINT('Ctrl Pts',(-1.36704710307695,-3.54823994738548, 0.)); #19400=CARTESIAN_POINT('Ctrl Pts',(-1.36704710307695,-3.54823994738548, 0.1)); #19401=CARTESIAN_POINT('Ctrl Pts',(-1.35806168959402,-3.55430510148646, 0.1)); #19402=CARTESIAN_POINT('Ctrl Pts',(-1.34952554678523,-3.57294983446355, 0.1)); #19403=CARTESIAN_POINT('Ctrl Pts',(-1.34952554678523,-3.58508014266552, 0.1)); #19404=CARTESIAN_POINT('Origin',(-1.4054597457165,-3.6738111008095,0.)); #19405=CARTESIAN_POINT('',(-1.31785196425788,-3.78410705131253,0.)); #19406=CARTESIAN_POINT('',(-1.4054597457165,-3.6738111008095,0.)); #19407=CARTESIAN_POINT('',(-1.31785196425788,-3.78410705131253,0.)); #19408=CARTESIAN_POINT('',(-1.31785196425788,-3.78410705131253,0.1)); #19409=CARTESIAN_POINT('',(-1.31785196425788,-3.78410705131253,0.)); #19410=CARTESIAN_POINT('',(-1.4054597457165,-3.6738111008095,0.1)); #19411=CARTESIAN_POINT('',(-1.31785196425788,-3.78410705131253,0.1)); #19412=CARTESIAN_POINT('',(-1.4054597457165,-3.6738111008095,0.)); #19413=CARTESIAN_POINT('Origin',(-1.44769118908629,-3.6738111008095,0.)); #19414=CARTESIAN_POINT('',(-1.44769118908629,-3.6738111008095,0.)); #19415=CARTESIAN_POINT('',(-1.4054597457165,-3.6738111008095,0.)); #19416=CARTESIAN_POINT('',(-1.44769118908629,-3.6738111008095,0.1)); #19417=CARTESIAN_POINT('',(-1.4054597457165,-3.6738111008095,0.1)); #19418=CARTESIAN_POINT('',(-1.44769118908629,-3.6738111008095,0.)); #19419=CARTESIAN_POINT('Origin',(-1.44769118908629,-3.78410705131253,0.)); #19420=CARTESIAN_POINT('',(-1.44769118908629,-3.78410705131253,0.)); #19421=CARTESIAN_POINT('',(-1.44769118908629,-3.6738111008095,0.)); #19422=CARTESIAN_POINT('',(-1.44769118908629,-3.78410705131253,0.1)); #19423=CARTESIAN_POINT('',(-1.44769118908629,-3.6738111008095,0.1)); #19424=CARTESIAN_POINT('',(-1.44769118908629,-3.78410705131253,0.)); #19425=CARTESIAN_POINT('Origin',(-1.48453138436633,-3.78410705131253,0.)); #19426=CARTESIAN_POINT('',(-1.48453138436633,-3.78410705131253,0.)); #19427=CARTESIAN_POINT('',(-1.44769118908629,-3.78410705131253,0.)); #19428=CARTESIAN_POINT('',(-1.48453138436633,-3.78410705131253,0.1)); #19429=CARTESIAN_POINT('',(-1.44769118908629,-3.78410705131253,0.1)); #19430=CARTESIAN_POINT('',(-1.48453138436633,-3.78410705131253,0.)); #19431=CARTESIAN_POINT('Origin',(-1.48453138436633,-3.50690704536398,0.)); #19432=CARTESIAN_POINT('',(-1.48453138436633,-3.50690704536398,0.)); #19433=CARTESIAN_POINT('',(-1.48453138436633,-3.78410705131253,0.)); #19434=CARTESIAN_POINT('',(-1.48453138436633,-3.50690704536398,0.1)); #19435=CARTESIAN_POINT('',(-1.48453138436633,-3.78410705131253,0.1)); #19436=CARTESIAN_POINT('',(-1.48453138436633,-3.50690704536398,0.)); #19437=CARTESIAN_POINT('Origin',(-1.41309734717699,-3.50690704536398,0.)); #19438=CARTESIAN_POINT('',(-1.41309734717699,-3.50690704536398,0.)); #19439=CARTESIAN_POINT('',(-1.48453138436633,-3.50690704536398,0.)); #19440=CARTESIAN_POINT('',(-1.41309734717699,-3.50690704536398,0.1)); #19441=CARTESIAN_POINT('',(-1.48453138436633,-3.50690704536398,0.1)); #19442=CARTESIAN_POINT('',(-1.41309734717699,-3.50690704536398,0.)); #19443=CARTESIAN_POINT('Ctrl Pts',(-1.34256185133596,-3.52150834227375, 0.)); #19444=CARTESIAN_POINT('Ctrl Pts',(-1.34256185133596,-3.52150834227375, 0.1)); #19445=CARTESIAN_POINT('Ctrl Pts',(-1.35716314824572,-3.51207365811667, 0.)); #19446=CARTESIAN_POINT('Ctrl Pts',(-1.35716314824572,-3.51207365811667, 0.1)); #19447=CARTESIAN_POINT('Ctrl Pts',(-1.38928600144722,-3.50690704536398, 0.)); #19448=CARTESIAN_POINT('Ctrl Pts',(-1.38928600144722,-3.50690704536398, 0.1)); #19449=CARTESIAN_POINT('Ctrl Pts',(-1.41309734717699,-3.50690704536398, 0.)); #19450=CARTESIAN_POINT('Ctrl Pts',(-1.41309734717699,-3.50690704536398, 0.1)); #19451=CARTESIAN_POINT('',(-1.34256185133596,-3.52150834227375,0.)); #19452=CARTESIAN_POINT('Ctrl Pts',(-1.41309734717699,-3.50690704536398, 0.)); #19453=CARTESIAN_POINT('Ctrl Pts',(-1.38928600144722,-3.50690704536398, 0.)); #19454=CARTESIAN_POINT('Ctrl Pts',(-1.35716314824572,-3.51207365811667, 0.)); #19455=CARTESIAN_POINT('Ctrl Pts',(-1.34256185133596,-3.52150834227375, 0.)); #19456=CARTESIAN_POINT('',(-1.34256185133596,-3.52150834227375,0.1)); #19457=CARTESIAN_POINT('Ctrl Pts',(-1.34256185133596,-3.52150834227375, 0.1)); #19458=CARTESIAN_POINT('Ctrl Pts',(-1.35716314824572,-3.51207365811667, 0.1)); #19459=CARTESIAN_POINT('Ctrl Pts',(-1.38928600144722,-3.50690704536398, 0.1)); #19460=CARTESIAN_POINT('Ctrl Pts',(-1.41309734717699,-3.50690704536398, 0.1)); #19461=CARTESIAN_POINT('',(-1.34256185133596,-3.52150834227375,0.)); #19462=CARTESIAN_POINT('Ctrl Pts',(-1.31111290414568,-3.58215988328356, 0.)); #19463=CARTESIAN_POINT('Ctrl Pts',(-1.31111290414568,-3.58215988328356, 0.1)); #19464=CARTESIAN_POINT('Ctrl Pts',(-1.31111290414568,-3.56037025558744, 0.)); #19465=CARTESIAN_POINT('Ctrl Pts',(-1.31111290414568,-3.56037025558744, 0.1)); #19466=CARTESIAN_POINT('Ctrl Pts',(-1.32796055442619,-3.53094302643083, 0.)); #19467=CARTESIAN_POINT('Ctrl Pts',(-1.32796055442619,-3.53094302643083, 0.1)); #19468=CARTESIAN_POINT('Ctrl Pts',(-1.34256185133596,-3.52150834227375, 0.)); #19469=CARTESIAN_POINT('Ctrl Pts',(-1.34256185133596,-3.52150834227375, 0.1)); #19470=CARTESIAN_POINT('',(-1.31111290414568,-3.58215988328356,0.)); #19471=CARTESIAN_POINT('Ctrl Pts',(-1.34256185133596,-3.52150834227375, 0.)); #19472=CARTESIAN_POINT('Ctrl Pts',(-1.32796055442619,-3.53094302643083, 0.)); #19473=CARTESIAN_POINT('Ctrl Pts',(-1.31111290414568,-3.56037025558744, 0.)); #19474=CARTESIAN_POINT('Ctrl Pts',(-1.31111290414568,-3.58215988328356, 0.)); #19475=CARTESIAN_POINT('',(-1.31111290414568,-3.58215988328356,0.1)); #19476=CARTESIAN_POINT('Ctrl Pts',(-1.31111290414568,-3.58215988328356, 0.1)); #19477=CARTESIAN_POINT('Ctrl Pts',(-1.31111290414568,-3.56037025558744, 0.1)); #19478=CARTESIAN_POINT('Ctrl Pts',(-1.32796055442619,-3.53094302643083, 0.1)); #19479=CARTESIAN_POINT('Ctrl Pts',(-1.34256185133596,-3.52150834227375, 0.1)); #19480=CARTESIAN_POINT('',(-1.31111290414568,-3.58215988328356,0.)); #19481=CARTESIAN_POINT('Ctrl Pts',(-1.36861955043647,-3.66347787530412, 0.)); #19482=CARTESIAN_POINT('Ctrl Pts',(-1.36861955043647,-3.66347787530412, 0.1)); #19483=CARTESIAN_POINT('Ctrl Pts',(-1.34211258066181,-3.6535939204729,0.)); #19484=CARTESIAN_POINT('Ctrl Pts',(-1.34211258066181,-3.6535939204729,0.1)); #19485=CARTESIAN_POINT('Ctrl Pts',(-1.31111290414568,-3.61248565378847, 0.)); #19486=CARTESIAN_POINT('Ctrl Pts',(-1.31111290414568,-3.61248565378847, 0.1)); #19487=CARTESIAN_POINT('Ctrl Pts',(-1.31111290414568,-3.58215988328356, 0.)); #19488=CARTESIAN_POINT('Ctrl Pts',(-1.31111290414568,-3.58215988328356, 0.1)); #19489=CARTESIAN_POINT('',(-1.36861955043647,-3.66347787530412,0.)); #19490=CARTESIAN_POINT('Ctrl Pts',(-1.31111290414568,-3.58215988328356, 0.)); #19491=CARTESIAN_POINT('Ctrl Pts',(-1.31111290414568,-3.61248565378847, 0.)); #19492=CARTESIAN_POINT('Ctrl Pts',(-1.34211258066181,-3.6535939204729,0.)); #19493=CARTESIAN_POINT('Ctrl Pts',(-1.36861955043647,-3.66347787530412, 0.)); #19494=CARTESIAN_POINT('',(-1.36861955043647,-3.66347787530412,0.1)); #19495=CARTESIAN_POINT('Ctrl Pts',(-1.36861955043647,-3.66347787530412, 0.1)); #19496=CARTESIAN_POINT('Ctrl Pts',(-1.34211258066181,-3.6535939204729,0.1)); #19497=CARTESIAN_POINT('Ctrl Pts',(-1.31111290414568,-3.61248565378847, 0.1)); #19498=CARTESIAN_POINT('Ctrl Pts',(-1.31111290414568,-3.58215988328356, 0.1)); #19499=CARTESIAN_POINT('',(-1.36861955043647,-3.66347787530412,0.)); #19500=CARTESIAN_POINT('Origin',(-1.27000463746126,-3.78410705131253,0.)); #19501=CARTESIAN_POINT('',(-1.27000463746126,-3.78410705131253,0.)); #19502=CARTESIAN_POINT('',(-1.36861955043647,-3.66347787530412,0.)); #19503=CARTESIAN_POINT('',(-1.27000463746126,-3.78410705131253,0.1)); #19504=CARTESIAN_POINT('',(-1.36861955043647,-3.66347787530412,0.1)); #19505=CARTESIAN_POINT('',(-1.27000463746126,-3.78410705131253,0.)); #19506=CARTESIAN_POINT('Origin',(-1.31785196425788,-3.78410705131253,0.)); #19507=CARTESIAN_POINT('',(-1.27000463746126,-3.78410705131253,0.)); #19508=CARTESIAN_POINT('',(-1.27000463746126,-3.78410705131253,0.1)); #19509=CARTESIAN_POINT('Origin',(-1.40156184509444,-3.66632237894431,0.)); #19510=CARTESIAN_POINT('Origin',(-1.40156184509444,-3.66632237894431,0.1)); #19511=CARTESIAN_POINT('Origin',(-1.80014403295442,-3.64842730772021,0.)); #19512=CARTESIAN_POINT('',(-1.80014403295442,-3.78410705131253,0.)); #19513=CARTESIAN_POINT('',(-1.80014403295442,-3.64842730772021,0.)); #19514=CARTESIAN_POINT('',(-1.80014403295442,-3.78410705131253,0.)); #19515=CARTESIAN_POINT('',(-1.80014403295442,-3.78410705131253,0.1)); #19516=CARTESIAN_POINT('',(-1.80014403295442,-3.78410705131253,0.)); #19517=CARTESIAN_POINT('',(-1.80014403295442,-3.64842730772021,0.1)); #19518=CARTESIAN_POINT('',(-1.80014403295442,-3.78410705131253,0.1)); #19519=CARTESIAN_POINT('',(-1.80014403295442,-3.64842730772021,0.)); #19520=CARTESIAN_POINT('Origin',(-1.92773690441209,-3.64842730772021,0.)); #19521=CARTESIAN_POINT('',(-1.92773690441209,-3.64842730772021,0.)); #19522=CARTESIAN_POINT('',(-1.80014403295442,-3.64842730772021,0.)); #19523=CARTESIAN_POINT('',(-1.92773690441209,-3.64842730772021,0.1)); #19524=CARTESIAN_POINT('',(-1.80014403295442,-3.64842730772021,0.1)); #19525=CARTESIAN_POINT('',(-1.92773690441209,-3.64842730772021,0.)); #19526=CARTESIAN_POINT('Origin',(-1.92773690441209,-3.78410705131253,0.)); #19527=CARTESIAN_POINT('',(-1.92773690441209,-3.78410705131253,0.)); #19528=CARTESIAN_POINT('',(-1.92773690441209,-3.64842730772021,0.)); #19529=CARTESIAN_POINT('',(-1.92773690441209,-3.78410705131253,0.1)); #19530=CARTESIAN_POINT('',(-1.92773690441209,-3.64842730772021,0.1)); #19531=CARTESIAN_POINT('',(-1.92773690441209,-3.78410705131253,0.)); #19532=CARTESIAN_POINT('Origin',(-1.96457709969213,-3.78410705131253,0.)); #19533=CARTESIAN_POINT('',(-1.96457709969213,-3.78410705131253,0.)); #19534=CARTESIAN_POINT('',(-1.92773690441209,-3.78410705131253,0.)); #19535=CARTESIAN_POINT('',(-1.96457709969213,-3.78410705131253,0.1)); #19536=CARTESIAN_POINT('',(-1.92773690441209,-3.78410705131253,0.1)); #19537=CARTESIAN_POINT('',(-1.96457709969213,-3.78410705131253,0.)); #19538=CARTESIAN_POINT('Origin',(-1.96457709969213,-3.50690704536398,0.)); #19539=CARTESIAN_POINT('',(-1.96457709969213,-3.50690704536398,0.)); #19540=CARTESIAN_POINT('',(-1.96457709969213,-3.78410705131253,0.)); #19541=CARTESIAN_POINT('',(-1.96457709969213,-3.50690704536398,0.1)); #19542=CARTESIAN_POINT('',(-1.96457709969213,-3.78410705131253,0.1)); #19543=CARTESIAN_POINT('',(-1.96457709969213,-3.50690704536398,0.)); #19544=CARTESIAN_POINT('Origin',(-1.92773690441209,-3.50690704536398,0.)); #19545=CARTESIAN_POINT('',(-1.92773690441209,-3.50690704536398,0.)); #19546=CARTESIAN_POINT('',(-1.96457709969213,-3.50690704536398,0.)); #19547=CARTESIAN_POINT('',(-1.92773690441209,-3.50690704536398,0.1)); #19548=CARTESIAN_POINT('',(-1.96457709969213,-3.50690704536398,0.1)); #19549=CARTESIAN_POINT('',(-1.92773690441209,-3.50690704536398,0.)); #19550=CARTESIAN_POINT('Origin',(-1.92773690441209,-3.61563054850749,0.)); #19551=CARTESIAN_POINT('',(-1.92773690441209,-3.61563054850749,0.)); #19552=CARTESIAN_POINT('',(-1.92773690441209,-3.50690704536398,0.)); #19553=CARTESIAN_POINT('',(-1.92773690441209,-3.61563054850749,0.1)); #19554=CARTESIAN_POINT('',(-1.92773690441209,-3.50690704536398,0.1)); #19555=CARTESIAN_POINT('',(-1.92773690441209,-3.61563054850749,0.)); #19556=CARTESIAN_POINT('Origin',(-1.80014403295442,-3.61563054850749,0.)); #19557=CARTESIAN_POINT('',(-1.80014403295442,-3.61563054850749,0.)); #19558=CARTESIAN_POINT('',(-1.92773690441209,-3.61563054850749,0.)); #19559=CARTESIAN_POINT('',(-1.80014403295442,-3.61563054850749,0.1)); #19560=CARTESIAN_POINT('',(-1.92773690441209,-3.61563054850749,0.1)); #19561=CARTESIAN_POINT('',(-1.80014403295442,-3.61563054850749,0.)); #19562=CARTESIAN_POINT('Origin',(-1.80014403295442,-3.50690704536398,0.)); #19563=CARTESIAN_POINT('',(-1.80014403295442,-3.50690704536398,0.)); #19564=CARTESIAN_POINT('',(-1.80014403295442,-3.61563054850749,0.)); #19565=CARTESIAN_POINT('',(-1.80014403295442,-3.50690704536398,0.1)); #19566=CARTESIAN_POINT('',(-1.80014403295442,-3.61563054850749,0.1)); #19567=CARTESIAN_POINT('',(-1.80014403295442,-3.50690704536398,0.)); #19568=CARTESIAN_POINT('Origin',(-1.76330383767438,-3.50690704536398,0.)); #19569=CARTESIAN_POINT('',(-1.76330383767438,-3.50690704536398,0.)); #19570=CARTESIAN_POINT('',(-1.80014403295442,-3.50690704536398,0.)); #19571=CARTESIAN_POINT('',(-1.76330383767438,-3.50690704536398,0.1)); #19572=CARTESIAN_POINT('',(-1.80014403295442,-3.50690704536398,0.1)); #19573=CARTESIAN_POINT('',(-1.76330383767438,-3.50690704536398,0.)); #19574=CARTESIAN_POINT('Origin',(-1.76330383767438,-3.78410705131253,0.)); #19575=CARTESIAN_POINT('',(-1.76330383767438,-3.78410705131253,0.)); #19576=CARTESIAN_POINT('',(-1.76330383767438,-3.50690704536398,0.)); #19577=CARTESIAN_POINT('',(-1.76330383767438,-3.78410705131253,0.1)); #19578=CARTESIAN_POINT('',(-1.76330383767438,-3.50690704536398,0.1)); #19579=CARTESIAN_POINT('',(-1.76330383767438,-3.78410705131253,0.)); #19580=CARTESIAN_POINT('Origin',(-1.80014403295442,-3.78410705131253,0.)); #19581=CARTESIAN_POINT('',(-1.76330383767438,-3.78410705131253,0.)); #19582=CARTESIAN_POINT('',(-1.76330383767438,-3.78410705131253,0.1)); #19583=CARTESIAN_POINT('Origin',(-1.86394046868326,-3.64373956333679,0.)); #19584=CARTESIAN_POINT('Origin',(-1.86394046868326,-3.64373956333679,0.1)); #19585=CARTESIAN_POINT('Ctrl Pts',(-2.59108501687271,-3.55744999620549, 0.)); #19586=CARTESIAN_POINT('Ctrl Pts',(-2.59108501687271,-3.55744999620549, 0.1)); #19587=CARTESIAN_POINT('Ctrl Pts',(-2.58591840412002,-3.55385583081232, 0.)); #19588=CARTESIAN_POINT('Ctrl Pts',(-2.58591840412002,-3.55385583081232, 0.1)); #19589=CARTESIAN_POINT('Ctrl Pts',(-2.5726649192327,-3.54576895867768,0.)); #19590=CARTESIAN_POINT('Ctrl Pts',(-2.5726649192327,-3.54576895867768,0.1)); #19591=CARTESIAN_POINT('Ctrl Pts',(-2.56367950574976,-3.54195015794743, 0.)); #19592=CARTESIAN_POINT('Ctrl Pts',(-2.56367950574976,-3.54195015794743, 0.1)); #19593=CARTESIAN_POINT('',(-2.56367950574976,-3.54195015794743,0.)); #19594=CARTESIAN_POINT('',(-2.59108501687271,-3.55744999620549,0.)); #19595=CARTESIAN_POINT('Ctrl Pts',(-2.56367950574976,-3.54195015794743, 0.)); #19596=CARTESIAN_POINT('Ctrl Pts',(-2.5726649192327,-3.54576895867768,0.)); #19597=CARTESIAN_POINT('Ctrl Pts',(-2.58591840412002,-3.55385583081232, 0.)); #19598=CARTESIAN_POINT('Ctrl Pts',(-2.59108501687271,-3.55744999620549, 0.)); #19599=CARTESIAN_POINT('',(-2.56367950574976,-3.54195015794743,0.1)); #19600=CARTESIAN_POINT('',(-2.56367950574976,-3.54195015794743,0.)); #19601=CARTESIAN_POINT('',(-2.59108501687271,-3.55744999620549,0.1)); #19602=CARTESIAN_POINT('Ctrl Pts',(-2.59108501687271,-3.55744999620549, 0.1)); #19603=CARTESIAN_POINT('Ctrl Pts',(-2.58591840412002,-3.55385583081232, 0.1)); #19604=CARTESIAN_POINT('Ctrl Pts',(-2.5726649192327,-3.54576895867768,0.1)); #19605=CARTESIAN_POINT('Ctrl Pts',(-2.56367950574976,-3.54195015794743, 0.1)); #19606=CARTESIAN_POINT('',(-2.59108501687271,-3.55744999620549,0.)); #19607=CARTESIAN_POINT('Origin',(-2.59333137024345,-3.55744999620549,0.)); #19608=CARTESIAN_POINT('',(-2.59333137024345,-3.55744999620549,0.)); #19609=CARTESIAN_POINT('',(-2.59108501687271,-3.55744999620549,0.)); #19610=CARTESIAN_POINT('',(-2.59333137024345,-3.55744999620549,0.1)); #19611=CARTESIAN_POINT('',(-2.59108501687271,-3.55744999620549,0.1)); #19612=CARTESIAN_POINT('',(-2.59333137024345,-3.55744999620549,0.)); #19613=CARTESIAN_POINT('Origin',(-2.59333137024345,-3.51813881221765,0.)); #19614=CARTESIAN_POINT('',(-2.59333137024345,-3.51813881221765,0.)); #19615=CARTESIAN_POINT('',(-2.59333137024345,-3.55744999620549,0.)); #19616=CARTESIAN_POINT('',(-2.59333137024345,-3.51813881221765,0.1)); #19617=CARTESIAN_POINT('',(-2.59333137024345,-3.55744999620549,0.1)); #19618=CARTESIAN_POINT('',(-2.59333137024345,-3.51813881221765,0.)); #19619=CARTESIAN_POINT('Ctrl Pts',(-2.52099879170582,-3.50106652660007, 0.)); #19620=CARTESIAN_POINT('Ctrl Pts',(-2.52099879170582,-3.50106652660007, 0.1)); #19621=CARTESIAN_POINT('Ctrl Pts',(-2.53964352468291,-3.50106652660007, 0.)); #19622=CARTESIAN_POINT('Ctrl Pts',(-2.53964352468291,-3.50106652660007, 0.1)); #19623=CARTESIAN_POINT('Ctrl Pts',(-2.58120106204148,-3.51162438744252, 0.)); #19624=CARTESIAN_POINT('Ctrl Pts',(-2.58120106204148,-3.51162438744252, 0.1)); #19625=CARTESIAN_POINT('Ctrl Pts',(-2.59333137024345,-3.51813881221765, 0.)); #19626=CARTESIAN_POINT('Ctrl Pts',(-2.59333137024345,-3.51813881221765, 0.1)); #19627=CARTESIAN_POINT('',(-2.52099879170582,-3.50106652660007,0.)); #19628=CARTESIAN_POINT('Ctrl Pts',(-2.59333137024345,-3.51813881221765, 0.)); #19629=CARTESIAN_POINT('Ctrl Pts',(-2.58120106204148,-3.51162438744252, 0.)); #19630=CARTESIAN_POINT('Ctrl Pts',(-2.53964352468291,-3.50106652660007, 0.)); #19631=CARTESIAN_POINT('Ctrl Pts',(-2.52099879170582,-3.50106652660007, 0.)); #19632=CARTESIAN_POINT('',(-2.52099879170582,-3.50106652660007,0.1)); #19633=CARTESIAN_POINT('Ctrl Pts',(-2.52099879170582,-3.50106652660007, 0.1)); #19634=CARTESIAN_POINT('Ctrl Pts',(-2.53964352468291,-3.50106652660007, 0.1)); #19635=CARTESIAN_POINT('Ctrl Pts',(-2.58120106204148,-3.51162438744252, 0.1)); #19636=CARTESIAN_POINT('Ctrl Pts',(-2.59333137024345,-3.51813881221765, 0.1)); #19637=CARTESIAN_POINT('',(-2.52099879170582,-3.50106652660007,0.)); #19638=CARTESIAN_POINT('Ctrl Pts',(-2.46259360406674,-3.51679100019521, 0.)); #19639=CARTESIAN_POINT('Ctrl Pts',(-2.46259360406674,-3.51679100019521, 0.1)); #19640=CARTESIAN_POINT('Ctrl Pts',(-2.47405000625748,-3.50870412806057, 0.)); #19641=CARTESIAN_POINT('Ctrl Pts',(-2.47405000625748,-3.50870412806057, 0.1)); #19642=CARTESIAN_POINT('Ctrl Pts',(-2.50212942339166,-3.50106652660007, 0.)); #19643=CARTESIAN_POINT('Ctrl Pts',(-2.50212942339166,-3.50106652660007, 0.1)); #19644=CARTESIAN_POINT('Ctrl Pts',(-2.52099879170582,-3.50106652660007, 0.)); #19645=CARTESIAN_POINT('Ctrl Pts',(-2.52099879170582,-3.50106652660007, 0.1)); #19646=CARTESIAN_POINT('',(-2.46259360406674,-3.51679100019521,0.)); #19647=CARTESIAN_POINT('Ctrl Pts',(-2.52099879170582,-3.50106652660007, 0.)); #19648=CARTESIAN_POINT('Ctrl Pts',(-2.50212942339166,-3.50106652660007, 0.)); #19649=CARTESIAN_POINT('Ctrl Pts',(-2.47405000625748,-3.50870412806057, 0.)); #19650=CARTESIAN_POINT('Ctrl Pts',(-2.46259360406674,-3.51679100019521, 0.)); #19651=CARTESIAN_POINT('',(-2.46259360406674,-3.51679100019521,0.1)); #19652=CARTESIAN_POINT('Ctrl Pts',(-2.46259360406674,-3.51679100019521, 0.1)); #19653=CARTESIAN_POINT('Ctrl Pts',(-2.47405000625748,-3.50870412806057, 0.1)); #19654=CARTESIAN_POINT('Ctrl Pts',(-2.50212942339166,-3.50106652660007, 0.1)); #19655=CARTESIAN_POINT('Ctrl Pts',(-2.52099879170582,-3.50106652660007, 0.1)); #19656=CARTESIAN_POINT('',(-2.46259360406674,-3.51679100019521,0.)); #19657=CARTESIAN_POINT('Ctrl Pts',(-2.43788371698867,-3.56800785704794, 0.)); #19658=CARTESIAN_POINT('Ctrl Pts',(-2.43788371698867,-3.56800785704794, 0.1)); #19659=CARTESIAN_POINT('Ctrl Pts',(-2.43788371698867,-3.55093557143036, 0.)); #19660=CARTESIAN_POINT('Ctrl Pts',(-2.43788371698867,-3.55093557143036, 0.1)); #19661=CARTESIAN_POINT('Ctrl Pts',(-2.45046329586478,-3.52555177834107, 0.)); #19662=CARTESIAN_POINT('Ctrl Pts',(-2.45046329586478,-3.52555177834107, 0.1)); #19663=CARTESIAN_POINT('Ctrl Pts',(-2.46259360406674,-3.51679100019521, 0.)); #19664=CARTESIAN_POINT('Ctrl Pts',(-2.46259360406674,-3.51679100019521, 0.1)); #19665=CARTESIAN_POINT('',(-2.43788371698867,-3.56800785704794,0.)); #19666=CARTESIAN_POINT('Ctrl Pts',(-2.46259360406674,-3.51679100019521, 0.)); #19667=CARTESIAN_POINT('Ctrl Pts',(-2.45046329586478,-3.52555177834107, 0.)); #19668=CARTESIAN_POINT('Ctrl Pts',(-2.43788371698867,-3.55093557143036, 0.)); #19669=CARTESIAN_POINT('Ctrl Pts',(-2.43788371698867,-3.56800785704794, 0.)); #19670=CARTESIAN_POINT('',(-2.43788371698867,-3.56800785704794,0.1)); #19671=CARTESIAN_POINT('Ctrl Pts',(-2.43788371698867,-3.56800785704794, 0.1)); #19672=CARTESIAN_POINT('Ctrl Pts',(-2.43788371698867,-3.55093557143036, 0.1)); #19673=CARTESIAN_POINT('Ctrl Pts',(-2.45046329586478,-3.52555177834107, 0.1)); #19674=CARTESIAN_POINT('Ctrl Pts',(-2.46259360406674,-3.51679100019521, 0.1)); #19675=CARTESIAN_POINT('',(-2.43788371698867,-3.56800785704794,0.)); #19676=CARTESIAN_POINT('Ctrl Pts',(-2.4891005738414,-3.63000721008019,0.)); #19677=CARTESIAN_POINT('Ctrl Pts',(-2.4891005738414,-3.63000721008019,0.1)); #19678=CARTESIAN_POINT('Ctrl Pts',(-2.4679848521565,-3.62551450333872,0.)); #19679=CARTESIAN_POINT('Ctrl Pts',(-2.4679848521565,-3.62551450333872,0.1)); #19680=CARTESIAN_POINT('Ctrl Pts',(-2.43788371698867,-3.59092066142942, 0.)); #19681=CARTESIAN_POINT('Ctrl Pts',(-2.43788371698867,-3.59092066142942, 0.1)); #19682=CARTESIAN_POINT('Ctrl Pts',(-2.43788371698867,-3.56800785704794, 0.)); #19683=CARTESIAN_POINT('Ctrl Pts',(-2.43788371698867,-3.56800785704794, 0.1)); #19684=CARTESIAN_POINT('',(-2.4891005738414,-3.63000721008019,0.)); #19685=CARTESIAN_POINT('Ctrl Pts',(-2.43788371698867,-3.56800785704794, 0.)); #19686=CARTESIAN_POINT('Ctrl Pts',(-2.43788371698867,-3.59092066142942, 0.)); #19687=CARTESIAN_POINT('Ctrl Pts',(-2.4679848521565,-3.62551450333872,0.)); #19688=CARTESIAN_POINT('Ctrl Pts',(-2.4891005738414,-3.63000721008019,0.)); #19689=CARTESIAN_POINT('',(-2.4891005738414,-3.63000721008019,0.1)); #19690=CARTESIAN_POINT('Ctrl Pts',(-2.4891005738414,-3.63000721008019,0.1)); #19691=CARTESIAN_POINT('Ctrl Pts',(-2.4679848521565,-3.62551450333872,0.1)); #19692=CARTESIAN_POINT('Ctrl Pts',(-2.43788371698867,-3.59092066142942, 0.1)); #19693=CARTESIAN_POINT('Ctrl Pts',(-2.43788371698867,-3.56800785704794, 0.1)); #19694=CARTESIAN_POINT('',(-2.4891005738414,-3.63000721008019,0.)); #19695=CARTESIAN_POINT('Origin',(-2.4891005738414,-3.63270283412507,0.)); #19696=CARTESIAN_POINT('',(-2.4891005738414,-3.63270283412507,0.)); #19697=CARTESIAN_POINT('',(-2.4891005738414,-3.63000721008019,0.)); #19698=CARTESIAN_POINT('',(-2.4891005738414,-3.63270283412507,0.1)); #19699=CARTESIAN_POINT('',(-2.4891005738414,-3.63000721008019,0.1)); #19700=CARTESIAN_POINT('',(-2.4891005738414,-3.63270283412507,0.)); #19701=CARTESIAN_POINT('Ctrl Pts',(-2.45181110788722,-3.65067366109094, 0.)); #19702=CARTESIAN_POINT('Ctrl Pts',(-2.45181110788722,-3.65067366109094, 0.1)); #19703=CARTESIAN_POINT('Ctrl Pts',(-2.46034725069601,-3.6425867889563,0.)); #19704=CARTESIAN_POINT('Ctrl Pts',(-2.46034725069601,-3.6425867889563,0.1)); #19705=CARTESIAN_POINT('Ctrl Pts',(-2.48033979569554,-3.63449991682166, 0.)); #19706=CARTESIAN_POINT('Ctrl Pts',(-2.48033979569554,-3.63449991682166, 0.1)); #19707=CARTESIAN_POINT('Ctrl Pts',(-2.4891005738414,-3.63270283412507,0.)); #19708=CARTESIAN_POINT('Ctrl Pts',(-2.4891005738414,-3.63270283412507,0.1)); #19709=CARTESIAN_POINT('',(-2.45181110788722,-3.65067366109094,0.)); #19710=CARTESIAN_POINT('Ctrl Pts',(-2.4891005738414,-3.63270283412507,0.)); #19711=CARTESIAN_POINT('Ctrl Pts',(-2.48033979569554,-3.63449991682166, 0.)); #19712=CARTESIAN_POINT('Ctrl Pts',(-2.46034725069601,-3.6425867889563,0.)); #19713=CARTESIAN_POINT('Ctrl Pts',(-2.45181110788722,-3.65067366109094, 0.)); #19714=CARTESIAN_POINT('',(-2.45181110788722,-3.65067366109094,0.1)); #19715=CARTESIAN_POINT('Ctrl Pts',(-2.45181110788722,-3.65067366109094, 0.1)); #19716=CARTESIAN_POINT('Ctrl Pts',(-2.46034725069601,-3.6425867889563,0.1)); #19717=CARTESIAN_POINT('Ctrl Pts',(-2.48033979569554,-3.63449991682166, 0.1)); #19718=CARTESIAN_POINT('Ctrl Pts',(-2.4891005738414,-3.63270283412507,0.1)); #19719=CARTESIAN_POINT('',(-2.45181110788722,-3.65067366109094,0.)); #19720=CARTESIAN_POINT('Ctrl Pts',(-2.43249246889891,-3.70189051794367, 0.)); #19721=CARTESIAN_POINT('Ctrl Pts',(-2.43249246889891,-3.70189051794367, 0.1)); #19722=CARTESIAN_POINT('Ctrl Pts',(-2.43249246889891,-3.68369505564073, 0.)); #19723=CARTESIAN_POINT('Ctrl Pts',(-2.43249246889891,-3.68369505564073, 0.1)); #19724=CARTESIAN_POINT('Ctrl Pts',(-2.44327496507843,-3.65853589788851, 0.)); #19725=CARTESIAN_POINT('Ctrl Pts',(-2.44327496507843,-3.65853589788851, 0.1)); #19726=CARTESIAN_POINT('Ctrl Pts',(-2.45181110788722,-3.65067366109094, 0.)); #19727=CARTESIAN_POINT('Ctrl Pts',(-2.45181110788722,-3.65067366109094, 0.1)); #19728=CARTESIAN_POINT('',(-2.43249246889891,-3.70189051794367,0.)); #19729=CARTESIAN_POINT('Ctrl Pts',(-2.45181110788722,-3.65067366109094, 0.)); #19730=CARTESIAN_POINT('Ctrl Pts',(-2.44327496507843,-3.65853589788851, 0.)); #19731=CARTESIAN_POINT('Ctrl Pts',(-2.43249246889891,-3.68369505564073, 0.)); #19732=CARTESIAN_POINT('Ctrl Pts',(-2.43249246889891,-3.70189051794367, 0.)); #19733=CARTESIAN_POINT('',(-2.43249246889891,-3.70189051794367,0.1)); #19734=CARTESIAN_POINT('Ctrl Pts',(-2.43249246889891,-3.70189051794367, 0.1)); #19735=CARTESIAN_POINT('Ctrl Pts',(-2.43249246889891,-3.68369505564073, 0.1)); #19736=CARTESIAN_POINT('Ctrl Pts',(-2.44327496507843,-3.65853589788851, 0.1)); #19737=CARTESIAN_POINT('Ctrl Pts',(-2.45181110788722,-3.65067366109094, 0.1)); #19738=CARTESIAN_POINT('',(-2.43249246889891,-3.70189051794367,0.)); #19739=CARTESIAN_POINT('Ctrl Pts',(-2.45697772063991,-3.76433914165007, 0.)); #19740=CARTESIAN_POINT('Ctrl Pts',(-2.45697772063991,-3.76433914165007, 0.1)); #19741=CARTESIAN_POINT('Ctrl Pts',(-2.44529668311209,-3.75220883344811, 0.)); #19742=CARTESIAN_POINT('Ctrl Pts',(-2.44529668311209,-3.75220883344811, 0.1)); #19743=CARTESIAN_POINT('Ctrl Pts',(-2.43249246889891,-3.72053525092076, 0.)); #19744=CARTESIAN_POINT('Ctrl Pts',(-2.43249246889891,-3.72053525092076, 0.1)); #19745=CARTESIAN_POINT('Ctrl Pts',(-2.43249246889891,-3.70189051794367, 0.)); #19746=CARTESIAN_POINT('Ctrl Pts',(-2.43249246889891,-3.70189051794367, 0.1)); #19747=CARTESIAN_POINT('',(-2.45697772063991,-3.76433914165007,0.)); #19748=CARTESIAN_POINT('Ctrl Pts',(-2.43249246889891,-3.70189051794367, 0.)); #19749=CARTESIAN_POINT('Ctrl Pts',(-2.43249246889891,-3.72053525092076, 0.)); #19750=CARTESIAN_POINT('Ctrl Pts',(-2.44529668311209,-3.75220883344811, 0.)); #19751=CARTESIAN_POINT('Ctrl Pts',(-2.45697772063991,-3.76433914165007, 0.)); #19752=CARTESIAN_POINT('',(-2.45697772063991,-3.76433914165007,0.1)); #19753=CARTESIAN_POINT('Ctrl Pts',(-2.45697772063991,-3.76433914165007, 0.1)); #19754=CARTESIAN_POINT('Ctrl Pts',(-2.44529668311209,-3.75220883344811, 0.1)); #19755=CARTESIAN_POINT('Ctrl Pts',(-2.43249246889891,-3.72053525092076, 0.1)); #19756=CARTESIAN_POINT('Ctrl Pts',(-2.43249246889891,-3.70189051794367, 0.1)); #19757=CARTESIAN_POINT('',(-2.45697772063991,-3.76433914165007,0.)); #19758=CARTESIAN_POINT('Ctrl Pts',(-2.52526686311021,-3.78994757007643, 0.)); #19759=CARTESIAN_POINT('Ctrl Pts',(-2.52526686311021,-3.78994757007643, 0.1)); #19760=CARTESIAN_POINT('Ctrl Pts',(-2.5034772354141,-3.78994757007643,0.)); #19761=CARTESIAN_POINT('Ctrl Pts',(-2.5034772354141,-3.78994757007643,0.1)); #19762=CARTESIAN_POINT('Ctrl Pts',(-2.46910802884187,-3.77691872052618, 0.)); #19763=CARTESIAN_POINT('Ctrl Pts',(-2.46910802884187,-3.77691872052618, 0.1)); #19764=CARTESIAN_POINT('Ctrl Pts',(-2.45697772063991,-3.76433914165007, 0.)); #19765=CARTESIAN_POINT('Ctrl Pts',(-2.45697772063991,-3.76433914165007, 0.1)); #19766=CARTESIAN_POINT('',(-2.52526686311021,-3.78994757007643,0.)); #19767=CARTESIAN_POINT('Ctrl Pts',(-2.45697772063991,-3.76433914165007, 0.)); #19768=CARTESIAN_POINT('Ctrl Pts',(-2.46910802884187,-3.77691872052618, 0.)); #19769=CARTESIAN_POINT('Ctrl Pts',(-2.5034772354141,-3.78994757007643,0.)); #19770=CARTESIAN_POINT('Ctrl Pts',(-2.52526686311021,-3.78994757007643, 0.)); #19771=CARTESIAN_POINT('',(-2.52526686311021,-3.78994757007643,0.1)); #19772=CARTESIAN_POINT('Ctrl Pts',(-2.52526686311021,-3.78994757007643, 0.1)); #19773=CARTESIAN_POINT('Ctrl Pts',(-2.5034772354141,-3.78994757007643,0.1)); #19774=CARTESIAN_POINT('Ctrl Pts',(-2.46910802884187,-3.77691872052618, 0.1)); #19775=CARTESIAN_POINT('Ctrl Pts',(-2.45697772063991,-3.76433914165007, 0.1)); #19776=CARTESIAN_POINT('',(-2.52526686311021,-3.78994757007643,0.)); #19777=CARTESIAN_POINT('Ctrl Pts',(-2.60096897170394,-3.77287528445886, 0.)); #19778=CARTESIAN_POINT('Ctrl Pts',(-2.60096897170394,-3.77287528445886, 0.1)); #19779=CARTESIAN_POINT('Ctrl Pts',(-2.58704158080539,-3.77983897990813, 0.)); #19780=CARTESIAN_POINT('Ctrl Pts',(-2.58704158080539,-3.77983897990813, 0.1)); #19781=CARTESIAN_POINT('Ctrl Pts',(-2.54615794945804,-3.78994757007643, 0.)); #19782=CARTESIAN_POINT('Ctrl Pts',(-2.54615794945804,-3.78994757007643, 0.1)); #19783=CARTESIAN_POINT('Ctrl Pts',(-2.52526686311021,-3.78994757007643, 0.)); #19784=CARTESIAN_POINT('Ctrl Pts',(-2.52526686311021,-3.78994757007643, 0.1)); #19785=CARTESIAN_POINT('',(-2.60096897170394,-3.77287528445886,0.)); #19786=CARTESIAN_POINT('Ctrl Pts',(-2.52526686311021,-3.78994757007643, 0.)); #19787=CARTESIAN_POINT('Ctrl Pts',(-2.54615794945804,-3.78994757007643, 0.)); #19788=CARTESIAN_POINT('Ctrl Pts',(-2.58704158080539,-3.77983897990813, 0.)); #19789=CARTESIAN_POINT('Ctrl Pts',(-2.60096897170394,-3.77287528445886, 0.)); #19790=CARTESIAN_POINT('',(-2.60096897170394,-3.77287528445886,0.1)); #19791=CARTESIAN_POINT('Ctrl Pts',(-2.60096897170394,-3.77287528445886, 0.1)); #19792=CARTESIAN_POINT('Ctrl Pts',(-2.58704158080539,-3.77983897990813, 0.1)); #19793=CARTESIAN_POINT('Ctrl Pts',(-2.54615794945804,-3.78994757007643, 0.1)); #19794=CARTESIAN_POINT('Ctrl Pts',(-2.52526686311021,-3.78994757007643, 0.1)); #19795=CARTESIAN_POINT('',(-2.60096897170394,-3.77287528445886,0.)); #19796=CARTESIAN_POINT('Origin',(-2.60096897170394,-3.73356410047102,0.)); #19797=CARTESIAN_POINT('',(-2.60096897170394,-3.73356410047102,0.)); #19798=CARTESIAN_POINT('',(-2.60096897170394,-3.77287528445886,0.)); #19799=CARTESIAN_POINT('',(-2.60096897170394,-3.73356410047102,0.1)); #19800=CARTESIAN_POINT('',(-2.60096897170394,-3.77287528445886,0.1)); #19801=CARTESIAN_POINT('',(-2.60096897170394,-3.73356410047102,0.)); #19802=CARTESIAN_POINT('Origin',(-2.59827334765906,-3.73356410047102,0.)); #19803=CARTESIAN_POINT('',(-2.59827334765906,-3.73356410047102,0.)); #19804=CARTESIAN_POINT('',(-2.60096897170394,-3.73356410047102,0.)); #19805=CARTESIAN_POINT('',(-2.59827334765906,-3.73356410047102,0.1)); #19806=CARTESIAN_POINT('',(-2.60096897170394,-3.73356410047102,0.1)); #19807=CARTESIAN_POINT('',(-2.59827334765906,-3.73356410047102,0.)); #19808=CARTESIAN_POINT('Ctrl Pts',(-2.52751321648095,-3.75782471687494, 0.)); #19809=CARTESIAN_POINT('Ctrl Pts',(-2.52751321648095,-3.75782471687494, 0.1)); #19810=CARTESIAN_POINT('Ctrl Pts',(-2.54705649080633,-3.75782471687494, 0.)); #19811=CARTESIAN_POINT('Ctrl Pts',(-2.54705649080633,-3.75782471687494, 0.1)); #19812=CARTESIAN_POINT('Ctrl Pts',(-2.58659231013124,-3.7421002432798,0.)); #19813=CARTESIAN_POINT('Ctrl Pts',(-2.58659231013124,-3.7421002432798,0.1)); #19814=CARTESIAN_POINT('Ctrl Pts',(-2.59827334765906,-3.73356410047102, 0.)); #19815=CARTESIAN_POINT('Ctrl Pts',(-2.59827334765906,-3.73356410047102, 0.1)); #19816=CARTESIAN_POINT('',(-2.52751321648095,-3.75782471687494,0.)); #19817=CARTESIAN_POINT('Ctrl Pts',(-2.59827334765906,-3.73356410047102, 0.)); #19818=CARTESIAN_POINT('Ctrl Pts',(-2.58659231013124,-3.7421002432798,0.)); #19819=CARTESIAN_POINT('Ctrl Pts',(-2.54705649080633,-3.75782471687494, 0.)); #19820=CARTESIAN_POINT('Ctrl Pts',(-2.52751321648095,-3.75782471687494, 0.)); #19821=CARTESIAN_POINT('',(-2.52751321648095,-3.75782471687494,0.1)); #19822=CARTESIAN_POINT('Ctrl Pts',(-2.52751321648095,-3.75782471687494, 0.1)); #19823=CARTESIAN_POINT('Ctrl Pts',(-2.54705649080633,-3.75782471687494, 0.1)); #19824=CARTESIAN_POINT('Ctrl Pts',(-2.58659231013124,-3.7421002432798,0.1)); #19825=CARTESIAN_POINT('Ctrl Pts',(-2.59827334765906,-3.73356410047102, 0.1)); #19826=CARTESIAN_POINT('',(-2.52751321648095,-3.75782471687494,0.)); #19827=CARTESIAN_POINT('Ctrl Pts',(-2.48550640844823,-3.74232487861688, 0.)); #19828=CARTESIAN_POINT('Ctrl Pts',(-2.48550640844823,-3.74232487861688, 0.1)); #19829=CARTESIAN_POINT('Ctrl Pts',(-2.49314400990872,-3.75063638608859, 0.)); #19830=CARTESIAN_POINT('Ctrl Pts',(-2.49314400990872,-3.75063638608859, 0.1)); #19831=CARTESIAN_POINT('Ctrl Pts',(-2.5160568142902,-3.75782471687494,0.)); #19832=CARTESIAN_POINT('Ctrl Pts',(-2.5160568142902,-3.75782471687494,0.1)); #19833=CARTESIAN_POINT('Ctrl Pts',(-2.52751321648095,-3.75782471687494, 0.)); #19834=CARTESIAN_POINT('Ctrl Pts',(-2.52751321648095,-3.75782471687494, 0.1)); #19835=CARTESIAN_POINT('',(-2.48550640844823,-3.74232487861688,0.)); #19836=CARTESIAN_POINT('Ctrl Pts',(-2.52751321648095,-3.75782471687494, 0.)); #19837=CARTESIAN_POINT('Ctrl Pts',(-2.5160568142902,-3.75782471687494,0.)); #19838=CARTESIAN_POINT('Ctrl Pts',(-2.49314400990872,-3.75063638608859, 0.)); #19839=CARTESIAN_POINT('Ctrl Pts',(-2.48550640844823,-3.74232487861688, 0.)); #19840=CARTESIAN_POINT('',(-2.48550640844823,-3.74232487861688,0.1)); #19841=CARTESIAN_POINT('Ctrl Pts',(-2.48550640844823,-3.74232487861688, 0.1)); #19842=CARTESIAN_POINT('Ctrl Pts',(-2.49314400990872,-3.75063638608859, 0.1)); #19843=CARTESIAN_POINT('Ctrl Pts',(-2.5160568142902,-3.75782471687494,0.1)); #19844=CARTESIAN_POINT('Ctrl Pts',(-2.52751321648095,-3.75782471687494, 0.1)); #19845=CARTESIAN_POINT('',(-2.48550640844823,-3.74232487861688,0.)); #19846=CARTESIAN_POINT('Ctrl Pts',(-2.47023120552724,-3.69919489389879, 0.)); #19847=CARTESIAN_POINT('Ctrl Pts',(-2.47023120552724,-3.69919489389879, 0.1)); #19848=CARTESIAN_POINT('Ctrl Pts',(-2.47023120552724,-3.71424546148271, 0.)); #19849=CARTESIAN_POINT('Ctrl Pts',(-2.47023120552724,-3.71424546148271, 0.1)); #19850=CARTESIAN_POINT('Ctrl Pts',(-2.47809344232481,-3.73401337114516, 0.)); #19851=CARTESIAN_POINT('Ctrl Pts',(-2.47809344232481,-3.73401337114516, 0.1)); #19852=CARTESIAN_POINT('Ctrl Pts',(-2.48550640844823,-3.74232487861688, 0.)); #19853=CARTESIAN_POINT('Ctrl Pts',(-2.48550640844823,-3.74232487861688, 0.1)); #19854=CARTESIAN_POINT('',(-2.47023120552724,-3.69919489389879,0.)); #19855=CARTESIAN_POINT('Ctrl Pts',(-2.48550640844823,-3.74232487861688, 0.)); #19856=CARTESIAN_POINT('Ctrl Pts',(-2.47809344232481,-3.73401337114516, 0.)); #19857=CARTESIAN_POINT('Ctrl Pts',(-2.47023120552724,-3.71424546148271, 0.)); #19858=CARTESIAN_POINT('Ctrl Pts',(-2.47023120552724,-3.69919489389879, 0.)); #19859=CARTESIAN_POINT('',(-2.47023120552724,-3.69919489389879,0.1)); #19860=CARTESIAN_POINT('Ctrl Pts',(-2.47023120552724,-3.69919489389879, 0.1)); #19861=CARTESIAN_POINT('Ctrl Pts',(-2.47023120552724,-3.71424546148271, 0.1)); #19862=CARTESIAN_POINT('Ctrl Pts',(-2.47809344232481,-3.73401337114516, 0.1)); #19863=CARTESIAN_POINT('Ctrl Pts',(-2.48550640844823,-3.74232487861688, 0.1)); #19864=CARTESIAN_POINT('',(-2.47023120552724,-3.69919489389879,0.)); #19865=CARTESIAN_POINT('Ctrl Pts',(-2.48685422047067,-3.65898516856266, 0.)); #19866=CARTESIAN_POINT('Ctrl Pts',(-2.48685422047067,-3.65898516856266, 0.1)); #19867=CARTESIAN_POINT('Ctrl Pts',(-2.4789919836731,-3.66460105198949,0.)); #19868=CARTESIAN_POINT('Ctrl Pts',(-2.4789919836731,-3.66460105198949,0.1)); #19869=CARTESIAN_POINT('Ctrl Pts',(-2.47023120552724,-3.68414432631487, 0.)); #19870=CARTESIAN_POINT('Ctrl Pts',(-2.47023120552724,-3.68414432631487, 0.1)); #19871=CARTESIAN_POINT('Ctrl Pts',(-2.47023120552724,-3.69919489389879, 0.)); #19872=CARTESIAN_POINT('Ctrl Pts',(-2.47023120552724,-3.69919489389879, 0.1)); #19873=CARTESIAN_POINT('',(-2.48685422047067,-3.65898516856265,0.)); #19874=CARTESIAN_POINT('Ctrl Pts',(-2.47023120552724,-3.69919489389879, 0.)); #19875=CARTESIAN_POINT('Ctrl Pts',(-2.47023120552724,-3.68414432631487, 0.)); #19876=CARTESIAN_POINT('Ctrl Pts',(-2.4789919836731,-3.66460105198949,0.)); #19877=CARTESIAN_POINT('Ctrl Pts',(-2.48685422047067,-3.65898516856266, 0.)); #19878=CARTESIAN_POINT('',(-2.48685422047067,-3.65898516856265,0.1)); #19879=CARTESIAN_POINT('Ctrl Pts',(-2.48685422047067,-3.65898516856266, 0.1)); #19880=CARTESIAN_POINT('Ctrl Pts',(-2.4789919836731,-3.66460105198949,0.1)); #19881=CARTESIAN_POINT('Ctrl Pts',(-2.47023120552724,-3.68414432631487, 0.1)); #19882=CARTESIAN_POINT('Ctrl Pts',(-2.47023120552724,-3.69919489389879, 0.1)); #19883=CARTESIAN_POINT('',(-2.48685422047067,-3.65898516856265,0.)); #19884=CARTESIAN_POINT('Ctrl Pts',(-2.52863639316631,-3.64910121373143, 0.)); #19885=CARTESIAN_POINT('Ctrl Pts',(-2.52863639316631,-3.64910121373143, 0.1)); #19886=CARTESIAN_POINT('Ctrl Pts',(-2.5160568142902,-3.64910121373143,0.)); #19887=CARTESIAN_POINT('Ctrl Pts',(-2.5160568142902,-3.64910121373143,0.1)); #19888=CARTESIAN_POINT('Ctrl Pts',(-2.49471645726823,-3.65336928513582, 0.)); #19889=CARTESIAN_POINT('Ctrl Pts',(-2.49471645726823,-3.65336928513582, 0.1)); #19890=CARTESIAN_POINT('Ctrl Pts',(-2.48685422047067,-3.65898516856266, 0.)); #19891=CARTESIAN_POINT('Ctrl Pts',(-2.48685422047067,-3.65898516856266, 0.1)); #19892=CARTESIAN_POINT('',(-2.52863639316631,-3.64910121373143,0.)); #19893=CARTESIAN_POINT('Ctrl Pts',(-2.48685422047067,-3.65898516856266, 0.)); #19894=CARTESIAN_POINT('Ctrl Pts',(-2.49471645726823,-3.65336928513582, 0.)); #19895=CARTESIAN_POINT('Ctrl Pts',(-2.5160568142902,-3.64910121373143,0.)); #19896=CARTESIAN_POINT('Ctrl Pts',(-2.52863639316631,-3.64910121373143, 0.)); #19897=CARTESIAN_POINT('',(-2.52863639316631,-3.64910121373143,0.1)); #19898=CARTESIAN_POINT('Ctrl Pts',(-2.52863639316631,-3.64910121373143, 0.1)); #19899=CARTESIAN_POINT('Ctrl Pts',(-2.5160568142902,-3.64910121373143,0.1)); #19900=CARTESIAN_POINT('Ctrl Pts',(-2.49471645726823,-3.65336928513582, 0.1)); #19901=CARTESIAN_POINT('Ctrl Pts',(-2.48685422047067,-3.65898516856266, 0.1)); #19902=CARTESIAN_POINT('',(-2.52863639316631,-3.64910121373143,0.)); #19903=CARTESIAN_POINT('Origin',(-2.54436086676145,-3.64910121373143,0.)); #19904=CARTESIAN_POINT('',(-2.54436086676145,-3.64910121373143,0.)); #19905=CARTESIAN_POINT('',(-2.52863639316631,-3.64910121373143,0.)); #19906=CARTESIAN_POINT('',(-2.54436086676145,-3.64910121373143,0.1)); #19907=CARTESIAN_POINT('',(-2.52863639316631,-3.64910121373143,0.1)); #19908=CARTESIAN_POINT('',(-2.54436086676145,-3.64910121373143,0.)); #19909=CARTESIAN_POINT('Origin',(-2.54436086676145,-3.61832617255238,0.)); #19910=CARTESIAN_POINT('',(-2.54436086676145,-3.61832617255238,0.)); #19911=CARTESIAN_POINT('',(-2.54436086676145,-3.64910121373143,0.)); #19912=CARTESIAN_POINT('',(-2.54436086676145,-3.61832617255238,0.1)); #19913=CARTESIAN_POINT('',(-2.54436086676145,-3.64910121373143,0.1)); #19914=CARTESIAN_POINT('',(-2.54436086676145,-3.61832617255238,0.)); #19915=CARTESIAN_POINT('Origin',(-2.53200592322241,-3.61832617255238,0.)); #19916=CARTESIAN_POINT('',(-2.53200592322241,-3.61832617255238,0.)); #19917=CARTESIAN_POINT('',(-2.54436086676145,-3.61832617255238,0.)); #19918=CARTESIAN_POINT('',(-2.53200592322241,-3.61832617255238,0.1)); #19919=CARTESIAN_POINT('',(-2.54436086676145,-3.61832617255238,0.1)); #19920=CARTESIAN_POINT('',(-2.53200592322241,-3.61832617255238,0.)); #19921=CARTESIAN_POINT('Ctrl Pts',(-2.475622453617,-3.57182665777819,0.)); #19922=CARTESIAN_POINT('Ctrl Pts',(-2.475622453617,-3.57182665777819,0.1)); #19923=CARTESIAN_POINT('Ctrl Pts',(-2.475622453617,-3.5945148268226,0.)); #19924=CARTESIAN_POINT('Ctrl Pts',(-2.475622453617,-3.5945148268226,0.1)); #19925=CARTESIAN_POINT('Ctrl Pts',(-2.50707140080727,-3.61832617255238, 0.)); #19926=CARTESIAN_POINT('Ctrl Pts',(-2.50707140080727,-3.61832617255238, 0.1)); #19927=CARTESIAN_POINT('Ctrl Pts',(-2.53200592322241,-3.61832617255238, 0.)); #19928=CARTESIAN_POINT('Ctrl Pts',(-2.53200592322241,-3.61832617255238, 0.1)); #19929=CARTESIAN_POINT('',(-2.475622453617,-3.57182665777819,0.)); #19930=CARTESIAN_POINT('Ctrl Pts',(-2.53200592322241,-3.61832617255238, 0.)); #19931=CARTESIAN_POINT('Ctrl Pts',(-2.50707140080727,-3.61832617255238, 0.)); #19932=CARTESIAN_POINT('Ctrl Pts',(-2.475622453617,-3.5945148268226,0.)); #19933=CARTESIAN_POINT('Ctrl Pts',(-2.475622453617,-3.57182665777819,0.)); #19934=CARTESIAN_POINT('',(-2.475622453617,-3.57182665777819,0.1)); #19935=CARTESIAN_POINT('Ctrl Pts',(-2.475622453617,-3.57182665777819,0.1)); #19936=CARTESIAN_POINT('Ctrl Pts',(-2.475622453617,-3.5945148268226,0.1)); #19937=CARTESIAN_POINT('Ctrl Pts',(-2.50707140080727,-3.61832617255238, 0.1)); #19938=CARTESIAN_POINT('Ctrl Pts',(-2.53200592322241,-3.61832617255238, 0.1)); #19939=CARTESIAN_POINT('',(-2.475622453617,-3.57182665777819,0.)); #19940=CARTESIAN_POINT('Ctrl Pts',(-2.49022375052677,-3.54172552261035, 0.)); #19941=CARTESIAN_POINT('Ctrl Pts',(-2.49022375052677,-3.54172552261035, 0.1)); #19942=CARTESIAN_POINT('Ctrl Pts',(-2.48370932575164,-3.54621822935182, 0.)); #19943=CARTESIAN_POINT('Ctrl Pts',(-2.48370932575164,-3.54621822935182, 0.1)); #19944=CARTESIAN_POINT('Ctrl Pts',(-2.475622453617,-3.56126879693574,0.)); #19945=CARTESIAN_POINT('Ctrl Pts',(-2.475622453617,-3.56126879693574,0.1)); #19946=CARTESIAN_POINT('Ctrl Pts',(-2.475622453617,-3.57182665777819,0.)); #19947=CARTESIAN_POINT('Ctrl Pts',(-2.475622453617,-3.57182665777819,0.1)); #19948=CARTESIAN_POINT('',(-2.49022375052677,-3.54172552261035,0.)); #19949=CARTESIAN_POINT('Ctrl Pts',(-2.475622453617,-3.57182665777819,0.)); #19950=CARTESIAN_POINT('Ctrl Pts',(-2.475622453617,-3.56126879693574,0.)); #19951=CARTESIAN_POINT('Ctrl Pts',(-2.48370932575164,-3.54621822935182, 0.)); #19952=CARTESIAN_POINT('Ctrl Pts',(-2.49022375052677,-3.54172552261035, 0.)); #19953=CARTESIAN_POINT('',(-2.49022375052677,-3.54172552261035,0.1)); #19954=CARTESIAN_POINT('Ctrl Pts',(-2.49022375052677,-3.54172552261035, 0.1)); #19955=CARTESIAN_POINT('Ctrl Pts',(-2.48370932575164,-3.54621822935182, 0.1)); #19956=CARTESIAN_POINT('Ctrl Pts',(-2.475622453617,-3.56126879693574,0.1)); #19957=CARTESIAN_POINT('Ctrl Pts',(-2.475622453617,-3.57182665777819,0.1)); #19958=CARTESIAN_POINT('',(-2.49022375052677,-3.54172552261035,0.)); #19959=CARTESIAN_POINT('Ctrl Pts',(-2.52391905108777,-3.53318937980157, 0.)); #19960=CARTESIAN_POINT('Ctrl Pts',(-2.52391905108777,-3.53318937980157, 0.1)); #19961=CARTESIAN_POINT('Ctrl Pts',(-2.51425973159362,-3.53318937980157, 0.)); #19962=CARTESIAN_POINT('Ctrl Pts',(-2.51425973159362,-3.53318937980157, 0.1)); #19963=CARTESIAN_POINT('Ctrl Pts',(-2.49718744597604,-3.53700818053181, 0.)); #19964=CARTESIAN_POINT('Ctrl Pts',(-2.49718744597604,-3.53700818053181, 0.1)); #19965=CARTESIAN_POINT('Ctrl Pts',(-2.49022375052677,-3.54172552261035, 0.)); #19966=CARTESIAN_POINT('Ctrl Pts',(-2.49022375052677,-3.54172552261035, 0.1)); #19967=CARTESIAN_POINT('',(-2.52391905108777,-3.53318937980157,0.)); #19968=CARTESIAN_POINT('Ctrl Pts',(-2.49022375052677,-3.54172552261035, 0.)); #19969=CARTESIAN_POINT('Ctrl Pts',(-2.49718744597604,-3.53700818053181, 0.)); #19970=CARTESIAN_POINT('Ctrl Pts',(-2.51425973159362,-3.53318937980157, 0.)); #19971=CARTESIAN_POINT('Ctrl Pts',(-2.52391905108777,-3.53318937980157, 0.)); #19972=CARTESIAN_POINT('',(-2.52391905108777,-3.53318937980157,0.1)); #19973=CARTESIAN_POINT('Ctrl Pts',(-2.52391905108777,-3.53318937980157, 0.1)); #19974=CARTESIAN_POINT('Ctrl Pts',(-2.51425973159362,-3.53318937980157, 0.1)); #19975=CARTESIAN_POINT('Ctrl Pts',(-2.49718744597604,-3.53700818053181, 0.1)); #19976=CARTESIAN_POINT('Ctrl Pts',(-2.49022375052677,-3.54172552261035, 0.1)); #19977=CARTESIAN_POINT('',(-2.52391905108777,-3.53318937980157,0.)); #19978=CARTESIAN_POINT('Ctrl Pts',(-2.56367950574976,-3.54195015794743, 0.)); #19979=CARTESIAN_POINT('Ctrl Pts',(-2.56367950574976,-3.54195015794743, 0.1)); #19980=CARTESIAN_POINT('Ctrl Pts',(-2.55402018625561,-3.53813135721718, 0.)); #19981=CARTESIAN_POINT('Ctrl Pts',(-2.55402018625561,-3.53813135721718, 0.1)); #19982=CARTESIAN_POINT('Ctrl Pts',(-2.53402764125608,-3.53318937980157, 0.)); #19983=CARTESIAN_POINT('Ctrl Pts',(-2.53402764125608,-3.53318937980157, 0.1)); #19984=CARTESIAN_POINT('Ctrl Pts',(-2.52391905108777,-3.53318937980157, 0.)); #19985=CARTESIAN_POINT('Ctrl Pts',(-2.52391905108777,-3.53318937980157, 0.1)); #19986=CARTESIAN_POINT('Ctrl Pts',(-2.52391905108777,-3.53318937980157, 0.)); #19987=CARTESIAN_POINT('Ctrl Pts',(-2.53402764125608,-3.53318937980157, 0.)); #19988=CARTESIAN_POINT('Ctrl Pts',(-2.55402018625561,-3.53813135721718, 0.)); #19989=CARTESIAN_POINT('Ctrl Pts',(-2.56367950574976,-3.54195015794743, 0.)); #19990=CARTESIAN_POINT('Ctrl Pts',(-2.56367950574976,-3.54195015794743, 0.1)); #19991=CARTESIAN_POINT('Ctrl Pts',(-2.55402018625561,-3.53813135721718, 0.1)); #19992=CARTESIAN_POINT('Ctrl Pts',(-2.53402764125608,-3.53318937980157, 0.1)); #19993=CARTESIAN_POINT('Ctrl Pts',(-2.52391905108777,-3.53318937980157, 0.1)); #19994=CARTESIAN_POINT('Origin',(-2.50997404804769,-3.64483891827641,0.)); #19995=CARTESIAN_POINT('Origin',(-2.50997404804769,-3.64483891827641,0.1)); #19996=CARTESIAN_POINT('Ctrl Pts',(-2.72272132439771,-3.75917252889738, 0.)); #19997=CARTESIAN_POINT('Ctrl Pts',(-2.72272132439771,-3.75917252889738, 0.1)); #19998=CARTESIAN_POINT('Ctrl Pts',(-2.70744612147672,-3.75917252889738, 0.)); #19999=CARTESIAN_POINT('Ctrl Pts',(-2.70744612147672,-3.75917252889738, 0.1)); #20000=CARTESIAN_POINT('Ctrl Pts',(-2.68745357647719,-3.74457123198761, 0.)); #20001=CARTESIAN_POINT('Ctrl Pts',(-2.68745357647719,-3.74457123198761, 0.1)); #20002=CARTESIAN_POINT('Ctrl Pts',(-2.68183769305036,-3.72996993507784, 0.)); #20003=CARTESIAN_POINT('Ctrl Pts',(-2.68183769305036,-3.72996993507784, 0.1)); #20004=CARTESIAN_POINT('',(-2.72272132439771,-3.75917252889738,0.)); #20005=CARTESIAN_POINT('',(-2.68183769305036,-3.72996993507784,0.)); #20006=CARTESIAN_POINT('Ctrl Pts',(-2.72272132439771,-3.75917252889738, 0.)); #20007=CARTESIAN_POINT('Ctrl Pts',(-2.70744612147672,-3.75917252889738, 0.)); #20008=CARTESIAN_POINT('Ctrl Pts',(-2.68745357647719,-3.74457123198761, 0.)); #20009=CARTESIAN_POINT('Ctrl Pts',(-2.68183769305036,-3.72996993507784, 0.)); #20010=CARTESIAN_POINT('',(-2.72272132439771,-3.75917252889738,0.1)); #20011=CARTESIAN_POINT('',(-2.72272132439771,-3.75917252889738,0.)); #20012=CARTESIAN_POINT('',(-2.68183769305036,-3.72996993507784,0.1)); #20013=CARTESIAN_POINT('Ctrl Pts',(-2.68183769305036,-3.72996993507784, 0.1)); #20014=CARTESIAN_POINT('Ctrl Pts',(-2.68745357647719,-3.74457123198761, 0.1)); #20015=CARTESIAN_POINT('Ctrl Pts',(-2.70744612147672,-3.75917252889738, 0.1)); #20016=CARTESIAN_POINT('Ctrl Pts',(-2.72272132439771,-3.75917252889738, 0.1)); #20017=CARTESIAN_POINT('',(-2.68183769305036,-3.72996993507784,0.)); #20018=CARTESIAN_POINT('Ctrl Pts',(-2.76427886175628,-3.72929602906662, 0.)); #20019=CARTESIAN_POINT('Ctrl Pts',(-2.76427886175628,-3.72929602906662, 0.1)); #20020=CARTESIAN_POINT('Ctrl Pts',(-2.75888761366652,-3.74367269063932, 0.)); #20021=CARTESIAN_POINT('Ctrl Pts',(-2.75888761366652,-3.74367269063932, 0.1)); #20022=CARTESIAN_POINT('Ctrl Pts',(-2.73889506866699,-3.75917252889738, 0.)); #20023=CARTESIAN_POINT('Ctrl Pts',(-2.73889506866699,-3.75917252889738, 0.1)); #20024=CARTESIAN_POINT('Ctrl Pts',(-2.72272132439771,-3.75917252889738, 0.)); #20025=CARTESIAN_POINT('Ctrl Pts',(-2.72272132439771,-3.75917252889738, 0.1)); #20026=CARTESIAN_POINT('',(-2.76427886175628,-3.72929602906662,0.)); #20027=CARTESIAN_POINT('Ctrl Pts',(-2.76427886175628,-3.72929602906662, 0.)); #20028=CARTESIAN_POINT('Ctrl Pts',(-2.75888761366652,-3.74367269063932, 0.)); #20029=CARTESIAN_POINT('Ctrl Pts',(-2.73889506866699,-3.75917252889738, 0.)); #20030=CARTESIAN_POINT('Ctrl Pts',(-2.72272132439771,-3.75917252889738, 0.)); #20031=CARTESIAN_POINT('',(-2.76427886175628,-3.72929602906662,0.1)); #20032=CARTESIAN_POINT('',(-2.76427886175628,-3.72929602906662,0.)); #20033=CARTESIAN_POINT('Ctrl Pts',(-2.72272132439771,-3.75917252889738, 0.1)); #20034=CARTESIAN_POINT('Ctrl Pts',(-2.73889506866699,-3.75917252889738, 0.1)); #20035=CARTESIAN_POINT('Ctrl Pts',(-2.75888761366652,-3.74367269063932, 0.1)); #20036=CARTESIAN_POINT('Ctrl Pts',(-2.76427886175628,-3.72929602906662, 0.1)); #20037=CARTESIAN_POINT('Ctrl Pts',(-2.77371354591337,-3.64573168367533, 0.)); #20038=CARTESIAN_POINT('Ctrl Pts',(-2.77371354591337,-3.64573168367533, 0.1)); #20039=CARTESIAN_POINT('Ctrl Pts',(-2.77371354591337,-3.67493427749487, 0.)); #20040=CARTESIAN_POINT('Ctrl Pts',(-2.77371354591337,-3.67493427749487, 0.1)); #20041=CARTESIAN_POINT('Ctrl Pts',(-2.77011938052019,-3.71402082614563, 0.)); #20042=CARTESIAN_POINT('Ctrl Pts',(-2.77011938052019,-3.71402082614563, 0.1)); #20043=CARTESIAN_POINT('Ctrl Pts',(-2.76427886175628,-3.72929602906662, 0.)); #20044=CARTESIAN_POINT('Ctrl Pts',(-2.76427886175628,-3.72929602906662, 0.1)); #20045=CARTESIAN_POINT('',(-2.77371354591337,-3.64573168367533,0.)); #20046=CARTESIAN_POINT('Ctrl Pts',(-2.77371354591337,-3.64573168367533, 0.)); #20047=CARTESIAN_POINT('Ctrl Pts',(-2.77371354591337,-3.67493427749487, 0.)); #20048=CARTESIAN_POINT('Ctrl Pts',(-2.77011938052019,-3.71402082614563, 0.)); #20049=CARTESIAN_POINT('Ctrl Pts',(-2.76427886175628,-3.72929602906662, 0.)); #20050=CARTESIAN_POINT('',(-2.77371354591337,-3.64573168367533,0.1)); #20051=CARTESIAN_POINT('',(-2.77371354591337,-3.64573168367533,0.)); #20052=CARTESIAN_POINT('Ctrl Pts',(-2.76427886175628,-3.72929602906662, 0.1)); #20053=CARTESIAN_POINT('Ctrl Pts',(-2.77011938052019,-3.71402082614563, 0.1)); #20054=CARTESIAN_POINT('Ctrl Pts',(-2.77371354591337,-3.67493427749487, 0.1)); #20055=CARTESIAN_POINT('Ctrl Pts',(-2.77371354591337,-3.64573168367533, 0.1)); #20056=CARTESIAN_POINT('Ctrl Pts',(-2.76405422641921,-3.56126879693574, 0.)); #20057=CARTESIAN_POINT('Ctrl Pts',(-2.76405422641921,-3.56126879693574, 0.1)); #20058=CARTESIAN_POINT('Ctrl Pts',(-2.76967010984604,-3.57542082317136, 0.)); #20059=CARTESIAN_POINT('Ctrl Pts',(-2.76967010984604,-3.57542082317136, 0.1)); #20060=CARTESIAN_POINT('Ctrl Pts',(-2.77371354591337,-3.61855080788945, 0.)); #20061=CARTESIAN_POINT('Ctrl Pts',(-2.77371354591337,-3.61855080788945, 0.1)); #20062=CARTESIAN_POINT('Ctrl Pts',(-2.77371354591337,-3.64573168367533, 0.)); #20063=CARTESIAN_POINT('Ctrl Pts',(-2.77371354591337,-3.64573168367533, 0.1)); #20064=CARTESIAN_POINT('',(-2.76405422641921,-3.56126879693574,0.)); #20065=CARTESIAN_POINT('Ctrl Pts',(-2.76405422641921,-3.56126879693574, 0.)); #20066=CARTESIAN_POINT('Ctrl Pts',(-2.76967010984604,-3.57542082317136, 0.)); #20067=CARTESIAN_POINT('Ctrl Pts',(-2.77371354591337,-3.61855080788945, 0.)); #20068=CARTESIAN_POINT('Ctrl Pts',(-2.77371354591337,-3.64573168367533, 0.)); #20069=CARTESIAN_POINT('',(-2.76405422641921,-3.56126879693574,0.1)); #20070=CARTESIAN_POINT('',(-2.76405422641921,-3.56126879693574,0.)); #20071=CARTESIAN_POINT('Ctrl Pts',(-2.77371354591337,-3.64573168367533, 0.1)); #20072=CARTESIAN_POINT('Ctrl Pts',(-2.77371354591337,-3.61855080788945, 0.1)); #20073=CARTESIAN_POINT('Ctrl Pts',(-2.76967010984604,-3.57542082317136, 0.1)); #20074=CARTESIAN_POINT('Ctrl Pts',(-2.76405422641921,-3.56126879693574, 0.1)); #20075=CARTESIAN_POINT('Ctrl Pts',(-2.72272132439771,-3.5320662031162,0.)); #20076=CARTESIAN_POINT('Ctrl Pts',(-2.72272132439771,-3.5320662031162,0.1)); #20077=CARTESIAN_POINT('Ctrl Pts',(-2.73822116265577,-3.5320662031162,0.)); #20078=CARTESIAN_POINT('Ctrl Pts',(-2.73822116265577,-3.5320662031162,0.1)); #20079=CARTESIAN_POINT('Ctrl Pts',(-2.7582137076553,-3.54666750002597,0.)); #20080=CARTESIAN_POINT('Ctrl Pts',(-2.7582137076553,-3.54666750002597,0.1)); #20081=CARTESIAN_POINT('Ctrl Pts',(-2.76405422641921,-3.56126879693574, 0.)); #20082=CARTESIAN_POINT('Ctrl Pts',(-2.76405422641921,-3.56126879693574, 0.1)); #20083=CARTESIAN_POINT('',(-2.72272132439771,-3.5320662031162,0.)); #20084=CARTESIAN_POINT('Ctrl Pts',(-2.72272132439771,-3.5320662031162,0.)); #20085=CARTESIAN_POINT('Ctrl Pts',(-2.73822116265577,-3.5320662031162,0.)); #20086=CARTESIAN_POINT('Ctrl Pts',(-2.7582137076553,-3.54666750002597,0.)); #20087=CARTESIAN_POINT('Ctrl Pts',(-2.76405422641921,-3.56126879693574, 0.)); #20088=CARTESIAN_POINT('',(-2.72272132439771,-3.5320662031162,0.1)); #20089=CARTESIAN_POINT('',(-2.72272132439771,-3.5320662031162,0.)); #20090=CARTESIAN_POINT('Ctrl Pts',(-2.76405422641921,-3.56126879693574, 0.1)); #20091=CARTESIAN_POINT('Ctrl Pts',(-2.7582137076553,-3.54666750002597,0.1)); #20092=CARTESIAN_POINT('Ctrl Pts',(-2.73822116265577,-3.5320662031162,0.1)); #20093=CARTESIAN_POINT('Ctrl Pts',(-2.72272132439771,-3.5320662031162,0.1)); #20094=CARTESIAN_POINT('Ctrl Pts',(-2.68206232838743,-3.56081952626159, 0.)); #20095=CARTESIAN_POINT('Ctrl Pts',(-2.68206232838743,-3.56081952626159, 0.1)); #20096=CARTESIAN_POINT('Ctrl Pts',(-2.68767821181426,-3.54666750002597, 0.)); #20097=CARTESIAN_POINT('Ctrl Pts',(-2.68767821181426,-3.54666750002597, 0.1)); #20098=CARTESIAN_POINT('Ctrl Pts',(-2.70722148613965,-3.5320662031162,0.)); #20099=CARTESIAN_POINT('Ctrl Pts',(-2.70722148613965,-3.5320662031162,0.1)); #20100=CARTESIAN_POINT('Ctrl Pts',(-2.72272132439771,-3.5320662031162,0.)); #20101=CARTESIAN_POINT('Ctrl Pts',(-2.72272132439771,-3.5320662031162,0.1)); #20102=CARTESIAN_POINT('',(-2.68206232838743,-3.56081952626159,0.)); #20103=CARTESIAN_POINT('Ctrl Pts',(-2.68206232838743,-3.56081952626159, 0.)); #20104=CARTESIAN_POINT('Ctrl Pts',(-2.68767821181426,-3.54666750002597, 0.)); #20105=CARTESIAN_POINT('Ctrl Pts',(-2.70722148613965,-3.5320662031162,0.)); #20106=CARTESIAN_POINT('Ctrl Pts',(-2.72272132439771,-3.5320662031162,0.)); #20107=CARTESIAN_POINT('',(-2.68206232838743,-3.56081952626159,0.1)); #20108=CARTESIAN_POINT('',(-2.68206232838743,-3.56081952626159,0.)); #20109=CARTESIAN_POINT('Ctrl Pts',(-2.72272132439771,-3.5320662031162,0.1)); #20110=CARTESIAN_POINT('Ctrl Pts',(-2.70722148613965,-3.5320662031162,0.1)); #20111=CARTESIAN_POINT('Ctrl Pts',(-2.68767821181426,-3.54666750002597, 0.1)); #20112=CARTESIAN_POINT('Ctrl Pts',(-2.68206232838743,-3.56081952626159, 0.1)); #20113=CARTESIAN_POINT('Ctrl Pts',(-2.67195373821913,-3.64550704833825, 0.)); #20114=CARTESIAN_POINT('Ctrl Pts',(-2.67195373821913,-3.64550704833825, 0.1)); #20115=CARTESIAN_POINT('Ctrl Pts',(-2.67195373821913,-3.61697836052993, 0.)); #20116=CARTESIAN_POINT('Ctrl Pts',(-2.67195373821913,-3.61697836052993, 0.1)); #20117=CARTESIAN_POINT('Ctrl Pts',(-2.67644644496059,-3.57497155249721, 0.)); #20118=CARTESIAN_POINT('Ctrl Pts',(-2.67644644496059,-3.57497155249721, 0.1)); #20119=CARTESIAN_POINT('Ctrl Pts',(-2.68206232838743,-3.56081952626159, 0.)); #20120=CARTESIAN_POINT('Ctrl Pts',(-2.68206232838743,-3.56081952626159, 0.1)); #20121=CARTESIAN_POINT('',(-2.67195373821913,-3.64550704833825,0.)); #20122=CARTESIAN_POINT('Ctrl Pts',(-2.67195373821913,-3.64550704833825, 0.)); #20123=CARTESIAN_POINT('Ctrl Pts',(-2.67195373821913,-3.61697836052993, 0.)); #20124=CARTESIAN_POINT('Ctrl Pts',(-2.67644644496059,-3.57497155249721, 0.)); #20125=CARTESIAN_POINT('Ctrl Pts',(-2.68206232838743,-3.56081952626159, 0.)); #20126=CARTESIAN_POINT('',(-2.67195373821913,-3.64550704833825,0.1)); #20127=CARTESIAN_POINT('',(-2.67195373821913,-3.64550704833825,0.)); #20128=CARTESIAN_POINT('Ctrl Pts',(-2.68206232838743,-3.56081952626159, 0.1)); #20129=CARTESIAN_POINT('Ctrl Pts',(-2.67644644496059,-3.57497155249721, 0.1)); #20130=CARTESIAN_POINT('Ctrl Pts',(-2.67195373821913,-3.61697836052993, 0.1)); #20131=CARTESIAN_POINT('Ctrl Pts',(-2.67195373821913,-3.64550704833825, 0.1)); #20132=CARTESIAN_POINT('Ctrl Pts',(-2.68183769305036,-3.72996993507784, 0.)); #20133=CARTESIAN_POINT('Ctrl Pts',(-2.68183769305036,-3.72996993507784, 0.1)); #20134=CARTESIAN_POINT('Ctrl Pts',(-2.67644644496059,-3.71626717951637, 0.)); #20135=CARTESIAN_POINT('Ctrl Pts',(-2.67644644496059,-3.71626717951637, 0.1)); #20136=CARTESIAN_POINT('Ctrl Pts',(-2.67195373821913,-3.67403573614657, 0.)); #20137=CARTESIAN_POINT('Ctrl Pts',(-2.67195373821913,-3.67403573614657, 0.1)); #20138=CARTESIAN_POINT('Ctrl Pts',(-2.67195373821913,-3.64550704833825, 0.)); #20139=CARTESIAN_POINT('Ctrl Pts',(-2.67195373821913,-3.64550704833825, 0.1)); #20140=CARTESIAN_POINT('Ctrl Pts',(-2.68183769305036,-3.72996993507784, 0.)); #20141=CARTESIAN_POINT('Ctrl Pts',(-2.67644644496059,-3.71626717951637, 0.)); #20142=CARTESIAN_POINT('Ctrl Pts',(-2.67195373821913,-3.67403573614657, 0.)); #20143=CARTESIAN_POINT('Ctrl Pts',(-2.67195373821913,-3.64550704833825, 0.)); #20144=CARTESIAN_POINT('Ctrl Pts',(-2.67195373821913,-3.64550704833825, 0.1)); #20145=CARTESIAN_POINT('Ctrl Pts',(-2.67195373821913,-3.67403573614657, 0.1)); #20146=CARTESIAN_POINT('Ctrl Pts',(-2.67644644496059,-3.71626717951637, 0.1)); #20147=CARTESIAN_POINT('Ctrl Pts',(-2.68183769305036,-3.72996993507784, 0.1)); #20148=CARTESIAN_POINT('Ctrl Pts',(-2.81145228254169,-3.64573168367533, 0.)); #20149=CARTESIAN_POINT('Ctrl Pts',(-2.81145228254169,-3.64573168367533, 0.1)); #20150=CARTESIAN_POINT('Ctrl Pts',(-2.81145228254169,-3.71873816822417, 0.)); #20151=CARTESIAN_POINT('Ctrl Pts',(-2.81145228254169,-3.71873816822417, 0.1)); #20152=CARTESIAN_POINT('Ctrl Pts',(-2.76854693316068,-3.78994757007643, 0.)); #20153=CARTESIAN_POINT('Ctrl Pts',(-2.76854693316068,-3.78994757007643, 0.1)); #20154=CARTESIAN_POINT('Ctrl Pts',(-2.72272132439771,-3.78994757007643, 0.)); #20155=CARTESIAN_POINT('Ctrl Pts',(-2.72272132439771,-3.78994757007643, 0.1)); #20156=CARTESIAN_POINT('',(-2.72272132439771,-3.78994757007643,0.)); #20157=CARTESIAN_POINT('',(-2.81145228254169,-3.64573168367533,0.)); #20158=CARTESIAN_POINT('Ctrl Pts',(-2.72272132439771,-3.78994757007643, 0.)); #20159=CARTESIAN_POINT('Ctrl Pts',(-2.76854693316068,-3.78994757007643, 0.)); #20160=CARTESIAN_POINT('Ctrl Pts',(-2.81145228254169,-3.71873816822417, 0.)); #20161=CARTESIAN_POINT('Ctrl Pts',(-2.81145228254169,-3.64573168367533, 0.)); #20162=CARTESIAN_POINT('',(-2.72272132439771,-3.78994757007643,0.1)); #20163=CARTESIAN_POINT('',(-2.72272132439771,-3.78994757007643,0.)); #20164=CARTESIAN_POINT('',(-2.81145228254169,-3.64573168367533,0.1)); #20165=CARTESIAN_POINT('Ctrl Pts',(-2.81145228254169,-3.64573168367533, 0.1)); #20166=CARTESIAN_POINT('Ctrl Pts',(-2.81145228254169,-3.71873816822417, 0.1)); #20167=CARTESIAN_POINT('Ctrl Pts',(-2.76854693316068,-3.78994757007643, 0.1)); #20168=CARTESIAN_POINT('Ctrl Pts',(-2.72272132439771,-3.78994757007643, 0.1)); #20169=CARTESIAN_POINT('',(-2.81145228254169,-3.64573168367533,0.)); #20170=CARTESIAN_POINT('Ctrl Pts',(-2.72272132439771,-3.50129116193715, 0.)); #20171=CARTESIAN_POINT('Ctrl Pts',(-2.72272132439771,-3.50129116193715, 0.1)); #20172=CARTESIAN_POINT('Ctrl Pts',(-2.76809766248653,-3.50129116193715, 0.)); #20173=CARTESIAN_POINT('Ctrl Pts',(-2.76809766248653,-3.50129116193715, 0.1)); #20174=CARTESIAN_POINT('Ctrl Pts',(-2.81145228254169,-3.57070348109282, 0.)); #20175=CARTESIAN_POINT('Ctrl Pts',(-2.81145228254169,-3.57070348109282, 0.1)); #20176=CARTESIAN_POINT('Ctrl Pts',(-2.81145228254169,-3.64573168367533, 0.)); #20177=CARTESIAN_POINT('Ctrl Pts',(-2.81145228254169,-3.64573168367533, 0.1)); #20178=CARTESIAN_POINT('',(-2.72272132439771,-3.50129116193715,0.)); #20179=CARTESIAN_POINT('Ctrl Pts',(-2.81145228254169,-3.64573168367533, 0.)); #20180=CARTESIAN_POINT('Ctrl Pts',(-2.81145228254169,-3.57070348109282, 0.)); #20181=CARTESIAN_POINT('Ctrl Pts',(-2.76809766248653,-3.50129116193715, 0.)); #20182=CARTESIAN_POINT('Ctrl Pts',(-2.72272132439771,-3.50129116193715, 0.)); #20183=CARTESIAN_POINT('',(-2.72272132439771,-3.50129116193715,0.1)); #20184=CARTESIAN_POINT('Ctrl Pts',(-2.72272132439771,-3.50129116193715, 0.1)); #20185=CARTESIAN_POINT('Ctrl Pts',(-2.76809766248653,-3.50129116193715, 0.1)); #20186=CARTESIAN_POINT('Ctrl Pts',(-2.81145228254169,-3.57070348109282, 0.1)); #20187=CARTESIAN_POINT('Ctrl Pts',(-2.81145228254169,-3.64573168367533, 0.1)); #20188=CARTESIAN_POINT('',(-2.72272132439771,-3.50129116193715,0.)); #20189=CARTESIAN_POINT('Ctrl Pts',(-2.6342150015908,-3.64550704833825,0.)); #20190=CARTESIAN_POINT('Ctrl Pts',(-2.6342150015908,-3.64550704833825,0.1)); #20191=CARTESIAN_POINT('Ctrl Pts',(-2.6342150015908,-3.57317446980063,0.)); #20192=CARTESIAN_POINT('Ctrl Pts',(-2.6342150015908,-3.57317446980063,0.1)); #20193=CARTESIAN_POINT('Ctrl Pts',(-2.67712035097181,-3.50129116193715, 0.)); #20194=CARTESIAN_POINT('Ctrl Pts',(-2.67712035097181,-3.50129116193715, 0.1)); #20195=CARTESIAN_POINT('Ctrl Pts',(-2.72272132439771,-3.50129116193715, 0.)); #20196=CARTESIAN_POINT('Ctrl Pts',(-2.72272132439771,-3.50129116193715, 0.1)); #20197=CARTESIAN_POINT('',(-2.6342150015908,-3.64550704833825,0.)); #20198=CARTESIAN_POINT('Ctrl Pts',(-2.72272132439771,-3.50129116193715, 0.)); #20199=CARTESIAN_POINT('Ctrl Pts',(-2.67712035097181,-3.50129116193715, 0.)); #20200=CARTESIAN_POINT('Ctrl Pts',(-2.6342150015908,-3.57317446980063,0.)); #20201=CARTESIAN_POINT('Ctrl Pts',(-2.6342150015908,-3.64550704833825,0.)); #20202=CARTESIAN_POINT('',(-2.6342150015908,-3.64550704833825,0.1)); #20203=CARTESIAN_POINT('Ctrl Pts',(-2.6342150015908,-3.64550704833825,0.1)); #20204=CARTESIAN_POINT('Ctrl Pts',(-2.6342150015908,-3.57317446980063,0.1)); #20205=CARTESIAN_POINT('Ctrl Pts',(-2.67712035097181,-3.50129116193715, 0.1)); #20206=CARTESIAN_POINT('Ctrl Pts',(-2.72272132439771,-3.50129116193715, 0.1)); #20207=CARTESIAN_POINT('',(-2.6342150015908,-3.64550704833825,0.)); #20208=CARTESIAN_POINT('Ctrl Pts',(-2.72272132439771,-3.78994757007643, 0.)); #20209=CARTESIAN_POINT('Ctrl Pts',(-2.72272132439771,-3.78994757007643, 0.1)); #20210=CARTESIAN_POINT('Ctrl Pts',(-2.67756962164596,-3.78994757007643, 0.)); #20211=CARTESIAN_POINT('Ctrl Pts',(-2.67756962164596,-3.78994757007643, 0.1)); #20212=CARTESIAN_POINT('Ctrl Pts',(-2.6342150015908,-3.72008598024661,0.)); #20213=CARTESIAN_POINT('Ctrl Pts',(-2.6342150015908,-3.72008598024661,0.1)); #20214=CARTESIAN_POINT('Ctrl Pts',(-2.6342150015908,-3.64550704833825,0.)); #20215=CARTESIAN_POINT('Ctrl Pts',(-2.6342150015908,-3.64550704833825,0.1)); #20216=CARTESIAN_POINT('Ctrl Pts',(-2.6342150015908,-3.64550704833825,0.)); #20217=CARTESIAN_POINT('Ctrl Pts',(-2.6342150015908,-3.72008598024661,0.)); #20218=CARTESIAN_POINT('Ctrl Pts',(-2.67756962164596,-3.78994757007643, 0.)); #20219=CARTESIAN_POINT('Ctrl Pts',(-2.72272132439771,-3.78994757007643, 0.)); #20220=CARTESIAN_POINT('Ctrl Pts',(-2.72272132439771,-3.78994757007643, 0.1)); #20221=CARTESIAN_POINT('Ctrl Pts',(-2.67756962164596,-3.78994757007643, 0.1)); #20222=CARTESIAN_POINT('Ctrl Pts',(-2.6342150015908,-3.72008598024661,0.1)); #20223=CARTESIAN_POINT('Ctrl Pts',(-2.6342150015908,-3.64550704833825,0.1)); #20224=CARTESIAN_POINT('Origin',(-2.7228759304757,-3.64562853590339,0.)); #20225=CARTESIAN_POINT('Origin',(-2.7228759304757,-3.64562853590339,0.1)); #20226=CARTESIAN_POINT('Ctrl Pts',(-2.93073364652765,-3.75917252889738, 0.)); #20227=CARTESIAN_POINT('Ctrl Pts',(-2.93073364652765,-3.75917252889738, 0.1)); #20228=CARTESIAN_POINT('Ctrl Pts',(-2.91545844360666,-3.75917252889738, 0.)); #20229=CARTESIAN_POINT('Ctrl Pts',(-2.91545844360666,-3.75917252889738, 0.1)); #20230=CARTESIAN_POINT('Ctrl Pts',(-2.89546589860713,-3.74457123198761, 0.)); #20231=CARTESIAN_POINT('Ctrl Pts',(-2.89546589860713,-3.74457123198761, 0.1)); #20232=CARTESIAN_POINT('Ctrl Pts',(-2.8898500151803,-3.72996993507784,0.)); #20233=CARTESIAN_POINT('Ctrl Pts',(-2.8898500151803,-3.72996993507784,0.1)); #20234=CARTESIAN_POINT('',(-2.93073364652765,-3.75917252889738,0.)); #20235=CARTESIAN_POINT('',(-2.8898500151803,-3.72996993507784,0.)); #20236=CARTESIAN_POINT('Ctrl Pts',(-2.93073364652765,-3.75917252889738, 0.)); #20237=CARTESIAN_POINT('Ctrl Pts',(-2.91545844360666,-3.75917252889738, 0.)); #20238=CARTESIAN_POINT('Ctrl Pts',(-2.89546589860713,-3.74457123198761, 0.)); #20239=CARTESIAN_POINT('Ctrl Pts',(-2.8898500151803,-3.72996993507784,0.)); #20240=CARTESIAN_POINT('',(-2.93073364652765,-3.75917252889738,0.1)); #20241=CARTESIAN_POINT('',(-2.93073364652765,-3.75917252889738,0.)); #20242=CARTESIAN_POINT('',(-2.8898500151803,-3.72996993507784,0.1)); #20243=CARTESIAN_POINT('Ctrl Pts',(-2.8898500151803,-3.72996993507784,0.1)); #20244=CARTESIAN_POINT('Ctrl Pts',(-2.89546589860713,-3.74457123198761, 0.1)); #20245=CARTESIAN_POINT('Ctrl Pts',(-2.91545844360666,-3.75917252889738, 0.1)); #20246=CARTESIAN_POINT('Ctrl Pts',(-2.93073364652765,-3.75917252889738, 0.1)); #20247=CARTESIAN_POINT('',(-2.8898500151803,-3.72996993507784,0.)); #20248=CARTESIAN_POINT('Ctrl Pts',(-2.97229118388623,-3.72929602906662, 0.)); #20249=CARTESIAN_POINT('Ctrl Pts',(-2.97229118388623,-3.72929602906662, 0.1)); #20250=CARTESIAN_POINT('Ctrl Pts',(-2.96689993579647,-3.74367269063932, 0.)); #20251=CARTESIAN_POINT('Ctrl Pts',(-2.96689993579647,-3.74367269063932, 0.1)); #20252=CARTESIAN_POINT('Ctrl Pts',(-2.94690739079694,-3.75917252889738, 0.)); #20253=CARTESIAN_POINT('Ctrl Pts',(-2.94690739079694,-3.75917252889738, 0.1)); #20254=CARTESIAN_POINT('Ctrl Pts',(-2.93073364652765,-3.75917252889738, 0.)); #20255=CARTESIAN_POINT('Ctrl Pts',(-2.93073364652765,-3.75917252889738, 0.1)); #20256=CARTESIAN_POINT('',(-2.97229118388623,-3.72929602906662,0.)); #20257=CARTESIAN_POINT('Ctrl Pts',(-2.97229118388623,-3.72929602906662, 0.)); #20258=CARTESIAN_POINT('Ctrl Pts',(-2.96689993579647,-3.74367269063932, 0.)); #20259=CARTESIAN_POINT('Ctrl Pts',(-2.94690739079694,-3.75917252889738, 0.)); #20260=CARTESIAN_POINT('Ctrl Pts',(-2.93073364652765,-3.75917252889738, 0.)); #20261=CARTESIAN_POINT('',(-2.97229118388623,-3.72929602906662,0.1)); #20262=CARTESIAN_POINT('',(-2.97229118388623,-3.72929602906662,0.)); #20263=CARTESIAN_POINT('Ctrl Pts',(-2.93073364652765,-3.75917252889738, 0.1)); #20264=CARTESIAN_POINT('Ctrl Pts',(-2.94690739079694,-3.75917252889738, 0.1)); #20265=CARTESIAN_POINT('Ctrl Pts',(-2.96689993579647,-3.74367269063932, 0.1)); #20266=CARTESIAN_POINT('Ctrl Pts',(-2.97229118388623,-3.72929602906662, 0.1)); #20267=CARTESIAN_POINT('Ctrl Pts',(-2.98172586804331,-3.64573168367533, 0.)); #20268=CARTESIAN_POINT('Ctrl Pts',(-2.98172586804331,-3.64573168367533, 0.1)); #20269=CARTESIAN_POINT('Ctrl Pts',(-2.98172586804331,-3.67493427749487, 0.)); #20270=CARTESIAN_POINT('Ctrl Pts',(-2.98172586804331,-3.67493427749487, 0.1)); #20271=CARTESIAN_POINT('Ctrl Pts',(-2.97813170265014,-3.71402082614563, 0.)); #20272=CARTESIAN_POINT('Ctrl Pts',(-2.97813170265014,-3.71402082614563, 0.1)); #20273=CARTESIAN_POINT('Ctrl Pts',(-2.97229118388623,-3.72929602906662, 0.)); #20274=CARTESIAN_POINT('Ctrl Pts',(-2.97229118388623,-3.72929602906662, 0.1)); #20275=CARTESIAN_POINT('',(-2.98172586804331,-3.64573168367533,0.)); #20276=CARTESIAN_POINT('Ctrl Pts',(-2.98172586804331,-3.64573168367533, 0.)); #20277=CARTESIAN_POINT('Ctrl Pts',(-2.98172586804331,-3.67493427749487, 0.)); #20278=CARTESIAN_POINT('Ctrl Pts',(-2.97813170265014,-3.71402082614563, 0.)); #20279=CARTESIAN_POINT('Ctrl Pts',(-2.97229118388623,-3.72929602906662, 0.)); #20280=CARTESIAN_POINT('',(-2.98172586804331,-3.64573168367533,0.1)); #20281=CARTESIAN_POINT('',(-2.98172586804331,-3.64573168367533,0.)); #20282=CARTESIAN_POINT('Ctrl Pts',(-2.97229118388623,-3.72929602906662, 0.1)); #20283=CARTESIAN_POINT('Ctrl Pts',(-2.97813170265014,-3.71402082614563, 0.1)); #20284=CARTESIAN_POINT('Ctrl Pts',(-2.98172586804331,-3.67493427749487, 0.1)); #20285=CARTESIAN_POINT('Ctrl Pts',(-2.98172586804331,-3.64573168367533, 0.1)); #20286=CARTESIAN_POINT('Ctrl Pts',(-2.97206654854915,-3.56126879693574, 0.)); #20287=CARTESIAN_POINT('Ctrl Pts',(-2.97206654854915,-3.56126879693574, 0.1)); #20288=CARTESIAN_POINT('Ctrl Pts',(-2.97768243197599,-3.57542082317136, 0.)); #20289=CARTESIAN_POINT('Ctrl Pts',(-2.97768243197599,-3.57542082317136, 0.1)); #20290=CARTESIAN_POINT('Ctrl Pts',(-2.98172586804331,-3.61855080788945, 0.)); #20291=CARTESIAN_POINT('Ctrl Pts',(-2.98172586804331,-3.61855080788945, 0.1)); #20292=CARTESIAN_POINT('Ctrl Pts',(-2.98172586804331,-3.64573168367533, 0.)); #20293=CARTESIAN_POINT('Ctrl Pts',(-2.98172586804331,-3.64573168367533, 0.1)); #20294=CARTESIAN_POINT('',(-2.97206654854915,-3.56126879693574,0.)); #20295=CARTESIAN_POINT('Ctrl Pts',(-2.97206654854915,-3.56126879693574, 0.)); #20296=CARTESIAN_POINT('Ctrl Pts',(-2.97768243197599,-3.57542082317136, 0.)); #20297=CARTESIAN_POINT('Ctrl Pts',(-2.98172586804331,-3.61855080788945, 0.)); #20298=CARTESIAN_POINT('Ctrl Pts',(-2.98172586804331,-3.64573168367533, 0.)); #20299=CARTESIAN_POINT('',(-2.97206654854915,-3.56126879693574,0.1)); #20300=CARTESIAN_POINT('',(-2.97206654854915,-3.56126879693574,0.)); #20301=CARTESIAN_POINT('Ctrl Pts',(-2.98172586804331,-3.64573168367533, 0.1)); #20302=CARTESIAN_POINT('Ctrl Pts',(-2.98172586804331,-3.61855080788945, 0.1)); #20303=CARTESIAN_POINT('Ctrl Pts',(-2.97768243197599,-3.57542082317136, 0.1)); #20304=CARTESIAN_POINT('Ctrl Pts',(-2.97206654854915,-3.56126879693574, 0.1)); #20305=CARTESIAN_POINT('Ctrl Pts',(-2.93073364652765,-3.5320662031162,0.)); #20306=CARTESIAN_POINT('Ctrl Pts',(-2.93073364652765,-3.5320662031162,0.1)); #20307=CARTESIAN_POINT('Ctrl Pts',(-2.94623348478572,-3.5320662031162,0.)); #20308=CARTESIAN_POINT('Ctrl Pts',(-2.94623348478572,-3.5320662031162,0.1)); #20309=CARTESIAN_POINT('Ctrl Pts',(-2.96622602978525,-3.54666750002597, 0.)); #20310=CARTESIAN_POINT('Ctrl Pts',(-2.96622602978525,-3.54666750002597, 0.1)); #20311=CARTESIAN_POINT('Ctrl Pts',(-2.97206654854915,-3.56126879693574, 0.)); #20312=CARTESIAN_POINT('Ctrl Pts',(-2.97206654854915,-3.56126879693574, 0.1)); #20313=CARTESIAN_POINT('',(-2.93073364652765,-3.5320662031162,0.)); #20314=CARTESIAN_POINT('Ctrl Pts',(-2.93073364652765,-3.5320662031162,0.)); #20315=CARTESIAN_POINT('Ctrl Pts',(-2.94623348478572,-3.5320662031162,0.)); #20316=CARTESIAN_POINT('Ctrl Pts',(-2.96622602978525,-3.54666750002597, 0.)); #20317=CARTESIAN_POINT('Ctrl Pts',(-2.97206654854915,-3.56126879693574, 0.)); #20318=CARTESIAN_POINT('',(-2.93073364652765,-3.5320662031162,0.1)); #20319=CARTESIAN_POINT('',(-2.93073364652765,-3.5320662031162,0.)); #20320=CARTESIAN_POINT('Ctrl Pts',(-2.97206654854915,-3.56126879693574, 0.1)); #20321=CARTESIAN_POINT('Ctrl Pts',(-2.96622602978525,-3.54666750002597, 0.1)); #20322=CARTESIAN_POINT('Ctrl Pts',(-2.94623348478572,-3.5320662031162,0.1)); #20323=CARTESIAN_POINT('Ctrl Pts',(-2.93073364652765,-3.5320662031162,0.1)); #20324=CARTESIAN_POINT('Ctrl Pts',(-2.89007465051737,-3.56081952626159, 0.)); #20325=CARTESIAN_POINT('Ctrl Pts',(-2.89007465051737,-3.56081952626159, 0.1)); #20326=CARTESIAN_POINT('Ctrl Pts',(-2.89569053394421,-3.54666750002597, 0.)); #20327=CARTESIAN_POINT('Ctrl Pts',(-2.89569053394421,-3.54666750002597, 0.1)); #20328=CARTESIAN_POINT('Ctrl Pts',(-2.91523380826959,-3.5320662031162,0.)); #20329=CARTESIAN_POINT('Ctrl Pts',(-2.91523380826959,-3.5320662031162,0.1)); #20330=CARTESIAN_POINT('Ctrl Pts',(-2.93073364652765,-3.5320662031162,0.)); #20331=CARTESIAN_POINT('Ctrl Pts',(-2.93073364652765,-3.5320662031162,0.1)); #20332=CARTESIAN_POINT('',(-2.89007465051737,-3.56081952626159,0.)); #20333=CARTESIAN_POINT('Ctrl Pts',(-2.89007465051737,-3.56081952626159, 0.)); #20334=CARTESIAN_POINT('Ctrl Pts',(-2.89569053394421,-3.54666750002597, 0.)); #20335=CARTESIAN_POINT('Ctrl Pts',(-2.91523380826959,-3.5320662031162,0.)); #20336=CARTESIAN_POINT('Ctrl Pts',(-2.93073364652765,-3.5320662031162,0.)); #20337=CARTESIAN_POINT('',(-2.89007465051737,-3.56081952626159,0.1)); #20338=CARTESIAN_POINT('',(-2.89007465051737,-3.56081952626159,0.)); #20339=CARTESIAN_POINT('Ctrl Pts',(-2.93073364652765,-3.5320662031162,0.1)); #20340=CARTESIAN_POINT('Ctrl Pts',(-2.91523380826959,-3.5320662031162,0.1)); #20341=CARTESIAN_POINT('Ctrl Pts',(-2.89569053394421,-3.54666750002597, 0.1)); #20342=CARTESIAN_POINT('Ctrl Pts',(-2.89007465051737,-3.56081952626159, 0.1)); #20343=CARTESIAN_POINT('Ctrl Pts',(-2.87996606034907,-3.64550704833825, 0.)); #20344=CARTESIAN_POINT('Ctrl Pts',(-2.87996606034907,-3.64550704833825, 0.1)); #20345=CARTESIAN_POINT('Ctrl Pts',(-2.87996606034907,-3.61697836052993, 0.)); #20346=CARTESIAN_POINT('Ctrl Pts',(-2.87996606034907,-3.61697836052993, 0.1)); #20347=CARTESIAN_POINT('Ctrl Pts',(-2.88445876709054,-3.57497155249721, 0.)); #20348=CARTESIAN_POINT('Ctrl Pts',(-2.88445876709054,-3.57497155249721, 0.1)); #20349=CARTESIAN_POINT('Ctrl Pts',(-2.89007465051737,-3.56081952626159, 0.)); #20350=CARTESIAN_POINT('Ctrl Pts',(-2.89007465051737,-3.56081952626159, 0.1)); #20351=CARTESIAN_POINT('',(-2.87996606034907,-3.64550704833825,0.)); #20352=CARTESIAN_POINT('Ctrl Pts',(-2.87996606034907,-3.64550704833825, 0.)); #20353=CARTESIAN_POINT('Ctrl Pts',(-2.87996606034907,-3.61697836052993, 0.)); #20354=CARTESIAN_POINT('Ctrl Pts',(-2.88445876709054,-3.57497155249721, 0.)); #20355=CARTESIAN_POINT('Ctrl Pts',(-2.89007465051737,-3.56081952626159, 0.)); #20356=CARTESIAN_POINT('',(-2.87996606034907,-3.64550704833825,0.1)); #20357=CARTESIAN_POINT('',(-2.87996606034907,-3.64550704833825,0.)); #20358=CARTESIAN_POINT('Ctrl Pts',(-2.89007465051737,-3.56081952626159, 0.1)); #20359=CARTESIAN_POINT('Ctrl Pts',(-2.88445876709054,-3.57497155249721, 0.1)); #20360=CARTESIAN_POINT('Ctrl Pts',(-2.87996606034907,-3.61697836052993, 0.1)); #20361=CARTESIAN_POINT('Ctrl Pts',(-2.87996606034907,-3.64550704833825, 0.1)); #20362=CARTESIAN_POINT('Ctrl Pts',(-2.8898500151803,-3.72996993507784,0.)); #20363=CARTESIAN_POINT('Ctrl Pts',(-2.8898500151803,-3.72996993507784,0.1)); #20364=CARTESIAN_POINT('Ctrl Pts',(-2.88445876709054,-3.71626717951637, 0.)); #20365=CARTESIAN_POINT('Ctrl Pts',(-2.88445876709054,-3.71626717951637, 0.1)); #20366=CARTESIAN_POINT('Ctrl Pts',(-2.87996606034907,-3.67403573614657, 0.)); #20367=CARTESIAN_POINT('Ctrl Pts',(-2.87996606034907,-3.67403573614657, 0.1)); #20368=CARTESIAN_POINT('Ctrl Pts',(-2.87996606034907,-3.64550704833825, 0.)); #20369=CARTESIAN_POINT('Ctrl Pts',(-2.87996606034907,-3.64550704833825, 0.1)); #20370=CARTESIAN_POINT('Ctrl Pts',(-2.8898500151803,-3.72996993507784,0.)); #20371=CARTESIAN_POINT('Ctrl Pts',(-2.88445876709054,-3.71626717951637, 0.)); #20372=CARTESIAN_POINT('Ctrl Pts',(-2.87996606034907,-3.67403573614657, 0.)); #20373=CARTESIAN_POINT('Ctrl Pts',(-2.87996606034907,-3.64550704833825, 0.)); #20374=CARTESIAN_POINT('Ctrl Pts',(-2.87996606034907,-3.64550704833825, 0.1)); #20375=CARTESIAN_POINT('Ctrl Pts',(-2.87996606034907,-3.67403573614657, 0.1)); #20376=CARTESIAN_POINT('Ctrl Pts',(-2.88445876709054,-3.71626717951637, 0.1)); #20377=CARTESIAN_POINT('Ctrl Pts',(-2.8898500151803,-3.72996993507784,0.1)); #20378=CARTESIAN_POINT('Ctrl Pts',(-3.01946460467164,-3.64573168367533, 0.)); #20379=CARTESIAN_POINT('Ctrl Pts',(-3.01946460467164,-3.64573168367533, 0.1)); #20380=CARTESIAN_POINT('Ctrl Pts',(-3.01946460467164,-3.71873816822417, 0.)); #20381=CARTESIAN_POINT('Ctrl Pts',(-3.01946460467164,-3.71873816822417, 0.1)); #20382=CARTESIAN_POINT('Ctrl Pts',(-2.97655925529062,-3.78994757007643, 0.)); #20383=CARTESIAN_POINT('Ctrl Pts',(-2.97655925529062,-3.78994757007643, 0.1)); #20384=CARTESIAN_POINT('Ctrl Pts',(-2.93073364652765,-3.78994757007643, 0.)); #20385=CARTESIAN_POINT('Ctrl Pts',(-2.93073364652765,-3.78994757007643, 0.1)); #20386=CARTESIAN_POINT('',(-2.93073364652765,-3.78994757007643,0.)); #20387=CARTESIAN_POINT('',(-3.01946460467164,-3.64573168367533,0.)); #20388=CARTESIAN_POINT('Ctrl Pts',(-2.93073364652765,-3.78994757007643, 0.)); #20389=CARTESIAN_POINT('Ctrl Pts',(-2.97655925529062,-3.78994757007643, 0.)); #20390=CARTESIAN_POINT('Ctrl Pts',(-3.01946460467164,-3.71873816822417, 0.)); #20391=CARTESIAN_POINT('Ctrl Pts',(-3.01946460467164,-3.64573168367533, 0.)); #20392=CARTESIAN_POINT('',(-2.93073364652765,-3.78994757007643,0.1)); #20393=CARTESIAN_POINT('',(-2.93073364652765,-3.78994757007643,0.)); #20394=CARTESIAN_POINT('',(-3.01946460467164,-3.64573168367533,0.1)); #20395=CARTESIAN_POINT('Ctrl Pts',(-3.01946460467164,-3.64573168367533, 0.1)); #20396=CARTESIAN_POINT('Ctrl Pts',(-3.01946460467164,-3.71873816822417, 0.1)); #20397=CARTESIAN_POINT('Ctrl Pts',(-2.97655925529062,-3.78994757007643, 0.1)); #20398=CARTESIAN_POINT('Ctrl Pts',(-2.93073364652765,-3.78994757007643, 0.1)); #20399=CARTESIAN_POINT('',(-3.01946460467164,-3.64573168367533,0.)); #20400=CARTESIAN_POINT('Ctrl Pts',(-2.93073364652765,-3.50129116193715, 0.)); #20401=CARTESIAN_POINT('Ctrl Pts',(-2.93073364652765,-3.50129116193715, 0.1)); #20402=CARTESIAN_POINT('Ctrl Pts',(-2.97610998461648,-3.50129116193715, 0.)); #20403=CARTESIAN_POINT('Ctrl Pts',(-2.97610998461648,-3.50129116193715, 0.1)); #20404=CARTESIAN_POINT('Ctrl Pts',(-3.01946460467164,-3.57070348109282, 0.)); #20405=CARTESIAN_POINT('Ctrl Pts',(-3.01946460467164,-3.57070348109282, 0.1)); #20406=CARTESIAN_POINT('Ctrl Pts',(-3.01946460467164,-3.64573168367533, 0.)); #20407=CARTESIAN_POINT('Ctrl Pts',(-3.01946460467164,-3.64573168367533, 0.1)); #20408=CARTESIAN_POINT('',(-2.93073364652765,-3.50129116193715,0.)); #20409=CARTESIAN_POINT('Ctrl Pts',(-3.01946460467164,-3.64573168367533, 0.)); #20410=CARTESIAN_POINT('Ctrl Pts',(-3.01946460467164,-3.57070348109282, 0.)); #20411=CARTESIAN_POINT('Ctrl Pts',(-2.97610998461648,-3.50129116193715, 0.)); #20412=CARTESIAN_POINT('Ctrl Pts',(-2.93073364652765,-3.50129116193715, 0.)); #20413=CARTESIAN_POINT('',(-2.93073364652765,-3.50129116193715,0.1)); #20414=CARTESIAN_POINT('Ctrl Pts',(-2.93073364652765,-3.50129116193715, 0.1)); #20415=CARTESIAN_POINT('Ctrl Pts',(-2.97610998461648,-3.50129116193715, 0.1)); #20416=CARTESIAN_POINT('Ctrl Pts',(-3.01946460467164,-3.57070348109282, 0.1)); #20417=CARTESIAN_POINT('Ctrl Pts',(-3.01946460467164,-3.64573168367533, 0.1)); #20418=CARTESIAN_POINT('',(-2.93073364652765,-3.50129116193715,0.)); #20419=CARTESIAN_POINT('Ctrl Pts',(-2.84222732372074,-3.64550704833825, 0.)); #20420=CARTESIAN_POINT('Ctrl Pts',(-2.84222732372074,-3.64550704833825, 0.1)); #20421=CARTESIAN_POINT('Ctrl Pts',(-2.84222732372074,-3.57317446980063, 0.)); #20422=CARTESIAN_POINT('Ctrl Pts',(-2.84222732372074,-3.57317446980063, 0.1)); #20423=CARTESIAN_POINT('Ctrl Pts',(-2.88513267310176,-3.50129116193715, 0.)); #20424=CARTESIAN_POINT('Ctrl Pts',(-2.88513267310176,-3.50129116193715, 0.1)); #20425=CARTESIAN_POINT('Ctrl Pts',(-2.93073364652765,-3.50129116193715, 0.)); #20426=CARTESIAN_POINT('Ctrl Pts',(-2.93073364652765,-3.50129116193715, 0.1)); #20427=CARTESIAN_POINT('',(-2.84222732372074,-3.64550704833825,0.)); #20428=CARTESIAN_POINT('Ctrl Pts',(-2.93073364652765,-3.50129116193715, 0.)); #20429=CARTESIAN_POINT('Ctrl Pts',(-2.88513267310176,-3.50129116193715, 0.)); #20430=CARTESIAN_POINT('Ctrl Pts',(-2.84222732372074,-3.57317446980063, 0.)); #20431=CARTESIAN_POINT('Ctrl Pts',(-2.84222732372074,-3.64550704833825, 0.)); #20432=CARTESIAN_POINT('',(-2.84222732372074,-3.64550704833825,0.1)); #20433=CARTESIAN_POINT('Ctrl Pts',(-2.84222732372074,-3.64550704833825, 0.1)); #20434=CARTESIAN_POINT('Ctrl Pts',(-2.84222732372074,-3.57317446980063, 0.1)); #20435=CARTESIAN_POINT('Ctrl Pts',(-2.88513267310176,-3.50129116193715, 0.1)); #20436=CARTESIAN_POINT('Ctrl Pts',(-2.93073364652765,-3.50129116193715, 0.1)); #20437=CARTESIAN_POINT('',(-2.84222732372074,-3.64550704833825,0.)); #20438=CARTESIAN_POINT('Ctrl Pts',(-2.93073364652765,-3.78994757007643, 0.)); #20439=CARTESIAN_POINT('Ctrl Pts',(-2.93073364652765,-3.78994757007643, 0.1)); #20440=CARTESIAN_POINT('Ctrl Pts',(-2.88558194377591,-3.78994757007643, 0.)); #20441=CARTESIAN_POINT('Ctrl Pts',(-2.88558194377591,-3.78994757007643, 0.1)); #20442=CARTESIAN_POINT('Ctrl Pts',(-2.84222732372074,-3.72008598024661, 0.)); #20443=CARTESIAN_POINT('Ctrl Pts',(-2.84222732372074,-3.72008598024661, 0.1)); #20444=CARTESIAN_POINT('Ctrl Pts',(-2.84222732372074,-3.64550704833825, 0.)); #20445=CARTESIAN_POINT('Ctrl Pts',(-2.84222732372074,-3.64550704833825, 0.1)); #20446=CARTESIAN_POINT('Ctrl Pts',(-2.84222732372074,-3.64550704833825, 0.)); #20447=CARTESIAN_POINT('Ctrl Pts',(-2.84222732372074,-3.72008598024661, 0.)); #20448=CARTESIAN_POINT('Ctrl Pts',(-2.88558194377591,-3.78994757007643, 0.)); #20449=CARTESIAN_POINT('Ctrl Pts',(-2.93073364652765,-3.78994757007643, 0.)); #20450=CARTESIAN_POINT('Ctrl Pts',(-2.93073364652765,-3.78994757007643, 0.1)); #20451=CARTESIAN_POINT('Ctrl Pts',(-2.88558194377591,-3.78994757007643, 0.1)); #20452=CARTESIAN_POINT('Ctrl Pts',(-2.84222732372074,-3.72008598024661, 0.1)); #20453=CARTESIAN_POINT('Ctrl Pts',(-2.84222732372074,-3.64550704833825, 0.1)); #20454=CARTESIAN_POINT('Origin',(-2.93088825260564,-3.64562853590339,0.)); #20455=CARTESIAN_POINT('Origin',(-2.93088825260564,-3.64562853590339,0.1)); #20456=CARTESIAN_POINT('Origin',(-3.43503997342718,-3.54509505266646,0.)); #20457=CARTESIAN_POINT('',(-3.31238907938512,-3.78410705131253,0.)); #20458=CARTESIAN_POINT('',(-3.43503997342718,-3.54509505266646,0.)); #20459=CARTESIAN_POINT('',(-3.31238907938512,-3.78410705131253,0.)); #20460=CARTESIAN_POINT('',(-3.31238907938512,-3.78410705131253,0.1)); #20461=CARTESIAN_POINT('',(-3.31238907938512,-3.78410705131253,0.)); #20462=CARTESIAN_POINT('',(-3.43503997342718,-3.54509505266646,0.1)); #20463=CARTESIAN_POINT('',(-3.31238907938512,-3.78410705131253,0.1)); #20464=CARTESIAN_POINT('',(-3.43503997342718,-3.54509505266646,0.)); #20465=CARTESIAN_POINT('Origin',(-3.43503997342718,-3.78410705131253,0.)); #20466=CARTESIAN_POINT('',(-3.43503997342718,-3.78410705131253,0.)); #20467=CARTESIAN_POINT('',(-3.43503997342718,-3.54509505266646,0.)); #20468=CARTESIAN_POINT('',(-3.43503997342718,-3.78410705131253,0.1)); #20469=CARTESIAN_POINT('',(-3.43503997342718,-3.54509505266646,0.1)); #20470=CARTESIAN_POINT('',(-3.43503997342718,-3.78410705131253,0.)); #20471=CARTESIAN_POINT('Origin',(-3.46940917999941,-3.78410705131253,0.)); #20472=CARTESIAN_POINT('',(-3.46940917999941,-3.78410705131253,0.)); #20473=CARTESIAN_POINT('',(-3.43503997342718,-3.78410705131253,0.)); #20474=CARTESIAN_POINT('',(-3.46940917999941,-3.78410705131253,0.1)); #20475=CARTESIAN_POINT('',(-3.43503997342718,-3.78410705131253,0.1)); #20476=CARTESIAN_POINT('',(-3.46940917999941,-3.78410705131253,0.)); #20477=CARTESIAN_POINT('Origin',(-3.46940917999941,-3.50690704536398,0.)); #20478=CARTESIAN_POINT('',(-3.46940917999941,-3.50690704536398,0.)); #20479=CARTESIAN_POINT('',(-3.46940917999941,-3.78410705131253,0.)); #20480=CARTESIAN_POINT('',(-3.46940917999941,-3.50690704536398,0.1)); #20481=CARTESIAN_POINT('',(-3.46940917999941,-3.78410705131253,0.1)); #20482=CARTESIAN_POINT('',(-3.46940917999941,-3.50690704536398,0.)); #20483=CARTESIAN_POINT('Origin',(-3.41706914646131,-3.50690704536398,0.)); #20484=CARTESIAN_POINT('',(-3.41706914646131,-3.50690704536398,0.)); #20485=CARTESIAN_POINT('',(-3.46940917999941,-3.50690704536398,0.)); #20486=CARTESIAN_POINT('',(-3.41706914646131,-3.50690704536398,0.1)); #20487=CARTESIAN_POINT('',(-3.46940917999941,-3.50690704536398,0.1)); #20488=CARTESIAN_POINT('',(-3.41706914646131,-3.50690704536398,0.)); #20489=CARTESIAN_POINT('Origin',(-3.30542538393584,-3.72637576968467,0.)); #20490=CARTESIAN_POINT('',(-3.30542538393584,-3.72637576968467,0.)); #20491=CARTESIAN_POINT('',(-3.41706914646131,-3.50690704536398,0.)); #20492=CARTESIAN_POINT('',(-3.30542538393584,-3.72637576968467,0.1)); #20493=CARTESIAN_POINT('',(-3.41706914646131,-3.50690704536398,0.1)); #20494=CARTESIAN_POINT('',(-3.30542538393584,-3.72637576968467,0.)); #20495=CARTESIAN_POINT('Origin',(-3.30542538393584,-3.50690704536398,0.)); #20496=CARTESIAN_POINT('',(-3.30542538393584,-3.50690704536398,0.)); #20497=CARTESIAN_POINT('',(-3.30542538393584,-3.72637576968467,0.)); #20498=CARTESIAN_POINT('',(-3.30542538393584,-3.50690704536398,0.1)); #20499=CARTESIAN_POINT('',(-3.30542538393584,-3.72637576968467,0.1)); #20500=CARTESIAN_POINT('',(-3.30542538393584,-3.50690704536398,0.)); #20501=CARTESIAN_POINT('Origin',(-3.27105617736362,-3.50690704536398,0.)); #20502=CARTESIAN_POINT('',(-3.27105617736362,-3.50690704536398,0.)); #20503=CARTESIAN_POINT('',(-3.30542538393584,-3.50690704536398,0.)); #20504=CARTESIAN_POINT('',(-3.27105617736362,-3.50690704536398,0.1)); #20505=CARTESIAN_POINT('',(-3.30542538393584,-3.50690704536398,0.1)); #20506=CARTESIAN_POINT('',(-3.27105617736362,-3.50690704536398,0.)); #20507=CARTESIAN_POINT('Origin',(-3.27105617736362,-3.78410705131253,0.)); #20508=CARTESIAN_POINT('',(-3.27105617736362,-3.78410705131253,0.)); #20509=CARTESIAN_POINT('',(-3.27105617736362,-3.50690704536398,0.)); #20510=CARTESIAN_POINT('',(-3.27105617736362,-3.78410705131253,0.1)); #20511=CARTESIAN_POINT('',(-3.27105617736362,-3.50690704536398,0.1)); #20512=CARTESIAN_POINT('',(-3.27105617736362,-3.78410705131253,0.)); #20513=CARTESIAN_POINT('Origin',(-3.31238907938512,-3.78410705131253,0.)); #20514=CARTESIAN_POINT('',(-3.27105617736362,-3.78410705131253,0.)); #20515=CARTESIAN_POINT('',(-3.27105617736362,-3.78410705131253,0.1)); #20516=CARTESIAN_POINT('Origin',(-3.37056727936857,-3.6423859556307,0.)); #20517=CARTESIAN_POINT('Origin',(-3.37056727936857,-3.6423859556307,0.1)); #20518=CARTESIAN_POINT('Origin',(-2.79817601353867,-2.62272904661718,0.)); #20519=CARTESIAN_POINT('',(-2.70739201012761,-2.58079737929212,0.1)); #20520=CARTESIAN_POINT('',(-2.79817601353867,-2.72272904661718,0.1)); #20521=CARTESIAN_POINT('Origin',(-2.79817601353867,-2.62272904661718,0.1)); #20522=CARTESIAN_POINT('',(-2.79817601353867,-2.72272904661718,0.)); #20523=CARTESIAN_POINT('',(-2.79817601353867,-2.72272904661718,0.)); #20524=CARTESIAN_POINT('',(-2.70739201012761,-2.58079737929212,0.)); #20525=CARTESIAN_POINT('Origin',(-2.79817601353867,-2.62272904661718,0.)); #20526=CARTESIAN_POINT('',(-2.70739201012761,-2.58079737929212,0.)); #20527=CARTESIAN_POINT('Origin',(-2.57142265701232,-2.32061652398579,0.)); #20528=CARTESIAN_POINT('',(-3.02192570682989,-2.72272904661718,0.)); #20529=CARTESIAN_POINT('',(-3.02192570682989,-2.72272904661718,0.)); #20530=CARTESIAN_POINT('',(-2.83276091923634,-2.08267828351868,0.)); #20531=CARTESIAN_POINT('',(-2.83276091923634,-2.08267828351868,0.)); #20532=CARTESIAN_POINT('',(-1.93099850208071,-2.08267828351868,0.)); #20533=CARTESIAN_POINT('',(-1.93099850208071,-2.08267828351868,0.)); #20534=CARTESIAN_POINT('',(-1.98234742184673,-2.2564205306812,0.)); #20535=CARTESIAN_POINT('',(-1.98234742184673,-2.2564205306812,0.)); #20536=CARTESIAN_POINT('',(-2.70087649410742,-2.2564205306812,0.)); #20537=CARTESIAN_POINT('',(-2.76767064731308,-2.2564205306812,0.)); #20538=CARTESIAN_POINT('',(-2.79166049751848,-2.39835219800626,0.)); #20539=CARTESIAN_POINT('Origin',(-2.70087649410742,-2.3564205306812,0.)); #20540=CARTESIAN_POINT('',(-2.64183606157335,-2.72272904661718,0.)); #20541=CARTESIAN_POINT('Origin',(-3.02192570682989,-2.72272904661718,0.)); #20542=CARTESIAN_POINT('',(-3.02192570682989,-2.72272904661718,0.1)); #20543=CARTESIAN_POINT('',(-3.02192570682989,-2.72272904661718,0.1)); #20544=CARTESIAN_POINT('',(-3.02192570682989,-2.72272904661718,0.)); #20545=CARTESIAN_POINT('Origin',(-2.70087649410742,-2.3564205306812,0.)); #20546=CARTESIAN_POINT('',(-2.70087649410742,-2.2564205306812,0.1)); #20547=CARTESIAN_POINT('',(-2.70087649410742,-2.2564205306812,0.)); #20548=CARTESIAN_POINT('',(-2.79166049751848,-2.39835219800626,0.1)); #20549=CARTESIAN_POINT('Origin',(-2.70087649410742,-2.3564205306812,0.1)); #20550=CARTESIAN_POINT('',(-2.79166049751848,-2.39835219800626,0.)); #20551=CARTESIAN_POINT('Origin',(-2.64183606157335,-2.72272904661718,0.)); #20552=CARTESIAN_POINT('',(-2.64183606157335,-2.72272904661718,0.1)); #20553=CARTESIAN_POINT('Origin',(-1.98234742184673,-2.2564205306812,0.)); #20554=CARTESIAN_POINT('',(-1.93099850208071,-2.08267828351868,0.1)); #20555=CARTESIAN_POINT('',(-1.93099850208071,-2.08267828351868,0.)); #20556=CARTESIAN_POINT('',(-1.98234742184673,-2.2564205306812,0.1)); #20557=CARTESIAN_POINT('',(-1.98234742184673,-2.2564205306812,0.1)); #20558=CARTESIAN_POINT('',(-1.98234742184673,-2.2564205306812,0.)); #20559=CARTESIAN_POINT('Origin',(-2.76767064731308,-2.2564205306812,0.)); #20560=CARTESIAN_POINT('',(-2.76767064731308,-2.2564205306812,0.1)); #20561=CARTESIAN_POINT('Origin',(-2.83276091923634,-2.08267828351868,0.)); #20562=CARTESIAN_POINT('',(-2.83276091923634,-2.08267828351868,0.1)); #20563=CARTESIAN_POINT('',(-2.83276091923634,-2.08267828351868,0.1)); #20564=CARTESIAN_POINT('',(-2.83276091923634,-2.08267828351868,0.)); #20565=CARTESIAN_POINT('Origin',(-1.93099850208071,-2.08267828351868,0.)); #20566=CARTESIAN_POINT('',(-1.93099850208071,-2.08267828351868,0.1)); #20567=CARTESIAN_POINT('Origin',(-2.57142265701232,-2.32061652398579,0.1)); #20568=CARTESIAN_POINT('Origin',(-5.011613990329,-4.59952233529249,0.)); #20569=CARTESIAN_POINT('',(-4.88190687980421,-4.59952233529249,0.1)); #20570=CARTESIAN_POINT('Origin',(-5.011613990329,-4.59952233529249,0.1)); #20571=CARTESIAN_POINT('',(-4.88190687980421,-4.59952233529249,0.)); #20572=CARTESIAN_POINT('Origin',(-5.011613990329,-4.59952233529249,0.)); #20573=CARTESIAN_POINT('Origin',(-5.011613990329,-4.59952233529249,0.)); #20574=CARTESIAN_POINT('Origin',(-5.011613990329,-4.59952233529249,0.1)); #20575=CARTESIAN_POINT('Origin',(-2.33944014397404,-2.84286710788605,0.)); #20576=CARTESIAN_POINT('',(-2.33944014397404,-2.84286710788605,0.)); #20577=CARTESIAN_POINT('',(-2.1556696778423,-2.84286710788605,0.)); #20578=CARTESIAN_POINT('',(-2.33944014397404,-2.84286710788605,0.)); #20579=CARTESIAN_POINT('',(-2.1556696778423,-2.84286710788605,0.1)); #20580=CARTESIAN_POINT('',(-2.1556696778423,-2.84286710788605,0.)); #20581=CARTESIAN_POINT('',(-2.33944014397404,-2.84286710788605,0.1)); #20582=CARTESIAN_POINT('',(-2.33944014397404,-2.84286710788605,0.1)); #20583=CARTESIAN_POINT('',(-2.33944014397404,-2.84286710788605,0.)); #20584=CARTESIAN_POINT('Origin',(-2.19803084278235,-2.36439998782435,0.)); #20585=CARTESIAN_POINT('',(-2.19803084278235,-2.36439998782435,0.)); #20586=CARTESIAN_POINT('',(-2.19803084278235,-2.36439998782435,0.)); #20587=CARTESIAN_POINT('',(-2.19803084278235,-2.36439998782435,0.1)); #20588=CARTESIAN_POINT('',(-2.19803084278235,-2.36439998782435,0.1)); #20589=CARTESIAN_POINT('',(-2.19803084278235,-2.36439998782435,0.)); #20590=CARTESIAN_POINT('Origin',(-2.01426037665061,-2.36439998782435,0.)); #20591=CARTESIAN_POINT('',(-2.01426037665061,-2.36439998782435,0.)); #20592=CARTESIAN_POINT('',(-2.01426037665061,-2.36439998782435,0.)); #20593=CARTESIAN_POINT('',(-2.01426037665061,-2.36439998782435,0.1)); #20594=CARTESIAN_POINT('',(-2.01426037665061,-2.36439998782435,0.1)); #20595=CARTESIAN_POINT('',(-2.01426037665061,-2.36439998782435,0.)); #20596=CARTESIAN_POINT('Origin',(-2.1556696778423,-2.84286710788605,0.)); #20597=CARTESIAN_POINT('',(-2.1556696778423,-2.84286710788605,0.)); #20598=CARTESIAN_POINT('',(-2.1556696778423,-2.84286710788605,0.1)); #20599=CARTESIAN_POINT('Origin',(-2.17685026031232,-2.6036335478552,0.1)); #20600=CARTESIAN_POINT('Origin',(-2.17685026031232,-2.6036335478552,0.)); #20601=CARTESIAN_POINT('Origin',(-2.66053394105791,-2.7343785366103,0.)); #20602=CARTESIAN_POINT('',(-2.56497732336613,-2.76385620299196,0.)); #20603=CARTESIAN_POINT('',(-2.63539164124895,-2.83116626703268,0.)); #20604=CARTESIAN_POINT('Origin',(-2.66053394105791,-2.7343785366103,0.)); #20605=CARTESIAN_POINT('',(-2.63539164124895,-2.83116626703268,0.1)); #20606=CARTESIAN_POINT('',(-2.63539164124895,-2.83116626703268,0.)); #20607=CARTESIAN_POINT('',(-2.56497732336613,-2.76385620299196,0.1)); #20608=CARTESIAN_POINT('Origin',(-2.66053394105791,-2.7343785366103,0.1)); #20609=CARTESIAN_POINT('',(-2.56497732336613,-2.76385620299196,0.)); #20610=CARTESIAN_POINT('Origin',(-2.58141610884164,-2.81714518179584,0.)); #20611=CARTESIAN_POINT('',(-2.66542051977609,-2.83896679157811,0.)); #20612=CARTESIAN_POINT('',(-2.58141610884164,-2.81714518179584,0.)); #20613=CARTESIAN_POINT('',(-2.66542051977609,-2.83896679157811,0.1)); #20614=CARTESIAN_POINT('',(-2.66542051977609,-2.83896679157811,0.)); #20615=CARTESIAN_POINT('',(-2.58141610884164,-2.81714518179584,0.1)); #20616=CARTESIAN_POINT('Origin',(-2.65914329297358,-2.72987052618583,0.)); #20617=CARTESIAN_POINT('',(-2.56835928956252,-2.68793885886077,0.)); #20618=CARTESIAN_POINT('',(-2.56358667528181,-2.75934819256749,0.)); #20619=CARTESIAN_POINT('Origin',(-2.65914329297358,-2.72987052618583,0.)); #20620=CARTESIAN_POINT('',(-2.56358667528181,-2.75934819256749,0.1)); #20621=CARTESIAN_POINT('',(-2.56358667528181,-2.75934819256749,0.)); #20622=CARTESIAN_POINT('',(-2.56835928956252,-2.68793885886077,0.1)); #20623=CARTESIAN_POINT('Origin',(-2.65914329297358,-2.72987052618583,0.1)); #20624=CARTESIAN_POINT('',(-2.56835928956252,-2.68793885886077,0.)); #20625=CARTESIAN_POINT('Origin',(-2.55229026281369,-2.72272904661718,0.)); #20626=CARTESIAN_POINT('',(-2.55229026281369,-2.72272904661718,0.1)); #20627=CARTESIAN_POINT('',(-2.55229026281369,-2.72272904661718,0.)); #20628=CARTESIAN_POINT('Origin',(-2.56145672521267,-2.46439998782436,0.)); #20629=CARTESIAN_POINT('',(-2.65224072862374,-2.50633165514942,0.1)); #20630=CARTESIAN_POINT('',(-2.56145672521267,-2.36439998782436,0.1)); #20631=CARTESIAN_POINT('Origin',(-2.56145672521267,-2.46439998782436,0.1)); #20632=CARTESIAN_POINT('',(-2.56145672521267,-2.36439998782436,0.)); #20633=CARTESIAN_POINT('',(-2.56145672521267,-2.36439998782436,0.)); #20634=CARTESIAN_POINT('',(-2.65224072862374,-2.50633165514942,0.)); #20635=CARTESIAN_POINT('Origin',(-2.56145672521267,-2.46439998782436,0.)); #20636=CARTESIAN_POINT('',(-2.65224072862374,-2.50633165514942,0.)); #20637=CARTESIAN_POINT('Origin',(-2.51482954023886,-2.58274002449879,0.1)); #20638=CARTESIAN_POINT('',(-2.71779667717799,-2.36439998782436,0.1)); #20639=CARTESIAN_POINT('',(-2.44476119922767,-2.83896679157811,0.1)); #20640=CARTESIAN_POINT('',(-2.66542051977609,-2.83896679157811,0.1)); #20641=CARTESIAN_POINT('',(-2.30450462302042,-2.36439998782436,0.1)); #20642=CARTESIAN_POINT('',(-2.44476119922767,-2.83896679157811,0.1)); #20643=CARTESIAN_POINT('',(-2.30450462302042,-2.36439998782436,0.1)); #20644=CARTESIAN_POINT('Origin',(-2.71779667717799,-2.36439998782436,0.)); #20645=CARTESIAN_POINT('',(-2.71779667717799,-2.36439998782436,0.)); #20646=CARTESIAN_POINT('Origin',(-2.30450462302042,-2.36439998782436,0.)); #20647=CARTESIAN_POINT('',(-2.30450462302042,-2.36439998782436,0.)); #20648=CARTESIAN_POINT('',(-2.30450462302042,-2.36439998782436,0.)); #20649=CARTESIAN_POINT('',(-2.30450462302042,-2.36439998782436,0.)); #20650=CARTESIAN_POINT('Origin',(-2.44476119922767,-2.83896679157811,0.)); #20651=CARTESIAN_POINT('',(-2.44476119922767,-2.83896679157811,0.)); #20652=CARTESIAN_POINT('',(-2.44476119922767,-2.83896679157811,0.)); #20653=CARTESIAN_POINT('',(-2.44476119922767,-2.83896679157811,0.)); #20654=CARTESIAN_POINT('Origin',(-2.66542051977609,-2.83896679157811,0.)); #20655=CARTESIAN_POINT('',(-2.66542051977609,-2.83896679157811,0.)); #20656=CARTESIAN_POINT('Origin',(-2.51482954023886,-2.58274002449879,0.)); #20657=CARTESIAN_POINT('Origin',(-3.63114662269224,-3.78410705131253,0.)); #20658=CARTESIAN_POINT('',(-3.59138616803025,-3.78410705131253,0.)); #20659=CARTESIAN_POINT('',(-3.63114662269224,-3.78410705131253,0.)); #20660=CARTESIAN_POINT('',(-3.59138616803025,-3.78410705131253,0.)); #20661=CARTESIAN_POINT('',(-3.59138616803025,-3.78410705131253,0.1)); #20662=CARTESIAN_POINT('',(-3.59138616803025,-3.78410705131253,0.)); #20663=CARTESIAN_POINT('',(-3.63114662269224,-3.78410705131253,0.1)); #20664=CARTESIAN_POINT('',(-3.59138616803025,-3.78410705131253,0.1)); #20665=CARTESIAN_POINT('',(-3.63114662269224,-3.78410705131253,0.)); #20666=CARTESIAN_POINT('Origin',(-3.72661664094842,-3.50690704536398,0.)); #20667=CARTESIAN_POINT('',(-3.72661664094842,-3.50690704536398,0.)); #20668=CARTESIAN_POINT('',(-3.63114662269224,-3.78410705131253,0.)); #20669=CARTESIAN_POINT('',(-3.72661664094842,-3.50690704536398,0.1)); #20670=CARTESIAN_POINT('',(-3.63114662269224,-3.78410705131253,0.1)); #20671=CARTESIAN_POINT('',(-3.72661664094842,-3.50690704536398,0.)); #20672=CARTESIAN_POINT('Origin',(-3.68708082162351,-3.50690704536398,0.)); #20673=CARTESIAN_POINT('',(-3.68708082162351,-3.50690704536398,0.)); #20674=CARTESIAN_POINT('',(-3.72661664094842,-3.50690704536398,0.)); #20675=CARTESIAN_POINT('',(-3.68708082162351,-3.50690704536398,0.1)); #20676=CARTESIAN_POINT('',(-3.72661664094842,-3.50690704536398,0.1)); #20677=CARTESIAN_POINT('',(-3.68708082162351,-3.50690704536398,0.)); #20678=CARTESIAN_POINT('Origin',(-3.61025553634441,-3.73715826586419,0.)); #20679=CARTESIAN_POINT('',(-3.61025553634441,-3.73715826586419,0.)); #20680=CARTESIAN_POINT('',(-3.68708082162351,-3.50690704536398,0.)); #20681=CARTESIAN_POINT('',(-3.61025553634441,-3.73715826586419,0.1)); #20682=CARTESIAN_POINT('',(-3.68708082162351,-3.50690704536398,0.1)); #20683=CARTESIAN_POINT('',(-3.61025553634441,-3.73715826586419,0.)); #20684=CARTESIAN_POINT('Origin',(-3.53343025106532,-3.50690704536398,0.)); #20685=CARTESIAN_POINT('',(-3.53343025106532,-3.50690704536398,0.)); #20686=CARTESIAN_POINT('',(-3.61025553634441,-3.73715826586419,0.)); #20687=CARTESIAN_POINT('',(-3.53343025106532,-3.50690704536398,0.1)); #20688=CARTESIAN_POINT('',(-3.61025553634441,-3.73715826586419,0.1)); #20689=CARTESIAN_POINT('',(-3.53343025106532,-3.50690704536398,0.)); #20690=CARTESIAN_POINT('Origin',(-3.49591614977407,-3.50690704536398,0.)); #20691=CARTESIAN_POINT('',(-3.49591614977407,-3.50690704536398,0.)); #20692=CARTESIAN_POINT('',(-3.53343025106532,-3.50690704536398,0.)); #20693=CARTESIAN_POINT('',(-3.49591614977407,-3.50690704536398,0.1)); #20694=CARTESIAN_POINT('',(-3.53343025106532,-3.50690704536398,0.1)); #20695=CARTESIAN_POINT('',(-3.49591614977407,-3.50690704536398,0.)); #20696=CARTESIAN_POINT('Origin',(-3.59138616803025,-3.78410705131253,0.)); #20697=CARTESIAN_POINT('',(-3.49591614977407,-3.50690704536398,0.)); #20698=CARTESIAN_POINT('',(-3.49591614977407,-3.50690704536398,0.1)); #20699=CARTESIAN_POINT('Origin',(-3.61098421143933,-3.63157151217481,0.)); #20700=CARTESIAN_POINT('Origin',(-3.61098421143933,-3.63157151217481,0.1)); #20701=CARTESIAN_POINT('Origin',(-3.20815828781327,-3.78410705131253,0.)); #20702=CARTESIAN_POINT('',(-3.16862246848836,-3.78410705131253,0.)); #20703=CARTESIAN_POINT('',(-3.20815828781327,-3.78410705131253,0.)); #20704=CARTESIAN_POINT('',(-3.16862246848836,-3.78410705131253,0.)); #20705=CARTESIAN_POINT('',(-3.16862246848836,-3.78410705131253,0.1)); #20706=CARTESIAN_POINT('',(-3.16862246848836,-3.78410705131253,0.)); #20707=CARTESIAN_POINT('',(-3.20815828781327,-3.78410705131253,0.1)); #20708=CARTESIAN_POINT('',(-3.16862246848836,-3.78410705131253,0.1)); #20709=CARTESIAN_POINT('',(-3.20815828781327,-3.78410705131253,0.)); #20710=CARTESIAN_POINT('Origin',(-3.08146395770389,-3.53947916923962,0.)); #20711=CARTESIAN_POINT('',(-3.08146395770389,-3.53947916923962,0.)); #20712=CARTESIAN_POINT('',(-3.20815828781327,-3.78410705131253,0.)); #20713=CARTESIAN_POINT('',(-3.08146395770389,-3.53947916923962,0.1)); #20714=CARTESIAN_POINT('',(-3.20815828781327,-3.78410705131253,0.1)); #20715=CARTESIAN_POINT('',(-3.08146395770389,-3.53947916923962,0.)); #20716=CARTESIAN_POINT('Origin',(-3.22455666741963,-3.53947916923962,0.)); #20717=CARTESIAN_POINT('',(-3.22455666741963,-3.53947916923962,0.)); #20718=CARTESIAN_POINT('',(-3.08146395770389,-3.53947916923962,0.)); #20719=CARTESIAN_POINT('',(-3.22455666741963,-3.53947916923962,0.1)); #20720=CARTESIAN_POINT('',(-3.08146395770389,-3.53947916923962,0.1)); #20721=CARTESIAN_POINT('',(-3.22455666741963,-3.53947916923962,0.)); #20722=CARTESIAN_POINT('Origin',(-3.22455666741963,-3.50690704536398,0.)); #20723=CARTESIAN_POINT('',(-3.22455666741963,-3.50690704536398,0.)); #20724=CARTESIAN_POINT('',(-3.22455666741963,-3.53947916923962,0.)); #20725=CARTESIAN_POINT('',(-3.22455666741963,-3.50690704536398,0.1)); #20726=CARTESIAN_POINT('',(-3.22455666741963,-3.53947916923962,0.1)); #20727=CARTESIAN_POINT('',(-3.22455666741963,-3.50690704536398,0.)); #20728=CARTESIAN_POINT('Origin',(-3.04866719849118,-3.50690704536398,0.)); #20729=CARTESIAN_POINT('',(-3.04866719849118,-3.50690704536398,0.)); #20730=CARTESIAN_POINT('',(-3.22455666741963,-3.50690704536398,0.)); #20731=CARTESIAN_POINT('',(-3.04866719849118,-3.50690704536398,0.1)); #20732=CARTESIAN_POINT('',(-3.22455666741963,-3.50690704536398,0.1)); #20733=CARTESIAN_POINT('',(-3.04866719849118,-3.50690704536398,0.)); #20734=CARTESIAN_POINT('Origin',(-3.04866719849118,-3.54846458272256,0.)); #20735=CARTESIAN_POINT('',(-3.04866719849118,-3.54846458272256,0.)); #20736=CARTESIAN_POINT('',(-3.04866719849118,-3.50690704536398,0.)); #20737=CARTESIAN_POINT('',(-3.04866719849118,-3.54846458272256,0.1)); #20738=CARTESIAN_POINT('',(-3.04866719849118,-3.50690704536398,0.1)); #20739=CARTESIAN_POINT('',(-3.04866719849118,-3.54846458272256,0.)); #20740=CARTESIAN_POINT('Origin',(-3.16862246848836,-3.78410705131253,0.)); #20741=CARTESIAN_POINT('',(-3.04866719849118,-3.54846458272256,0.)); #20742=CARTESIAN_POINT('',(-3.04866719849118,-3.54846458272256,0.1)); #20743=CARTESIAN_POINT('Origin',(-3.13503584384359,-3.61160671681249,0.)); #20744=CARTESIAN_POINT('Origin',(-3.13503584384359,-3.61160671681249,0.1)); #20745=CARTESIAN_POINT('Origin',(-2.34016738327881,-3.67515891283194,0.)); #20746=CARTESIAN_POINT('',(-2.34016738327881,-3.67515891283194,0.)); #20747=CARTESIAN_POINT('',(-2.25458131985385,-3.67515891283194,0.)); #20748=CARTESIAN_POINT('',(-2.31842315615741,-3.67515891283194,0.)); #20749=CARTESIAN_POINT('',(-2.34016738327881,-3.67515891283194,0.1)); #20750=CARTESIAN_POINT('',(-2.34016738327881,-3.67515891283194,0.)); #20751=CARTESIAN_POINT('',(-2.25458131985385,-3.67515891283194,0.1)); #20752=CARTESIAN_POINT('',(-2.31842315615741,-3.67515891283194,0.1)); #20753=CARTESIAN_POINT('',(-2.25458131985385,-3.67515891283194,0.)); #20754=CARTESIAN_POINT('Origin',(-2.29748666923487,-3.54464578199231,0.)); #20755=CARTESIAN_POINT('',(-2.29748666923487,-3.54464578199231,0.)); #20756=CARTESIAN_POINT('',(-2.31643564884066,-3.60258976699739,0.)); #20757=CARTESIAN_POINT('',(-2.29748666923487,-3.54464578199231,0.1)); #20758=CARTESIAN_POINT('',(-2.29748666923487,-3.54464578199231,0.)); #20759=CARTESIAN_POINT('',(-2.31643564884066,-3.60258976699739,0.1)); #20760=CARTESIAN_POINT('Origin',(-2.25458131985385,-3.67515891283194,0.)); #20761=CARTESIAN_POINT('',(-2.25692611237899,-3.66802632405128,0.)); #20762=CARTESIAN_POINT('',(-2.25692611237899,-3.66802632405128,0.1)); #20763=CARTESIAN_POINT('Origin',(-2.27389995884216,-3.50690704536398,0.)); #20764=CARTESIAN_POINT('',(-2.31927629693099,-3.50690704536398,0.)); #20765=CARTESIAN_POINT('',(-2.27389995884216,-3.50690704536398,0.)); #20766=CARTESIAN_POINT('',(-2.31927629693099,-3.50690704536398,0.)); #20767=CARTESIAN_POINT('',(-2.31927629693099,-3.50690704536398,0.1)); #20768=CARTESIAN_POINT('',(-2.31927629693099,-3.50690704536398,0.)); #20769=CARTESIAN_POINT('',(-2.27389995884216,-3.50690704536398,0.1)); #20770=CARTESIAN_POINT('',(-2.31927629693099,-3.50690704536398,0.1)); #20771=CARTESIAN_POINT('',(-2.27389995884216,-3.50690704536398,0.)); #20772=CARTESIAN_POINT('Origin',(-2.18045165861964,-3.78410705131253,0.)); #20773=CARTESIAN_POINT('',(-2.18045165861964,-3.78410705131253,0.)); #20774=CARTESIAN_POINT('',(-2.27389995884216,-3.50690704536398,0.)); #20775=CARTESIAN_POINT('',(-2.18045165861964,-3.78410705131253,0.1)); #20776=CARTESIAN_POINT('',(-2.27389995884216,-3.50690704536398,0.1)); #20777=CARTESIAN_POINT('',(-2.18045165861964,-3.78410705131253,0.)); #20778=CARTESIAN_POINT('Origin',(-2.21931357193333,-3.78410705131253,0.)); #20779=CARTESIAN_POINT('',(-2.21931357193333,-3.78410705131253,0.)); #20780=CARTESIAN_POINT('',(-2.18045165861964,-3.78410705131253,0.)); #20781=CARTESIAN_POINT('',(-2.21931357193333,-3.78410705131253,0.1)); #20782=CARTESIAN_POINT('',(-2.18045165861964,-3.78410705131253,0.1)); #20783=CARTESIAN_POINT('',(-2.21931357193333,-3.78410705131253,0.)); #20784=CARTESIAN_POINT('Origin',(-2.24447272968555,-3.70660786002221,0.)); #20785=CARTESIAN_POINT('',(-2.24447272968555,-3.70660786002221,0.)); #20786=CARTESIAN_POINT('',(-2.21931357193333,-3.78410705131253,0.)); #20787=CARTESIAN_POINT('',(-2.24447272968555,-3.70660786002221,0.1)); #20788=CARTESIAN_POINT('',(-2.21931357193333,-3.78410705131253,0.1)); #20789=CARTESIAN_POINT('',(-2.24447272968555,-3.70660786002221,0.)); #20790=CARTESIAN_POINT('Origin',(-2.35027597344711,-3.70660786002221,0.)); #20791=CARTESIAN_POINT('',(-2.35027597344711,-3.70660786002221,0.)); #20792=CARTESIAN_POINT('',(-2.24447272968555,-3.70660786002221,0.)); #20793=CARTESIAN_POINT('',(-2.35027597344711,-3.70660786002221,0.1)); #20794=CARTESIAN_POINT('',(-2.24447272968555,-3.70660786002221,0.1)); #20795=CARTESIAN_POINT('',(-2.35027597344711,-3.70660786002221,0.)); #20796=CARTESIAN_POINT('Origin',(-2.37543513119933,-3.78410705131253,0.)); #20797=CARTESIAN_POINT('',(-2.37543513119933,-3.78410705131253,0.)); #20798=CARTESIAN_POINT('',(-2.35027597344711,-3.70660786002221,0.)); #20799=CARTESIAN_POINT('',(-2.37543513119933,-3.78410705131253,0.1)); #20800=CARTESIAN_POINT('',(-2.35027597344711,-3.70660786002221,0.1)); #20801=CARTESIAN_POINT('',(-2.37543513119933,-3.78410705131253,0.)); #20802=CARTESIAN_POINT('Origin',(-2.41272459715351,-3.78410705131253,0.)); #20803=CARTESIAN_POINT('',(-2.41272459715351,-3.78410705131253,0.)); #20804=CARTESIAN_POINT('',(-2.37543513119933,-3.78410705131253,0.)); #20805=CARTESIAN_POINT('',(-2.41272459715351,-3.78410705131253,0.1)); #20806=CARTESIAN_POINT('',(-2.37543513119933,-3.78410705131253,0.1)); #20807=CARTESIAN_POINT('',(-2.41272459715351,-3.78410705131253,0.)); #20808=CARTESIAN_POINT('Origin',(-2.31927629693099,-3.50690704536398,0.)); #20809=CARTESIAN_POINT('',(-2.41272459715351,-3.78410705131253,0.)); #20810=CARTESIAN_POINT('',(-2.41272459715351,-3.78410705131253,0.1)); #20811=CARTESIAN_POINT('Origin',(-2.29667892903601,-3.67319138175803,0.)); #20812=CARTESIAN_POINT('Origin',(-2.29667892903601,-3.67319138175803,0.1)); #20813=CARTESIAN_POINT('Origin',(-2.15416932418206,-3.50690704536398,0.)); #20814=CARTESIAN_POINT('',(-2.15416932418206,-3.78410705131253,0.)); #20815=CARTESIAN_POINT('',(-2.15416932418206,-3.50690704536398,0.)); #20816=CARTESIAN_POINT('',(-2.15416932418206,-3.78410705131253,0.)); #20817=CARTESIAN_POINT('',(-2.15416932418206,-3.78410705131253,0.1)); #20818=CARTESIAN_POINT('',(-2.15416932418206,-3.78410705131253,0.)); #20819=CARTESIAN_POINT('',(-2.15416932418206,-3.50690704536398,0.1)); #20820=CARTESIAN_POINT('',(-2.15416932418206,-3.78410705131253,0.1)); #20821=CARTESIAN_POINT('',(-2.15416932418206,-3.50690704536398,0.)); #20822=CARTESIAN_POINT('Origin',(-2.11732912890202,-3.50690704536398,0.)); #20823=CARTESIAN_POINT('',(-2.11732912890202,-3.50690704536398,0.)); #20824=CARTESIAN_POINT('',(-2.15416932418206,-3.50690704536398,0.)); #20825=CARTESIAN_POINT('',(-2.11732912890202,-3.50690704536398,0.1)); #20826=CARTESIAN_POINT('',(-2.15416932418206,-3.50690704536398,0.1)); #20827=CARTESIAN_POINT('',(-2.11732912890202,-3.50690704536398,0.)); #20828=CARTESIAN_POINT('Origin',(-2.11732912890202,-3.75131029209981,0.)); #20829=CARTESIAN_POINT('',(-2.11732912890202,-3.75131029209981,0.)); #20830=CARTESIAN_POINT('',(-2.11732912890202,-3.50690704536398,0.)); #20831=CARTESIAN_POINT('',(-2.11732912890202,-3.75131029209981,0.1)); #20832=CARTESIAN_POINT('',(-2.11732912890202,-3.50690704536398,0.1)); #20833=CARTESIAN_POINT('',(-2.11732912890202,-3.75131029209981,0.)); #20834=CARTESIAN_POINT('Origin',(-1.99355505817459,-3.75131029209981,0.)); #20835=CARTESIAN_POINT('',(-1.99355505817459,-3.75131029209981,0.)); #20836=CARTESIAN_POINT('',(-2.11732912890202,-3.75131029209981,0.)); #20837=CARTESIAN_POINT('',(-1.99355505817459,-3.75131029209981,0.1)); #20838=CARTESIAN_POINT('',(-2.11732912890202,-3.75131029209981,0.1)); #20839=CARTESIAN_POINT('',(-1.99355505817459,-3.75131029209981,0.)); #20840=CARTESIAN_POINT('Origin',(-1.99355505817459,-3.78410705131253,0.)); #20841=CARTESIAN_POINT('',(-1.99355505817459,-3.78410705131253,0.)); #20842=CARTESIAN_POINT('',(-1.99355505817459,-3.75131029209981,0.)); #20843=CARTESIAN_POINT('',(-1.99355505817459,-3.78410705131253,0.1)); #20844=CARTESIAN_POINT('',(-1.99355505817459,-3.75131029209981,0.1)); #20845=CARTESIAN_POINT('',(-1.99355505817459,-3.78410705131253,0.)); #20846=CARTESIAN_POINT('Origin',(-2.15416932418206,-3.78410705131253,0.)); #20847=CARTESIAN_POINT('',(-1.99355505817459,-3.78410705131253,0.)); #20848=CARTESIAN_POINT('',(-1.99355505817459,-3.78410705131253,0.1)); #20849=CARTESIAN_POINT('Origin',(-2.10840969988829,-3.68005455704822,0.)); #20850=CARTESIAN_POINT('Origin',(-2.10840969988829,-3.68005455704822,0.1)); #20851=CARTESIAN_POINT('Origin',(-1.73544905587729,-3.53970380457669,0.)); #20852=CARTESIAN_POINT('',(-1.64245002632891,-3.53970380457669,0.)); #20853=CARTESIAN_POINT('',(-1.73544905587729,-3.53970380457669,0.)); #20854=CARTESIAN_POINT('',(-1.64245002632891,-3.53970380457669,0.)); #20855=CARTESIAN_POINT('',(-1.64245002632891,-3.53970380457669,0.1)); #20856=CARTESIAN_POINT('',(-1.64245002632891,-3.53970380457669,0.)); #20857=CARTESIAN_POINT('',(-1.73544905587729,-3.53970380457669,0.1)); #20858=CARTESIAN_POINT('',(-1.64245002632891,-3.53970380457669,0.1)); #20859=CARTESIAN_POINT('',(-1.73544905587729,-3.53970380457669,0.)); #20860=CARTESIAN_POINT('Origin',(-1.73544905587729,-3.50690704536398,0.)); #20861=CARTESIAN_POINT('',(-1.73544905587729,-3.50690704536398,0.)); #20862=CARTESIAN_POINT('',(-1.73544905587729,-3.53970380457669,0.)); #20863=CARTESIAN_POINT('',(-1.73544905587729,-3.50690704536398,0.1)); #20864=CARTESIAN_POINT('',(-1.73544905587729,-3.53970380457669,0.1)); #20865=CARTESIAN_POINT('',(-1.73544905587729,-3.50690704536398,0.)); #20866=CARTESIAN_POINT('Origin',(-1.5126108015005,-3.50690704536398,0.)); #20867=CARTESIAN_POINT('',(-1.5126108015005,-3.50690704536398,0.)); #20868=CARTESIAN_POINT('',(-1.73544905587729,-3.50690704536398,0.)); #20869=CARTESIAN_POINT('',(-1.5126108015005,-3.50690704536398,0.1)); #20870=CARTESIAN_POINT('',(-1.73544905587729,-3.50690704536398,0.1)); #20871=CARTESIAN_POINT('',(-1.5126108015005,-3.50690704536398,0.)); #20872=CARTESIAN_POINT('Origin',(-1.5126108015005,-3.53970380457669,0.)); #20873=CARTESIAN_POINT('',(-1.5126108015005,-3.53970380457669,0.)); #20874=CARTESIAN_POINT('',(-1.5126108015005,-3.50690704536398,0.)); #20875=CARTESIAN_POINT('',(-1.5126108015005,-3.53970380457669,0.1)); #20876=CARTESIAN_POINT('',(-1.5126108015005,-3.50690704536398,0.1)); #20877=CARTESIAN_POINT('',(-1.5126108015005,-3.53970380457669,0.)); #20878=CARTESIAN_POINT('Origin',(-1.60560983104888,-3.53970380457669,0.)); #20879=CARTESIAN_POINT('',(-1.60560983104888,-3.53970380457669,0.)); #20880=CARTESIAN_POINT('',(-1.5126108015005,-3.53970380457669,0.)); #20881=CARTESIAN_POINT('',(-1.60560983104888,-3.53970380457669,0.1)); #20882=CARTESIAN_POINT('',(-1.5126108015005,-3.53970380457669,0.1)); #20883=CARTESIAN_POINT('',(-1.60560983104888,-3.53970380457669,0.)); #20884=CARTESIAN_POINT('Origin',(-1.60560983104888,-3.78410705131253,0.)); #20885=CARTESIAN_POINT('',(-1.60560983104888,-3.78410705131253,0.)); #20886=CARTESIAN_POINT('',(-1.60560983104888,-3.53970380457669,0.)); #20887=CARTESIAN_POINT('',(-1.60560983104888,-3.78410705131253,0.1)); #20888=CARTESIAN_POINT('',(-1.60560983104888,-3.53970380457669,0.1)); #20889=CARTESIAN_POINT('',(-1.60560983104888,-3.78410705131253,0.)); #20890=CARTESIAN_POINT('Origin',(-1.64245002632891,-3.78410705131253,0.)); #20891=CARTESIAN_POINT('',(-1.64245002632891,-3.78410705131253,0.)); #20892=CARTESIAN_POINT('',(-1.60560983104888,-3.78410705131253,0.)); #20893=CARTESIAN_POINT('',(-1.64245002632891,-3.78410705131253,0.1)); #20894=CARTESIAN_POINT('',(-1.60560983104888,-3.78410705131253,0.1)); #20895=CARTESIAN_POINT('',(-1.64245002632891,-3.78410705131253,0.)); #20896=CARTESIAN_POINT('Origin',(-1.64245002632891,-3.53970380457669,0.)); #20897=CARTESIAN_POINT('',(-1.64245002632891,-3.78410705131253,0.)); #20898=CARTESIAN_POINT('',(-1.64245002632891,-3.78410705131253,0.1)); #20899=CARTESIAN_POINT('Origin',(-1.62402992868889,-3.60005199705854,0.)); #20900=CARTESIAN_POINT('Origin',(-1.62402992868889,-3.60005199705854,0.1)); #20901=CARTESIAN_POINT('Origin',(-3.54309062753762,-3.1618853022757,0.)); #20902=CARTESIAN_POINT('',(-3.47200217055566,-3.1618853022757,0.)); #20903=CARTESIAN_POINT('',(-3.54309062753762,-3.1618853022757,0.)); #20904=CARTESIAN_POINT('',(-3.47200217055566,-3.1618853022757,0.)); #20905=CARTESIAN_POINT('',(-3.47200217055566,-3.1618853022757,0.1)); #20906=CARTESIAN_POINT('',(-3.47200217055566,-3.1618853022757,0.)); #20907=CARTESIAN_POINT('',(-3.54309062753762,-3.1618853022757,0.1)); #20908=CARTESIAN_POINT('',(-3.47200217055566,-3.1618853022757,0.1)); #20909=CARTESIAN_POINT('',(-3.54309062753762,-3.1618853022757,0.)); #20910=CARTESIAN_POINT('Origin',(-3.54309062753762,-3.13681545995839,0.)); #20911=CARTESIAN_POINT('',(-3.54309062753762,-3.13681545995839,0.)); #20912=CARTESIAN_POINT('',(-3.54309062753762,-3.1618853022757,0.)); #20913=CARTESIAN_POINT('',(-3.54309062753762,-3.13681545995839,0.1)); #20914=CARTESIAN_POINT('',(-3.54309062753762,-3.1618853022757,0.1)); #20915=CARTESIAN_POINT('',(-3.54309062753762,-3.13681545995839,0.)); #20916=CARTESIAN_POINT('Origin',(-3.37275306877891,-3.13681545995839,0.)); #20917=CARTESIAN_POINT('',(-3.37275306877891,-3.13681545995839,0.)); #20918=CARTESIAN_POINT('',(-3.54309062753762,-3.13681545995839,0.)); #20919=CARTESIAN_POINT('',(-3.37275306877891,-3.13681545995839,0.1)); #20920=CARTESIAN_POINT('',(-3.54309062753762,-3.13681545995839,0.1)); #20921=CARTESIAN_POINT('',(-3.37275306877891,-3.13681545995839,0.)); #20922=CARTESIAN_POINT('Origin',(-3.37275306877891,-3.1618853022757,0.)); #20923=CARTESIAN_POINT('',(-3.37275306877891,-3.1618853022757,0.)); #20924=CARTESIAN_POINT('',(-3.37275306877891,-3.13681545995839,0.)); #20925=CARTESIAN_POINT('',(-3.37275306877891,-3.1618853022757,0.1)); #20926=CARTESIAN_POINT('',(-3.37275306877891,-3.13681545995839,0.1)); #20927=CARTESIAN_POINT('',(-3.37275306877891,-3.1618853022757,0.)); #20928=CARTESIAN_POINT('Origin',(-3.44384152576087,-3.1618853022757,0.)); #20929=CARTESIAN_POINT('',(-3.44384152576087,-3.1618853022757,0.)); #20930=CARTESIAN_POINT('',(-3.37275306877891,-3.1618853022757,0.)); #20931=CARTESIAN_POINT('',(-3.44384152576087,-3.1618853022757,0.1)); #20932=CARTESIAN_POINT('',(-3.37275306877891,-3.1618853022757,0.1)); #20933=CARTESIAN_POINT('',(-3.44384152576087,-3.1618853022757,0.)); #20934=CARTESIAN_POINT('Origin',(-3.44384152576087,-3.34870714091428,0.)); #20935=CARTESIAN_POINT('',(-3.44384152576087,-3.34870714091428,0.)); #20936=CARTESIAN_POINT('',(-3.44384152576087,-3.1618853022757,0.)); #20937=CARTESIAN_POINT('',(-3.44384152576087,-3.34870714091428,0.1)); #20938=CARTESIAN_POINT('',(-3.44384152576087,-3.1618853022757,0.1)); #20939=CARTESIAN_POINT('',(-3.44384152576087,-3.34870714091428,0.)); #20940=CARTESIAN_POINT('Origin',(-3.47200217055566,-3.34870714091428,0.)); #20941=CARTESIAN_POINT('',(-3.47200217055566,-3.34870714091428,0.)); #20942=CARTESIAN_POINT('',(-3.44384152576087,-3.34870714091428,0.)); #20943=CARTESIAN_POINT('',(-3.47200217055566,-3.34870714091428,0.1)); #20944=CARTESIAN_POINT('',(-3.44384152576087,-3.34870714091428,0.1)); #20945=CARTESIAN_POINT('',(-3.47200217055566,-3.34870714091428,0.)); #20946=CARTESIAN_POINT('Origin',(-3.47200217055566,-3.1618853022757,0.)); #20947=CARTESIAN_POINT('',(-3.47200217055566,-3.34870714091428,0.)); #20948=CARTESIAN_POINT('',(-3.47200217055566,-3.34870714091428,0.1)); #20949=CARTESIAN_POINT('Origin',(-3.45792184815826,-3.20801545982701,0.)); #20950=CARTESIAN_POINT('Origin',(-3.45792184815826,-3.20801545982701,0.1)); #20951=CARTESIAN_POINT('Origin',(-3.12823625056077,-3.18970252457299,0.)); #20952=CARTESIAN_POINT('',(-3.12823625056077,-3.34870714091428,0.)); #20953=CARTESIAN_POINT('',(-3.12823625056077,-3.18970252457299,0.)); #20954=CARTESIAN_POINT('',(-3.12823625056077,-3.34870714091428,0.)); #20955=CARTESIAN_POINT('',(-3.12823625056077,-3.34870714091428,0.1)); #20956=CARTESIAN_POINT('',(-3.12823625056077,-3.34870714091428,0.)); #20957=CARTESIAN_POINT('',(-3.12823625056077,-3.18970252457299,0.1)); #20958=CARTESIAN_POINT('',(-3.12823625056077,-3.34870714091428,0.1)); #20959=CARTESIAN_POINT('',(-3.12823625056077,-3.18970252457299,0.)); #20960=CARTESIAN_POINT('Origin',(-3.10144929575598,-3.18970252457299,0.)); #20961=CARTESIAN_POINT('',(-3.10144929575598,-3.18970252457299,0.)); #20962=CARTESIAN_POINT('',(-3.12823625056077,-3.18970252457299,0.)); #20963=CARTESIAN_POINT('',(-3.10144929575598,-3.18970252457299,0.1)); #20964=CARTESIAN_POINT('',(-3.12823625056077,-3.18970252457299,0.1)); #20965=CARTESIAN_POINT('',(-3.10144929575598,-3.18970252457299,0.)); #20966=CARTESIAN_POINT('Origin',(-3.10144929575598,-3.34870714091428,0.)); #20967=CARTESIAN_POINT('',(-3.10144929575598,-3.34870714091428,0.)); #20968=CARTESIAN_POINT('',(-3.10144929575598,-3.18970252457299,0.)); #20969=CARTESIAN_POINT('',(-3.10144929575598,-3.34870714091428,0.1)); #20970=CARTESIAN_POINT('',(-3.10144929575598,-3.18970252457299,0.1)); #20971=CARTESIAN_POINT('',(-3.10144929575598,-3.34870714091428,0.)); #20972=CARTESIAN_POINT('Origin',(-3.12823625056077,-3.34870714091428,0.)); #20973=CARTESIAN_POINT('',(-3.10144929575598,-3.34870714091428,0.)); #20974=CARTESIAN_POINT('',(-3.10144929575598,-3.34870714091428,0.1)); #20975=CARTESIAN_POINT('Origin',(-3.11484277315838,-3.26920483274363,0.)); #20976=CARTESIAN_POINT('Origin',(-3.11484277315838,-3.26920483274363,0.1)); #20977=CARTESIAN_POINT('Ctrl Pts',(-3.07311693971244,-3.26954825524113, 0.)); #20978=CARTESIAN_POINT('Ctrl Pts',(-3.07311693971244,-3.26954825524113, 0.1)); #20979=CARTESIAN_POINT('Ctrl Pts',(-3.07311693971244,-3.29049702758847, 0.)); #20980=CARTESIAN_POINT('Ctrl Pts',(-3.07311693971244,-3.29049702758847, 0.1)); #20981=CARTESIAN_POINT('Ctrl Pts',(-3.06229913104128,-3.32174847486074, 0.)); #20982=CARTESIAN_POINT('Ctrl Pts',(-3.06229913104128,-3.32174847486074, 0.1)); #20983=CARTESIAN_POINT('Ctrl Pts',(-3.0525115898626,-3.33187943853691,0.)); #20984=CARTESIAN_POINT('Ctrl Pts',(-3.0525115898626,-3.33187943853691,0.1)); #20985=CARTESIAN_POINT('',(-3.0525115898626,-3.33187943853691,0.)); #20986=CARTESIAN_POINT('',(-3.07311693971244,-3.26954825524113,0.)); #20987=CARTESIAN_POINT('Ctrl Pts',(-3.0525115898626,-3.33187943853691,0.)); #20988=CARTESIAN_POINT('Ctrl Pts',(-3.06229913104128,-3.32174847486074, 0.)); #20989=CARTESIAN_POINT('Ctrl Pts',(-3.07311693971244,-3.29049702758847, 0.)); #20990=CARTESIAN_POINT('Ctrl Pts',(-3.07311693971244,-3.26954825524113, 0.)); #20991=CARTESIAN_POINT('',(-3.0525115898626,-3.33187943853691,0.1)); #20992=CARTESIAN_POINT('',(-3.0525115898626,-3.33187943853691,0.)); #20993=CARTESIAN_POINT('',(-3.07311693971244,-3.26954825524113,0.1)); #20994=CARTESIAN_POINT('Ctrl Pts',(-3.07311693971244,-3.26954825524113, 0.1)); #20995=CARTESIAN_POINT('Ctrl Pts',(-3.07311693971244,-3.29049702758847, 0.1)); #20996=CARTESIAN_POINT('Ctrl Pts',(-3.06229913104128,-3.32174847486074, 0.1)); #20997=CARTESIAN_POINT('Ctrl Pts',(-3.0525115898626,-3.33187943853691,0.1)); #20998=CARTESIAN_POINT('',(-3.07311693971244,-3.26954825524113,0.)); #20999=CARTESIAN_POINT('Ctrl Pts',(-3.0525115898626,-3.2077322056916,0.)); #21000=CARTESIAN_POINT('Ctrl Pts',(-3.0525115898626,-3.2077322056916,0.1)); #21001=CARTESIAN_POINT('Ctrl Pts',(-3.06195570854378,-3.21803488061652, 0.)); #21002=CARTESIAN_POINT('Ctrl Pts',(-3.06195570854378,-3.21803488061652, 0.1)); #21003=CARTESIAN_POINT('Ctrl Pts',(-3.07311693971244,-3.24859948289379, 0.)); #21004=CARTESIAN_POINT('Ctrl Pts',(-3.07311693971244,-3.24859948289379, 0.1)); #21005=CARTESIAN_POINT('Ctrl Pts',(-3.07311693971244,-3.26954825524113, 0.)); #21006=CARTESIAN_POINT('Ctrl Pts',(-3.07311693971244,-3.26954825524113, 0.1)); #21007=CARTESIAN_POINT('',(-3.0525115898626,-3.2077322056916,0.)); #21008=CARTESIAN_POINT('Ctrl Pts',(-3.07311693971244,-3.26954825524113, 0.)); #21009=CARTESIAN_POINT('Ctrl Pts',(-3.07311693971244,-3.24859948289379, 0.)); #21010=CARTESIAN_POINT('Ctrl Pts',(-3.06195570854378,-3.21803488061652, 0.)); #21011=CARTESIAN_POINT('Ctrl Pts',(-3.0525115898626,-3.2077322056916,0.)); #21012=CARTESIAN_POINT('',(-3.0525115898626,-3.2077322056916,0.1)); #21013=CARTESIAN_POINT('Ctrl Pts',(-3.0525115898626,-3.2077322056916,0.1)); #21014=CARTESIAN_POINT('Ctrl Pts',(-3.06195570854378,-3.21803488061652, 0.1)); #21015=CARTESIAN_POINT('Ctrl Pts',(-3.07311693971244,-3.24859948289379, 0.1)); #21016=CARTESIAN_POINT('Ctrl Pts',(-3.07311693971244,-3.26954825524113, 0.1)); #21017=CARTESIAN_POINT('',(-3.0525115898626,-3.2077322056916,0.)); #21018=CARTESIAN_POINT('Ctrl Pts',(-2.99893768025301,-3.18609658834927, 0.)); #21019=CARTESIAN_POINT('Ctrl Pts',(-2.99893768025301,-3.18609658834927, 0.1)); #21020=CARTESIAN_POINT('Ctrl Pts',(-3.01507853763539,-3.18609658834927, 0.)); #21021=CARTESIAN_POINT('Ctrl Pts',(-3.01507853763539,-3.18609658834927, 0.1)); #21022=CARTESIAN_POINT('Ctrl Pts',(-3.04306747118142,-3.19725781951793, 0.)); #21023=CARTESIAN_POINT('Ctrl Pts',(-3.04306747118142,-3.19725781951793, 0.1)); #21024=CARTESIAN_POINT('Ctrl Pts',(-3.0525115898626,-3.2077322056916,0.)); #21025=CARTESIAN_POINT('Ctrl Pts',(-3.0525115898626,-3.2077322056916,0.1)); #21026=CARTESIAN_POINT('',(-2.99893768025301,-3.18609658834927,0.)); #21027=CARTESIAN_POINT('Ctrl Pts',(-3.0525115898626,-3.2077322056916,0.)); #21028=CARTESIAN_POINT('Ctrl Pts',(-3.04306747118142,-3.19725781951793, 0.)); #21029=CARTESIAN_POINT('Ctrl Pts',(-3.01507853763539,-3.18609658834927, 0.)); #21030=CARTESIAN_POINT('Ctrl Pts',(-2.99893768025301,-3.18609658834927, 0.)); #21031=CARTESIAN_POINT('',(-2.99893768025301,-3.18609658834927,0.1)); #21032=CARTESIAN_POINT('Ctrl Pts',(-2.99893768025301,-3.18609658834927, 0.1)); #21033=CARTESIAN_POINT('Ctrl Pts',(-3.01507853763539,-3.18609658834927, 0.1)); #21034=CARTESIAN_POINT('Ctrl Pts',(-3.04306747118142,-3.19725781951793, 0.1)); #21035=CARTESIAN_POINT('Ctrl Pts',(-3.0525115898626,-3.2077322056916,0.1)); #21036=CARTESIAN_POINT('',(-2.99893768025301,-3.18609658834927,0.)); #21037=CARTESIAN_POINT('Ctrl Pts',(-2.95206050934461,-3.19828808701043, 0.)); #21038=CARTESIAN_POINT('Ctrl Pts',(-2.95206050934461,-3.19828808701043, 0.1)); #21039=CARTESIAN_POINT('Ctrl Pts',(-2.96150462802579,-3.19348017204546, 0.)); #21040=CARTESIAN_POINT('Ctrl Pts',(-2.96150462802579,-3.19348017204546, 0.1)); #21041=CARTESIAN_POINT('Ctrl Pts',(-2.98588762534811,-3.18609658834927, 0.)); #21042=CARTESIAN_POINT('Ctrl Pts',(-2.98588762534811,-3.18609658834927, 0.1)); #21043=CARTESIAN_POINT('Ctrl Pts',(-2.99893768025301,-3.18609658834927, 0.)); #21044=CARTESIAN_POINT('Ctrl Pts',(-2.99893768025301,-3.18609658834927, 0.1)); #21045=CARTESIAN_POINT('',(-2.95206050934462,-3.19828808701043,0.)); #21046=CARTESIAN_POINT('Ctrl Pts',(-2.99893768025301,-3.18609658834927, 0.)); #21047=CARTESIAN_POINT('Ctrl Pts',(-2.98588762534811,-3.18609658834927, 0.)); #21048=CARTESIAN_POINT('Ctrl Pts',(-2.96150462802579,-3.19348017204546, 0.)); #21049=CARTESIAN_POINT('Ctrl Pts',(-2.95206050934461,-3.19828808701043, 0.)); #21050=CARTESIAN_POINT('',(-2.95206050934462,-3.19828808701043,0.1)); #21051=CARTESIAN_POINT('Ctrl Pts',(-2.95206050934461,-3.19828808701043, 0.1)); #21052=CARTESIAN_POINT('Ctrl Pts',(-2.96150462802579,-3.19348017204546, 0.1)); #21053=CARTESIAN_POINT('Ctrl Pts',(-2.98588762534811,-3.18609658834927, 0.1)); #21054=CARTESIAN_POINT('Ctrl Pts',(-2.99893768025301,-3.18609658834927, 0.1)); #21055=CARTESIAN_POINT('',(-2.95206050934462,-3.19828808701043,0.)); #21056=CARTESIAN_POINT('Origin',(-2.95206050934461,-3.22833755554145,0.)); #21057=CARTESIAN_POINT('',(-2.95206050934461,-3.22833755554145,0.)); #21058=CARTESIAN_POINT('',(-2.95206050934461,-3.19828808701043,0.)); #21059=CARTESIAN_POINT('',(-2.95206050934461,-3.22833755554145,0.1)); #21060=CARTESIAN_POINT('',(-2.95206050934461,-3.19828808701043,0.1)); #21061=CARTESIAN_POINT('',(-2.95206050934461,-3.22833755554145,0.)); #21062=CARTESIAN_POINT('Origin',(-2.95360591058335,-3.22833755554145,0.)); #21063=CARTESIAN_POINT('',(-2.95360591058335,-3.22833755554145,0.)); #21064=CARTESIAN_POINT('',(-2.95206050934461,-3.22833755554145,0.)); #21065=CARTESIAN_POINT('',(-2.95360591058335,-3.22833755554145,0.1)); #21066=CARTESIAN_POINT('',(-2.95206050934461,-3.22833755554145,0.1)); #21067=CARTESIAN_POINT('',(-2.95360591058335,-3.22833755554145,0.)); #21068=CARTESIAN_POINT('Ctrl Pts',(-2.97180730295071,-3.21648947937779, 0.)); #21069=CARTESIAN_POINT('Ctrl Pts',(-2.97180730295071,-3.21648947937779, 0.1)); #21070=CARTESIAN_POINT('Ctrl Pts',(-2.96545398674701,-3.21975199310401, 0.)); #21071=CARTESIAN_POINT('Ctrl Pts',(-2.96545398674701,-3.21975199310401, 0.1)); #21072=CARTESIAN_POINT('Ctrl Pts',(-2.95652500181208,-3.22593359805897, 0.)); #21073=CARTESIAN_POINT('Ctrl Pts',(-2.95652500181208,-3.22593359805897, 0.1)); #21074=CARTESIAN_POINT('Ctrl Pts',(-2.95360591058335,-3.22833755554145, 0.)); #21075=CARTESIAN_POINT('Ctrl Pts',(-2.95360591058335,-3.22833755554145, 0.1)); #21076=CARTESIAN_POINT('',(-2.97180730295071,-3.21648947937779,0.)); #21077=CARTESIAN_POINT('Ctrl Pts',(-2.95360591058335,-3.22833755554145, 0.)); #21078=CARTESIAN_POINT('Ctrl Pts',(-2.95652500181208,-3.22593359805897, 0.)); #21079=CARTESIAN_POINT('Ctrl Pts',(-2.96545398674701,-3.21975199310401, 0.)); #21080=CARTESIAN_POINT('Ctrl Pts',(-2.97180730295071,-3.21648947937779, 0.)); #21081=CARTESIAN_POINT('',(-2.97180730295071,-3.21648947937779,0.1)); #21082=CARTESIAN_POINT('Ctrl Pts',(-2.97180730295071,-3.21648947937779, 0.1)); #21083=CARTESIAN_POINT('Ctrl Pts',(-2.96545398674701,-3.21975199310401, 0.1)); #21084=CARTESIAN_POINT('Ctrl Pts',(-2.95652500181208,-3.22593359805897, 0.1)); #21085=CARTESIAN_POINT('Ctrl Pts',(-2.95360591058335,-3.22833755554145, 0.1)); #21086=CARTESIAN_POINT('',(-2.97180730295071,-3.21648947937779,0.)); #21087=CARTESIAN_POINT('Ctrl Pts',(-2.99945281399925,-3.20944931817909, 0.)); #21088=CARTESIAN_POINT('Ctrl Pts',(-2.99945281399925,-3.20944931817909, 0.1)); #21089=CARTESIAN_POINT('Ctrl Pts',(-2.99258436404931,-3.20944931817909, 0.)); #21090=CARTESIAN_POINT('Ctrl Pts',(-2.99258436404931,-3.20944931817909, 0.1)); #21091=CARTESIAN_POINT('Ctrl Pts',(-2.97747377415942,-3.21374209939781, 0.)); #21092=CARTESIAN_POINT('Ctrl Pts',(-2.97747377415942,-3.21374209939781, 0.1)); #21093=CARTESIAN_POINT('Ctrl Pts',(-2.97180730295071,-3.21648947937779, 0.)); #21094=CARTESIAN_POINT('Ctrl Pts',(-2.97180730295071,-3.21648947937779, 0.1)); #21095=CARTESIAN_POINT('',(-2.99945281399925,-3.20944931817909,0.)); #21096=CARTESIAN_POINT('Ctrl Pts',(-2.97180730295071,-3.21648947937779, 0.)); #21097=CARTESIAN_POINT('Ctrl Pts',(-2.97747377415942,-3.21374209939781, 0.)); #21098=CARTESIAN_POINT('Ctrl Pts',(-2.99258436404931,-3.20944931817909, 0.)); #21099=CARTESIAN_POINT('Ctrl Pts',(-2.99945281399925,-3.20944931817909, 0.)); #21100=CARTESIAN_POINT('',(-2.99945281399925,-3.20944931817909,0.1)); #21101=CARTESIAN_POINT('Ctrl Pts',(-2.99945281399925,-3.20944931817909, 0.1)); #21102=CARTESIAN_POINT('Ctrl Pts',(-2.99258436404931,-3.20944931817909, 0.1)); #21103=CARTESIAN_POINT('Ctrl Pts',(-2.97747377415942,-3.21374209939781, 0.1)); #21104=CARTESIAN_POINT('Ctrl Pts',(-2.97180730295071,-3.21648947937779, 0.1)); #21105=CARTESIAN_POINT('',(-2.99945281399925,-3.20944931817909,0.)); #21106=CARTESIAN_POINT('Ctrl Pts',(-3.0454714286639,-3.26954825524113,0.)); #21107=CARTESIAN_POINT('Ctrl Pts',(-3.0454714286639,-3.26954825524113,0.1)); #21108=CARTESIAN_POINT('Ctrl Pts',(-3.0454714286639,-3.2408724767001,0.)); #21109=CARTESIAN_POINT('Ctrl Pts',(-3.0454714286639,-3.2408724767001,0.1)); #21110=CARTESIAN_POINT('Ctrl Pts',(-3.02022987509785,-3.20944931817909, 0.)); #21111=CARTESIAN_POINT('Ctrl Pts',(-3.02022987509785,-3.20944931817909, 0.1)); #21112=CARTESIAN_POINT('Ctrl Pts',(-2.99945281399925,-3.20944931817909, 0.)); #21113=CARTESIAN_POINT('Ctrl Pts',(-2.99945281399925,-3.20944931817909, 0.1)); #21114=CARTESIAN_POINT('',(-3.0454714286639,-3.26954825524113,0.)); #21115=CARTESIAN_POINT('Ctrl Pts',(-2.99945281399925,-3.20944931817909, 0.)); #21116=CARTESIAN_POINT('Ctrl Pts',(-3.02022987509785,-3.20944931817909, 0.)); #21117=CARTESIAN_POINT('Ctrl Pts',(-3.0454714286639,-3.2408724767001,0.)); #21118=CARTESIAN_POINT('Ctrl Pts',(-3.0454714286639,-3.26954825524113,0.)); #21119=CARTESIAN_POINT('',(-3.0454714286639,-3.26954825524113,0.1)); #21120=CARTESIAN_POINT('Ctrl Pts',(-3.0454714286639,-3.26954825524113,0.1)); #21121=CARTESIAN_POINT('Ctrl Pts',(-3.0454714286639,-3.2408724767001,0.1)); #21122=CARTESIAN_POINT('Ctrl Pts',(-3.02022987509785,-3.20944931817909, 0.1)); #21123=CARTESIAN_POINT('Ctrl Pts',(-2.99945281399925,-3.20944931817909, 0.1)); #21124=CARTESIAN_POINT('',(-3.0454714286639,-3.26954825524113,0.)); #21125=CARTESIAN_POINT('Ctrl Pts',(-2.99945281399925,-3.32896034730818, 0.)); #21126=CARTESIAN_POINT('Ctrl Pts',(-2.99945281399925,-3.32896034730818, 0.1)); #21127=CARTESIAN_POINT('Ctrl Pts',(-3.02108843134159,-3.32896034730818, 0.)); #21128=CARTESIAN_POINT('Ctrl Pts',(-3.02108843134159,-3.32896034730818, 0.1)); #21129=CARTESIAN_POINT('Ctrl Pts',(-3.0454714286639,-3.29753718878717,0.)); #21130=CARTESIAN_POINT('Ctrl Pts',(-3.0454714286639,-3.29753718878717,0.1)); #21131=CARTESIAN_POINT('Ctrl Pts',(-3.0454714286639,-3.26954825524113,0.)); #21132=CARTESIAN_POINT('Ctrl Pts',(-3.0454714286639,-3.26954825524113,0.1)); #21133=CARTESIAN_POINT('',(-2.99945281399925,-3.32896034730818,0.)); #21134=CARTESIAN_POINT('Ctrl Pts',(-3.0454714286639,-3.26954825524113,0.)); #21135=CARTESIAN_POINT('Ctrl Pts',(-3.0454714286639,-3.29753718878717,0.)); #21136=CARTESIAN_POINT('Ctrl Pts',(-3.02108843134159,-3.32896034730818, 0.)); #21137=CARTESIAN_POINT('Ctrl Pts',(-2.99945281399925,-3.32896034730818, 0.)); #21138=CARTESIAN_POINT('',(-2.99945281399925,-3.32896034730818,0.1)); #21139=CARTESIAN_POINT('Ctrl Pts',(-2.99945281399925,-3.32896034730818, 0.1)); #21140=CARTESIAN_POINT('Ctrl Pts',(-3.02108843134159,-3.32896034730818, 0.1)); #21141=CARTESIAN_POINT('Ctrl Pts',(-3.0454714286639,-3.29753718878717,0.1)); #21142=CARTESIAN_POINT('Ctrl Pts',(-3.0454714286639,-3.26954825524113,0.1)); #21143=CARTESIAN_POINT('',(-2.99945281399925,-3.32896034730818,0.)); #21144=CARTESIAN_POINT('Ctrl Pts',(-2.95360591058335,-3.30972868744833, 0.)); #21145=CARTESIAN_POINT('Ctrl Pts',(-2.95360591058335,-3.30972868744833, 0.1)); #21146=CARTESIAN_POINT('Ctrl Pts',(-2.96270660676703,-3.31814253863701, 0.)); #21147=CARTESIAN_POINT('Ctrl Pts',(-2.96270660676703,-3.31814253863701, 0.1)); #21148=CARTESIAN_POINT('Ctrl Pts',(-2.98640275909435,-3.32896034730818, 0.)); #21149=CARTESIAN_POINT('Ctrl Pts',(-2.98640275909435,-3.32896034730818, 0.1)); #21150=CARTESIAN_POINT('Ctrl Pts',(-2.99945281399925,-3.32896034730818, 0.)); #21151=CARTESIAN_POINT('Ctrl Pts',(-2.99945281399925,-3.32896034730818, 0.1)); #21152=CARTESIAN_POINT('',(-2.95360591058335,-3.30972868744833,0.)); #21153=CARTESIAN_POINT('Ctrl Pts',(-2.99945281399925,-3.32896034730818, 0.)); #21154=CARTESIAN_POINT('Ctrl Pts',(-2.98640275909435,-3.32896034730818, 0.)); #21155=CARTESIAN_POINT('Ctrl Pts',(-2.96270660676703,-3.31814253863701, 0.)); #21156=CARTESIAN_POINT('Ctrl Pts',(-2.95360591058335,-3.30972868744833, 0.)); #21157=CARTESIAN_POINT('',(-2.95360591058335,-3.30972868744833,0.1)); #21158=CARTESIAN_POINT('Ctrl Pts',(-2.95360591058335,-3.30972868744833, 0.1)); #21159=CARTESIAN_POINT('Ctrl Pts',(-2.96270660676703,-3.31814253863701, 0.1)); #21160=CARTESIAN_POINT('Ctrl Pts',(-2.98640275909435,-3.32896034730818, 0.1)); #21161=CARTESIAN_POINT('Ctrl Pts',(-2.99945281399925,-3.32896034730818, 0.1)); #21162=CARTESIAN_POINT('',(-2.95360591058335,-3.30972868744833,0.)); #21163=CARTESIAN_POINT('Origin',(-2.95206050934461,-3.30972868744833,0.)); #21164=CARTESIAN_POINT('',(-2.95206050934461,-3.30972868744833,0.)); #21165=CARTESIAN_POINT('',(-2.95360591058335,-3.30972868744833,0.)); #21166=CARTESIAN_POINT('',(-2.95206050934461,-3.30972868744833,0.1)); #21167=CARTESIAN_POINT('',(-2.95360591058335,-3.30972868744833,0.1)); #21168=CARTESIAN_POINT('',(-2.95206050934461,-3.30972868744833,0.)); #21169=CARTESIAN_POINT('Origin',(-2.95206050934461,-3.33977815597935,0.)); #21170=CARTESIAN_POINT('',(-2.95206050934461,-3.33977815597935,0.)); #21171=CARTESIAN_POINT('',(-2.95206050934461,-3.30972868744833,0.)); #21172=CARTESIAN_POINT('',(-2.95206050934461,-3.33977815597935,0.1)); #21173=CARTESIAN_POINT('',(-2.95206050934461,-3.30972868744833,0.1)); #21174=CARTESIAN_POINT('',(-2.95206050934461,-3.33977815597935,0.)); #21175=CARTESIAN_POINT('Ctrl Pts',(-2.97283757044321,-3.34819200716803, 0.)); #21176=CARTESIAN_POINT('Ctrl Pts',(-2.97283757044321,-3.34819200716803, 0.1)); #21177=CARTESIAN_POINT('Ctrl Pts',(-2.96802965547824,-3.34699002842679, 0.)); #21178=CARTESIAN_POINT('Ctrl Pts',(-2.96802965547824,-3.34699002842679, 0.1)); #21179=CARTESIAN_POINT('Ctrl Pts',(-2.95600986806583,-3.34166697971558, 0.)); #21180=CARTESIAN_POINT('Ctrl Pts',(-2.95600986806583,-3.34166697971558, 0.1)); #21181=CARTESIAN_POINT('Ctrl Pts',(-2.95206050934461,-3.33977815597935, 0.)); #21182=CARTESIAN_POINT('Ctrl Pts',(-2.95206050934461,-3.33977815597935, 0.1)); #21183=CARTESIAN_POINT('',(-2.97283757044321,-3.34819200716803,0.)); #21184=CARTESIAN_POINT('Ctrl Pts',(-2.95206050934461,-3.33977815597935, 0.)); #21185=CARTESIAN_POINT('Ctrl Pts',(-2.95600986806583,-3.34166697971558, 0.)); #21186=CARTESIAN_POINT('Ctrl Pts',(-2.96802965547824,-3.34699002842679, 0.)); #21187=CARTESIAN_POINT('Ctrl Pts',(-2.97283757044321,-3.34819200716803, 0.)); #21188=CARTESIAN_POINT('',(-2.97283757044321,-3.34819200716803,0.1)); #21189=CARTESIAN_POINT('Ctrl Pts',(-2.97283757044321,-3.34819200716803, 0.1)); #21190=CARTESIAN_POINT('Ctrl Pts',(-2.96802965547824,-3.34699002842679, 0.1)); #21191=CARTESIAN_POINT('Ctrl Pts',(-2.95600986806583,-3.34166697971558, 0.1)); #21192=CARTESIAN_POINT('Ctrl Pts',(-2.95206050934461,-3.33977815597935, 0.1)); #21193=CARTESIAN_POINT('',(-2.97283757044321,-3.34819200716803,0.)); #21194=CARTESIAN_POINT('Ctrl Pts',(-2.99893768025301,-3.352313077138,0.)); #21195=CARTESIAN_POINT('Ctrl Pts',(-2.99893768025301,-3.352313077138,0.1)); #21196=CARTESIAN_POINT('Ctrl Pts',(-2.99052382906432,-3.352313077138,0.)); #21197=CARTESIAN_POINT('Ctrl Pts',(-2.99052382906432,-3.352313077138,0.1)); #21198=CARTESIAN_POINT('Ctrl Pts',(-2.97970602039315,-3.35025254215302, 0.)); #21199=CARTESIAN_POINT('Ctrl Pts',(-2.97970602039315,-3.35025254215302, 0.1)); #21200=CARTESIAN_POINT('Ctrl Pts',(-2.97283757044321,-3.34819200716803, 0.)); #21201=CARTESIAN_POINT('Ctrl Pts',(-2.97283757044321,-3.34819200716803, 0.1)); #21202=CARTESIAN_POINT('',(-2.99893768025301,-3.352313077138,0.)); #21203=CARTESIAN_POINT('Ctrl Pts',(-2.97283757044321,-3.34819200716803, 0.)); #21204=CARTESIAN_POINT('Ctrl Pts',(-2.97970602039315,-3.35025254215302, 0.)); #21205=CARTESIAN_POINT('Ctrl Pts',(-2.99052382906432,-3.352313077138,0.)); #21206=CARTESIAN_POINT('Ctrl Pts',(-2.99893768025301,-3.352313077138,0.)); #21207=CARTESIAN_POINT('',(-2.99893768025301,-3.352313077138,0.1)); #21208=CARTESIAN_POINT('Ctrl Pts',(-2.99893768025301,-3.352313077138,0.1)); #21209=CARTESIAN_POINT('Ctrl Pts',(-2.99052382906432,-3.352313077138,0.1)); #21210=CARTESIAN_POINT('Ctrl Pts',(-2.97970602039315,-3.35025254215302, 0.1)); #21211=CARTESIAN_POINT('Ctrl Pts',(-2.97283757044321,-3.34819200716803, 0.1)); #21212=CARTESIAN_POINT('',(-2.99893768025301,-3.352313077138,0.)); #21213=CARTESIAN_POINT('Ctrl Pts',(-3.0525115898626,-3.33187943853691,0.)); #21214=CARTESIAN_POINT('Ctrl Pts',(-3.0525115898626,-3.33187943853691,0.1)); #21215=CARTESIAN_POINT('Ctrl Pts',(-3.04272404868392,-3.34218211346183, 0.)); #21216=CARTESIAN_POINT('Ctrl Pts',(-3.04272404868392,-3.34218211346183, 0.1)); #21217=CARTESIAN_POINT('Ctrl Pts',(-3.01542196013288,-3.352313077138,0.)); #21218=CARTESIAN_POINT('Ctrl Pts',(-3.01542196013288,-3.352313077138,0.1)); #21219=CARTESIAN_POINT('Ctrl Pts',(-2.99893768025301,-3.352313077138,0.)); #21220=CARTESIAN_POINT('Ctrl Pts',(-2.99893768025301,-3.352313077138,0.1)); #21221=CARTESIAN_POINT('Ctrl Pts',(-2.99893768025301,-3.352313077138,0.)); #21222=CARTESIAN_POINT('Ctrl Pts',(-3.01542196013288,-3.352313077138,0.)); #21223=CARTESIAN_POINT('Ctrl Pts',(-3.04272404868392,-3.34218211346183, 0.)); #21224=CARTESIAN_POINT('Ctrl Pts',(-3.0525115898626,-3.33187943853691,0.)); #21225=CARTESIAN_POINT('Ctrl Pts',(-3.0525115898626,-3.33187943853691,0.1)); #21226=CARTESIAN_POINT('Ctrl Pts',(-3.04272404868392,-3.34218211346183, 0.1)); #21227=CARTESIAN_POINT('Ctrl Pts',(-3.01542196013288,-3.352313077138,0.1)); #21228=CARTESIAN_POINT('Ctrl Pts',(-2.99893768025301,-3.352313077138,0.1)); #21229=CARTESIAN_POINT('Origin',(-3.01194917483982,-3.26937317486116,0.)); #21230=CARTESIAN_POINT('Origin',(-3.01194917483982,-3.26937317486116,0.1)); #21231=CARTESIAN_POINT('Ctrl Pts',(-2.76283471322356,-3.33016232604942, 0.)); #21232=CARTESIAN_POINT('Ctrl Pts',(-2.76283471322356,-3.33016232604942, 0.1)); #21233=CARTESIAN_POINT('Ctrl Pts',(-2.74222936337371,-3.33016232604942, 0.)); #21234=CARTESIAN_POINT('Ctrl Pts',(-2.74222936337371,-3.33016232604942, 0.1)); #21235=CARTESIAN_POINT('Ctrl Pts',(-2.71956347853888,-3.2997694350209,0.)); #21236=CARTESIAN_POINT('Ctrl Pts',(-2.71956347853888,-3.2997694350209,0.1)); #21237=CARTESIAN_POINT('Ctrl Pts',(-2.71956347853888,-3.26920483274364, 0.)); #21238=CARTESIAN_POINT('Ctrl Pts',(-2.71956347853888,-3.26920483274364, 0.1)); #21239=CARTESIAN_POINT('',(-2.76283471322355,-3.33016232604942,0.)); #21240=CARTESIAN_POINT('',(-2.71956347853888,-3.26920483274364,0.)); #21241=CARTESIAN_POINT('Ctrl Pts',(-2.76283471322356,-3.33016232604942, 0.)); #21242=CARTESIAN_POINT('Ctrl Pts',(-2.74222936337371,-3.33016232604942, 0.)); #21243=CARTESIAN_POINT('Ctrl Pts',(-2.71956347853888,-3.2997694350209,0.)); #21244=CARTESIAN_POINT('Ctrl Pts',(-2.71956347853888,-3.26920483274364, 0.)); #21245=CARTESIAN_POINT('',(-2.76283471322355,-3.33016232604942,0.1)); #21246=CARTESIAN_POINT('',(-2.76283471322355,-3.33016232604942,0.)); #21247=CARTESIAN_POINT('',(-2.71956347853888,-3.26920483274364,0.1)); #21248=CARTESIAN_POINT('Ctrl Pts',(-2.71956347853888,-3.26920483274364, 0.1)); #21249=CARTESIAN_POINT('Ctrl Pts',(-2.71956347853888,-3.2997694350209,0.1)); #21250=CARTESIAN_POINT('Ctrl Pts',(-2.74222936337371,-3.33016232604942, 0.1)); #21251=CARTESIAN_POINT('Ctrl Pts',(-2.76283471322356,-3.33016232604942, 0.1)); #21252=CARTESIAN_POINT('',(-2.71956347853888,-3.26920483274364,0.)); #21253=CARTESIAN_POINT('Ctrl Pts',(-2.80627765915697,-3.26920483274364, 0.)); #21254=CARTESIAN_POINT('Ctrl Pts',(-2.80627765915697,-3.26920483274364, 0.1)); #21255=CARTESIAN_POINT('Ctrl Pts',(-2.80627765915697,-3.29925430127466, 0.)); #21256=CARTESIAN_POINT('Ctrl Pts',(-2.80627765915697,-3.29925430127466, 0.1)); #21257=CARTESIAN_POINT('Ctrl Pts',(-2.78361177432215,-3.33016232604942, 0.)); #21258=CARTESIAN_POINT('Ctrl Pts',(-2.78361177432215,-3.33016232604942, 0.1)); #21259=CARTESIAN_POINT('Ctrl Pts',(-2.76283471322356,-3.33016232604942, 0.)); #21260=CARTESIAN_POINT('Ctrl Pts',(-2.76283471322356,-3.33016232604942, 0.1)); #21261=CARTESIAN_POINT('',(-2.80627765915697,-3.26920483274364,0.)); #21262=CARTESIAN_POINT('Ctrl Pts',(-2.80627765915697,-3.26920483274364, 0.)); #21263=CARTESIAN_POINT('Ctrl Pts',(-2.80627765915697,-3.29925430127466, 0.)); #21264=CARTESIAN_POINT('Ctrl Pts',(-2.78361177432215,-3.33016232604942, 0.)); #21265=CARTESIAN_POINT('Ctrl Pts',(-2.76283471322356,-3.33016232604942, 0.)); #21266=CARTESIAN_POINT('',(-2.80627765915697,-3.26920483274364,0.1)); #21267=CARTESIAN_POINT('',(-2.80627765915697,-3.26920483274364,0.)); #21268=CARTESIAN_POINT('Ctrl Pts',(-2.76283471322356,-3.33016232604942, 0.1)); #21269=CARTESIAN_POINT('Ctrl Pts',(-2.78361177432215,-3.33016232604942, 0.1)); #21270=CARTESIAN_POINT('Ctrl Pts',(-2.80627765915697,-3.29925430127466, 0.1)); #21271=CARTESIAN_POINT('Ctrl Pts',(-2.80627765915697,-3.26920483274364, 0.1)); #21272=CARTESIAN_POINT('Ctrl Pts',(-2.76283471322356,-3.20824733943785, 0.)); #21273=CARTESIAN_POINT('Ctrl Pts',(-2.76283471322356,-3.20824733943785, 0.1)); #21274=CARTESIAN_POINT('Ctrl Pts',(-2.78361177432215,-3.20824733943785, 0.)); #21275=CARTESIAN_POINT('Ctrl Pts',(-2.78361177432215,-3.20824733943785, 0.1)); #21276=CARTESIAN_POINT('Ctrl Pts',(-2.80627765915697,-3.23829680796887, 0.)); #21277=CARTESIAN_POINT('Ctrl Pts',(-2.80627765915697,-3.23829680796887, 0.1)); #21278=CARTESIAN_POINT('Ctrl Pts',(-2.80627765915697,-3.26920483274364, 0.)); #21279=CARTESIAN_POINT('Ctrl Pts',(-2.80627765915697,-3.26920483274364, 0.1)); #21280=CARTESIAN_POINT('',(-2.76283471322356,-3.20824733943785,0.)); #21281=CARTESIAN_POINT('Ctrl Pts',(-2.76283471322356,-3.20824733943785, 0.)); #21282=CARTESIAN_POINT('Ctrl Pts',(-2.78361177432215,-3.20824733943785, 0.)); #21283=CARTESIAN_POINT('Ctrl Pts',(-2.80627765915697,-3.23829680796887, 0.)); #21284=CARTESIAN_POINT('Ctrl Pts',(-2.80627765915697,-3.26920483274364, 0.)); #21285=CARTESIAN_POINT('',(-2.76283471322356,-3.20824733943785,0.1)); #21286=CARTESIAN_POINT('',(-2.76283471322356,-3.20824733943785,0.)); #21287=CARTESIAN_POINT('Ctrl Pts',(-2.80627765915697,-3.26920483274364, 0.1)); #21288=CARTESIAN_POINT('Ctrl Pts',(-2.80627765915697,-3.23829680796887, 0.1)); #21289=CARTESIAN_POINT('Ctrl Pts',(-2.78361177432215,-3.20824733943785, 0.1)); #21290=CARTESIAN_POINT('Ctrl Pts',(-2.76283471322356,-3.20824733943785, 0.1)); #21291=CARTESIAN_POINT('Ctrl Pts',(-2.71956347853888,-3.26920483274364, 0.)); #21292=CARTESIAN_POINT('Ctrl Pts',(-2.71956347853888,-3.26920483274364, 0.1)); #21293=CARTESIAN_POINT('Ctrl Pts',(-2.71956347853888,-3.23829680796887, 0.)); #21294=CARTESIAN_POINT('Ctrl Pts',(-2.71956347853888,-3.23829680796887, 0.1)); #21295=CARTESIAN_POINT('Ctrl Pts',(-2.74205765212496,-3.20824733943785, 0.)); #21296=CARTESIAN_POINT('Ctrl Pts',(-2.74205765212496,-3.20824733943785, 0.1)); #21297=CARTESIAN_POINT('Ctrl Pts',(-2.76283471322356,-3.20824733943785, 0.)); #21298=CARTESIAN_POINT('Ctrl Pts',(-2.76283471322356,-3.20824733943785, 0.1)); #21299=CARTESIAN_POINT('Ctrl Pts',(-2.71956347853888,-3.26920483274364, 0.)); #21300=CARTESIAN_POINT('Ctrl Pts',(-2.71956347853888,-3.23829680796887, 0.)); #21301=CARTESIAN_POINT('Ctrl Pts',(-2.74205765212496,-3.20824733943785, 0.)); #21302=CARTESIAN_POINT('Ctrl Pts',(-2.76283471322356,-3.20824733943785, 0.)); #21303=CARTESIAN_POINT('Ctrl Pts',(-2.76283471322356,-3.20824733943785, 0.1)); #21304=CARTESIAN_POINT('Ctrl Pts',(-2.74205765212496,-3.20824733943785, 0.1)); #21305=CARTESIAN_POINT('Ctrl Pts',(-2.71956347853888,-3.23829680796887, 0.1)); #21306=CARTESIAN_POINT('Ctrl Pts',(-2.71956347853888,-3.26920483274364, 0.1)); #21307=CARTESIAN_POINT('Ctrl Pts',(-2.83392317020551,-3.26920483274364, 0.)); #21308=CARTESIAN_POINT('Ctrl Pts',(-2.83392317020551,-3.26920483274364, 0.1)); #21309=CARTESIAN_POINT('Ctrl Pts',(-2.83392317020551,-3.30801157496084, 0.)); #21310=CARTESIAN_POINT('Ctrl Pts',(-2.83392317020551,-3.30801157496084, 0.1)); #21311=CARTESIAN_POINT('Ctrl Pts',(-2.79597498423205,-3.35317163338175, 0.)); #21312=CARTESIAN_POINT('Ctrl Pts',(-2.79597498423205,-3.35317163338175, 0.1)); #21313=CARTESIAN_POINT('Ctrl Pts',(-2.76283471322356,-3.35317163338175, 0.)); #21314=CARTESIAN_POINT('Ctrl Pts',(-2.76283471322356,-3.35317163338175, 0.1)); #21315=CARTESIAN_POINT('',(-2.76283471322356,-3.35317163338175,0.)); #21316=CARTESIAN_POINT('',(-2.83392317020551,-3.26920483274364,0.)); #21317=CARTESIAN_POINT('Ctrl Pts',(-2.76283471322356,-3.35317163338175, 0.)); #21318=CARTESIAN_POINT('Ctrl Pts',(-2.79597498423205,-3.35317163338175, 0.)); #21319=CARTESIAN_POINT('Ctrl Pts',(-2.83392317020551,-3.30801157496084, 0.)); #21320=CARTESIAN_POINT('Ctrl Pts',(-2.83392317020551,-3.26920483274364, 0.)); #21321=CARTESIAN_POINT('',(-2.76283471322356,-3.35317163338175,0.1)); #21322=CARTESIAN_POINT('',(-2.76283471322356,-3.35317163338175,0.)); #21323=CARTESIAN_POINT('',(-2.83392317020551,-3.26920483274364,0.1)); #21324=CARTESIAN_POINT('Ctrl Pts',(-2.83392317020551,-3.26920483274364, 0.1)); #21325=CARTESIAN_POINT('Ctrl Pts',(-2.83392317020551,-3.30801157496084, 0.1)); #21326=CARTESIAN_POINT('Ctrl Pts',(-2.79597498423205,-3.35317163338175, 0.1)); #21327=CARTESIAN_POINT('Ctrl Pts',(-2.76283471322356,-3.35317163338175, 0.1)); #21328=CARTESIAN_POINT('',(-2.83392317020551,-3.26920483274364,0.)); #21329=CARTESIAN_POINT('Ctrl Pts',(-2.76283471322356,-3.18523803210552, 0.)); #21330=CARTESIAN_POINT('Ctrl Pts',(-2.76283471322356,-3.18523803210552, 0.1)); #21331=CARTESIAN_POINT('Ctrl Pts',(-2.79477300549081,-3.18523803210552, 0.)); #21332=CARTESIAN_POINT('Ctrl Pts',(-2.79477300549081,-3.18523803210552, 0.1)); #21333=CARTESIAN_POINT('Ctrl Pts',(-2.83392317020551,-3.22936782303394, 0.)); #21334=CARTESIAN_POINT('Ctrl Pts',(-2.83392317020551,-3.22936782303394, 0.1)); #21335=CARTESIAN_POINT('Ctrl Pts',(-2.83392317020551,-3.26920483274364, 0.)); #21336=CARTESIAN_POINT('Ctrl Pts',(-2.83392317020551,-3.26920483274364, 0.1)); #21337=CARTESIAN_POINT('',(-2.76283471322356,-3.18523803210552,0.)); #21338=CARTESIAN_POINT('Ctrl Pts',(-2.83392317020551,-3.26920483274364, 0.)); #21339=CARTESIAN_POINT('Ctrl Pts',(-2.83392317020551,-3.22936782303394, 0.)); #21340=CARTESIAN_POINT('Ctrl Pts',(-2.79477300549081,-3.18523803210552, 0.)); #21341=CARTESIAN_POINT('Ctrl Pts',(-2.76283471322356,-3.18523803210552, 0.)); #21342=CARTESIAN_POINT('',(-2.76283471322356,-3.18523803210552,0.1)); #21343=CARTESIAN_POINT('Ctrl Pts',(-2.76283471322356,-3.18523803210552, 0.1)); #21344=CARTESIAN_POINT('Ctrl Pts',(-2.79477300549081,-3.18523803210552, 0.1)); #21345=CARTESIAN_POINT('Ctrl Pts',(-2.83392317020551,-3.22936782303394, 0.1)); #21346=CARTESIAN_POINT('Ctrl Pts',(-2.83392317020551,-3.26920483274364, 0.1)); #21347=CARTESIAN_POINT('',(-2.76283471322356,-3.18523803210552,0.)); #21348=CARTESIAN_POINT('Ctrl Pts',(-2.69191796749035,-3.26920483274364, 0.)); #21349=CARTESIAN_POINT('Ctrl Pts',(-2.69191796749035,-3.26920483274364, 0.1)); #21350=CARTESIAN_POINT('Ctrl Pts',(-2.69191796749035,-3.22919611178519, 0.)); #21351=CARTESIAN_POINT('Ctrl Pts',(-2.69191796749035,-3.22919611178519, 0.1)); #21352=CARTESIAN_POINT('Ctrl Pts',(-2.7305529984588,-3.18523803210552,0.)); #21353=CARTESIAN_POINT('Ctrl Pts',(-2.7305529984588,-3.18523803210552,0.1)); #21354=CARTESIAN_POINT('Ctrl Pts',(-2.76283471322356,-3.18523803210552, 0.)); #21355=CARTESIAN_POINT('Ctrl Pts',(-2.76283471322356,-3.18523803210552, 0.1)); #21356=CARTESIAN_POINT('',(-2.69191796749035,-3.26920483274364,0.)); #21357=CARTESIAN_POINT('Ctrl Pts',(-2.76283471322356,-3.18523803210552, 0.)); #21358=CARTESIAN_POINT('Ctrl Pts',(-2.7305529984588,-3.18523803210552,0.)); #21359=CARTESIAN_POINT('Ctrl Pts',(-2.69191796749035,-3.22919611178519, 0.)); #21360=CARTESIAN_POINT('Ctrl Pts',(-2.69191796749035,-3.26920483274364, 0.)); #21361=CARTESIAN_POINT('',(-2.69191796749035,-3.26920483274364,0.1)); #21362=CARTESIAN_POINT('Ctrl Pts',(-2.69191796749035,-3.26920483274364, 0.1)); #21363=CARTESIAN_POINT('Ctrl Pts',(-2.69191796749035,-3.22919611178519, 0.1)); #21364=CARTESIAN_POINT('Ctrl Pts',(-2.7305529984588,-3.18523803210552,0.1)); #21365=CARTESIAN_POINT('Ctrl Pts',(-2.76283471322356,-3.18523803210552, 0.1)); #21366=CARTESIAN_POINT('',(-2.69191796749035,-3.26920483274364,0.)); #21367=CARTESIAN_POINT('Ctrl Pts',(-2.76283471322356,-3.35317163338175, 0.)); #21368=CARTESIAN_POINT('Ctrl Pts',(-2.76283471322356,-3.35317163338175, 0.1)); #21369=CARTESIAN_POINT('Ctrl Pts',(-2.7305529984588,-3.35317163338175,0.)); #21370=CARTESIAN_POINT('Ctrl Pts',(-2.7305529984588,-3.35317163338175,0.1)); #21371=CARTESIAN_POINT('Ctrl Pts',(-2.69191796749035,-3.30938526495083, 0.)); #21372=CARTESIAN_POINT('Ctrl Pts',(-2.69191796749035,-3.30938526495083, 0.1)); #21373=CARTESIAN_POINT('Ctrl Pts',(-2.69191796749035,-3.26920483274364, 0.)); #21374=CARTESIAN_POINT('Ctrl Pts',(-2.69191796749035,-3.26920483274364, 0.1)); #21375=CARTESIAN_POINT('Ctrl Pts',(-2.69191796749035,-3.26920483274364, 0.)); #21376=CARTESIAN_POINT('Ctrl Pts',(-2.69191796749035,-3.30938526495083, 0.)); #21377=CARTESIAN_POINT('Ctrl Pts',(-2.7305529984588,-3.35317163338175,0.)); #21378=CARTESIAN_POINT('Ctrl Pts',(-2.76283471322356,-3.35317163338175, 0.)); #21379=CARTESIAN_POINT('Ctrl Pts',(-2.76283471322356,-3.35317163338175, 0.1)); #21380=CARTESIAN_POINT('Ctrl Pts',(-2.7305529984588,-3.35317163338175,0.1)); #21381=CARTESIAN_POINT('Ctrl Pts',(-2.69191796749035,-3.30938526495083, 0.1)); #21382=CARTESIAN_POINT('Ctrl Pts',(-2.69191796749035,-3.26920483274364, 0.1)); #21383=CARTESIAN_POINT('Origin',(-2.76284360437011,-3.26924527821946,0.)); #21384=CARTESIAN_POINT('Origin',(-2.76284360437011,-3.26924527821946,0.1)); #21385=CARTESIAN_POINT('Origin',(-2.64830331030818,-3.25151857412252,0.)); #21386=CARTESIAN_POINT('',(-2.64830331030818,-3.25151857412252,0.)); #21387=CARTESIAN_POINT('',(-2.56433650967007,-3.25151857412252,0.)); #21388=CARTESIAN_POINT('',(-2.62588019159463,-3.25151857412252,0.)); #21389=CARTESIAN_POINT('',(-2.64830331030818,-3.25151857412252,0.1)); #21390=CARTESIAN_POINT('',(-2.64830331030818,-3.25151857412252,0.)); #21391=CARTESIAN_POINT('',(-2.56433650967007,-3.25151857412252,0.1)); #21392=CARTESIAN_POINT('',(-2.62588019159463,-3.25151857412252,0.1)); #21393=CARTESIAN_POINT('',(-2.56433650967007,-3.25151857412252,0.)); #21394=CARTESIAN_POINT('Ctrl Pts',(-2.63525325540328,-3.21975199310401, 0.)); #21395=CARTESIAN_POINT('Ctrl Pts',(-2.63525325540328,-3.21975199310401, 0.1)); #21396=CARTESIAN_POINT('Ctrl Pts',(-2.64126314910948,-3.22610530930771, 0.)); #21397=CARTESIAN_POINT('Ctrl Pts',(-2.64126314910948,-3.22610530930771, 0.1)); #21398=CARTESIAN_POINT('Ctrl Pts',(-2.64744475406443,-3.24138761044635, 0.)); #21399=CARTESIAN_POINT('Ctrl Pts',(-2.64744475406443,-3.24138761044635, 0.1)); #21400=CARTESIAN_POINT('Ctrl Pts',(-2.64830331030818,-3.25151857412252, 0.)); #21401=CARTESIAN_POINT('Ctrl Pts',(-2.64830331030818,-3.25151857412252, 0.1)); #21402=CARTESIAN_POINT('',(-2.63525325540328,-3.21975199310401,0.)); #21403=CARTESIAN_POINT('Ctrl Pts',(-2.63525325540328,-3.21975199310401, 0.)); #21404=CARTESIAN_POINT('Ctrl Pts',(-2.64126314910948,-3.22610530930771, 0.)); #21405=CARTESIAN_POINT('Ctrl Pts',(-2.64744475406443,-3.24138761044635, 0.)); #21406=CARTESIAN_POINT('Ctrl Pts',(-2.64830331030818,-3.25151857412252, 0.)); #21407=CARTESIAN_POINT('',(-2.63525325540328,-3.21975199310401,0.1)); #21408=CARTESIAN_POINT('',(-2.63525325540328,-3.21975199310401,0.)); #21409=CARTESIAN_POINT('Ctrl Pts',(-2.64830331030818,-3.25151857412252, 0.1)); #21410=CARTESIAN_POINT('Ctrl Pts',(-2.64744475406443,-3.24138761044635, 0.1)); #21411=CARTESIAN_POINT('Ctrl Pts',(-2.64126314910948,-3.22610530930771, 0.1)); #21412=CARTESIAN_POINT('Ctrl Pts',(-2.63525325540328,-3.21975199310401, 0.1)); #21413=CARTESIAN_POINT('Ctrl Pts',(-2.60348667438477,-3.20721707194536, 0.)); #21414=CARTESIAN_POINT('Ctrl Pts',(-2.60348667438477,-3.20721707194536, 0.1)); #21415=CARTESIAN_POINT('Ctrl Pts',(-2.61413277180719,-3.20721707194536, 0.)); #21416=CARTESIAN_POINT('Ctrl Pts',(-2.61413277180719,-3.20721707194536, 0.1)); #21417=CARTESIAN_POINT('Ctrl Pts',(-2.62907165044832,-3.21357038814906, 0.)); #21418=CARTESIAN_POINT('Ctrl Pts',(-2.62907165044832,-3.21357038814906, 0.1)); #21419=CARTESIAN_POINT('Ctrl Pts',(-2.63525325540328,-3.21975199310401, 0.)); #21420=CARTESIAN_POINT('Ctrl Pts',(-2.63525325540328,-3.21975199310401, 0.1)); #21421=CARTESIAN_POINT('',(-2.60348667438477,-3.20721707194536,0.)); #21422=CARTESIAN_POINT('Ctrl Pts',(-2.60348667438477,-3.20721707194536, 0.)); #21423=CARTESIAN_POINT('Ctrl Pts',(-2.61413277180719,-3.20721707194536, 0.)); #21424=CARTESIAN_POINT('Ctrl Pts',(-2.62907165044832,-3.21357038814906, 0.)); #21425=CARTESIAN_POINT('Ctrl Pts',(-2.63525325540328,-3.21975199310401, 0.)); #21426=CARTESIAN_POINT('',(-2.60348667438477,-3.20721707194536,0.1)); #21427=CARTESIAN_POINT('',(-2.60348667438477,-3.20721707194536,0.)); #21428=CARTESIAN_POINT('Ctrl Pts',(-2.63525325540328,-3.21975199310401, 0.1)); #21429=CARTESIAN_POINT('Ctrl Pts',(-2.62907165044832,-3.21357038814906, 0.1)); #21430=CARTESIAN_POINT('Ctrl Pts',(-2.61413277180719,-3.20721707194536, 0.1)); #21431=CARTESIAN_POINT('Ctrl Pts',(-2.60348667438477,-3.20721707194536, 0.1)); #21432=CARTESIAN_POINT('Ctrl Pts',(-2.57343720585375,-3.21958028185526, 0.)); #21433=CARTESIAN_POINT('Ctrl Pts',(-2.57343720585375,-3.21958028185526, 0.1)); #21434=CARTESIAN_POINT('Ctrl Pts',(-2.57807340956996,-3.21357038814906, 0.)); #21435=CARTESIAN_POINT('Ctrl Pts',(-2.57807340956996,-3.21357038814906, 0.1)); #21436=CARTESIAN_POINT('Ctrl Pts',(-2.5926688657136,-3.20721707194536,0.)); #21437=CARTESIAN_POINT('Ctrl Pts',(-2.5926688657136,-3.20721707194536,0.1)); #21438=CARTESIAN_POINT('Ctrl Pts',(-2.60348667438477,-3.20721707194536, 0.)); #21439=CARTESIAN_POINT('Ctrl Pts',(-2.60348667438477,-3.20721707194536, 0.1)); #21440=CARTESIAN_POINT('',(-2.57343720585375,-3.21958028185526,0.)); #21441=CARTESIAN_POINT('Ctrl Pts',(-2.57343720585375,-3.21958028185526, 0.)); #21442=CARTESIAN_POINT('Ctrl Pts',(-2.57807340956996,-3.21357038814906, 0.)); #21443=CARTESIAN_POINT('Ctrl Pts',(-2.5926688657136,-3.20721707194536,0.)); #21444=CARTESIAN_POINT('Ctrl Pts',(-2.60348667438477,-3.20721707194536, 0.)); #21445=CARTESIAN_POINT('',(-2.57343720585375,-3.21958028185526,0.1)); #21446=CARTESIAN_POINT('',(-2.57343720585375,-3.21958028185526,0.)); #21447=CARTESIAN_POINT('Ctrl Pts',(-2.60348667438477,-3.20721707194536, 0.1)); #21448=CARTESIAN_POINT('Ctrl Pts',(-2.5926688657136,-3.20721707194536,0.1)); #21449=CARTESIAN_POINT('Ctrl Pts',(-2.57807340956996,-3.21357038814906, 0.1)); #21450=CARTESIAN_POINT('Ctrl Pts',(-2.57343720585375,-3.21958028185526, 0.1)); #21451=CARTESIAN_POINT('Ctrl Pts',(-2.56433650967007,-3.25151857412252, 0.)); #21452=CARTESIAN_POINT('Ctrl Pts',(-2.56433650967007,-3.25151857412252, 0.1)); #21453=CARTESIAN_POINT('Ctrl Pts',(-2.56467993216756,-3.24070076545135, 0.)); #21454=CARTESIAN_POINT('Ctrl Pts',(-2.56467993216756,-3.24070076545135, 0.1)); #21455=CARTESIAN_POINT('Ctrl Pts',(-2.56914442463503,-3.22490333056647, 0.)); #21456=CARTESIAN_POINT('Ctrl Pts',(-2.56914442463503,-3.22490333056647, 0.1)); #21457=CARTESIAN_POINT('Ctrl Pts',(-2.57343720585375,-3.21958028185526, 0.)); #21458=CARTESIAN_POINT('Ctrl Pts',(-2.57343720585375,-3.21958028185526, 0.1)); #21459=CARTESIAN_POINT('Ctrl Pts',(-2.56433650967007,-3.25151857412252, 0.)); #21460=CARTESIAN_POINT('Ctrl Pts',(-2.56467993216756,-3.24070076545135, 0.)); #21461=CARTESIAN_POINT('Ctrl Pts',(-2.56914442463503,-3.22490333056647, 0.)); #21462=CARTESIAN_POINT('Ctrl Pts',(-2.57343720585375,-3.21958028185526, 0.)); #21463=CARTESIAN_POINT('Ctrl Pts',(-2.57343720585375,-3.21958028185526, 0.1)); #21464=CARTESIAN_POINT('Ctrl Pts',(-2.56914442463503,-3.22490333056647, 0.1)); #21465=CARTESIAN_POINT('Ctrl Pts',(-2.56467993216756,-3.24070076545135, 0.1)); #21466=CARTESIAN_POINT('Ctrl Pts',(-2.56433650967007,-3.25151857412252, 0.1)); #21467=CARTESIAN_POINT('Ctrl Pts',(-2.60194127314603,-3.18523803210552, 0.)); #21468=CARTESIAN_POINT('Ctrl Pts',(-2.60194127314603,-3.18523803210552, 0.1)); #21469=CARTESIAN_POINT('Ctrl Pts',(-2.63473812165703,-3.18523803210552, 0.)); #21470=CARTESIAN_POINT('Ctrl Pts',(-2.63473812165703,-3.18523803210552, 0.1)); #21471=CARTESIAN_POINT('Ctrl Pts',(-2.67543368761047,-3.23125664677017, 0.)); #21472=CARTESIAN_POINT('Ctrl Pts',(-2.67543368761047,-3.23125664677017, 0.1)); #21473=CARTESIAN_POINT('Ctrl Pts',(-2.67543368761047,-3.27006338898738, 0.)); #21474=CARTESIAN_POINT('Ctrl Pts',(-2.67543368761047,-3.27006338898738, 0.1)); #21475=CARTESIAN_POINT('',(-2.67543368761047,-3.27006338898738,0.)); #21476=CARTESIAN_POINT('',(-2.60194127314603,-3.18523803210552,0.)); #21477=CARTESIAN_POINT('Ctrl Pts',(-2.67543368761047,-3.27006338898738, 0.)); #21478=CARTESIAN_POINT('Ctrl Pts',(-2.67543368761047,-3.23125664677017, 0.)); #21479=CARTESIAN_POINT('Ctrl Pts',(-2.63473812165703,-3.18523803210552, 0.)); #21480=CARTESIAN_POINT('Ctrl Pts',(-2.60194127314603,-3.18523803210552, 0.)); #21481=CARTESIAN_POINT('',(-2.67543368761047,-3.27006338898738,0.1)); #21482=CARTESIAN_POINT('',(-2.67543368761047,-3.27006338898738,0.)); #21483=CARTESIAN_POINT('',(-2.60194127314603,-3.18523803210552,0.1)); #21484=CARTESIAN_POINT('Ctrl Pts',(-2.60194127314603,-3.18523803210552, 0.1)); #21485=CARTESIAN_POINT('Ctrl Pts',(-2.63473812165703,-3.18523803210552, 0.1)); #21486=CARTESIAN_POINT('Ctrl Pts',(-2.67543368761047,-3.23125664677017, 0.1)); #21487=CARTESIAN_POINT('Ctrl Pts',(-2.67543368761047,-3.27006338898738, 0.1)); #21488=CARTESIAN_POINT('',(-2.60194127314603,-3.18523803210552,0.)); #21489=CARTESIAN_POINT('Ctrl Pts',(-2.55592265848138,-3.20292429072664, 0.)); #21490=CARTESIAN_POINT('Ctrl Pts',(-2.55592265848138,-3.20292429072664, 0.1)); #21491=CARTESIAN_POINT('Ctrl Pts',(-2.56433650967007,-3.19382359454296, 0.)); #21492=CARTESIAN_POINT('Ctrl Pts',(-2.56433650967007,-3.19382359454296, 0.1)); #21493=CARTESIAN_POINT('Ctrl Pts',(-2.58717410575364,-3.18523803210552, 0.)); #21494=CARTESIAN_POINT('Ctrl Pts',(-2.58717410575364,-3.18523803210552, 0.1)); #21495=CARTESIAN_POINT('Ctrl Pts',(-2.60194127314603,-3.18523803210552, 0.)); #21496=CARTESIAN_POINT('Ctrl Pts',(-2.60194127314603,-3.18523803210552, 0.1)); #21497=CARTESIAN_POINT('',(-2.55592265848138,-3.20292429072664,0.)); #21498=CARTESIAN_POINT('Ctrl Pts',(-2.60194127314603,-3.18523803210552, 0.)); #21499=CARTESIAN_POINT('Ctrl Pts',(-2.58717410575364,-3.18523803210552, 0.)); #21500=CARTESIAN_POINT('Ctrl Pts',(-2.56433650967007,-3.19382359454296, 0.)); #21501=CARTESIAN_POINT('Ctrl Pts',(-2.55592265848138,-3.20292429072664, 0.)); #21502=CARTESIAN_POINT('',(-2.55592265848138,-3.20292429072664,0.1)); #21503=CARTESIAN_POINT('Ctrl Pts',(-2.55592265848138,-3.20292429072664, 0.1)); #21504=CARTESIAN_POINT('Ctrl Pts',(-2.56433650967007,-3.19382359454296, 0.1)); #21505=CARTESIAN_POINT('Ctrl Pts',(-2.58717410575364,-3.18523803210552, 0.1)); #21506=CARTESIAN_POINT('Ctrl Pts',(-2.60194127314603,-3.18523803210552, 0.1)); #21507=CARTESIAN_POINT('',(-2.55592265848138,-3.20292429072664,0.)); #21508=CARTESIAN_POINT('Ctrl Pts',(-2.53823639986027,-3.25735675657998, 0.)); #21509=CARTESIAN_POINT('Ctrl Pts',(-2.53823639986027,-3.25735675657998, 0.1)); #21510=CARTESIAN_POINT('Ctrl Pts',(-2.53823639986027,-3.23829680796887, 0.)); #21511=CARTESIAN_POINT('Ctrl Pts',(-2.53823639986027,-3.23829680796887, 0.1)); #21512=CARTESIAN_POINT('Ctrl Pts',(-2.54733709604395,-3.21202498691032, 0.)); #21513=CARTESIAN_POINT('Ctrl Pts',(-2.54733709604395,-3.21202498691032, 0.1)); #21514=CARTESIAN_POINT('Ctrl Pts',(-2.55592265848138,-3.20292429072664, 0.)); #21515=CARTESIAN_POINT('Ctrl Pts',(-2.55592265848138,-3.20292429072664, 0.1)); #21516=CARTESIAN_POINT('',(-2.53823639986027,-3.25735675657998,0.)); #21517=CARTESIAN_POINT('Ctrl Pts',(-2.55592265848138,-3.20292429072664, 0.)); #21518=CARTESIAN_POINT('Ctrl Pts',(-2.54733709604395,-3.21202498691032, 0.)); #21519=CARTESIAN_POINT('Ctrl Pts',(-2.53823639986027,-3.23829680796887, 0.)); #21520=CARTESIAN_POINT('Ctrl Pts',(-2.53823639986027,-3.25735675657998, 0.)); #21521=CARTESIAN_POINT('',(-2.53823639986027,-3.25735675657998,0.1)); #21522=CARTESIAN_POINT('Ctrl Pts',(-2.53823639986027,-3.25735675657998, 0.1)); #21523=CARTESIAN_POINT('Ctrl Pts',(-2.53823639986027,-3.23829680796887, 0.1)); #21524=CARTESIAN_POINT('Ctrl Pts',(-2.54733709604395,-3.21202498691032, 0.1)); #21525=CARTESIAN_POINT('Ctrl Pts',(-2.55592265848138,-3.20292429072664, 0.1)); #21526=CARTESIAN_POINT('',(-2.53823639986027,-3.25735675657998,0.)); #21527=CARTESIAN_POINT('Origin',(-2.53823639986027,-3.27195221272361,0.)); #21528=CARTESIAN_POINT('',(-2.53823639986027,-3.27195221272361,0.)); #21529=CARTESIAN_POINT('',(-2.53823639986027,-3.25735675657998,0.)); #21530=CARTESIAN_POINT('',(-2.53823639986027,-3.27195221272361,0.1)); #21531=CARTESIAN_POINT('',(-2.53823639986027,-3.25735675657998,0.1)); #21532=CARTESIAN_POINT('',(-2.53823639986027,-3.27195221272361,0.)); #21533=CARTESIAN_POINT('Origin',(-2.64830331030818,-3.27195221272361,0.)); #21534=CARTESIAN_POINT('',(-2.64830331030818,-3.27195221272361,0.)); #21535=CARTESIAN_POINT('',(-2.53823639986027,-3.27195221272361,0.)); #21536=CARTESIAN_POINT('',(-2.64830331030818,-3.27195221272361,0.1)); #21537=CARTESIAN_POINT('',(-2.53823639986027,-3.27195221272361,0.1)); #21538=CARTESIAN_POINT('',(-2.64830331030818,-3.27195221272361,0.)); #21539=CARTESIAN_POINT('Ctrl Pts',(-2.59575966819108,-3.32896034730818, 0.)); #21540=CARTESIAN_POINT('Ctrl Pts',(-2.59575966819108,-3.32896034730818, 0.1)); #21541=CARTESIAN_POINT('Ctrl Pts',(-2.62048608801089,-3.32896034730818, 0.)); #21542=CARTESIAN_POINT('Ctrl Pts',(-2.62048608801089,-3.32896034730818, 0.1)); #21543=CARTESIAN_POINT('Ctrl Pts',(-2.64830331030818,-3.29959772377215, 0.)); #21544=CARTESIAN_POINT('Ctrl Pts',(-2.64830331030818,-3.29959772377215, 0.1)); #21545=CARTESIAN_POINT('Ctrl Pts',(-2.64830331030818,-3.27195221272361, 0.)); #21546=CARTESIAN_POINT('Ctrl Pts',(-2.64830331030818,-3.27195221272361, 0.1)); #21547=CARTESIAN_POINT('',(-2.59575966819108,-3.32896034730818,0.)); #21548=CARTESIAN_POINT('Ctrl Pts',(-2.64830331030818,-3.27195221272361, 0.)); #21549=CARTESIAN_POINT('Ctrl Pts',(-2.64830331030818,-3.29959772377215, 0.)); #21550=CARTESIAN_POINT('Ctrl Pts',(-2.62048608801089,-3.32896034730818, 0.)); #21551=CARTESIAN_POINT('Ctrl Pts',(-2.59575966819108,-3.32896034730818, 0.)); #21552=CARTESIAN_POINT('',(-2.59575966819108,-3.32896034730818,0.1)); #21553=CARTESIAN_POINT('Ctrl Pts',(-2.59575966819108,-3.32896034730818, 0.1)); #21554=CARTESIAN_POINT('Ctrl Pts',(-2.62048608801089,-3.32896034730818, 0.1)); #21555=CARTESIAN_POINT('Ctrl Pts',(-2.64830331030818,-3.29959772377215, 0.1)); #21556=CARTESIAN_POINT('Ctrl Pts',(-2.64830331030818,-3.27195221272361, 0.1)); #21557=CARTESIAN_POINT('',(-2.59575966819108,-3.32896034730818,0.)); #21558=CARTESIAN_POINT('Ctrl Pts',(-2.56313453092883,-3.32192018610948, 0.)); #21559=CARTESIAN_POINT('Ctrl Pts',(-2.56313453092883,-3.32192018610948, 0.1)); #21560=CARTESIAN_POINT('Ctrl Pts',(-2.57000298087877,-3.32501098858696, 0.)); #21561=CARTESIAN_POINT('Ctrl Pts',(-2.57000298087877,-3.32501098858696, 0.1)); #21562=CARTESIAN_POINT('Ctrl Pts',(-2.58700239450489,-3.32896034730818, 0.)); #21563=CARTESIAN_POINT('Ctrl Pts',(-2.58700239450489,-3.32896034730818, 0.1)); #21564=CARTESIAN_POINT('Ctrl Pts',(-2.59575966819108,-3.32896034730818, 0.)); #21565=CARTESIAN_POINT('Ctrl Pts',(-2.59575966819108,-3.32896034730818, 0.1)); #21566=CARTESIAN_POINT('',(-2.56313453092883,-3.32192018610948,0.)); #21567=CARTESIAN_POINT('Ctrl Pts',(-2.59575966819108,-3.32896034730818, 0.)); #21568=CARTESIAN_POINT('Ctrl Pts',(-2.58700239450489,-3.32896034730818, 0.)); #21569=CARTESIAN_POINT('Ctrl Pts',(-2.57000298087877,-3.32501098858696, 0.)); #21570=CARTESIAN_POINT('Ctrl Pts',(-2.56313453092883,-3.32192018610948, 0.)); #21571=CARTESIAN_POINT('',(-2.56313453092883,-3.32192018610948,0.1)); #21572=CARTESIAN_POINT('Ctrl Pts',(-2.56313453092883,-3.32192018610948, 0.1)); #21573=CARTESIAN_POINT('Ctrl Pts',(-2.57000298087877,-3.32501098858696, 0.1)); #21574=CARTESIAN_POINT('Ctrl Pts',(-2.58700239450489,-3.32896034730818, 0.1)); #21575=CARTESIAN_POINT('Ctrl Pts',(-2.59575966819108,-3.32896034730818, 0.1)); #21576=CARTESIAN_POINT('',(-2.56313453092883,-3.32192018610948,0.)); #21577=CARTESIAN_POINT('Ctrl Pts',(-2.54270089232773,-3.30972868744833, 0.)); #21578=CARTESIAN_POINT('Ctrl Pts',(-2.54270089232773,-3.30972868744833, 0.1)); #21579=CARTESIAN_POINT('Ctrl Pts',(-2.54596340605396,-3.31247606742831, 0.)); #21580=CARTESIAN_POINT('Ctrl Pts',(-2.54596340605396,-3.31247606742831, 0.1)); #21581=CARTESIAN_POINT('Ctrl Pts',(-2.55592265848138,-3.31848596113451, 0.)); #21582=CARTESIAN_POINT('Ctrl Pts',(-2.55592265848138,-3.31848596113451, 0.1)); #21583=CARTESIAN_POINT('Ctrl Pts',(-2.56313453092883,-3.32192018610948, 0.)); #21584=CARTESIAN_POINT('Ctrl Pts',(-2.56313453092883,-3.32192018610948, 0.1)); #21585=CARTESIAN_POINT('',(-2.54270089232773,-3.30972868744833,0.)); #21586=CARTESIAN_POINT('Ctrl Pts',(-2.56313453092883,-3.32192018610948, 0.)); #21587=CARTESIAN_POINT('Ctrl Pts',(-2.55592265848138,-3.31848596113451, 0.)); #21588=CARTESIAN_POINT('Ctrl Pts',(-2.54596340605396,-3.31247606742831, 0.)); #21589=CARTESIAN_POINT('Ctrl Pts',(-2.54270089232773,-3.30972868744833, 0.)); #21590=CARTESIAN_POINT('',(-2.54270089232773,-3.30972868744833,0.1)); #21591=CARTESIAN_POINT('Ctrl Pts',(-2.54270089232773,-3.30972868744833, 0.1)); #21592=CARTESIAN_POINT('Ctrl Pts',(-2.54596340605396,-3.31247606742831, 0.1)); #21593=CARTESIAN_POINT('Ctrl Pts',(-2.55592265848138,-3.31848596113451, 0.1)); #21594=CARTESIAN_POINT('Ctrl Pts',(-2.56313453092883,-3.32192018610948, 0.1)); #21595=CARTESIAN_POINT('',(-2.54270089232773,-3.30972868744833,0.)); #21596=CARTESIAN_POINT('Origin',(-2.54115549108899,-3.30972868744833,0.)); #21597=CARTESIAN_POINT('',(-2.54115549108899,-3.30972868744833,0.)); #21598=CARTESIAN_POINT('',(-2.54270089232773,-3.30972868744833,0.)); #21599=CARTESIAN_POINT('',(-2.54115549108899,-3.30972868744833,0.1)); #21600=CARTESIAN_POINT('',(-2.54270089232773,-3.30972868744833,0.1)); #21601=CARTESIAN_POINT('',(-2.54115549108899,-3.30972868744833,0.)); #21602=CARTESIAN_POINT('Origin',(-2.54115549108899,-3.3389195997356,0.)); #21603=CARTESIAN_POINT('',(-2.54115549108899,-3.3389195997356,0.)); #21604=CARTESIAN_POINT('',(-2.54115549108899,-3.30972868744833,0.)); #21605=CARTESIAN_POINT('',(-2.54115549108899,-3.3389195997356,0.1)); #21606=CARTESIAN_POINT('',(-2.54115549108899,-3.30972868744833,0.1)); #21607=CARTESIAN_POINT('',(-2.54115549108899,-3.3389195997356,0.)); #21608=CARTESIAN_POINT('Ctrl Pts',(-2.56536677716256,-3.34784858467054, 0.)); #21609=CARTESIAN_POINT('Ctrl Pts',(-2.56536677716256,-3.34784858467054, 0.1)); #21610=CARTESIAN_POINT('Ctrl Pts',(-2.5598720172026,-3.3463031834318,0.)); #21611=CARTESIAN_POINT('Ctrl Pts',(-2.5598720172026,-3.3463031834318,0.1)); #21612=CARTESIAN_POINT('Ctrl Pts',(-2.54579169480521,-3.34080842347184, 0.)); #21613=CARTESIAN_POINT('Ctrl Pts',(-2.54579169480521,-3.34080842347184, 0.1)); #21614=CARTESIAN_POINT('Ctrl Pts',(-2.54115549108899,-3.3389195997356,0.)); #21615=CARTESIAN_POINT('Ctrl Pts',(-2.54115549108899,-3.3389195997356,0.1)); #21616=CARTESIAN_POINT('',(-2.56536677716256,-3.34784858467054,0.)); #21617=CARTESIAN_POINT('Ctrl Pts',(-2.54115549108899,-3.3389195997356,0.)); #21618=CARTESIAN_POINT('Ctrl Pts',(-2.54579169480521,-3.34080842347184, 0.)); #21619=CARTESIAN_POINT('Ctrl Pts',(-2.5598720172026,-3.3463031834318,0.)); #21620=CARTESIAN_POINT('Ctrl Pts',(-2.56536677716256,-3.34784858467054, 0.)); #21621=CARTESIAN_POINT('',(-2.56536677716256,-3.34784858467054,0.1)); #21622=CARTESIAN_POINT('Ctrl Pts',(-2.56536677716256,-3.34784858467054, 0.1)); #21623=CARTESIAN_POINT('Ctrl Pts',(-2.5598720172026,-3.3463031834318,0.1)); #21624=CARTESIAN_POINT('Ctrl Pts',(-2.54579169480521,-3.34080842347184, 0.1)); #21625=CARTESIAN_POINT('Ctrl Pts',(-2.54115549108899,-3.3389195997356,0.1)); #21626=CARTESIAN_POINT('',(-2.56536677716256,-3.34784858467054,0.)); #21627=CARTESIAN_POINT('Ctrl Pts',(-2.59541624569358,-3.352313077138,0.)); #21628=CARTESIAN_POINT('Ctrl Pts',(-2.59541624569358,-3.352313077138,0.1)); #21629=CARTESIAN_POINT('Ctrl Pts',(-2.58580041576365,-3.352313077138,0.)); #21630=CARTESIAN_POINT('Ctrl Pts',(-2.58580041576365,-3.352313077138,0.1)); #21631=CARTESIAN_POINT('Ctrl Pts',(-2.57309378335625,-3.35008083090427, 0.)); #21632=CARTESIAN_POINT('Ctrl Pts',(-2.57309378335625,-3.35008083090427, 0.1)); #21633=CARTESIAN_POINT('Ctrl Pts',(-2.56536677716256,-3.34784858467054, 0.)); #21634=CARTESIAN_POINT('Ctrl Pts',(-2.56536677716256,-3.34784858467054, 0.1)); #21635=CARTESIAN_POINT('',(-2.59541624569358,-3.352313077138,0.)); #21636=CARTESIAN_POINT('Ctrl Pts',(-2.56536677716256,-3.34784858467054, 0.)); #21637=CARTESIAN_POINT('Ctrl Pts',(-2.57309378335625,-3.35008083090427, 0.)); #21638=CARTESIAN_POINT('Ctrl Pts',(-2.58580041576365,-3.352313077138,0.)); #21639=CARTESIAN_POINT('Ctrl Pts',(-2.59541624569358,-3.352313077138,0.)); #21640=CARTESIAN_POINT('',(-2.59541624569358,-3.352313077138,0.1)); #21641=CARTESIAN_POINT('Ctrl Pts',(-2.59541624569358,-3.352313077138,0.1)); #21642=CARTESIAN_POINT('Ctrl Pts',(-2.58580041576365,-3.352313077138,0.1)); #21643=CARTESIAN_POINT('Ctrl Pts',(-2.57309378335625,-3.35008083090427, 0.1)); #21644=CARTESIAN_POINT('Ctrl Pts',(-2.56536677716256,-3.34784858467054, 0.1)); #21645=CARTESIAN_POINT('',(-2.59541624569358,-3.352313077138,0.)); #21646=CARTESIAN_POINT('Ctrl Pts',(-2.67543368761047,-3.27006338898738, 0.)); #21647=CARTESIAN_POINT('Ctrl Pts',(-2.67543368761047,-3.27006338898738, 0.1)); #21648=CARTESIAN_POINT('Ctrl Pts',(-2.67543368761047,-3.30955697619958, 0.)); #21649=CARTESIAN_POINT('Ctrl Pts',(-2.67543368761047,-3.30955697619958, 0.1)); #21650=CARTESIAN_POINT('Ctrl Pts',(-2.63353614291579,-3.352313077138,0.)); #21651=CARTESIAN_POINT('Ctrl Pts',(-2.63353614291579,-3.352313077138,0.1)); #21652=CARTESIAN_POINT('Ctrl Pts',(-2.59541624569358,-3.352313077138,0.)); #21653=CARTESIAN_POINT('Ctrl Pts',(-2.59541624569358,-3.352313077138,0.1)); #21654=CARTESIAN_POINT('Ctrl Pts',(-2.59541624569358,-3.352313077138,0.)); #21655=CARTESIAN_POINT('Ctrl Pts',(-2.63353614291579,-3.352313077138,0.)); #21656=CARTESIAN_POINT('Ctrl Pts',(-2.67543368761047,-3.30955697619958, 0.)); #21657=CARTESIAN_POINT('Ctrl Pts',(-2.67543368761047,-3.27006338898738, 0.)); #21658=CARTESIAN_POINT('Ctrl Pts',(-2.67543368761047,-3.27006338898738, 0.1)); #21659=CARTESIAN_POINT('Ctrl Pts',(-2.67543368761047,-3.30955697619958, 0.1)); #21660=CARTESIAN_POINT('Ctrl Pts',(-2.63353614291579,-3.352313077138,0.1)); #21661=CARTESIAN_POINT('Ctrl Pts',(-2.59541624569358,-3.352313077138,0.1)); #21662=CARTESIAN_POINT('Origin',(-2.60345707288108,-3.2789727215046,0.)); #21663=CARTESIAN_POINT('Origin',(-2.60345707288108,-3.2789727215046,0.1)); #21664=CARTESIAN_POINT('Origin',(-2.51059088881173,-3.12737134127721,0.)); #21665=CARTESIAN_POINT('',(-2.51059088881173,-3.34870714091428,0.)); #21666=CARTESIAN_POINT('',(-2.51059088881173,-3.12737134127721,0.)); #21667=CARTESIAN_POINT('',(-2.51059088881173,-3.34870714091428,0.)); #21668=CARTESIAN_POINT('',(-2.51059088881173,-3.34870714091428,0.1)); #21669=CARTESIAN_POINT('',(-2.51059088881173,-3.34870714091428,0.)); #21670=CARTESIAN_POINT('',(-2.51059088881173,-3.12737134127721,0.1)); #21671=CARTESIAN_POINT('',(-2.51059088881173,-3.34870714091428,0.1)); #21672=CARTESIAN_POINT('',(-2.51059088881173,-3.12737134127721,0.)); #21673=CARTESIAN_POINT('Origin',(-2.48380393400693,-3.12737134127721,0.)); #21674=CARTESIAN_POINT('',(-2.48380393400693,-3.12737134127721,0.)); #21675=CARTESIAN_POINT('',(-2.51059088881173,-3.12737134127721,0.)); #21676=CARTESIAN_POINT('',(-2.48380393400693,-3.12737134127721,0.1)); #21677=CARTESIAN_POINT('',(-2.51059088881173,-3.12737134127721,0.1)); #21678=CARTESIAN_POINT('',(-2.48380393400693,-3.12737134127721,0.)); #21679=CARTESIAN_POINT('Origin',(-2.48380393400693,-3.34870714091428,0.)); #21680=CARTESIAN_POINT('',(-2.48380393400693,-3.34870714091428,0.)); #21681=CARTESIAN_POINT('',(-2.48380393400693,-3.12737134127721,0.)); #21682=CARTESIAN_POINT('',(-2.48380393400693,-3.34870714091428,0.1)); #21683=CARTESIAN_POINT('',(-2.48380393400693,-3.12737134127721,0.1)); #21684=CARTESIAN_POINT('',(-2.48380393400693,-3.34870714091428,0.)); #21685=CARTESIAN_POINT('Origin',(-2.51059088881173,-3.34870714091428,0.)); #21686=CARTESIAN_POINT('',(-2.48380393400693,-3.34870714091428,0.)); #21687=CARTESIAN_POINT('',(-2.48380393400693,-3.34870714091428,0.1)); #21688=CARTESIAN_POINT('Origin',(-2.49719741140933,-3.23803924109575,0.)); #21689=CARTESIAN_POINT('Origin',(-2.49719741140933,-3.23803924109575,0.1)); #21690=CARTESIAN_POINT('Origin',(-2.15497689265318,-3.21185327566157,0.)); #21691=CARTESIAN_POINT('',(-2.15497689265318,-3.29994114626965,0.)); #21692=CARTESIAN_POINT('',(-2.15497689265318,-3.21185327566157,0.)); #21693=CARTESIAN_POINT('',(-2.15497689265318,-3.29994114626965,0.)); #21694=CARTESIAN_POINT('',(-2.15497689265318,-3.29994114626965,0.1)); #21695=CARTESIAN_POINT('',(-2.15497689265318,-3.29994114626965,0.)); #21696=CARTESIAN_POINT('',(-2.15497689265318,-3.21185327566157,0.1)); #21697=CARTESIAN_POINT('',(-2.15497689265318,-3.29994114626965,0.1)); #21698=CARTESIAN_POINT('',(-2.15497689265318,-3.21185327566157,0.)); #21699=CARTESIAN_POINT('Origin',(-2.1730065737718,-3.21185327566157,0.)); #21700=CARTESIAN_POINT('',(-2.1730065737718,-3.21185327566157,0.)); #21701=CARTESIAN_POINT('',(-2.15497689265318,-3.21185327566157,0.)); #21702=CARTESIAN_POINT('',(-2.1730065737718,-3.21185327566157,0.1)); #21703=CARTESIAN_POINT('',(-2.15497689265318,-3.21185327566157,0.1)); #21704=CARTESIAN_POINT('',(-2.1730065737718,-3.21185327566157,0.)); #21705=CARTESIAN_POINT('Origin',(-2.1730065737718,-3.18970252457299,0.)); #21706=CARTESIAN_POINT('',(-2.1730065737718,-3.18970252457299,0.)); #21707=CARTESIAN_POINT('',(-2.1730065737718,-3.21185327566157,0.)); #21708=CARTESIAN_POINT('',(-2.1730065737718,-3.18970252457299,0.1)); #21709=CARTESIAN_POINT('',(-2.1730065737718,-3.21185327566157,0.1)); #21710=CARTESIAN_POINT('',(-2.1730065737718,-3.18970252457299,0.)); #21711=CARTESIAN_POINT('Origin',(-2.15497689265318,-3.18970252457299,0.)); #21712=CARTESIAN_POINT('',(-2.15497689265318,-3.18970252457299,0.)); #21713=CARTESIAN_POINT('',(-2.1730065737718,-3.18970252457299,0.)); #21714=CARTESIAN_POINT('',(-2.15497689265318,-3.18970252457299,0.1)); #21715=CARTESIAN_POINT('',(-2.1730065737718,-3.18970252457299,0.1)); #21716=CARTESIAN_POINT('',(-2.15497689265318,-3.18970252457299,0.)); #21717=CARTESIAN_POINT('Origin',(-2.15497689265318,-3.14402733240584,0.)); #21718=CARTESIAN_POINT('',(-2.15497689265318,-3.14402733240584,0.)); #21719=CARTESIAN_POINT('',(-2.15497689265318,-3.18970252457299,0.)); #21720=CARTESIAN_POINT('',(-2.15497689265318,-3.14402733240584,0.1)); #21721=CARTESIAN_POINT('',(-2.15497689265318,-3.18970252457299,0.1)); #21722=CARTESIAN_POINT('',(-2.15497689265318,-3.14402733240584,0.)); #21723=CARTESIAN_POINT('Origin',(-2.12818993784839,-3.14402733240584,0.)); #21724=CARTESIAN_POINT('',(-2.12818993784839,-3.14402733240584,0.)); #21725=CARTESIAN_POINT('',(-2.15497689265318,-3.14402733240584,0.)); #21726=CARTESIAN_POINT('',(-2.12818993784839,-3.14402733240584,0.1)); #21727=CARTESIAN_POINT('',(-2.15497689265318,-3.14402733240584,0.1)); #21728=CARTESIAN_POINT('',(-2.12818993784839,-3.14402733240584,0.)); #21729=CARTESIAN_POINT('Origin',(-2.12818993784839,-3.18970252457299,0.)); #21730=CARTESIAN_POINT('',(-2.12818993784839,-3.18970252457299,0.)); #21731=CARTESIAN_POINT('',(-2.12818993784839,-3.14402733240584,0.)); #21732=CARTESIAN_POINT('',(-2.12818993784839,-3.18970252457299,0.1)); #21733=CARTESIAN_POINT('',(-2.12818993784839,-3.14402733240584,0.1)); #21734=CARTESIAN_POINT('',(-2.12818993784839,-3.18970252457299,0.)); #21735=CARTESIAN_POINT('Origin',(-2.07890880945751,-3.18970252457299,0.)); #21736=CARTESIAN_POINT('',(-2.07890880945751,-3.18970252457299,0.)); #21737=CARTESIAN_POINT('',(-2.12818993784839,-3.18970252457299,0.)); #21738=CARTESIAN_POINT('',(-2.07890880945751,-3.18970252457299,0.1)); #21739=CARTESIAN_POINT('',(-2.12818993784839,-3.18970252457299,0.1)); #21740=CARTESIAN_POINT('',(-2.07890880945751,-3.18970252457299,0.)); #21741=CARTESIAN_POINT('Origin',(-2.07890880945751,-3.21185327566157,0.)); #21742=CARTESIAN_POINT('',(-2.07890880945751,-3.21185327566157,0.)); #21743=CARTESIAN_POINT('',(-2.07890880945751,-3.18970252457299,0.)); #21744=CARTESIAN_POINT('',(-2.07890880945751,-3.21185327566157,0.1)); #21745=CARTESIAN_POINT('',(-2.07890880945751,-3.18970252457299,0.1)); #21746=CARTESIAN_POINT('',(-2.07890880945751,-3.21185327566157,0.)); #21747=CARTESIAN_POINT('Origin',(-2.12818993784839,-3.21185327566157,0.)); #21748=CARTESIAN_POINT('',(-2.12818993784839,-3.21185327566157,0.)); #21749=CARTESIAN_POINT('',(-2.07890880945751,-3.21185327566157,0.)); #21750=CARTESIAN_POINT('',(-2.12818993784839,-3.21185327566157,0.1)); #21751=CARTESIAN_POINT('',(-2.07890880945751,-3.21185327566157,0.1)); #21752=CARTESIAN_POINT('',(-2.12818993784839,-3.21185327566157,0.)); #21753=CARTESIAN_POINT('Origin',(-2.12818993784839,-3.28757793635975,0.)); #21754=CARTESIAN_POINT('',(-2.12818993784839,-3.28757793635975,0.)); #21755=CARTESIAN_POINT('',(-2.12818993784839,-3.21185327566157,0.)); #21756=CARTESIAN_POINT('',(-2.12818993784839,-3.28757793635975,0.1)); #21757=CARTESIAN_POINT('',(-2.12818993784839,-3.21185327566157,0.1)); #21758=CARTESIAN_POINT('',(-2.12818993784839,-3.28757793635975,0.)); #21759=CARTESIAN_POINT('Ctrl Pts',(-2.12441229037592,-3.31848596113451, 0.)); #21760=CARTESIAN_POINT('Ctrl Pts',(-2.12441229037592,-3.31848596113451, 0.1)); #21761=CARTESIAN_POINT('Ctrl Pts',(-2.12733138160464,-3.3128194899258,0.)); #21762=CARTESIAN_POINT('Ctrl Pts',(-2.12733138160464,-3.3128194899258,0.1)); #21763=CARTESIAN_POINT('Ctrl Pts',(-2.12818993784839,-3.29959772377215, 0.)); #21764=CARTESIAN_POINT('Ctrl Pts',(-2.12818993784839,-3.29959772377215, 0.1)); #21765=CARTESIAN_POINT('Ctrl Pts',(-2.12818993784839,-3.28757793635975, 0.)); #21766=CARTESIAN_POINT('Ctrl Pts',(-2.12818993784839,-3.28757793635975, 0.1)); #21767=CARTESIAN_POINT('',(-2.12441229037592,-3.31848596113451,0.)); #21768=CARTESIAN_POINT('Ctrl Pts',(-2.12818993784839,-3.28757793635975, 0.)); #21769=CARTESIAN_POINT('Ctrl Pts',(-2.12818993784839,-3.29959772377215, 0.)); #21770=CARTESIAN_POINT('Ctrl Pts',(-2.12733138160464,-3.3128194899258,0.)); #21771=CARTESIAN_POINT('Ctrl Pts',(-2.12441229037592,-3.31848596113451, 0.)); #21772=CARTESIAN_POINT('',(-2.12441229037592,-3.31848596113451,0.1)); #21773=CARTESIAN_POINT('Ctrl Pts',(-2.12441229037592,-3.31848596113451, 0.1)); #21774=CARTESIAN_POINT('Ctrl Pts',(-2.12733138160464,-3.3128194899258,0.1)); #21775=CARTESIAN_POINT('Ctrl Pts',(-2.12818993784839,-3.29959772377215, 0.1)); #21776=CARTESIAN_POINT('Ctrl Pts',(-2.12818993784839,-3.28757793635975, 0.1)); #21777=CARTESIAN_POINT('',(-2.12441229037592,-3.31848596113451,0.)); #21778=CARTESIAN_POINT('Ctrl Pts',(-2.10191811678984,-3.32844521356193, 0.)); #21779=CARTESIAN_POINT('Ctrl Pts',(-2.10191811678984,-3.32844521356193, 0.1)); #21780=CARTESIAN_POINT('Ctrl Pts',(-2.11119052422227,-3.32844521356193, 0.)); #21781=CARTESIAN_POINT('Ctrl Pts',(-2.11119052422227,-3.32844521356193, 0.1)); #21782=CARTESIAN_POINT('Ctrl Pts',(-2.12200833289343,-3.32346558734822, 0.)); #21783=CARTESIAN_POINT('Ctrl Pts',(-2.12200833289343,-3.32346558734822, 0.1)); #21784=CARTESIAN_POINT('Ctrl Pts',(-2.12441229037592,-3.31848596113451, 0.)); #21785=CARTESIAN_POINT('Ctrl Pts',(-2.12441229037592,-3.31848596113451, 0.1)); #21786=CARTESIAN_POINT('',(-2.10191811678984,-3.32844521356193,0.)); #21787=CARTESIAN_POINT('Ctrl Pts',(-2.12441229037592,-3.31848596113451, 0.)); #21788=CARTESIAN_POINT('Ctrl Pts',(-2.12200833289343,-3.32346558734822, 0.)); #21789=CARTESIAN_POINT('Ctrl Pts',(-2.11119052422227,-3.32844521356193, 0.)); #21790=CARTESIAN_POINT('Ctrl Pts',(-2.10191811678984,-3.32844521356193, 0.)); #21791=CARTESIAN_POINT('',(-2.10191811678984,-3.32844521356193,0.1)); #21792=CARTESIAN_POINT('Ctrl Pts',(-2.10191811678984,-3.32844521356193, 0.1)); #21793=CARTESIAN_POINT('Ctrl Pts',(-2.11119052422227,-3.32844521356193, 0.1)); #21794=CARTESIAN_POINT('Ctrl Pts',(-2.12200833289343,-3.32346558734822, 0.1)); #21795=CARTESIAN_POINT('Ctrl Pts',(-2.12441229037592,-3.31848596113451, 0.1)); #21796=CARTESIAN_POINT('',(-2.10191811678984,-3.32844521356193,0.)); #21797=CARTESIAN_POINT('Ctrl Pts',(-2.08045421069625,-3.32329387609947, 0.)); #21798=CARTESIAN_POINT('Ctrl Pts',(-2.08045421069625,-3.32329387609947, 0.1)); #21799=CARTESIAN_POINT('Ctrl Pts',(-2.08320159067623,-3.32449585484071, 0.)); #21800=CARTESIAN_POINT('Ctrl Pts',(-2.08320159067623,-3.32449585484071, 0.1)); #21801=CARTESIAN_POINT('Ctrl Pts',(-2.09539308933739,-3.32844521356193, 0.)); #21802=CARTESIAN_POINT('Ctrl Pts',(-2.09539308933739,-3.32844521356193, 0.1)); #21803=CARTESIAN_POINT('Ctrl Pts',(-2.10191811678984,-3.32844521356193, 0.)); #21804=CARTESIAN_POINT('Ctrl Pts',(-2.10191811678984,-3.32844521356193, 0.1)); #21805=CARTESIAN_POINT('',(-2.08045421069625,-3.32329387609947,0.)); #21806=CARTESIAN_POINT('Ctrl Pts',(-2.10191811678984,-3.32844521356193, 0.)); #21807=CARTESIAN_POINT('Ctrl Pts',(-2.09539308933739,-3.32844521356193, 0.)); #21808=CARTESIAN_POINT('Ctrl Pts',(-2.08320159067623,-3.32449585484071, 0.)); #21809=CARTESIAN_POINT('Ctrl Pts',(-2.08045421069625,-3.32329387609947, 0.)); #21810=CARTESIAN_POINT('',(-2.08045421069625,-3.32329387609947,0.1)); #21811=CARTESIAN_POINT('Ctrl Pts',(-2.08045421069625,-3.32329387609947, 0.1)); #21812=CARTESIAN_POINT('Ctrl Pts',(-2.08320159067623,-3.32449585484071, 0.1)); #21813=CARTESIAN_POINT('Ctrl Pts',(-2.09539308933739,-3.32844521356193, 0.1)); #21814=CARTESIAN_POINT('Ctrl Pts',(-2.10191811678984,-3.32844521356193, 0.1)); #21815=CARTESIAN_POINT('',(-2.08045421069625,-3.32329387609947,0.)); #21816=CARTESIAN_POINT('Origin',(-2.07890880945751,-3.32329387609947,0.)); #21817=CARTESIAN_POINT('',(-2.07890880945751,-3.32329387609947,0.)); #21818=CARTESIAN_POINT('',(-2.08045421069625,-3.32329387609947,0.)); #21819=CARTESIAN_POINT('',(-2.07890880945751,-3.32329387609947,0.1)); #21820=CARTESIAN_POINT('',(-2.08045421069625,-3.32329387609947,0.1)); #21821=CARTESIAN_POINT('',(-2.07890880945751,-3.32329387609947,0.)); #21822=CARTESIAN_POINT('Origin',(-2.07890880945751,-3.34733345092429,0.)); #21823=CARTESIAN_POINT('',(-2.07890880945751,-3.34733345092429,0.)); #21824=CARTESIAN_POINT('',(-2.07890880945751,-3.32329387609947,0.)); #21825=CARTESIAN_POINT('',(-2.07890880945751,-3.34733345092429,0.1)); #21826=CARTESIAN_POINT('',(-2.07890880945751,-3.32329387609947,0.1)); #21827=CARTESIAN_POINT('',(-2.07890880945751,-3.34733345092429,0.)); #21828=CARTESIAN_POINT('Ctrl Pts',(-2.10861485549104,-3.35179794339176, 0.)); #21829=CARTESIAN_POINT('Ctrl Pts',(-2.10861485549104,-3.35179794339176, 0.1)); #21830=CARTESIAN_POINT('Ctrl Pts',(-2.10191811678984,-3.35179794339176, 0.)); #21831=CARTESIAN_POINT('Ctrl Pts',(-2.10191811678984,-3.35179794339176, 0.1)); #21832=CARTESIAN_POINT('Ctrl Pts',(-2.08646410440245,-3.34939398590927, 0.)); #21833=CARTESIAN_POINT('Ctrl Pts',(-2.08646410440245,-3.34939398590927, 0.1)); #21834=CARTESIAN_POINT('Ctrl Pts',(-2.07890880945751,-3.34733345092429, 0.)); #21835=CARTESIAN_POINT('Ctrl Pts',(-2.07890880945751,-3.34733345092429, 0.1)); #21836=CARTESIAN_POINT('',(-2.10861485549104,-3.35179794339176,0.)); #21837=CARTESIAN_POINT('Ctrl Pts',(-2.07890880945751,-3.34733345092429, 0.)); #21838=CARTESIAN_POINT('Ctrl Pts',(-2.08646410440245,-3.34939398590927, 0.)); #21839=CARTESIAN_POINT('Ctrl Pts',(-2.10191811678984,-3.35179794339176, 0.)); #21840=CARTESIAN_POINT('Ctrl Pts',(-2.10861485549104,-3.35179794339176, 0.)); #21841=CARTESIAN_POINT('',(-2.10861485549104,-3.35179794339176,0.1)); #21842=CARTESIAN_POINT('Ctrl Pts',(-2.10861485549104,-3.35179794339176, 0.1)); #21843=CARTESIAN_POINT('Ctrl Pts',(-2.10191811678984,-3.35179794339176, 0.1)); #21844=CARTESIAN_POINT('Ctrl Pts',(-2.08646410440245,-3.34939398590927, 0.1)); #21845=CARTESIAN_POINT('Ctrl Pts',(-2.07890880945751,-3.34733345092429, 0.1)); #21846=CARTESIAN_POINT('',(-2.10861485549104,-3.35179794339176,0.)); #21847=CARTESIAN_POINT('Ctrl Pts',(-2.15497689265318,-3.29994114626965, 0.)); #21848=CARTESIAN_POINT('Ctrl Pts',(-2.15497689265318,-3.29994114626965, 0.1)); #21849=CARTESIAN_POINT('Ctrl Pts',(-2.15497689265318,-3.3268998123232,0.)); #21850=CARTESIAN_POINT('Ctrl Pts',(-2.15497689265318,-3.3268998123232,0.1)); #21851=CARTESIAN_POINT('Ctrl Pts',(-2.13042218408212,-3.35179794339176, 0.)); #21852=CARTESIAN_POINT('Ctrl Pts',(-2.13042218408212,-3.35179794339176, 0.1)); #21853=CARTESIAN_POINT('Ctrl Pts',(-2.10861485549104,-3.35179794339176, 0.)); #21854=CARTESIAN_POINT('Ctrl Pts',(-2.10861485549104,-3.35179794339176, 0.1)); #21855=CARTESIAN_POINT('Ctrl Pts',(-2.10861485549104,-3.35179794339176, 0.)); #21856=CARTESIAN_POINT('Ctrl Pts',(-2.13042218408212,-3.35179794339176, 0.)); #21857=CARTESIAN_POINT('Ctrl Pts',(-2.15497689265318,-3.3268998123232,0.)); #21858=CARTESIAN_POINT('Ctrl Pts',(-2.15497689265318,-3.29994114626965, 0.)); #21859=CARTESIAN_POINT('Ctrl Pts',(-2.15497689265318,-3.29994114626965, 0.1)); #21860=CARTESIAN_POINT('Ctrl Pts',(-2.15497689265318,-3.3268998123232,0.1)); #21861=CARTESIAN_POINT('Ctrl Pts',(-2.13042218408212,-3.35179794339176, 0.1)); #21862=CARTESIAN_POINT('Ctrl Pts',(-2.10861485549104,-3.35179794339176, 0.1)); #21863=CARTESIAN_POINT('Origin',(-2.12889873942535,-3.24152211329307,0.)); #21864=CARTESIAN_POINT('Origin',(-2.12889873942535,-3.24152211329307,0.1)); #21865=CARTESIAN_POINT('Ctrl Pts',(-1.89431921705267,-3.33016232604942, 0.)); #21866=CARTESIAN_POINT('Ctrl Pts',(-1.89431921705267,-3.33016232604942, 0.1)); #21867=CARTESIAN_POINT('Ctrl Pts',(-1.87371386720282,-3.33016232604942, 0.)); #21868=CARTESIAN_POINT('Ctrl Pts',(-1.87371386720282,-3.33016232604942, 0.1)); #21869=CARTESIAN_POINT('Ctrl Pts',(-1.851047982368,-3.2997694350209,0.)); #21870=CARTESIAN_POINT('Ctrl Pts',(-1.851047982368,-3.2997694350209,0.1)); #21871=CARTESIAN_POINT('Ctrl Pts',(-1.851047982368,-3.26920483274364,0.)); #21872=CARTESIAN_POINT('Ctrl Pts',(-1.851047982368,-3.26920483274364,0.1)); #21873=CARTESIAN_POINT('',(-1.89431921705267,-3.33016232604942,0.)); #21874=CARTESIAN_POINT('',(-1.851047982368,-3.26920483274364,0.)); #21875=CARTESIAN_POINT('Ctrl Pts',(-1.89431921705267,-3.33016232604942, 0.)); #21876=CARTESIAN_POINT('Ctrl Pts',(-1.87371386720282,-3.33016232604942, 0.)); #21877=CARTESIAN_POINT('Ctrl Pts',(-1.851047982368,-3.2997694350209,0.)); #21878=CARTESIAN_POINT('Ctrl Pts',(-1.851047982368,-3.26920483274364,0.)); #21879=CARTESIAN_POINT('',(-1.89431921705267,-3.33016232604942,0.1)); #21880=CARTESIAN_POINT('',(-1.89431921705267,-3.33016232604942,0.)); #21881=CARTESIAN_POINT('',(-1.851047982368,-3.26920483274364,0.1)); #21882=CARTESIAN_POINT('Ctrl Pts',(-1.851047982368,-3.26920483274364,0.1)); #21883=CARTESIAN_POINT('Ctrl Pts',(-1.851047982368,-3.2997694350209,0.1)); #21884=CARTESIAN_POINT('Ctrl Pts',(-1.87371386720282,-3.33016232604942, 0.1)); #21885=CARTESIAN_POINT('Ctrl Pts',(-1.89431921705267,-3.33016232604942, 0.1)); #21886=CARTESIAN_POINT('',(-1.851047982368,-3.26920483274364,0.)); #21887=CARTESIAN_POINT('Ctrl Pts',(-1.93776216298609,-3.26920483274364, 0.)); #21888=CARTESIAN_POINT('Ctrl Pts',(-1.93776216298609,-3.26920483274364, 0.1)); #21889=CARTESIAN_POINT('Ctrl Pts',(-1.93776216298609,-3.29925430127466, 0.)); #21890=CARTESIAN_POINT('Ctrl Pts',(-1.93776216298609,-3.29925430127466, 0.1)); #21891=CARTESIAN_POINT('Ctrl Pts',(-1.91509627815126,-3.33016232604942, 0.)); #21892=CARTESIAN_POINT('Ctrl Pts',(-1.91509627815126,-3.33016232604942, 0.1)); #21893=CARTESIAN_POINT('Ctrl Pts',(-1.89431921705267,-3.33016232604942, 0.)); #21894=CARTESIAN_POINT('Ctrl Pts',(-1.89431921705267,-3.33016232604942, 0.1)); #21895=CARTESIAN_POINT('',(-1.93776216298609,-3.26920483274364,0.)); #21896=CARTESIAN_POINT('Ctrl Pts',(-1.93776216298609,-3.26920483274364, 0.)); #21897=CARTESIAN_POINT('Ctrl Pts',(-1.93776216298609,-3.29925430127466, 0.)); #21898=CARTESIAN_POINT('Ctrl Pts',(-1.91509627815126,-3.33016232604942, 0.)); #21899=CARTESIAN_POINT('Ctrl Pts',(-1.89431921705267,-3.33016232604942, 0.)); #21900=CARTESIAN_POINT('',(-1.93776216298609,-3.26920483274364,0.1)); #21901=CARTESIAN_POINT('',(-1.93776216298609,-3.26920483274364,0.)); #21902=CARTESIAN_POINT('Ctrl Pts',(-1.89431921705267,-3.33016232604942, 0.1)); #21903=CARTESIAN_POINT('Ctrl Pts',(-1.91509627815126,-3.33016232604942, 0.1)); #21904=CARTESIAN_POINT('Ctrl Pts',(-1.93776216298609,-3.29925430127466, 0.1)); #21905=CARTESIAN_POINT('Ctrl Pts',(-1.93776216298609,-3.26920483274364, 0.1)); #21906=CARTESIAN_POINT('Ctrl Pts',(-1.89431921705267,-3.20824733943785, 0.)); #21907=CARTESIAN_POINT('Ctrl Pts',(-1.89431921705267,-3.20824733943785, 0.1)); #21908=CARTESIAN_POINT('Ctrl Pts',(-1.91509627815126,-3.20824733943785, 0.)); #21909=CARTESIAN_POINT('Ctrl Pts',(-1.91509627815126,-3.20824733943785, 0.1)); #21910=CARTESIAN_POINT('Ctrl Pts',(-1.93776216298609,-3.23829680796887, 0.)); #21911=CARTESIAN_POINT('Ctrl Pts',(-1.93776216298609,-3.23829680796887, 0.1)); #21912=CARTESIAN_POINT('Ctrl Pts',(-1.93776216298609,-3.26920483274364, 0.)); #21913=CARTESIAN_POINT('Ctrl Pts',(-1.93776216298609,-3.26920483274364, 0.1)); #21914=CARTESIAN_POINT('',(-1.89431921705267,-3.20824733943785,0.)); #21915=CARTESIAN_POINT('Ctrl Pts',(-1.89431921705267,-3.20824733943785, 0.)); #21916=CARTESIAN_POINT('Ctrl Pts',(-1.91509627815126,-3.20824733943785, 0.)); #21917=CARTESIAN_POINT('Ctrl Pts',(-1.93776216298609,-3.23829680796887, 0.)); #21918=CARTESIAN_POINT('Ctrl Pts',(-1.93776216298609,-3.26920483274364, 0.)); #21919=CARTESIAN_POINT('',(-1.89431921705267,-3.20824733943785,0.1)); #21920=CARTESIAN_POINT('',(-1.89431921705267,-3.20824733943785,0.)); #21921=CARTESIAN_POINT('Ctrl Pts',(-1.93776216298609,-3.26920483274364, 0.1)); #21922=CARTESIAN_POINT('Ctrl Pts',(-1.93776216298609,-3.23829680796887, 0.1)); #21923=CARTESIAN_POINT('Ctrl Pts',(-1.91509627815126,-3.20824733943785, 0.1)); #21924=CARTESIAN_POINT('Ctrl Pts',(-1.89431921705267,-3.20824733943785, 0.1)); #21925=CARTESIAN_POINT('Ctrl Pts',(-1.851047982368,-3.26920483274364,0.)); #21926=CARTESIAN_POINT('Ctrl Pts',(-1.851047982368,-3.26920483274364,0.1)); #21927=CARTESIAN_POINT('Ctrl Pts',(-1.851047982368,-3.23829680796887,0.)); #21928=CARTESIAN_POINT('Ctrl Pts',(-1.851047982368,-3.23829680796887,0.1)); #21929=CARTESIAN_POINT('Ctrl Pts',(-1.87354215595408,-3.20824733943785, 0.)); #21930=CARTESIAN_POINT('Ctrl Pts',(-1.87354215595408,-3.20824733943785, 0.1)); #21931=CARTESIAN_POINT('Ctrl Pts',(-1.89431921705267,-3.20824733943785, 0.)); #21932=CARTESIAN_POINT('Ctrl Pts',(-1.89431921705267,-3.20824733943785, 0.1)); #21933=CARTESIAN_POINT('Ctrl Pts',(-1.851047982368,-3.26920483274364,0.)); #21934=CARTESIAN_POINT('Ctrl Pts',(-1.851047982368,-3.23829680796887,0.)); #21935=CARTESIAN_POINT('Ctrl Pts',(-1.87354215595408,-3.20824733943785, 0.)); #21936=CARTESIAN_POINT('Ctrl Pts',(-1.89431921705267,-3.20824733943785, 0.)); #21937=CARTESIAN_POINT('Ctrl Pts',(-1.89431921705267,-3.20824733943785, 0.1)); #21938=CARTESIAN_POINT('Ctrl Pts',(-1.87354215595408,-3.20824733943785, 0.1)); #21939=CARTESIAN_POINT('Ctrl Pts',(-1.851047982368,-3.23829680796887,0.1)); #21940=CARTESIAN_POINT('Ctrl Pts',(-1.851047982368,-3.26920483274364,0.1)); #21941=CARTESIAN_POINT('Ctrl Pts',(-1.96540767403463,-3.26920483274364, 0.)); #21942=CARTESIAN_POINT('Ctrl Pts',(-1.96540767403463,-3.26920483274364, 0.1)); #21943=CARTESIAN_POINT('Ctrl Pts',(-1.96540767403463,-3.30801157496084, 0.)); #21944=CARTESIAN_POINT('Ctrl Pts',(-1.96540767403463,-3.30801157496084, 0.1)); #21945=CARTESIAN_POINT('Ctrl Pts',(-1.92745948806117,-3.35317163338175, 0.)); #21946=CARTESIAN_POINT('Ctrl Pts',(-1.92745948806117,-3.35317163338175, 0.1)); #21947=CARTESIAN_POINT('Ctrl Pts',(-1.89431921705267,-3.35317163338175, 0.)); #21948=CARTESIAN_POINT('Ctrl Pts',(-1.89431921705267,-3.35317163338175, 0.1)); #21949=CARTESIAN_POINT('',(-1.89431921705267,-3.35317163338175,0.)); #21950=CARTESIAN_POINT('',(-1.96540767403463,-3.26920483274364,0.)); #21951=CARTESIAN_POINT('Ctrl Pts',(-1.89431921705267,-3.35317163338175, 0.)); #21952=CARTESIAN_POINT('Ctrl Pts',(-1.92745948806117,-3.35317163338175, 0.)); #21953=CARTESIAN_POINT('Ctrl Pts',(-1.96540767403463,-3.30801157496084, 0.)); #21954=CARTESIAN_POINT('Ctrl Pts',(-1.96540767403463,-3.26920483274364, 0.)); #21955=CARTESIAN_POINT('',(-1.89431921705267,-3.35317163338175,0.1)); #21956=CARTESIAN_POINT('',(-1.89431921705267,-3.35317163338175,0.)); #21957=CARTESIAN_POINT('',(-1.96540767403463,-3.26920483274364,0.1)); #21958=CARTESIAN_POINT('Ctrl Pts',(-1.96540767403463,-3.26920483274364, 0.1)); #21959=CARTESIAN_POINT('Ctrl Pts',(-1.96540767403463,-3.30801157496084, 0.1)); #21960=CARTESIAN_POINT('Ctrl Pts',(-1.92745948806117,-3.35317163338175, 0.1)); #21961=CARTESIAN_POINT('Ctrl Pts',(-1.89431921705267,-3.35317163338175, 0.1)); #21962=CARTESIAN_POINT('',(-1.96540767403463,-3.26920483274364,0.)); #21963=CARTESIAN_POINT('Ctrl Pts',(-1.89431921705267,-3.18523803210552, 0.)); #21964=CARTESIAN_POINT('Ctrl Pts',(-1.89431921705267,-3.18523803210552, 0.1)); #21965=CARTESIAN_POINT('Ctrl Pts',(-1.92625750931992,-3.18523803210552, 0.)); #21966=CARTESIAN_POINT('Ctrl Pts',(-1.92625750931992,-3.18523803210552, 0.1)); #21967=CARTESIAN_POINT('Ctrl Pts',(-1.96540767403463,-3.22936782303394, 0.)); #21968=CARTESIAN_POINT('Ctrl Pts',(-1.96540767403463,-3.22936782303394, 0.1)); #21969=CARTESIAN_POINT('Ctrl Pts',(-1.96540767403463,-3.26920483274364, 0.)); #21970=CARTESIAN_POINT('Ctrl Pts',(-1.96540767403463,-3.26920483274364, 0.1)); #21971=CARTESIAN_POINT('',(-1.89431921705267,-3.18523803210552,0.)); #21972=CARTESIAN_POINT('Ctrl Pts',(-1.96540767403463,-3.26920483274364, 0.)); #21973=CARTESIAN_POINT('Ctrl Pts',(-1.96540767403463,-3.22936782303394, 0.)); #21974=CARTESIAN_POINT('Ctrl Pts',(-1.92625750931992,-3.18523803210552, 0.)); #21975=CARTESIAN_POINT('Ctrl Pts',(-1.89431921705267,-3.18523803210552, 0.)); #21976=CARTESIAN_POINT('',(-1.89431921705267,-3.18523803210552,0.1)); #21977=CARTESIAN_POINT('Ctrl Pts',(-1.89431921705267,-3.18523803210552, 0.1)); #21978=CARTESIAN_POINT('Ctrl Pts',(-1.92625750931992,-3.18523803210552, 0.1)); #21979=CARTESIAN_POINT('Ctrl Pts',(-1.96540767403463,-3.22936782303394, 0.1)); #21980=CARTESIAN_POINT('Ctrl Pts',(-1.96540767403463,-3.26920483274364, 0.1)); #21981=CARTESIAN_POINT('',(-1.89431921705267,-3.18523803210552,0.)); #21982=CARTESIAN_POINT('Ctrl Pts',(-1.82340247131946,-3.26920483274364, 0.)); #21983=CARTESIAN_POINT('Ctrl Pts',(-1.82340247131946,-3.26920483274364, 0.1)); #21984=CARTESIAN_POINT('Ctrl Pts',(-1.82340247131946,-3.22919611178519, 0.)); #21985=CARTESIAN_POINT('Ctrl Pts',(-1.82340247131946,-3.22919611178519, 0.1)); #21986=CARTESIAN_POINT('Ctrl Pts',(-1.86203750228791,-3.18523803210552, 0.)); #21987=CARTESIAN_POINT('Ctrl Pts',(-1.86203750228791,-3.18523803210552, 0.1)); #21988=CARTESIAN_POINT('Ctrl Pts',(-1.89431921705267,-3.18523803210552, 0.)); #21989=CARTESIAN_POINT('Ctrl Pts',(-1.89431921705267,-3.18523803210552, 0.1)); #21990=CARTESIAN_POINT('',(-1.82340247131946,-3.26920483274364,0.)); #21991=CARTESIAN_POINT('Ctrl Pts',(-1.89431921705267,-3.18523803210552, 0.)); #21992=CARTESIAN_POINT('Ctrl Pts',(-1.86203750228791,-3.18523803210552, 0.)); #21993=CARTESIAN_POINT('Ctrl Pts',(-1.82340247131946,-3.22919611178519, 0.)); #21994=CARTESIAN_POINT('Ctrl Pts',(-1.82340247131946,-3.26920483274364, 0.)); #21995=CARTESIAN_POINT('',(-1.82340247131946,-3.26920483274364,0.1)); #21996=CARTESIAN_POINT('Ctrl Pts',(-1.82340247131946,-3.26920483274364, 0.1)); #21997=CARTESIAN_POINT('Ctrl Pts',(-1.82340247131946,-3.22919611178519, 0.1)); #21998=CARTESIAN_POINT('Ctrl Pts',(-1.86203750228791,-3.18523803210552, 0.1)); #21999=CARTESIAN_POINT('Ctrl Pts',(-1.89431921705267,-3.18523803210552, 0.1)); #22000=CARTESIAN_POINT('',(-1.82340247131946,-3.26920483274364,0.)); #22001=CARTESIAN_POINT('Ctrl Pts',(-1.89431921705267,-3.35317163338175, 0.)); #22002=CARTESIAN_POINT('Ctrl Pts',(-1.89431921705267,-3.35317163338175, 0.1)); #22003=CARTESIAN_POINT('Ctrl Pts',(-1.86203750228791,-3.35317163338175, 0.)); #22004=CARTESIAN_POINT('Ctrl Pts',(-1.86203750228791,-3.35317163338175, 0.1)); #22005=CARTESIAN_POINT('Ctrl Pts',(-1.82340247131946,-3.30938526495083, 0.)); #22006=CARTESIAN_POINT('Ctrl Pts',(-1.82340247131946,-3.30938526495083, 0.1)); #22007=CARTESIAN_POINT('Ctrl Pts',(-1.82340247131946,-3.26920483274364, 0.)); #22008=CARTESIAN_POINT('Ctrl Pts',(-1.82340247131946,-3.26920483274364, 0.1)); #22009=CARTESIAN_POINT('Ctrl Pts',(-1.82340247131946,-3.26920483274364, 0.)); #22010=CARTESIAN_POINT('Ctrl Pts',(-1.82340247131946,-3.30938526495083, 0.)); #22011=CARTESIAN_POINT('Ctrl Pts',(-1.86203750228791,-3.35317163338175, 0.)); #22012=CARTESIAN_POINT('Ctrl Pts',(-1.89431921705267,-3.35317163338175, 0.)); #22013=CARTESIAN_POINT('Ctrl Pts',(-1.89431921705267,-3.35317163338175, 0.1)); #22014=CARTESIAN_POINT('Ctrl Pts',(-1.86203750228791,-3.35317163338175, 0.1)); #22015=CARTESIAN_POINT('Ctrl Pts',(-1.82340247131946,-3.30938526495083, 0.1)); #22016=CARTESIAN_POINT('Ctrl Pts',(-1.82340247131946,-3.26920483274364, 0.1)); #22017=CARTESIAN_POINT('Origin',(-1.89432810819922,-3.26924527821946,0.)); #22018=CARTESIAN_POINT('Origin',(-1.89432810819922,-3.26924527821946,0.1)); #22019=CARTESIAN_POINT('Origin',(-1.69788154848416,-3.25804360157497,0.)); #22020=CARTESIAN_POINT('',(-1.69788154848416,-3.34870714091428,0.)); #22021=CARTESIAN_POINT('',(-1.69788154848416,-3.25804360157497,0.)); #22022=CARTESIAN_POINT('',(-1.69788154848416,-3.34870714091428,0.)); #22023=CARTESIAN_POINT('',(-1.69788154848416,-3.34870714091428,0.1)); #22024=CARTESIAN_POINT('',(-1.69788154848416,-3.34870714091428,0.)); #22025=CARTESIAN_POINT('',(-1.69788154848416,-3.25804360157497,0.1)); #22026=CARTESIAN_POINT('',(-1.69788154848416,-3.34870714091428,0.1)); #22027=CARTESIAN_POINT('',(-1.69788154848416,-3.25804360157497,0.)); #22028=CARTESIAN_POINT('Ctrl Pts',(-1.70303288594662,-3.22249937308399, 0.)); #22029=CARTESIAN_POINT('Ctrl Pts',(-1.70303288594662,-3.22249937308399, 0.1)); #22030=CARTESIAN_POINT('Ctrl Pts',(-1.69994208346915,-3.2281658442927,0.)); #22031=CARTESIAN_POINT('Ctrl Pts',(-1.69994208346915,-3.2281658442927,0.1)); #22032=CARTESIAN_POINT('Ctrl Pts',(-1.69788154848416,-3.24705408165505, 0.)); #22033=CARTESIAN_POINT('Ctrl Pts',(-1.69788154848416,-3.24705408165505, 0.1)); #22034=CARTESIAN_POINT('Ctrl Pts',(-1.69788154848416,-3.25804360157497, 0.)); #22035=CARTESIAN_POINT('Ctrl Pts',(-1.69788154848416,-3.25804360157497, 0.1)); #22036=CARTESIAN_POINT('',(-1.70303288594662,-3.22249937308399,0.)); #22037=CARTESIAN_POINT('Ctrl Pts',(-1.69788154848416,-3.25804360157497, 0.)); #22038=CARTESIAN_POINT('Ctrl Pts',(-1.69788154848416,-3.24705408165505, 0.)); #22039=CARTESIAN_POINT('Ctrl Pts',(-1.69994208346915,-3.2281658442927,0.)); #22040=CARTESIAN_POINT('Ctrl Pts',(-1.70303288594662,-3.22249937308399, 0.)); #22041=CARTESIAN_POINT('',(-1.70303288594662,-3.22249937308399,0.1)); #22042=CARTESIAN_POINT('Ctrl Pts',(-1.70303288594662,-3.22249937308399, 0.1)); #22043=CARTESIAN_POINT('Ctrl Pts',(-1.69994208346915,-3.2281658442927,0.1)); #22044=CARTESIAN_POINT('Ctrl Pts',(-1.69788154848416,-3.24705408165505, 0.1)); #22045=CARTESIAN_POINT('Ctrl Pts',(-1.69788154848416,-3.25804360157497, 0.1)); #22046=CARTESIAN_POINT('',(-1.70303288594662,-3.22249937308399,0.)); #22047=CARTESIAN_POINT('Ctrl Pts',(-1.72793101701518,-3.21065129692033, 0.)); #22048=CARTESIAN_POINT('Ctrl Pts',(-1.72793101701518,-3.21065129692033, 0.1)); #22049=CARTESIAN_POINT('Ctrl Pts',(-1.71797176458776,-3.21065129692033, 0.)); #22050=CARTESIAN_POINT('Ctrl Pts',(-1.71797176458776,-3.21065129692033, 0.1)); #22051=CARTESIAN_POINT('Ctrl Pts',(-1.70629539967285,-3.21648947937779, 0.)); #22052=CARTESIAN_POINT('Ctrl Pts',(-1.70629539967285,-3.21648947937779, 0.1)); #22053=CARTESIAN_POINT('Ctrl Pts',(-1.70303288594662,-3.22249937308399, 0.)); #22054=CARTESIAN_POINT('Ctrl Pts',(-1.70303288594662,-3.22249937308399, 0.1)); #22055=CARTESIAN_POINT('',(-1.72793101701518,-3.21065129692033,0.)); #22056=CARTESIAN_POINT('Ctrl Pts',(-1.70303288594662,-3.22249937308399, 0.)); #22057=CARTESIAN_POINT('Ctrl Pts',(-1.70629539967285,-3.21648947937779, 0.)); #22058=CARTESIAN_POINT('Ctrl Pts',(-1.71797176458776,-3.21065129692033, 0.)); #22059=CARTESIAN_POINT('Ctrl Pts',(-1.72793101701518,-3.21065129692033, 0.)); #22060=CARTESIAN_POINT('',(-1.72793101701518,-3.21065129692033,0.1)); #22061=CARTESIAN_POINT('Ctrl Pts',(-1.72793101701518,-3.21065129692033, 0.1)); #22062=CARTESIAN_POINT('Ctrl Pts',(-1.71797176458776,-3.21065129692033, 0.1)); #22063=CARTESIAN_POINT('Ctrl Pts',(-1.70629539967285,-3.21648947937779, 0.1)); #22064=CARTESIAN_POINT('Ctrl Pts',(-1.70303288594662,-3.22249937308399, 0.1)); #22065=CARTESIAN_POINT('',(-1.72793101701518,-3.21065129692033,0.)); #22066=CARTESIAN_POINT('Ctrl Pts',(-1.76914171671487,-3.22988295678018, 0.)); #22067=CARTESIAN_POINT('Ctrl Pts',(-1.76914171671487,-3.22988295678018, 0.1)); #22068=CARTESIAN_POINT('Ctrl Pts',(-1.7590107530387,-3.22129739434275,0.)); #22069=CARTESIAN_POINT('Ctrl Pts',(-1.7590107530387,-3.22129739434275,0.1)); #22070=CARTESIAN_POINT('Ctrl Pts',(-1.73789026944261,-3.21065129692033, 0.)); #22071=CARTESIAN_POINT('Ctrl Pts',(-1.73789026944261,-3.21065129692033, 0.1)); #22072=CARTESIAN_POINT('Ctrl Pts',(-1.72793101701518,-3.21065129692033, 0.)); #22073=CARTESIAN_POINT('Ctrl Pts',(-1.72793101701518,-3.21065129692033, 0.1)); #22074=CARTESIAN_POINT('',(-1.76914171671487,-3.22988295678018,0.)); #22075=CARTESIAN_POINT('Ctrl Pts',(-1.72793101701518,-3.21065129692033, 0.)); #22076=CARTESIAN_POINT('Ctrl Pts',(-1.73789026944261,-3.21065129692033, 0.)); #22077=CARTESIAN_POINT('Ctrl Pts',(-1.7590107530387,-3.22129739434275,0.)); #22078=CARTESIAN_POINT('Ctrl Pts',(-1.76914171671487,-3.22988295678018, 0.)); #22079=CARTESIAN_POINT('',(-1.76914171671487,-3.22988295678018,0.1)); #22080=CARTESIAN_POINT('Ctrl Pts',(-1.76914171671487,-3.22988295678018, 0.1)); #22081=CARTESIAN_POINT('Ctrl Pts',(-1.7590107530387,-3.22129739434275,0.1)); #22082=CARTESIAN_POINT('Ctrl Pts',(-1.73789026944261,-3.21065129692033, 0.1)); #22083=CARTESIAN_POINT('Ctrl Pts',(-1.72793101701518,-3.21065129692033, 0.1)); #22084=CARTESIAN_POINT('',(-1.76914171671487,-3.22988295678018,0.)); #22085=CARTESIAN_POINT('Origin',(-1.76914171671487,-3.34870714091428,0.)); #22086=CARTESIAN_POINT('',(-1.76914171671487,-3.34870714091428,0.)); #22087=CARTESIAN_POINT('',(-1.76914171671487,-3.22988295678018,0.)); #22088=CARTESIAN_POINT('',(-1.76914171671487,-3.34870714091428,0.1)); #22089=CARTESIAN_POINT('',(-1.76914171671487,-3.22988295678018,0.1)); #22090=CARTESIAN_POINT('',(-1.76914171671487,-3.34870714091428,0.)); #22091=CARTESIAN_POINT('Origin',(-1.79592867151967,-3.34870714091428,0.)); #22092=CARTESIAN_POINT('',(-1.79592867151967,-3.34870714091428,0.)); #22093=CARTESIAN_POINT('',(-1.76914171671487,-3.34870714091428,0.)); #22094=CARTESIAN_POINT('',(-1.79592867151967,-3.34870714091428,0.1)); #22095=CARTESIAN_POINT('',(-1.76914171671487,-3.34870714091428,0.1)); #22096=CARTESIAN_POINT('',(-1.79592867151967,-3.34870714091428,0.)); #22097=CARTESIAN_POINT('Origin',(-1.79592867151967,-3.18970252457299,0.)); #22098=CARTESIAN_POINT('',(-1.79592867151967,-3.18970252457299,0.)); #22099=CARTESIAN_POINT('',(-1.79592867151967,-3.34870714091428,0.)); #22100=CARTESIAN_POINT('',(-1.79592867151967,-3.18970252457299,0.1)); #22101=CARTESIAN_POINT('',(-1.79592867151967,-3.34870714091428,0.1)); #22102=CARTESIAN_POINT('',(-1.79592867151967,-3.18970252457299,0.)); #22103=CARTESIAN_POINT('Origin',(-1.76914171671487,-3.18970252457299,0.)); #22104=CARTESIAN_POINT('',(-1.76914171671487,-3.18970252457299,0.)); #22105=CARTESIAN_POINT('',(-1.79592867151967,-3.18970252457299,0.)); #22106=CARTESIAN_POINT('',(-1.76914171671487,-3.18970252457299,0.1)); #22107=CARTESIAN_POINT('',(-1.79592867151967,-3.18970252457299,0.1)); #22108=CARTESIAN_POINT('',(-1.76914171671487,-3.18970252457299,0.)); #22109=CARTESIAN_POINT('Origin',(-1.76914171671487,-3.20738878319411,0.)); #22110=CARTESIAN_POINT('',(-1.76914171671487,-3.20738878319411,0.)); #22111=CARTESIAN_POINT('',(-1.76914171671487,-3.18970252457299,0.)); #22112=CARTESIAN_POINT('',(-1.76914171671487,-3.20738878319411,0.1)); #22113=CARTESIAN_POINT('',(-1.76914171671487,-3.18970252457299,0.1)); #22114=CARTESIAN_POINT('',(-1.76914171671487,-3.20738878319411,0.)); #22115=CARTESIAN_POINT('Ctrl Pts',(-1.72089085581649,-3.18523803210552, 0.)); #22116=CARTESIAN_POINT('Ctrl Pts',(-1.72089085581649,-3.18523803210552, 0.1)); #22117=CARTESIAN_POINT('Ctrl Pts',(-1.73394091072139,-3.18523803210552, 0.)); #22118=CARTESIAN_POINT('Ctrl Pts',(-1.73394091072139,-3.18523803210552, 0.1)); #22119=CARTESIAN_POINT('Ctrl Pts',(-1.75712192930246,-3.19657097452294, 0.)); #22120=CARTESIAN_POINT('Ctrl Pts',(-1.75712192930246,-3.19657097452294, 0.1)); #22121=CARTESIAN_POINT('Ctrl Pts',(-1.76914171671487,-3.20738878319411, 0.)); #22122=CARTESIAN_POINT('Ctrl Pts',(-1.76914171671487,-3.20738878319411, 0.1)); #22123=CARTESIAN_POINT('',(-1.72089085581649,-3.18523803210552,0.)); #22124=CARTESIAN_POINT('Ctrl Pts',(-1.76914171671487,-3.20738878319411, 0.)); #22125=CARTESIAN_POINT('Ctrl Pts',(-1.75712192930246,-3.19657097452294, 0.)); #22126=CARTESIAN_POINT('Ctrl Pts',(-1.73394091072139,-3.18523803210552, 0.)); #22127=CARTESIAN_POINT('Ctrl Pts',(-1.72089085581649,-3.18523803210552, 0.)); #22128=CARTESIAN_POINT('',(-1.72089085581649,-3.18523803210552,0.1)); #22129=CARTESIAN_POINT('Ctrl Pts',(-1.72089085581649,-3.18523803210552, 0.1)); #22130=CARTESIAN_POINT('Ctrl Pts',(-1.73394091072139,-3.18523803210552, 0.1)); #22131=CARTESIAN_POINT('Ctrl Pts',(-1.75712192930246,-3.19657097452294, 0.1)); #22132=CARTESIAN_POINT('Ctrl Pts',(-1.76914171671487,-3.20738878319411, 0.1)); #22133=CARTESIAN_POINT('',(-1.72089085581649,-3.18523803210552,0.)); #22134=CARTESIAN_POINT('Ctrl Pts',(-1.67109459367937,-3.24550868041632, 0.)); #22135=CARTESIAN_POINT('Ctrl Pts',(-1.67109459367937,-3.24550868041632, 0.1)); #22136=CARTESIAN_POINT('Ctrl Pts',(-1.67109459367937,-3.21614605688029, 0.)); #22137=CARTESIAN_POINT('Ctrl Pts',(-1.67109459367937,-3.21614605688029, 0.1)); #22138=CARTESIAN_POINT('Ctrl Pts',(-1.69753812598667,-3.18523803210552, 0.)); #22139=CARTESIAN_POINT('Ctrl Pts',(-1.69753812598667,-3.18523803210552, 0.1)); #22140=CARTESIAN_POINT('Ctrl Pts',(-1.72089085581649,-3.18523803210552, 0.)); #22141=CARTESIAN_POINT('Ctrl Pts',(-1.72089085581649,-3.18523803210552, 0.1)); #22142=CARTESIAN_POINT('',(-1.67109459367937,-3.24550868041632,0.)); #22143=CARTESIAN_POINT('Ctrl Pts',(-1.72089085581649,-3.18523803210552, 0.)); #22144=CARTESIAN_POINT('Ctrl Pts',(-1.69753812598667,-3.18523803210552, 0.)); #22145=CARTESIAN_POINT('Ctrl Pts',(-1.67109459367937,-3.21614605688029, 0.)); #22146=CARTESIAN_POINT('Ctrl Pts',(-1.67109459367937,-3.24550868041632, 0.)); #22147=CARTESIAN_POINT('',(-1.67109459367937,-3.24550868041632,0.1)); #22148=CARTESIAN_POINT('Ctrl Pts',(-1.67109459367937,-3.24550868041632, 0.1)); #22149=CARTESIAN_POINT('Ctrl Pts',(-1.67109459367937,-3.21614605688029, 0.1)); #22150=CARTESIAN_POINT('Ctrl Pts',(-1.69753812598667,-3.18523803210552, 0.1)); #22151=CARTESIAN_POINT('Ctrl Pts',(-1.72089085581649,-3.18523803210552, 0.1)); #22152=CARTESIAN_POINT('',(-1.67109459367937,-3.24550868041632,0.)); #22153=CARTESIAN_POINT('Origin',(-1.67109459367937,-3.34870714091428,0.)); #22154=CARTESIAN_POINT('',(-1.67109459367937,-3.34870714091428,0.)); #22155=CARTESIAN_POINT('',(-1.67109459367937,-3.24550868041632,0.)); #22156=CARTESIAN_POINT('',(-1.67109459367937,-3.34870714091428,0.1)); #22157=CARTESIAN_POINT('',(-1.67109459367937,-3.24550868041632,0.1)); #22158=CARTESIAN_POINT('',(-1.67109459367937,-3.34870714091428,0.)); #22159=CARTESIAN_POINT('Origin',(-1.69788154848416,-3.34870714091428,0.)); #22160=CARTESIAN_POINT('',(-1.67109459367937,-3.34870714091428,0.)); #22161=CARTESIAN_POINT('',(-1.67109459367937,-3.34870714091428,0.1)); #22162=CARTESIAN_POINT('Origin',(-1.73755502610782,-3.26690791286792,0.)); #22163=CARTESIAN_POINT('Origin',(-1.73755502610782,-3.26690791286792,0.1)); #22164=CARTESIAN_POINT('Origin',(-1.63469180894464,-3.1354417699684,0.)); #22165=CARTESIAN_POINT('',(-1.63469180894464,-3.16325899226569,0.)); #22166=CARTESIAN_POINT('',(-1.63469180894464,-3.1354417699684,0.)); #22167=CARTESIAN_POINT('',(-1.63469180894464,-3.16325899226569,0.)); #22168=CARTESIAN_POINT('',(-1.63469180894464,-3.16325899226569,0.1)); #22169=CARTESIAN_POINT('',(-1.63469180894464,-3.16325899226569,0.)); #22170=CARTESIAN_POINT('',(-1.63469180894464,-3.1354417699684,0.1)); #22171=CARTESIAN_POINT('',(-1.63469180894464,-3.16325899226569,0.1)); #22172=CARTESIAN_POINT('',(-1.63469180894464,-3.1354417699684,0.)); #22173=CARTESIAN_POINT('Origin',(-1.60429891791613,-3.1354417699684,0.)); #22174=CARTESIAN_POINT('',(-1.60429891791613,-3.1354417699684,0.)); #22175=CARTESIAN_POINT('',(-1.63469180894464,-3.1354417699684,0.)); #22176=CARTESIAN_POINT('',(-1.60429891791613,-3.1354417699684,0.1)); #22177=CARTESIAN_POINT('',(-1.63469180894464,-3.1354417699684,0.1)); #22178=CARTESIAN_POINT('',(-1.60429891791613,-3.1354417699684,0.)); #22179=CARTESIAN_POINT('Origin',(-1.60429891791613,-3.16325899226569,0.)); #22180=CARTESIAN_POINT('',(-1.60429891791613,-3.16325899226569,0.)); #22181=CARTESIAN_POINT('',(-1.60429891791613,-3.1354417699684,0.)); #22182=CARTESIAN_POINT('',(-1.60429891791613,-3.16325899226569,0.1)); #22183=CARTESIAN_POINT('',(-1.60429891791613,-3.1354417699684,0.1)); #22184=CARTESIAN_POINT('',(-1.60429891791613,-3.16325899226569,0.)); #22185=CARTESIAN_POINT('Origin',(-1.63469180894464,-3.16325899226569,0.)); #22186=CARTESIAN_POINT('',(-1.60429891791613,-3.16325899226569,0.)); #22187=CARTESIAN_POINT('',(-1.60429891791613,-3.16325899226569,0.1)); #22188=CARTESIAN_POINT('Origin',(-1.61949536343038,-3.14935038111705,0.)); #22189=CARTESIAN_POINT('Origin',(-1.61949536343038,-3.14935038111705,0.1)); #22190=CARTESIAN_POINT('Origin',(-1.44220349909736,-3.30904184245333,0.)); #22191=CARTESIAN_POINT('',(-1.44220349909736,-3.33909131098435,0.)); #22192=CARTESIAN_POINT('',(-1.44220349909736,-3.30904184245333,0.)); #22193=CARTESIAN_POINT('',(-1.44220349909736,-3.33909131098435,0.)); #22194=CARTESIAN_POINT('',(-1.44220349909736,-3.33909131098435,0.1)); #22195=CARTESIAN_POINT('',(-1.44220349909736,-3.33909131098435,0.)); #22196=CARTESIAN_POINT('',(-1.44220349909736,-3.30904184245333,0.1)); #22197=CARTESIAN_POINT('',(-1.44220349909736,-3.33909131098435,0.1)); #22198=CARTESIAN_POINT('',(-1.44220349909736,-3.30904184245333,0.)); #22199=CARTESIAN_POINT('Origin',(-1.44082980910737,-3.30904184245333,0.)); #22200=CARTESIAN_POINT('',(-1.44082980910737,-3.30904184245333,0.)); #22201=CARTESIAN_POINT('',(-1.44220349909736,-3.30904184245333,0.)); #22202=CARTESIAN_POINT('',(-1.44082980910737,-3.30904184245333,0.1)); #22203=CARTESIAN_POINT('',(-1.44220349909736,-3.30904184245333,0.1)); #22204=CARTESIAN_POINT('',(-1.44082980910737,-3.30904184245333,0.)); #22205=CARTESIAN_POINT('Ctrl Pts',(-1.42039617050628,-3.32192018610948, 0.)); #22206=CARTESIAN_POINT('Ctrl Pts',(-1.42039617050628,-3.32192018610948, 0.1)); #22207=CARTESIAN_POINT('Ctrl Pts',(-1.42812317669997,-3.31831424988576, 0.)); #22208=CARTESIAN_POINT('Ctrl Pts',(-1.42812317669997,-3.31831424988576, 0.1)); #22209=CARTESIAN_POINT('Ctrl Pts',(-1.4373955841324,-3.31178922243331,0.)); #22210=CARTESIAN_POINT('Ctrl Pts',(-1.4373955841324,-3.31178922243331,0.1)); #22211=CARTESIAN_POINT('Ctrl Pts',(-1.44082980910737,-3.30904184245333, 0.)); #22212=CARTESIAN_POINT('Ctrl Pts',(-1.44082980910737,-3.30904184245333, 0.1)); #22213=CARTESIAN_POINT('',(-1.42039617050628,-3.32192018610948,0.)); #22214=CARTESIAN_POINT('Ctrl Pts',(-1.44082980910737,-3.30904184245333, 0.)); #22215=CARTESIAN_POINT('Ctrl Pts',(-1.4373955841324,-3.31178922243331,0.)); #22216=CARTESIAN_POINT('Ctrl Pts',(-1.42812317669997,-3.31831424988576, 0.)); #22217=CARTESIAN_POINT('Ctrl Pts',(-1.42039617050628,-3.32192018610948, 0.)); #22218=CARTESIAN_POINT('',(-1.42039617050628,-3.32192018610948,0.1)); #22219=CARTESIAN_POINT('Ctrl Pts',(-1.42039617050628,-3.32192018610948, 0.1)); #22220=CARTESIAN_POINT('Ctrl Pts',(-1.42812317669997,-3.31831424988576, 0.1)); #22221=CARTESIAN_POINT('Ctrl Pts',(-1.4373955841324,-3.31178922243331,0.1)); #22222=CARTESIAN_POINT('Ctrl Pts',(-1.44082980910737,-3.30904184245333, 0.1)); #22223=CARTESIAN_POINT('',(-1.42039617050628,-3.32192018610948,0.)); #22224=CARTESIAN_POINT('Ctrl Pts',(-1.38845787823902,-3.32999061480067, 0.)); #22225=CARTESIAN_POINT('Ctrl Pts',(-1.38845787823902,-3.32999061480067, 0.1)); #22226=CARTESIAN_POINT('Ctrl Pts',(-1.3972151519252,-3.32999061480067,0.)); #22227=CARTESIAN_POINT('Ctrl Pts',(-1.3972151519252,-3.32999061480067,0.1)); #22228=CARTESIAN_POINT('Ctrl Pts',(-1.41369943180508,-3.32518269983571, 0.)); #22229=CARTESIAN_POINT('Ctrl Pts',(-1.41369943180508,-3.32518269983571, 0.1)); #22230=CARTESIAN_POINT('Ctrl Pts',(-1.42039617050628,-3.32192018610948, 0.)); #22231=CARTESIAN_POINT('Ctrl Pts',(-1.42039617050628,-3.32192018610948, 0.1)); #22232=CARTESIAN_POINT('',(-1.38845787823902,-3.32999061480067,0.)); #22233=CARTESIAN_POINT('Ctrl Pts',(-1.42039617050628,-3.32192018610948, 0.)); #22234=CARTESIAN_POINT('Ctrl Pts',(-1.41369943180508,-3.32518269983571, 0.)); #22235=CARTESIAN_POINT('Ctrl Pts',(-1.3972151519252,-3.32999061480067,0.)); #22236=CARTESIAN_POINT('Ctrl Pts',(-1.38845787823902,-3.32999061480067, 0.)); #22237=CARTESIAN_POINT('',(-1.38845787823902,-3.32999061480067,0.1)); #22238=CARTESIAN_POINT('Ctrl Pts',(-1.38845787823902,-3.32999061480067, 0.1)); #22239=CARTESIAN_POINT('Ctrl Pts',(-1.3972151519252,-3.32999061480067,0.1)); #22240=CARTESIAN_POINT('Ctrl Pts',(-1.41369943180508,-3.32518269983571, 0.1)); #22241=CARTESIAN_POINT('Ctrl Pts',(-1.42039617050628,-3.32192018610948, 0.1)); #22242=CARTESIAN_POINT('',(-1.38845787823902,-3.32999061480067,0.)); #22243=CARTESIAN_POINT('Ctrl Pts',(-1.3640748809167,-3.32466756608946,0.)); #22244=CARTESIAN_POINT('Ctrl Pts',(-1.3640748809167,-3.32466756608946,0.1)); #22245=CARTESIAN_POINT('Ctrl Pts',(-1.36750910589168,-3.32707152357194, 0.)); #22246=CARTESIAN_POINT('Ctrl Pts',(-1.36750910589168,-3.32707152357194, 0.1)); #22247=CARTESIAN_POINT('Ctrl Pts',(-1.38210456203532,-3.32999061480067, 0.)); #22248=CARTESIAN_POINT('Ctrl Pts',(-1.38210456203532,-3.32999061480067, 0.1)); #22249=CARTESIAN_POINT('Ctrl Pts',(-1.38845787823902,-3.32999061480067, 0.)); #22250=CARTESIAN_POINT('Ctrl Pts',(-1.38845787823902,-3.32999061480067, 0.1)); #22251=CARTESIAN_POINT('',(-1.3640748809167,-3.32466756608946,0.)); #22252=CARTESIAN_POINT('Ctrl Pts',(-1.38845787823902,-3.32999061480067, 0.)); #22253=CARTESIAN_POINT('Ctrl Pts',(-1.38210456203532,-3.32999061480067, 0.)); #22254=CARTESIAN_POINT('Ctrl Pts',(-1.36750910589168,-3.32707152357194, 0.)); #22255=CARTESIAN_POINT('Ctrl Pts',(-1.3640748809167,-3.32466756608946,0.)); #22256=CARTESIAN_POINT('',(-1.3640748809167,-3.32466756608946,0.1)); #22257=CARTESIAN_POINT('Ctrl Pts',(-1.3640748809167,-3.32466756608946,0.1)); #22258=CARTESIAN_POINT('Ctrl Pts',(-1.36750910589168,-3.32707152357194, 0.1)); #22259=CARTESIAN_POINT('Ctrl Pts',(-1.38210456203532,-3.32999061480067, 0.1)); #22260=CARTESIAN_POINT('Ctrl Pts',(-1.38845787823902,-3.32999061480067, 0.1)); #22261=CARTESIAN_POINT('',(-1.3640748809167,-3.32466756608946,0.)); #22262=CARTESIAN_POINT('Ctrl Pts',(-1.35463076223553,-3.3064661737221,0.)); #22263=CARTESIAN_POINT('Ctrl Pts',(-1.35463076223553,-3.3064661737221,0.1)); #22264=CARTESIAN_POINT('Ctrl Pts',(-1.35463076223553,-3.31402146866704, 0.)); #22265=CARTESIAN_POINT('Ctrl Pts',(-1.35463076223553,-3.31402146866704, 0.1)); #22266=CARTESIAN_POINT('Ctrl Pts',(-1.35909525470299,-3.32140505236324, 0.)); #22267=CARTESIAN_POINT('Ctrl Pts',(-1.35909525470299,-3.32140505236324, 0.1)); #22268=CARTESIAN_POINT('Ctrl Pts',(-1.3640748809167,-3.32466756608946,0.)); #22269=CARTESIAN_POINT('Ctrl Pts',(-1.3640748809167,-3.32466756608946,0.1)); #22270=CARTESIAN_POINT('',(-1.35463076223553,-3.3064661737221,0.)); #22271=CARTESIAN_POINT('Ctrl Pts',(-1.3640748809167,-3.32466756608946,0.)); #22272=CARTESIAN_POINT('Ctrl Pts',(-1.35909525470299,-3.32140505236324, 0.)); #22273=CARTESIAN_POINT('Ctrl Pts',(-1.35463076223553,-3.31402146866704, 0.)); #22274=CARTESIAN_POINT('Ctrl Pts',(-1.35463076223553,-3.3064661737221,0.)); #22275=CARTESIAN_POINT('',(-1.35463076223553,-3.3064661737221,0.1)); #22276=CARTESIAN_POINT('Ctrl Pts',(-1.35463076223553,-3.3064661737221,0.1)); #22277=CARTESIAN_POINT('Ctrl Pts',(-1.35463076223553,-3.31402146866704, 0.1)); #22278=CARTESIAN_POINT('Ctrl Pts',(-1.35909525470299,-3.32140505236324, 0.1)); #22279=CARTESIAN_POINT('Ctrl Pts',(-1.3640748809167,-3.32466756608946,0.1)); #22280=CARTESIAN_POINT('',(-1.35463076223553,-3.3064661737221,0.)); #22281=CARTESIAN_POINT('Ctrl Pts',(-1.3781552033141,-3.28397200013602,0.)); #22282=CARTESIAN_POINT('Ctrl Pts',(-1.3781552033141,-3.28397200013602,0.1)); #22283=CARTESIAN_POINT('Ctrl Pts',(-1.36493343716045,-3.28723451386225, 0.)); #22284=CARTESIAN_POINT('Ctrl Pts',(-1.36493343716045,-3.28723451386225, 0.1)); #22285=CARTESIAN_POINT('Ctrl Pts',(-1.35463076223553,-3.29702205504092, 0.)); #22286=CARTESIAN_POINT('Ctrl Pts',(-1.35463076223553,-3.29702205504092, 0.1)); #22287=CARTESIAN_POINT('Ctrl Pts',(-1.35463076223553,-3.3064661737221,0.)); #22288=CARTESIAN_POINT('Ctrl Pts',(-1.35463076223553,-3.3064661737221,0.1)); #22289=CARTESIAN_POINT('',(-1.3781552033141,-3.28397200013602,0.)); #22290=CARTESIAN_POINT('Ctrl Pts',(-1.35463076223553,-3.3064661737221,0.)); #22291=CARTESIAN_POINT('Ctrl Pts',(-1.35463076223553,-3.29702205504092, 0.)); #22292=CARTESIAN_POINT('Ctrl Pts',(-1.36493343716045,-3.28723451386225, 0.)); #22293=CARTESIAN_POINT('Ctrl Pts',(-1.3781552033141,-3.28397200013602,0.)); #22294=CARTESIAN_POINT('',(-1.3781552033141,-3.28397200013602,0.1)); #22295=CARTESIAN_POINT('Ctrl Pts',(-1.3781552033141,-3.28397200013602,0.1)); #22296=CARTESIAN_POINT('Ctrl Pts',(-1.36493343716045,-3.28723451386225, 0.1)); #22297=CARTESIAN_POINT('Ctrl Pts',(-1.35463076223553,-3.29702205504092, 0.1)); #22298=CARTESIAN_POINT('Ctrl Pts',(-1.35463076223553,-3.3064661737221,0.1)); #22299=CARTESIAN_POINT('',(-1.3781552033141,-3.28397200013602,0.)); #22300=CARTESIAN_POINT('Ctrl Pts',(-1.40683098185513,-3.27744697268357, 0.)); #22301=CARTESIAN_POINT('Ctrl Pts',(-1.40683098185513,-3.27744697268357, 0.1)); #22302=CARTESIAN_POINT('Ctrl Pts',(-1.39979082065643,-3.27933579641981, 0.)); #22303=CARTESIAN_POINT('Ctrl Pts',(-1.39979082065643,-3.27933579641981, 0.1)); #22304=CARTESIAN_POINT('Ctrl Pts',(-1.38330654077656,-3.28277002139478, 0.)); #22305=CARTESIAN_POINT('Ctrl Pts',(-1.38330654077656,-3.28277002139478, 0.1)); #22306=CARTESIAN_POINT('Ctrl Pts',(-1.3781552033141,-3.28397200013602,0.)); #22307=CARTESIAN_POINT('Ctrl Pts',(-1.3781552033141,-3.28397200013602,0.1)); #22308=CARTESIAN_POINT('',(-1.40683098185513,-3.27744697268357,0.)); #22309=CARTESIAN_POINT('Ctrl Pts',(-1.3781552033141,-3.28397200013602,0.)); #22310=CARTESIAN_POINT('Ctrl Pts',(-1.38330654077656,-3.28277002139478, 0.)); #22311=CARTESIAN_POINT('Ctrl Pts',(-1.39979082065643,-3.27933579641981, 0.)); #22312=CARTESIAN_POINT('Ctrl Pts',(-1.40683098185513,-3.27744697268357, 0.)); #22313=CARTESIAN_POINT('',(-1.40683098185513,-3.27744697268357,0.1)); #22314=CARTESIAN_POINT('Ctrl Pts',(-1.40683098185513,-3.27744697268357, 0.1)); #22315=CARTESIAN_POINT('Ctrl Pts',(-1.39979082065643,-3.27933579641981, 0.1)); #22316=CARTESIAN_POINT('Ctrl Pts',(-1.38330654077656,-3.28277002139478, 0.1)); #22317=CARTESIAN_POINT('Ctrl Pts',(-1.3781552033141,-3.28397200013602,0.1)); #22318=CARTESIAN_POINT('',(-1.40683098185513,-3.27744697268357,0.)); #22319=CARTESIAN_POINT('Ctrl Pts',(-1.44151665410236,-3.2345191604964,0.)); #22320=CARTESIAN_POINT('Ctrl Pts',(-1.44151665410236,-3.2345191604964,0.1)); #22321=CARTESIAN_POINT('Ctrl Pts',(-1.44151665410236,-3.25014488413253, 0.)); #22322=CARTESIAN_POINT('Ctrl Pts',(-1.44151665410236,-3.25014488413253, 0.1)); #22323=CARTESIAN_POINT('Ctrl Pts',(-1.42503237422249,-3.27212392397236, 0.)); #22324=CARTESIAN_POINT('Ctrl Pts',(-1.42503237422249,-3.27212392397236, 0.1)); #22325=CARTESIAN_POINT('Ctrl Pts',(-1.40683098185513,-3.27744697268357, 0.)); #22326=CARTESIAN_POINT('Ctrl Pts',(-1.40683098185513,-3.27744697268357, 0.1)); #22327=CARTESIAN_POINT('',(-1.44151665410236,-3.2345191604964,0.)); #22328=CARTESIAN_POINT('Ctrl Pts',(-1.40683098185513,-3.27744697268357, 0.)); #22329=CARTESIAN_POINT('Ctrl Pts',(-1.42503237422249,-3.27212392397236, 0.)); #22330=CARTESIAN_POINT('Ctrl Pts',(-1.44151665410236,-3.25014488413253, 0.)); #22331=CARTESIAN_POINT('Ctrl Pts',(-1.44151665410236,-3.2345191604964,0.)); #22332=CARTESIAN_POINT('',(-1.44151665410236,-3.2345191604964,0.1)); #22333=CARTESIAN_POINT('Ctrl Pts',(-1.44151665410236,-3.2345191604964,0.1)); #22334=CARTESIAN_POINT('Ctrl Pts',(-1.44151665410236,-3.25014488413253, 0.1)); #22335=CARTESIAN_POINT('Ctrl Pts',(-1.42503237422249,-3.27212392397236, 0.1)); #22336=CARTESIAN_POINT('Ctrl Pts',(-1.40683098185513,-3.27744697268357, 0.1)); #22337=CARTESIAN_POINT('',(-1.44151665410236,-3.2345191604964,0.)); #22338=CARTESIAN_POINT('Ctrl Pts',(-1.38227627328407,-3.18592487710052, 0.)); #22339=CARTESIAN_POINT('Ctrl Pts',(-1.38227627328407,-3.18592487710052, 0.1)); #22340=CARTESIAN_POINT('Ctrl Pts',(-1.40906322808886,-3.18592487710052, 0.)); #22341=CARTESIAN_POINT('Ctrl Pts',(-1.40906322808886,-3.18592487710052, 0.1)); #22342=CARTESIAN_POINT('Ctrl Pts',(-1.44151665410236,-3.21288354315406, 0.)); #22343=CARTESIAN_POINT('Ctrl Pts',(-1.44151665410236,-3.21288354315406, 0.1)); #22344=CARTESIAN_POINT('Ctrl Pts',(-1.44151665410236,-3.2345191604964,0.)); #22345=CARTESIAN_POINT('Ctrl Pts',(-1.44151665410236,-3.2345191604964,0.1)); #22346=CARTESIAN_POINT('',(-1.38227627328407,-3.18592487710052,0.)); #22347=CARTESIAN_POINT('Ctrl Pts',(-1.44151665410236,-3.2345191604964,0.)); #22348=CARTESIAN_POINT('Ctrl Pts',(-1.44151665410236,-3.21288354315406, 0.)); #22349=CARTESIAN_POINT('Ctrl Pts',(-1.40906322808886,-3.18592487710052, 0.)); #22350=CARTESIAN_POINT('Ctrl Pts',(-1.38227627328407,-3.18592487710052, 0.)); #22351=CARTESIAN_POINT('',(-1.38227627328407,-3.18592487710052,0.1)); #22352=CARTESIAN_POINT('Ctrl Pts',(-1.38227627328407,-3.18592487710052, 0.1)); #22353=CARTESIAN_POINT('Ctrl Pts',(-1.40906322808886,-3.18592487710052, 0.1)); #22354=CARTESIAN_POINT('Ctrl Pts',(-1.44151665410236,-3.21288354315406, 0.1)); #22355=CARTESIAN_POINT('Ctrl Pts',(-1.44151665410236,-3.2345191604964,0.1)); #22356=CARTESIAN_POINT('',(-1.38227627328407,-3.18592487710052,0.)); #22357=CARTESIAN_POINT('Ctrl Pts',(-1.33316685614194,-3.19742953076668, 0.)); #22358=CARTESIAN_POINT('Ctrl Pts',(-1.33316685614194,-3.19742953076668, 0.1)); #22359=CARTESIAN_POINT('Ctrl Pts',(-1.34226755232562,-3.19244990455297, 0.)); #22360=CARTESIAN_POINT('Ctrl Pts',(-1.34226755232562,-3.19244990455297, 0.1)); #22361=CARTESIAN_POINT('Ctrl Pts',(-1.36905450713042,-3.18592487710052, 0.)); #22362=CARTESIAN_POINT('Ctrl Pts',(-1.36905450713042,-3.18592487710052, 0.1)); #22363=CARTESIAN_POINT('Ctrl Pts',(-1.38227627328407,-3.18592487710052, 0.)); #22364=CARTESIAN_POINT('Ctrl Pts',(-1.38227627328407,-3.18592487710052, 0.1)); #22365=CARTESIAN_POINT('',(-1.33316685614194,-3.19742953076668,0.)); #22366=CARTESIAN_POINT('Ctrl Pts',(-1.38227627328407,-3.18592487710052, 0.)); #22367=CARTESIAN_POINT('Ctrl Pts',(-1.36905450713042,-3.18592487710052, 0.)); #22368=CARTESIAN_POINT('Ctrl Pts',(-1.34226755232562,-3.19244990455297, 0.)); #22369=CARTESIAN_POINT('Ctrl Pts',(-1.33316685614194,-3.19742953076668, 0.)); #22370=CARTESIAN_POINT('',(-1.33316685614194,-3.19742953076668,0.1)); #22371=CARTESIAN_POINT('Ctrl Pts',(-1.33316685614194,-3.19742953076668, 0.1)); #22372=CARTESIAN_POINT('Ctrl Pts',(-1.34226755232562,-3.19244990455297, 0.1)); #22373=CARTESIAN_POINT('Ctrl Pts',(-1.36905450713042,-3.18592487710052, 0.1)); #22374=CARTESIAN_POINT('Ctrl Pts',(-1.38227627328407,-3.18592487710052, 0.1)); #22375=CARTESIAN_POINT('',(-1.33316685614194,-3.19742953076668,0.)); #22376=CARTESIAN_POINT('Origin',(-1.33316685614194,-3.22610530930771,0.)); #22377=CARTESIAN_POINT('',(-1.33316685614194,-3.22610530930771,0.)); #22378=CARTESIAN_POINT('',(-1.33316685614194,-3.19742953076668,0.)); #22379=CARTESIAN_POINT('',(-1.33316685614194,-3.22610530930771,0.1)); #22380=CARTESIAN_POINT('',(-1.33316685614194,-3.19742953076668,0.1)); #22381=CARTESIAN_POINT('',(-1.33316685614194,-3.22610530930771,0.)); #22382=CARTESIAN_POINT('Origin',(-1.33454054613193,-3.22610530930771,0.)); #22383=CARTESIAN_POINT('',(-1.33454054613193,-3.22610530930771,0.)); #22384=CARTESIAN_POINT('',(-1.33316685614194,-3.22610530930771,0.)); #22385=CARTESIAN_POINT('',(-1.33454054613193,-3.22610530930771,0.1)); #22386=CARTESIAN_POINT('',(-1.33316685614194,-3.22610530930771,0.1)); #22387=CARTESIAN_POINT('',(-1.33454054613193,-3.22610530930771,0.)); #22388=CARTESIAN_POINT('Ctrl Pts',(-1.38279140703031,-3.2084190506866,0.)); #22389=CARTESIAN_POINT('Ctrl Pts',(-1.38279140703031,-3.2084190506866,0.1)); #22390=CARTESIAN_POINT('Ctrl Pts',(-1.36991306337416,-3.2084190506866,0.)); #22391=CARTESIAN_POINT('Ctrl Pts',(-1.36991306337416,-3.2084190506866,0.1)); #22392=CARTESIAN_POINT('Ctrl Pts',(-1.34484322105685,-3.21786316936778, 0.)); #22393=CARTESIAN_POINT('Ctrl Pts',(-1.34484322105685,-3.21786316936778, 0.1)); #22394=CARTESIAN_POINT('Ctrl Pts',(-1.33454054613193,-3.22610530930771, 0.)); #22395=CARTESIAN_POINT('Ctrl Pts',(-1.33454054613193,-3.22610530930771, 0.1)); #22396=CARTESIAN_POINT('',(-1.38279140703031,-3.2084190506866,0.)); #22397=CARTESIAN_POINT('Ctrl Pts',(-1.33454054613193,-3.22610530930771, 0.)); #22398=CARTESIAN_POINT('Ctrl Pts',(-1.34484322105685,-3.21786316936778, 0.)); #22399=CARTESIAN_POINT('Ctrl Pts',(-1.36991306337416,-3.2084190506866,0.)); #22400=CARTESIAN_POINT('Ctrl Pts',(-1.38279140703031,-3.2084190506866,0.)); #22401=CARTESIAN_POINT('',(-1.38279140703031,-3.2084190506866,0.1)); #22402=CARTESIAN_POINT('Ctrl Pts',(-1.38279140703031,-3.2084190506866,0.1)); #22403=CARTESIAN_POINT('Ctrl Pts',(-1.36991306337416,-3.2084190506866,0.1)); #22404=CARTESIAN_POINT('Ctrl Pts',(-1.34484322105685,-3.21786316936778, 0.1)); #22405=CARTESIAN_POINT('Ctrl Pts',(-1.33454054613193,-3.22610530930771, 0.1)); #22406=CARTESIAN_POINT('',(-1.38279140703031,-3.2084190506866,0.)); #22407=CARTESIAN_POINT('Ctrl Pts',(-1.41421456555132,-3.23074151302393, 0.)); #22408=CARTESIAN_POINT('Ctrl Pts',(-1.41421456555132,-3.23074151302393, 0.1)); #22409=CARTESIAN_POINT('Ctrl Pts',(-1.41421456555132,-3.21958028185526, 0.)); #22410=CARTESIAN_POINT('Ctrl Pts',(-1.41421456555132,-3.21958028185526, 0.1)); #22411=CARTESIAN_POINT('Ctrl Pts',(-1.39601317318396,-3.2084190506866,0.)); #22412=CARTESIAN_POINT('Ctrl Pts',(-1.39601317318396,-3.2084190506866,0.1)); #22413=CARTESIAN_POINT('Ctrl Pts',(-1.38279140703031,-3.2084190506866,0.)); #22414=CARTESIAN_POINT('Ctrl Pts',(-1.38279140703031,-3.2084190506866,0.1)); #22415=CARTESIAN_POINT('',(-1.41421456555132,-3.23074151302393,0.)); #22416=CARTESIAN_POINT('Ctrl Pts',(-1.38279140703031,-3.2084190506866,0.)); #22417=CARTESIAN_POINT('Ctrl Pts',(-1.39601317318396,-3.2084190506866,0.)); #22418=CARTESIAN_POINT('Ctrl Pts',(-1.41421456555132,-3.21958028185526, 0.)); #22419=CARTESIAN_POINT('Ctrl Pts',(-1.41421456555132,-3.23074151302393, 0.)); #22420=CARTESIAN_POINT('',(-1.41421456555132,-3.23074151302393,0.1)); #22421=CARTESIAN_POINT('Ctrl Pts',(-1.41421456555132,-3.23074151302393, 0.1)); #22422=CARTESIAN_POINT('Ctrl Pts',(-1.41421456555132,-3.21958028185526, 0.1)); #22423=CARTESIAN_POINT('Ctrl Pts',(-1.39601317318396,-3.2084190506866,0.1)); #22424=CARTESIAN_POINT('Ctrl Pts',(-1.38279140703031,-3.2084190506866,0.1)); #22425=CARTESIAN_POINT('',(-1.41421456555132,-3.23074151302393,0.)); #22426=CARTESIAN_POINT('Ctrl Pts',(-1.39137696946775,-3.25375082035625, 0.)); #22427=CARTESIAN_POINT('Ctrl Pts',(-1.39137696946775,-3.25375082035625, 0.1)); #22428=CARTESIAN_POINT('Ctrl Pts',(-1.40339675688016,-3.25066001787878, 0.)); #22429=CARTESIAN_POINT('Ctrl Pts',(-1.40339675688016,-3.25066001787878, 0.1)); #22430=CARTESIAN_POINT('Ctrl Pts',(-1.41421456555132,-3.2408724767001,0.)); #22431=CARTESIAN_POINT('Ctrl Pts',(-1.41421456555132,-3.2408724767001,0.1)); #22432=CARTESIAN_POINT('Ctrl Pts',(-1.41421456555132,-3.23074151302393, 0.)); #22433=CARTESIAN_POINT('Ctrl Pts',(-1.41421456555132,-3.23074151302393, 0.1)); #22434=CARTESIAN_POINT('',(-1.39137696946775,-3.25375082035625,0.)); #22435=CARTESIAN_POINT('Ctrl Pts',(-1.41421456555132,-3.23074151302393, 0.)); #22436=CARTESIAN_POINT('Ctrl Pts',(-1.41421456555132,-3.2408724767001,0.)); #22437=CARTESIAN_POINT('Ctrl Pts',(-1.40339675688016,-3.25066001787878, 0.)); #22438=CARTESIAN_POINT('Ctrl Pts',(-1.39137696946775,-3.25375082035625, 0.)); #22439=CARTESIAN_POINT('',(-1.39137696946775,-3.25375082035625,0.1)); #22440=CARTESIAN_POINT('Ctrl Pts',(-1.39137696946775,-3.25375082035625, 0.1)); #22441=CARTESIAN_POINT('Ctrl Pts',(-1.40339675688016,-3.25066001787878, 0.1)); #22442=CARTESIAN_POINT('Ctrl Pts',(-1.41421456555132,-3.2408724767001,0.1)); #22443=CARTESIAN_POINT('Ctrl Pts',(-1.41421456555132,-3.23074151302393, 0.1)); #22444=CARTESIAN_POINT('',(-1.39137696946775,-3.25375082035625,0.)); #22445=CARTESIAN_POINT('Ctrl Pts',(-1.36270119092671,-3.2602758478087,0.)); #22446=CARTESIAN_POINT('Ctrl Pts',(-1.36270119092671,-3.2602758478087,0.1)); #22447=CARTESIAN_POINT('Ctrl Pts',(-1.3707716196179,-3.25838702407247,0.)); #22448=CARTESIAN_POINT('Ctrl Pts',(-1.3707716196179,-3.25838702407247,0.1)); #22449=CARTESIAN_POINT('Ctrl Pts',(-1.38553878701029,-3.25529622159499, 0.)); #22450=CARTESIAN_POINT('Ctrl Pts',(-1.38553878701029,-3.25529622159499, 0.1)); #22451=CARTESIAN_POINT('Ctrl Pts',(-1.39137696946775,-3.25375082035625, 0.)); #22452=CARTESIAN_POINT('Ctrl Pts',(-1.39137696946775,-3.25375082035625, 0.1)); #22453=CARTESIAN_POINT('',(-1.36270119092671,-3.2602758478087,0.)); #22454=CARTESIAN_POINT('Ctrl Pts',(-1.39137696946775,-3.25375082035625, 0.)); #22455=CARTESIAN_POINT('Ctrl Pts',(-1.38553878701029,-3.25529622159499, 0.)); #22456=CARTESIAN_POINT('Ctrl Pts',(-1.3707716196179,-3.25838702407247,0.)); #22457=CARTESIAN_POINT('Ctrl Pts',(-1.36270119092671,-3.2602758478087,0.)); #22458=CARTESIAN_POINT('',(-1.36270119092671,-3.2602758478087,0.1)); #22459=CARTESIAN_POINT('Ctrl Pts',(-1.36270119092671,-3.2602758478087,0.1)); #22460=CARTESIAN_POINT('Ctrl Pts',(-1.3707716196179,-3.25838702407247,0.1)); #22461=CARTESIAN_POINT('Ctrl Pts',(-1.38553878701029,-3.25529622159499, 0.1)); #22462=CARTESIAN_POINT('Ctrl Pts',(-1.39137696946775,-3.25375082035625, 0.1)); #22463=CARTESIAN_POINT('',(-1.36270119092671,-3.2602758478087,0.)); #22464=CARTESIAN_POINT('Ctrl Pts',(-1.32732867368448,-3.30286023749838, 0.)); #22465=CARTESIAN_POINT('Ctrl Pts',(-1.32732867368448,-3.30286023749838, 0.1)); #22466=CARTESIAN_POINT('Ctrl Pts',(-1.32732867368448,-3.28517397887726, 0.)); #22467=CARTESIAN_POINT('Ctrl Pts',(-1.32732867368448,-3.28517397887726, 0.1)); #22468=CARTESIAN_POINT('Ctrl Pts',(-1.34518664355435,-3.26474034027617, 0.)); #22469=CARTESIAN_POINT('Ctrl Pts',(-1.34518664355435,-3.26474034027617, 0.1)); #22470=CARTESIAN_POINT('Ctrl Pts',(-1.36270119092671,-3.2602758478087,0.)); #22471=CARTESIAN_POINT('Ctrl Pts',(-1.36270119092671,-3.2602758478087,0.1)); #22472=CARTESIAN_POINT('',(-1.32732867368448,-3.30286023749838,0.)); #22473=CARTESIAN_POINT('Ctrl Pts',(-1.36270119092671,-3.2602758478087,0.)); #22474=CARTESIAN_POINT('Ctrl Pts',(-1.34518664355435,-3.26474034027617, 0.)); #22475=CARTESIAN_POINT('Ctrl Pts',(-1.32732867368448,-3.28517397887726, 0.)); #22476=CARTESIAN_POINT('Ctrl Pts',(-1.32732867368448,-3.30286023749838, 0.)); #22477=CARTESIAN_POINT('',(-1.32732867368448,-3.30286023749838,0.1)); #22478=CARTESIAN_POINT('Ctrl Pts',(-1.32732867368448,-3.30286023749838, 0.1)); #22479=CARTESIAN_POINT('Ctrl Pts',(-1.32732867368448,-3.28517397887726, 0.1)); #22480=CARTESIAN_POINT('Ctrl Pts',(-1.34518664355435,-3.26474034027617, 0.1)); #22481=CARTESIAN_POINT('Ctrl Pts',(-1.36270119092671,-3.2602758478087,0.1)); #22482=CARTESIAN_POINT('',(-1.32732867368448,-3.30286023749838,0.)); #22483=CARTESIAN_POINT('Ctrl Pts',(-1.34329781981811,-3.33806104349186, 0.)); #22484=CARTESIAN_POINT('Ctrl Pts',(-1.34329781981811,-3.33806104349186, 0.1)); #22485=CARTESIAN_POINT('Ctrl Pts',(-1.33539910237567,-3.33136430479066, 0.)); #22486=CARTESIAN_POINT('Ctrl Pts',(-1.33539910237567,-3.33136430479066, 0.1)); #22487=CARTESIAN_POINT('Ctrl Pts',(-1.32732867368448,-3.3131629124233,0.)); #22488=CARTESIAN_POINT('Ctrl Pts',(-1.32732867368448,-3.3131629124233,0.1)); #22489=CARTESIAN_POINT('Ctrl Pts',(-1.32732867368448,-3.30286023749838, 0.)); #22490=CARTESIAN_POINT('Ctrl Pts',(-1.32732867368448,-3.30286023749838, 0.1)); #22491=CARTESIAN_POINT('',(-1.34329781981811,-3.33806104349186,0.)); #22492=CARTESIAN_POINT('Ctrl Pts',(-1.32732867368448,-3.30286023749838, 0.)); #22493=CARTESIAN_POINT('Ctrl Pts',(-1.32732867368448,-3.3131629124233,0.)); #22494=CARTESIAN_POINT('Ctrl Pts',(-1.33539910237567,-3.33136430479066, 0.)); #22495=CARTESIAN_POINT('Ctrl Pts',(-1.34329781981811,-3.33806104349186, 0.)); #22496=CARTESIAN_POINT('',(-1.34329781981811,-3.33806104349186,0.1)); #22497=CARTESIAN_POINT('Ctrl Pts',(-1.34329781981811,-3.33806104349186, 0.1)); #22498=CARTESIAN_POINT('Ctrl Pts',(-1.33539910237567,-3.33136430479066, 0.1)); #22499=CARTESIAN_POINT('Ctrl Pts',(-1.32732867368448,-3.3131629124233,0.1)); #22500=CARTESIAN_POINT('Ctrl Pts',(-1.32732867368448,-3.30286023749838, 0.1)); #22501=CARTESIAN_POINT('',(-1.34329781981811,-3.33806104349186,0.)); #22502=CARTESIAN_POINT('Ctrl Pts',(-1.38948814573151,-3.35248478838675, 0.)); #22503=CARTESIAN_POINT('Ctrl Pts',(-1.38948814573151,-3.35248478838675, 0.1)); #22504=CARTESIAN_POINT('Ctrl Pts',(-1.37317557710039,-3.35248478838675, 0.)); #22505=CARTESIAN_POINT('Ctrl Pts',(-1.37317557710039,-3.35248478838675, 0.1)); #22506=CARTESIAN_POINT('Ctrl Pts',(-1.3517116710068,-3.34510120469056,0.)); #22507=CARTESIAN_POINT('Ctrl Pts',(-1.3517116710068,-3.34510120469056,0.1)); #22508=CARTESIAN_POINT('Ctrl Pts',(-1.34329781981811,-3.33806104349186, 0.)); #22509=CARTESIAN_POINT('Ctrl Pts',(-1.34329781981811,-3.33806104349186, 0.1)); #22510=CARTESIAN_POINT('',(-1.38948814573151,-3.35248478838675,0.)); #22511=CARTESIAN_POINT('Ctrl Pts',(-1.34329781981811,-3.33806104349186, 0.)); #22512=CARTESIAN_POINT('Ctrl Pts',(-1.3517116710068,-3.34510120469056,0.)); #22513=CARTESIAN_POINT('Ctrl Pts',(-1.37317557710039,-3.35248478838675, 0.)); #22514=CARTESIAN_POINT('Ctrl Pts',(-1.38948814573151,-3.35248478838675, 0.)); #22515=CARTESIAN_POINT('',(-1.38948814573151,-3.35248478838675,0.1)); #22516=CARTESIAN_POINT('Ctrl Pts',(-1.38948814573151,-3.35248478838675, 0.1)); #22517=CARTESIAN_POINT('Ctrl Pts',(-1.37317557710039,-3.35248478838675, 0.1)); #22518=CARTESIAN_POINT('Ctrl Pts',(-1.3517116710068,-3.34510120469056,0.1)); #22519=CARTESIAN_POINT('Ctrl Pts',(-1.34329781981811,-3.33806104349186, 0.1)); #22520=CARTESIAN_POINT('',(-1.38948814573151,-3.35248478838675,0.)); #22521=CARTESIAN_POINT('Ctrl Pts',(-1.44220349909736,-3.33909131098435, 0.)); #22522=CARTESIAN_POINT('Ctrl Pts',(-1.44220349909736,-3.33909131098435, 0.1)); #22523=CARTESIAN_POINT('Ctrl Pts',(-1.43310280291368,-3.34389922594932, 0.)); #22524=CARTESIAN_POINT('Ctrl Pts',(-1.43310280291368,-3.34389922594932, 0.1)); #22525=CARTESIAN_POINT('Ctrl Pts',(-1.40545729186514,-3.35248478838675, 0.)); #22526=CARTESIAN_POINT('Ctrl Pts',(-1.40545729186514,-3.35248478838675, 0.1)); #22527=CARTESIAN_POINT('Ctrl Pts',(-1.38948814573151,-3.35248478838675, 0.)); #22528=CARTESIAN_POINT('Ctrl Pts',(-1.38948814573151,-3.35248478838675, 0.1)); #22529=CARTESIAN_POINT('Ctrl Pts',(-1.38948814573151,-3.35248478838675, 0.)); #22530=CARTESIAN_POINT('Ctrl Pts',(-1.40545729186514,-3.35248478838675, 0.)); #22531=CARTESIAN_POINT('Ctrl Pts',(-1.43310280291368,-3.34389922594932, 0.)); #22532=CARTESIAN_POINT('Ctrl Pts',(-1.44220349909736,-3.33909131098435, 0.)); #22533=CARTESIAN_POINT('Ctrl Pts',(-1.44220349909736,-3.33909131098435, 0.1)); #22534=CARTESIAN_POINT('Ctrl Pts',(-1.43310280291368,-3.34389922594932, 0.1)); #22535=CARTESIAN_POINT('Ctrl Pts',(-1.40545729186514,-3.35248478838675, 0.1)); #22536=CARTESIAN_POINT('Ctrl Pts',(-1.38948814573151,-3.35248478838675, 0.1)); #22537=CARTESIAN_POINT('Origin',(-1.38578515596022,-3.27014238758098,0.)); #22538=CARTESIAN_POINT('Origin',(-1.38578515596022,-3.27014238758098,0.1)); #22539=CARTESIAN_POINT('',(0.,0.,0.)); #22540=CARTESIAN_POINT('',(0.,0.,0.15)); #22541=CARTESIAN_POINT('',(0.,0.,0.15)); #22542=CARTESIAN_POINT('',(2.46903970140645,2.13182684914855,2.452)); #22543=UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(0.01),#22553, 'DISTANCE_ACCURACY_VALUE', 'Maximum model space distance between geometric entities at asserted c onnectivities'); #22544=UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(0.01),#22553, 'DISTANCE_ACCURACY_VALUE', 'Maximum model space distance between geometric entities at asserted c onnectivities'); #22545=UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(0.01),#22553, 'DISTANCE_ACCURACY_VALUE', 'Maximum model space distance between geometric entities at asserted c onnectivities'); #22546=UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(0.01),#22553, 'DISTANCE_ACCURACY_VALUE', 'Maximum model space distance between geometric entities at asserted c onnectivities'); #22547=UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-6),#22553, 'DISTANCE_ACCURACY_VALUE', 'Maximum model space distance between geometric entities at asserted c onnectivities'); #22548=( GEOMETRIC_REPRESENTATION_CONTEXT(3) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#22543)) GLOBAL_UNIT_ASSIGNED_CONTEXT((#22553,#22556,#22554)) REPRESENTATION_CONTEXT('','3D') ); #22549=( GEOMETRIC_REPRESENTATION_CONTEXT(3) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#22544)) GLOBAL_UNIT_ASSIGNED_CONTEXT((#22553,#22556,#22554)) REPRESENTATION_CONTEXT('','3D') ); #22550=( GEOMETRIC_REPRESENTATION_CONTEXT(3) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#22545)) GLOBAL_UNIT_ASSIGNED_CONTEXT((#22553,#22556,#22554)) REPRESENTATION_CONTEXT('','3D') ); #22551=( GEOMETRIC_REPRESENTATION_CONTEXT(3) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#22546)) GLOBAL_UNIT_ASSIGNED_CONTEXT((#22553,#22556,#22554)) REPRESENTATION_CONTEXT('','3D') ); #22552=( GEOMETRIC_REPRESENTATION_CONTEXT(3) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#22547)) GLOBAL_UNIT_ASSIGNED_CONTEXT((#22553,#22556,#22554)) REPRESENTATION_CONTEXT('','3D') ); #22553=( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); #22554=( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); #22555=DIMENSIONAL_EXPONENTS(0.,0.,0.,0.,0.,0.,0.); #22556=( CONVERSION_BASED_UNIT('degree',#22558) NAMED_UNIT(#22555) PLANE_ANGLE_UNIT() ); #22557=( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); #22558=PLANE_ANGLE_MEASURE_WITH_UNIT(PLANE_ANGLE_MEASURE(0.01745329252), #22557); #22559=SHAPE_DEFINITION_REPRESENTATION(#22563,#22570); #22560=SHAPE_DEFINITION_REPRESENTATION(#22564,#22571); #22561=SHAPE_DEFINITION_REPRESENTATION(#22565,#22572); #22562=SHAPE_DEFINITION_REPRESENTATION(#22566,#22573); #22563=PRODUCT_DEFINITION_SHAPE('',$,#22575); #22564=PRODUCT_DEFINITION_SHAPE('',$,#22576); #22565=PRODUCT_DEFINITION_SHAPE('',$,#22577); #22566=PRODUCT_DEFINITION_SHAPE('',$,#22578); #22567=PRODUCT_DEFINITION_SHAPE($,$,#20); #22568=PRODUCT_DEFINITION_SHAPE($,$,#21); #22569=PRODUCT_DEFINITION_SHAPE($,$,#22); #22570=SHAPE_REPRESENTATION('',(#12746),#22548); #22571=SHAPE_REPRESENTATION('',(#12869),#22549); #22572=SHAPE_REPRESENTATION('',(#13142),#22550); #22573=SHAPE_REPRESENTATION('',(#13433,#13434,#13435,#13436),#22551); #22574=PRODUCT_DEFINITION_CONTEXT('part definition',#22588,'design'); #22575=PRODUCT_DEFINITION('1','1',#22579,#22574); #22576=PRODUCT_DEFINITION('2','2',#22580,#22574); #22577=PRODUCT_DEFINITION('STM Logo','STM Logo',#22581,#22574); #22578=PRODUCT_DEFINITION('1','1',#22582,#22574); #22579=PRODUCT_DEFINITION_FORMATION('',$,#22590); #22580=PRODUCT_DEFINITION_FORMATION('',$,#22591); #22581=PRODUCT_DEFINITION_FORMATION('',$,#22592); #22582=PRODUCT_DEFINITION_FORMATION('',$,#22593); #22583=PRODUCT_RELATED_PRODUCT_CATEGORY('1','1',(#22590)); #22584=PRODUCT_RELATED_PRODUCT_CATEGORY('2','2',(#22591)); #22585=PRODUCT_RELATED_PRODUCT_CATEGORY('STM Logo','STM Logo',(#22592)); #22586=PRODUCT_RELATED_PRODUCT_CATEGORY('1','1',(#22593)); #22587=APPLICATION_PROTOCOL_DEFINITION('international standard', 'automotive_design',2009,#22588); #22588=APPLICATION_CONTEXT( 'Core Data for Automotive Mechanical Design Process'); #22589=PRODUCT_CONTEXT('part definition',#22588,'mechanical'); #22590=PRODUCT('1','1',$,(#22589)); #22591=PRODUCT('2','2',$,(#22589)); #22592=PRODUCT('STM Logo','STM Logo',$,(#22589)); #22593=PRODUCT('1','1',$,(#22589)); #22594=PRESENTATION_STYLE_ASSIGNMENT((#22597)); #22595=PRESENTATION_STYLE_ASSIGNMENT((#22598)); #22596=PRESENTATION_STYLE_ASSIGNMENT((#22599)); #22597=SURFACE_STYLE_USAGE(.BOTH.,#22600); #22598=SURFACE_STYLE_USAGE(.BOTH.,#22601); #22599=SURFACE_STYLE_USAGE(.BOTH.,#22602); #22600=SURFACE_SIDE_STYLE($,(#22603)); #22601=SURFACE_SIDE_STYLE($,(#22604)); #22602=SURFACE_SIDE_STYLE($,(#22605)); #22603=SURFACE_STYLE_FILL_AREA(#22606); #22604=SURFACE_STYLE_FILL_AREA(#22607); #22605=SURFACE_STYLE_FILL_AREA(#22608); #22606=FILL_AREA_STYLE($,(#22609)); #22607=FILL_AREA_STYLE($,(#22610)); #22608=FILL_AREA_STYLE($,(#22611)); #22609=FILL_AREA_STYLE_COLOUR($,#22612); #22610=FILL_AREA_STYLE_COLOUR($,#22613); #22611=FILL_AREA_STYLE_COLOUR($,#22614); #22612=COLOUR_RGB('',0.294117647058824,0.294117647058824,0.294117647058824); #22613=COLOUR_RGB('',1.,1.,1.); #22614=COLOUR_RGB('',1.,1.,1.); ENDSEC; END-ISO-10303-21; ================================================ FILE: electronics/lib/VN7007ALHTR.dcm ================================================ EESchema-DOCLIB Version 2.0 # #End Doc Library ================================================ FILE: electronics/lib/VN7007ALHTR.lib ================================================ EESchema-LIBRARY Version 2.4 #encoding utf-8 # # VN7007ALH # DEF VN7007ALH U 0 40 Y Y 1 F N F0 "U" -400 400 50 H V C CNN F1 "VN7007ALH" -400 300 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW S -500 250 500 -400 0 1 0 f X OUTPUT 1 600 100 100 L 50 50 1 1 w X OUTPUT 2 600 0 100 L 50 50 1 1 P X OUTPUT 3 600 -100 100 L 50 50 1 1 P X IN 4 -600 100 100 R 50 50 1 1 I X CURSENSE 5 -600 -200 100 R 50 50 1 1 O X FR_DIAG 6 -600 0 100 R 50 50 1 1 I X GND 7 0 -500 100 U 50 50 1 1 W X VCC TAB 0 350 100 D 50 50 1 1 W ENDDRAW ENDDEF # #End Library ================================================ FILE: electronics/lib/VN7007ALHTR.pretty/VN7007ALHTR.kicad_mod ================================================ (module VN7007ALHTR (layer F.Cu) (tedit 60700091) (fp_text reference REF** (at -2.975 -4.35) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15)) (justify left)) ) (fp_text value Val** (at 0 0) (layer F.Fab) (effects (font (size 1.27 1.27) (thickness 0.15))) ) (fp_line (start 5.025001 -3.725) (end 5.025001 -3.725) (layer F.CrtYd) (width 0.15)) (fp_line (start 5.025001 -3.725) (end -7.024999 -3.725) (layer F.CrtYd) (width 0.15)) (fp_line (start -7.024999 -3.725) (end -7.024999 3.725) (layer F.CrtYd) (width 0.15)) (fp_line (start -7.024999 3.725) (end 5.025001 3.725) (layer F.CrtYd) (width 0.15)) (fp_line (start 5.025001 3.725) (end 5.025001 -3.725) (layer F.CrtYd) (width 0.15)) (fp_line (start 3.05 -3.25) (end 3.05 -3.15) (layer F.SilkS) (width 0.15)) (fp_line (start 3.05 3.15) (end 3.05 3.25) (layer F.SilkS) (width 0.15)) (fp_line (start -3.05 3.25) (end 3.05 3.25) (layer F.SilkS) (width 0.15)) (fp_line (start -3.05 -3.25) (end 3.05 -3.25) (layer F.SilkS) (width 0.15)) (fp_circle (center -6.4 -3.55) (end -6.275 -3.55) (layer F.SilkS) (width 0.25)) (fp_line (start -3.05 3.25) (end -3.05 -3.25) (layer F.Fab) (width 0.15)) (fp_line (start -3.05 -3.25) (end 3.05 -3.25) (layer F.Fab) (width 0.15)) (fp_line (start 3.05 -3.25) (end 3.05 3.25) (layer F.Fab) (width 0.15)) (fp_line (start 3.05 3.25) (end -3.05 3.25) (layer F.Fab) (width 0.15)) (pad TAB smd rect (at 1.375 0 90) (size 5.55 6.5) (layers F.Cu F.Paste F.Mask)) (pad 1 smd rect (at -5.425 -2.55 90) (size 0.6 2.4) (layers F.Cu F.Paste F.Mask)) (pad 2 smd rect (at -5.425 -1.7 90) (size 0.6 2.4) (layers F.Cu F.Paste F.Mask)) (pad 3 smd rect (at -5.425 -0.85 90) (size 0.6 2.4) (layers F.Cu F.Paste F.Mask)) (pad 4 smd rect (at -5.425 0 90) (size 0.6 2.4) (layers F.Cu F.Paste F.Mask)) (pad 5 smd rect (at -5.425 0.85 90) (size 0.6 2.4) (layers F.Cu F.Paste F.Mask)) (pad 6 smd rect (at -5.425 1.7 90) (size 0.6 2.4) (layers F.Cu F.Paste F.Mask)) (pad 7 smd rect (at -5.425 2.55 90) (size 0.6 2.4) (layers F.Cu F.Paste F.Mask)) (model ../lib/VN7003ALHTR.models/STMicroelectronics_-_VN7003ALHTR.step (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 90)) ) ) ================================================ FILE: electronics/lib/arduino_uno_shield.dcm ================================================ EESchema-DOCLIB Version 2.0 # #End Doc Library ================================================ FILE: electronics/lib/arduino_uno_shield.lib ================================================ EESchema-LIBRARY Version 2.3 #encoding utf-8 # # arduino_uno_shield # DEF arduino_uno_shield U 0 40 Y Y 1 F N F0 "U" -800 -250 60 H V C CNN F1 "arduino_uno_shield" -450 -100 60 H V C CNN F2 "" 200 -100 60 H I C CNN F3 "" 200 -100 60 H I C CNN DRAW S 0 -1650 -900 0 0 1 0 N X D4 D4 200 -950 200 L 50 50 1 1 B X D5 D5 200 -1050 200 L 50 50 1 1 B X D6 D6 200 -1150 200 L 50 50 1 1 B X GND GND 200 -1550 200 L 50 50 1 1 W X VIN VIN 200 -1450 200 L 50 50 1 1 w X ICSP_MISO ISP1 200 -250 200 L 50 50 1 1 B X ICSP_VCC ISP2 200 -350 200 L 50 50 1 1 w X ICSP_SCK ISP3 200 -450 200 L 50 50 1 1 B X ICSP_MOSI ISP4 200 -550 200 L 50 50 1 1 B X ICSP_RST ISP5 200 -650 200 L 50 50 1 1 B X ICSP_GND ISP6 200 -750 200 L 50 50 1 1 w ENDDRAW ENDDEF # #End Library ================================================ FILE: electronics/lib/gp2s60.dcm ================================================ EESchema-DOCLIB Version 2.0 # $CMP GP2S60 D Reflective photointerrupter K photointerrupter IR $ENDCMP # #End Doc Library ================================================ FILE: electronics/lib/gp2s60.lib ================================================ EESchema-LIBRARY Version 2.3 #encoding utf-8 # # GP2S60 # DEF GP2S60 U 0 40 Y Y 1 F N F0 "U" -200 200 50 H V L CNN F1 "GP2S60" -200 -200 50 H V L CNN F2 "" -200 -200 50 H V L CIN F3 "" 0 0 50 H V L CNN DRAW T 0 -180 75 30 0 0 0 A Normal 0 C C T 0 175 70 30 0 0 0 C Normal 0 C C T 0 175 -125 30 0 0 0 E Normal 0 C C T 0 -180 -125 30 0 0 0 K Normal 0 C C S -200 150 200 -150 0 1 10 f P 2 0 1 10 -125 -25 -75 -25 N P 2 0 1 0 100 25 175 100 N P 2 0 1 0 175 -100 100 -25 F P 2 0 1 0 175 -100 200 -100 N P 2 0 1 0 175 100 200 100 N P 3 0 1 0 -200 100 -100 100 -100 25 N P 3 0 1 0 -100 -25 -100 -100 -200 -100 N P 3 0 1 20 100 75 100 -75 100 -75 N P 4 0 1 10 -100 -25 -125 25 -75 25 -100 -25 F P 4 0 1 0 -20 10 1 30 1 10 31 40 N P 4 0 1 0 31 40 11 30 21 20 31 40 N P 5 0 1 0 120 -65 140 -45 160 -85 120 -65 120 -65 F P 7 0 1 0 -20 -30 1 -10 1 -30 31 0 11 -10 21 -20 31 0 N X ~ 1 300 100 100 L 50 50 1 1 P X ~ 2 300 -100 100 L 50 50 1 1 P X ~ 3 -300 -100 100 R 50 50 1 1 P X ~ 4 -300 100 100 R 50 50 1 1 P ENDDRAW ENDDEF # #End Library ================================================ FILE: electronics/lib/hall_effect.dcm ================================================ EESchema-DOCLIB Version 2.0 # #End Doc Library ================================================ FILE: electronics/lib/hall_effect.lib ================================================ EESchema-LIBRARY Version 2.3 #encoding utf-8 # # hall_effect # DEF hall_effect U 0 40 Y Y 1 F N F0 "U" 100 200 60 H V C CNN F1 "hall_effect" -100 0 60 V V C CNN F2 "" 0 0 60 H I C CNN F3 "" 0 0 60 H I C CNN DRAW S -200 250 200 -250 0 1 0 N X VDD 1 0 450 200 D 50 50 1 1 I X GND 2 0 -450 200 U 50 50 1 1 W X OUT 3 400 0 200 L 50 50 1 1 C ENDDRAW ENDDEF # #End Library ================================================ FILE: electronics/lib/hall_effect.pretty/hall_effect.kicad_mod ================================================ (module hall_effect (layer F.Cu) (tedit 5B676C6C) (fp_text reference U1 (at 5.08 -1.27) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value hall_effect (at 0 -2.54) (layer F.Fab) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start 2.2 0.58) (end -2.2 0.58) (layer B.SilkS) (width 0.15)) (fp_line (start 2.2 -0.22) (end 2.2 0.58) (layer B.SilkS) (width 0.15)) (fp_line (start -2.2 -0.22) (end -2.2 0.58) (layer B.SilkS) (width 0.15)) (fp_line (start 2.2 -0.22) (end 1.4 -1.02) (layer B.SilkS) (width 0.15)) (fp_line (start -2.2 -0.22) (end -1.4 -1.02) (layer B.SilkS) (width 0.15)) (fp_line (start 1.4 -1.02) (end -1.4 -1.02) (layer B.SilkS) (width 0.15)) (fp_line (start -1.4 1.02) (end 1.4 1.03) (layer F.SilkS) (width 0.15)) (fp_line (start 2.2 0.22) (end 1.4 1.02) (layer F.SilkS) (width 0.15)) (fp_line (start -2.2 0.22) (end -1.4 1.02) (layer F.SilkS) (width 0.15)) (fp_line (start 2.2 0.22) (end 2.2 -0.58) (layer F.SilkS) (width 0.15)) (fp_line (start -2.2 0.22) (end -2.2 -0.58) (layer F.SilkS) (width 0.15)) (fp_line (start -2.2 -0.58) (end 2.2 -0.58) (layer F.SilkS) (width 0.15)) (pad 1 thru_hole rect (at -1.27 0) (size 0.9 1.4) (drill 0.6) (layers *.Cu *.Mask)) (pad 2 thru_hole oval (at 0 0) (size 0.9 1.4) (drill 0.6) (layers *.Cu *.Mask)) (pad 3 thru_hole oval (at 1.27 0) (size 0.9 1.4) (drill 0.6) (layers *.Cu *.Mask)) ) ================================================ FILE: electronics/lib/hall_effect.pretty/hall_effect_wide.kicad_mod ================================================ (module hall_effect_wide (layer F.Cu) (tedit 61809B04) (fp_text reference U1 (at 5.08 -1.27) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value hall_effect_wide (at 0 -2.54) (layer F.Fab) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -2.2 -0.889) (end 2.2 -0.889) (layer F.SilkS) (width 0.15)) (fp_line (start -2.2 -0.889) (end -2.2 -3.175) (layer F.SilkS) (width 0.15)) (fp_line (start 2.2 -0.889) (end 2.2 -3.175) (layer F.SilkS) (width 0.15)) (fp_line (start -1.397 -3.175) (end -1.397 -0.889) (layer F.SilkS) (width 0.15)) (fp_line (start 1.397 -3.175) (end 1.4 -0.889) (layer F.SilkS) (width 0.15)) (pad 1 thru_hole rect (at -2.54 0) (size 1.6 1.6) (drill 0.6) (layers *.Cu *.Mask)) (pad 2 thru_hole circle (at 0 0) (size 1.6 1.6) (drill 0.6) (layers *.Cu *.Mask)) (pad 3 thru_hole circle (at 2.54 0) (size 1.6 1.6) (drill 0.6) (layers *.Cu *.Mask)) (model ${KISYS3DMOD}/Package_TO_SOT_THT.3dshapes/TO-92S_Wide.step (offset (xyz 2.54 0 2.5)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 180)) ) ) ================================================ FILE: electronics/lib/mount.dcm ================================================ EESchema-DOCLIB Version 2.0 # #End Doc Library ================================================ FILE: electronics/lib/mount.lib ================================================ EESchema-LIBRARY Version 2.3 #encoding utf-8 # # MOUNT # DEF MOUNT Z 0 40 N N 1 F N F0 "Z" 0 -50 60 H V C CNN F1 "MOUNT" 0 50 60 H V C CNN F2 "" 0 0 60 H V C CNN F3 "" 0 0 60 H V C CNN DRAW X MOUNT 1 0 0 200 R 50 50 1 1 N N ENDDRAW ENDDEF # # MOUNT_1pin # DEF MOUNT_1pin Z 0 40 N N 1 F N F0 "Z" 0 150 60 H V C CNN F1 "MOUNT_1pin" 0 50 60 H V C CNN F2 "" 0 0 60 H V C CNN F3 "" 0 0 60 H V C CNN DRAW X MOUNT 1 0 -200 200 U 50 50 1 1 W ENDDRAW ENDDEF # #End Library ================================================ FILE: electronics/lib/no_pin.dcm ================================================ EESchema-DOCLIB Version 2.0 # #End Doc Library ================================================ FILE: electronics/lib/no_pin.lib ================================================ EESchema-LIBRARY Version 2.3 #encoding utf-8 # # no_pin # DEF no_pin Z 0 40 Y Y 1 F N F0 "Z" -350 150 60 H V C CNN F1 "no_pin" 0 0 60 H V C CNN F2 "" 0 0 60 H I C CNN F3 "" 0 0 60 H I C CNN DRAW S -400 100 400 -100 0 1 0 N ENDDRAW ENDDEF # #End Library ================================================ FILE: electronics/lib/oled.dcm ================================================ EESchema-DOCLIB Version 2.0 # #End Doc Library ================================================ FILE: electronics/lib/oled.lib ================================================ EESchema-LIBRARY Version 2.4 #encoding utf-8 # # SSD1306_I2C # DEF SSD1306_I2C U 0 40 Y Y 1 F N F0 "U" 0 300 50 H V C CNN F1 "SSD1306_I2C" 100 0 50 V V C CNN F2 "" -250 -300 50 H I C CNN F3 "" -250 -300 50 H I C CNN DRAW S -150 250 150 -250 0 1 0 f X SDA 1 -250 150 100 R 50 50 1 1 P X SCL 2 -250 50 100 R 50 50 1 1 P X VCC 3 -250 -50 100 R 50 50 1 1 P X GND 4 -250 -150 100 R 50 50 1 1 P ENDDRAW ENDDEF # #End Library ================================================ FILE: electronics/lib/pogoPins.pretty/pogo1mm.kicad_mod ================================================ (module pogo1mm (layer F.Cu) (tedit 617F1EC7) (fp_text reference REF** (at 0 0.5) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value pogo1mm (at 0 -0.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 1 thru_hole circle (at 0 0) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask)) (model ../lib/Pogo.models/pogo1mmPoint.step (offset (xyz 0 0 -10.5)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) ================================================ FILE: electronics/lib/pogoPins.pretty/pogo2mm.kicad_mod ================================================ (module pogo2mm (layer F.Cu) (tedit 607389E4) (fp_text reference REF** (at 0 0.5) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value pogo2mm (at 0 -0.5) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))) ) (pad 1 thru_hole circle (at 0 0) (size 3.7 3.7) (drill 2.15) (layers *.Cu *.Mask)) (model ../lib/Pogo.models/pogo2mmCup.step (offset (xyz 0 0 -23.5)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) ================================================ FILE: electronics/lib/screw_terminal_01x03_power_output.dcm ================================================ EESchema-DOCLIB Version 2.0 # $CMP Screw_Terminal_01x03 D Generic screw terminal, single row, 01x03, script generated (kicad-library-utils/schlib/autogen/connector/) K screw terminal F ~ $ENDCMP # #End Doc Library ================================================ FILE: electronics/lib/screw_terminal_01x03_power_output.lib ================================================ EESchema-LIBRARY Version 2.4 #encoding utf-8 # # Screw_Terminal_01x03 # DEF Screw_Terminal_01x03 J 0 40 Y N 1 F N F0 "J" 0 200 50 H V C CNN F1 "Screw_Terminal_01x03" 0 -200 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST TerminalBlock*:* $ENDFPLIST DRAW C 0 -100 25 1 1 6 N C 0 0 25 1 1 6 N C 0 100 25 1 1 6 N T 900 100 0 50 0 0 0 POWER Normal 0 C C S -50 150 50 -150 1 1 10 f P 2 1 1 6 -21 -87 13 -120 N P 2 1 1 6 -21 13 13 -20 N P 2 1 1 6 -21 113 13 80 N P 2 1 1 6 -14 -80 20 -113 N P 2 1 1 6 -14 20 20 -13 N P 2 1 1 6 -14 120 20 87 N X Pin_1 1 -200 100 150 R 50 50 1 1 w X Pin_2 2 -200 0 150 R 50 50 1 1 w X Pin_3 3 -200 -100 150 R 50 50 1 1 w ENDDRAW ENDDEF # #End Library ================================================ FILE: electronics/lib/sensor_smd_lib.pretty/SolderJumper-2_P1.3mm_Bridged_Pad1.0x1.5mm.kicad_mod ================================================ (footprint "SolderJumper-2_P1.3mm_Bridged_Pad1.0x1.5mm" (version 20211014) (generator pcbnew) (layer "F.Cu") (tedit 5C756AB2) (descr "SMD Solder Jumper, 1x1.5mm Pads, 0.3mm gap, bridged with 1 copper strip") (tags "net tie solder jumper bridged") (property "Sheetfile" "sensor_smd.kicad_sch") (property "Sheetname" "") (attr exclude_from_pos_files) (fp_text reference "JP1" (at 0 -1.8) (layer "F.SilkS") hide (effects (font (size 1 1) (thickness 0.15))) (tstamp 30428c1b-efe6-4309-9f93-77f86eaa9d40) ) (fp_text value "LED enable" (at 0 1.9) (layer "F.Fab") (effects (font (size 1 1) (thickness 0.15))) (tstamp e065aeab-9591-42a8-b98f-9e0efd8f7aa5) ) (fp_poly (pts (xy -0.25 -0.3) (xy 0.25 -0.3) (xy 0.25 0.3) (xy -0.25 0.3) ) (layer "F.Cu") (width 0) (fill solid) (tstamp d661e2c9-e984-4fc6-8725-4d34ae501fd9)) (fp_line (start -1.4 -1) (end 1.4 -1) (layer "F.SilkS") (width 0.12) (tstamp 27e65ae8-f1f0-45ea-9f5a-5692675cc087)) (fp_line (start 1.4 1) (end -1.4 1) (layer "F.SilkS") (width 0.12) (tstamp 57cbce2f-0676-4805-b1ce-69981a1cac93)) (fp_line (start -1.4 1) (end -1.4 -1) (layer "F.SilkS") (width 0.12) (tstamp 835a076a-1a72-4bbe-a341-9e4bd592fb71)) (fp_line (start 1.4 -1) (end 1.4 1) (layer "F.SilkS") (width 0.12) (tstamp 85c0fe3f-79fd-4a2c-ac8a-8bfa1d57dd4c)) (fp_poly (pts (xy -0.25 -0.3) (xy 0.25 -0.3) (xy 0.25 0.3) (xy -0.25 0.3) ) (layer "F.Mask") (width 0) (fill solid) (tstamp c84870fb-6fad-48ce-8b98-aa1ebfca4363)) (fp_line (start -1.65 -1.25) (end -1.65 1.25) (layer "F.CrtYd") (width 0.05) (tstamp 0a20e84e-c025-47ca-80c4-1dae9143a29e)) (fp_line (start 1.65 1.25) (end -1.65 1.25) (layer "F.CrtYd") (width 0.05) (tstamp 263ec3ff-b4ad-4d42-ba86-943f5042cdff)) (fp_line (start -1.65 -1.25) (end 1.65 -1.25) (layer "F.CrtYd") (width 0.05) (tstamp 5d67e1d1-6284-4a18-9d09-5ef1734bc964)) (fp_line (start 1.65 1.25) (end 1.65 -1.25) (layer "F.CrtYd") (width 0.05) (tstamp 7059bdfe-1c30-46e5-af9e-230c1cfd0864)) (pad "1" smd rect (at -0.65 0) (size 1 1.5) (layers "F.Cu" "F.Mask") (tstamp e01ef2e6-8448-4983-8877-5f6685cc18a6)) (pad "2" smd rect (at 0.65 0) (size 1 1.5) (layers "F.Cu" "F.Mask") (tstamp bc60c63e-b74b-4956-8a99-f9846055c957)) ) ================================================ FILE: electronics/lib/sensor_smd_lib.pretty/header_3.kicad_mod ================================================ (footprint "header_3" (version 20211014) (generator pcbnew) (layer "F.Cu") (tedit 0) (attr through_hole) (fp_text reference "REF**" (at 0 -0.5 unlocked) (layer "F.SilkS") hide (effects (font (size 1 1) (thickness 0.15))) (tstamp 101a8797-3680-4abe-aabe-c6dce813daf1) ) (fp_text value "header_3" (at 0 1 unlocked) (layer "F.Fab") (effects (font (size 1 1) (thickness 0.15))) (tstamp ee35e07d-dea3-4eb5-b22d-9c94d538b749) ) (fp_text user "${REFERENCE}" (at 0 2.5 unlocked) (layer "F.Fab") (effects (font (size 1 1) (thickness 0.15))) (tstamp 99bb47cf-f22a-4963-8a1d-f29aa0162523) ) (fp_line (start -4 0) (end -4 -4.5) (layer "F.SilkS") (width 0.12) (tstamp 6af6ccfe-736f-4f06-a6e3-6cf1e0fa80dd)) (fp_line (start -4 -4.5) (end 4 -4.5) (layer "F.SilkS") (width 0.12) (tstamp 950a6f90-c813-43db-b00a-784bbd02ee10)) (fp_line (start 4 -4.5) (end 4 0) (layer "F.SilkS") (width 0.12) (tstamp b4823ac6-c746-4300-b62f-527829b6a7e7)) (fp_line (start 4 12) (end 4 0) (layer "F.Fab") (width 0.1) (tstamp 424d4d62-61af-4a77-86e0-e0cb43310300)) (fp_line (start -4 0) (end -4 12) (layer "F.Fab") (width 0.1) (tstamp 643dc5c1-dd49-4564-86c5-8e7ca430674a)) (fp_line (start -4 12) (end 4 12) (layer "F.Fab") (width 0.1) (tstamp b42303cf-23cb-428d-8dc8-9e4418031f05)) (pad "1" thru_hole circle (at -2.54 -3.1) (size 1.65 1.65) (drill 0.94) (layers *.Cu *.Mask) (tstamp 1466237d-b9af-4fbc-b4c4-2982be499dbf)) (pad "2" thru_hole circle (at 0 -2.9) (size 1.65 1.65) (drill 0.94) (layers *.Cu *.Mask) (tstamp a1016da6-6728-49d3-8857-a622435d19d1)) (pad "3" thru_hole circle (at 2.54 -3.1) (size 1.65 1.65) (drill 0.94) (layers *.Cu *.Mask) (tstamp 6bed001b-5494-49c3-9861-a9fff7b1a325)) (model "${KICAD6_3DMODEL_DIR}/Connector_PinHeader_2.54mm.3dshapes/PinHeader_1x03_P2.54mm_Vertical.step" hide (offset (xyz -2.54 0 0.3)) (scale (xyz 1 1 1)) (rotate (xyz -90 90 0)) ) (model "${KICAD6_3DMODEL_DIR}/Connector_PinHeader_2.54mm.3dshapes/PinHeader_1x03_P2.54mm_Horizontal.step" (offset (xyz 2.54 3 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 90)) ) ) ================================================ FILE: electronics/lib/sensor_smd_lib.pretty/header_3_smd.kicad_mod ================================================ (footprint "header_3_smd" (version 20211014) (generator pcbnew) (layer "F.Cu") (tedit 0) (attr smd) (fp_text reference "REF**" (at 0 -0.5 unlocked) (layer "F.SilkS") hide (effects (font (size 1 1) (thickness 0.15))) (tstamp 101a8797-3680-4abe-aabe-c6dce813daf1) ) (fp_text value "header_3_smd" (at 0 1 unlocked) (layer "F.Fab") (effects (font (size 1 1) (thickness 0.15))) (tstamp ee35e07d-dea3-4eb5-b22d-9c94d538b749) ) (fp_text user "${REFERENCE}" (at 0 2.5 unlocked) (layer "F.Fab") (effects (font (size 1 1) (thickness 0.15))) (tstamp 99bb47cf-f22a-4963-8a1d-f29aa0162523) ) (fp_line (start -4 0) (end -4 -6.5) (layer "F.SilkS") (width 0.12) (tstamp 6af6ccfe-736f-4f06-a6e3-6cf1e0fa80dd)) (fp_line (start -4 -6.5) (end 4 -6.5) (layer "F.SilkS") (width 0.12) (tstamp 950a6f90-c813-43db-b00a-784bbd02ee10)) (fp_line (start 4 -6.5) (end 4 0) (layer "F.SilkS") (width 0.12) (tstamp b4823ac6-c746-4300-b62f-527829b6a7e7)) (fp_line (start 4 12) (end 4 0) (layer "F.Fab") (width 0.1) (tstamp 424d4d62-61af-4a77-86e0-e0cb43310300)) (fp_line (start -4 0) (end -4 12) (layer "F.Fab") (width 0.1) (tstamp 643dc5c1-dd49-4564-86c5-8e7ca430674a)) (fp_line (start -4 12) (end 4 12) (layer "F.Fab") (width 0.1) (tstamp b42303cf-23cb-428d-8dc8-9e4418031f05)) (pad "1" thru_hole circle (at -2.54 -3.1) (size 1.5 1.5) (drill 0.94) (layers *.Cu *.Mask) (tstamp 1466237d-b9af-4fbc-b4c4-2982be499dbf)) (pad "1" smd roundrect (at -2.54 -3) (size 1.5 6) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25) (tstamp 263eb1eb-eba4-40bf-a770-3cf3b3f0554d)) (pad "2" thru_hole circle (at 0 -2.9) (size 1.5 1.5) (drill 0.94) (layers *.Cu *.Mask) (tstamp a1016da6-6728-49d3-8857-a622435d19d1)) (pad "2" smd roundrect (at 0 -3) (size 1.5 6) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25) (tstamp c86b8b5a-8b15-4563-939f-212bc489c9e9)) (pad "3" thru_hole circle (at 2.54 -3.1) (size 1.5 1.5) (drill 0.94) (layers *.Cu *.Mask) (tstamp 6bed001b-5494-49c3-9861-a9fff7b1a325)) (pad "3" smd roundrect (at 2.54 -3) (size 1.5 6) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25) (tstamp 8dc3d8dd-f53a-4d88-9bd9-ec29eb4ead52)) (model "${KICAD6_3DMODEL_DIR}/Connector_PinHeader_2.54mm.3dshapes/PinHeader_1x03_P2.54mm_Vertical.step" (offset (xyz -2.54 0 0.3)) (scale (xyz 1 1 1)) (rotate (xyz -90 90 0)) ) ) ================================================ FILE: electronics/lib/sensor_smd_lib.pretty/hole_9.4.kicad_mod ================================================ (footprint "hole_9.4" (version 20211014) (generator pcbnew) (layer "F.Cu") (tedit 0) (attr through_hole) (fp_text reference "REF**" (at 0 -0.5 unlocked) (layer "F.SilkS") hide (effects (font (size 1 1) (thickness 0.15))) (tstamp a032a88f-a36b-48a3-a831-fcb3990c06bb) ) (fp_text value "hole_9.4" (at 0 1 unlocked) (layer "F.Fab") (effects (font (size 1 1) (thickness 0.15))) (tstamp e27b7abc-6d49-4bd7-9261-f7ce53cc26e1) ) (fp_text user "${REFERENCE}" (at 0 2.5 unlocked) (layer "F.Fab") (effects (font (size 1 1) (thickness 0.15))) (tstamp bdeeeb17-4ebf-417f-8aea-6c9559c1d33a) ) (pad "" np_thru_hole circle (at 0 0) (size 9.4 9.4) (drill 9.4) (layers F&B.Cu *.Mask) (tstamp b648b08f-a157-48de-88ae-c3b11f626a92)) ) ================================================ FILE: electronics/lib/ws2812b.dcm ================================================ EESchema-DOCLIB Version 2.0 # #End Doc Library ================================================ FILE: electronics/lib/ws2812b.lib ================================================ EESchema-LIBRARY Version 2.3 #encoding utf-8 # # WS2812B # DEF WS2812B U 0 40 Y Y 1 F N F0 "U" 0 -250 60 H V C CNN F1 "WS2812B" 0 50 60 H V C CNN F2 "" 0 0 60 H I C CNN F3 "" 0 0 60 H I C CNN DRAW S 250 -300 -250 100 0 1 0 N X VDD 1 -450 -50 200 R 50 50 1 1 W X DOUT 2 -450 -150 200 R 50 50 1 1 B X VSS 3 450 -150 200 L 50 50 1 1 W X DIN 4 450 -50 200 L 50 50 1 1 B ENDDRAW ENDDEF # #End Library ================================================ FILE: electronics/scripts/__init__.py ================================================ ================================================ FILE: electronics/scripts/config/eeschema ================================================ SchematicFramePos_x=89 SchematicFramePos_y=38 SchematicFrameSize_x=1125 SchematicFrameSize_y=739 SchematicFrameMaximized=0 SchematicFrameAutoSaveInterval=600 SchematicFramePerspective=layout2|name=MainToolbar;caption=;state=139644;dir=1;layer=6;row=0;pos=0;prop=100000;bestw=1016;besth=36;minw=-1;minh=-1;maxw=-1;maxh=-1;floatx=-1;floaty=-1;floatw=-1;floath=-1|name=OptToolbar;caption=;state=139596;dir=4;layer=3;row=0;pos=0;prop=100000;bestw=36;besth=212;minw=-1;minh=-1;maxw=-1;maxh=-1;floatx=-1;floaty=-1;floatw=-1;floath=-1|name=ToolsToolbar;caption=;state=139596;dir=2;layer=1;row=0;pos=0;prop=100000;bestw=36;besth=688;minw=-1;minh=-1;maxw=-1;maxh=-1;floatx=-1;floaty=-1;floatw=-1;floath=-1|name=DrawFrame;caption=;state=1020;dir=5;layer=0;row=0;pos=0;prop=100000;bestw=387;besth=181;minw=-1;minh=-1;maxw=-1;maxh=-1;floatx=-1;floaty=-1;floatw=-1;floath=-1|name=MsgPanel;caption=;state=131452;dir=3;layer=6;row=0;pos=0;prop=100000;bestw=400;besth=34;minw=-1;minh=-1;maxw=-1;maxh=-1;floatx=-1;floaty=-1;floatw=-1;floath=-1|dock_size(1,6,0)=36|dock_size(4,3,0)=36|dock_size(2,1,0)=36|dock_size(5,0,0)=337|dock_size(3,6,0)=34| SchematicFrameMostRecentlyUsedPath= SchematicFrameUnits=1 SchematicFrameShowGrid=1 SchematicFrame_LastGridSize=5 SchematicFrameFirstRunShown=0 SchematicFrameDevelMaxUndoItems=0 SchematicFrameGalDisplayOptionsGridStyle=0 SchematicFrameGalDisplayOptionsGridLineWidth=1 SchematicFrameGalDisplayOptionsGridMaxDensity=10 SchematicFrameGalDisplayOptionsGridAxesEnabled=0 SchematicFrameGalDisplayOptionsCursorFullscreen=0 SchematicFrameGalDisplayOptionsForceDisplayCursor=1 ShowPageLimits=1 Units=1 PrintMonochrome=1 PrintSheetReferenceAndTitleBlock=1 RepeatStepX=0 RepeatStepY=100 RepeatLabelIncrement=1 ShowIllegalSymbolLibDialog=1 ShowSheetFileNameCaseSensitivityDlg=1 DefaultBusWidth=12 DefaultWireWidth=6 DefaultJunctionSize=40 ShowHiddenPins=0 HorizVertLinesOnly=1 AutoplaceFields=1 AutoplaceJustify=1 AutoplaceAlign=0 FootprintPreview=0 SimCmdLine= LastFindReplaceFlags=1 LastFindString= LastReplaceString= FieldNames=(templatefields) canvas_type=2 Color4DWireEx=rgb(0, 132, 0) Color4DBusEx=rgb(0, 0, 132) Color4DConnEx=rgb(0, 132, 0) Color4DLLabelEx=rgb(0, 0, 0) Color4DHLabelEx=rgb(132, 132, 0) Color4DGLabelEx=rgb(132, 0, 0) Color4DPinNumEx=rgb(132, 0, 0) Color4DPinNameEx=rgb(0, 132, 132) Color4DFieldEx=rgb(132, 0, 132) Color4DReferenceEx=rgb(0, 132, 132) Color4DValueEx=rgb(0, 132, 132) Color4DNoteEx=rgb(0, 0, 194) Color4DBodyEx=rgb(132, 0, 0) Color4DBodyBgEx=rgb(255, 255, 194) Color4DNetNameEx=rgb(132, 132, 132) Color4DPinEx=rgb(132, 0, 0) Color4DSheetEx=rgb(132, 0, 132) Color4DSheetFileNameEx=rgb(132, 132, 0) Color4DSheetNameEx=rgb(0, 132, 132) Color4DSheetLabelEx=rgb(132, 132, 0) Color4DNoConnectEx=rgb(0, 0, 132) Color4DErcWEx=rgba(0, 132, 0, 0.800) Color4DErcEEx=rgba(132, 0, 0, 0.800) Color4DGridEx=rgb(132, 132, 132) Color4DBgCanvasEx=rgb(255, 255, 255) Color4DCursorEx=rgb(0, 0, 0) Color4DBrightenedEx=rgb(255, 0, 255) Color4DHiddenEx=rgb(194, 194, 194) Color4DWorksheetEx=rgb(132, 0, 0) file1= file2= file3= file4= file5= file6= file7= file8= file9= PlotModeColor=1 PlotFrameRef=1 PlotFormat=3 PlotHPGLOrg=0 PlotHPGLPaperSize=0 PlotHPGLPenSize=0.4826 ================================================ FILE: electronics/scripts/config/kikit_panelize_classic.json ================================================ { "layout": { "type": "grid", "rows": 2, "cols": 1, "hspace": "0mm", "vspace": "0mm", "rotation": "0deg", "alternation": "none" }, "source": { "type": "auto", // Large tolerance for Arduino Uno Shield footprint "tolerance": "100mm" }, "cuts": { "type": "vcuts", "layer": "Edge.Cuts" }, "framing": { "type": "none" } } ================================================ FILE: electronics/scripts/config/kikit_panelize_sensor.json ================================================ { "layout": { "type": "grid", "rows": 5, "cols": 5, "hspace": "0mm", "vspace": "0mm", "rotation": "0deg", "alternation": "none" }, "source": { "type": "auto", "tolerance": "1mm" }, "cuts": { "type": "vcuts", "layer": "Edge.Cuts" }, "framing": { "type": "none" } } ================================================ FILE: electronics/scripts/config/pcbnew ================================================ Color4DPCBLayer_F.Cu=rgb(132, 0, 0) Color4DPCBLayer_In1.Cu=rgb(194, 194, 0) Color4DPCBLayer_In2.Cu=rgb(194, 0, 194) Color4DPCBLayer_In3.Cu=rgb(194, 0, 0) Color4DPCBLayer_In4.Cu=rgb(0, 132, 132) Color4DPCBLayer_In5.Cu=rgb(0, 132, 0) Color4DPCBLayer_In6.Cu=rgb(0, 0, 132) Color4DPCBLayer_In7.Cu=rgb(132, 132, 132) Color4DPCBLayer_In8.Cu=rgb(132, 0, 132) Color4DPCBLayer_In9.Cu=rgb(194, 194, 194) Color4DPCBLayer_In10.Cu=rgb(132, 0, 132) Color4DPCBLayer_In11.Cu=rgb(132, 0, 0) Color4DPCBLayer_In12.Cu=rgb(132, 132, 0) Color4DPCBLayer_In13.Cu=rgb(194, 194, 194) Color4DPCBLayer_In14.Cu=rgb(0, 0, 132) Color4DPCBLayer_In15.Cu=rgb(0, 132, 0) Color4DPCBLayer_In16.Cu=rgb(132, 0, 0) Color4DPCBLayer_In17.Cu=rgb(194, 194, 0) Color4DPCBLayer_In18.Cu=rgb(194, 0, 194) Color4DPCBLayer_In19.Cu=rgb(194, 0, 0) Color4DPCBLayer_In20.Cu=rgb(0, 132, 132) Color4DPCBLayer_In21.Cu=rgb(0, 132, 0) Color4DPCBLayer_In22.Cu=rgb(0, 0, 132) Color4DPCBLayer_In23.Cu=rgb(132, 132, 132) Color4DPCBLayer_In24.Cu=rgb(132, 0, 132) Color4DPCBLayer_In25.Cu=rgb(194, 194, 194) Color4DPCBLayer_In26.Cu=rgb(132, 0, 132) Color4DPCBLayer_In27.Cu=rgb(132, 0, 0) Color4DPCBLayer_In28.Cu=rgb(132, 132, 0) Color4DPCBLayer_In29.Cu=rgb(194, 194, 194) Color4DPCBLayer_In30.Cu=rgb(0, 0, 132) Color4DPCBLayer_B.Cu=rgba(0, 132, 0, 0.439) Color4DPCBLayer_B.Adhes=rgb(0, 0, 132) Color4DPCBLayer_F.Adhes=rgb(132, 0, 132) Color4DPCBLayer_B.Paste=rgb(0, 194, 194) Color4DPCBLayer_F.Paste=rgb(132, 0, 0) Color4DPCBLayer_B.SilkS=rgb(132, 0, 132) Color4DPCBLayer_F.SilkS=rgb(0, 132, 132) Color4DPCBLayer_B.Mask=rgb(132, 132, 0) Color4DPCBLayer_F.Mask=rgb(132, 0, 132) Color4DPCBLayer_Dwgs.User=rgb(194, 194, 194) Color4DPCBLayer_Cmts.User=rgb(0, 0, 132) Color4DPCBLayer_Eco1.User=rgb(0, 132, 0) Color4DPCBLayer_Eco2.User=rgb(194, 194, 0) Color4DPCBLayer_Edge.Cuts=rgb(194, 194, 0) Color4DPCBLayer_Margin=rgb(194, 0, 194) Color4DPCBLayer_B.CrtYd=rgb(132, 132, 132) Color4DPCBLayer_F.CrtYd=rgb(194, 194, 194) Color4DPCBLayer_B.Fab=rgb(0, 0, 132) Color4DPCBLayer_F.Fab=rgb(132, 132, 132) Color4DTxtFrontEx=rgb(194, 194, 194) Color4DTxtBackEx=rgb(0, 0, 132) Color4DTxtInvisEx=rgb(132, 132, 132) Color4DPadBackEx=rgb(0, 132, 0) Color4DAnchorEx=rgb(0, 0, 132) Color4DPadFrontEx=rgb(132, 0, 0) Color4DPadThruHoleEx=rgb(194, 194, 0) Color4DNonPlatedEx=rgb(194, 194, 0) Color4DPCBBackground=rgb(0, 0, 0) Color4DPCBCursor=rgb(255, 255, 255) Color4DAuxItems=rgb(255, 255, 255) Color4DWorksheet=rgb(72, 0, 0) Color4DGrid=rgb(132, 132, 132) Color4DViaThruEx=rgb(194, 194, 194) Color4DViaBBlindEx=rgb(132, 132, 0) Color4DViaMicroEx=rgb(0, 132, 132) Color4DRatsEx=rgb(255, 255, 255) Color4DNoNetPadMarker=rgb(0, 0, 132) LegacyAutoDeleteOldTrack=1 LegacyUse45DegreeTracks=1 LegacyUseTwoSegmentTracks=1 Use45DegreeGraphicSegments=0 MagneticPads=2 MagneticTracks=1 EditActionChangesTrackWidth=0 DragSelects=1 PcbFramePos_x=72 PcbFramePos_y=27 PcbFrameSize_x=2488 PcbFrameSize_y=1413 PcbFrameMaximized=1 PcbFrameAutoSaveInterval=600 PcbFramePerspective=layout2|name=MainToolbar;caption=;state=139644;dir=1;layer=6;row=0;pos=0;prop=100000;bestw=956;besth=38;minw=-1;minh=-1;maxw=-1;maxh=-1;floatx=-1;floaty=-1;floatw=-1;floath=-1|name=AuxToolbar;caption=;state=139644;dir=1;layer=4;row=0;pos=0;prop=100000;bestw=995;besth=38;minw=-1;minh=-1;maxw=-1;maxh=-1;floatx=-1;floaty=-1;floatw=-1;floath=-1|name=MsgPanel;caption=;state=131452;dir=3;layer=6;row=0;pos=0;prop=100000;bestw=400;besth=34;minw=-1;minh=-1;maxw=-1;maxh=-1;floatx=-1;floaty=-1;floatw=-1;floath=-1|name=OptToolbar;caption=;state=139596;dir=4;layer=3;row=0;pos=0;prop=100000;bestw=36;besth=597;minw=-1;minh=-1;maxw=-1;maxh=-1;floatx=-1;floaty=-1;floatw=-1;floath=-1|name=MicrowaveToolbar;caption=;state=139598;dir=2;layer=1;row=0;pos=0;prop=100000;bestw=36;besth=187;minw=-1;minh=-1;maxw=-1;maxh=-1;floatx=-1;floaty=-1;floatw=-1;floath=-1|name=ToolsToolbar;caption=;state=139596;dir=2;layer=2;row=0;pos=0;prop=100000;bestw=36;besth=708;minw=-1;minh=-1;maxw=-1;maxh=-1;floatx=-1;floaty=-1;floatw=-1;floath=-1|name=LayersManager;caption=Layers Manager;state=1532;dir=2;layer=3;row=0;pos=0;prop=100000;bestw=198;besth=32;minw=198;minh=32;maxw=-1;maxh=-1;floatx=-1;floaty=-1;floatw=198;floath=32|name=DrawFrame;caption=;state=1022;dir=5;layer=0;row=0;pos=0;prop=100000;bestw=387;besth=181;minw=-1;minh=-1;maxw=-1;maxh=-1;floatx=-1;floaty=-1;floatw=-1;floath=-1|name=DrawFrameGal;caption=;state=1020;dir=5;layer=0;row=0;pos=0;prop=100000;bestw=1112;besth=731;minw=-1;minh=-1;maxw=-1;maxh=-1;floatx=-1;floaty=-1;floatw=-1;floath=-1|dock_size(1,6,0)=38|dock_size(1,4,0)=38|dock_size(3,6,0)=34|dock_size(4,3,0)=36|dock_size(2,2,0)=36|dock_size(2,3,0)=198|dock_size(5,0,0)=389| PcbFrameMostRecentlyUsedPath= PcbFrameShowGrid=1 PcbFrameGridColor=rgb(132, 132, 132) PcbFrame_LastGridSize=2 PcbFrameFirstRunShown=1 PcbFrameDevelMaxUndoItems=0 PcbFrameGalDisplayOptionsOpenGLAntialiasingMode=0 PcbFrameGalDisplayOptionsGridStyle=0 PcbFrameGalDisplayOptionsGridLineWidth=1 PcbFrameGalDisplayOptionsGridMaxDensity=10 PcbFrameGalDisplayOptionsGridAxesEnabled=0 PcbFrameGalDisplayOptionsCursorFullscreen=0 PcbFrameGalDisplayOptionsForceDisplayCursor=0 PcbFramePcbUserGrid_X=0.254 PcbFramePcbUserGrid_Y=0.254 PcbFramePcbUserGrid_Unit=1 PcbFrameDiPadFi=1 PcbFrameDiViaFi=1 PcbFrameDiPadNu=1 PcbFrameDiModEd=1 PcbFrameDiModTx=1 PcbFrameFastGrid1=0 PcbFrameFastGrid2=0 Units=1 DisplayPolarCoords=0 ShowNetNamesMode=3 DisplayTrackFilled=1 TrackDisplayClearance=2 PadFill=1 ViaFill=1 PadAffG=1 PadSNum=1 ModAffC=1 ModAffT=1 PcbAffT=1 PcbShowZonesMode=0 RotationAngle=900 MaxLnkS=3 PlotLineWidth_mm=0.1 ShowMicrowaveTools=0 ShowLayerManagerTools=1 ShowPageLimits=0 canvas_type=1 pcbnew.InteractiveRouter.Mode=1 pcbnew.InteractiveRouter.OptimizerEffort=1 pcbnew.InteractiveRouter.RemoveLoops=1 pcbnew.InteractiveRouter.SmartPads=1 pcbnew.InteractiveRouter.ShoveVias=1 pcbnew.InteractiveRouter.StartDiagonal=0 pcbnew.InteractiveRouter.ShoveTimeLimit=1000 pcbnew.InteractiveRouter.ShoveIterationLimit=250 pcbnew.InteractiveRouter.WalkaroundIterationLimit=50 pcbnew.InteractiveRouter.JumpOverObstacles=0 pcbnew.InteractiveRouter.SmoothDraggedSegments=1 pcbnew.InteractiveRouter.CanViolateDRC=0 pcbnew.InteractiveRouter.SuggestFinish=0 pcbnew.InteractiveRouter.FreeAngleMode=0 pcbnew.InteractiveRouter.InlineDragEnabled=0 MousewheelPAN=0 ZoomNoCenter=0 AutoPAN=1 file1= file2= file3= file4= file5= file6= file7= file8= file9= PcbFrameCursorShape=0 PcbFrameMaxUndoItems=0 ViaHoleDisplayMode=1 ColorPCBLayer_F.Cu=Red 2 ColorPCBLayer_In1.Cu=Yellow 3 ColorPCBLayer_In2.Cu=Magenta 3 ColorPCBLayer_In3.Cu=Red 3 ColorPCBLayer_In4.Cu=Cyan 2 ColorPCBLayer_In5.Cu=Green 2 ColorPCBLayer_In6.Cu=Blue 2 ColorPCBLayer_In7.Cu=Gray 2 ColorPCBLayer_In8.Cu=Magenta 2 ColorPCBLayer_In9.Cu=Gray 3 ColorPCBLayer_In10.Cu=Magenta 2 ColorPCBLayer_In11.Cu=Red 2 ColorPCBLayer_In12.Cu=Brown 2 ColorPCBLayer_In13.Cu=Gray 3 ColorPCBLayer_In14.Cu=Blue 2 ColorPCBLayer_In15.Cu=Green 2 ColorPCBLayer_In16.Cu=Red 2 ColorPCBLayer_In17.Cu=Yellow 3 ColorPCBLayer_In18.Cu=Magenta 3 ColorPCBLayer_In19.Cu=Red 3 ColorPCBLayer_In20.Cu=Cyan 2 ColorPCBLayer_In21.Cu=Green 2 ColorPCBLayer_In22.Cu=Blue 2 ColorPCBLayer_In23.Cu=Gray 2 ColorPCBLayer_In24.Cu=Magenta 2 ColorPCBLayer_In25.Cu=Gray 3 ColorPCBLayer_In26.Cu=Magenta 2 ColorPCBLayer_In27.Cu=Red 2 ColorPCBLayer_In28.Cu=Brown 2 ColorPCBLayer_In29.Cu=Gray 3 ColorPCBLayer_In30.Cu=Blue 2 ColorPCBLayer_B.Cu=Green 2 ColorPCBLayer_B.Adhes=Blue 2 ColorPCBLayer_F.Adhes=Magenta 2 ColorPCBLayer_B.Paste=Cyan 3 ColorPCBLayer_F.Paste=Red 2 ColorPCBLayer_B.SilkS=Magenta 2 ColorPCBLayer_F.SilkS=Cyan 2 ColorPCBLayer_B.Mask=Brown 2 ColorPCBLayer_F.Mask=Magenta 2 ColorPCBLayer_Dwgs.User=Gray 3 ColorPCBLayer_Cmts.User=Blue 2 ColorPCBLayer_Eco1.User=Green 2 ColorPCBLayer_Eco2.User=Yellow 3 ColorPCBLayer_Edge.Cuts=Yellow 3 ColorPCBLayer_Margin=Magenta 3 ColorPCBLayer_B.CrtYd=Yellow 3 ColorPCBLayer_F.CrtYd=Gray 2 ColorPCBLayer_B.Fab=Red 2 ColorPCBLayer_F.Fab=Yellow 3 ColorTxtFrontEx=Gray 3 ColorTxtBackEx=Blue 2 ColorTxtInvisEx=Gray 2 ColorAnchorEx=Blue 2 ColorPadBackEx=Green 2 ColorPadFrontEx=Red 2 ColorViaThruEx=Gray 3 ColorViaBBlindEx=Brown 2 ColorViaMicroEx=Cyan 2 ColorNonPlatedEx=Yellow 3 ColorRatsEx=White ShowMRa=1 TwoSegT=1 SegmPcb45Only=1 PcbMagPadOpt=1 PcbMagTrackOpt=1 MiddleButtonPAN=1 MiddleBtnPANLimited=0 FootprintWizardPos_x=384 FootprintWizardPos_y=514 FootprintWizardSize_x=2272 FootprintWizardSize_y=1000 FootprintWizardMaximized=0 FootprintWizardPerspective=layout2|name=m_mainToolBar;caption=;state=139632;dir=1;layer=10;row=0;pos=0;prop=100000;bestw=393;besth=36;minw=-1;minh=-1;maxw=-1;maxh=-1;floatx=-1;floaty=-1;floatw=-1;floath=-1|name=m_parametersPanel;caption=;state=508;dir=4;layer=0;row=0;pos=0;prop=100000;bestw=20;besth=20;minw=360;minh=180;maxw=-1;maxh=-1;floatx=-1;floaty=-1;floatw=-1;floath=-1|name=m_buildMessageBox;caption=;state=508;dir=4;layer=0;row=0;pos=1;prop=100000;bestw=104;besth=73;minw=-1;minh=-1;maxw=-1;maxh=-1;floatx=-1;floaty=-1;floatw=-1;floath=-1|name=DrawFrame;caption=;state=256;dir=5;layer=0;row=0;pos=0;prop=100000;bestw=382;besth=63;minw=-1;minh=-1;maxw=-1;maxh=-1;floatx=-1;floaty=-1;floatw=-1;floath=-1|name=MsgPanel;caption=;state=131388;dir=3;layer=1;row=0;pos=0;prop=100000;bestw=400;besth=68;minw=-1;minh=-1;maxw=-1;maxh=-1;floatx=-1;floaty=-1;floatw=-1;floath=-1|dock_size(1,10,0)=36|dock_size(4,0,0)=513|dock_size(5,0,0)=300|dock_size(3,1,0)=68| FootprintWizardMostRecentlyUsedPath= FootprintWizardShowGrid=1 FootprintWizardGridColor=rgb(132, 132, 132) FootprintWizard_LastGridSize=0 FootprintWizardFirstRunShown=0 FootprintWizardDevelMaxUndoItems=0 FootprintWizardGalDisplayOptionsOpenGLAntialiasingMode=0 FootprintWizardGalDisplayOptionsGridStyle=0 FootprintWizardGalDisplayOptionsGridLineWidth=0.5 FootprintWizardGalDisplayOptionsGridMaxDensity=10 FootprintWizardGalDisplayOptionsGridAxesEnabled=0 FootprintWizardGalDisplayOptionsCursorFullscreen=0 FootprintWizardGalDisplayOptionsForceDisplayCursor=0 Fpwizard_auiPerspective=layout2|name=m_mainToolBar;caption=;state=139632;dir=1;layer=10;row=0;pos=0;prop=100000;bestw=393;besth=36;minw=-1;minh=-1;maxw=-1;maxh=-1;floatx=-1;floaty=-1;floatw=-1;floath=-1|name=m_parametersPanel;caption=;state=508;dir=4;layer=0;row=0;pos=0;prop=100000;bestw=20;besth=20;minw=360;minh=180;maxw=-1;maxh=-1;floatx=-1;floaty=-1;floatw=-1;floath=-1|name=m_buildMessageBox;caption=;state=508;dir=4;layer=0;row=0;pos=1;prop=100000;bestw=104;besth=73;minw=-1;minh=-1;maxw=-1;maxh=-1;floatx=-1;floaty=-1;floatw=-1;floath=-1|name=DrawFrame;caption=;state=256;dir=5;layer=0;row=0;pos=0;prop=100000;bestw=382;besth=63;minw=-1;minh=-1;maxw=-1;maxh=-1;floatx=-1;floaty=-1;floatw=-1;floath=-1|name=MsgPanel;caption=;state=131388;dir=3;layer=1;row=0;pos=0;prop=100000;bestw=400;besth=68;minw=-1;minh=-1;maxw=-1;maxh=-1;floatx=-1;floaty=-1;floatw=-1;floath=-1|dock_size(1,10,0)=36|dock_size(4,0,0)=513|dock_size(5,0,0)=300|dock_size(3,1,0)=68| ModEditColor4DPCBLayer_F.Cu=rgb(132, 0, 0) ModEditColor4DPCBLayer_In1.Cu=rgb(194, 194, 0) ModEditColor4DPCBLayer_In2.Cu=rgb(194, 0, 194) ModEditColor4DPCBLayer_In3.Cu=rgb(194, 0, 0) ModEditColor4DPCBLayer_In4.Cu=rgb(0, 132, 132) ModEditColor4DPCBLayer_In5.Cu=rgb(0, 132, 0) ModEditColor4DPCBLayer_In6.Cu=rgb(0, 0, 132) ModEditColor4DPCBLayer_In7.Cu=rgb(132, 132, 132) ModEditColor4DPCBLayer_In8.Cu=rgb(132, 0, 132) ModEditColor4DPCBLayer_In9.Cu=rgb(194, 194, 194) ModEditColor4DPCBLayer_In10.Cu=rgb(132, 0, 132) ModEditColor4DPCBLayer_In11.Cu=rgb(132, 0, 0) ModEditColor4DPCBLayer_In12.Cu=rgb(132, 132, 0) ModEditColor4DPCBLayer_In13.Cu=rgb(194, 194, 194) ModEditColor4DPCBLayer_In14.Cu=rgb(0, 0, 132) ModEditColor4DPCBLayer_In15.Cu=rgb(0, 132, 0) ModEditColor4DPCBLayer_In16.Cu=rgb(132, 0, 0) ModEditColor4DPCBLayer_In17.Cu=rgb(194, 194, 0) ModEditColor4DPCBLayer_In18.Cu=rgb(194, 0, 194) ModEditColor4DPCBLayer_In19.Cu=rgb(194, 0, 0) ModEditColor4DPCBLayer_In20.Cu=rgb(0, 132, 132) ModEditColor4DPCBLayer_In21.Cu=rgb(0, 132, 0) ModEditColor4DPCBLayer_In22.Cu=rgb(0, 0, 132) ModEditColor4DPCBLayer_In23.Cu=rgb(132, 132, 132) ModEditColor4DPCBLayer_In24.Cu=rgb(132, 0, 132) ModEditColor4DPCBLayer_In25.Cu=rgb(194, 194, 194) ModEditColor4DPCBLayer_In26.Cu=rgb(132, 0, 132) ModEditColor4DPCBLayer_In27.Cu=rgb(132, 0, 0) ModEditColor4DPCBLayer_In28.Cu=rgb(132, 132, 0) ModEditColor4DPCBLayer_In29.Cu=rgb(194, 194, 194) ModEditColor4DPCBLayer_In30.Cu=rgb(0, 0, 132) ModEditColor4DPCBLayer_B.Cu=rgb(0, 132, 0) ModEditColor4DPCBLayer_B.Adhes=rgb(0, 0, 132) ModEditColor4DPCBLayer_F.Adhes=rgb(132, 0, 132) ModEditColor4DPCBLayer_B.Paste=rgb(0, 194, 194) ModEditColor4DPCBLayer_F.Paste=rgb(132, 0, 0) ModEditColor4DPCBLayer_B.SilkS=rgb(132, 0, 132) ModEditColor4DPCBLayer_F.SilkS=rgb(0, 132, 132) ModEditColor4DPCBLayer_B.Mask=rgb(132, 132, 0) ModEditColor4DPCBLayer_F.Mask=rgb(132, 0, 132) ModEditColor4DPCBLayer_Dwgs.User=rgb(194, 194, 194) ModEditColor4DPCBLayer_Cmts.User=rgb(0, 0, 132) ModEditColor4DPCBLayer_Eco1.User=rgb(0, 132, 0) ModEditColor4DPCBLayer_Eco2.User=rgb(194, 194, 0) ModEditColor4DPCBLayer_Edge.Cuts=rgb(194, 194, 0) ModEditColor4DPCBLayer_Margin=rgb(194, 0, 194) ModEditColor4DPCBLayer_B.CrtYd=rgb(132, 132, 132) ModEditColor4DPCBLayer_F.CrtYd=rgb(194, 194, 194) ModEditColor4DPCBLayer_B.Fab=rgb(0, 0, 132) ModEditColor4DPCBLayer_F.Fab=rgb(132, 132, 132) ModEditColor4DTxtFrontEx=rgb(194, 194, 194) ModEditColor4DTxtBackEx=rgb(0, 0, 132) ModEditColor4DTxtInvisEx=rgb(132, 132, 132) ModEditColor4DPadBackEx=rgb(0, 132, 0) ModEditColor4DAnchorEx=rgb(0, 0, 132) ModEditColor4DPadFrontEx=rgb(132, 0, 0) ModEditColor4DPadThruHoleEx=rgb(194, 194, 0) ModEditColor4DNonPlatedEx=rgb(194, 194, 0) ModEditColor4DPCBBackground=rgb(0, 0, 0) ModEditColor4DPCBCursor=rgb(255, 255, 255) ModEditColor4DAuxItems=rgb(255, 255, 255) ModEditColor4DWorksheet=rgb(72, 0, 0) ModEditColor4DGrid=rgb(132, 132, 132) ModEditFramePos_x=72 ModEditFramePos_y=27 ModEditFrameSize_x=1848 ModEditFrameSize_y=1053 ModEditFrameMaximized=1 ModEditFramePerspective=layout2|name=MainToolbar;caption=;state=139644;dir=1;layer=6;row=0;pos=0;prop=100000;bestw=982;besth=38;minw=-1;minh=-1;maxw=-1;maxh=-1;floatx=-1;floaty=-1;floatw=-1;floath=-1|name=MsgPanel;caption=;state=131452;dir=3;layer=6;row=0;pos=0;prop=100000;bestw=400;besth=34;minw=-1;minh=-1;maxw=-1;maxh=-1;floatx=-1;floaty=-1;floatw=-1;floath=-1|name=OptToolbar;caption=;state=139596;dir=4;layer=3;row=0;pos=0;prop=100000;bestw=36;besth=366;minw=-1;minh=-1;maxw=-1;maxh=-1;floatx=-1;floaty=-1;floatw=-1;floath=-1|name=Footprints;caption=Libraries;state=2044;dir=4;layer=1;row=0;pos=0;prop=100000;bestw=552;besth=-1;minw=250;minh=400;maxw=-1;maxh=-1;floatx=-1;floaty=-1;floatw=-1;floath=-1|name=ToolsToolbar;caption=;state=139596;dir=2;layer=1;row=0;pos=0;prop=100000;bestw=36;besth=418;minw=-1;minh=-1;maxw=-1;maxh=-1;floatx=-1;floaty=-1;floatw=-1;floath=-1|name=LayersManager;caption=Layers Manager;state=1532;dir=2;layer=3;row=0;pos=0;prop=100000;bestw=188;besth=32;minw=188;minh=32;maxw=-1;maxh=-1;floatx=-1;floaty=-1;floatw=188;floath=32|name=DrawFrame;caption=;state=1022;dir=5;layer=0;row=0;pos=0;prop=100000;bestw=387;besth=144;minw=-1;minh=-1;maxw=-1;maxh=-1;floatx=-1;floaty=-1;floatw=-1;floath=-1|name=DrawFrameGal;caption=;state=1020;dir=5;layer=0;row=0;pos=0;prop=100000;bestw=1112;besth=731;minw=-1;minh=-1;maxw=-1;maxh=-1;floatx=-1;floaty=-1;floatw=-1;floath=-1|dock_size(1,6,0)=38|dock_size(3,6,0)=34|dock_size(4,3,0)=36|dock_size(4,1,0)=554|dock_size(2,1,0)=36|dock_size(2,3,0)=188|dock_size(5,0,0)=554| ModEditFrameMostRecentlyUsedPath= ModEditFrameShowGrid=1 ModEditFrameGridColor=rgb(132, 132, 132) ModEditFrame_LastGridSize=16 ModEditFrameFirstRunShown=0 ModEditFrameDevelMaxUndoItems=0 ModEditFrameGalDisplayOptionsOpenGLAntialiasingMode=0 ModEditFrameGalDisplayOptionsGridStyle=0 ModEditFrameGalDisplayOptionsGridLineWidth=0.5 ModEditFrameGalDisplayOptionsGridMaxDensity=10 ModEditFrameGalDisplayOptionsGridAxesEnabled=1 ModEditFrameGalDisplayOptionsCursorFullscreen=0 ModEditFrameGalDisplayOptionsForceDisplayCursor=0 ModEditFramePcbUserGrid_X=0.254 ModEditFramePcbUserGrid_Y=0.254 ModEditFramePcbUserGrid_Unit=1 ModEditFrameDiPadFi=1 ModEditFrameDiViaFi=1 ModEditFrameDiPadNu=1 ModEditFrameDiModEd=1 ModEditFrameDiModTx=1 ModEditFrameFastGrid1=0 ModEditFrameFastGrid2=0 FpEditorUnits=1 FpEditorDisplayPolarCoords=0 FpEditorPadDisplayMode=1 FpEditorGraphicLinesDisplayMode=1 FpEditorTextsDisplayMode=1 FpEditorTextsRefDefaultText=REF** FpEditorGrlineWidth=0.15 FpEditorTextsDefaultSizeH=1 FpEditorTextsDefaultSizeV=1 FpEditorTextsDefaultThickness=0.15 FpEditorRefDefaultText=REF** FpEditorRefDefaultVisibility=1 FpEditorRefDefaultLayer=37 FpEditorValueDefaultText= FpEditorValueDefaultVisibility=1 FpEditorValueDefaultLayer=49 ModViewFramePos_x=72 ModViewFramePos_y=27 ModViewFrameSize_x=2488 ModViewFrameSize_y=1413 ModViewFrameMaximized=1 ModViewFramePerspective=layout2|name=MainToolbar;caption=;state=139644;dir=1;layer=6;row=0;pos=0;prop=100000;bestw=779;besth=38;minw=-1;minh=-1;maxw=-1;maxh=-1;floatx=-1;floaty=-1;floatw=-1;floath=-1|name=MsgPanel;caption=;state=131452;dir=3;layer=6;row=0;pos=0;prop=100000;bestw=400;besth=34;minw=-1;minh=-1;maxw=-1;maxh=-1;floatx=-1;floaty=-1;floatw=-1;floath=-1|name=Libraries;caption=;state=1020;dir=4;layer=2;row=0;pos=0;prop=100000;bestw=200;besth=-1;minw=100;minh=-1;maxw=-1;maxh=-1;floatx=-1;floaty=-1;floatw=-1;floath=-1|name=Footprints;caption=;state=1020;dir=4;layer=1;row=0;pos=0;prop=100000;bestw=300;besth=-1;minw=100;minh=-1;maxw=-1;maxh=-1;floatx=-1;floaty=-1;floatw=-1;floath=-1|name=DrawFrame;caption=;state=1022;dir=5;layer=0;row=0;pos=0;prop=100000;bestw=387;besth=144;minw=-1;minh=-1;maxw=-1;maxh=-1;floatx=-1;floaty=-1;floatw=-1;floath=-1|name=DrawFrameGal;caption=;state=1020;dir=5;layer=0;row=0;pos=0;prop=100000;bestw=1835;besth=1040;minw=-1;minh=-1;maxw=-1;maxh=-1;floatx=-1;floaty=-1;floatw=-1;floath=-1|dock_size(1,6,0)=38|dock_size(3,6,0)=34|dock_size(4,2,0)=202|dock_size(4,1,0)=302|dock_size(5,0,0)=389| ModViewFrameMostRecentlyUsedPath= ModViewFrameShowGrid=1 ModViewFrameGridColor=rgb(132, 132, 132) ModViewFrame_LastGridSize=1 ModViewFrameFirstRunShown=0 ModViewFrameDevelMaxUndoItems=0 ModViewFrameGalDisplayOptionsOpenGLAntialiasingMode=0 ModViewFrameGalDisplayOptionsGridStyle=0 ModViewFrameGalDisplayOptionsGridLineWidth=0.5 ModViewFrameGalDisplayOptionsGridMaxDensity=10 ModViewFrameGalDisplayOptionsGridAxesEnabled=1 ModViewFrameGalDisplayOptionsCursorFullscreen=0 ModViewFrameGalDisplayOptionsForceDisplayCursor=0 import_last_path= FpWizardListWidth=588 FpWizardListHeight=482 Viewer3DFrameNamePos_x=72 Viewer3DFrameNamePos_y=27 Viewer3DFrameNameSize_x=2488 Viewer3DFrameNameSize_y=1413 Viewer3DFrameNameMaximized=1 Viewer3DFrameNamePerspective=layout2|name=MainToolbar;caption=;state=139644;dir=1;layer=6;row=0;pos=0;prop=100000;bestw=735;besth=36;minw=-1;minh=-1;maxw=-1;maxh=-1;floatx=-1;floaty=-1;floatw=-1;floath=-1|name=DrawFrame;caption=;state=1020;dir=5;layer=0;row=0;pos=0;prop=100000;bestw=20;besth=20;minw=-1;minh=-1;maxw=-1;maxh=-1;floatx=-1;floaty=-1;floatw=-1;floath=-1|dock_size(1,6,0)=36|dock_size(5,0,0)=22| Viewer3DFrameNameMostRecentlyUsedPath= BgColor_Red=0.4 BgColor_Green=0.4 BgColor_Blue=0.5 BgColor_Red_Top=0.8 BgColor_Green_Top=0.8 BgColor_Blue_Top=0.9 SMaskColor_Red=0.0784314 SMaskColor_Green=0.2 SMaskColor_Blue=0.141176 SPasteColor_Red=0.501961 SPasteColor_Green=0.501961 SPasteColor_Blue=0.501961 SilkColor_Red=0.9 SilkColor_Green=0.9 SilkColor_Blue=0.9 CopperColor_Red=0.7 CopperColor_Green=0.612157 CopperColor_Blue=0 BoardBodyColor_Red=0.2 BoardBodyColor_Green=0.168627 BoardBodyColor_Blue=0.0862745 ShowRealisticMode=1 MousewheelPAN3D=0 RenderEngine=0 Render_Material=0 Render_OGL_ShowCopperThickness=1 Render_OGL_ShowModelBoudingBoxes=0 Render_RAY_Shadows=1 Render_RAY_Backfloor=1 Render_RAY_Refractions=1 Render_RAY_Reflections=1 Render_RAY_PostProcess=1 Render_RAY_AntiAliasing=1 Render_RAY_ProceduralTextures=1 ShowAxis=1 ShowGrid3D=0 ShowFootprints_Normal=1 ShowFootprints_Insert=1 ShowFootprints_Virtual=1 ShowZones=1 ShowAdhesiveLayers=1 ShowSilkScreenLayers=1 ShowSolderMasLayers=1 ShowSolderPasteLayers=1 ShowCommentsLayers=1 ShowEcoLayers=1 ShowBoardBody=1 SilentMode=0 NetlistDeleteSinglePadNets=1 NetlistReportFilterMsg=15 TestMissingCourtyard=0 TestFootprintCourtyard=0 RefillZonesBeforeDrc=0 Zone_Ouline_Hatch_Opt=2 Zone_Filter_Opt=Net-* Zone_Clearance=20 Zone_Thickness=10 Zone_TH_Gap=20 Zone_TH_Copper_Width=39.37007874015748 PcbIconScale=-1 PrintModuleScale=3 PrintMonochrome=1 ModEditColor4DPCBLayer_Rescue=rgb(132, 0, 0) ActionPluginButtons= ModEditFrameUnits=1 FpEditorSilkLineWidth=0.15 FpEditorSilkTextSizeH=1 FpEditorSilkTextSizeV=1 FpEditorSilkTextThickness=0.15 FpEditorSilkTextItalic=0 FpEditorCopperLineWidth=0.12 FpEditorCopperTextSizeV=1.5 FpEditorCopperTextSizeH=1.5 FpEditorCopperTextThickness=0.3 FpEditorCopperTextItalic=0 FpEditorEdgeCutLineWidth=0.12 FpEditorCourtyardLineWidth=0.12 FpEditorOthersLineWidth=0.12 FpEditorOthersTextSizeV=1 FpEditorOthersTextSizeH=1 FpEditorOthersTextSizeThickness=0.15 FpEditorOthersTextItalic=0 ModeditLibWidth=552 NetlistUpdateFootprints=1 NetlistDeleteShortingTracks=0 NetlistDeleteExtraFootprints=1 FootprintTextShownColumns=0 1 2 3 4 5 6 DrcTrackToZoneTest=0 ModViewFrameUnits=1 ModViewFrameModalPcbUserGrid_X=0.254 ModViewFrameModalPcbUserGrid_Y=0.254 ModViewFrameModalPcbUserGrid_Unit=1 ModViewFrameModalDiPadFi=1 ModViewFrameModalDiViaFi=1 ModViewFrameModalDiPadNu=1 ModViewFrameModalDiModEd=1 ModViewFrameModalDiModTx=1 ModViewFrameModalFastGrid1=0 ModViewFrameModalFastGrid2=0 ModViewFrameAutoZoom=1 ModViewFrameZoom=17.1134 Color4DPCBLayer_Rescue=rgb(132, 0, 0) MagneticGraphics=1 PcbFrameUnits=1 PrintScale=1 PrintPageFrame=1 PlotLayer_0=1 PlotLayer_1=0 PlotLayer_2=0 PlotLayer_3=0 PlotLayer_4=0 PlotLayer_5=0 PlotLayer_6=0 PlotLayer_7=0 PlotLayer_8=0 PlotLayer_9=0 PlotLayer_10=0 PlotLayer_11=0 PlotLayer_12=0 PlotLayer_13=0 PlotLayer_14=0 PlotLayer_15=0 PlotLayer_16=0 PlotLayer_17=0 PlotLayer_18=0 PlotLayer_19=0 PlotLayer_20=0 PlotLayer_21=0 PlotLayer_22=0 PlotLayer_23=0 PlotLayer_24=0 PlotLayer_25=0 PlotLayer_26=0 PlotLayer_27=0 PlotLayer_28=0 PlotLayer_29=0 PlotLayer_30=0 PlotLayer_31=1 PlotLayer_32=0 PlotLayer_33=0 PlotLayer_34=1 PlotLayer_35=1 PlotLayer_36=1 PlotLayer_37=1 PlotLayer_38=1 PlotLayer_39=1 PlotLayer_40=0 PlotLayer_41=0 PlotLayer_42=0 PlotLayer_43=0 PlotLayer_44=1 PlotLayer_45=0 PlotLayer_46=0 PlotLayer_47=0 PlotLayer_48=0 PlotLayer_49=0 PlotLayer_50=0 PrintPadsDrillOpt=2 PrintSinglePage=0 PlotXFineScaleAdj=1 PlotYFineScaleAdj=1 CheckZonesBeforePlotting=1 PSPlotFineWidthAdj=0 DrillZerosFormat=0 DrillMirrorYOpt=0 DrillMergePTHNPTH=0 DrillMinHeader=0 DrillUnit=1 DrillMapFileType=1 DrillFileType=0 OvalHolesRouteMode=1 PlaceFileUnits=1 PlaceFileOpts=0 PlaceFileFormat=1 LibFootprintTextShownColumns=0 1 2 3 4 5 6 ================================================ FILE: electronics/scripts/config/policy.xml ================================================ ]> ================================================ FILE: electronics/scripts/dependencies.sh ================================================ #!/bin/bash set -e if [[ -z "${GITHUB_WORKFLOW}" ]]; then >&2 echo "Aborting! This script is meant to be run in CI (Github Actions) only. It may modify/damage your system configuration if run outside of CI." exit 1 fi set -v DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" sudo add-apt-repository --yes ppa:kicad/kicad-5.1-releases sudo apt-get update -qq sudo DEBIAN_FRONTEND=noninteractive apt-get install -y kicad inkscape poppler-utils xdotool recordmydesktop python3-dev python3-pip # KiKit is installed via pinned git revision to get "new" CLI with support for V-Cuts layer specification. TODO: switch to release version once landed. sudo python3 -m pip install psutil git+https://github.com/yaqwsx/KiKit@67d8f91b26cf110e26ec68ff04c678f7d7348c3b mkdir -p ~/.config/kicad cp /usr/share/kicad/template/fp-lib-table ~/.config/kicad/ cp /usr/share/kicad/template/sym-lib-table ~/.config/kicad/ cp "$DIR/config/eeschema" ~/.config/kicad/ cp "$DIR/config/pcbnew" ~/.config/kicad/ # Install ImageMagick policy that allows PDF conversion (safe in CI because we control all inputs/outputs) sudo cp "$DIR/config/policy.xml" /etc/ImageMagick-6/policy.xml ================================================ FILE: electronics/scripts/dependencies_v2.sh ================================================ #!/bin/bash set -e if [[ -z "${GITHUB_WORKFLOW}" ]]; then >&2 echo "Aborting! This script is meant to be run in CI (Github Actions) only. It may modify/damage your system configuration if run outside of CI." exit 1 fi set -v DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" sudo add-apt-repository --yes ppa:kicad/kicad-6.0-releases sudo apt-get update -qq sudo DEBIAN_FRONTEND=noninteractive apt install -y kicad kicad-packages3d inkscape poppler-utils xdotool recordmydesktop python3-dev python3-pip xvfb sudo python3 -m pip install psutil kikit==1.4.0 xvfbwrapper mkdir -p ~/.config/kicad cp /usr/share/kicad/template/fp-lib-table ~/.config/kicad/ cp /usr/share/kicad/template/sym-lib-table ~/.config/kicad/ cp "$DIR/config/eeschema" ~/.config/kicad/ cp "$DIR/config/pcbnew" ~/.config/kicad/ # Install ImageMagick policy that allows PDF conversion (safe in CI because we control all inputs/outputs) sudo cp "$DIR/config/policy.xml" /etc/ImageMagick-6/policy.xml ================================================ FILE: electronics/scripts/export_3d.py ================================================ #!/usr/bin/env python3 # Copyright 2015-2021 Scott Bezek and the splitflap contributors # # 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. import argparse import logging import os import psutil import sys import time electronics_root = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) repo_root = os.path.dirname(electronics_root) sys.path.append(repo_root) from util import file_util from export_util import ( patch_config, PopenContext, versioned_file, xdotool, wait_for_window, recorded_xvfb, ) logging.basicConfig(level=logging.DEBUG) logger = logging.getLogger(__name__) RENDER_TIMEOUT = 10 * 60 def _wait_for_pcbnew_idle(): start = time.time() while time.time() < start + RENDER_TIMEOUT: for proc in psutil.process_iter(): if proc.name() == 'pcbnew': cpu = proc.cpu_percent(interval=1) print(f'CPU={cpu}', flush=True) if cpu < 5: print('Render took %d seconds' % (time.time() - start)) return time.sleep(1) raise RuntimeError('Timeout waiting for pcbnew to go idle') def _zoom_in(): xdotool([ 'click', '4', ]) time.sleep(0.2) def _invoke_view_option(index): command = ['key', 'alt+v'] + ['Down']*index + ['Return'] xdotool(command) time.sleep(2) _transforms = { 'z+': ('Zoom in', _zoom_in), 'rx+': ('Rotate X Clockwise', lambda: _invoke_view_option(4)), 'rx-': ('Rotate X Counterclockwise', lambda: _invoke_view_option(5)), 'ry+': ('Rotate Y Clockwise', lambda: _invoke_view_option(6)), 'ry-': ('Rotate Y Counterclockwise', lambda: _invoke_view_option(7)), 'rz+': ('Rotate Z Clockwise', lambda: _invoke_view_option(8)), 'rz-': ('Rotate Z Counterclockwise', lambda: _invoke_view_option(9)), 'ml': ('Move left', lambda: _invoke_view_option(10)), 'mr': ('Move right', lambda: _invoke_view_option(11)), 'mu': ('Move up', lambda: _invoke_view_option(12)), 'md': ('Move down', lambda: _invoke_view_option(13)), } def _pcbnew_export_3d(output_file, width, height, transforms): if os.path.exists(output_file): os.remove(output_file) wait_for_window('pcbnew', 'Pcbnew ', additional_commands=['windowfocus']) time.sleep(1) logger.info('Open 3d viewer') xdotool(['key', 'alt+3']) wait_for_window('3D Viewer', '3D Viewer', additional_commands=['windowfocus']) time.sleep(3) # Maximize window xdotool(['search', '--name', '3D Viewer', 'windowmove', '0', '0']) xdotool(['search', '--name', '3D Viewer', 'windowsize', str(width), str(height)]) time.sleep(3) for transform in transforms: description, func = _transforms[transform] logger.info(description) func() logger.info('Wait for rendering...') _wait_for_pcbnew_idle() time.sleep(5) logger.info('Export current view') xdotool([ 'key', 'alt+f', 'Return', ]) logger.info('Enter build output filename') xdotool([ 'key', 'ctrl+a', ]) xdotool(['type', output_file]) logger.info('Save') xdotool(['key', 'Return']) logger.info('Wait before shutdown') time.sleep(2) def export_3d(filename, width, height, transforms, raytrace): pcb_file = os.path.abspath(filename) output_dir = os.path.join(electronics_root, 'build') file_util.mkdir_p(output_dir) screencast_output_file = os.path.join(output_dir, 'export_3d_screencast.ogv') name, _ = os.path.splitext(os.path.basename(pcb_file)) output_file = os.path.join(output_dir, f'{name}-3d.png') settings = { 'canvas_type': '1', 'SMaskColor_Red': '0.1', 'SMaskColor_Green': '0.1', 'SMaskColor_Blue': '0.1', 'RenderEngine': '1' if raytrace else '0', 'Render_RAY_ProceduralTextures': '0', } with patch_config(os.path.expanduser('~/.config/kicad/pcbnew'), settings): with versioned_file(pcb_file): with recorded_xvfb(screencast_output_file, width=width, height=height, colordepth=24): with PopenContext(['pcbnew', pcb_file], close_fds=True) as pcbnew_proc: _pcbnew_export_3d(output_file, width, height, transforms) pcbnew_proc.terminate() if __name__ == '__main__': parser = argparse.ArgumentParser() parser.add_argument('pcb') parser.add_argument('--width', type=int, default=2560) parser.add_argument('--height', type=int, default=1440) parser.add_argument('--skip-raytrace', action='store_true') # Use subparsers to for an optional nargs="*" choices argument (workaround for https://bugs.python.org/issue9625) subparsers = parser.add_subparsers(dest='which') transform_parser = subparsers.add_parser('transform', help='Apply one or more transforms before capturing image') transform_parser.add_argument('transform', nargs='+', choices=list(_transforms.keys())) args = parser.parse_args() transforms = args.transform if args.which == 'transform' else [] export_3d(args.pcb, args.width, args.height, transforms, not args.skip_raytrace) ================================================ FILE: electronics/scripts/export_jlcpcb.py ================================================ #!/usr/bin/env python3 # Copyright 2021 Scott Bezek and the splitflap contributors # # 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. import argparse import logging import os import subprocess import sys electronics_root = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) repo_root = os.path.dirname(electronics_root) sys.path.append(repo_root) from util import file_util from export_util import ( versioned_file, ) logging.basicConfig(level=logging.DEBUG) logger = logging.getLogger(__name__) def export_jlcpcb(pcb, schematic, alt_fields): pcb_file = os.path.abspath(pcb) output_dir = os.path.join(electronics_root, 'build', os.path.splitext(os.path.basename(pcb_file))[0] + '-jlc') file_util.mkdir_p(output_dir) with versioned_file(pcb_file): command = [ 'kikit', 'fab', 'jlcpcb', ] if schematic is not None: schematic_file = os.path.abspath(schematic) command += [ '--assembly', '--schematic', schematic_file, '--field', ] command.append(','.join(alt_fields + ['LCSC'])) command += [ pcb_file, output_dir, ] subprocess.check_call(command) if __name__ == '__main__': parser = argparse.ArgumentParser() parser.add_argument('pcb') parser.add_argument('--assembly-schematic') parser.add_argument('--alt-fields', nargs='+', default=[]) args = parser.parse_args() export_jlcpcb(args.pcb, args.assembly_schematic, args.alt_fields) ================================================ FILE: electronics/scripts/export_schematic.py ================================================ #!/usr/bin/env python3 # Copyright 2015-2021 Scott Bezek and the splitflap contributors # # 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. import argparse import logging import os import subprocess import sys import time from contextlib import contextmanager electronics_root = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) repo_root = os.path.dirname(electronics_root) sys.path.append(repo_root) from util import file_util from export_util import ( PopenContext, patch_config, versioned_file, xdotool, wait_for_window, recorded_xvfb, ) logging.basicConfig(level=logging.DEBUG) logger = logging.getLogger(__name__) EESCHEMA_CONFIG_PATH = os.path.expanduser('~/.config/kicad/eeschema') WIDTH = 800 HEIGHT = 600 def eeschema_plot_schematic(output_directory, kicad_4): wait_for_window('eeschema', '\[', additional_commands=['windowfocus']) logger.info('Open File->Plot->Plot') xdotool(['key', 'alt+f']) if kicad_4: xdotool(['key', 'p']) xdotool(['key', 'p']) else: xdotool(['key', 'l']) wait_for_window('plot', 'Plot', additional_commands=['windowfocus']) time.sleep(2) if not kicad_4: # Move/resize window to standard position and click into the text box xdotool(['search', '--name', 'Plot', 'windowmove', '0', '0']) xdotool(['search', '--name', 'Plot', 'windowsize', str(WIDTH), str(HEIGHT)]) time.sleep(2) xdotool(['mousemove', '400', '20', 'click', '1']) logger.info('Enter build output directory') xdotool(['key', 'BackSpace', 'BackSpace']) xdotool(['type', output_directory]) time.sleep(2) if kicad_4: logger.info('Select PDF plot format') xdotool([ 'key', 'Tab', 'Tab', 'Tab', 'Tab', 'Tab', 'Up', 'Up', 'Up', 'space', ]) time.sleep(2) logger.info('Plot') xdotool(['key', 'Return']) logger.info('Wait before shutdown') time.sleep(5) def export_schematic(schematic_file, kicad_4): # Use absolute path - eeschema handles libraries differently with full path vs filename schematic_file = os.path.abspath(schematic_file) filename, _ = os.path.splitext(os.path.basename(schematic_file)) output_dir = os.path.join(electronics_root, 'build') file_util.mkdir_p(output_dir) screencast_output_file = os.path.join(output_dir, 'export_schematic_screencast.ogv') schematic_output_pdf_file = os.path.join(output_dir, filename + '.pdf') schematic_output_png_file = os.path.join(output_dir, filename + '.png') settings = { 'PlotFormat': '4', # PDF } with patch_config(os.path.expanduser('~/.config/kicad/eeschema'), settings): with versioned_file(schematic_file): with recorded_xvfb(screencast_output_file, width=WIDTH, height=HEIGHT, colordepth=24): with PopenContext(['eeschema', schematic_file], close_fds=True) as eeschema_proc: eeschema_plot_schematic(output_dir, kicad_4) eeschema_proc.terminate() logger.info('Rasterize') subprocess.check_call([ 'convert', '-density', '96', schematic_output_pdf_file, '-background', 'white', '-alpha', 'remove', schematic_output_png_file, ]) if __name__ == '__main__': parser = argparse.ArgumentParser() parser.add_argument('schematic') parser.add_argument('--kicad-4', action='store_true') args = parser.parse_args() export_schematic(args.schematic, args.kicad_4) ================================================ FILE: electronics/scripts/export_util.py ================================================ #!/usr/bin/env python # Copyright 2015-2016 Scott Bezek and the splitflap contributors # # 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. import logging import os import re import subprocess import sys import tempfile import time from contextlib import contextmanager electronics_root = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) repo_root = os.path.dirname(electronics_root) sys.path.append(repo_root) from thirdparty.xvfbwrapper.xvfbwrapper import Xvfb from util import file_util, rev_info logging.basicConfig(level=logging.DEBUG) logger = logging.getLogger(__name__) class PopenContext(subprocess.Popen): def __enter__(self): return self def __exit__(self, type, value, traceback): if self.stdout: self.stdout.close() if self.stderr: self.stderr.close() if self.stdin: self.stdin.close() if type: self.terminate() # Wait for the process to terminate, to avoid zombies. self.wait() def xdotool(command): return subprocess.check_output(['xdotool'] + command) def wait_for_window(name, window_regex, additional_commands=None, timeout=10): if additional_commands is not None: commands = additional_commands else: commands = [] DELAY = 0.5 logger.info('Waiting for %s window...', name) for i in range(int(timeout/DELAY)): try: xdotool(['search', '--name', window_regex] + commands) logger.info('Found %s window', name) return except subprocess.CalledProcessError: pass time.sleep(DELAY) raise RuntimeError('Timed out waiting for %s window' % name) @contextmanager def recorded_xvfb(video_filename, **xvfb_args): with Xvfb(**xvfb_args): with PopenContext([ 'recordmydesktop', '--no-sound', '--no-frame', '--on-the-fly-encoding', '-o', video_filename], close_fds=True) as screencast_proc: yield screencast_proc.terminate() def get_versioned_contents(filename): with open(filename, 'r') as f: original_contents = f.read() date = rev_info.git_date() date_long = rev_info.git_date(short=False) rev = rev_info.git_short_rev() logger.info('Replacing placeholders with %s and %s' % (date, rev)) return original_contents, original_contents \ .replace('Date ""', 'Date "%s"' % date_long) \ .replace('DATE: YYYY-MM-DD HH:MM:SS TZ', 'DATE: %s' % date_long) \ .replace('${COMMIT_DATE_LONG}', date_long) \ .replace('DATE: YYYY-MM-DD', 'DATE: %s' % date) \ .replace('${COMMIT_DATE}', date) \ .replace('Rev ""', 'Rev "%s"' % rev) \ .replace('COMMIT: deadbeef', 'COMMIT: %s' % rev) \ .replace('${COMMIT_HASH}', rev) \ @contextmanager def versioned_file(filename): original_contents, versioned_contents = get_versioned_contents(filename) with open(filename, 'w') as temp_schematic: logger.debug('Writing to %s', filename) temp_schematic.write(versioned_contents) try: yield finally: with open(filename, 'w') as temp_schematic: logger.debug('Restoring %s', filename) temp_schematic.write(original_contents) @contextmanager def patch_config(filename, replacements): if not os.path.exists(filename): yield return with open(filename, 'r') as f: original_contents = f.read() new_contents = original_contents for (key, value) in replacements.items(): pattern = '^' + re.escape(key) + '=(.*)$' new_contents = re.sub(pattern, key + '=' + value, new_contents, flags=re.MULTILINE) with open(filename, 'w') as f: logger.debug('Writing to %s', filename) f.write(new_contents) try: yield finally: with open(filename, 'w') as f: logger.debug('Restoring %s', filename) f.write(original_contents) ================================================ FILE: electronics/scripts/generate_pdf.py ================================================ #!/usr/bin/env python3 # Copyright 2015-2021 Scott Bezek and the splitflap contributors # # 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. import argparse import logging import os import pcbnew import shutil import subprocess from collections import namedtuple import pcb_util electronics_root = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) logging.basicConfig(level=logging.DEBUG) logger = logging.getLogger(__name__) def run(pcb_file): output_directory = os.path.join(electronics_root, 'build') temp_dir = os.path.join(output_directory, 'temp_pdfs') shutil.rmtree(temp_dir, ignore_errors=True) try: os.makedirs(temp_dir) plot_to_directory(pcb_file, output_directory, temp_dir) finally: shutil.rmtree(temp_dir, ignore_errors=True) def plot_to_directory(pcb_file, output_directory, temp_dir): board_name = os.path.splitext(os.path.basename(pcb_file))[0] with pcb_util.get_plotter(pcb_file, temp_dir) as plotter: plotter.plot_options.SetDrillMarksType(pcbnew.PCB_PLOT_PARAMS.NO_DRILL_SHAPE) plotter.plot_options.SetExcludeEdgeLayer(False) LayerDef = namedtuple('LayerDef', ['layer', 'mirror']) layers = [ LayerDef(pcbnew.F_Cu, False), LayerDef(pcbnew.B_Cu, True), LayerDef(pcbnew.F_SilkS, False), LayerDef(pcbnew.B_SilkS, True), LayerDef(pcbnew.F_Mask, False), LayerDef(pcbnew.B_Mask, True), LayerDef(pcbnew.F_Paste, False), ] pdfs = [] for layer in layers: plotter.plot_options.SetMirror(layer.mirror) output_filename = plotter.plot(layer.layer, pcbnew.PLOT_FORMAT_PDF) pdfs.append(output_filename) _, map_file = plotter.plot_drill() pdfs.append(map_file) output_pdf_filename = os.path.join(output_directory, '%s-pcb-packet.pdf' % (board_name,)) command = ['pdfunite'] + pdfs + [output_pdf_filename] subprocess.check_call(command) if __name__ == '__main__': parser = argparse.ArgumentParser('Generate a pdf of the PCB') parser.add_argument('pcb_file') args = parser.parse_args() run(args.pcb_file) ================================================ FILE: electronics/scripts/generate_svg.py ================================================ #!/usr/bin/env python3 # Copyright 2015-2016 Scott Bezek and the splitflap contributors # # 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. import argparse import logging import os import pcbnew import shutil import subprocess import pcb_util from svg_processor import SvgProcessor electronics_root = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) logging.basicConfig(level=logging.DEBUG) logger = logging.getLogger(__name__) def color_with_alpha(base_color, alpha): return (base_color & ~(0xFF << 24)) | ((alpha & 0xFF) << 24) def run(pcb_file): output_directory = os.path.join(electronics_root, 'build') temp_dir = os.path.join(output_directory, 'temp_layers') shutil.rmtree(temp_dir, ignore_errors=True) try: os.makedirs(temp_dir) plot_to_directory(pcb_file, output_directory, temp_dir) finally: shutil.rmtree(temp_dir, ignore_errors=True) def plot_to_directory(pcb_file, output_directory, temp_dir): board_name = os.path.splitext(os.path.basename(pcb_file))[0] layers = [ { 'layer': pcbnew.B_SilkS, 'color': '#CC00CC', 'alpha': 0.8, }, { 'layer': pcbnew.B_Cu, 'color': '#33EE33', 'alpha': 0.5, }, { 'layer': pcbnew.F_Cu, 'color': '#CC0000', 'alpha': 0.5, }, { 'layer': pcbnew.F_SilkS, 'color': '#00CCCC', 'alpha': 0.8, }, { 'layer': pcbnew.Cmts_User, 'color': '#333333', 'alpha': 0.8, }, { 'layer': pcbnew.Edge_Cuts, 'color': '#3333CC', 'alpha': 0.8, }, ] with pcb_util.get_plotter(pcb_file, temp_dir) as plotter: plotter.plot_options.SetExcludeEdgeLayer(True) processed_svg_files = [] for i, layer in enumerate(layers): output_filename = plotter.plot(layer['layer'], pcbnew.PLOT_FORMAT_SVG) logger.info('Post-processing %s...', output_filename) processor = SvgProcessor(output_filename) def colorize(original): if original.lower() == '#000000': return layer['color'] return original processor.apply_color_transform(colorize) processor.wrap_with_group({ 'opacity': str(layer['alpha']), }) output_filename2 = os.path.join(temp_dir, 'processed-' + os.path.basename(output_filename)) processor.write(output_filename2) processed_svg_files.append((output_filename2, processor)) # Plot the paste layer to its own SVG logger.info('Plotting paste SVG') output_filename = plotter.plot(pcbnew.F_Paste, pcbnew.PLOT_FORMAT_SVG) processor = SvgProcessor(output_filename) def colorize(original): if original.lower() == '#000000': return '#FF0000' return original processor.apply_group_style_transforms({ 'fill-opacity': lambda _: '0', 'stroke': lambda _: '#FF0000', 'stroke-opacity': lambda _: '1', 'stroke-width': lambda _: '20', }) paste_filename = os.path.join(output_directory, '%s_paste.svg' % board_name) processor.write(paste_filename) logger.info('Merging layers...') final_svg = os.path.join(output_directory, '%s_merged.svg' % board_name) shutil.copyfile(processed_svg_files[0][0], final_svg) output_processor = SvgProcessor(final_svg) for _, processor in processed_svg_files: output_processor.import_groups(processor) output_processor.write(final_svg) logger.info('Rasterizing...') raster_width = 1280 final_png = os.path.join(output_directory, '%s_merged.png' % board_name) subprocess.check_call([ 'inkscape', '--export-area-drawing', '--export-width', str(raster_width), '--export-png', final_png, '--export-background', '#FFFFFF', final_svg, ]) if __name__ == '__main__': parser = argparse.ArgumentParser('Generate an SVG rendering of the PCB') parser.add_argument('pcb_file') args = parser.parse_args() run(args.pcb_file) ================================================ FILE: electronics/scripts/pcb_util.py ================================================ #!/usr/bin/env python3 # Copyright 2015-2021 Scott Bezek and the splitflap contributors # # 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. import argparse import logging import os import pcbnew import tempfile from contextlib import contextmanager from export_util import ( get_versioned_contents ) logging.basicConfig(level=logging.DEBUG) logger = logging.getLogger(__name__) @contextmanager def versioned_board(filename): _, versioned_contents = get_versioned_contents(filename) with tempfile.NamedTemporaryFile(suffix='.kicad_pcb', mode='w') as temp_pcb: logger.debug('Writing to %s', temp_pcb.name) temp_pcb.write(versioned_contents) temp_pcb.flush() logger.debug('Load board') board = pcbnew.LoadBoard(temp_pcb.name) yield board @contextmanager def get_plotter(pcb_filename, build_directory): with versioned_board(pcb_filename) as board: yield Plotter(board, build_directory) class Plotter(object): def __init__(self, board, build_directory): self.board = board self.build_directory = build_directory self.plot_controller = pcbnew.PLOT_CONTROLLER(board) self.plot_options = self.plot_controller.GetPlotOptions() self.plot_options.SetOutputDirectory(build_directory) self.plot_options.SetPlotFrameRef(False) self.plot_options.SetLineWidth(pcbnew.FromMM(0.35)) self.plot_options.SetScale(1) self.plot_options.SetUseAuxOrigin(True) self.plot_options.SetMirror(False) self.plot_options.SetExcludeEdgeLayer(True) def plot(self, layer, plot_format): layer_name = self.board.GetLayerName(layer) logger.info('Plotting layer %s (kicad layer=%r)', layer_name, layer) self.plot_controller.SetLayer(layer) self.plot_controller.OpenPlotfile(layer_name, plot_format , 'Plot') output_filename = self.plot_controller.GetPlotFileName() self.plot_controller.PlotLayer() self.plot_controller.ClosePlot() return output_filename def plot_drill(self): board_name = os.path.splitext(os.path.basename(self.board.GetFileName()))[0] logger.info('Plotting drill file') drill_writer = pcbnew.EXCELLON_WRITER(self.board) drill_writer.SetMapFileFormat(pcbnew.PLOT_FORMAT_PDF) mirror = False minimalHeader = False offset = pcbnew.wxPoint(0, 0) merge_npth = True drill_writer.SetOptions(mirror, minimalHeader, offset, merge_npth) metric_format = True drill_writer.SetFormat(metric_format) generate_drill = True generate_map = True drill_writer.CreateDrillandMapFilesSet(self.build_directory, generate_drill, generate_map) drill_file_name = os.path.join( self.build_directory, '%s.drl' % (board_name,) ) map_file_name = os.path.join( self.build_directory, '%s-drl_map.pdf' % (board_name,) ) return drill_file_name, map_file_name if __name__ == '__main__': parser = argparse.ArgumentParser(description='Test pcb util') parser.add_argument('input_file', help='Input .kicad_pcb file') args = parser.parse_args() with versioned_board(args.input_file) as board: logger.info('Loaded %s', board.GetFileName()) for module in board.GetModules(): logger.info('Module %s: %s', module.GetReference(), module.GetValue()) ================================================ FILE: electronics/scripts/svg_processor.py ================================================ # Copyright 2015-2016 Scott Bezek and the splitflap contributors # # 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. import logging import re from xml.dom import minidom """ Processes SVG files generated by pcbnew to colorize and merge """ logger = logging.getLogger(__name__) class SvgProcessor(object): def __init__(self, input_file): self.dom = minidom.parse(input_file) self.svg_node = self.dom.documentElement def apply_color_transform(self, transform_function): # Set fill and stroke on all groups for group in self.svg_node.getElementsByTagName('g'): SvgProcessor._apply_transform(group, { 'fill': transform_function, 'stroke': transform_function, }) for path in self.svg_node.getElementsByTagName('path'): SvgProcessor._apply_transform(path, { 'fill': transform_function, 'stroke': transform_function, }) def apply_group_style_transforms(self, transform_dict): for group in self.svg_node.getElementsByTagName('g'): SvgProcessor._apply_transform(group, transform_dict) def import_groups(self, from_svg_processor): for child in from_svg_processor.svg_node.childNodes: if child.nodeType != child.ELEMENT_NODE or child.tagName != 'g': continue group = child output_node = self.dom.importNode(group, True) self.svg_node.appendChild(output_node) def write(self, filename): with open(filename, 'w') as output_file: self.svg_node.writexml(output_file) def wrap_with_group(self, attrs): parent = self.svg_node wrapper = self.dom.createElement("g") for k,v in attrs.items(): wrapper.setAttribute(k,v) for child in parent.childNodes: if child.nodeType == minidom.Node.ELEMENT_NODE and child.tagName == 'g': parent.removeChild(child) wrapper.appendChild(child) parent.appendChild(wrapper) @staticmethod def _apply_transform(node, values): if node.getAttribute('style') == '': return original_style = node.attributes['style'].value for (k,v) in values.items(): escaped_key = re.escape(k) m = re.search(r'\b' + escaped_key + r':(?P[^;]*);', original_style) if m: transformed_value = v(m.group('value')) original_style = re.sub( r'\b' + escaped_key + r':[^;]*;', k + ':' + transformed_value + ';', original_style) node.attributes['style'] = original_style ================================================ FILE: electronics/sensor/fp-lib-table ================================================ (fp_lib_table (lib (name hall_effect)(type KiCad)(uri ${KIPRJMOD}/../lib/hall_effect.pretty)(options "")(descr "")) (lib (name ModifiedSymbols)(type KiCad)(uri ${KIPRJMOD}/../lib/ModifiedSymbols.pretty)(options "")(descr "")) ) ================================================ FILE: electronics/sensor/sensor-cache.lib ================================================ EESchema-LIBRARY Version 2.4 #encoding utf-8 # # Connector_Conn_01x03_Male # DEF Connector_Conn_01x03_Male J 0 40 Y N 1 F N F0 "J" 0 200 50 H V C CNN F1 "Connector_Conn_01x03_Male" 0 -200 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST Connector*:*_1x??_* $ENDFPLIST DRAW S 34 -95 0 -105 1 1 6 F S 34 5 0 -5 1 1 6 F S 34 105 0 95 1 1 6 F P 2 1 1 6 50 -100 34 -100 N P 2 1 1 6 50 0 34 0 N P 2 1 1 6 50 100 34 100 N X Pin_1 1 200 100 150 L 50 50 1 1 P X Pin_2 2 200 0 150 L 50 50 1 1 P X Pin_3 3 200 -100 150 L 50 50 1 1 P ENDDRAW ENDDEF # # Mechanical_MountingHole_Pad # DEF Mechanical_MountingHole_Pad H 0 40 N N 1 F N F0 "H" 0 250 50 H V C CNN F1 "Mechanical_MountingHole_Pad" 0 175 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST MountingHole*Pad* $ENDFPLIST DRAW C 0 50 50 0 1 50 N X 1 1 0 -100 100 U 50 50 1 1 I ENDDRAW ENDDEF # # hall_effect_hall_effect # DEF hall_effect_hall_effect U 0 40 Y Y 1 F N F0 "U" 100 200 60 H V C CNN F1 "hall_effect_hall_effect" -100 0 60 V V C CNN F2 "" 0 0 60 H I C CNN F3 "" 0 0 60 H I C CNN DRAW S -200 250 200 -250 0 1 0 N X VDD 1 0 450 200 D 50 50 1 1 I X GND 2 0 -450 200 U 50 50 1 1 W X OUT 3 400 0 200 L 50 50 1 1 C ENDDRAW ENDDEF # #End Library ================================================ FILE: electronics/sensor/sensor.kicad_pcb ================================================ (kicad_pcb (version 20171130) (host pcbnew 5.1.10-88a1d61d58~90~ubuntu20.04.1) (general (thickness 1.6) (drawings 21) (tracks 6) (zones 0) (modules 3) (nets 4) ) (page User 150.012 140.005) (title_block (title "Splitflap sensor board") (company "Scott Bezek") (comment 1 https://github.com/scottbez1/splitflap) ) (layers (0 F.Cu signal) (31 B.Cu signal) (32 B.Adhes user) (33 F.Adhes user) (34 B.Paste user) (35 F.Paste user) (36 B.SilkS user) (37 F.SilkS user) (38 B.Mask user) (39 F.Mask user) (40 Dwgs.User user) (41 Cmts.User user) (42 Eco1.User user) (43 Eco2.User user) (44 Edge.Cuts user) (45 Margin user) (46 B.CrtYd user) (47 F.CrtYd user) (48 B.Fab user) (49 F.Fab user) ) (setup (last_trace_width 0.25) (user_trace_width 0.25) (trace_clearance 0.2) (zone_clearance 0.508) (zone_45_only yes) (trace_min 0.2) (via_size 0.6) (via_drill 0.4) (via_min_size 0.4) (via_min_drill 0.3) (uvia_size 0.3) (uvia_drill 0.1) (uvias_allowed no) (uvia_min_size 0.2) (uvia_min_drill 0.1) (edge_width 0.15) (segment_width 0.2) (pcb_text_width 0.3) (pcb_text_size 1.5 1.5) (mod_edge_width 0.15) (mod_text_size 1 1) (mod_text_width 0.15) (pad_size 5.5 5.5) (pad_drill 4.5) (pad_to_mask_clearance 0.2) (aux_axis_origin 0 0) (grid_origin 20 20) (visible_elements 7FFFFFFF) (pcbplotparams (layerselection 0x010f0_80000001) (usegerberextensions false) (usegerberattributes true) (usegerberadvancedattributes true) (creategerberjobfile true) (excludeedgelayer false) (linewidth 0.100000) (plotframeref true) (viasonmask false) (mode 1) (useauxorigin false) (hpglpennumber 1) (hpglpenspeed 20) (hpglpendiameter 15.000000) (psnegative false) (psa4output false) (plotreference true) (plotvalue true) (plotinvisibletext false) (padsonsilk false) (subtractmaskfromsilk false) (outputformat 4) (mirror false) (drillshape 1) (scaleselection 1) (outputdirectory "build/")) ) (net 0 "") (net 1 "Net-(P100-Pad1)") (net 2 "Net-(P100-Pad2)") (net 3 "Net-(P100-Pad3)") (net_class Default "This is the default net class." (clearance 0.2) (trace_width 0.25) (via_dia 0.6) (via_drill 0.4) (uvia_dia 0.3) (uvia_drill 0.1) (add_net "Net-(H1-Pad1)") (add_net "Net-(P100-Pad1)") (add_net "Net-(P100-Pad2)") (add_net "Net-(P100-Pad3)") ) (net_class 5V "" (clearance 0.24) (trace_width 0.35) (via_dia 0.6) (via_drill 0.4) (uvia_dia 0.3) (uvia_drill 0.1) ) (net_class MOTOR_POWER "" (clearance 0.3) (trace_width 0.5) (via_dia 0.6) (via_drill 0.4) (uvia_dia 0.3) (uvia_drill 0.1) ) (net_class VMOT "" (clearance 0.3) (trace_width 1) (via_dia 0.6) (via_drill 0.4) (uvia_dia 0.3) (uvia_drill 0.1) ) (module ModifiedSymbols:Pin_Header_Right_Angle_1x03 (layer F.Cu) (tedit 61809C8C) (tstamp 5B63BF29) (at 33.208 33.208 270) (descr "Through hole pin header") (tags "pin header") (path /56499725) (fp_text reference P100 (at -2.032 0) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value SENSOR (at -2.032 4.318) (layer F.Fab) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_line (start -1.2 6.28) (end 1.2 6.28) (layer F.SilkS) (width 0.15)) (fp_line (start -1.2 -1.2) (end -1.2 6.28) (layer F.SilkS) (width 0.15)) (fp_line (start 1.2 -1.2) (end 1.2 6.28) (layer F.SilkS) (width 0.15)) (fp_line (start -1.2 -1.2) (end 1.2 -1.2) (layer F.SilkS) (width 0.15)) (pad 3 thru_hole circle (at 0 5.08 270) (size 1.75 1.75) (drill 1) (layers *.Cu *.Mask) (net 3 "Net-(P100-Pad3)")) (pad 2 thru_hole circle (at 0 2.54 270) (size 1.75 1.75) (drill 1) (layers *.Cu *.Mask) (net 2 "Net-(P100-Pad2)")) (pad 1 thru_hole rect (at 0 0 270) (size 1.75 1.75) (drill 1) (layers *.Cu *.Mask) (net 1 "Net-(P100-Pad1)")) (model ${KISYS3DMOD}/Connector_PinHeader_2.54mm.3dshapes/PinHeader_1x03_P2.54mm_Horizontal.step (at (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (module hall_effect:hall_effect_wide (layer B.Cu) (tedit 61809B04) (tstamp 617A7E0D) (at 32.192 23.302 180) (path /5B63B9BC) (fp_text reference U100 (at 5.08 1.27) (layer B.SilkS) hide (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) (fp_text value AH3391Q (at 0 2.54) (layer B.Fab) hide (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) (fp_line (start -2.2 0.889) (end 2.2 0.889) (layer B.SilkS) (width 0.15)) (fp_line (start -2.2 0.889) (end -2.2 3.175) (layer B.SilkS) (width 0.15)) (fp_line (start 2.2 0.889) (end 2.2 3.175) (layer B.SilkS) (width 0.15)) (fp_line (start -1.397 3.175) (end -1.397 0.889) (layer B.SilkS) (width 0.15)) (fp_line (start 1.397 3.175) (end 1.4 0.889) (layer B.SilkS) (width 0.15)) (pad 3 thru_hole circle (at 2.54 0 180) (size 1.6 1.6) (drill 0.6) (layers *.Cu *.Mask) (net 1 "Net-(P100-Pad1)")) (pad 2 thru_hole circle (at 0 0 180) (size 1.6 1.6) (drill 0.6) (layers *.Cu *.Mask) (net 3 "Net-(P100-Pad3)")) (pad 1 thru_hole rect (at -2.54 0 180) (size 1.6 1.6) (drill 0.6) (layers *.Cu *.Mask) (net 2 "Net-(P100-Pad2)")) (model ${KISYS3DMOD}/Package_TO_SOT_THT.3dshapes/TO-92S_Wide.step (offset (xyz 2.54 0 2.5)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 180)) ) ) (module MountingHoles:M4_mount (layer F.Cu) (tedit 5B676D1C) (tstamp 61817107) (at 24.572 24.572) (path /6052ED0C) (fp_text reference H1 (at 0 1.7) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value MountingHole_Pad (at 0 -1.5) (layer F.Fab) hide (effects (font (size 1 1) (thickness 0.15))) ) (fp_circle (center 0 0) (end 4 0) (layer F.SilkS) (width 0.15)) (pad 1 thru_hole circle (at 0 0) (size 5.5 5.5) (drill 4.5) (layers *.Cu *.Mask F.SilkS) (clearance 1.5)) ) (gr_line (start 34.408 34.408) (end 34.408 36.059) (layer F.SilkS) (width 0.15)) (gr_line (start 26.928 34.408) (end 26.928 36.059) (layer F.SilkS) (width 0.15)) (gr_text "Hall\nEffect" (at 32.192 21.27) (layer B.SilkS) (tstamp 617A827E) (effects (font (size 0.7 0.6) (thickness 0.12)) (justify mirror)) ) (dimension 1.27 (width 0.3) (layer Cmts.User) (gr_text "1.270 mm" (at 40.828 24.064 90) (layer Cmts.User) (effects (font (size 1.5 1.5) (thickness 0.3))) ) (feature1 (pts (xy 24.572 23.302) (xy 39.718 23.302))) (feature2 (pts (xy 24.572 24.572) (xy 39.718 24.572))) (crossbar (pts (xy 37.018 24.572) (xy 37.018 23.302))) (arrow1a (pts (xy 37.018 23.302) (xy 37.604421 24.428504))) (arrow1b (pts (xy 37.018 23.302) (xy 36.431579 24.428504))) (arrow2a (pts (xy 37.018 24.572) (xy 37.604421 23.445496))) (arrow2b (pts (xy 37.018 24.572) (xy 36.431579 23.445496))) ) (gr_line (start 20 36.256) (end 20 20) (angle 90) (layer Edge.Cuts) (width 0.15)) (gr_text VCC (at 34.732 24.445 70) (layer B.SilkS) (effects (font (size 0.9 1) (thickness 0.15)) (justify left mirror)) ) (gr_text GND (at 32.192 24.445 70) (layer B.SilkS) (effects (font (size 0.9 1) (thickness 0.15)) (justify left mirror)) ) (gr_text OUT (at 29.652 24.445 70) (layer B.SilkS) (effects (font (size 0.9 1) (thickness 0.15)) (justify left mirror)) ) (dimension 10.16 (width 0.3) (layer Cmts.User) (tstamp 617A7FE0) (gr_text "10.160 mm" (at 29.652 16.376) (layer Cmts.User) (tstamp 617A7FE0) (effects (font (size 1.5 1.5) (thickness 0.3))) ) (feature1 (pts (xy 34.732 24.572) (xy 34.732 17.889579))) (feature2 (pts (xy 24.572 24.572) (xy 24.572 17.889579))) (crossbar (pts (xy 24.572 18.476) (xy 34.732 18.476))) (arrow1a (pts (xy 34.732 18.476) (xy 33.605496 19.062421))) (arrow1b (pts (xy 34.732 18.476) (xy 33.605496 17.889579))) (arrow2a (pts (xy 24.572 18.476) (xy 25.698504 19.062421))) (arrow2b (pts (xy 24.572 18.476) (xy 25.698504 17.889579))) ) (gr_text "COMMIT: deadbeef\nDATE: YYYY-MM-DD" (at 35.494 30.25) (layer B.SilkS) (effects (font (size 1 0.9) (thickness 0.15)) (justify left mirror)) ) (dimension 8.636 (width 0.3) (layer Cmts.User) (gr_text "8.636 mm" (at 16.364 28.89 90) (layer Cmts.User) (effects (font (size 1.5 1.5) (thickness 0.3))) ) (feature1 (pts (xy 24.572 24.572) (xy 15.014 24.572))) (feature2 (pts (xy 24.572 33.208) (xy 15.014 33.208))) (crossbar (pts (xy 17.714 33.208) (xy 17.714 24.572))) (arrow1a (pts (xy 17.714 24.572) (xy 18.300421 25.698504))) (arrow1b (pts (xy 17.714 24.572) (xy 17.127579 25.698504))) (arrow2a (pts (xy 17.714 33.208) (xy 18.300421 32.081496))) (arrow2b (pts (xy 17.714 33.208) (xy 17.127579 32.081496))) ) (dimension 4.572 (width 0.3) (layer Cmts.User) (gr_text "4.572 mm" (at 7.3 22.286 90) (layer Cmts.User) (effects (font (size 1.5 1.5) (thickness 0.3))) ) (feature1 (pts (xy 24.572 20) (xy 8.156 20))) (feature2 (pts (xy 24.572 24.572) (xy 8.156 24.572))) (crossbar (pts (xy 10.856 24.572) (xy 10.856 20))) (arrow1a (pts (xy 10.856 20) (xy 11.442421 21.126504))) (arrow1b (pts (xy 10.856 20) (xy 10.269579 21.126504))) (arrow2a (pts (xy 10.856 24.572) (xy 11.442421 23.445496))) (arrow2b (pts (xy 10.856 24.572) (xy 10.269579 23.445496))) ) (dimension 4.572 (width 0.3) (layer Cmts.User) (gr_text "4.572 mm" (at 22.286 8.57) (layer Cmts.User) (effects (font (size 1.5 1.5) (thickness 0.3))) ) (feature1 (pts (xy 20 24.572) (xy 20 9.68))) (feature2 (pts (xy 24.572 24.572) (xy 24.572 9.68))) (crossbar (pts (xy 24.572 12.38) (xy 20 12.38))) (arrow1a (pts (xy 20 12.38) (xy 21.126504 11.793579))) (arrow1b (pts (xy 20 12.38) (xy 21.126504 12.966421))) (arrow2a (pts (xy 24.572 12.38) (xy 23.445496 11.793579))) (arrow2b (pts (xy 24.572 12.38) (xy 23.445496 12.966421))) ) (dimension 8.636 (width 0.3) (layer Cmts.User) (gr_text "8.636 mm" (at 28.89 41.844) (layer Cmts.User) (effects (font (size 1.5 1.5) (thickness 0.3))) ) (feature1 (pts (xy 33.208 33.208) (xy 33.208 40.734))) (feature2 (pts (xy 24.572 33.208) (xy 24.572 40.734))) (crossbar (pts (xy 24.572 38.034) (xy 33.208 38.034))) (arrow1a (pts (xy 33.208 38.034) (xy 32.081496 38.620421))) (arrow1b (pts (xy 33.208 38.034) (xy 32.081496 37.447579))) (arrow2a (pts (xy 24.572 38.034) (xy 25.698504 38.620421))) (arrow2b (pts (xy 24.572 38.034) (xy 25.698504 37.447579))) ) (gr_line (start 20 20) (end 36.256 20) (angle 90) (layer Edge.Cuts) (width 0.15)) (gr_text "Splitflap\nSensor\nPCB\nv1.1" (at 21.016 32.192) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15)) (justify left)) ) (gr_text OUT (at 33.208 31.938 70) (layer F.SilkS) (effects (font (size 1.2 1.2) (thickness 0.25)) (justify left)) ) (gr_text VCC (at 30.668 31.938 70) (layer F.SilkS) (effects (font (size 1.2 1.2) (thickness 0.25)) (justify left)) ) (gr_text GND (at 28.128 31.938 70) (layer F.SilkS) (effects (font (size 1.2 1.2) (thickness 0.25)) (justify left)) ) (gr_line (start 36.256 20) (end 36.256 36.256) (angle 90) (layer Edge.Cuts) (width 0.15)) (gr_line (start 20 36.256) (end 36.256 36.256) (angle 90) (layer Edge.Cuts) (width 0.15)) (segment (start 29.652 29.652) (end 29.652 23.302) (width 0.5) (layer B.Cu) (net 1)) (segment (start 33.208 33.208) (end 29.652 29.652) (width 0.5) (layer B.Cu) (net 1)) (segment (start 34.732 29.144) (end 30.668 33.208) (width 0.5) (layer F.Cu) (net 2)) (segment (start 34.732 23.302) (end 34.732 29.144) (width 0.5) (layer F.Cu) (net 2)) (segment (start 32.192 29.144) (end 28.128 33.208) (width 0.5) (layer F.Cu) (net 3)) (segment (start 32.192 23.302) (end 32.192 29.144) (width 0.5) (layer F.Cu) (net 3)) ) ================================================ FILE: electronics/sensor/sensor.pro ================================================ update=Wed 17 Mar 2021 08:40:08 PM PDT version=1 last_client=kicad [pcbnew] version=1 LastNetListRead= UseCmpFile=1 PadDrill=0.600000000000 PadDrillOvalY=0.600000000000 PadSizeH=1.500000000000 PadSizeV=1.500000000000 PcbTextSizeV=1.500000000000 PcbTextSizeH=1.500000000000 PcbTextThickness=0.300000000000 ModuleTextSizeV=1.000000000000 ModuleTextSizeH=1.000000000000 ModuleTextSizeThickness=0.150000000000 SolderMaskClearance=0.000000000000 SolderMaskMinWidth=0.000000000000 DrawSegmentWidth=0.200000000000 BoardOutlineThickness=0.100000000000 ModuleOutlineThickness=0.150000000000 [cvpcb] version=1 NetIExt=net [general] version=1 [eeschema] version=1 LibDir= ================================================ FILE: electronics/sensor/sensor.sch ================================================ EESchema Schematic File Version 4 EELAYER 30 0 EELAYER END $Descr A4 11693 8268 encoding utf-8 Sheet 1 1 Title "Splitflap sensor board" Date "" Rev "" Comp "Scott Bezek" Comment1 "https://github.com/scottbez1/splitflap" Comment2 "" Comment3 "" Comment4 "" $EndDescr $Comp L hall_effect:hall_effect U100 U 1 1 5B63B9BC P 4450 3700 F 0 "U100" H 4600 4000 60 0000 C CNN F 1 "AH3391Q" V 4350 3700 60 0000 C CNN F 2 "hall_effect:hall_effect_wide" H 4450 3700 60 0001 C CNN F 3 "" H 4450 3700 60 0001 C CNN F 4 "AH3391Q-P-BDI-ND (sensor), 469-1027-ND (magnet)" H 4450 3700 60 0001 C CNN "DK#" F 5 "Many hall effect sensors will work. AH3391Q is recommended, but other options that have been tested are AH3369Q, AH3366Q, AH3365Q, A1122LUA-T. If using another part, MAKE SURE it doesn't have a 'sleep' or 'low power' mode, as those generally sample the magnetic field too infrequently for this purpose." H 4450 3700 60 0001 C CNN "BOM_Note" 1 4450 3700 1 0 0 -1 $EndComp Wire Wire Line 5250 3600 4850 3600 Wire Wire Line 4850 3600 4850 3700 Wire Wire Line 5250 3700 5050 3700 Wire Wire Line 5050 3700 5050 3250 Wire Wire Line 5050 3250 4450 3250 Wire Wire Line 4450 4150 4850 4150 Wire Wire Line 4850 4150 4850 3800 Wire Wire Line 4850 3800 5250 3800 $Comp L Connector:Conn_01x03_Male P100 U 1 1 56499725 P 5450 3700 F 0 "P100" H 5450 3900 50 0000 C CNN F 1 "SENSOR" V 5550 3700 50 0000 C CNN F 2 "ModifiedSymbols:Pin_Header_Right_Angle_1x03" H 5450 3700 60 0001 C CNN F 3 "" H 5450 3700 60 0000 C CNN F 4 "S1112EC-03-ND" H 5450 3700 60 0001 C CNN "DK#" F 5 "Consider ordering 1xN headers and breaking into multiple 1x3 headers, rather than ordering exact 1x3 headers" H 5450 3700 60 0001 C CNN "BOM_Note" 1 5450 3700 -1 0 0 -1 $EndComp $Comp L Mechanical:MountingHole_Pad H1 U 1 1 6052ED0C P 4800 2500 F 0 "H1" H 4900 2549 50 0000 L CNN F 1 "MountingHole_Pad" H 4900 2458 50 0000 L CNN F 2 "MountingHoles:M4_mount" H 4800 2500 50 0001 C CNN F 3 "~" H 4800 2500 50 0001 C CNN 1 4800 2500 1 0 0 -1 $EndComp NoConn ~ 4800 2600 $EndSCHEMATC ================================================ FILE: electronics/sensor/sym-lib-table ================================================ (sym_lib_table (lib (name mount)(type Legacy)(uri ${KIPRJMOD}/../lib/mount.lib)(options "")(descr "")) (lib (name hall_effect)(type Legacy)(uri ${KIPRJMOD}/../lib/hall_effect.lib)(options "")(descr "")) ) ================================================ FILE: electronics/sensor_smd/fp-lib-table ================================================ (fp_lib_table (lib (name "sensor_smd_lib")(type "KiCad")(uri "${KIPRJMOD}/../lib/sensor_smd_lib.pretty")(options "")(descr "")) ) ================================================ FILE: electronics/sensor_smd/kikit_panelize.json ================================================ { "layout": { "type": "grid", "rows": 3, "cols": 2, "space": "1.4mm", "baketext": false, }, "tabs": { "type": "fixed", "width": "4mm", "vcount": 2, }, "cuts": { "type": "mousebites", "drill": "0.6mm", "spacing": "1mm", "offset": "-0.1mm", // "prolong": "0.5mm" }, "framing": { "type": "frame", "width": "5mm", "space": "1.4mm", "cuts": "h", }, "text": { "type": "simple", "text": "To separate sensor PCBs, 1. snap off this top rail", "anchor": "mt", "voffset": "2.5mm", "hjustify": "center", "vjustify": "center", "width": "2mm", "height": "2mm", }, "text2": { "type": "simple", "text": "2. then snap off this bottom rail", "anchor": "mb", "voffset": "-2.5mm", "hjustify": "center", "vjustify": "center", "width": "1.5mm", "height": "1.5mm", "thickness": "0.25mm", }, "text3": { "type": "simple", "text": "3. and then this one", "anchor": "ml", "hoffset": "2.5mm", "hjustify": "center", "vjustify": "center", "orientation": "90deg", "width": "1.2mm", "height": "1.2mm", "thickness": "0.2mm", }, "text4": { "type": "simple", "text": "4. and finally this one!", "anchor": "mr", "hoffset": "-2.5mm", "hjustify": "center", "vjustify": "center", "orientation": "-90deg", "width": "1mm", "height": "1mm", "thickness": "0.15mm", }, "post": { "millradius": "0.7mm", }, "source": { "type": "auto", }, } ================================================ FILE: electronics/sensor_smd/sensor_smd-panelized.kibot.yml ================================================ kibot: version: 1 global: output: '%bf-%i%I%v.%x' # force pcb-based filename (%bf) preflight: check_zone_fills: true run_drc: true filters: - filter: 'Silkscreen clipped by solder mask' error: 'silk_over_copper' regex: '(?s)Line on Edge.Cuts(.*)Arc on B.Silkscreen' - filter: 'Silkscreen clipped by solder mask' error: 'silk_over_copper' regex: '(?s)Line on Edge.Cuts(.*)Line on B.Silkscreen' - filter: 'Silkscreen clipped by solder mask' error: 'silk_over_copper' regex: '(?s)Arc on Edge.Cuts(.*)Line on B.Silkscreen' update_xml: true set_text_variables: - name: COMMIT_DATE_LONG command: 'python3 util/rev_info.py git_date' - name: COMMIT_DATE command: 'python3 util/rev_info.py git_date --short' - name: COMMIT_HASH command: 'python3 util/rev_info.py git_short_rev' outputs: - name: 3d type: render_3d options: no_virtual: true view: 'top' copper: '#99967F' board: '#C3BA9B' copper: '#99967F' zoom: 3 orthographic: true ray_tracing: true height: 1024 width: 1024 - name: 3d_back type: render_3d extends: 3d options: view: 'bottom' ================================================ FILE: electronics/sensor_smd/sensor_smd.kibot.yml ================================================ kibot: version: 1 preflight: check_zone_fills: true run_drc: true run_erc: true filters: - filter: 'Silkscreen clipped by solder mask' error: 'silk_over_copper' regex: '(?s)Line on Edge.Cuts(.*)Arc on B.Silkscreen' - filter: 'Silkscreen clipped by solder mask' error: 'silk_over_copper' regex: '(?s)Line on Edge.Cuts(.*)Line on B.Silkscreen' - filter: 'Silkscreen clipped by solder mask' error: 'silk_over_copper' regex: '(?s)Arc on Edge.Cuts(.*)Line on B.Silkscreen' update_xml: true set_text_variables: - name: COMMIT_DATE_LONG command: 'python3 util/rev_info.py git_date' - name: COMMIT_DATE command: 'python3 util/rev_info.py git_date --short' - name: COMMIT_HASH command: 'python3 util/rev_info.py git_short_rev' outputs: - name: ibom comment: 'Interactive BOM' type: ibom options: dark_mode: true netlist_file: '%F.xml' extra_fields: 'LCSC' - name: schematic type: pdf_sch_print - name: 'bom_csv' comment: "Bill of Materials in CSV format" type: bom options: use_alt: false number: 1 - name: 3d type: render_3d options: no_virtual: true view: 'top' copper: '#99967F' board: '#C3BA9B' copper: '#99967F' zoom: 3 orthographic: true ray_tracing: true height: 768 width: 1024 - name: 3d_back type: render_3d extends: 3d options: view: 'bottom' ================================================ FILE: electronics/sensor_smd/sensor_smd.kicad_pcb ================================================ (kicad_pcb (version 20211014) (generator pcbnew) (general (thickness 0.8) ) (paper "A4") (layers (0 "F.Cu" jumper) (31 "B.Cu" signal) (32 "B.Adhes" user "B.Adhesive") (33 "F.Adhes" user "F.Adhesive") (34 "B.Paste" user) (35 "F.Paste" user) (36 "B.SilkS" user "B.Silkscreen") (37 "F.SilkS" user "F.Silkscreen") (38 "B.Mask" user) (39 "F.Mask" user) (40 "Dwgs.User" user "User.Drawings") (41 "Cmts.User" user "User.Comments") (42 "Eco1.User" user "User.Eco1") (43 "Eco2.User" user "User.Eco2") (44 "Edge.Cuts" user) (45 "Margin" user) (46 "B.CrtYd" user "B.Courtyard") (47 "F.CrtYd" user "F.Courtyard") (48 "B.Fab" user) (49 "F.Fab" user) (50 "User.1" user) (51 "User.2" user) (52 "User.3" user) (53 "User.4" user) (54 "User.5" user) (55 "User.6" user) (56 "User.7" user) (57 "User.8" user) (58 "User.9" user) ) (setup (stackup (layer "F.SilkS" (type "Top Silk Screen")) (layer "F.Paste" (type "Top Solder Paste")) (layer "F.Mask" (type "Top Solder Mask") (thickness 0.01)) (layer "F.Cu" (type "copper") (thickness 0.035)) (layer "dielectric 1" (type "core") (thickness 0.71) (material "FR4") (epsilon_r 4.5) (loss_tangent 0.02)) (layer "B.Cu" (type "copper") (thickness 0.035)) (layer "B.Mask" (type "Bottom Solder Mask") (thickness 0.01)) (layer "B.Paste" (type "Bottom Solder Paste")) (layer "B.SilkS" (type "Bottom Silk Screen")) (copper_finish "None") (dielectric_constraints no) ) (pad_to_mask_clearance 0) (grid_origin 100 100) (pcbplotparams (layerselection 0x00010fc_ffffffff) (disableapertmacros false) (usegerberextensions false) (usegerberattributes true) (usegerberadvancedattributes true) (creategerberjobfile true) (svguseinch false) (svgprecision 6) (excludeedgelayer true) (plotframeref false) (viasonmask false) (mode 1) (useauxorigin false) (hpglpennumber 1) (hpglpenspeed 20) (hpglpendiameter 15.000000) (dxfpolygonmode true) (dxfimperialunits true) (dxfusepcbnewfont true) (psnegative false) (psa4output false) (plotreference true) (plotvalue true) (plotinvisibletext false) (sketchpadsonfab false) (subtractmaskfromsilk false) (outputformat 1) (mirror false) (drillshape 1) (scaleselection 1) (outputdirectory "") ) ) (property "COMMIT_DATE" "YYYY-MM-DD") (property "COMMIT_HASH" "deadbeef") (net 0 "") (net 1 "/SIGNAL") (net 2 "Net-(D1-Pad2)") (net 3 "VDD") (net 4 "GND") (net 5 "Net-(R1-Pad2)") (footprint "Resistor_SMD:R_0603_1608Metric" (layer "F.Cu") (tedit 5F68FEEE) (tstamp 12fbaea6-ed41-424f-988a-e1bffb8c70db) (at 128 100 90) (descr "Resistor SMD 0603 (1608 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") (tags "resistor") (property "Sheetfile" "sensor_smd.kicad_sch") (property "Sheetname" "") (path "/fee601a4-ebd8-4835-b8f7-cf8ad763c827") (attr smd) (fp_text reference "R1" (at 0 -1.43 90) (layer "F.SilkS") hide (effects (font (size 1 1) (thickness 0.15))) (tstamp cd564af3-4715-4003-a619-5f1eb438dfa2) ) (fp_text value "1k" (at 0 1.43 90) (layer "F.Fab") (effects (font (size 1 1) (thickness 0.15))) (tstamp 0ec5f849-998e-433a-a78e-9731d6b5f5f9) ) (fp_text user "${REFERENCE}" (at 0 0 90) (layer "F.Fab") (effects (font (size 0.4 0.4) (thickness 0.06))) (tstamp a5241a47-77c9-49ad-8807-05dc878b641c) ) (fp_line (start -0.237258 0.5225) (end 0.237258 0.5225) (layer "F.SilkS") (width 0.12) (tstamp 008b848a-64a4-4166-99fa-aacc564c5ca6)) (fp_line (start -0.237258 -0.5225) (end 0.237258 -0.5225) (layer "F.SilkS") (width 0.12) (tstamp 3680e74c-3062-4858-94ae-58f4f1db5091)) (fp_line (start -1.48 -0.73) (end 1.48 -0.73) (layer "F.CrtYd") (width 0.05) (tstamp 1bfb43a7-83d9-47ba-aac8-97a6b138d6ae)) (fp_line (start -1.48 0.73) (end -1.48 -0.73) (layer "F.CrtYd") (width 0.05) (tstamp 2d7a76d0-939d-4ebd-a73d-5ff1f1a8daf8)) (fp_line (start 1.48 -0.73) (end 1.48 0.73) (layer "F.CrtYd") (width 0.05) (tstamp 58d8cebc-bbd9-4114-a02b-09658f7ae014)) (fp_line (start 1.48 0.73) (end -1.48 0.73) (layer "F.CrtYd") (width 0.05) (tstamp 69e6db0a-03ce-43d8-87a5-7247885390b5)) (fp_line (start 0.8 0.4125) (end -0.8 0.4125) (layer "F.Fab") (width 0.1) (tstamp 05d68707-febd-44d9-a2e8-af2ea2449150)) (fp_line (start -0.8 -0.4125) (end 0.8 -0.4125) (layer "F.Fab") (width 0.1) (tstamp 0cddc247-aed0-4fc3-b326-e5ab344e7abe)) (fp_line (start 0.8 -0.4125) (end 0.8 0.4125) (layer "F.Fab") (width 0.1) (tstamp 0e3d6f22-145c-4b31-b6f5-13b525d0b49a)) (fp_line (start -0.8 0.4125) (end -0.8 -0.4125) (layer "F.Fab") (width 0.1) (tstamp cd838813-f65f-46cc-a44f-9b42ee74afa1)) (pad "1" smd roundrect (at -0.825 0 90) (size 0.8 0.95) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25) (net 2 "Net-(D1-Pad2)") (pintype "passive") (tstamp d196cf37-d590-4102-bcac-67ac6536ac06)) (pad "2" smd roundrect (at 0.825 0 90) (size 0.8 0.95) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25) (net 5 "Net-(R1-Pad2)") (pintype "passive") (tstamp 2e719fb0-4375-4877-a181-e34c07b7b1f4)) (model "${KICAD6_3DMODEL_DIR}/Resistor_SMD.3dshapes/R_0603_1608Metric.wrl" (offset (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (footprint "MountingHole:MountingHole_4.3mm_M4_ISO7380" (layer "F.Cu") (tedit 56D1B4CB) (tstamp 2d1a5e8d-8514-4ff1-827d-7ab009aecb2e) (at 117.5 108) (descr "Mounting Hole 4.3mm, no annular, M4, ISO7380") (tags "mounting hole 4.3mm no annular m4 iso7380") (property "Sheetfile" "sensor_smd.kicad_sch") (property "Sheetname" "") (path "/8ebe0992-3c78-412e-8133-0bd4fbe3f2a6") (attr exclude_from_pos_files exclude_from_bom) (fp_text reference "H1" (at 0 -4.8) (layer "F.SilkS") hide (effects (font (size 1 1) (thickness 0.15))) (tstamp 4a3b2d37-ccb0-4e69-bf7c-d2dacdefe068) ) (fp_text value "MountingHole" (at 0 4.8) (layer "F.Fab") (effects (font (size 1 1) (thickness 0.15))) (tstamp ed07d712-a3d2-45e3-b80d-ebf8f402a026) ) (fp_text user "${REFERENCE}" (at 0 0) (layer "F.Fab") (effects (font (size 1 1) (thickness 0.15))) (tstamp a4f5c8c4-da66-4dd2-949f-71e6cf835d8b) ) (fp_circle (center 0 0) (end 3.8 0) (layer "Cmts.User") (width 0.15) (fill none) (tstamp e99d4b8c-0e8b-4247-8c9c-ae033243727d)) (fp_circle (center 0 0) (end 4.05 0) (layer "F.CrtYd") (width 0.05) (fill none) (tstamp 09d2173e-ae28-40c9-8547-2cc65f6ef6a0)) (pad "" np_thru_hole circle (at 0 0) (size 4.3 4.3) (drill 4.3) (layers *.Cu *.Mask) (tstamp 12704270-e7d0-43dc-8de3-5ffbb659acca)) ) (footprint "Package_TO_SOT_SMD:SOT-23W" (layer "F.Cu") (tedit 5A02FF57) (tstamp 527cda78-3da3-43da-a19d-7ca44f1638b9) (at 117.5 100 90) (descr "SOT-23W http://www.allegromicro.com/~/media/Files/Datasheets/A112x-Datasheet.ashx?la=en&hash=7BC461E058CC246E0BAB62433B2F1ECA104CA9D3") (tags "SOT-23W") (property "Sheetfile" "sensor_smd.kicad_sch") (property "Sheetname" "") (path "/2a7ea13f-ac49-4778-820a-c13aa70f9bbc") (attr smd) (fp_text reference "U1" (at 0 -2.5 90) (layer "F.SilkS") hide (effects (font (size 1 1) (thickness 0.15))) (tstamp f17d7719-9fc2-4fe6-be03-1e741d73905d) ) (fp_text value "HX6286" (at 0 2.5 90) (layer "F.Fab") (effects (font (size 1 1) (thickness 0.15))) (tstamp cbf7c87f-6b5e-41e6-bdb1-67c24ddad8e5) ) (fp_text user "${REFERENCE}" (at 0 0) (layer "F.Fab") (effects (font (size 0.5 0.5) (thickness 0.075))) (tstamp 8e24ab53-3632-4c89-bd39-3d7c97617611) ) (fp_line (start 1.075 0.7) (end 1.075 1.61) (layer "F.SilkS") (width 0.12) (tstamp 222dc842-5734-4663-b476-f3a3a274b639)) (fp_line (start 1.075 -1.61) (end 1.075 -0.7) (layer "F.SilkS") (width 0.12) (tstamp 56c20b8c-5057-4c1f-baf8-50e9e80f0522)) (fp_line (start -1.075 1.61) (end 1.075 1.61) (layer "F.SilkS") (width 0.12) (tstamp 8ce44e10-c55d-4916-89e9-f6adfbe32258)) (fp_line (start -1.5 -1.61) (end 1.075 -1.61) (layer "F.SilkS") (width 0.12) (tstamp ed753631-dc0e-4706-a037-06c59ed8e1d5)) (fp_line (start 1.95 -1.74) (end 1.95 1.74) (layer "F.CrtYd") (width 0.05) (tstamp 6ffcf4ad-b8d1-4863-9687-05b6fdc370cd)) (fp_line (start 1.95 1.74) (end -1.95 1.74) (layer "F.CrtYd") (width 0.05) (tstamp 86ea3400-dc12-4e85-8220-d168fb148407)) (fp_line (start -1.95 -1.74) (end 1.95 -1.74) (layer "F.CrtYd") (width 0.05) (tstamp 8e3e50e5-8582-4ef7-abbc-5c0e912f4608)) (fp_line (start -1.95 1.74) (end -1.95 -1.74) (layer "F.CrtYd") (width 0.05) (tstamp ac2a84e4-9264-45a4-8040-5260cc05a2fc)) (fp_line (start -0.955 -0.49) (end 0.045 -1.49) (layer "F.Fab") (width 0.1) (tstamp 051010f9-1700-4fbb-b8c9-976a74b896de)) (fp_line (start 0.045 -1.49) (end 0.955 -1.49) (layer "F.Fab") (width 0.1) (tstamp 0ab47c1c-3a97-461b-bcee-a9453fa7aeae)) (fp_line (start -0.955 -0.49) (end -0.955 1.49) (layer "F.Fab") (width 0.1) (tstamp 419ba07a-e5a6-48af-a9ce-251a17f2d490)) (fp_line (start 0.955 -1.49) (end 0.955 1.49) (layer "F.Fab") (width 0.1) (tstamp 7e0e2795-6d32-461f-801e-13df594502b1)) (fp_line (start -0.955 1.49) (end 0.955 1.49) (layer "F.Fab") (width 0.1) (tstamp e099641b-cdbb-415b-8db9-1f6c08c87d1b)) (pad "1" smd rect (at -1.2 -0.95 90) (size 1 0.7) (layers "F.Cu" "F.Paste" "F.Mask") (net 3 "VDD") (pinfunction "VCC") (pintype "power_in") (tstamp 5d12e603-99ca-4b7b-9b0d-a711bede13b0)) (pad "2" smd rect (at -1.2 0.95 90) (size 1 0.7) (layers "F.Cu" "F.Paste" "F.Mask") (net 1 "/SIGNAL") (pinfunction "VOUT") (pintype "open_collector") (tstamp e766f0d7-8aa6-46af-90af-32c3b01967c7)) (pad "3" smd rect (at 1.2 0 90) (size 1 0.7) (layers "F.Cu" "F.Paste" "F.Mask") (net 4 "GND") (pinfunction "GND") (pintype "power_in") (tstamp 1e2de4e1-098f-45a8-b86c-ad324d0d4b63)) (model "${KICAD6_3DMODEL_DIR}/Package_TO_SOT_SMD.3dshapes/SOT-23W.wrl" (offset (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (footprint "sensor_smd_lib:hole_9.4" (layer "F.Cu") (tedit 0) (tstamp c39bafab-a86f-4224-ab16-47b3c6a74449) (at 100 100) (property "Sheetfile" "sensor_smd.kicad_sch") (property "Sheetname" "") (path "/a42ba77e-7f12-467c-8411-ebb38194c333") (attr through_hole exclude_from_pos_files exclude_from_bom) (fp_text reference "H2" (at 0 -0.5 unlocked) (layer "F.SilkS") hide (effects (font (size 1 1) (thickness 0.15))) (tstamp c7d35d6f-3a73-4249-bfaa-4c37eccffe7a) ) (fp_text value "MountingHole" (at 0 1 unlocked) (layer "F.Fab") (effects (font (size 1 1) (thickness 0.15))) (tstamp 7f527c61-0916-4fde-bb4c-0a33b7355e78) ) (fp_text user "${REFERENCE}" (at 0 2.5 unlocked) (layer "F.Fab") (effects (font (size 1 1) (thickness 0.15))) (tstamp e2cf5784-88fd-4580-bd52-460efb33b450) ) (pad "" np_thru_hole circle (at 0 0) (size 9.4 9.4) (drill 9.4) (layers F&B.Cu *.Mask) (tstamp d96dff05-4331-4004-86d3-512c86929baa)) ) (footprint "LED_SMD:LED_0603_1608Metric" (layer "F.Cu") (tedit 5F68FEF1) (tstamp c4624069-cb00-414e-bcc2-973f716b79e4) (at 131 100 90) (descr "LED SMD 0603 (1608 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: http://www.tortai-tech.com/upload/download/2011102023233369053.pdf), generated with kicad-footprint-generator") (tags "LED") (property "Sheetfile" "sensor_smd.kicad_sch") (property "Sheetname" "") (path "/e40b31b6-953e-4e42-9093-099a9a1bfd04") (attr smd) (fp_text reference "D1" (at 0 -1.43 90) (layer "F.SilkS") hide (effects (font (size 1 1) (thickness 0.15))) (tstamp fe7af439-f38b-4377-ba33-6235630ba77d) ) (fp_text value "LED RED" (at 0 1.43 90) (layer "F.Fab") (effects (font (size 1 1) (thickness 0.15))) (tstamp 25531610-f4da-4b76-9852-fc869f62ee79) ) (fp_text user "${REFERENCE}" (at 0 0 90) (layer "F.Fab") (effects (font (size 0.4 0.4) (thickness 0.06))) (tstamp fea244e6-61f7-4443-a097-39960e93538b) ) (fp_line (start -1.485 0.735) (end 0.8 0.735) (layer "F.SilkS") (width 0.12) (tstamp 45098c4e-8a0b-4cb0-84c0-52904eb31ef5)) (fp_line (start -1.485 -0.735) (end -1.485 0.735) (layer "F.SilkS") (width 0.12) (tstamp 770a11a1-0b8e-4e24-a101-3cd701d424b8)) (fp_line (start 0.8 -0.735) (end -1.485 -0.735) (layer "F.SilkS") (width 0.12) (tstamp e7c0a686-173a-41f5-9d6e-f0a3da83664c)) (fp_line (start -1.48 0.73) (end -1.48 -0.73) (layer "F.CrtYd") (width 0.05) (tstamp 06ceb7f6-ac0b-48b4-b008-7edc48bfb62e)) (fp_line (start 1.48 -0.73) (end 1.48 0.73) (layer "F.CrtYd") (width 0.05) (tstamp 298ae8b1-4863-439c-bcab-a20a844fa94d)) (fp_line (start -1.48 -0.73) (end 1.48 -0.73) (layer "F.CrtYd") (width 0.05) (tstamp ab231b83-963b-4122-91e0-6269acc26cf7)) (fp_line (start 1.48 0.73) (end -1.48 0.73) (layer "F.CrtYd") (width 0.05) (tstamp e7347571-459c-4e64-a98b-77dfe6b4930d)) (fp_line (start -0.8 -0.1) (end -0.8 0.4) (layer "F.Fab") (width 0.1) (tstamp 06492577-e64d-454c-8891-73d452f7b59b)) (fp_line (start -0.8 0.4) (end 0.8 0.4) (layer "F.Fab") (width 0.1) (tstamp 63d022e3-c4ad-4f17-9a46-b1e60428585a)) (fp_line (start 0.8 -0.4) (end -0.5 -0.4) (layer "F.Fab") (width 0.1) (tstamp 8f603562-0168-47a5-bebf-e17a2732f47b)) (fp_line (start -0.5 -0.4) (end -0.8 -0.1) (layer "F.Fab") (width 0.1) (tstamp e07b360e-937e-466e-9e66-38d4f3cb6ad4)) (fp_line (start 0.8 0.4) (end 0.8 -0.4) (layer "F.Fab") (width 0.1) (tstamp ff731467-8f8c-47e9-9a48-e377ab5f2b25)) (pad "1" smd roundrect (at -0.7875 0 90) (size 0.875 0.95) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25) (net 1 "/SIGNAL") (pinfunction "K") (pintype "passive") (tstamp f05cd5b1-d312-472a-a39c-2ce8d0d5c813)) (pad "2" smd roundrect (at 0.7875 0 90) (size 0.875 0.95) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25) (net 2 "Net-(D1-Pad2)") (pinfunction "A") (pintype "passive") (tstamp ab79a116-847b-4fef-945b-1fc14c52ac5b)) (model "${KICAD6_3DMODEL_DIR}/LED_SMD.3dshapes/LED_0603_1608Metric.wrl" (offset (xyz 0 0 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 0)) ) ) (footprint "sensor_smd_lib:header_3" (layer "B.Cu") (tedit 0) (tstamp 5c84fd6c-972e-4f56-93b5-16e1ca0133a4) (at 128 113 180) (property "Sheetfile" "sensor_smd.kicad_sch") (property "Sheetname" "") (path "/ae896a98-44ff-4a63-9762-fc32f3a185d2") (attr through_hole exclude_from_pos_files) (fp_text reference "J1" (at 0 0.5 unlocked) (layer "B.SilkS") hide (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) (tstamp 028bd452-ac5d-4748-8a0e-3d86218e45ab) ) (fp_text value "HEADER MALE RA" (at 0 -1 unlocked) (layer "B.Fab") (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) (tstamp 3401e0c2-2796-4497-b904-1b0defe56be1) ) (fp_text user "${REFERENCE}" (at 0 -2.5 unlocked) (layer "B.Fab") (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) (tstamp 93f521da-73da-4f16-9ba2-c1a65264c7f1) ) (fp_line (start 4 4.5) (end 4 0) (layer "B.SilkS") (width 0.12) (tstamp 470f58f4-61bf-4ead-999c-10b730a858fe)) (fp_line (start -4 0) (end -4 4.5) (layer "B.SilkS") (width 0.12) (tstamp 49be762a-2120-411e-9ee9-877728745233)) (fp_line (start -4 4.5) (end 4 4.5) (layer "B.SilkS") (width 0.12) (tstamp e14806c5-822f-4fe1-90fc-4882a7a4ebd6)) (fp_line (start -4 -12) (end 4 -12) (layer "B.Fab") (width 0.1) (tstamp c0f5cfa7-7e11-44f0-ae0c-98a6805a2a6e)) (fp_line (start 4 -12) (end 4 0) (layer "B.Fab") (width 0.1) (tstamp dde11119-22e0-4444-a40d-f3178f5f6732)) (fp_line (start -4 0) (end -4 -12) (layer "B.Fab") (width 0.1) (tstamp f06d5d13-a19c-4a02-be44-bccfcc4014bf)) (pad "1" thru_hole circle (at -2.54 3.1 180) (size 1.65 1.65) (drill 0.94) (layers *.Cu *.Mask) (net 1 "/SIGNAL") (pinfunction "Pin_1") (pintype "passive") (tstamp 0a781074-5fab-4b97-860f-d8aaab75c554)) (pad "2" thru_hole circle (at 0 2.9 180) (size 1.65 1.65) (drill 0.94) (layers *.Cu *.Mask) (net 3 "VDD") (pinfunction "Pin_2") (pintype "passive") (tstamp e94c1949-9bec-43f0-82f7-ceeb6a37d54c)) (pad "3" thru_hole circle (at 2.54 3.1 180) (size 1.65 1.65) (drill 0.94) (layers *.Cu *.Mask) (net 4 "GND") (pinfunction "Pin_3") (pintype "passive") (tstamp 9e3eda56-9343-4fbe-ac41-d4dac34f0fa0)) (model "${KICAD6_3DMODEL_DIR}/Connector_PinHeader_2.54mm.3dshapes/PinHeader_1x03_P2.54mm_Vertical.step" hide (offset (xyz -2.54 0 0.3)) (scale (xyz 1 1 1)) (rotate (xyz -90 90 0)) ) (model "${KICAD6_3DMODEL_DIR}/Connector_PinHeader_2.54mm.3dshapes/PinHeader_1x03_P2.54mm_Horizontal.step" (offset (xyz 2.54 3 0)) (scale (xyz 1 1 1)) (rotate (xyz 0 0 90)) ) ) (footprint "sensor_smd_lib:SolderJumper-2_P1.3mm_Bridged_Pad1.0x1.5mm" (layer "B.Cu") (tedit 5C756AB2) (tstamp 9e897bf3-88a4-4185-a0ef-f851fef4cdc9) (at 129.9 95) (descr "SMD Solder Jumper, 1x1.5mm Pads, 0.3mm gap, bridged with 1 copper strip") (tags "net tie solder jumper bridged") (property "Sheetfile" "sensor_smd.kicad_sch") (property "Sheetname" "") (path "/03d72700-237d-4342-a10c-58906e3a0d69") (attr exclude_from_pos_files) (fp_text reference "JP1" (at 0 1.8) (layer "B.SilkS") hide (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) (tstamp f06caa8f-7c1a-4120-8643-18b8f02f0b6e) ) (fp_text value "LED enable" (at 0 -1.9) (layer "B.Fab") (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) (tstamp b99af0da-6109-4d20-a9ba-a4e6a9794455) ) (fp_poly (pts (xy -0.25 0.3) (xy 0.25 0.3) (xy 0.25 -0.3) (xy -0.25 -0.3) ) (layer "B.Cu") (width 0) (fill solid) (tstamp d1f85f9b-7913-4546-8f86-f164c2f5a7b7)) (fp_line (start -1.4 -1) (end -1.4 1) (layer "B.SilkS") (width 0.12) (tstamp 144ad26a-b795-462e-8838-2d06998385df)) (fp_line (start 1.4 1) (end 1.4 -1) (layer "B.SilkS") (width 0.12) (tstamp 519eec7f-7ee7-45c7-a638-17c1f19d0245)) (fp_line (start -1.4 1) (end 1.4 1) (layer "B.SilkS") (width 0.12) (tstamp aec23f97-a20e-45d6-a56f-1d9dc26590a7)) (fp_line (start 1.4 -1) (end -1.4 -1) (layer "B.SilkS") (width 0.12) (tstamp ed3b54ee-ef1c-4320-84dc-f6c0d59cd436)) (fp_poly (pts (xy -0.25 0.3) (xy 0.25 0.3) (xy 0.25 -0.3) (xy -0.25 -0.3) ) (layer "B.Mask") (width 0) (fill solid) (tstamp 2dad69e3-1c4f-490e-be17-3e6da9938091)) (fp_line (start 1.65 -1.25) (end -1.65 -1.25) (layer "B.CrtYd") (width 0.05) (tstamp 18d43ac6-4552-4e33-b3ee-ea01a149df6b)) (fp_line (start -1.65 1.25) (end -1.65 -1.25) (layer "B.CrtYd") (width 0.05) (tstamp 3dd4560f-f646-46e7-8d01-613e723409d3)) (fp_line (start 1.65 -1.25) (end 1.65 1.25) (layer "B.CrtYd") (width 0.05) (tstamp 3e756561-63b3-4f37-801e-ee39122e0cdb)) (fp_line (start -1.65 1.25) (end 1.65 1.25) (layer "B.CrtYd") (width 0.05) (tstamp 8734355d-d82f-4c8b-b25e-7f12829b1dec)) (pad "1" smd rect (at -0.65 0) (size 1 1.5) (layers "B.Cu" "B.Mask") (net 3 "VDD") (pinfunction "A") (pintype "passive") (tstamp fdf5591f-57aa-480c-b9cc-6926264d9680)) (pad "2" smd rect (at 0.65 0) (size 1 1.5) (layers "B.Cu" "B.Mask") (net 5 "Net-(R1-Pad2)") (pinfunction "B") (pintype "passive") (tstamp 37ec703c-7d5c-462f-b027-d3cd67c0619c)) ) (gr_line (start 113.447842 104.513523) (end 117.5 104.5) (layer "B.SilkS") (width 0.15) (tstamp 4feb494a-b845-4aa8-8a22-ee836174646d)) (gr_line (start 113.499999 111.5) (end 117.5 111.5) (layer "B.SilkS") (width 0.15) (tstamp 51b8d01c-aff2-43da-80cb-857a812723ad)) (gr_arc (start 113.499999 111.5) (mid 113.279748 112.260078) (end 113.016741 113.006439) (layer "B.SilkS") (width 0.15) (tstamp 64f987cf-7add-4687-8257-c76adf448913)) (gr_arc (start 117.5 104.5) (mid 121 108) (end 117.5 111.5) (layer "B.SilkS") (width 0.15) (tstamp e4d7fb53-6c77-4e28-b3c7-b48ff15a48d3)) (gr_arc (start 93 96.000001) (mid 105.33982 95.174779) (end 113.447842 104.513523) (layer "B.SilkS") (width 0.15) (tstamp f7bd9553-2661-4cd4-98f0-80b397928fd0)) (gr_line (start 129.9 98.5) (end 129.9 98.9) (layer "F.SilkS") (width 0.15) (tstamp 00741775-f1f3-42e4-80bd-74575ec31fe1)) (gr_line (start 130.1 98.7) (end 129.7 98.7) (layer "F.SilkS") (width 0.15) (tstamp 578b2c44-6376-459c-9a1e-c4277c5961b3)) (gr_circle (center 117.5 100) (end 120.5 100) (layer "F.SilkS") (width 0.15) (fill none) (tstamp dc9a163a-5989-414e-a426-fea3fd437968)) (gr_arc (start 93 95) (mid 93.585786 93.585786) (end 95 93) (layer "Edge.Cuts") (width 0.1) (tstamp 0773fd92-8918-47cc-98bf-4e518e913c41)) (gr_arc (start 133 111) (mid 132.414214 112.414214) (end 131 113) (layer "Edge.Cuts") (width 0.1) (tstamp 10a3fc21-15df-46d2-95fe-4809fd55f7ae)) (gr_line (start 95 93) (end 131 93) (layer "Edge.Cuts") (width 0.1) (tstamp 2434734c-4ce9-43d6-8415-dc81e3bf915a)) (gr_line (start 133 95) (end 133 111) (layer "Edge.Cuts") (width 0.1) (tstamp 7d93acfc-abef-4209-8a02-d4eba7af0622)) (gr_line (start 95 113) (end 131 113) (layer "Edge.Cuts") (width 0.1) (tstamp 81fd9386-ffd4-4474-8933-ee83832b89ae)) (gr_line (start 93 95) (end 93 111) (layer "Edge.Cuts") (width 0.1) (tstamp 824cc84f-f6e2-459c-b476-331537654def)) (gr_arc (start 131 93) (mid 132.414214 93.585786) (end 133 95) (layer "Edge.Cuts") (width 0.1) (tstamp 9c51c138-ad0e-4f0f-b6a6-a92b47d79837)) (gr_arc (start 95 113) (mid 93.585786 112.414214) (end 93 111) (layer "Edge.Cuts") (width 0.1) (tstamp d77305bc-ade9-4ca7-98ed-76a21a3fcd42)) (gr_text "S" (at 130.5 107.5) (layer "B.SilkS") (tstamp 1b5b6a91-a455-4c15-bc26-25eded7e4d13) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) (gr_text "MOTOR" (at 102 107 15) (layer "B.SilkS") (tstamp 4bf38e4d-b1d5-4dfc-9966-fda2b4d0c078) (effects (font (size 3 3) (thickness 0.3)) (justify mirror)) ) (gr_text "${COMMIT_HASH}\n${COMMIT_DATE}" (at 112.5 110.5) (layer "B.SilkS") (tstamp 76dd3178-8b8b-428c-864e-bf3cce24c184) (effects (font (size 1 1) (thickness 0.15)) (justify left mirror)) ) (gr_text "-" (at 125.5 107.5) (layer "B.SilkS") (tstamp 7dab74b9-0b1b-4086-97a1-bc2ef780dea8) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) (gr_text "+" (at 128 107.5) (layer "B.SilkS") (tstamp d75b56c5-a973-43fe-896b-ea47ded9f745) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) (gr_text "↑\nCut to\ndisable\nLED" (at 130 99.5) (layer "B.SilkS") (tstamp dded4a69-ce1a-4f52-9640-25b358a44dbe) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) (gr_text "Splitflap Sensor" (at 94 110) (layer "F.SilkS") (tstamp 0380f6e2-12fc-4818-80a3-d05115d72b47) (effects (font (size 1 1) (thickness 0.15) italic) (justify left)) ) (gr_text "v2.0" (at 94 111.5) (layer "F.SilkS") (tstamp 1e649368-d9b5-4e83-9324-abbb2aa3bf6d) (effects (font (size 0.8 0.8) (thickness 0.1) italic) (justify left)) ) (dimension (type aligned) (layer "Cmts.User") (tstamp 2eb54dfd-75e9-4a20-811e-475a09b683cd) (pts (xy 128 110) (xy 128 100)) (height 10) (gr_text "10.0000 mm" (at 136.85 105 90) (layer "Cmts.User") (tstamp 2eb54dfd-75e9-4a20-811e-475a09b683cd) (effects (font (size 1 1) (thickness 0.15))) ) (format (units 3) (units_format 1) (precision 4)) (style (thickness 0.15) (arrow_length 1.27) (text_position_mode 0) (extension_height 0.58642) (extension_offset 0.5) keep_text_aligned) ) (dimension (type aligned) (layer "Cmts.User") (tstamp 337d412c-8ed2-4782-964e-3dbd0cbd3549) (pts (xy 100 100) (xy 133 100)) (height -13.5) (gr_text "33.0000 mm" (at 116.5 85.35) (layer "Cmts.User") (tstamp 337d412c-8ed2-4782-964e-3dbd0cbd3549) (effects (font (size 1 1) (thickness 0.15))) ) (format (units 3) (units_format 1) (precision 4)) (style (thickness 0.15) (arrow_length 1.27) (text_position_mode 0) (extension_height 0.58642) (extension_offset 0.5) keep_text_aligned) ) (dimension (type aligned) (layer "Cmts.User") (tstamp 37feb1db-65a6-4e42-8ef0-cddaca738839) (pts (xy 100 110) (xy 128 110)) (height 8.5) (gr_text "28.0000 mm" (at 114 117.35) (layer "Cmts.User") (tstamp 37feb1db-65a6-4e42-8ef0-cddaca738839) (effects (font (size 1 1) (thickness 0.15))) ) (format (units 3) (units_format 1) (precision 4)) (style (thickness 0.15) (arrow_length 1.27) (text_position_mode 0) (extension_height 0.58642) (extension_offset 0.5) keep_text_aligned) ) (dimension (type aligned) (layer "Cmts.User") (tstamp 5b32607a-8629-4b49-9cc3-5d89f4e0c3c1) (pts (xy 100 100) (xy 93 100)) (height 13.5) (gr_text "7.0000 mm" (at 96.5 85.35) (layer "Cmts.User") (tstamp 5b32607a-8629-4b49-9cc3-5d89f4e0c3c1) (effects (font (size 1 1) (thickness 0.15))) ) (format (units 3) (units_format 1) (precision 4)) (style (thickness 0.15) (arrow_length 1.27) (text_position_mode 0) (extension_height 0.58642) (extension_offset 0.5) keep_text_aligned) ) (dimension (type aligned) (layer "Cmts.User") (tstamp 6bdd7260-33e2-423e-897f-0ba1c1a477e5) (pts (xy 100 100) (xy 117.5 100)) (height -10) (gr_text "17.5000 mm" (at 108.75 88.85) (layer "Cmts.User") (tstamp 6bdd7260-33e2-423e-897f-0ba1c1a477e5) (effects (font (size 1 1) (thickness 0.15))) ) (format (units 3) (units_format 1) (precision 4)) (style (thickness 0.15) (arrow_length 1.27) (text_position_mode 0) (extension_height 0.58642) (extension_offset 0.5) keep_text_aligned) ) (dimension (type aligned) (layer "Cmts.User") (tstamp b21e4a3d-771b-46f8-b304-a97d75946e70) (pts (xy 100 100) (xy 100 108)) (height 8) (gr_text "8.0000 mm" (at 90.5 104 90) (layer "Cmts.User") (tstamp b21e4a3d-771b-46f8-b304-a97d75946e70) (effects (font (size 1 1) (thickness 0.15))) ) (format (units 3) (units_format 1) (precision 4)) (style (thickness 0.15) (arrow_length 1.27) (text_position_mode 2) (extension_height 0.58642) (extension_offset 0.5) keep_text_aligned) ) (dimension (type aligned) (layer "Cmts.User") (tstamp b98af4f4-1a33-4019-8a15-893f74103405) (pts (xy 100 100) (xy 100 113)) (height 11) (gr_text "13.0000 mm" (at 87.85 106.5 90) (layer "Cmts.User") (tstamp b98af4f4-1a33-4019-8a15-893f74103405) (effects (font (size 1 1) (thickness 0.15))) ) (format (units 3) (units_format 1) (precision 4)) (style (thickness 0.15) (arrow_length 1.27) (text_position_mode 0) (extension_height 0.58642) (extension_offset 0.5) keep_text_aligned) ) (dimension (type aligned) (layer "Cmts.User") (tstamp e9afb7a8-da07-4eac-a464-b6b75ee37025) (pts (xy 100 100) (xy 100 93)) (height -11) (gr_text "7.0000 mm" (at 87.85 96.5 90) (layer "Cmts.User") (tstamp e9afb7a8-da07-4eac-a464-b6b75ee37025) (effects (font (size 1 1) (thickness 0.15))) ) (format (units 3) (units_format 1) (precision 4)) (style (thickness 0.15) (arrow_length 1.27) (text_position_mode 0) (extension_height 0.58642) (extension_offset 0.5) keep_text_aligned) ) (segment (start 131 100.7875) (end 131 101.39375) (width 0.25) (layer "F.Cu") (net 1) (tstamp 30018cec-580f-4c5b-8b38-9d80ddc7aa16)) (segment (start 130.54 101.85375) (end 130.54 109.9) (width 0.25) (layer "F.Cu") (net 1) (tstamp 7ef8c4d2-78a7-4e34-8ca7-bdb75042886a)) (segment (start 124.7 101.2) (end 126 102.5) (width 0.25) (layer "F.Cu") (net 1) (tstamp b1974426-50b3-46cf-82d7-4f63d2d74bcf)) (segment (start 118.45 101.2) (end 124.7 101.2) (width 0.25) (layer "F.Cu") (net 1) (tstamp ecd86e93-95c7-40de-8d7e-f4d18558db64)) (segment (start 131 101.39375) (end 130.54 101.85375) (width 0.25) (layer "F.Cu") (net 1) (tstamp efa99ecb-bd16-49d3-ae15-859a05e03072)) (segment (start 126 102.5) (end 130.54 102.5) (width 0.25) (layer "F.Cu") (net 1) (tstamp f13dd12c-3f9e-42a1-9ab6-2e103642b7cf)) (segment (start 128.78125 100.825) (end 130.39375 99.2125) (width 0.25) (layer "F.Cu") (net 2) (tstamp 43600d58-c690-46c9-9a3a-1dc6d47ffd40)) (segment (start 130.39375 99.2125) (end 131 99.2125) (width 0.25) (layer "F.Cu") (net 2) (tstamp 7fb75c19-b9cf-4794-b45b-44366ed940b5)) (segment (start 128 100.825) (end 128.78125 100.825) (width 0.25) (layer "F.Cu") (net 2) (tstamp dc5fa445-d70e-47bc-88e8-90567090eccf)) (segment (start 116.55 101.2) (end 117.75 100) (width 0.25) (layer "F.Cu") (net 3) (tstamp 0107a56b-9a44-40ee-9229-4ad85d9a05e1)) (segment (start 128 109) (end 128 110.1) (width 0.25) (layer "F.Cu") (net 3) (tstamp 0c9f67d4-ddf3-49c4-b1dd-d4e1db94e1e7)) (segment (start 118.35 103) (end 122 103) (width 0.25) (layer "F.Cu") (net 3) (tstamp 0f3bcdba-3233-46c1-90d9-99d48450dbfc)) (segment (start 122 103) (end 128 109) (width 0.25) (layer "F.Cu") (net 3) (tstamp 6a8d4b28-a5f3-4159-ba80-2731990f3f57)) (segment (start 128 96.5) (end 129 96.5) (width 0.25) (layer "F.Cu") (net 3) (tstamp 79235a20-73b5-439d-b786-a7eaaf3d804b)) (segment (start 117.75 100) (end 124.5 100) (width 0.25) (layer "F.Cu") (net 3) (tstamp 85f85480-9731-46d6-900e-83859ee52c4d)) (segment (start 124.5 100) (end 128 96.5) (width 0.25) (layer "F.Cu") (net 3) (tstamp be8e8b96-4b00-482b-98e2-5c5381fb2887)) (segment (start 116.55 101.2) (end 118.35 103) (width 0.25) (layer "F.Cu") (net 3) (tstamp d8bbfb63-82cb-464a-8ed9-7ef4ae90330e)) (via (at 129 96.5) (size 0.8) (drill 0.4) (layers "F.Cu" "B.Cu") (net 3) (tstamp 56d331ac-c0b8-4918-9cb5-7b049267d86e)) (segment (start 129.25 95) (end 129.25 96.25) (width 0.25) (layer "B.Cu") (net 3) (tstamp 7583fe55-2e78-48fd-84b9-e40dc6f49013)) (segment (start 129.25 96.25) (end 129 96.5) (width 0.25) (layer "B.Cu") (net 3) (tstamp c3ff7c75-addb-493d-9b5c-e71c40c0094d)) (segment (start 128 99.175) (end 128.825 99.175) (width 0.25) (layer "F.Cu") (net 5) (tstamp 2121cd28-1411-4aa1-81eb-5bdfa13db4bb)) (segment (start 128.825 99.175) (end 131 97) (width 0.25) (layer "F.Cu") (net 5) (tstamp 5b37533d-8c8e-4fce-b9db-ecc951a7c7a5)) (segment (start 131 97) (end 131 96.5) (width 0.25) (layer "F.Cu") (net 5) (tstamp 8318b2a0-42d7-4768-89d4-3207a88dbd4f)) (via (at 131 96.5) (size 0.8) (drill 0.4) (layers "F.Cu" "B.Cu") (net 5) (tstamp 0f6b4c9d-7103-4823-9cec-c75cc376e3eb)) (segment (start 130.55 95) (end 130.55 96.05) (width 0.25) (layer "B.Cu") (net 5) (tstamp 7977e62c-bd38-475a-a413-899b029a2183)) (segment (start 130.55 96.05) (end 131 96.5) (width 0.25) (layer "B.Cu") (net 5) (tstamp 954ac47c-e608-4510-a818-0e94970f2237)) (zone (net 4) (net_name "GND") (layer "F.Cu") (tstamp 30db5457-4036-43d6-bfa2-981a5e131991) (hatch edge 0.508) (connect_pads (clearance 0.254)) (min_thickness 0.254) (filled_areas_thickness no) (fill yes (thermal_gap 0.508) (thermal_bridge_width 0.508)) (polygon (pts (xy 133 113) (xy 93 113) (xy 93 93) (xy 133 93) ) ) (filled_polygon (layer "F.Cu") (pts (xy 130.987103 93.256921) (xy 131 93.259486) (xy 131.012172 93.257065) (xy 131.024579 93.257065) (xy 131.024579 93.257705) (xy 131.035358 93.257029) (xy 131.219248 93.270181) (xy 131.23942 93.271624) (xy 131.257214 93.274182) (xy 131.48296 93.32329) (xy 131.500209 93.328355) (xy 131.555356 93.348923) (xy 131.71667 93.40909) (xy 131.733017 93.416556) (xy 131.935782 93.527275) (xy 131.950905 93.536994) (xy 132.135848 93.675441) (xy 132.149434 93.687214) (xy 132.312786 93.850566) (xy 132.324559 93.864152) (xy 132.463006 94.049095) (xy 132.472725 94.064218) (xy 132.583444 94.266983) (xy 132.59091 94.28333) (xy 132.651077 94.444644) (xy 132.671645 94.499791) (xy 132.67671 94.51704) (xy 132.725818 94.742786) (xy 132.728376 94.76058) (xy 132.742971 94.964639) (xy 132.742295 94.975421) (xy 132.742935 94.975421) (xy 132.742935 94.987828) (xy 132.740514 95) (xy 132.742935 95.01217) (xy 132.743079 95.012894) (xy 132.7455 95.037476) (xy 132.7455 110.962524) (xy 132.743079 110.987103) (xy 132.740514 111) (xy 132.742935 111.012172) (xy 132.742935 111.024579) (xy 132.742295 111.024579) (xy 132.742971 111.035358) (xy 132.738902 111.092252) (xy 132.728376 111.23942) (xy 132.725818 111.257214) (xy 132.67671 111.48296) (xy 132.671645 111.500209) (xy 132.59091 111.71667) (xy 132.583444 111.733017) (xy 132.472725 111.935782) (xy 132.463006 111.950905) (xy 132.324559 112.135848) (xy 132.312786 112.149434) (xy 132.149434 112.312786) (xy 132.135848 112.324559) (xy 131.950905 112.463006) (xy 131.935782 112.472725) (xy 131.733017 112.583444) (xy 131.71667 112.59091) (xy 131.555356 112.651077) (xy 131.500209 112.671645) (xy 131.48296 112.67671) (xy 131.257214 112.725818) (xy 131.23942 112.728376) (xy 131.219248 112.729819) (xy 131.035358 112.742971) (xy 131.024579 112.742295) (xy 131.024579 112.742935) (xy 131.012172 112.742935) (xy 131 112.740514) (xy 130.987103 112.743079) (xy 130.962524 112.7455) (xy 95.037476 112.7455) (xy 95.012897 112.743079) (xy 95 112.740514) (xy 94.987828 112.742935) (xy 94.975421 112.742935) (xy 94.975421 112.742295) (xy 94.964642 112.742971) (xy 94.780752 112.729819) (xy 94.76058 112.728376) (xy 94.742786 112.725818) (xy 94.51704 112.67671) (xy 94.499791 112.671645) (xy 94.444644 112.651077) (xy 94.28333 112.59091) (xy 94.266983 112.583444) (xy 94.064218 112.472725) (xy 94.049095 112.463006) (xy 93.864152 112.324559) (xy 93.850566 112.312786) (xy 93.687214 112.149434) (xy 93.675441 112.135848) (xy 93.536994 111.950905) (xy 93.527275 111.935782) (xy 93.416556 111.733017) (xy 93.40909 111.71667) (xy 93.328355 111.500209) (xy 93.32329 111.48296) (xy 93.274182 111.257214) (xy 93.271624 111.23942) (xy 93.261098 111.092252) (xy 93.257029 111.035358) (xy 93.257705 111.024579) (xy 93.257065 111.024579) (xy 93.257065 111.012172) (xy 93.258688 111.004013) (xy 124.720542 111.004013) (xy 124.729838 111.016028) (xy 124.786446 111.055665) (xy 124.795941 111.061148) (xy 124.997364 111.155072) (xy 125.007656 111.158818) (xy 125.222328 111.216339) (xy 125.233123 111.218242) (xy 125.454525 111.237613) (xy 125.465475 111.237613) (xy 125.686877 111.218242) (xy 125.697672 111.216339) (xy 125.912344 111.158818) (xy 125.922636 111.155072) (xy 126.124059 111.061148) (xy 126.133554 111.055665) (xy 126.191 111.015441) (xy 126.199375 111.004964) (xy 126.192307 110.991517) (xy 125.472812 110.272022) (xy 125.458868 110.264408) (xy 125.457035 110.264539) (xy 125.45042 110.26879) (xy 124.726972 110.992238) (xy 124.720542 111.004013) (xy 93.258688 111.004013) (xy 93.259486 111) (xy 93.256921 110.987103) (xy 93.2545 110.962524) (xy 93.2545 107.899103) (xy 115.092663 107.899103) (xy 115.09275 107.903104) (xy 115.09275 107.903111) (xy 115.099268 108.201791) (xy 115.099356 108.205808) (xy 115.144965 108.509177) (xy 115.228752 108.804291) (xy 115.230332 108.807987) (xy 115.230333 108.807989) (xy 115.238733 108.827634) (xy 115.349359 109.086367) (xy 115.50483 109.350832) (xy 115.692645 109.593398) (xy 115.909759 109.810133) (xy 115.912932 109.812581) (xy 116.094981 109.953031) (xy 116.152653 109.997525) (xy 116.15612 109.999555) (xy 116.156123 109.999557) (xy 116.408557 110.147363) (xy 116.417388 110.152534) (xy 116.421073 110.154102) (xy 116.421077 110.154104) (xy 116.593633 110.227527) (xy 116.699674 110.272648) (xy 116.775876 110.294139) (xy 116.991068 110.35483) (xy 116.991077 110.354832) (xy 116.994935 110.35592) (xy 117.040203 110.362645) (xy 117.295083 110.40051) (xy 117.295085 110.40051) (xy 117.298382 110.401) (xy 117.301713 110.40114) (xy 117.301717 110.40114) (xy 117.338548 110.402683) (xy 117.381892 110.4045) (xy 117.577597 110.4045) (xy 117.701898 110.396571) (xy 117.802148 110.390176) (xy 117.802153 110.390175) (xy 117.806156 110.38992) (xy 117.810095 110.389158) (xy 118.103412 110.332409) (xy 118.103416 110.332408) (xy 118.107349 110.331647) (xy 118.288167 110.272022) (xy 118.394878 110.236834) (xy 118.394883 110.236832) (xy 118.398695 110.235575) (xy 118.675473 110.103262) (xy 118.933196 109.936853) (xy 118.965527 109.90958) (xy 118.970393 109.905475) (xy 124.122387 109.905475) (xy 124.141758 110.126877) (xy 124.143661 110.137672) (xy 124.201182 110.352344) (xy 124.204928 110.362636) (xy 124.298852 110.564059) (xy 124.304335 110.573554) (xy 124.344559 110.631) (xy 124.355036 110.639375) (xy 124.368483 110.632307) (xy 125.087978 109.912812) (xy 125.095592 109.898868) (xy 125.095461 109.897035) (xy 125.09121 109.89042) (xy 124.367762 109.166972) (xy 124.355987 109.160542) (xy 124.343972 109.169838) (xy 124.304335 109.226446) (xy 124.298852 109.235941) (xy 124.204928 109.437364) (xy 124.201182 109.447656) (xy 124.143661 109.662328) (xy 124.141758 109.673123) (xy 124.122387 109.894525) (xy 124.122387 109.905475) (xy 118.970393 109.905475) (xy 119.164623 109.741627) (xy 119.167684 109.739045) (xy 119.354442 109.535592) (xy 119.372423 109.516004) (xy 119.372425 109.516002) (xy 119.375138 109.513046) (xy 119.394872 109.485123) (xy 119.549876 109.265797) (xy 119.549878 109.265793) (xy 119.552193 109.262518) (xy 119.644217 109.089082) (xy 119.694103 108.995063) (xy 119.694105 108.995059) (xy 119.695981 108.991523) (xy 119.770031 108.795036) (xy 124.720625 108.795036) (xy 124.727693 108.808483) (xy 125.447188 109.527978) (xy 125.461132 109.535592) (xy 125.462965 109.535461) (xy 125.46958 109.53121) (xy 126.193028 108.807762) (xy 126.199458 108.795987) (xy 126.190162 108.783972) (xy 126.133554 108.744335) (xy 126.124059 108.738852) (xy 125.922636 108.644928) (xy 125.912344 108.641182) (xy 125.697672 108.583661) (xy 125.686877 108.581758) (xy 125.465475 108.562387) (xy 125.454525 108.562387) (xy 125.233123 108.581758) (xy 125.222328 108.583661) (xy 125.007656 108.641182) (xy 124.997364 108.644928) (xy 124.795941 108.738852) (xy 124.786446 108.744335) (xy 124.729 108.784559) (xy 124.720625 108.795036) (xy 119.770031 108.795036) (xy 119.804168 108.704455) (xy 119.875003 108.405967) (xy 119.907337 108.100897) (xy 119.902934 107.899103) (xy 119.900732 107.798209) (xy 119.900732 107.798204) (xy 119.900644 107.794192) (xy 119.855035 107.490823) (xy 119.771248 107.195709) (xy 119.650641 106.913633) (xy 119.49517 106.649168) (xy 119.307355 106.406602) (xy 119.090241 106.189867) (xy 118.847347 106.002475) (xy 118.843877 106.000443) (xy 118.586076 105.849494) (xy 118.586073 105.849492) (xy 118.582612 105.847466) (xy 118.578927 105.845898) (xy 118.578923 105.845896) (xy 118.30402 105.728924) (xy 118.300326 105.727352) (xy 118.173686 105.691636) (xy 118.008932 105.64517) (xy 118.008923 105.645168) (xy 118.005065 105.64408) (xy 117.774478 105.609824) (xy 117.704917 105.59949) (xy 117.704915 105.59949) (xy 117.701618 105.599) (xy 117.698287 105.59886) (xy 117.698283 105.59886) (xy 117.661452 105.597317) (xy 117.618108 105.5955) (xy 117.422403 105.5955) (xy 117.298102 105.603429) (xy 117.197852 105.609824) (xy 117.197847 105.609825) (xy 117.193844 105.61008) (xy 117.189906 105.610842) (xy 117.189905 105.610842) (xy 116.896588 105.667591) (xy 116.896584 105.667592) (xy 116.892651 105.668353) (xy 116.754137 105.714028) (xy 116.605122 105.763166) (xy 116.605117 105.763168) (xy 116.601305 105.764425) (xy 116.324527 105.896738) (xy 116.066804 106.063147) (xy 115.832316 106.260955) (xy 115.624862 106.486954) (xy 115.447807 106.737482) (xy 115.445927 106.741026) (xy 115.354343 106.913633) (xy 115.304019 107.008477) (xy 115.195832 107.295545) (xy 115.124997 107.594033) (xy 115.092663 107.899103) (xy 93.2545 107.899103) (xy 93.2545 100.155781) (xy 95.042953 100.155781) (xy 95.043166 100.15858) (xy 95.043166 100.158582) (xy 95.065994 100.458682) (xy 95.076426 100.595818) (xy 95.148883 101.031137) (xy 95.149586 101.033845) (xy 95.259044 101.455573) (xy 95.259047 101.455584) (xy 95.25975 101.458291) (xy 95.342751 101.690744) (xy 95.402968 101.859385) (xy 95.40815 101.873899) (xy 95.409321 101.876439) (xy 95.409323 101.876444) (xy 95.471329 102.010944) (xy 95.592908 102.27467) (xy 95.812561 102.65743) (xy 95.81417 102.659733) (xy 95.814175 102.65974) (xy 96.063755 103.01684) (xy 96.065369 103.019149) (xy 96.230153 103.215183) (xy 96.33847 103.344041) (xy 96.349331 103.356962) (xy 96.351315 103.358936) (xy 96.351319 103.35894) (xy 96.374212 103.381713) (xy 96.662198 103.668196) (xy 97.001494 103.950385) (xy 97.364532 104.201296) (xy 97.748437 104.418942) (xy 98.150169 104.601598) (xy 98.152803 104.602523) (xy 98.152813 104.602527) (xy 98.28048 104.64736) (xy 98.566549 104.74782) (xy 98.994278 104.85645) (xy 98.997028 104.856893) (xy 98.997038 104.856895) (xy 99.427199 104.92618) (xy 99.427206 104.926181) (xy 99.42997 104.926626) (xy 99.432771 104.926824) (xy 99.432777 104.926825) (xy 99.557219 104.935636) (xy 99.82364 104.9545) (xy 100.112138 104.9545) (xy 100.113544 104.954437) (xy 100.113561 104.954437) (xy 100.397522 104.941791) (xy 100.440871 104.93986) (xy 100.443644 104.939488) (xy 100.44365 104.939487) (xy 100.587776 104.920128) (xy 100.878251 104.881112) (xy 100.880983 104.880494) (xy 100.880993 104.880492) (xy 101.142411 104.821339) (xy 101.308677 104.783717) (xy 101.31133 104.782863) (xy 101.311336 104.782861) (xy 101.486485 104.726458) (xy 101.728741 104.648444) (xy 101.731293 104.647363) (xy 101.731302 104.64736) (xy 102.132534 104.47746) (xy 102.132538 104.477458) (xy 102.135117 104.476366) (xy 102.524588 104.268845) (xy 102.526937 104.267311) (xy 102.89171 104.029064) (xy 102.891714 104.029061) (xy 102.894069 104.027523) (xy 102.896272 104.025786) (xy 102.896278 104.025782) (xy 103.238443 103.756041) (xy 103.238445 103.756039) (xy 103.240636 103.754312) (xy 103.561543 103.451375) (xy 103.854251 103.121111) (xy 104.116441 102.766134) (xy 104.296961 102.469813) (xy 104.344583 102.391643) (xy 104.344587 102.391636) (xy 104.346038 102.389254) (xy 104.541223 101.993458) (xy 104.700452 101.581877) (xy 104.720825 101.511062) (xy 104.821692 101.160452) (xy 104.821693 101.160446) (xy 104.822463 101.157771) (xy 104.822994 101.155028) (xy 104.905759 100.727245) (xy 104.905761 100.727235) (xy 104.90629 100.724498) (xy 104.911368 100.674933) (xy 115.9455 100.674933) (xy 115.945501 101.725066) (xy 115.960266 101.799301) (xy 116.016516 101.883484) (xy 116.100699 101.939734) (xy 116.174933 101.9545) (xy 116.237768 101.9545) (xy 116.715615 101.954499) (xy 116.783736 101.974501) (xy 116.80471 101.991404) (xy 118.043522 103.230216) (xy 118.058664 103.248964) (xy 118.059779 103.250189) (xy 118.065429 103.25894) (xy 118.073607 103.265387) (xy 118.073609 103.265389) (xy 118.0918 103.279729) (xy 118.096244 103.283678) (xy 118.096306 103.283604) (xy 118.100263 103.286957) (xy 118.103944 103.290638) (xy 118.119654 103.301865) (xy 118.12438 103.305413) (xy 118.164647 103.337156) (xy 118.173284 103.340189) (xy 118.180734 103.345513) (xy 118.19071 103.348497) (xy 118.190711 103.348497) (xy 118.206046 103.353083) (xy 118.229849 103.360202) (xy 118.235486 103.362034) (xy 118.276367 103.37639) (xy 118.283851 103.379018) (xy 118.289416 103.3795) (xy 118.292124 103.3795) (xy 118.294758 103.379614) (xy 118.294856 103.379643) (xy 118.294849 103.379807) (xy 118.295553 103.379851) (xy 118.301778 103.381713) (xy 118.355635 103.379597) (xy 118.360582 103.3795) (xy 121.790616 103.3795) (xy 121.858737 103.399502) (xy 121.879711 103.416405) (xy 127.451022 108.987716) (xy 127.485048 109.050028) (xy 127.479983 109.120843) (xy 127.437436 109.177679) (xy 127.42635 109.185096) (xy 127.390253 109.206571) (xy 127.362767 109.222924) (xy 127.358424 109.226733) (xy 127.217949 109.349927) (xy 127.217946 109.34993) (xy 127.213604 109.353738) (xy 127.090776 109.509543) (xy 127.005209 109.672179) (xy 126.955792 109.723149) (xy 126.88666 109.739312) (xy 126.819764 109.715533) (xy 126.776343 109.659363) (xy 126.771996 109.64612) (xy 126.718818 109.447656) (xy 126.715072 109.437364) (xy 126.621148 109.235941) (xy 126.615665 109.226446) (xy 126.575441 109.169) (xy 126.564964 109.160625) (xy 126.551517 109.167693) (xy 125.832022 109.887188) (xy 125.824408 109.901132) (xy 125.824539 109.902965) (xy 125.82879 109.90958) (xy 126.552238 110.633028) (xy 126.564013 110.639458) (xy 126.576028 110.630162) (xy 126.615665 110.573554) (xy 126.621148 110.564059) (xy 126.715068 110.362645) (xy 126.715258 110.362122) (xy 126.715404 110.361924) (xy 126.717395 110.357654) (xy 126.718253 110.358054) (xy 126.757348 110.304947) (xy 126.823667 110.279604) (xy 126.89316 110.294139) (xy 126.943763 110.343937) (xy 126.955786 110.374191) (xy 126.963451 110.404371) (xy 126.978059 110.461888) (xy 126.980476 110.467131) (xy 127.045472 110.608118) (xy 127.06112 110.642062) (xy 127.064453 110.646778) (xy 127.168115 110.793456) (xy 127.175625 110.804083) (xy 127.317738 110.942523) (xy 127.4827 111.052748) (xy 127.488008 111.055029) (xy 127.488009 111.055029) (xy 127.659684 111.128786) (xy 127.659687 111.128787) (xy 127.664987 111.131064) (xy 127.670616 111.132338) (xy 127.670617 111.132338) (xy 127.852856 111.173575) (xy 127.852862 111.173576) (xy 127.858493 111.17485) (xy 127.864264 111.175077) (xy 127.864266 111.175077) (xy 127.924816 111.177456) (xy 128.056739 111.182639) (xy 128.156231 111.168214) (xy 128.247363 111.155001) (xy 128.247368 111.155) (xy 128.253084 111.154171) (xy 128.258556 111.152313) (xy 128.258558 111.152313) (xy 128.435489 111.092252) (xy 128.435491 111.092251) (xy 128.440953 111.090397) (xy 128.614055 110.993456) (xy 128.766592 110.866592) (xy 128.893456 110.714055) (xy 128.990397 110.540953) (xy 129.015457 110.467131) (xy 129.052313 110.358558) (xy 129.052313 110.358556) (xy 129.054171 110.353084) (xy 129.055 110.347368) (xy 129.055001 110.347363) (xy 129.082106 110.160413) (xy 129.082639 110.156739) (xy 129.084125 110.1) (xy 129.065971 109.902434) (xy 129.064243 109.896305) (xy 129.013687 109.717048) (xy 129.012118 109.711484) (xy 128.924369 109.533546) (xy 128.907895 109.511484) (xy 128.809115 109.379203) (xy 128.805662 109.374579) (xy 128.801426 109.370663) (xy 128.664213 109.243825) (xy 128.66421 109.243823) (xy 128.659973 109.239906) (xy 128.492182 109.134038) (xy 128.462667 109.122262) (xy 128.406807 109.078442) (xy 128.38579 109.01795) (xy 128.38432 109.018124) (xy 128.383529 109.011444) (xy 128.380374 108.984787) (xy 128.380023 108.978846) (xy 128.379928 108.978854) (xy 128.3795 108.973674) (xy 128.3795 108.968476) (xy 128.376329 108.949424) (xy 128.375492 108.943547) (xy 128.370693 108.902997) (xy 128.370692 108.902995) (xy 128.369469 108.892659) (xy 128.365508 108.88441) (xy 128.364004 108.875374) (xy 128.359056 108.866203) (xy 128.339652 108.83024) (xy 128.336957 108.824951) (xy 128.318212 108.785915) (xy 128.31478 108.778768) (xy 128.311186 108.774492) (xy 128.309246 108.772552) (xy 128.307493 108.770641) (xy 128.307444 108.770551) (xy 128.307567 108.770439) (xy 128.307095 108.769904) (xy 128.30401 108.764186) (xy 128.264413 108.727583) (xy 128.260848 108.724154) (xy 122.306478 102.769784) (xy 122.291336 102.751036) (xy 122.290221 102.749811) (xy 122.284571 102.74106) (xy 122.276393 102.734613) (xy 122.276391 102.734611) (xy 122.2582 102.720271) (xy 122.253759 102.716325) (xy 122.253697 102.716398) (xy 122.249733 102.713039) (xy 122.246056 102.709362) (xy 122.230308 102.698108) (xy 122.225638 102.694602) (xy 122.185353 102.662844) (xy 122.176719 102.659812) (xy 122.169266 102.654486) (xy 122.12015 102.639797) (xy 122.114508 102.637964) (xy 122.073633 102.62361) (xy 122.073632 102.62361) (xy 122.066149 102.620982) (xy 122.060584 102.6205) (xy 122.057876 102.6205) (xy 122.055242 102.620386) (xy 122.055144 102.620357) (xy 122.055151 102.620193) (xy 122.054447 102.620149) (xy 122.048222 102.618287) (xy 121.994365 102.620403) (xy 121.989418 102.6205) (xy 118.559384 102.6205) (xy 118.491263 102.600498) (xy 118.470289 102.583595) (xy 118.056289 102.169595) (xy 118.022263 102.107283) (xy 118.027328 102.036468) (xy 118.069875 101.979632) (xy 118.136395 101.954821) (xy 118.145384 101.9545) (xy 118.76449 101.954499) (xy 118.825066 101.954499) (xy 118.860818 101.947388) (xy 118.887126 101.942156) (xy 118.887128 101.942155) (xy 118.899301 101.939734) (xy 118.909621 101.932839) (xy 118.909622 101.932838) (xy 118.973168 101.890377) (xy 118.983484 101.883484) (xy 119.039734 101.799301) (xy 119.0545 101.725067) (xy 119.0545 101.7055) (xy 119.074502 101.637379) (xy 119.128158 101.590886) (xy 119.1805 101.5795) (xy 124.490616 101.5795) (xy 124.558737 101.599502) (xy 124.579711 101.616405) (xy 125.693522 102.730216) (xy 125.708664 102.748964) (xy 125.709779 102.750189) (xy 125.715429 102.75894) (xy 125.723607 102.765387) (xy 125.723609 102.765389) (xy 125.7418 102.779729) (xy 125.746241 102.783675) (xy 125.746303 102.783602) (xy 125.750267 102.786961) (xy 125.753944 102.790638) (xy 125.769692 102.801892) (xy 125.774362 102.805398) (xy 125.814647 102.837156) (xy 125.823281 102.840188) (xy 125.830734 102.845514) (xy 125.87985 102.860203) (xy 125.885492 102.862036) (xy 125.926367 102.87639) (xy 125.933851 102.879018) (xy 125.939416 102.8795) (xy 125.942124 102.8795) (xy 125.944758 102.879614) (xy 125.944856 102.879643) (xy 125.944849 102.879807) (xy 125.945553 102.879851) (xy 125.951778 102.881713) (xy 126.005635 102.879597) (xy 126.010582 102.8795) (xy 130.0345 102.8795) (xy 130.102621 102.899502) (xy 130.149114 102.953158) (xy 130.1605 103.0055) (xy 130.1605 108.801488) (xy 130.140498 108.869609) (xy 130.086842 108.916102) (xy 130.079069 108.919305) (xy 130.078686 108.919488) (xy 130.073272 108.921485) (xy 130.06831 108.924437) (xy 129.90773 109.019971) (xy 129.907727 109.019973) (xy 129.902767 109.022924) (xy 129.898424 109.026733) (xy 129.757949 109.149927) (xy 129.757946 109.14993) (xy 129.753604 109.153738) (xy 129.750029 109.158273) (xy 129.750027 109.158275) (xy 129.740261 109.170663) (xy 129.630776 109.309543) (xy 129.628085 109.314659) (xy 129.628083 109.314661) (xy 129.609529 109.349927) (xy 129.538399 109.485123) (xy 129.530747 109.509768) (xy 129.484297 109.659363) (xy 129.479566 109.674598) (xy 129.456247 109.871621) (xy 129.469222 110.069595) (xy 129.518059 110.261888) (xy 129.60112 110.442062) (xy 129.615132 110.461888) (xy 129.667148 110.535489) (xy 129.715625 110.604083) (xy 129.857738 110.742523) (xy 130.0227 110.852748) (xy 130.028008 110.855029) (xy 130.028009 110.855029) (xy 130.199684 110.928786) (xy 130.199687 110.928787) (xy 130.204987 110.931064) (xy 130.210616 110.932338) (xy 130.210617 110.932338) (xy 130.392856 110.973575) (xy 130.392862 110.973576) (xy 130.398493 110.97485) (xy 130.404264 110.975077) (xy 130.404266 110.975077) (xy 130.464816 110.977456) (xy 130.596739 110.982639) (xy 130.696231 110.968214) (xy 130.787363 110.955001) (xy 130.787368 110.955) (xy 130.793084 110.954171) (xy 130.798556 110.952313) (xy 130.798558 110.952313) (xy 130.975489 110.892252) (xy 130.975491 110.892251) (xy 130.980953 110.890397) (xy 131.154055 110.793456) (xy 131.306592 110.666592) (xy 131.411085 110.540953) (xy 131.429765 110.518493) (xy 131.433456 110.514055) (xy 131.530397 110.340953) (xy 131.532252 110.335489) (xy 131.592313 110.158558) (xy 131.592313 110.158556) (xy 131.594171 110.153084) (xy 131.595 110.147368) (xy 131.595001 110.147363) (xy 131.622106 109.960413) (xy 131.622639 109.956739) (xy 131.624125 109.9) (xy 131.605971 109.702434) (xy 131.599739 109.680335) (xy 131.553687 109.517048) (xy 131.552118 109.511484) (xy 131.464369 109.333546) (xy 131.391484 109.235941) (xy 131.349115 109.179203) (xy 131.345662 109.174579) (xy 131.341426 109.170663) (xy 131.204213 109.043825) (xy 131.20421 109.043823) (xy 131.199973 109.039906) (xy 131.032182 108.934038) (xy 131.026822 108.9319) (xy 131.026815 108.931896) (xy 130.998808 108.920722) (xy 130.942949 108.876901) (xy 130.9195 108.803693) (xy 130.9195 102.522146) (xy 130.91997 102.511274) (xy 130.922662 102.480191) (xy 130.923561 102.469813) (xy 130.92105 102.459705) (xy 130.920233 102.449322) (xy 130.920873 102.449272) (xy 130.9195 102.438048) (xy 130.9195 102.063134) (xy 130.939502 101.995013) (xy 130.956405 101.974039) (xy 131.230216 101.700228) (xy 131.248964 101.685086) (xy 131.250189 101.683971) (xy 131.25894 101.678321) (xy 131.265387 101.670143) (xy 131.265389 101.670141) (xy 131.279729 101.65195) (xy 131.283678 101.647506) (xy 131.283604 101.647444) (xy 131.286957 101.643487) (xy 131.290638 101.639806) (xy 131.301865 101.624096) (xy 131.305421 101.619359) (xy 131.320641 101.600053) (xy 131.337156 101.579103) (xy 131.340189 101.570466) (xy 131.345513 101.563016) (xy 131.356148 101.527456) (xy 131.394831 101.467923) (xy 131.432636 101.445578) (xy 131.46264 101.43433) (xy 131.485853 101.425628) (xy 131.59433 101.34433) (xy 131.675628 101.235853) (xy 131.685347 101.20993) (xy 131.72044 101.116318) (xy 131.720441 101.116315) (xy 131.723214 101.108919) (xy 131.724067 101.101066) (xy 131.724068 101.101062) (xy 131.729131 101.054452) (xy 131.729131 101.054448) (xy 131.7295 101.051053) (xy 131.729499 100.523948) (xy 131.723214 100.466081) (xy 131.692104 100.383096) (xy 131.678779 100.347551) (xy 131.678778 100.347548) (xy 131.675628 100.339147) (xy 131.59433 100.23067) (xy 131.485853 100.149372) (xy 131.477452 100.146222) (xy 131.477449 100.146221) (xy 131.402121 100.117982) (xy 131.345357 100.07534) (xy 131.320657 100.008779) (xy 131.335865 99.93943) (xy 131.386151 99.889312) (xy 131.402121 99.882018) (xy 131.477449 99.853779) (xy 131.477452 99.853778) (xy 131.485853 99.850628) (xy 131.59433 99.76933) (xy 131.675628 99.660853) (xy 131.685511 99.634492) (xy 131.715817 99.553649) (xy 131.723214 99.533919) (xy 131.725306 99.514666) (xy 131.729131 99.479452) (xy 131.729131 99.479448) (xy 131.7295 99.476053) (xy 131.729499 98.948948) (xy 131.723214 98.891081) (xy 131.675628 98.764147) (xy 131.59433 98.65567) (xy 131.485853 98.574372) (xy 131.477452 98.571222) (xy 131.477449 98.571221) (xy 131.391662 98.539061) (xy 131.358919 98.526786) (xy 131.351066 98.525933) (xy 131.351062 98.525932) (xy 131.304452 98.520869) (xy 131.304448 98.520869) (xy 131.301053 98.5205) (xy 131.000045 98.5205) (xy 130.698948 98.520501) (xy 130.641081 98.526786) (xy 130.5975 98.543124) (xy 130.522551 98.571221) (xy 130.522548 98.571222) (xy 130.514147 98.574372) (xy 130.40567 98.65567) (xy 130.324372 98.764147) (xy 130.321222 98.772549) (xy 130.321219 98.772555) (xy 130.315321 98.788288) (xy 130.272679 98.845052) (xy 130.257176 98.854943) (xy 130.22399 98.872849) (xy 130.218701 98.875543) (xy 130.179665 98.894288) (xy 130.172518 98.89772) (xy 130.168242 98.901314) (xy 130.166302 98.903254) (xy 130.164391 98.905007) (xy 130.164301 98.905056) (xy 130.164189 98.904933) (xy 130.163654 98.905405) (xy 130.157936 98.90849) (xy 130.150869 98.916135) (xy 130.121334 98.948086) (xy 130.117904 98.951652) (xy 128.772892 100.296664) (xy 128.710582 100.330688) (xy 128.639767 100.325624) (xy 128.600127 100.300148) (xy 128.60001 100.29999) (xy 128.490076 100.218791) (xy 128.361127 100.173507) (xy 128.353485 100.172785) (xy 128.353482 100.172784) (xy 128.338579 100.171376) (xy 128.329315 100.1705) (xy 128.000223 100.1705) (xy 127.670686 100.170501) (xy 127.667738 100.17078) (xy 127.667729 100.17078) (xy 127.646522 100.172784) (xy 127.64652 100.172784) (xy 127.638873 100.173507) (xy 127.509924 100.218791) (xy 127.39999 100.29999) (xy 127.318791 100.409924) (xy 127.273507 100.538873) (xy 127.2705 100.570685) (xy 127.270501 101.079314) (xy 127.27078 101.082262) (xy 127.27078 101.082271) (xy 127.272556 101.101062) (xy 127.273507 101.111127) (xy 127.318791 101.240076) (xy 127.39999 101.35001) (xy 127.509924 101.431209) (xy 127.638873 101.476493) (xy 127.646515 101.477215) (xy 127.646518 101.477216) (xy 127.661421 101.478624) (xy 127.670685 101.4795) (xy 127.999777 101.4795) (xy 128.329314 101.479499) (xy 128.332262 101.47922) (xy 128.332271 101.47922) (xy 128.353478 101.477216) (xy 128.35348 101.477216) (xy 128.361127 101.476493) (xy 128.490076 101.431209) (xy 128.60001 101.35001) (xy 128.605602 101.342439) (xy 128.605605 101.342436) (xy 128.667127 101.259142) (xy 128.723688 101.216231) (xy 128.763198 101.20993) (xy 128.763126 101.20932) (xy 128.796473 101.205373) (xy 128.802404 101.205023) (xy 128.802396 101.204928) (xy 128.807574 101.2045) (xy 128.812774 101.2045) (xy 128.817903 101.203646) (xy 128.817906 101.203646) (xy 128.831815 101.201331) (xy 128.837693 101.200494) (xy 128.878251 101.195694) (xy 128.878252 101.195694) (xy 128.888591 101.19447) (xy 128.896843 101.190507) (xy 128.905876 101.189004) (xy 128.915045 101.184057) (xy 128.915047 101.184056) (xy 128.950982 101.164666) (xy 128.956275 101.161969) (xy 128.995332 101.143215) (xy 128.995336 101.143212) (xy 129.002482 101.139781) (xy 129.006758 101.136186) (xy 129.008681 101.134263) (xy 129.010613 101.132491) (xy 129.010692 101.132448) (xy 129.010805 101.132572) (xy 129.011345 101.132096) (xy 129.017064 101.12901) (xy 129.053667 101.089413) (xy 129.057096 101.085848) (xy 130.310102 99.832842) (xy 130.372414 99.798816) (xy 130.443229 99.803881) (xy 130.474762 99.821111) (xy 130.485956 99.8295) (xy 130.514147 99.850628) (xy 130.522548 99.853778) (xy 130.522551 99.853779) (xy 130.597879 99.882018) (xy 130.654643 99.92466) (xy 130.679343 99.991221) (xy 130.664135 100.06057) (xy 130.613849 100.110688) (xy 130.597879 100.117982) (xy 130.522551 100.146221) (xy 130.522548 100.146222) (xy 130.514147 100.149372) (xy 130.40567 100.23067) (xy 130.324372 100.339147) (xy 130.321222 100.347548) (xy 130.321221 100.347551) (xy 130.294507 100.418812) (xy 130.276786 100.466081) (xy 130.275933 100.473934) (xy 130.275932 100.473938) (xy 130.272056 100.509623) (xy 130.2705 100.523947) (xy 130.270501 101.051052) (xy 130.276786 101.108919) (xy 130.279559 101.116315) (xy 130.314654 101.20993) (xy 130.324372 101.235853) (xy 130.329754 101.243035) (xy 130.329755 101.243036) (xy 130.386019 101.31811) (xy 130.410866 101.384617) (xy 130.395813 101.453999) (xy 130.374287 101.482769) (xy 130.309784 101.547272) (xy 130.291036 101.562414) (xy 130.289811 101.563529) (xy 130.28106 101.569179) (xy 130.274613 101.577357) (xy 130.274611 101.577359) (xy 130.260271 101.59555) (xy 130.256325 101.599991) (xy 130.256398 101.600053) (xy 130.253039 101.604017) (xy 130.249362 101.607694) (xy 130.238108 101.623442) (xy 130.234602 101.628112) (xy 130.202844 101.668397) (xy 130.199812 101.677031) (xy 130.194486 101.684484) (xy 130.189778 101.700228) (xy 130.179799 101.733594) (xy 130.177964 101.739242) (xy 130.160982 101.787601) (xy 130.1605 101.793166) (xy 130.1605 101.795874) (xy 130.160386 101.798508) (xy 130.160357 101.798606) (xy 130.160193 101.798599) (xy 130.160149 101.799301) (xy 130.158287 101.805528) (xy 130.158696 101.815933) (xy 130.160403 101.859385) (xy 130.1605 101.864332) (xy 130.1605 101.9945) (xy 130.140498 102.062621) (xy 130.086842 102.109114) (xy 130.0345 102.1205) (xy 126.209384 102.1205) (xy 126.141263 102.100498) (xy 126.120289 102.083595) (xy 125.006478 100.969784) (xy 124.991336 100.951036) (xy 124.990221 100.949811) (xy 124.984571 100.94106) (xy 124.976393 100.934613) (xy 124.976391 100.934611) (xy 124.9582 100.920271) (xy 124.953759 100.916325) (xy 124.953697 100.916398) (xy 124.949733 100.913039) (xy 124.946056 100.909362) (xy 124.930308 100.898108) (xy 124.925638 100.894602) (xy 124.885353 100.862844) (xy 124.876719 100.859812) (xy 124.869266 100.854486) (xy 124.82015 100.839797) (xy 124.814508 100.837964) (xy 124.773633 100.82361) (xy 124.773632 100.82361) (xy 124.766149 100.820982) (xy 124.760584 100.8205) (xy 124.757876 100.8205) (xy 124.755242 100.820386) (xy 124.755144 100.820357) (xy 124.755151 100.820193) (xy 124.754447 100.820149) (xy 124.748222 100.818287) (xy 124.694365 100.820403) (xy 124.689418 100.8205) (xy 119.180499 100.8205) (xy 119.112378 100.800498) (xy 119.065885 100.746842) (xy 119.054499 100.6945) (xy 119.054499 100.674934) (xy 119.047388 100.639182) (xy 119.042156 100.612874) (xy 119.042155 100.612872) (xy 119.039734 100.600699) (xy 119.022898 100.575502) (xy 119.001683 100.507749) (xy 119.020466 100.439282) (xy 119.073284 100.391839) (xy 119.127663 100.3795) (xy 124.44608 100.3795) (xy 124.470028 100.382049) (xy 124.471693 100.382128) (xy 124.481876 100.38432) (xy 124.492217 100.383096) (xy 124.515223 100.380373) (xy 124.521154 100.380023) (xy 124.521146 100.379928) (xy 124.526324 100.3795) (xy 124.531524 100.3795) (xy 124.536653 100.378646) (xy 124.536656 100.378646) (xy 124.550565 100.376331) (xy 124.556443 100.375494) (xy 124.597001 100.370694) (xy 124.597002 100.370694) (xy 124.607341 100.36947) (xy 124.615593 100.365507) (xy 124.624626 100.364004) (xy 124.633795 100.359057) (xy 124.633797 100.359056) (xy 124.669732 100.339666) (xy 124.675025 100.336969) (xy 124.714082 100.318215) (xy 124.714086 100.318212) (xy 124.721232 100.314781) (xy 124.725508 100.311186) (xy 124.727431 100.309263) (xy 124.729363 100.307491) (xy 124.729442 100.307448) (xy 124.729555 100.307572) (xy 124.730095 100.307096) (xy 124.735814 100.30401) (xy 124.752936 100.285488) (xy 124.772416 100.264414) (xy 124.775846 100.260848) (xy 126.116009 98.920685) (xy 127.2705 98.920685) (xy 127.270501 99.429314) (xy 127.273507 99.461127) (xy 127.318791 99.590076) (xy 127.39999 99.70001) (xy 127.509924 99.781209) (xy 127.638873 99.826493) (xy 127.646515 99.827215) (xy 127.646518 99.827216) (xy 127.661421 99.828624) (xy 127.670685 99.8295) (xy 127.999777 99.8295) (xy 128.329314 99.829499) (xy 128.332262 99.82922) (xy 128.332271 99.82922) (xy 128.353478 99.827216) (xy 128.35348 99.827216) (xy 128.361127 99.826493) (xy 128.490076 99.781209) (xy 128.60001 99.70001) (xy 128.605602 99.692439) (xy 128.605605 99.692436) (xy 128.669713 99.605641) (xy 128.726274 99.56273) (xy 128.771064 99.5545) (xy 128.77108 99.5545) (xy 128.795028 99.557049) (xy 128.796693 99.557128) (xy 128.806876 99.55932) (xy 128.817217 99.558096) (xy 128.840223 99.555373) (xy 128.846154 99.555023) (xy 128.846146 99.554928) (xy 128.851324 99.5545) (xy 128.856524 99.5545) (xy 128.861653 99.553646) (xy 128.861656 99.553646) (xy 128.875565 99.551331) (xy 128.881443 99.550494) (xy 128.922001 99.545694) (xy 128.922002 99.545694) (xy 128.932341 99.54447) (xy 128.940593 99.540507) (xy 128.949626 99.539004) (xy 128.958795 99.534057) (xy 128.958797 99.534056) (xy 128.994732 99.514666) (xy 129.000025 99.511969) (xy 129.039082 99.493215) (xy 129.039086 99.493212) (xy 129.046232 99.489781) (xy 129.050508 99.486186) (xy 129.052431 99.484263) (xy 129.054363 99.482491) (xy 129.054442 99.482448) (xy 129.054555 99.482572) (xy 129.055095 99.482096) (xy 129.060814 99.47901) (xy 129.097417 99.439413) (xy 129.100846 99.435848) (xy 131.230219 97.306476) (xy 131.248961 97.291339) (xy 131.25019 97.290221) (xy 131.25894 97.284571) (xy 131.279729 97.2582) (xy 131.283676 97.253759) (xy 131.283603 97.253697) (xy 131.286963 97.249732) (xy 131.290638 97.246057) (xy 131.293655 97.241835) (xy 131.29366 97.241829) (xy 131.301862 97.23035) (xy 131.305428 97.2256) (xy 131.330711 97.193528) (xy 131.337156 97.185353) (xy 131.340189 97.176716) (xy 131.345513 97.169266) (xy 131.360202 97.120151) (xy 131.362034 97.114514) (xy 131.376389 97.073636) (xy 131.376389 97.073634) (xy 131.37665 97.072893) (xy 131.379019 97.066148) (xy 131.380107 97.06653) (xy 131.410373 97.010815) (xy 131.417831 97.003905) (xy 131.479536 96.951204) (xy 131.479536 96.951203) (xy 131.485314 96.946269) (xy 131.577755 96.817624) (xy 131.636842 96.670641) (xy 131.659162 96.513807) (xy 131.659307 96.5) (xy 131.640276 96.342733) (xy 131.58428 96.194546) (xy 131.562629 96.163043) (xy 131.498855 96.070251) (xy 131.498854 96.070249) (xy 131.494553 96.063992) (xy 131.478417 96.049615) (xy 131.381946 95.963664) (xy 131.376275 95.958611) (xy 131.368889 95.9547) (xy 131.242988 95.888039) (xy 131.242989 95.888039) (xy 131.236274 95.884484) (xy 131.082633 95.845892) (xy 131.075034 95.845852) (xy 131.075033 95.845852) (xy 131.009181 95.845507) (xy 130.924221 95.845062) (xy 130.916841 95.846834) (xy 130.916839 95.846834) (xy 130.777563 95.880271) (xy 130.77756 95.880272) (xy 130.770184 95.882043) (xy 130.629414 95.9547) (xy 130.510039 96.058838) (xy 130.41895 96.188444) (xy 130.361406 96.336037) (xy 130.340729 96.493096) (xy 130.346647 96.546699) (xy 130.357065 96.64106) (xy 130.358113 96.650553) (xy 130.412553 96.799319) (xy 130.416788 96.805622) (xy 130.416792 96.805629) (xy 130.455777 96.863644) (xy 130.47717 96.931341) (xy 130.458566 96.999857) (xy 130.440291 97.023015) (xy 128.79412 98.669186) (xy 128.731808 98.703212) (xy 128.660993 98.698147) (xy 128.613863 98.662628) (xy 128.612266 98.664225) (xy 128.605602 98.657561) (xy 128.60001 98.64999) (xy 128.490076 98.568791) (xy 128.361127 98.523507) (xy 128.353485 98.522785) (xy 128.353482 98.522784) (xy 128.338579 98.521376) (xy 128.329315 98.5205) (xy 128.000223 98.5205) (xy 127.670686 98.520501) (xy 127.667738 98.52078) (xy 127.667729 98.52078) (xy 127.646522 98.522784) (xy 127.64652 98.522784) (xy 127.638873 98.523507) (xy 127.509924 98.568791) (xy 127.39999 98.64999) (xy 127.318791 98.759924) (xy 127.273507 98.888873) (xy 127.272785 98.896515) (xy 127.272784 98.896518) (xy 127.271653 98.90849) (xy 127.2705 98.920685) (xy 126.116009 98.920685) (xy 128.12029 96.916405) (xy 128.182602 96.882379) (xy 128.209385 96.8795) (xy 128.400141 96.8795) (xy 128.468262 96.899502) (xy 128.495522 96.923169) (xy 128.496672 96.924501) (xy 128.500908 96.930805) (xy 128.618076 97.037419) (xy 128.757293 97.113008) (xy 128.910522 97.153207) (xy 128.994477 97.154526) (xy 129.061319 97.155576) (xy 129.061322 97.155576) (xy 129.068916 97.155695) (xy 129.223332 97.120329) (xy 129.316172 97.073636) (xy 129.358072 97.052563) (xy 129.358075 97.052561) (xy 129.364855 97.049151) (xy 129.370626 97.044222) (xy 129.370629 97.04422) (xy 129.479536 96.951204) (xy 129.479536 96.951203) (xy 129.485314 96.946269) (xy 129.577755 96.817624) (xy 129.636842 96.670641) (xy 129.659162 96.513807) (xy 129.659307 96.5) (xy 129.640276 96.342733) (xy 129.58428 96.194546) (xy 129.562629 96.163043) (xy 129.498855 96.070251) (xy 129.498854 96.070249) (xy 129.494553 96.063992) (xy 129.478417 96.049615) (xy 129.381946 95.963664) (xy 129.376275 95.958611) (xy 129.368889 95.9547) (xy 129.242988 95.888039) (xy 129.242989 95.888039) (xy 129.236274 95.884484) (xy 129.082633 95.845892) (xy 129.075034 95.845852) (xy 129.075033 95.845852) (xy 129.009181 95.845507) (xy 128.924221 95.845062) (xy 128.916841 95.846834) (xy 128.916839 95.846834) (xy 128.777563 95.880271) (xy 128.77756 95.880272) (xy 128.770184 95.882043) (xy 128.629414 95.9547) (xy 128.510039 96.058838) (xy 128.505672 96.065051) (xy 128.505667 96.065057) (xy 128.504336 96.066951) (xy 128.503013 96.068005) (xy 128.500589 96.070697) (xy 128.50014 96.070293) (xy 128.448802 96.111183) (xy 128.40125 96.1205) (xy 128.05392 96.1205) (xy 128.029973 96.117951) (xy 128.028307 96.117872) (xy 128.018124 96.11568) (xy 128.007782 96.116904) (xy 128.007779 96.116904) (xy 127.984787 96.119626) (xy 127.978846 96.119977) (xy 127.978854 96.120072) (xy 127.973674 96.1205) (xy 127.968476 96.1205) (xy 127.963354 96.121353) (xy 127.963349 96.121353) (xy 127.949427 96.123671) (xy 127.94355 96.124508) (xy 127.937049 96.125277) (xy 127.902997 96.129307) (xy 127.902995 96.129308) (xy 127.892659 96.130531) (xy 127.88441 96.134492) (xy 127.875374 96.135996) (xy 127.866205 96.140943) (xy 127.866203 96.140944) (xy 127.83024 96.160348) (xy 127.824951 96.163043) (xy 127.785915 96.181788) (xy 127.778768 96.18522) (xy 127.774492 96.188814) (xy 127.772552 96.190754) (xy 127.770641 96.192507) (xy 127.770551 96.192556) (xy 127.770439 96.192433) (xy 127.769904 96.192905) (xy 127.764186 96.19599) (xy 127.757119 96.203635) (xy 127.727584 96.235586) (xy 127.724154 96.239152) (xy 124.379711 99.583595) (xy 124.317399 99.617621) (xy 124.290616 99.6205) (xy 118.454215 99.6205) (xy 118.386094 99.600498) (xy 118.339601 99.546842) (xy 118.329497 99.476568) (xy 118.336233 99.45027) (xy 118.348478 99.417606) (xy 118.352105 99.402351) (xy 118.357631 99.351486) (xy 118.358 99.344672) (xy 118.358 99.072115) (xy 118.353525 99.056876) (xy 118.352135 99.055671) (xy 118.344452 99.054) (xy 116.660116 99.054) (xy 116.644877 99.058475) (xy 116.643672 99.059865) (xy 116.642001 99.067548) (xy 116.642001 99.344669) (xy 116.642371 99.35149) (xy 116.647895 99.402352) (xy 116.651521 99.417604) (xy 116.696676 99.538054) (xy 116.705214 99.553649) (xy 116.781715 99.655724) (xy 116.794276 99.668285) (xy 116.896351 99.744786) (xy 116.911946 99.753324) (xy 117.032394 99.798478) (xy 117.047649 99.802105) (xy 117.098515 99.807631) (xy 117.107969 99.808143) (xy 117.174909 99.831799) (xy 117.218433 99.88789) (xy 117.224723 99.958608) (xy 117.190252 100.023054) (xy 116.804711 100.408595) (xy 116.742399 100.442621) (xy 116.715616 100.4455) (xy 116.237787 100.445501) (xy 116.174934 100.445501) (xy 116.139182 100.452612) (xy 116.112874 100.457844) (xy 116.112872 100.457845) (xy 116.100699 100.460266) (xy 116.090379 100.467161) (xy 116.090378 100.467162) (xy 116.029985 100.507516) (xy 116.016516 100.516516) (xy 115.960266 100.600699) (xy 115.9455 100.674933) (xy 104.911368 100.674933) (xy 104.934876 100.4455) (xy 104.950985 100.28827) (xy 104.950985 100.288269) (xy 104.95127 100.285488) (xy 104.95157 100.262615) (xy 104.955549 99.958608) (xy 104.957047 99.844219) (xy 104.953844 99.802105) (xy 104.923786 99.406969) (xy 104.923574 99.404182) (xy 104.851117 98.968863) (xy 104.804249 98.788288) (xy 104.740956 98.544427) (xy 104.740953 98.544416) (xy 104.74025 98.541709) (xy 104.735314 98.527885) (xy 116.642 98.527885) (xy 116.646475 98.543124) (xy 116.647865 98.544329) (xy 116.655548 98.546) (xy 117.227885 98.546) (xy 117.243124 98.541525) (xy 117.244329 98.540135) (xy 117.246 98.532452) (xy 117.246 98.527885) (xy 117.754 98.527885) (xy 117.758475 98.543124) (xy 117.759865 98.544329) (xy 117.767548 98.546) (xy 118.339884 98.546) (xy 118.355123 98.541525) (xy 118.356328 98.540135) (xy 118.357999 98.532452) (xy 118.357999 98.255331) (xy 118.357629 98.24851) (xy 118.352105 98.197648) (xy 118.348479 98.182396) (xy 118.303324 98.061946) (xy 118.294786 98.046351) (xy 118.218285 97.944276) (xy 118.205724 97.931715) (xy 118.103649 97.855214) (xy 118.088054 97.846676) (xy 117.967606 97.801522) (xy 117.952351 97.797895) (xy 117.901486 97.792369) (xy 117.894672 97.792) (xy 117.772115 97.792) (xy 117.756876 97.796475) (xy 117.755671 97.797865) (xy 117.754 97.805548) (xy 117.754 98.527885) (xy 117.246 98.527885) (xy 117.246 97.810116) (xy 117.241525 97.794877) (xy 117.240135 97.793672) (xy 117.232452 97.792001) (xy 117.105331 97.792001) (xy 117.09851 97.792371) (xy 117.047648 97.797895) (xy 117.032396 97.801521) (xy 116.911946 97.846676) (xy 116.896351 97.855214) (xy 116.794276 97.931715) (xy 116.781715 97.944276) (xy 116.705214 98.046351) (xy 116.696676 98.061946) (xy 116.651522 98.182394) (xy 116.647895 98.197649) (xy 116.642369 98.248514) (xy 116.642 98.255328) (xy 116.642 98.527885) (xy 104.735314 98.527885) (xy 104.635558 98.24851) (xy 104.592794 98.128744) (xy 104.592792 98.128739) (xy 104.59185 98.126101) (xy 104.535575 98.00403) (xy 104.511313 97.951403) (xy 104.407092 97.72533) (xy 104.187439 97.34257) (xy 104.155585 97.296992) (xy 103.936245 96.98316) (xy 103.936242 96.983157) (xy 103.934631 96.980851) (xy 103.769847 96.784817) (xy 103.652469 96.645179) (xy 103.652466 96.645175) (xy 103.650669 96.643038) (xy 103.337802 96.331804) (xy 102.998506 96.049615) (xy 102.861689 95.955055) (xy 102.637776 95.800299) (xy 102.637774 95.800297) (xy 102.635468 95.798704) (xy 102.251563 95.581058) (xy 101.849831 95.398402) (xy 101.847197 95.397477) (xy 101.847187 95.397473) (xy 101.641641 95.325291) (xy 101.433451 95.25218) (xy 101.005722 95.14355) (xy 101.002972 95.143107) (xy 101.002962 95.143105) (xy 100.572801 95.07382) (xy 100.572794 95.073819) (xy 100.57003 95.073374) (xy 100.567229 95.073176) (xy 100.567223 95.073175) (xy 100.442781 95.064364) (xy 100.17636 95.0455) (xy 99.887862 95.0455) (xy 99.886456 95.045563) (xy 99.886439 95.045563) (xy 99.602478 95.058209) (xy 99.559129 95.06014) (xy 99.556356 95.060512) (xy 99.55635 95.060513) (xy 99.457281 95.07382) (xy 99.121749 95.118888) (xy 99.119017 95.119506) (xy 99.119007 95.119508) (xy 98.857589 95.178661) (xy 98.691323 95.216283) (xy 98.68867 95.217137) (xy 98.688664 95.217139) (xy 98.579852 95.25218) (xy 98.271259 95.351556) (xy 98.268707 95.352637) (xy 98.268698 95.35264) (xy 97.867466 95.52254) (xy 97.867462 95.522542) (xy 97.864883 95.523634) (xy 97.475412 95.731155) (xy 97.473067 95.732687) (xy 97.473063 95.732689) (xy 97.127161 95.958611) (xy 97.105931 95.972477) (xy 97.103728 95.974214) (xy 97.103722 95.974218) (xy 96.817739 96.199669) (xy 96.759364 96.245688) (xy 96.438457 96.548625) (xy 96.145749 96.878889) (xy 95.883559 97.233866) (xy 95.653962 97.610746) (xy 95.458777 98.006542) (xy 95.299548 98.418123) (xy 95.298771 98.420825) (xy 95.29877 98.420827) (xy 95.197582 98.772555) (xy 95.177537 98.842229) (xy 95.177008 98.844966) (xy 95.177006 98.844972) (xy 95.133944 99.067548) (xy 95.09371 99.275502) (xy 95.093425 99.278284) (xy 95.057335 99.630531) (xy 95.04873 99.714512) (xy 95.048693 99.717304) (xy 95.048693 99.717312) (xy 95.046325 99.898214) (xy 95.042953 100.155781) (xy 93.2545 100.155781) (xy 93.2545 95.037476) (xy 93.256921 95.012894) (xy 93.257065 95.01217) (xy 93.259486 95) (xy 93.257065 94.987828) (xy 93.257065 94.975421) (xy 93.257705 94.975421) (xy 93.257029 94.964639) (xy 93.271624 94.76058) (xy 93.274182 94.742786) (xy 93.32329 94.51704) (xy 93.328355 94.499791) (xy 93.348923 94.444644) (xy 93.40909 94.28333) (xy 93.416556 94.266983) (xy 93.527275 94.064218) (xy 93.536994 94.049095) (xy 93.675441 93.864152) (xy 93.687214 93.850566) (xy 93.850566 93.687214) (xy 93.864152 93.675441) (xy 94.049095 93.536994) (xy 94.064218 93.527275) (xy 94.266983 93.416556) (xy 94.28333 93.40909) (xy 94.444644 93.348923) (xy 94.499791 93.328355) (xy 94.51704 93.32329) (xy 94.742786 93.274182) (xy 94.76058 93.271624) (xy 94.780752 93.270181) (xy 94.964642 93.257029) (xy 94.975421 93.257705) (xy 94.975421 93.257065) (xy 94.987828 93.257065) (xy 95 93.259486) (xy 95.012897 93.256921) (xy 95.037476 93.2545) (xy 130.962524 93.2545) ) ) ) ) ================================================ FILE: electronics/sensor_smd/sensor_smd.kicad_prl ================================================ { "board": { "active_layer": 37, "active_layer_preset": "All Layers", "auto_track_width": true, "hidden_nets": [], "high_contrast_mode": 0, "net_color_mode": 1, "opacity": { "pads": 1.0, "tracks": 1.0, "vias": 1.0, "zones": 0.6 }, "ratsnest_display_mode": 0, "selection_filter": { "dimensions": true, "footprints": true, "graphics": true, "keepouts": true, "lockedItems": true, "otherItems": true, "pads": true, "text": true, "tracks": true, "vias": true, "zones": true }, "visible_items": [ 0, 1, 2, 3, 4, 5, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 32, 33, 34, 35, 36 ], "visible_layers": "fffffff_ffffffff", "zone_display_mode": 0 }, "meta": { "filename": "sensor_smd.kicad_prl", "version": 3 }, "project": { "files": [] } } ================================================ FILE: electronics/sensor_smd/sensor_smd.kicad_pro ================================================ { "board": { "design_settings": { "defaults": { "board_outline_line_width": 0.09999999999999999, "copper_line_width": 0.19999999999999998, "copper_text_italic": false, "copper_text_size_h": 1.5, "copper_text_size_v": 1.5, "copper_text_thickness": 0.3, "copper_text_upright": false, "courtyard_line_width": 0.049999999999999996, "dimension_precision": 4, "dimension_units": 3, "dimensions": { "arrow_length": 1270000, "extension_offset": 500000, "keep_text_aligned": true, "suppress_zeroes": false, "text_position": 0, "units_format": 1 }, "fab_line_width": 0.09999999999999999, "fab_text_italic": false, "fab_text_size_h": 1.0, "fab_text_size_v": 1.0, "fab_text_thickness": 0.15, "fab_text_upright": false, "other_line_width": 0.15, "other_text_italic": false, "other_text_size_h": 1.0, "other_text_size_v": 1.0, "other_text_thickness": 0.15, "other_text_upright": false, "pads": { "drill": 0.94, "height": 1.5, "width": 1.5 }, "silk_line_width": 0.15, "silk_text_italic": false, "silk_text_size_h": 1.0, "silk_text_size_v": 1.0, "silk_text_thickness": 0.15, "silk_text_upright": false, "zones": { "45_degree_only": false, "min_clearance": 0.508 } }, "diff_pair_dimensions": [ { "gap": 0.0, "via_gap": 0.0, "width": 0.0 } ], "drc_exclusions": [], "meta": { "version": 2 }, "rule_severities": { "annular_width": "error", "clearance": "error", "copper_edge_clearance": "error", "courtyards_overlap": "error", "diff_pair_gap_out_of_range": "error", "diff_pair_uncoupled_length_too_long": "error", "drill_out_of_range": "error", "duplicate_footprints": "warning", "extra_footprint": "warning", "footprint_type_mismatch": "error", "hole_clearance": "error", "hole_near_hole": "error", "invalid_outline": "error", "item_on_disabled_layer": "error", "items_not_allowed": "error", "length_out_of_range": "error", "malformed_courtyard": "error", "microvia_drill_out_of_range": "error", "missing_courtyard": "ignore", "missing_footprint": "warning", "net_conflict": "warning", "npth_inside_courtyard": "ignore", "padstack": "error", "pth_inside_courtyard": "ignore", "shorting_items": "error", "silk_over_copper": "warning", "silk_overlap": "warning", "skew_out_of_range": "error", "through_hole_pad_without_hole": "error", "too_many_vias": "error", "track_dangling": "warning", "track_width": "error", "tracks_crossing": "error", "unconnected_items": "error", "unresolved_variable": "error", "via_dangling": "warning", "zone_has_empty_net": "error", "zones_intersect": "error" }, "rules": { "allow_blind_buried_vias": false, "allow_microvias": false, "max_error": 0.005, "min_clearance": 0.0, "min_copper_edge_clearance": 0.0, "min_hole_clearance": 0.25, "min_hole_to_hole": 0.25, "min_microvia_diameter": 0.19999999999999998, "min_microvia_drill": 0.09999999999999999, "min_silk_clearance": 0.0, "min_through_hole_diameter": 0.3, "min_track_width": 0.19999999999999998, "min_via_annular_width": 0.049999999999999996, "min_via_diameter": 0.39999999999999997, "solder_mask_clearance": 0.0, "solder_mask_min_width": 0.0, "use_height_for_length_calcs": true }, "track_widths": [ 0.0 ], "via_dimensions": [ { "diameter": 0.0, "drill": 0.0 } ], "zones_allow_external_fillets": false, "zones_use_no_outline": true }, "layer_presets": [] }, "boards": [], "cvpcb": { "equivalence_files": [] }, "erc": { "erc_exclusions": [], "meta": { "version": 0 }, "pin_map": [ [ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 2 ], [ 0, 2, 0, 1, 0, 0, 1, 0, 2, 2, 2, 2 ], [ 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 2 ], [ 0, 1, 0, 0, 0, 0, 1, 1, 2, 1, 1, 2 ], [ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 2 ], [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2 ], [ 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 2 ], [ 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 2 ], [ 0, 2, 1, 2, 0, 0, 1, 0, 2, 2, 2, 2 ], [ 0, 2, 0, 1, 0, 0, 1, 0, 2, 0, 0, 2 ], [ 0, 2, 1, 1, 0, 0, 1, 0, 2, 0, 0, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ] ], "rule_severities": { "bus_definition_conflict": "error", "bus_entry_needed": "error", "bus_label_syntax": "error", "bus_to_bus_conflict": "error", "bus_to_net_conflict": "error", "different_unit_footprint": "error", "different_unit_net": "error", "duplicate_reference": "error", "duplicate_sheet_names": "error", "extra_units": "error", "global_label_dangling": "warning", "hier_label_mismatch": "error", "label_dangling": "error", "lib_symbol_issues": "warning", "multiple_net_names": "warning", "net_not_bus_member": "warning", "no_connect_connected": "warning", "no_connect_dangling": "warning", "pin_not_connected": "error", "pin_not_driven": "error", "pin_to_pin": "warning", "power_pin_not_driven": "error", "similar_labels": "warning", "unannotated": "error", "unit_value_mismatch": "error", "unresolved_variable": "error", "wire_dangling": "error" } }, "libraries": { "pinned_footprint_libs": [], "pinned_symbol_libs": [] }, "meta": { "filename": "sensor_smd.kicad_pro", "version": 1 }, "net_settings": { "classes": [ { "bus_width": 12.0, "clearance": 0.2, "diff_pair_gap": 0.25, "diff_pair_via_gap": 0.25, "diff_pair_width": 0.2, "line_style": 0, "microvia_diameter": 0.3, "microvia_drill": 0.1, "name": "Default", "pcb_color": "rgba(0, 0, 0, 0.000)", "schematic_color": "rgba(0, 0, 0, 0.000)", "track_width": 0.25, "via_diameter": 0.8, "via_drill": 0.4, "wire_width": 6.0 } ], "meta": { "version": 2 }, "net_colors": null }, "pcbnew": { "last_paths": { "gencad": "", "idf": "", "netlist": "", "specctra_dsn": "", "step": "", "vrml": "" }, "page_layout_descr_file": "" }, "schematic": { "annotate_start_num": 0, "drawing": { "default_line_thickness": 6.0, "default_text_size": 50.0, "field_names": [], "intersheets_ref_own_page": false, "intersheets_ref_prefix": "", "intersheets_ref_short": false, "intersheets_ref_show": false, "intersheets_ref_suffix": "", "junction_size_choice": 3, "label_size_ratio": 0.375, "pin_symbol_size": 25.0, "text_offset_ratio": 0.15 }, "legacy_lib_dir": "", "legacy_lib_list": [], "meta": { "version": 1 }, "net_format_name": "", "ngspice": { "fix_include_paths": true, "fix_passive_vals": false, "meta": { "version": 0 }, "model_mode": 0, "workbook_filename": "" }, "page_layout_descr_file": "", "plot_directory": "", "spice_adjust_passive_values": false, "spice_external_command": "spice \"%I\"", "subpart_first_id": 65, "subpart_id_separator": 0 }, "sheets": [ [ "24995d16-e067-44ae-81b3-9e2b050f9cf3", "" ] ], "text_variables": { "COMMIT_DATE": "YYYY-MM-DD", "COMMIT_HASH": "deadbeef" } } ================================================ FILE: electronics/sensor_smd/sensor_smd.kicad_sch ================================================ (kicad_sch (version 20211123) (generator eeschema) (uuid 24995d16-e067-44ae-81b3-9e2b050f9cf3) (paper "User" 150.012 119.99) (title_block (title "splitflap sensor smd") ) (lib_symbols (symbol "Connector:Conn_01x03_Male" (pin_names (offset 1.016) hide) (in_bom yes) (on_board yes) (property "Reference" "J" (id 0) (at 0 5.08 0) (effects (font (size 1.27 1.27))) ) (property "Value" "Conn_01x03_Male" (id 1) (at 0 -5.08 0) (effects (font (size 1.27 1.27))) ) (property "Footprint" "" (id 2) (at 0 0 0) (effects (font (size 1.27 1.27)) hide) ) (property "Datasheet" "~" (id 3) (at 0 0 0) (effects (font (size 1.27 1.27)) hide) ) (property "ki_keywords" "connector" (id 4) (at 0 0 0) (effects (font (size 1.27 1.27)) hide) ) (property "ki_description" "Generic connector, single row, 01x03, script generated (kicad-library-utils/schlib/autogen/connector/)" (id 5) (at 0 0 0) (effects (font (size 1.27 1.27)) hide) ) (property "ki_fp_filters" "Connector*:*_1x??_*" (id 6) (at 0 0 0) (effects (font (size 1.27 1.27)) hide) ) (symbol "Conn_01x03_Male_1_1" (polyline (pts (xy 1.27 -2.54) (xy 0.8636 -2.54) ) (stroke (width 0.1524) (type default) (color 0 0 0 0)) (fill (type none)) ) (polyline (pts (xy 1.27 0) (xy 0.8636 0) ) (stroke (width 0.1524) (type default) (color 0 0 0 0)) (fill (type none)) ) (polyline (pts (xy 1.27 2.54) (xy 0.8636 2.54) ) (stroke (width 0.1524) (type default) (color 0 0 0 0)) (fill (type none)) ) (rectangle (start 0.8636 -2.413) (end 0 -2.667) (stroke (width 0.1524) (type default) (color 0 0 0 0)) (fill (type outline)) ) (rectangle (start 0.8636 0.127) (end 0 -0.127) (stroke (width 0.1524) (type default) (color 0 0 0 0)) (fill (type outline)) ) (rectangle (start 0.8636 2.667) (end 0 2.413) (stroke (width 0.1524) (type default) (color 0 0 0 0)) (fill (type outline)) ) (pin passive line (at 5.08 2.54 180) (length 3.81) (name "Pin_1" (effects (font (size 1.27 1.27)))) (number "1" (effects (font (size 1.27 1.27)))) ) (pin passive line (at 5.08 0 180) (length 3.81) (name "Pin_2" (effects (font (size 1.27 1.27)))) (number "2" (effects (font (size 1.27 1.27)))) ) (pin passive line (at 5.08 -2.54 180) (length 3.81) (name "Pin_3" (effects (font (size 1.27 1.27)))) (number "3" (effects (font (size 1.27 1.27)))) ) ) ) (symbol "Device:LED_Small" (pin_numbers hide) (pin_names (offset 0.254) hide) (in_bom yes) (on_board yes) (property "Reference" "D" (id 0) (at -1.27 3.175 0) (effects (font (size 1.27 1.27)) (justify left)) ) (property "Value" "LED_Small" (id 1) (at -4.445 -2.54 0) (effects (font (size 1.27 1.27)) (justify left)) ) (property "Footprint" "" (id 2) (at 0 0 90) (effects (font (size 1.27 1.27)) hide) ) (property "Datasheet" "~" (id 3) (at 0 0 90) (effects (font (size 1.27 1.27)) hide) ) (property "ki_keywords" "LED diode light-emitting-diode" (id 4) (at 0 0 0) (effects (font (size 1.27 1.27)) hide) ) (property "ki_description" "Light emitting diode, small symbol" (id 5) (at 0 0 0) (effects (font (size 1.27 1.27)) hide) ) (property "ki_fp_filters" "LED* LED_SMD:* LED_THT:*" (id 6) (at 0 0 0) (effects (font (size 1.27 1.27)) hide) ) (symbol "LED_Small_0_1" (polyline (pts (xy -0.762 -1.016) (xy -0.762 1.016) ) (stroke (width 0.254) (type default) (color 0 0 0 0)) (fill (type none)) ) (polyline (pts (xy 1.016 0) (xy -0.762 0) ) (stroke (width 0) (type default) (color 0 0 0 0)) (fill (type none)) ) (polyline (pts (xy 0.762 -1.016) (xy -0.762 0) (xy 0.762 1.016) (xy 0.762 -1.016) ) (stroke (width 0.254) (type default) (color 0 0 0 0)) (fill (type none)) ) (polyline (pts (xy 0 0.762) (xy -0.508 1.27) (xy -0.254 1.27) (xy -0.508 1.27) (xy -0.508 1.016) ) (stroke (width 0) (type default) (color 0 0 0 0)) (fill (type none)) ) (polyline (pts (xy 0.508 1.27) (xy 0 1.778) (xy 0.254 1.778) (xy 0 1.778) (xy 0 1.524) ) (stroke (width 0) (type default) (color 0 0 0 0)) (fill (type none)) ) ) (symbol "LED_Small_1_1" (pin passive line (at -2.54 0 0) (length 1.778) (name "K" (effects (font (size 1.27 1.27)))) (number "1" (effects (font (size 1.27 1.27)))) ) (pin passive line (at 2.54 0 180) (length 1.778) (name "A" (effects (font (size 1.27 1.27)))) (number "2" (effects (font (size 1.27 1.27)))) ) ) ) (symbol "Device:R_Small" (pin_numbers hide) (pin_names (offset 0.254) hide) (in_bom yes) (on_board yes) (property "Reference" "R" (id 0) (at 0.762 0.508 0) (effects (font (size 1.27 1.27)) (justify left)) ) (property "Value" "R_Small" (id 1) (at 0.762 -1.016 0) (effects (font (size 1.27 1.27)) (justify left)) ) (property "Footprint" "" (id 2) (at 0 0 0) (effects (font (size 1.27 1.27)) hide) ) (property "Datasheet" "~" (id 3) (at 0 0 0) (effects (font (size 1.27 1.27)) hide) ) (property "ki_keywords" "R resistor" (id 4) (at 0 0 0) (effects (font (size 1.27 1.27)) hide) ) (property "ki_description" "Resistor, small symbol" (id 5) (at 0 0 0) (effects (font (size 1.27 1.27)) hide) ) (property "ki_fp_filters" "R_*" (id 6) (at 0 0 0) (effects (font (size 1.27 1.27)) hide) ) (symbol "R_Small_0_1" (rectangle (start -0.762 1.778) (end 0.762 -1.778) (stroke (width 0.2032) (type default) (color 0 0 0 0)) (fill (type none)) ) ) (symbol "R_Small_1_1" (pin passive line (at 0 2.54 270) (length 0.762) (name "~" (effects (font (size 1.27 1.27)))) (number "1" (effects (font (size 1.27 1.27)))) ) (pin passive line (at 0 -2.54 90) (length 0.762) (name "~" (effects (font (size 1.27 1.27)))) (number "2" (effects (font (size 1.27 1.27)))) ) ) ) (symbol "Jumper:Jumper_2_Bridged" (pin_names (offset 0) hide) (in_bom yes) (on_board yes) (property "Reference" "JP" (id 0) (at 0 1.905 0) (effects (font (size 1.27 1.27))) ) (property "Value" "Jumper_2_Bridged" (id 1) (at 0 -2.54 0) (effects (font (size 1.27 1.27))) ) (property "Footprint" "" (id 2) (at 0 0 0) (effects (font (size 1.27 1.27)) hide) ) (property "Datasheet" "~" (id 3) (at 0 0 0) (effects (font (size 1.27 1.27)) hide) ) (property "ki_keywords" "Jumper SPST" (id 4) (at 0 0 0) (effects (font (size 1.27 1.27)) hide) ) (property "ki_description" "Jumper, 2-pole, closed/bridged" (id 5) (at 0 0 0) (effects (font (size 1.27 1.27)) hide) ) (property "ki_fp_filters" "Jumper* TestPoint*2Pads* TestPoint*Bridge*" (id 6) (at 0 0 0) (effects (font (size 1.27 1.27)) hide) ) (symbol "Jumper_2_Bridged_0_0" (circle (center -2.032 0) (radius 0.508) (stroke (width 0) (type default) (color 0 0 0 0)) (fill (type none)) ) (circle (center 2.032 0) (radius 0.508) (stroke (width 0) (type default) (color 0 0 0 0)) (fill (type none)) ) ) (symbol "Jumper_2_Bridged_0_1" (arc (start 1.524 0.254) (mid 0 0.762) (end -1.524 0.254) (stroke (width 0) (type default) (color 0 0 0 0)) (fill (type none)) ) ) (symbol "Jumper_2_Bridged_1_1" (pin passive line (at -5.08 0 0) (length 2.54) (name "A" (effects (font (size 1.27 1.27)))) (number "1" (effects (font (size 1.27 1.27)))) ) (pin passive line (at 5.08 0 180) (length 2.54) (name "B" (effects (font (size 1.27 1.27)))) (number "2" (effects (font (size 1.27 1.27)))) ) ) ) (symbol "Mechanical:MountingHole" (pin_names (offset 1.016)) (in_bom yes) (on_board yes) (property "Reference" "H" (id 0) (at 0 5.08 0) (effects (font (size 1.27 1.27))) ) (property "Value" "MountingHole" (id 1) (at 0 3.175 0) (effects (font (size 1.27 1.27))) ) (property "Footprint" "" (id 2) (at 0 0 0) (effects (font (size 1.27 1.27)) hide) ) (property "Datasheet" "~" (id 3) (at 0 0 0) (effects (font (size 1.27 1.27)) hide) ) (property "ki_keywords" "mounting hole" (id 4) (at 0 0 0) (effects (font (size 1.27 1.27)) hide) ) (property "ki_description" "Mounting Hole without connection" (id 5) (at 0 0 0) (effects (font (size 1.27 1.27)) hide) ) (property "ki_fp_filters" "MountingHole*" (id 6) (at 0 0 0) (effects (font (size 1.27 1.27)) hide) ) (symbol "MountingHole_0_1" (circle (center 0 0) (radius 1.27) (stroke (width 1.27) (type default) (color 0 0 0 0)) (fill (type none)) ) ) ) (symbol "Sensor_Magnetic:A1101ELHL" (in_bom yes) (on_board yes) (property "Reference" "U" (id 0) (at 0 11.43 0) (effects (font (size 1.27 1.27)) (justify left)) ) (property "Value" "A1101ELHL" (id 1) (at 0 8.89 0) (effects (font (size 1.27 1.27)) (justify left)) ) (property "Footprint" "Package_TO_SOT_SMD:SOT-23W" (id 2) (at 0 -8.89 0) (effects (font (size 1.27 1.27) italic) (justify left) hide) ) (property "Datasheet" "https://www.allegromicro.com/-/media/files/datasheets/a110x-datasheet.ashx" (id 3) (at 0 16.51 0) (effects (font (size 1.27 1.27)) hide) ) (property "ki_keywords" "hall switch" (id 4) (at 0 0 0) (effects (font (size 1.27 1.27)) hide) ) (property "ki_description" "Hall effect switch, unipolar, Bop=100G, Brp=45G, -40C to +85C, SOT-23W" (id 5) (at 0 0 0) (effects (font (size 1.27 1.27)) hide) ) (property "ki_fp_filters" "SOT?23*" (id 6) (at 0 0 0) (effects (font (size 1.27 1.27)) hide) ) (symbol "A1101ELHL_0_1" (rectangle (start -5.08 7.62) (end 5.08 -7.62) (stroke (width 0.254) (type default) (color 0 0 0 0)) (fill (type background)) ) ) (symbol "A1101ELHL_1_1" (pin power_in line (at -2.54 10.16 270) (length 2.54) (name "VCC" (effects (font (size 1.27 1.27)))) (number "1" (effects (font (size 1.27 1.27)))) ) (pin open_collector line (at 7.62 0 180) (length 2.54) (name "VOUT" (effects (font (size 1.27 1.27)))) (number "2" (effects (font (size 1.27 1.27)))) ) (pin power_in line (at -2.54 -10.16 90) (length 2.54) (name "GND" (effects (font (size 1.27 1.27)))) (number "3" (effects (font (size 1.27 1.27)))) ) ) ) (symbol "power:GND" (power) (pin_names (offset 0)) (in_bom yes) (on_board yes) (property "Reference" "#PWR" (id 0) (at 0 -6.35 0) (effects (font (size 1.27 1.27)) hide) ) (property "Value" "GND" (id 1) (at 0 -3.81 0) (effects (font (size 1.27 1.27))) ) (property "Footprint" "" (id 2) (at 0 0 0) (effects (font (size 1.27 1.27)) hide) ) (property "Datasheet" "" (id 3) (at 0 0 0) (effects (font (size 1.27 1.27)) hide) ) (property "ki_keywords" "global power" (id 4) (at 0 0 0) (effects (font (size 1.27 1.27)) hide) ) (property "ki_description" "Power symbol creates a global label with name \"GND\" , ground" (id 5) (at 0 0 0) (effects (font (size 1.27 1.27)) hide) ) (symbol "GND_0_1" (polyline (pts (xy 0 0) (xy 0 -1.27) (xy 1.27 -1.27) (xy 0 -2.54) (xy -1.27 -1.27) (xy 0 -1.27) ) (stroke (width 0) (type default) (color 0 0 0 0)) (fill (type none)) ) ) (symbol "GND_1_1" (pin power_in line (at 0 0 270) (length 0) hide (name "GND" (effects (font (size 1.27 1.27)))) (number "1" (effects (font (size 1.27 1.27)))) ) ) ) (symbol "power:PWR_FLAG" (power) (pin_numbers hide) (pin_names (offset 0) hide) (in_bom yes) (on_board yes) (property "Reference" "#FLG" (id 0) (at 0 1.905 0) (effects (font (size 1.27 1.27)) hide) ) (property "Value" "PWR_FLAG" (id 1) (at 0 3.81 0) (effects (font (size 1.27 1.27))) ) (property "Footprint" "" (id 2) (at 0 0 0) (effects (font (size 1.27 1.27)) hide) ) (property "Datasheet" "~" (id 3) (at 0 0 0) (effects (font (size 1.27 1.27)) hide) ) (property "ki_keywords" "flag power" (id 4) (at 0 0 0) (effects (font (size 1.27 1.27)) hide) ) (property "ki_description" "Special symbol for telling ERC where power comes from" (id 5) (at 0 0 0) (effects (font (size 1.27 1.27)) hide) ) (symbol "PWR_FLAG_0_0" (pin power_out line (at 0 0 90) (length 0) (name "pwr" (effects (font (size 1.27 1.27)))) (number "1" (effects (font (size 1.27 1.27)))) ) ) (symbol "PWR_FLAG_0_1" (polyline (pts (xy 0 0) (xy 0 1.27) (xy -1.016 1.905) (xy 0 2.54) (xy 1.016 1.905) (xy 0 1.27) ) (stroke (width 0) (type default) (color 0 0 0 0)) (fill (type none)) ) ) ) (symbol "power:VDD" (power) (pin_names (offset 0)) (in_bom yes) (on_board yes) (property "Reference" "#PWR" (id 0) (at 0 -3.81 0) (effects (font (size 1.27 1.27)) hide) ) (property "Value" "VDD" (id 1) (at 0 3.81 0) (effects (font (size 1.27 1.27))) ) (property "Footprint" "" (id 2) (at 0 0 0) (effects (font (size 1.27 1.27)) hide) ) (property "Datasheet" "" (id 3) (at 0 0 0) (effects (font (size 1.27 1.27)) hide) ) (property "ki_keywords" "global power" (id 4) (at 0 0 0) (effects (font (size 1.27 1.27)) hide) ) (property "ki_description" "Power symbol creates a global label with name \"VDD\"" (id 5) (at 0 0 0) (effects (font (size 1.27 1.27)) hide) ) (symbol "VDD_0_1" (polyline (pts (xy -0.762 1.27) (xy 0 2.54) ) (stroke (width 0) (type default) (color 0 0 0 0)) (fill (type none)) ) (polyline (pts (xy 0 0) (xy 0 2.54) ) (stroke (width 0) (type default) (color 0 0 0 0)) (fill (type none)) ) (polyline (pts (xy 0 2.54) (xy 0.762 1.27) ) (stroke (width 0) (type default) (color 0 0 0 0)) (fill (type none)) ) ) (symbol "VDD_1_1" (pin power_in line (at 0 0 90) (length 0) hide (name "VDD" (effects (font (size 1.27 1.27)))) (number "1" (effects (font (size 1.27 1.27)))) ) ) ) ) (junction (at 101.6 43.18) (diameter 0) (color 0 0 0 0) (uuid 20db7ac6-4d5b-428f-8def-43e38d13ae67) ) (junction (at 53.34 44.45) (diameter 0) (color 0 0 0 0) (uuid 7f777914-edc1-4869-84ef-548ec70d3b95) ) (junction (at 53.34 46.99) (diameter 0) (color 0 0 0 0) (uuid f4237cc9-a007-46bb-9712-1dc606968f99) ) (junction (at 87.63 29.21) (diameter 0) (color 0 0 0 0) (uuid fd5db07f-43a3-4b4f-886a-2574f29ea95d) ) (wire (pts (xy 87.63 22.86) (xy 87.63 29.21)) (stroke (width 0) (type default) (color 0 0 0 0)) (uuid 030092d3-b000-4032-9d28-e3f33eb11e52) ) (wire (pts (xy 87.63 29.21) (xy 87.63 33.02)) (stroke (width 0) (type default) (color 0 0 0 0)) (uuid 12b8da92-e512-437c-982f-4da8bfed06b3) ) (wire (pts (xy 53.34 44.45) (xy 53.34 41.91)) (stroke (width 0) (type default) (color 0 0 0 0)) (uuid 2d4575af-f773-423d-9fb0-73fd673dd9d9) ) (wire (pts (xy 87.63 29.21) (xy 90.17 29.21)) (stroke (width 0) (type default) (color 0 0 0 0)) (uuid 3423d02e-eab0-46e0-9dff-9c771e297f21) ) (wire (pts (xy 34.29 41.91) (xy 48.26 41.91)) (stroke (width 0) (type default) (color 0 0 0 0)) (uuid 4f22fd91-33d9-4526-a49e-dac0e0c30b5c) ) (wire (pts (xy 101.6 29.21) (xy 101.6 30.48)) (stroke (width 0) (type default) (color 0 0 0 0)) (uuid 56f88c37-4c8a-480e-99d4-b05e4323abd0) ) (wire (pts (xy 101.6 41.91) (xy 101.6 43.18)) (stroke (width 0) (type default) (color 0 0 0 0)) (uuid 676644e5-393d-4a71-8a61-f3676410072a) ) (wire (pts (xy 34.29 46.99) (xy 53.34 46.99)) (stroke (width 0) (type default) (color 0 0 0 0)) (uuid 887762f2-d8a4-40c0-a221-ab83154c7104) ) (wire (pts (xy 53.34 46.99) (xy 53.34 49.53)) (stroke (width 0) (type default) (color 0 0 0 0)) (uuid a3a4ebc9-cbd4-4917-90ae-9c74b43a32ca) ) (wire (pts (xy 34.29 44.45) (xy 53.34 44.45)) (stroke (width 0) (type default) (color 0 0 0 0)) (uuid b10db726-b1b9-433d-ad23-d0d0fff36c0d) ) (wire (pts (xy 87.63 53.34) (xy 87.63 57.15)) (stroke (width 0) (type default) (color 0 0 0 0)) (uuid b5e5f2da-67e1-4766-8b2f-a719370101c9) ) (wire (pts (xy 101.6 43.18) (xy 125.73 43.18)) (stroke (width 0) (type default) (color 0 0 0 0)) (uuid b8b95a9d-b636-43de-9348-12e346cd0bf8) ) (wire (pts (xy 100.33 29.21) (xy 101.6 29.21)) (stroke (width 0) (type default) (color 0 0 0 0)) (uuid c2caf3d6-1a57-4f91-a5da-d54cb2f99c2f) ) (wire (pts (xy 97.79 43.18) (xy 101.6 43.18)) (stroke (width 0) (type default) (color 0 0 0 0)) (uuid d22828bf-eabf-437b-a297-07b47025fa09) ) (wire (pts (xy 101.6 35.56) (xy 101.6 36.83)) (stroke (width 0) (type default) (color 0 0 0 0)) (uuid e153c858-41f3-4a68-b372-29f566813929) ) (label "SIGNAL" (at 48.26 41.91 180) (effects (font (size 1.27 1.27)) (justify right bottom)) (uuid 347952a8-c3e1-4e07-8be7-575e6c41bab2) ) (label "SIGNAL" (at 125.73 43.18 180) (effects (font (size 1.27 1.27)) (justify right bottom)) (uuid d7063b72-4270-41c5-ac5b-50f35370dc7d) ) (symbol (lib_id "Jumper:Jumper_2_Bridged") (at 95.25 29.21 0) (unit 1) (in_bom no) (on_board yes) (fields_autoplaced) (uuid 03d72700-237d-4342-a10c-58906e3a0d69) (property "Reference" "JP1" (id 0) (at 95.25 22.86 0)) (property "Value" "LED enable" (id 1) (at 95.25 25.4 0)) (property "Footprint" "sensor_smd_lib:SolderJumper-2_P1.3mm_Bridged_Pad1.0x1.5mm" (id 2) (at 95.25 29.21 0) (effects (font (size 1.27 1.27)) hide) ) (property "Datasheet" "~" (id 3) (at 95.25 29.21 0) (effects (font (size 1.27 1.27)) hide) ) (pin "1" (uuid c4463c4f-8bab-4f4e-aaf7-cd71d6ecd3c9)) (pin "2" (uuid 9a0a12ca-4f36-4e50-b457-89a3f4e627e9)) ) (symbol (lib_id "power:VDD") (at 87.63 22.86 0) (unit 1) (in_bom yes) (on_board yes) (fields_autoplaced) (uuid 0e085f65-fd33-430a-a8eb-8486dc74fcbf) (property "Reference" "#PWR0104" (id 0) (at 87.63 26.67 0) (effects (font (size 1.27 1.27)) hide) ) (property "Value" "VDD" (id 1) (at 87.63 17.78 0)) (property "Footprint" "" (id 2) (at 87.63 22.86 0) (effects (font (size 1.27 1.27)) hide) ) (property "Datasheet" "" (id 3) (at 87.63 22.86 0) (effects (font (size 1.27 1.27)) hide) ) (pin "1" (uuid eaf7511f-4839-446d-bba5-b5579a8e5e35)) ) (symbol (lib_id "power:GND") (at 53.34 49.53 0) (unit 1) (in_bom yes) (on_board yes) (fields_autoplaced) (uuid 1aa5a0ac-4d16-4a0f-9e99-cd280b171ce1) (property "Reference" "#PWR0101" (id 0) (at 53.34 55.88 0) (effects (font (size 1.27 1.27)) hide) ) (property "Value" "GND" (id 1) (at 53.34 54.61 0)) (property "Footprint" "" (id 2) (at 53.34 49.53 0) (effects (font (size 1.27 1.27)) hide) ) (property "Datasheet" "" (id 3) (at 53.34 49.53 0) (effects (font (size 1.27 1.27)) hide) ) (pin "1" (uuid b479ff0b-0c1c-4824-aecc-30246c7812ae)) ) (symbol (lib_id "Sensor_Magnetic:A1101ELHL") (at 90.17 43.18 0) (unit 1) (in_bom yes) (on_board yes) (fields_autoplaced) (uuid 2a7ea13f-ac49-4778-820a-c13aa70f9bbc) (property "Reference" "U1" (id 0) (at 83.82 41.9099 0) (effects (font (size 1.27 1.27)) (justify right)) ) (property "Value" "HX6286" (id 1) (at 83.82 44.4499 0) (effects (font (size 1.27 1.27)) (justify right)) ) (property "Footprint" "Package_TO_SOT_SMD:SOT-23W" (id 2) (at 90.17 52.07 0) (effects (font (size 1.27 1.27) italic) (justify left) hide) ) (property "Datasheet" "" (id 3) (at 90.17 26.67 0) (effects (font (size 1.27 1.27)) hide) ) (property "LCSC" "C495736" (id 4) (at 90.17 43.18 0) (effects (font (size 1.27 1.27)) hide) ) (property "JLCPCB_CORRECTION" "0; 0; 180" (id 5) (at 90.17 43.18 0) (effects (font (size 1.27 1.27)) hide) ) (pin "1" (uuid 8857a6bf-0852-4a63-ad8f-20f6a945eba1)) (pin "2" (uuid 8e951bdc-7f17-45b1-b4de-d4c58e3f8ac1)) (pin "3" (uuid 97c5eabf-679f-468a-ba41-3a1fb7a40670)) ) (symbol (lib_id "power:GND") (at 87.63 57.15 0) (unit 1) (in_bom yes) (on_board yes) (fields_autoplaced) (uuid 7d34459c-cb1f-4f2b-a580-b312ae7cfd44) (property "Reference" "#PWR0103" (id 0) (at 87.63 63.5 0) (effects (font (size 1.27 1.27)) hide) ) (property "Value" "GND" (id 1) (at 87.63 62.23 0)) (property "Footprint" "" (id 2) (at 87.63 57.15 0) (effects (font (size 1.27 1.27)) hide) ) (property "Datasheet" "" (id 3) (at 87.63 57.15 0) (effects (font (size 1.27 1.27)) hide) ) (pin "1" (uuid 41469af6-e3e9-436e-bea3-b2f48ddbbe4e)) ) (symbol (lib_id "Mechanical:MountingHole") (at 156.21 33.02 0) (unit 1) (in_bom no) (on_board yes) (fields_autoplaced) (uuid 8ebe0992-3c78-412e-8133-0bd4fbe3f2a6) (property "Reference" "H1" (id 0) (at 158.75 31.7499 0) (effects (font (size 1.27 1.27)) (justify left)) ) (property "Value" "MountingHole" (id 1) (at 158.75 34.2899 0) (effects (font (size 1.27 1.27)) (justify left)) ) (property "Footprint" "MountingHole:MountingHole_4.3mm_M4_ISO7380" (id 2) (at 156.21 33.02 0) (effects (font (size 1.27 1.27)) hide) ) (property "Datasheet" "~" (id 3) (at 156.21 33.02 0) (effects (font (size 1.27 1.27)) hide) ) ) (symbol (lib_id "power:PWR_FLAG") (at 53.34 44.45 270) (unit 1) (in_bom yes) (on_board yes) (fields_autoplaced) (uuid 95f3ed56-5a53-43b4-9e7a-5c50d9d1b815) (property "Reference" "#FLG01" (id 0) (at 55.245 44.45 0) (effects (font (size 1.27 1.27)) hide) ) (property "Value" "PWR_FLAG" (id 1) (at 57.15 44.4499 90) (effects (font (size 1.27 1.27)) (justify left)) ) (property "Footprint" "" (id 2) (at 53.34 44.45 0) (effects (font (size 1.27 1.27)) hide) ) (property "Datasheet" "~" (id 3) (at 53.34 44.45 0) (effects (font (size 1.27 1.27)) hide) ) (pin "1" (uuid 982a1a63-9374-4115-a4a1-165fcffc6c03)) ) (symbol (lib_id "Mechanical:MountingHole") (at 156.21 39.37 0) (unit 1) (in_bom no) (on_board yes) (fields_autoplaced) (uuid a42ba77e-7f12-467c-8411-ebb38194c333) (property "Reference" "H2" (id 0) (at 158.75 38.0999 0) (effects (font (size 1.27 1.27)) (justify left)) ) (property "Value" "MountingHole" (id 1) (at 158.75 40.6399 0) (effects (font (size 1.27 1.27)) (justify left)) ) (property "Footprint" "sensor_smd_lib:hole_9.4" (id 2) (at 156.21 39.37 0) (effects (font (size 1.27 1.27)) hide) ) (property "Datasheet" "~" (id 3) (at 156.21 39.37 0) (effects (font (size 1.27 1.27)) hide) ) ) (symbol (lib_id "Connector:Conn_01x03_Male") (at 29.21 44.45 0) (unit 1) (in_bom no) (on_board yes) (fields_autoplaced) (uuid ae896a98-44ff-4a63-9762-fc32f3a185d2) (property "Reference" "J1" (id 0) (at 29.845 36.83 0)) (property "Value" "HEADER MALE RA" (id 1) (at 29.845 39.37 0)) (property "Footprint" "sensor_smd_lib:header_3_smd" (id 2) (at 29.21 44.45 0) (effects (font (size 1.27 1.27)) hide) ) (property "Datasheet" "~" (id 3) (at 29.21 44.45 0) (effects (font (size 1.27 1.27)) hide) ) (pin "1" (uuid c167d674-e52d-47f3-9b81-89a69e84c760)) (pin "2" (uuid a014ade0-ecf7-4be0-bc91-36db3b4c391e)) (pin "3" (uuid e97e495b-bec3-4cbb-83de-9e1d1143c93e)) ) (symbol (lib_id "power:PWR_FLAG") (at 53.34 46.99 270) (unit 1) (in_bom yes) (on_board yes) (fields_autoplaced) (uuid d30b6be0-319c-4fba-97f1-41f5f11707c3) (property "Reference" "#FLG02" (id 0) (at 55.245 46.99 0) (effects (font (size 1.27 1.27)) hide) ) (property "Value" "PWR_FLAG" (id 1) (at 57.15 46.9899 90) (effects (font (size 1.27 1.27)) (justify left)) ) (property "Footprint" "" (id 2) (at 53.34 46.99 0) (effects (font (size 1.27 1.27)) hide) ) (property "Datasheet" "~" (id 3) (at 53.34 46.99 0) (effects (font (size 1.27 1.27)) hide) ) (pin "1" (uuid 28dfdf6d-3c12-4a63-9699-7cb085d7ee71)) ) (symbol (lib_id "Device:LED_Small") (at 101.6 39.37 90) (unit 1) (in_bom yes) (on_board yes) (fields_autoplaced) (uuid e40b31b6-953e-4e42-9093-099a9a1bfd04) (property "Reference" "D1" (id 0) (at 104.14 38.0364 90) (effects (font (size 1.27 1.27)) (justify right)) ) (property "Value" "LED RED" (id 1) (at 104.14 40.5764 90) (effects (font (size 1.27 1.27)) (justify right)) ) (property "Footprint" "LED_SMD:LED_0603_1608Metric" (id 2) (at 101.6 39.37 90) (effects (font (size 1.27 1.27)) hide) ) (property "Datasheet" "~" (id 3) (at 101.6 39.37 90) (effects (font (size 1.27 1.27)) hide) ) (property "LCSC" "C2286" (id 4) (at 101.6 39.37 90) (effects (font (size 1.27 1.27)) hide) ) (pin "1" (uuid c5adecf8-bbaf-4936-bd6b-2ad75da50936)) (pin "2" (uuid 10ab8527-113a-414f-84eb-9be4729754a4)) ) (symbol (lib_id "power:VDD") (at 53.34 41.91 0) (unit 1) (in_bom yes) (on_board yes) (fields_autoplaced) (uuid fb6f11f7-5924-4e94-aa0c-5fc4c59052e2) (property "Reference" "#PWR0102" (id 0) (at 53.34 45.72 0) (effects (font (size 1.27 1.27)) hide) ) (property "Value" "VDD" (id 1) (at 53.34 36.83 0)) (property "Footprint" "" (id 2) (at 53.34 41.91 0) (effects (font (size 1.27 1.27)) hide) ) (property "Datasheet" "" (id 3) (at 53.34 41.91 0) (effects (font (size 1.27 1.27)) hide) ) (pin "1" (uuid e7f6fe7e-1697-4668-8584-ac7a7b53c379)) ) (symbol (lib_id "Device:R_Small") (at 101.6 33.02 180) (unit 1) (in_bom yes) (on_board yes) (fields_autoplaced) (uuid fee601a4-ebd8-4835-b8f7-cf8ad763c827) (property "Reference" "R1" (id 0) (at 104.14 31.7499 0) (effects (font (size 1.27 1.27)) (justify right)) ) (property "Value" "1k" (id 1) (at 104.14 34.2899 0) (effects (font (size 1.27 1.27)) (justify right)) ) (property "Footprint" "Resistor_SMD:R_0603_1608Metric" (id 2) (at 101.6 33.02 0) (effects (font (size 1.27 1.27)) hide) ) (property "Datasheet" "~" (id 3) (at 101.6 33.02 0) (effects (font (size 1.27 1.27)) hide) ) (property "LCSC" "C21190" (id 4) (at 101.6 33.02 0) (effects (font (size 1.27 1.27)) hide) ) (pin "1" (uuid 0ffb661d-f7a9-4260-a50c-7255cbc47c03)) (pin "2" (uuid 3e67a265-8bac-4b08-847e-2f04f7bd8927)) ) (sheet_instances (path "/" (page "1")) ) (symbol_instances (path "/95f3ed56-5a53-43b4-9e7a-5c50d9d1b815" (reference "#FLG01") (unit 1) (value "PWR_FLAG") (footprint "") ) (path "/d30b6be0-319c-4fba-97f1-41f5f11707c3" (reference "#FLG02") (unit 1) (value "PWR_FLAG") (footprint "") ) (path "/1aa5a0ac-4d16-4a0f-9e99-cd280b171ce1" (reference "#PWR0101") (unit 1) (value "GND") (footprint "") ) (path "/fb6f11f7-5924-4e94-aa0c-5fc4c59052e2" (reference "#PWR0102") (unit 1) (value "VDD") (footprint "") ) (path "/7d34459c-cb1f-4f2b-a580-b312ae7cfd44" (reference "#PWR0103") (unit 1) (value "GND") (footprint "") ) (path "/0e085f65-fd33-430a-a8eb-8486dc74fcbf" (reference "#PWR0104") (unit 1) (value "VDD") (footprint "") ) (path "/e40b31b6-953e-4e42-9093-099a9a1bfd04" (reference "D1") (unit 1) (value "LED RED") (footprint "LED_SMD:LED_0603_1608Metric") ) (path "/8ebe0992-3c78-412e-8133-0bd4fbe3f2a6" (reference "H1") (unit 1) (value "MountingHole") (footprint "MountingHole:MountingHole_4.3mm_M4_ISO7380") ) (path "/a42ba77e-7f12-467c-8411-ebb38194c333" (reference "H2") (unit 1) (value "MountingHole") (footprint "sensor_smd_lib:hole_9.4") ) (path "/ae896a98-44ff-4a63-9762-fc32f3a185d2" (reference "J1") (unit 1) (value "HEADER MALE RA") (footprint "sensor_smd_lib:header_3_smd") ) (path "/03d72700-237d-4342-a10c-58906e3a0d69" (reference "JP1") (unit 1) (value "LED enable") (footprint "sensor_smd_lib:SolderJumper-2_P1.3mm_Bridged_Pad1.0x1.5mm") ) (path "/fee601a4-ebd8-4835-b8f7-cf8ad763c827" (reference "R1") (unit 1) (value "1k") (footprint "Resistor_SMD:R_0603_1608Metric") ) (path "/2a7ea13f-ac49-4778-820a-c13aa70f9bbc" (reference "U1") (unit 1) (value "HX6286") (footprint "Package_TO_SOT_SMD:SOT-23W") ) ) ) ================================================ FILE: firmware/.gitignore ================================================ .vscode/.browse.c_cpp.db* .vscode/c_cpp_properties.json .vscode/launch.json .vscode/ipch ================================================ FILE: firmware/buildscript_build_info_macros.py ================================================ import platform import subprocess import time Import("env") def get_firmware_specifier_build_flag(): ret = subprocess.run(["git", "describe", "--always", "--abbrev=40", "--dirty", "--match=nevermatchanything"], stdout=subprocess.PIPE, text=True) build_version = ret.stdout.strip() build_flag = "-D BUILD_GIT_HASH=\\\"" + build_version + "\\\"" print ("Firmware Revision: " + build_version) return (build_flag) def get_build_date_flag(): today = time.strftime("%Y-%m-%d") return "-D BUILD_DATE=\\\"" + today + "\\\"" def get_build_os_flag(): build_os = platform.system() return "-D BUILD_OS=\\\"" + build_os + "\\\"" env.Append( BUILD_FLAGS=[ get_firmware_specifier_build_flag(), get_build_os_flag(), get_build_date_flag(), ] ) ================================================ FILE: firmware/esp32/.gitignore ================================================ secrets.h ================================================ FILE: firmware/esp32/README.md ================================================ This folder contains extra source files to replace the main (Splitflap.ino) source file when building for ESP32 via PlatformIO. See the "esp32" enviornment definition in platformio.ini for more info about how these files are included. ================================================ FILE: firmware/esp32/base/base_config.h ================================================ /* Copyright 2021 Scott Bezek and the splitflap contributors 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. */ #pragma once #define NUM_POWER_CHANNELS 5 #define NUM_LEDS (NUM_POWER_CHANNELS + 1) #define BASE_NEOPIXEL_PIN 27 #define BASE_MCP_NRESET_PIN 26 #define BASE_MASTER_EN_PIN 17 #define BASE_MCP_ADDRESS 7 #define MCP_PIN_CHANNEL_0_EN 5 #define MCP_PIN_CHANNEL_1_EN 4 #define MCP_PIN_CHANNEL_2_EN 3 #define MCP_PIN_CHANNEL_3_EN 2 #define MCP_PIN_CHANNEL_4_EN 1 #define MCP_PIN_ADDR_1 15 #define MCP_PIN_ADDR_2 14 #define MCP_PIN_ADDR_4 13 #define MCP_PIN_ADDR_8 12 #define ABSOLUTE_MAX_VOLTAGE 15 #define ABSOLUTE_MAX_CHANNEL_CURRENT_MA 9000 // Absolute maximum current allowable (actual limits will be lower and adjust dynamically based on load) #define MIN_RUN_VOLTAGE 11.5 #define MAX_DISABLED_VOLTAGE 3 #define IDLE_CURRENT_MILLIAMPS 25 // Max acceptable power channel idle current. Should account for measurement error and channel Out LED (if enabled). #define MIN_MODULE_CURRENT_MA 100 #define MAX_MODULE_CURRENT_HOMING_MA 260 #define MAX_MODULE_CURRENT_MOVING_MA 260 //180 #define CONSECUTIVE_CURRENT_OUT_OF_RANGE_THRESHOLD 20 #define CONSECUTIVE_UNEXPECTED_POWER_THRESHOLD 30 ================================================ FILE: firmware/esp32/base/base_supervisor_task.cpp ================================================ /* Copyright 2021 Scott Bezek and the splitflap contributors 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. */ #include #include "base_supervisor_task.h" #define PIN_UP_BUTTON 35 #define PIN_DOWN_BUTTON 0 /** * MODIFY THIS to configure which modules are connected to which power channels! */ uint8_t BaseSupervisorTask::getPowerChannelForModuleIndex(uint8_t module_index) { return module_index / 36; } /** Maps power channel index (0-4) to MCP GPIO pin. */ static const uint8_t MCP_PIN_CHANNEL_EN[NUM_POWER_CHANNELS] = { 5, 4, 3, 2, 1 }; /** Maps power channel index (0-4) to an LED index in the neopixel chain. */ static const uint8_t LED_CHANNEL_INDEX[NUM_POWER_CHANNELS] = { 5, 4, 3, 2, 1 }; BaseSupervisorTask::BaseSupervisorTask(SplitflapTask& splitflap_task, SerialTask& serial_task, const uint8_t task_core) : Task("BaseSupervisor", 8192, 1, task_core), splitflap_task_(splitflap_task), serial_task_(serial_task) { } void BaseSupervisorTask::run() { pinMode(BASE_MCP_NRESET_PIN, OUTPUT); pinMode(BASE_MASTER_EN_PIN, OUTPUT); pinMode(PIN_UP_BUTTON, INPUT); // TDisplay has built-in pullup pinMode(PIN_DOWN_BUTTON, INPUT_PULLUP); digitalWrite(BASE_MCP_NRESET_PIN, HIGH); Wire.begin(); mcp_.begin(BASE_MCP_ADDRESS, &Wire); for (uint8_t i = 0; i < NUM_POWER_CHANNELS; i++) { channel_enabled_[i] = false; channel_current_out_of_range_count_[i] = 0; ina219_[i].begin(); ina219_[i].setCalibrationSplitflap(); mcp_.pinMode(MCP_PIN_CHANNEL_EN[i], OUTPUT); } mcp_.pinMode(MCP_PIN_ADDR_1, INPUT); mcp_.pullUp(MCP_PIN_ADDR_1, 1); mcp_.pinMode(MCP_PIN_ADDR_2, INPUT); mcp_.pullUp(MCP_PIN_ADDR_2, 1); mcp_.pinMode(MCP_PIN_ADDR_4, INPUT); mcp_.pullUp(MCP_PIN_ADDR_4, 1); mcp_.pinMode(MCP_PIN_ADDR_8, INPUT); mcp_.pullUp(MCP_PIN_ADDR_8, 1); FastLED.addLeds(leds_, NUM_LEDS); bool addr1 = !mcp_.digitalRead(MCP_PIN_ADDR_1); bool addr2 = !mcp_.digitalRead(MCP_PIN_ADDR_2); bool addr4 = !mcp_.digitalRead(MCP_PIN_ADDR_4); bool addr8 = !mcp_.digitalRead(MCP_PIN_ADDR_8); uint8_t addr = (addr8 << 3) | (addr4 << 2) | (addr2 << 1) | (addr1); char buf[255]; snprintf(buf, sizeof(buf), "My address: %d", addr); serial_task_.log(buf); for (uint8_t i = 0; i < NUM_POWER_CHANNELS; i++) { setPowerChannel(i, false); } digitalWrite(BASE_MASTER_EN_PIN, LOW); state_ = PB_SupervisorState_State_STARTING_VERIFY_PSU_OFF; fault_info_.type = PB_SupervisorState_FaultInfo_FaultType_NONE; snprintf(fault_info_.msg, sizeof(fault_info_.msg), ""); sendState(); // Determine which channels are actually used, based on the power channel mapping function. // (This could technically be determined statically since the mapping is static, but it's // easier to just compute it at runtime) for (uint8_t i = 0; i < NUM_MODULES; i++) { channel_used_[getPowerChannelForModuleIndex(i)] = true; } while (1) { readPower(); updateSplitflapState(); switch (state_) { case PB_SupervisorState_State_STARTING_VERIFY_PSU_OFF: runStateStartingVerifyPsuOff(); break; case PB_SupervisorState_State_STARTING_VERIFY_VOLTAGES: runStateStartingVerifyStartupVoltages(); break; case PB_SupervisorState_State_STARTING_ENABLE_CHANNELS: runStateStartingEnableChannels(); break; case PB_SupervisorState_State_NORMAL: runStateNormal(); break; case PB_SupervisorState_State_FAULT: runStateFault(); break; default: assert(false); } sendState(); updateLeds(); delay(1); } while (1) { delay(1); } } void BaseSupervisorTask::runStateStartingVerifyPsuOff() { // Voltage must be low on all channels for at least 5 seconds before enabling PSU (to avoid fast switching in case of a WDT reset or other crash loop) for (uint8_t i = 0; i < NUM_POWER_CHANNELS; i++) { if (voltage_volts_[i] > MAX_DISABLED_VOLTAGE || current_amps_[i] * 1000 > IDLE_CURRENT_MILLIAMPS) { startup_voltage_low_at_millis_ = millis(); } } if (millis() - startup_voltage_low_at_millis_ > 5000) { serial_task_.log("Startup voltages low = ok. Enabling PSU..."); digitalWrite(BASE_MASTER_EN_PIN, HIGH); state_ = PB_SupervisorState_State_STARTING_VERIFY_VOLTAGES; } } void BaseSupervisorTask::runStateStartingVerifyStartupVoltages() { bool all_ok = true; for (uint8_t i = 0; i < NUM_POWER_CHANNELS; i++) { if (channel_used_[i]) { all_ok &= voltage_volts_[i] >= MIN_RUN_VOLTAGE && voltage_volts_[i] < ABSOLUTE_MAX_VOLTAGE; } else { all_ok &= voltage_volts_[i] < MAX_DISABLED_VOLTAGE; } } if (all_ok) { startup_enable_channel_ = -1; state_ = PB_SupervisorState_State_STARTING_ENABLE_CHANNELS; } } void BaseSupervisorTask::runStateStartingEnableChannels() { if (startup_enable_channel_ == -1) { startup_enable_channel_ = 0; startup_enable_channel_millis_ = millis(); startup_enable_channel_current_settle_count_ = 0; setPowerChannel(0, true); return; } if (millis() - startup_enable_channel_millis_ > 500) { char msg[255]; snprintf(msg, sizeof(msg), "Inrush current didn't settle on power channel %u!", startup_enable_channel_); fault(PB_SupervisorState_FaultInfo_FaultType_INRUSH_CURRENT_NOT_SETTLED, msg); return; } if (current_amps_[startup_enable_channel_] * 1000 < IDLE_CURRENT_MILLIAMPS) { startup_enable_channel_current_settle_count_++; if (startup_enable_channel_current_settle_count_ >= 10) { char msg[255]; snprintf(msg, sizeof(msg), "Current settled on channel %u", startup_enable_channel_); serial_task_.log(msg); // Determine the next channel to enable do { startup_enable_channel_++; } while (startup_enable_channel_ < NUM_POWER_CHANNELS && !channel_used_[startup_enable_channel_]); if (startup_enable_channel_ >= NUM_POWER_CHANNELS) { serial_task_.log("All channels enabled, startup complete!"); state_ = PB_SupervisorState_State_NORMAL; splitflap_task_.resetAll(); return; } startup_enable_channel_millis_ = millis(); startup_enable_channel_current_settle_count_ = 0; setPowerChannel(startup_enable_channel_, true); } } else { startup_enable_channel_current_settle_count_ = 0; } } void BaseSupervisorTask::runStateNormal() { if (!splitflap_state_.loopbacks_ok) { fault(PB_SupervisorState_FaultInfo_FaultType_SPLITFLAP_SHUTDOWN, "Bad loopbacks; shutting down power!"); return; } char msg[255]; uint8_t moving[NUM_POWER_CHANNELS] = {}; uint8_t homing[NUM_POWER_CHANNELS] = {}; for (uint8_t i = 0; i < NUM_MODULES; i++) { uint8_t power_channel = getPowerChannelForModuleIndex(i); if (splitflap_state_.modules[i].moving) { if (splitflap_state_.modules[i].state == State::LOOK_FOR_HOME) { homing[power_channel]++; } else { moving[power_channel]++; } } } for (uint8_t i = 0; i < NUM_POWER_CHANNELS; i++) { if (channel_used_[i]) { if (voltage_volts_[i] < MIN_RUN_VOLTAGE || voltage_volts_[i] > ABSOLUTE_MAX_VOLTAGE || current_amps_[i] * 1000 > ABSOLUTE_MAX_CHANNEL_CURRENT_MA) { snprintf(msg, sizeof(msg), "Bad power on channel %u! %.2fV %.3fA", i, voltage_volts_[i], current_amps_[i]); fault(PB_SupervisorState_FaultInfo_FaultType_OUT_OF_RANGE, msg); return; } float min_expected_channel_current_ma = -5 + (moving[i] + homing[i]) * MIN_MODULE_CURRENT_MA; float max_expected_channel_current_ma = IDLE_CURRENT_MILLIAMPS + homing[i] * MAX_MODULE_CURRENT_HOMING_MA + (moving[i] > 0 ? (moving[i] + 2) : 1) * MAX_MODULE_CURRENT_MOVING_MA; if (current_amps_[i] * 1000 > max_expected_channel_current_ma) { channel_current_out_of_range_count_[i]++; if (channel_current_out_of_range_count_[i] >= CONSECUTIVE_CURRENT_OUT_OF_RANGE_THRESHOLD) { snprintf(msg, sizeof(msg), "Over current on channel %u!\n Expected up to %.3fA\n Actual: %.3fA", i, max_expected_channel_current_ma/1000, current_amps_[i]); fault(PB_SupervisorState_FaultInfo_FaultType_OVER_CURRENT, msg); return; } } else { channel_current_out_of_range_count_[i] = 0; } leds_[LED_CHANNEL_INDEX[i]].setRGB( 0, 30, (millis() / 128) % 2 == 0 && current_amps_[i] * 1000 > IDLE_CURRENT_MILLIAMPS ? 20 + current_amps_[i]*1000 / ABSOLUTE_MAX_CHANNEL_CURRENT_MA * 100 : 0 ); } else { leds_[LED_CHANNEL_INDEX[i]].setRGB(0, 0, 0); if (voltage_volts_[i] > 5 || current_amps_[i] * 1000 > IDLE_CURRENT_MILLIAMPS) { channel_unexpected_power_count_[i] ++; if (channel_unexpected_power_count_[i] >= CONSECUTIVE_UNEXPECTED_POWER_THRESHOLD) { snprintf(msg, sizeof(msg), "Unexpected power on disabled power channel %u! %.2fV\t%.3fA", i, voltage_volts_[i], current_amps_[i]); fault(PB_SupervisorState_FaultInfo_FaultType_UNEXPECTED_POWER, msg); return; } } else { channel_unexpected_power_count_[i] = 0; } } } } void BaseSupervisorTask::runStateFault() { // Nothing to do, and no way to exit (except a reset) } void BaseSupervisorTask::setPowerChannel(uint8_t channel, bool on) { channel_on_[channel] = on; mcp_.digitalWrite(MCP_PIN_CHANNEL_EN[channel], on); leds_[LED_CHANNEL_INDEX[channel]] = on ? CRGB::Green : CRGB::Black; FastLED.show(); } void BaseSupervisorTask::sendState() { bool should_send = false; PB_SupervisorState state = {}; state.state = state_; should_send |= state.state != last_sent_state_.state; state.uptime_millis = millis(); should_send |= state.uptime_millis - last_sent_state_.uptime_millis > 2000; // Send periodically state.power_channels_count = NUM_POWER_CHANNELS; for (uint8_t i = 0; i < NUM_POWER_CHANNELS; i++) { state.power_channels[i].voltage_volts = voltage_volts_[i]; should_send |= fabs(state.power_channels[i].voltage_volts - last_sent_state_.power_channels[i].voltage_volts) > 0.2f; state.power_channels[i].current_amps = current_amps_[i]; should_send |= fabs(state.power_channels[i].current_amps - last_sent_state_.power_channels[i].current_amps) > 0.1f; state.power_channels[i].on = channel_on_[i]; should_send |= state.power_channels[i].on != last_sent_state_.power_channels[i].on; } state.fault_info = fault_info_; state.has_fault_info = true; // Rate limit transmissions if (should_send && state.uptime_millis - last_sent_state_.uptime_millis > 250) { serial_task_.sendSupervisorState(state); last_sent_state_ = state; } } void BaseSupervisorTask::readPower() { for (uint8_t i = 0; i < NUM_POWER_CHANNELS; i++) { voltage_volts_[i] = ina219_[i].getBusVoltage_V(); current_amps_[i] = ina219_[i].getCurrent_mA() / 1000.; // Check for absolute max violations if (state_ != PB_SupervisorState_State_FAULT && ( voltage_volts_[i] > ABSOLUTE_MAX_VOLTAGE || current_amps_[i] * 1000 > ABSOLUTE_MAX_CHANNEL_CURRENT_MA )) { char msg[255]; snprintf(msg, sizeof(msg), "Absolute max exceeded on channel %u. %.2fV %.3fA", i, voltage_volts_[i], current_amps_[i]); fault(PB_SupervisorState_FaultInfo_FaultType_OUT_OF_RANGE, msg); return; } } } void BaseSupervisorTask::updateSplitflapState() { splitflap_state_ = splitflap_task_.getState(); } void BaseSupervisorTask::fault(PB_SupervisorState_FaultInfo_FaultType type, const char* msg) { for (uint8_t i = 0; i < NUM_POWER_CHANNELS; i++) { setPowerChannel(i, false); } digitalWrite(BASE_MASTER_EN_PIN, LOW); state_ = PB_SupervisorState_State_FAULT; strncpy(fault_info_.msg, msg, sizeof(fault_info_.msg)); fault_info_.type = type; fault_info_.ts_millis = millis(); sendState(); splitflap_task_.disableAll(); serial_task_.log(msg); } void BaseSupervisorTask::updateLeds() { CRGB main_status; switch (state_) { case PB_SupervisorState_State_STARTING_VERIFY_PSU_OFF: main_status = CRGB::DarkViolet; break; case PB_SupervisorState_State_STARTING_VERIFY_VOLTAGES: main_status = CRGB::DarkGray; break; case PB_SupervisorState_State_STARTING_ENABLE_CHANNELS: main_status = CRGB::DeepSkyBlue; break; case PB_SupervisorState_State_NORMAL: main_status = CRGB::Green; break; case PB_SupervisorState_State_FAULT: main_status = ((millis() / 250) % 2) ? CRGB::Red : CRGB::Black; break; default: assert(false); } leds_[0] = main_status; FastLED.show(); } ================================================ FILE: firmware/esp32/base/base_supervisor_task.h ================================================ /* Copyright 2021 Scott Bezek and the splitflap contributors 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. */ #pragma once #include #include #include "Adafruit_MCP23017.h" #include "Adafruit_INA219.h" #include "../splitflap/serial_task.h" #include "../core/splitflap_task.h" #include "../core/task.h" #include "base_config.h" class BaseSupervisorTask : public Task { friend class Task; // Allow base Task to invoke protected run() public: BaseSupervisorTask(SplitflapTask& splitflap_task, SerialTask& serial_task, const uint8_t task_core); protected: void run(); private: static uint8_t getPowerChannelForModuleIndex(uint8_t module_index); SplitflapTask& splitflap_task_; SerialTask& serial_task_; CRGB leds_[NUM_LEDS]; Adafruit_MCP23017 mcp_; Adafruit_INA219 ina219_[NUM_POWER_CHANNELS] = { Adafruit_INA219(0x40), Adafruit_INA219(0x41), Adafruit_INA219(0x42), Adafruit_INA219(0x43), Adafruit_INA219(0x44), }; PB_SupervisorState last_sent_state_ = {}; PB_SupervisorState_State state_ = PB_SupervisorState_State_UNKNOWN; PB_SupervisorState_FaultInfo fault_info_; SplitflapState splitflap_state_; float voltage_volts_[NUM_POWER_CHANNELS] = {}; float current_amps_[NUM_POWER_CHANNELS] = {}; bool channel_on_[NUM_POWER_CHANNELS] = {}; bool channel_used_[NUM_POWER_CHANNELS] = {}; bool channel_enabled_[NUM_POWER_CHANNELS] = {}; uint32_t channel_current_out_of_range_count_[NUM_POWER_CHANNELS] = {}; uint8_t channel_unexpected_power_count_[NUM_POWER_CHANNELS] = {}; uint32_t startup_voltage_low_at_millis_ = 0; int8_t startup_enable_channel_ = -1; uint32_t startup_enable_channel_millis_ = 0; uint8_t startup_enable_channel_current_settle_count_ = 0; void runStateStartingVerifyPsuOff(); void runStateStartingVerifyStartupVoltages(); void runStateStartingEnableChannels(); void runStateNormal(); void runStateFault(); void readPower(); void updateSplitflapState(); void fault(PB_SupervisorState_FaultInfo_FaultType type, const char* msg); void updateLeds(); void setPowerChannel(uint8_t channel, bool on); void sendState(); }; ================================================ FILE: firmware/esp32/core/common.h ================================================ /* Copyright 2021 Scott Bezek and the splitflap contributors 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. */ #pragma once #include template < typename T, size_t N > size_t countof( T ( & arr )[ N ] ) { return std::extent< T[ N ] >::value; } ================================================ FILE: firmware/esp32/core/configuration.cpp ================================================ /* Copyright 2024 Scott Bezek and the splitflap contributors 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. */ #include #include "pb_decode.h" #include "pb_encode.h" #include "../proto_gen/splitflap.pb.h" #include "config.h" #include "configuration.h" #include "semaphore_guard.h" static const char* CONFIG_PATH = "/config.pb"; Configuration::Configuration() { mutex_ = xSemaphoreCreateMutex(); assert(mutex_ != NULL); } Configuration::~Configuration() { vSemaphoreDelete(mutex_); } bool Configuration::loadFromDisk() { SemaphoreGuard lock(mutex_); FatGuard fatGuard(logger_); if (!fatGuard.mounted_) { return false; } File f = FFat.open(CONFIG_PATH); if (!f) { log("Failed to read config file"); return false; } size_t read = f.readBytes((char*)buffer_, sizeof(buffer_)); f.close(); pb_istream_t stream = pb_istream_from_buffer(buffer_, read); if (!pb_decode(&stream, PB_PersistentConfiguration_fields, &pb_buffer_)) { char buf[200]; snprintf(buf, sizeof(buf), "Decoding failed: %s", PB_GET_ERROR(&stream)); log(buf); pb_buffer_ = {}; return false; } if (pb_buffer_.version != PERSISTENT_CONFIGURATION_VERSION) { char buf[200]; snprintf(buf, sizeof(buf), "Invalid config version. Expected %u, received %u", PERSISTENT_CONFIGURATION_VERSION, pb_buffer_.version); log(buf); pb_buffer_ = {}; return false; } if (pb_buffer_.num_flaps != NUM_FLAPS) { char buf[200]; snprintf(buf, sizeof(buf), "Invalid config - stored num_flaps was %u but this firmware expects %u. Ignoring saved config.", pb_buffer_.num_flaps, NUM_FLAPS); log(buf); pb_buffer_ = {}; return false; } loaded_ = true; char buf[200]; snprintf( buf, sizeof(buf), "Loaded %u offsets", pb_buffer_.module_offset_steps_count ); log(buf); uint8_t previewN = min(pb_buffer_.module_offset_steps_count, static_cast(6)); snprintf( buf, sizeof(buf), "First %u offsets:", previewN ); log(buf); for (uint8_t i = 0; i < previewN; i++) { snprintf( buf, sizeof(buf), " %u: %u", i, pb_buffer_.module_offset_steps[i] ); log(buf); } return true; } bool Configuration::saveToDisk() { SemaphoreGuard lock(mutex_); pb_ostream_t stream = pb_ostream_from_buffer(buffer_, sizeof(buffer_)); pb_buffer_.version = PERSISTENT_CONFIGURATION_VERSION; if (!pb_encode(&stream, PB_PersistentConfiguration_fields, &pb_buffer_)) { char buf[200]; snprintf(buf, sizeof(buf), "Encoding failed: %s", PB_GET_ERROR(&stream)); log(buf); return false; } FatGuard fatGuard(logger_); if (!fatGuard.mounted_) { return false; } File f = FFat.open(CONFIG_PATH, FILE_WRITE); if (!f) { log("Failed to open config file"); return false; } size_t written = f.write(buffer_, stream.bytes_written); f.close(); char buf[20]; snprintf(buf, sizeof(buf), "Wrote %d bytes", written); log(buf); if (written != stream.bytes_written) { log("Failed to write all bytes to file"); return false; } return true; } PB_PersistentConfiguration Configuration::get() { SemaphoreGuard lock(mutex_); if (!loaded_) { return PB_PersistentConfiguration(); } return pb_buffer_; } bool Configuration::setModuleOffsetsAndSave(uint16_t offsets[NUM_MODULES]) { { SemaphoreGuard lock(mutex_); pb_buffer_.num_flaps = NUM_FLAPS; pb_buffer_.module_offset_steps_count = NUM_MODULES; for (uint8_t i = 0; i < NUM_MODULES; i++) { pb_buffer_.module_offset_steps[i] = offsets[i]; } } return saveToDisk(); } void Configuration::setLogger(Logger* logger) { logger_ = logger; } void Configuration::log(const char* msg) { if (logger_ != nullptr) { logger_->log(msg); } } ================================================ FILE: firmware/esp32/core/configuration.h ================================================ /* Copyright 2024 Scott Bezek and the splitflap contributors 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. */ #pragma once #include #include #include "../proto_gen/splitflap.pb.h" #include "logger.h" const uint32_t PERSISTENT_CONFIGURATION_VERSION = 1; class Configuration { public: Configuration(); ~Configuration(); void setLogger(Logger* logger); bool loadFromDisk(); bool saveToDisk(); PB_PersistentConfiguration get(); bool setModuleOffsetsAndSave(uint16_t offsets[NUM_MODULES]); private: SemaphoreHandle_t mutex_; Logger* logger_ = nullptr; bool loaded_ = false; PB_PersistentConfiguration pb_buffer_ = {}; uint8_t buffer_[PB_PersistentConfiguration_size]; void log(const char* msg); }; class FatGuard { public: FatGuard(Logger* logger) : logger_(logger) { if (!FFat.begin(true)) { if (logger_ != nullptr) { logger_->log("Failed to mount FFat"); } return; } if (logger_ != nullptr) { logger_->log("Mounted FFat"); } mounted_ = true; } ~FatGuard() { if (mounted_) { FFat.end(); if (logger_ != nullptr) { logger_->log("Unmounted FFat"); } } } FatGuard(FatGuard const&)=delete; FatGuard& operator=(FatGuard const&)=delete; bool mounted_ = false; private: Logger* logger_; }; ================================================ FILE: firmware/esp32/core/logger.h ================================================ /* Copyright 2021 Scott Bezek and the splitflap contributors 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. */ #pragma once class Logger { public: Logger() {}; virtual ~Logger() {}; virtual void log(const char* msg) = 0; }; ================================================ FILE: firmware/esp32/core/recursive_semaphore_guard.h ================================================ /* Copyright 2020 Scott Bezek and the splitflap contributors 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. */ #pragma once #include class RecursiveSemaphoreGuard { public: RecursiveSemaphoreGuard(SemaphoreHandle_t handle) : handle_{handle} { xSemaphoreTakeRecursive(handle_, portMAX_DELAY); } ~RecursiveSemaphoreGuard() { xSemaphoreGiveRecursive(handle_); } RecursiveSemaphoreGuard(RecursiveSemaphoreGuard const&)=delete; RecursiveSemaphoreGuard& operator=(RecursiveSemaphoreGuard const&)=delete; private: SemaphoreHandle_t handle_; }; ================================================ FILE: firmware/esp32/core/semaphore_guard.h ================================================ /* Copyright 2020 Scott Bezek and the splitflap contributors 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. */ #pragma once #include class SemaphoreGuard { public: SemaphoreGuard(SemaphoreHandle_t handle) : handle_{handle} { xSemaphoreTake(handle_, portMAX_DELAY); } ~SemaphoreGuard() { xSemaphoreGive(handle_); } SemaphoreGuard(SemaphoreGuard const&)=delete; SemaphoreGuard& operator=(SemaphoreGuard const&)=delete; private: SemaphoreHandle_t handle_; }; ================================================ FILE: firmware/esp32/core/splitflap_task.cpp ================================================ /* Copyright 2021 Scott Bezek and the splitflap contributors 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. */ #include // General splitflap includes #include "config.h" #include "splitflap_module.h" #include "spi_io_config.h" // ESP32-specific includes #include "semaphore_guard.h" #include "task.h" #include "splitflap_task.h" static_assert(QCMD_FLAP + NUM_FLAPS <= 255, "Too many flaps to fit in uint8_t command structure"); SplitflapTask::SplitflapTask(const uint8_t task_core, const LedMode led_mode) : Task("Splitflap", 4096, 1, task_core), led_mode_(led_mode), state_semaphore_(xSemaphoreCreateMutex()), configuration_semaphore_(xSemaphoreCreateMutex()) { assert(state_semaphore_ != NULL); xSemaphoreGive(state_semaphore_); assert(configuration_semaphore_ != NULL); xSemaphoreGive(configuration_semaphore_); queue_ = xQueueCreate(5, sizeof(Command)); assert(queue_ != NULL); } SplitflapTask::~SplitflapTask() { if (queue_ != NULL) { vQueueDelete(queue_); } if (state_semaphore_ != NULL) { vSemaphoreDelete(state_semaphore_); } if (configuration_semaphore_ != NULL) { vSemaphoreDelete(configuration_semaphore_); } } void SplitflapTask::run() { esp_err_t result = esp_task_wdt_add(NULL); ESP_ERROR_CHECK(result); initialize_modules(); // Initialize shift registers before turning on shift register output-enable motor_sensor_io(); #ifdef OUTPUT_ENABLE_PIN pinMode(OUTPUT_ENABLE_PIN, OUTPUT); digitalWrite(OUTPUT_ENABLE_PIN, LOW); #endif #if (defined(CHAINLINK) && !defined(CHAINLINK_DRIVER_TESTER)) #if CHAINLINK_ENFORCE_LOOPBACKS bool loopback_result[NUM_LOOPBACKS][NUM_LOOPBACKS]; bool loopback_off_result[NUM_LOOPBACKS]; bool loopback_success = chainlink_test_all_loopbacks(loopback_result, loopback_off_result); if (!loopback_success) { for (uint8_t i = 0; i < NUM_LOOPBACKS; i++) { for (uint8_t j = 0; j < NUM_LOOPBACKS; j++) { if (!loopback_result[i][j]) { char buffer[200] = {}; snprintf(buffer, sizeof(buffer), "Loopback ERROR. Set output %u but read incorrect value at input %u", i, j); log(buffer); } } } for (uint8_t j = 0; j < NUM_LOOPBACKS; j++) { if (!loopback_off_result[j]) { char buffer[200] = {}; snprintf(buffer, sizeof(buffer), "Loopback ERROR. Loopback %u was set when all outputs off - should have been 0", j); log(buffer); } } disableAll(); } #else loopback_all_ok_ = true; #endif if (led_mode_ == LedMode::AUTO) { for (uint8_t i = 0; i < NUM_MODULES; i++) { chainlink_set_led(i, 1); motor_sensor_io(); delay(10); chainlink_set_led(i, 0); motor_sensor_io(); } result = esp_task_wdt_reset(); ESP_ERROR_CHECK(result); } #endif for (uint8_t i = 0; i < NUM_MODULES; i++) { modules[i]->Init(); #if !defined(CHAINLINK_DRIVER_TESTER) && !defined(CHAINLINK_BASE) modules[i]->FindAndRecalibrateHome(); #endif } while(1) { processQueue(); runUpdate(); result = esp_task_wdt_reset(); ESP_ERROR_CHECK(result); } } void SplitflapTask::processQueue() { if (xQueueReceive(queue_, &queue_receive_buffer_, 0) == pdTRUE) { switch (queue_receive_buffer_.command_type) { case CommandType::MODULES: { uint8_t* data = queue_receive_buffer_.data.module_command; bool any_leds = false; for (uint8_t i = 0; i < NUM_MODULES; i++) { switch (data[i]) { case QCMD_NO_OP: // No-op break; case QCMD_RESET_AND_HOME: modules[i]->ResetState(); modules[i]->FindAndRecalibrateHome(); break; case QCMD_LED_ON: any_leds = true; #ifdef CHAINLINK chainlink_set_led(i, true); #endif break; case QCMD_LED_OFF: any_leds = true; #ifdef CHAINLINK chainlink_set_led(i, false); #endif break; case QCMD_DISABLE: modules[i]->Disable(); break; case QCMD_INCR_OFFSET_TENTH: modules[i]->IncreaseOffset(1); break; case QCMD_INCR_OFFSET_HALF: modules[i]->IncreaseOffset(5); break; case QCMD_SET_OFFSET: modules[i]->SetOffset(); break; default: assert(data[i] >= QCMD_FLAP && data[i] < QCMD_FLAP + NUM_FLAPS); modules[i]->GoToFlapIndex(data[i] - QCMD_FLAP); break; } } if (any_leds) { motor_sensor_io(); } break; } case CommandType::SENSOR_TEST_SET: sensor_test_ = true; break; case CommandType::SENSOR_TEST_CLEAR: sensor_test_ = false; break; case CommandType::CONFIG: { ModuleConfigs configs = queue_receive_buffer_.data.module_configs; for (uint8_t i = 0; i < NUM_MODULES; i++) { ModuleConfig config = configs.config[i]; if (config.reset_nonce != current_configs_.config[i].reset_nonce) { modules[i]->ResetErrorCounters(); modules[i]->FindAndRecalibrateHome(); } if (config.target_flap_index != current_configs_.config[i].target_flap_index || config.target_flap_index != modules[i]->GetTargetFlapIndex() || config.movement_nonce != current_configs_.config[i].movement_nonce) { if (config.target_flap_index >= NUM_FLAPS) { char buffer[200] = {}; snprintf(buffer, sizeof(buffer), "Invalid flap index (%u) specified for module %u", config.target_flap_index, i); log(buffer); } else { modules[i]->GoToFlapIndex(config.target_flap_index); } } } current_configs_ = configs; break; } case CommandType::SAVE_ALL_OFFSETS: { char buffer[200] = {}; uint16_t offsets[NUM_MODULES]; for (uint8_t i = 0; i < NUM_MODULES; i++) { // Make sure all modules are stopped, since writing to config may take a while if (modules[i]->current_accel_step != 0) { snprintf(buffer, sizeof(buffer), "Can't save offsets; module %u isn't idle", i); log(buffer); return; } offsets[i] = modules[i]->GetOffset(); } // Write to configuration Configuration* configuration; { SemaphoreGuard lock(configuration_semaphore_); configuration = configuration_; } if (configuration != nullptr) { log("Saving calibration..."); bool success = configuration->setModuleOffsetsAndSave(offsets); if (success) { log("SUCCESS - saved calibration!"); } else { log("ERROR - failed to save calibration"); } } break; } case CommandType::RESTORE_ALL_OFFSETS: for (uint8_t i = 0; i < NUM_MODULES; i++) { uint16_t offset = queue_receive_buffer_.data.module_offsets[i]; modules[i]->RestoreOffset(offset); } break; default: { log("Unknown command"); break; } } } } void SplitflapTask::runUpdate() { boolean all_idle = true; uint32_t iterationStartMillis = millis(); uint32_t flashStep = iterationStartMillis / 200; uint32_t flashGroup = (flashStep % 16) / 2; uint8_t flashPhase = flashStep % 2; if (sensor_test_ && all_stopped_) { // Read sensor state motor_sensor_io(); #ifdef CHAINLINK if (led_mode_ == LedMode::AUTO) { for (uint8_t i = 0; i < NUM_MODULES; i++) { chainlink_set_led(i, modules[i]->GetHomeState()); } // Output LED state motor_sensor_io(); } #endif } else { all_stopped_ = true; for (uint8_t i = 0; i < NUM_MODULES; i++) { modules[i]->Update(); bool is_idle = modules[i]->state == PANIC || modules[i]->state == STATE_DISABLED || modules[i]->state == LOOK_FOR_HOME || modules[i]->state == SENSOR_ERROR || (modules[i]->state == NORMAL && modules[i]->current_accel_step == 0); bool is_stopped = modules[i]->state == PANIC || modules[i]->state == STATE_DISABLED || modules[i]->current_accel_step == 0; #ifdef CHAINLINK if (led_mode_ == LedMode::AUTO) { chainlink_set_led(i, flashGroup < modules[i]->state && flashPhase == 0); } #endif all_idle &= is_idle; all_stopped_ &= is_stopped; } motor_sensor_io(); } #if defined(CHAINLINK) && CHAINLINK_ENFORCE_LOOPBACKS // We test loopbacks iteratively, so as not to waste too many cycles/IO-roundtrips all at once. There are // two levels of iteration - loopback_step_index_ tracks the small intermediate steps of testing a single // loopback, and loopback_current_out_index_ tracks which loopback we're currently testing. loopback_step_index_++; if (loopback_step_index_ == 1) { chainlink_set_loopback(loopback_current_out_index_); } else if (loopback_step_index_ == 3) { bool ok = chainlink_validate_loopback(loopback_current_out_index_, nullptr); loopback_current_ok_ &= ok; if (!ok && loopback_all_ok_) { // Publish failures immediately loopback_all_ok_ = false; log("Loopback ERROR!"); disableAll(); } } else if (loopback_step_index_ == 50) { loopback_step_index_ = 0; loopback_current_out_index_ += 1; // If we've iterated through all loopbacks, save the results of this run and restart // from the first loopback again. if (loopback_current_out_index_ >= NUM_LOOPBACKS) { if (loopback_current_ok_ && !loopback_all_ok_) { log("Loopback is ok!"); } loopback_all_ok_ = loopback_current_ok_; loopback_current_ok_ = true; loopback_current_out_index_ = 0; } } // TODO: handle loopback failures #endif updateStateCache(); } int8_t SplitflapTask::findFlapIndex(uint8_t character) { for (int8_t i = 0; i < NUM_FLAPS; i++) { if (character == flaps[i]) { return i; } } return -1; } void SplitflapTask::updateStateCache() { SplitflapState new_state; new_state.mode = sensor_test_ ? SplitflapMode::MODE_SENSOR_TEST : SplitflapMode::MODE_RUN; for (uint8_t i = 0; i < NUM_MODULES; i++) { new_state.modules[i].flap_index = modules[i]->GetCurrentFlapIndex(); new_state.modules[i].state = modules[i]->state; new_state.modules[i].moving = modules[i]->current_accel_step > 0; new_state.modules[i].home_state = modules[i]->GetHomeState(); new_state.modules[i].count_missed_home = modules[i]->count_missed_home; new_state.modules[i].count_unexpected_home = modules[i]->count_unexpected_home; } #ifdef CHAINLINK new_state.loopbacks_ok = loopback_all_ok_; #endif if (memcmp(&state_cache_, &new_state, sizeof(state_cache_))) { SemaphoreGuard lock(state_semaphore_); memcpy(&state_cache_, &new_state, sizeof(state_cache_)); } } void SplitflapTask::log(const char* msg) { if (logger_ != nullptr) { logger_->log(msg); } } void SplitflapTask::showString(const char* str, uint8_t length, bool force_full_rotation, bool default_unspecified_home) { Command command = {}; command.command_type = CommandType::MODULES; uint8_t num_to_update = default_unspecified_home ? NUM_MODULES : length; for (uint8_t i = 0; i < num_to_update && i < NUM_MODULES; i++) { int8_t index = i >= length ? 0 : findFlapIndex(str[i]); if (index != -1) { if (force_full_rotation || index != modules[i]->GetTargetFlapIndex()) { command.data.module_command[i] = QCMD_FLAP + index; } } } assert(xQueueSendToBack(queue_, &command, portMAX_DELAY) == pdTRUE); } void SplitflapTask::resetAll() { Command command = {}; command.command_type = CommandType::MODULES; for (uint8_t i = 0; i < NUM_MODULES; i++) { command.data.module_command[i] = QCMD_RESET_AND_HOME; } assert(xQueueSendToBack(queue_, &command, portMAX_DELAY) == pdTRUE); } void SplitflapTask::disableAll() { Command command = {}; command.command_type = CommandType::MODULES; for (uint8_t i = 0; i < NUM_MODULES; i++) { command.data.module_command[i] = QCMD_DISABLE; } assert(xQueueSendToBack(queue_, &command, portMAX_DELAY) == pdTRUE); } void SplitflapTask::setLed(const uint8_t id, const bool on) { assert(led_mode_ == LedMode::MANUAL); Command command = {}; command.command_type = CommandType::MODULES; command.data.module_command[id] = on ? QCMD_LED_ON : QCMD_LED_OFF; assert(xQueueSendToBack(queue_, &command, portMAX_DELAY) == pdTRUE); } void SplitflapTask::setSensorTest(bool sensor_test) { Command command = {}; command.command_type = sensor_test ? CommandType::SENSOR_TEST_SET : CommandType::SENSOR_TEST_CLEAR; assert(xQueueSendToBack(queue_, &command, portMAX_DELAY) == pdTRUE); } SplitflapState SplitflapTask::getState() { SemaphoreGuard lock(state_semaphore_); return state_cache_; } void SplitflapTask::increaseOffsetTenth(const uint8_t id) { Command command = {}; command.command_type = CommandType::MODULES; command.data.module_command[id] = QCMD_INCR_OFFSET_TENTH; assert(xQueueSendToBack(queue_, &command, portMAX_DELAY) == pdTRUE); } void SplitflapTask::increaseOffsetHalf(const uint8_t id) { Command command = {}; command.command_type = CommandType::MODULES; command.data.module_command[id] = QCMD_INCR_OFFSET_HALF; assert(xQueueSendToBack(queue_, &command, portMAX_DELAY) == pdTRUE); } void SplitflapTask::setOffset(const uint8_t id) { Command command = {}; command.command_type = CommandType::MODULES; command.data.module_command[id] = QCMD_SET_OFFSET; assert(xQueueSendToBack(queue_, &command, portMAX_DELAY) == pdTRUE); } void SplitflapTask::setConfiguration(Configuration* configuration) { SemaphoreGuard lock(configuration_semaphore_); configuration_ = configuration; } void SplitflapTask::setLogger(Logger* logger) { logger_ = logger; } void SplitflapTask::postRawCommand(Command command) { assert(xQueueSendToBack(queue_, &command, portMAX_DELAY) == pdTRUE); } void SplitflapTask::saveAllOffsets() { Command command = {}; command.command_type = CommandType::SAVE_ALL_OFFSETS; assert(xQueueSendToBack(queue_, &command, portMAX_DELAY) == pdTRUE); } void SplitflapTask::restoreAllOffsets(uint16_t offsets[NUM_MODULES]) { Command command = {}; command.command_type = CommandType::RESTORE_ALL_OFFSETS; for (uint8_t i = 0; i < NUM_MODULES; i++) { command.data.module_offsets[i] = offsets[i]; } assert(xQueueSendToBack(queue_, &command, portMAX_DELAY) == pdTRUE); } ================================================ FILE: firmware/esp32/core/splitflap_task.h ================================================ /* Copyright 2020 Scott Bezek and the splitflap contributors 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. */ #pragma once #include "config.h" #include "logger.h" #include "splitflap_module_data.h" #include "configuration.h" #include "task.h" enum class SplitflapMode { MODE_RUN, MODE_SENSOR_TEST, }; struct SplitflapModuleState { State state; uint8_t flap_index; bool moving; bool home_state; uint8_t count_unexpected_home; uint8_t count_missed_home; bool operator==(const SplitflapModuleState& other) { return state == other.state && flap_index == other.flap_index && moving == other.moving && home_state == other.home_state && count_unexpected_home == other.count_unexpected_home && count_missed_home == other.count_missed_home; } bool operator!=(const SplitflapModuleState& other) { return !(*this == other); } }; struct SplitflapState { SplitflapMode mode; SplitflapModuleState modules[NUM_MODULES]; #ifdef CHAINLINK bool loopbacks_ok = false; #endif bool operator==(const SplitflapState& other) { for (uint8_t i = 0; i < NUM_MODULES; i++) { if (modules[i] != other.modules[i]) { return false; } } return mode == other.mode #ifdef CHAINLINK && loopbacks_ok == other.loopbacks_ok #endif ; } bool operator!=(const SplitflapState& other) { return !(*this == other); } }; enum class LedMode { AUTO, MANUAL, }; enum class CommandType { MODULES, SENSOR_TEST_SET, SENSOR_TEST_CLEAR, CONFIG, SAVE_ALL_OFFSETS, RESTORE_ALL_OFFSETS, }; struct ModuleConfig { uint8_t target_flap_index; uint8_t movement_nonce; uint8_t reset_nonce; }; struct ModuleConfigs { ModuleConfig config[NUM_MODULES]; }; struct Command { CommandType command_type; union CommandData { uint8_t module_command[NUM_MODULES]; ModuleConfigs module_configs; uint16_t module_offsets[NUM_MODULES]; }; CommandData data; }; #define QCMD_NO_OP 0 #define QCMD_RESET_AND_HOME 1 #define QCMD_LED_ON 2 #define QCMD_LED_OFF 3 #define QCMD_DISABLE 4 #define QCMD_INCR_OFFSET_TENTH 5 #define QCMD_INCR_OFFSET_HALF 6 #define QCMD_SET_OFFSET 7 #define QCMD_FLAP 99 class SplitflapTask : public Task { friend class Task; // Allow base Task to invoke protected run() public: SplitflapTask(const uint8_t task_core, const LedMode led_mode); ~SplitflapTask(); SplitflapState getState(); void showString(const char *str, uint8_t length, bool force_full_rotation = FORCE_FULL_ROTATION, bool default_unspecified_home = false); void resetAll(); void disableAll(); void setLed(uint8_t id, bool on); void setSensorTest(bool sensor_test); void increaseOffsetTenth(uint8_t id); void increaseOffsetHalf(uint8_t id); void setOffset(uint8_t id); void saveAllOffsets(); void restoreAllOffsets(uint16_t offsets[NUM_MODULES]); void setLogger(Logger* logger); void postRawCommand(Command command); void setConfiguration(Configuration* configuration); protected: void run(); private: const LedMode led_mode_; const SemaphoreHandle_t state_semaphore_; const SemaphoreHandle_t configuration_semaphore_; QueueHandle_t queue_; Command queue_receive_buffer_ = {}; Logger* logger_; // Protected by configuration_semaphore_ Configuration* configuration_; bool all_stopped_ = true; uint32_t last_sensor_print_millis_ = 0; bool sensor_test_ = SENSOR_TEST; ModuleConfigs current_configs_ = {}; #ifdef CHAINLINK uint8_t loopback_current_out_index_ = 0; uint16_t loopback_step_index_ = 0; bool loopback_current_ok_ = true; bool loopback_all_ok_ = false; #endif // Cached state. Protected by state_semaphore_ SplitflapState state_cache_; void updateStateCache(); void processQueue(); void runUpdate(); void sensorTestUpdate(); void log(const char* msg); int8_t findFlapIndex(uint8_t character); }; ================================================ FILE: firmware/esp32/core/task.h ================================================ /* Copyright 2020 Scott Bezek and the splitflap contributors 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. */ #pragma once #include // Static polymorphic abstract base class for a FreeRTOS task using CRTP pattern. Concrete implementations // should implement a run() method. // Inspired by https://fjrg76.wordpress.com/2018/05/23/objectifying-task-creation-in-freertos-ii/ template class Task { public: Task(const char* name, uint32_t stackDepth, UBaseType_t priority, const BaseType_t coreId = tskNO_AFFINITY) : name { name }, stackDepth {stackDepth}, priority { priority }, coreId { coreId } {} virtual ~Task() {}; TaskHandle_t getHandle() { return taskHandle; } void begin() { BaseType_t result = xTaskCreatePinnedToCore(taskFunction, name, stackDepth, this, priority, &taskHandle, coreId); assert("Failed to create task" && result == pdPASS); } private: static void taskFunction(void* params) { T* t = static_cast(params); t->run(); } const char* name; uint32_t stackDepth; UBaseType_t priority; TaskHandle_t taskHandle; const BaseType_t coreId; }; ================================================ FILE: firmware/esp32/core/uart_stream.cpp ================================================ /* Copyright 2021 Scott Bezek and the splitflap contributors 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. */ #include #include "config.h" #include "uart_stream.h" UartStream::UartStream() : Stream() { } void UartStream::begin() { uart_config_t conf; conf.baud_rate = MONITOR_SPEED; conf.data_bits = UART_DATA_8_BITS; conf.parity = UART_PARITY_DISABLE; conf.stop_bits = UART_STOP_BITS_1; conf.flow_ctrl = UART_HW_FLOWCTRL_DISABLE; conf.rx_flow_ctrl_thresh = 0; conf.use_ref_tick = false; assert(uart_param_config(uart_port_, &conf) == ESP_OK); assert(uart_driver_install(uart_port_, 32000, 32000, 0, NULL, 0) == ESP_OK); } int UartStream::peek() { return -1; } int UartStream::available() { size_t size = 0; assert(uart_get_buffered_data_len(uart_port_, &size) == ESP_OK); return size; } int UartStream::read() { uint8_t b; int res = uart_read_bytes(uart_port_, &b, 1, 0); return res != 1 ? -1 : b; } void UartStream::flush() { } size_t UartStream::write(uint8_t b) { return uart_write_bytes(uart_port_, (char*)&b, 1); } size_t UartStream::write(const uint8_t *buffer, size_t size) { return uart_write_bytes(uart_port_, (const char*)buffer, size); } ================================================ FILE: firmware/esp32/core/uart_stream.h ================================================ /* Copyright 2021 Scott Bezek and the splitflap contributors 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. */ #pragma once #include #include /** * Implementation of an Arduino Stream for UART serial communications using the esp uart driver * directly, rather than the Arduino HAL which has a small fixed underlying rx FIFO size and * potentially other issues that cause dropped bytes at high speeds/bursts. * * This is not a full or optimized implementation; just the minimal necessary for this project. */ class UartStream : public Stream { public: UartStream(); void begin(); // Stream methods int available() override; int read() override; int peek() override; void flush() override; // Print methods size_t write(uint8_t b) override; size_t write(const uint8_t *buffer, size_t size) override; private: const uart_port_t uart_port_ = UART_NUM_0; }; ================================================ FILE: firmware/esp32/proto_gen/splitflap.pb.c ================================================ /* Automatically generated nanopb constant definitions */ /* Generated by nanopb-0.4.6-dev */ #include "splitflap.pb.h" #if PB_PROTO_HEADER_VERSION != 40 #error Regenerate this file with the current version of nanopb generator. #endif PB_BIND(PB_SplitflapState, PB_SplitflapState, 4) PB_BIND(PB_SplitflapState_ModuleState, PB_SplitflapState_ModuleState, AUTO) PB_BIND(PB_Log, PB_Log, 2) PB_BIND(PB_Ack, PB_Ack, AUTO) PB_BIND(PB_SupervisorState, PB_SupervisorState, 2) PB_BIND(PB_SupervisorState_PowerChannelState, PB_SupervisorState_PowerChannelState, AUTO) PB_BIND(PB_SupervisorState_FaultInfo, PB_SupervisorState_FaultInfo, 2) PB_BIND(PB_GeneralState, PB_GeneralState, AUTO) PB_BIND(PB_GeneralState_BuildInfo, PB_GeneralState_BuildInfo, AUTO) PB_BIND(PB_FromSplitflap, PB_FromSplitflap, 4) PB_BIND(PB_SplitflapCommand, PB_SplitflapCommand, 2) PB_BIND(PB_SplitflapCommand_ModuleCommand, PB_SplitflapCommand_ModuleCommand, AUTO) PB_BIND(PB_SplitflapConfig, PB_SplitflapConfig, 2) PB_BIND(PB_SplitflapConfig_ModuleConfig, PB_SplitflapConfig_ModuleConfig, AUTO) PB_BIND(PB_RequestState, PB_RequestState, AUTO) PB_BIND(PB_ToSplitflap, PB_ToSplitflap, 2) PB_BIND(PB_PersistentConfiguration, PB_PersistentConfiguration, 2) ================================================ FILE: firmware/esp32/proto_gen/splitflap.pb.h ================================================ /* Automatically generated nanopb header */ /* Generated by nanopb-0.4.6-dev */ #ifndef PB_PB_SPLITFLAP_PB_H_INCLUDED #define PB_PB_SPLITFLAP_PB_H_INCLUDED #include #if PB_PROTO_HEADER_VERSION != 40 #error Regenerate this file with the current version of nanopb generator. #endif /* Enum definitions */ typedef enum _PB_SplitflapState_ModuleState_State { PB_SplitflapState_ModuleState_State_NORMAL = 0, PB_SplitflapState_ModuleState_State_LOOK_FOR_HOME = 1, PB_SplitflapState_ModuleState_State_SENSOR_ERROR = 2, PB_SplitflapState_ModuleState_State_PANIC = 3, PB_SplitflapState_ModuleState_State_STATE_DISABLED = 4 } PB_SplitflapState_ModuleState_State; typedef enum _PB_SupervisorState_State { PB_SupervisorState_State_UNKNOWN = 0, PB_SupervisorState_State_STARTING_VERIFY_PSU_OFF = 1, PB_SupervisorState_State_STARTING_VERIFY_VOLTAGES = 2, PB_SupervisorState_State_STARTING_ENABLE_CHANNELS = 3, PB_SupervisorState_State_NORMAL = 4, PB_SupervisorState_State_FAULT = 5 } PB_SupervisorState_State; typedef enum _PB_SupervisorState_FaultInfo_FaultType { PB_SupervisorState_FaultInfo_FaultType_UNKNOWN = 0, PB_SupervisorState_FaultInfo_FaultType_NONE = 1, PB_SupervisorState_FaultInfo_FaultType_INRUSH_CURRENT_NOT_SETTLED = 2, PB_SupervisorState_FaultInfo_FaultType_SPLITFLAP_SHUTDOWN = 3, PB_SupervisorState_FaultInfo_FaultType_OUT_OF_RANGE = 4, PB_SupervisorState_FaultInfo_FaultType_OVER_CURRENT = 5, PB_SupervisorState_FaultInfo_FaultType_UNEXPECTED_POWER = 6 } PB_SupervisorState_FaultInfo_FaultType; typedef enum _PB_SplitflapCommand_ModuleCommand_Action { PB_SplitflapCommand_ModuleCommand_Action_NO_OP = 0, PB_SplitflapCommand_ModuleCommand_Action_GO_TO_FLAP = 1, PB_SplitflapCommand_ModuleCommand_Action_RESET_AND_HOME = 2, PB_SplitflapCommand_ModuleCommand_Action_INCREASE_OFFSET_TENTH = 90, PB_SplitflapCommand_ModuleCommand_Action_INCREASE_OFFSET_HALF = 91, PB_SplitflapCommand_ModuleCommand_Action_SET_OFFSET = 92 } PB_SplitflapCommand_ModuleCommand_Action; /* Struct definitions */ typedef struct _PB_RequestState { char dummy_field; } PB_RequestState; /* * Chainlink Base state -- only reported by Chainlink Base firmware, NOT standard Chainlink firmware */ typedef struct _PB_Ack { uint32_t nonce; } PB_Ack; typedef struct _PB_GeneralState_BuildInfo { char git_hash[91]; char build_date[13]; char build_os[13]; } PB_GeneralState_BuildInfo; typedef struct _PB_Log { char msg[256]; } PB_Log; typedef struct _PB_PersistentConfiguration { uint32_t version; uint32_t num_flaps; pb_size_t module_offset_steps_count; uint16_t module_offset_steps[255]; } PB_PersistentConfiguration; typedef struct _PB_SplitflapCommand_ModuleCommand { PB_SplitflapCommand_ModuleCommand_Action action; uint8_t param; } PB_SplitflapCommand_ModuleCommand; typedef struct _PB_SplitflapConfig_ModuleConfig { uint8_t target_flap_index; uint8_t movement_nonce; uint8_t reset_nonce; } PB_SplitflapConfig_ModuleConfig; typedef struct _PB_SplitflapState_ModuleState { PB_SplitflapState_ModuleState_State state; uint8_t flap_index; bool moving; bool home_state; uint8_t count_unexpected_home; uint8_t count_missed_home; } PB_SplitflapState_ModuleState; typedef struct _PB_SupervisorState_FaultInfo { PB_SupervisorState_FaultInfo_FaultType type; char msg[256]; uint32_t ts_millis; } PB_SupervisorState_FaultInfo; typedef struct _PB_SupervisorState_PowerChannelState { float voltage_volts; float current_amps; bool on; } PB_SupervisorState_PowerChannelState; typedef PB_BYTES_ARRAY_T(80) PB_GeneralState_flap_character_set_t; typedef struct _PB_GeneralState { uint16_t serial_protocol_version; uint32_t uptime_millis; bool has_build_info; PB_GeneralState_BuildInfo build_info; PB_GeneralState_flap_character_set_t flap_character_set; } PB_GeneralState; /* * Non-volatile on-device storage schema */ typedef struct _PB_SplitflapCommand { pb_size_t modules_count; PB_SplitflapCommand_ModuleCommand modules[255]; bool save_all_offsets; } PB_SplitflapCommand; typedef struct _PB_SplitflapConfig { pb_size_t modules_count; PB_SplitflapConfig_ModuleConfig modules[255]; } PB_SplitflapConfig; typedef struct _PB_SplitflapState { pb_size_t modules_count; PB_SplitflapState_ModuleState modules[255]; bool loopbacks_ok; } PB_SplitflapState; /* * Chainlink general state, reported infrequently -- only reported by standard Chainlink firmware, NOT Chainlink Base firmware */ typedef struct _PB_SupervisorState { uint32_t uptime_millis; PB_SupervisorState_State state; pb_size_t power_channels_count; PB_SupervisorState_PowerChannelState power_channels[5]; bool has_fault_info; PB_SupervisorState_FaultInfo fault_info; } PB_SupervisorState; typedef struct _PB_FromSplitflap { pb_size_t which_payload; union { PB_SplitflapState splitflap_state; PB_Log log; PB_Ack ack; PB_SupervisorState supervisor_state; PB_GeneralState general_state; } payload; } PB_FromSplitflap; typedef struct _PB_ToSplitflap { uint32_t nonce; pb_size_t which_payload; union { PB_SplitflapCommand splitflap_command; PB_SplitflapConfig splitflap_config; PB_RequestState request_state; } payload; } PB_ToSplitflap; /* Helper constants for enums */ #define _PB_SplitflapState_ModuleState_State_MIN PB_SplitflapState_ModuleState_State_NORMAL #define _PB_SplitflapState_ModuleState_State_MAX PB_SplitflapState_ModuleState_State_STATE_DISABLED #define _PB_SplitflapState_ModuleState_State_ARRAYSIZE ((PB_SplitflapState_ModuleState_State)(PB_SplitflapState_ModuleState_State_STATE_DISABLED+1)) #define _PB_SupervisorState_State_MIN PB_SupervisorState_State_UNKNOWN #define _PB_SupervisorState_State_MAX PB_SupervisorState_State_FAULT #define _PB_SupervisorState_State_ARRAYSIZE ((PB_SupervisorState_State)(PB_SupervisorState_State_FAULT+1)) #define _PB_SupervisorState_FaultInfo_FaultType_MIN PB_SupervisorState_FaultInfo_FaultType_UNKNOWN #define _PB_SupervisorState_FaultInfo_FaultType_MAX PB_SupervisorState_FaultInfo_FaultType_UNEXPECTED_POWER #define _PB_SupervisorState_FaultInfo_FaultType_ARRAYSIZE ((PB_SupervisorState_FaultInfo_FaultType)(PB_SupervisorState_FaultInfo_FaultType_UNEXPECTED_POWER+1)) #define _PB_SplitflapCommand_ModuleCommand_Action_MIN PB_SplitflapCommand_ModuleCommand_Action_NO_OP #define _PB_SplitflapCommand_ModuleCommand_Action_MAX PB_SplitflapCommand_ModuleCommand_Action_SET_OFFSET #define _PB_SplitflapCommand_ModuleCommand_Action_ARRAYSIZE ((PB_SplitflapCommand_ModuleCommand_Action)(PB_SplitflapCommand_ModuleCommand_Action_SET_OFFSET+1)) #ifdef __cplusplus extern "C" { #endif /* Initializer values for message structs */ #define PB_SplitflapState_init_default {0, {PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default, PB_SplitflapState_ModuleState_init_default}, 0} #define PB_SplitflapState_ModuleState_init_default {_PB_SplitflapState_ModuleState_State_MIN, 0, 0, 0, 0, 0} #define PB_Log_init_default {""} #define PB_Ack_init_default {0} #define PB_SupervisorState_init_default {0, _PB_SupervisorState_State_MIN, 0, {PB_SupervisorState_PowerChannelState_init_default, PB_SupervisorState_PowerChannelState_init_default, PB_SupervisorState_PowerChannelState_init_default, PB_SupervisorState_PowerChannelState_init_default, PB_SupervisorState_PowerChannelState_init_default}, false, PB_SupervisorState_FaultInfo_init_default} #define PB_SupervisorState_PowerChannelState_init_default {0, 0, 0} #define PB_SupervisorState_FaultInfo_init_default {_PB_SupervisorState_FaultInfo_FaultType_MIN, "", 0} #define PB_GeneralState_init_default {0, 0, false, PB_GeneralState_BuildInfo_init_default, {0, {0}}} #define PB_GeneralState_BuildInfo_init_default {"", "", ""} #define PB_FromSplitflap_init_default {0, {PB_SplitflapState_init_default}} #define PB_SplitflapCommand_init_default {0, {PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default, PB_SplitflapCommand_ModuleCommand_init_default}, 0} #define PB_SplitflapCommand_ModuleCommand_init_default {_PB_SplitflapCommand_ModuleCommand_Action_MIN, 0} #define PB_SplitflapConfig_init_default {0, {PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default, PB_SplitflapConfig_ModuleConfig_init_default}} #define PB_SplitflapConfig_ModuleConfig_init_default {0, 0, 0} #define PB_RequestState_init_default {0} #define PB_ToSplitflap_init_default {0, 0, {PB_SplitflapCommand_init_default}} #define PB_PersistentConfiguration_init_default {0, 0, 0, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}} #define PB_SplitflapState_init_zero {0, {PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero, PB_SplitflapState_ModuleState_init_zero}, 0} #define PB_SplitflapState_ModuleState_init_zero {_PB_SplitflapState_ModuleState_State_MIN, 0, 0, 0, 0, 0} #define PB_Log_init_zero {""} #define PB_Ack_init_zero {0} #define PB_SupervisorState_init_zero {0, _PB_SupervisorState_State_MIN, 0, {PB_SupervisorState_PowerChannelState_init_zero, PB_SupervisorState_PowerChannelState_init_zero, PB_SupervisorState_PowerChannelState_init_zero, PB_SupervisorState_PowerChannelState_init_zero, PB_SupervisorState_PowerChannelState_init_zero}, false, PB_SupervisorState_FaultInfo_init_zero} #define PB_SupervisorState_PowerChannelState_init_zero {0, 0, 0} #define PB_SupervisorState_FaultInfo_init_zero {_PB_SupervisorState_FaultInfo_FaultType_MIN, "", 0} #define PB_GeneralState_init_zero {0, 0, false, PB_GeneralState_BuildInfo_init_zero, {0, {0}}} #define PB_GeneralState_BuildInfo_init_zero {"", "", ""} #define PB_FromSplitflap_init_zero {0, {PB_SplitflapState_init_zero}} #define PB_SplitflapCommand_init_zero {0, {PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero, PB_SplitflapCommand_ModuleCommand_init_zero}, 0} #define PB_SplitflapCommand_ModuleCommand_init_zero {_PB_SplitflapCommand_ModuleCommand_Action_MIN, 0} #define PB_SplitflapConfig_init_zero {0, {PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero, PB_SplitflapConfig_ModuleConfig_init_zero}} #define PB_SplitflapConfig_ModuleConfig_init_zero {0, 0, 0} #define PB_RequestState_init_zero {0} #define PB_ToSplitflap_init_zero {0, 0, {PB_SplitflapCommand_init_zero}} #define PB_PersistentConfiguration_init_zero {0, 0, 0, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}} /* Field tags (for use in manual encoding/decoding) */ #define PB_Ack_nonce_tag 1 #define PB_GeneralState_BuildInfo_git_hash_tag 1 #define PB_GeneralState_BuildInfo_build_date_tag 2 #define PB_GeneralState_BuildInfo_build_os_tag 3 #define PB_Log_msg_tag 1 #define PB_PersistentConfiguration_version_tag 1 #define PB_PersistentConfiguration_num_flaps_tag 2 #define PB_PersistentConfiguration_module_offset_steps_tag 3 #define PB_SplitflapCommand_ModuleCommand_action_tag 1 #define PB_SplitflapCommand_ModuleCommand_param_tag 2 #define PB_SplitflapConfig_ModuleConfig_target_flap_index_tag 1 #define PB_SplitflapConfig_ModuleConfig_movement_nonce_tag 2 #define PB_SplitflapConfig_ModuleConfig_reset_nonce_tag 3 #define PB_SplitflapState_ModuleState_state_tag 1 #define PB_SplitflapState_ModuleState_flap_index_tag 2 #define PB_SplitflapState_ModuleState_moving_tag 3 #define PB_SplitflapState_ModuleState_home_state_tag 4 #define PB_SplitflapState_ModuleState_count_unexpected_home_tag 5 #define PB_SplitflapState_ModuleState_count_missed_home_tag 6 #define PB_SupervisorState_FaultInfo_type_tag 1 #define PB_SupervisorState_FaultInfo_msg_tag 2 #define PB_SupervisorState_FaultInfo_ts_millis_tag 3 #define PB_SupervisorState_PowerChannelState_voltage_volts_tag 1 #define PB_SupervisorState_PowerChannelState_current_amps_tag 2 #define PB_SupervisorState_PowerChannelState_on_tag 3 #define PB_GeneralState_serial_protocol_version_tag 1 #define PB_GeneralState_uptime_millis_tag 2 #define PB_GeneralState_build_info_tag 3 #define PB_GeneralState_flap_character_set_tag 4 #define PB_SplitflapCommand_modules_tag 2 #define PB_SplitflapCommand_save_all_offsets_tag 3 #define PB_SplitflapConfig_modules_tag 1 #define PB_SplitflapState_modules_tag 1 #define PB_SplitflapState_loopbacks_ok_tag 2 #define PB_SupervisorState_uptime_millis_tag 1 #define PB_SupervisorState_state_tag 2 #define PB_SupervisorState_power_channels_tag 3 #define PB_SupervisorState_fault_info_tag 4 #define PB_FromSplitflap_splitflap_state_tag 1 #define PB_FromSplitflap_log_tag 2 #define PB_FromSplitflap_ack_tag 3 #define PB_FromSplitflap_supervisor_state_tag 4 #define PB_FromSplitflap_general_state_tag 5 #define PB_ToSplitflap_nonce_tag 1 #define PB_ToSplitflap_splitflap_command_tag 2 #define PB_ToSplitflap_splitflap_config_tag 3 #define PB_ToSplitflap_request_state_tag 4 /* Struct field encoding specification for nanopb */ #define PB_SplitflapState_FIELDLIST(X, a) \ X(a, STATIC, REPEATED, MESSAGE, modules, 1) \ X(a, STATIC, SINGULAR, BOOL, loopbacks_ok, 2) #define PB_SplitflapState_CALLBACK NULL #define PB_SplitflapState_DEFAULT NULL #define PB_SplitflapState_modules_MSGTYPE PB_SplitflapState_ModuleState #define PB_SplitflapState_ModuleState_FIELDLIST(X, a) \ X(a, STATIC, SINGULAR, UENUM, state, 1) \ X(a, STATIC, SINGULAR, UINT32, flap_index, 2) \ X(a, STATIC, SINGULAR, BOOL, moving, 3) \ X(a, STATIC, SINGULAR, BOOL, home_state, 4) \ X(a, STATIC, SINGULAR, UINT32, count_unexpected_home, 5) \ X(a, STATIC, SINGULAR, UINT32, count_missed_home, 6) #define PB_SplitflapState_ModuleState_CALLBACK NULL #define PB_SplitflapState_ModuleState_DEFAULT NULL #define PB_Log_FIELDLIST(X, a) \ X(a, STATIC, SINGULAR, STRING, msg, 1) #define PB_Log_CALLBACK NULL #define PB_Log_DEFAULT NULL #define PB_Ack_FIELDLIST(X, a) \ X(a, STATIC, SINGULAR, UINT32, nonce, 1) #define PB_Ack_CALLBACK NULL #define PB_Ack_DEFAULT NULL #define PB_SupervisorState_FIELDLIST(X, a) \ X(a, STATIC, SINGULAR, UINT32, uptime_millis, 1) \ X(a, STATIC, SINGULAR, UENUM, state, 2) \ X(a, STATIC, REPEATED, MESSAGE, power_channels, 3) \ X(a, STATIC, OPTIONAL, MESSAGE, fault_info, 4) #define PB_SupervisorState_CALLBACK NULL #define PB_SupervisorState_DEFAULT NULL #define PB_SupervisorState_power_channels_MSGTYPE PB_SupervisorState_PowerChannelState #define PB_SupervisorState_fault_info_MSGTYPE PB_SupervisorState_FaultInfo #define PB_SupervisorState_PowerChannelState_FIELDLIST(X, a) \ X(a, STATIC, SINGULAR, FLOAT, voltage_volts, 1) \ X(a, STATIC, SINGULAR, FLOAT, current_amps, 2) \ X(a, STATIC, SINGULAR, BOOL, on, 3) #define PB_SupervisorState_PowerChannelState_CALLBACK NULL #define PB_SupervisorState_PowerChannelState_DEFAULT NULL #define PB_SupervisorState_FaultInfo_FIELDLIST(X, a) \ X(a, STATIC, SINGULAR, UENUM, type, 1) \ X(a, STATIC, SINGULAR, STRING, msg, 2) \ X(a, STATIC, SINGULAR, UINT32, ts_millis, 3) #define PB_SupervisorState_FaultInfo_CALLBACK NULL #define PB_SupervisorState_FaultInfo_DEFAULT NULL #define PB_GeneralState_FIELDLIST(X, a) \ X(a, STATIC, SINGULAR, UINT32, serial_protocol_version, 1) \ X(a, STATIC, SINGULAR, UINT32, uptime_millis, 2) \ X(a, STATIC, OPTIONAL, MESSAGE, build_info, 3) \ X(a, STATIC, SINGULAR, BYTES, flap_character_set, 4) #define PB_GeneralState_CALLBACK NULL #define PB_GeneralState_DEFAULT NULL #define PB_GeneralState_build_info_MSGTYPE PB_GeneralState_BuildInfo #define PB_GeneralState_BuildInfo_FIELDLIST(X, a) \ X(a, STATIC, SINGULAR, STRING, git_hash, 1) \ X(a, STATIC, SINGULAR, STRING, build_date, 2) \ X(a, STATIC, SINGULAR, STRING, build_os, 3) #define PB_GeneralState_BuildInfo_CALLBACK NULL #define PB_GeneralState_BuildInfo_DEFAULT NULL #define PB_FromSplitflap_FIELDLIST(X, a) \ X(a, STATIC, ONEOF, MESSAGE, (payload,splitflap_state,payload.splitflap_state), 1) \ X(a, STATIC, ONEOF, MESSAGE, (payload,log,payload.log), 2) \ X(a, STATIC, ONEOF, MESSAGE, (payload,ack,payload.ack), 3) \ X(a, STATIC, ONEOF, MESSAGE, (payload,supervisor_state,payload.supervisor_state), 4) \ X(a, STATIC, ONEOF, MESSAGE, (payload,general_state,payload.general_state), 5) #define PB_FromSplitflap_CALLBACK NULL #define PB_FromSplitflap_DEFAULT NULL #define PB_FromSplitflap_payload_splitflap_state_MSGTYPE PB_SplitflapState #define PB_FromSplitflap_payload_log_MSGTYPE PB_Log #define PB_FromSplitflap_payload_ack_MSGTYPE PB_Ack #define PB_FromSplitflap_payload_supervisor_state_MSGTYPE PB_SupervisorState #define PB_FromSplitflap_payload_general_state_MSGTYPE PB_GeneralState #define PB_SplitflapCommand_FIELDLIST(X, a) \ X(a, STATIC, REPEATED, MESSAGE, modules, 2) \ X(a, STATIC, SINGULAR, BOOL, save_all_offsets, 3) #define PB_SplitflapCommand_CALLBACK NULL #define PB_SplitflapCommand_DEFAULT NULL #define PB_SplitflapCommand_modules_MSGTYPE PB_SplitflapCommand_ModuleCommand #define PB_SplitflapCommand_ModuleCommand_FIELDLIST(X, a) \ X(a, STATIC, SINGULAR, UENUM, action, 1) \ X(a, STATIC, SINGULAR, UINT32, param, 2) #define PB_SplitflapCommand_ModuleCommand_CALLBACK NULL #define PB_SplitflapCommand_ModuleCommand_DEFAULT NULL #define PB_SplitflapConfig_FIELDLIST(X, a) \ X(a, STATIC, REPEATED, MESSAGE, modules, 1) #define PB_SplitflapConfig_CALLBACK NULL #define PB_SplitflapConfig_DEFAULT NULL #define PB_SplitflapConfig_modules_MSGTYPE PB_SplitflapConfig_ModuleConfig #define PB_SplitflapConfig_ModuleConfig_FIELDLIST(X, a) \ X(a, STATIC, SINGULAR, UINT32, target_flap_index, 1) \ X(a, STATIC, SINGULAR, UINT32, movement_nonce, 2) \ X(a, STATIC, SINGULAR, UINT32, reset_nonce, 3) #define PB_SplitflapConfig_ModuleConfig_CALLBACK NULL #define PB_SplitflapConfig_ModuleConfig_DEFAULT NULL #define PB_RequestState_FIELDLIST(X, a) \ #define PB_RequestState_CALLBACK NULL #define PB_RequestState_DEFAULT NULL #define PB_ToSplitflap_FIELDLIST(X, a) \ X(a, STATIC, SINGULAR, UINT32, nonce, 1) \ X(a, STATIC, ONEOF, MESSAGE, (payload,splitflap_command,payload.splitflap_command), 2) \ X(a, STATIC, ONEOF, MESSAGE, (payload,splitflap_config,payload.splitflap_config), 3) \ X(a, STATIC, ONEOF, MESSAGE, (payload,request_state,payload.request_state), 4) #define PB_ToSplitflap_CALLBACK NULL #define PB_ToSplitflap_DEFAULT NULL #define PB_ToSplitflap_payload_splitflap_command_MSGTYPE PB_SplitflapCommand #define PB_ToSplitflap_payload_splitflap_config_MSGTYPE PB_SplitflapConfig #define PB_ToSplitflap_payload_request_state_MSGTYPE PB_RequestState #define PB_PersistentConfiguration_FIELDLIST(X, a) \ X(a, STATIC, SINGULAR, UINT32, version, 1) \ X(a, STATIC, SINGULAR, UINT32, num_flaps, 2) \ X(a, STATIC, REPEATED, UINT32, module_offset_steps, 3) #define PB_PersistentConfiguration_CALLBACK NULL #define PB_PersistentConfiguration_DEFAULT NULL extern const pb_msgdesc_t PB_SplitflapState_msg; extern const pb_msgdesc_t PB_SplitflapState_ModuleState_msg; extern const pb_msgdesc_t PB_Log_msg; extern const pb_msgdesc_t PB_Ack_msg; extern const pb_msgdesc_t PB_SupervisorState_msg; extern const pb_msgdesc_t PB_SupervisorState_PowerChannelState_msg; extern const pb_msgdesc_t PB_SupervisorState_FaultInfo_msg; extern const pb_msgdesc_t PB_GeneralState_msg; extern const pb_msgdesc_t PB_GeneralState_BuildInfo_msg; extern const pb_msgdesc_t PB_FromSplitflap_msg; extern const pb_msgdesc_t PB_SplitflapCommand_msg; extern const pb_msgdesc_t PB_SplitflapCommand_ModuleCommand_msg; extern const pb_msgdesc_t PB_SplitflapConfig_msg; extern const pb_msgdesc_t PB_SplitflapConfig_ModuleConfig_msg; extern const pb_msgdesc_t PB_RequestState_msg; extern const pb_msgdesc_t PB_ToSplitflap_msg; extern const pb_msgdesc_t PB_PersistentConfiguration_msg; /* Defines for backwards compatibility with code written before nanopb-0.4.0 */ #define PB_SplitflapState_fields &PB_SplitflapState_msg #define PB_SplitflapState_ModuleState_fields &PB_SplitflapState_ModuleState_msg #define PB_Log_fields &PB_Log_msg #define PB_Ack_fields &PB_Ack_msg #define PB_SupervisorState_fields &PB_SupervisorState_msg #define PB_SupervisorState_PowerChannelState_fields &PB_SupervisorState_PowerChannelState_msg #define PB_SupervisorState_FaultInfo_fields &PB_SupervisorState_FaultInfo_msg #define PB_GeneralState_fields &PB_GeneralState_msg #define PB_GeneralState_BuildInfo_fields &PB_GeneralState_BuildInfo_msg #define PB_FromSplitflap_fields &PB_FromSplitflap_msg #define PB_SplitflapCommand_fields &PB_SplitflapCommand_msg #define PB_SplitflapCommand_ModuleCommand_fields &PB_SplitflapCommand_ModuleCommand_msg #define PB_SplitflapConfig_fields &PB_SplitflapConfig_msg #define PB_SplitflapConfig_ModuleConfig_fields &PB_SplitflapConfig_ModuleConfig_msg #define PB_RequestState_fields &PB_RequestState_msg #define PB_ToSplitflap_fields &PB_ToSplitflap_msg #define PB_PersistentConfiguration_fields &PB_PersistentConfiguration_msg /* Maximum encoded size of messages (where known) */ #define PB_Ack_size 6 #define PB_FromSplitflap_size 4340 #define PB_GeneralState_BuildInfo_size 120 #define PB_GeneralState_size 214 #define PB_Log_size 258 #define PB_PersistentConfiguration_size 1032 #define PB_RequestState_size 0 #define PB_SplitflapCommand_ModuleCommand_size 5 #define PB_SplitflapCommand_size 1787 #define PB_SplitflapConfig_ModuleConfig_size 9 #define PB_SplitflapConfig_size 2805 #define PB_SplitflapState_ModuleState_size 15 #define PB_SplitflapState_size 4337 #define PB_SupervisorState_FaultInfo_size 266 #define PB_SupervisorState_PowerChannelState_size 12 #define PB_SupervisorState_size 347 #define PB_ToSplitflap_size 2814 #ifdef __cplusplus } /* extern "C" */ #endif #endif ================================================ FILE: firmware/esp32/splitflap/crc32.cpp ================================================ /* Simple public domain implementation of the standard CRC32 checksum. * Outputs the checksum for each file given as a command line argument. * Invalid file names and files that cause errors are silently skipped. * The program reads from stdin if it is called with no arguments. */ #include "crc32.h" static uint32_t crc32_for_byte(uint32_t r) { for(int j = 0; j < 8; ++j) r = (r & 1? 0: (uint32_t)0xEDB88320L) ^ r >> 1; return r ^ (uint32_t)0xFF000000L; } void crc32(const void *data, size_t n_bytes, uint32_t* crc) { static uint32_t table[0x100]; if(!*table) for(size_t i = 0; i < 0x100; ++i) table[i] = crc32_for_byte(i); for(size_t i = 0; i < n_bytes; ++i) *crc = table[(uint8_t)*crc ^ ((uint8_t*)data)[i]] ^ *crc >> 8; } ================================================ FILE: firmware/esp32/splitflap/crc32.h ================================================ /* Simple public domain implementation of the standard CRC32 checksum. * Outputs the checksum for each file given as a command line argument. * Invalid file names and files that cause errors are silently skipped. * The program reads from stdin if it is called with no arguments. */ #pragma once #include #include #include void crc32(const void *data, size_t n_bytes, uint32_t* crc); ================================================ FILE: firmware/esp32/splitflap/debug_build_info.cpp ================================================ #include "Arduino.h" #include "debug_build_info.h" void logDebugBuildInfo(Logger& logger) { char buf[200]; snprintf(buf, sizeof(buf), "build_git_hash: %s", BUILD_GIT_HASH); logger.log(buf); snprintf(buf, sizeof(buf), "build_date: %s", BUILD_DATE); logger.log(buf); snprintf(buf, sizeof(buf), "build_os: %s", BUILD_OS); logger.log(buf); } ================================================ FILE: firmware/esp32/splitflap/debug_build_info.h ================================================ #pragma once #include "../core/logger.h" void logDebugBuildInfo(Logger& logger); ================================================ FILE: firmware/esp32/splitflap/display_layouts.h ================================================ /* Copyright 2021 Scott Bezek and the splitflap contributors 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. */ #pragma once #include // Customize these settings and select a layout algorithm at the bottom if you have a different arrangement of modules: #define DISPLAY_COLUMNS (NUM_MODULES) // EXAMPLE LAYOUT ALGORITHMS: static void getLayoutPositionSingleRowZigZag(const uint8_t module_index, uint8_t* out_row, uint8_t* out_col) { *out_row = module_index / DISPLAY_COLUMNS; // Each row alternates left-to-right, then right-to-left so data can be easily chained, // winding back and forth down the rows. *out_col = (*out_row % 2) ? (DISPLAY_COLUMNS - 1 - (module_index % DISPLAY_COLUMNS)) : module_index % DISPLAY_COLUMNS; } /** * Each Driver connects to 3 columns across 2 rows, and then zig zags back on the next set of 2 rows * * (viewed from the module front side) * * [1] [3] [5] [7] [9] [11] * [Driver #0] ---> [Driver #1] -->--v * [0] [2] [4] [6] [8] [10] | * | * v * | * [22] [20] [18] [16] [14] [12] | * [Driver #3] <-- [Driver #2] <---< * (upside down) (upside down) * [23] [21] [19] [17] [15] [13] * * Set flip_first_rows if the first row chain goes the other direction (driver 0 is on the right when * viewed from the front side) */ static void getLayoutPositionDualRowZigZag(const bool flip_first_rows, const uint8_t module_index, uint8_t* out_row, uint8_t* out_col) { uint8_t row_pair = module_index / 2 / DISPLAY_COLUMNS; bool upside_down_row_pair = (row_pair + flip_first_rows) % 2; uint8_t row_base = row_pair * 2; uint8_t row_offset = upside_down_row_pair ? (module_index % 2) : 1 - (module_index % 2); *out_row = row_base + row_offset; // Every set of 2 rows alternates left-to-right, then right-to-left so data can be easily chained, // winding back and forth down the groups of rows. *out_col = upside_down_row_pair ? (DISPLAY_COLUMNS - 1 - ((module_index / 2) % DISPLAY_COLUMNS)) : ((module_index / 2) % DISPLAY_COLUMNS); } static void getLayoutPosition(const uint8_t module_index, uint8_t* out_row, uint8_t* out_col) { // Select a layout algorithm by uncommenting, or implement your own here: // getLayoutPositionDualRowZigZag(true, module_index, out_row, out_col); getLayoutPositionSingleRowZigZag(module_index, out_row, out_col); } ================================================ FILE: firmware/esp32/splitflap/display_task.cpp ================================================ /* Copyright 2021 Scott Bezek and the splitflap contributors 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. */ #include "display_task.h" #include "../core/common.h" #include "../core/semaphore_guard.h" #include "display_layouts.h" DisplayTask::DisplayTask(SplitflapTask& splitflap_task, const uint8_t task_core) : Task("Display", 6000, 1, task_core), splitflap_task_(splitflap_task), semaphore_(xSemaphoreCreateMutex()) { assert(semaphore_ != NULL); xSemaphoreGive(semaphore_); } DisplayTask::~DisplayTask() { if (semaphore_ != NULL) { vSemaphoreDelete(semaphore_); } } static const int32_t X_OFFSET = 10; static const int32_t Y_OFFSET = 10; void DisplayTask::run() { tft_.begin(); tft_.invertDisplay(1); tft_.setRotation(1); tft_.setTextFont(0); tft_.setTextColor(0xFFFF, TFT_BLACK); tft_.fillScreen(TFT_BLACK); // Automatically scale display based on DISPLAY_COLUMNS (see display_layouts.h) int32_t module_width = 20; int32_t module_height = 26; uint8_t module_text_size = 3; uint8_t rows = ((NUM_MODULES + DISPLAY_COLUMNS - 1) / DISPLAY_COLUMNS); if (DISPLAY_COLUMNS > 16 || rows > 6) { module_width = 7; module_height = 10; module_text_size = 1; } else if (DISPLAY_COLUMNS > 10 || rows > 4) { module_width = 14; module_height = 18; module_text_size = 2; } tft_.fillRect(X_OFFSET, Y_OFFSET, DISPLAY_COLUMNS * (module_width + 1) + 1, rows * (module_height + 1) + 1, 0x2104); uint8_t module_row, module_col; int32_t module_x, module_y; SplitflapState last_state = {}; String last_messages[countof(messages_)] = {}; while(1) { SplitflapState state = splitflap_task_.getState(); if (state != last_state) { tft_.setTextSize(module_text_size); for (uint8_t i = 0; i < NUM_MODULES; i++) { SplitflapModuleState& s = state.modules[i]; if (s == last_state.modules[i]) { continue; } uint16_t background = 0x0000; uint16_t foreground = 0xFFFF; bool blink = (millis() / 400) % 2; char c; switch (s.state) { case NORMAL: c = flaps[s.flap_index]; if (s.moving) { // use a dimmer color when moving foreground = 0x6b4d; } // You can add special-case color handling here if desired: // if (c == 'w') { // c = ' '; // background = 0xFFFF; // } else if (c == 'y') { // c = ' '; // background = 0xffe0; // } else if (c == 'o') { // c = ' '; // background = 0xfd00; // } else if (c == 'g') { // c = ' '; // background = 0x46a0; // } else if (c == 'p') { // c = ' '; // background = 0xd938; // } break; case PANIC: c = '~'; background = blink ? 0xD000 : 0; break; case STATE_DISABLED: c = '*'; break; case LOOK_FOR_HOME: c = '?'; background = blink ? 0x6018 : 0; break; case SENSOR_ERROR: c = ' '; background = blink ? 0xD461 : 0; break; default: c = ' '; break; } getLayoutPosition(i, &module_row, &module_col); // Add 1 to width/height as a separator line between modules module_x = X_OFFSET + 1 + module_col * (module_width + 1); module_y = Y_OFFSET + 1 + module_row * (module_height + 1); tft_.setTextColor(foreground, background); tft_.fillRect(module_x, module_y, module_width, module_height, background); tft_.setCursor(module_x + 1, module_y + 2); tft_.printf("%c", c); } last_state = state; } const int message_height = 10; const int message_text_size = 1; bool redraw_messages = false; { SemaphoreGuard lock(semaphore_); for (uint8_t i = 0; i < countof(messages_); i++) { if (messages_[i] != last_messages[i]) { redraw_messages = true; last_messages[i] = messages_[i]; } } } if (redraw_messages) { tft_.setTextSize(message_text_size); tft_.setTextColor(TFT_WHITE, TFT_BLACK); tft_.fillRect(0, tft_.height() - message_height * countof(messages_), tft_.width(), message_height * countof(messages_), TFT_BLACK); for (uint8_t i = 0; i < countof(messages_); i++) { int y = tft_.height() - message_height * (countof(messages_) - i); tft_.drawString(last_messages[i], 2, y); } } delay(10); } } void DisplayTask::setMessage(uint8_t i, String message) { SemaphoreGuard lock(semaphore_); assert(i < countof(messages_)); messages_[i] = message; } ================================================ FILE: firmware/esp32/splitflap/display_task.h ================================================ /* Copyright 2020 Scott Bezek and the splitflap contributors 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. */ #pragma once #include #include #include "../core/splitflap_task.h" #include "../core/task.h" class DisplayTask : public Task { friend class Task; // Allow base Task to invoke protected run() public: DisplayTask(SplitflapTask& splitflapTask, const uint8_t taskCore); ~DisplayTask(); void setMessage(uint8_t i, String message); protected: void run(); private: SplitflapTask& splitflap_task_; const SemaphoreHandle_t semaphore_; TFT_eSPI tft_ = TFT_eSPI(); String messages_[2] = {}; }; ================================================ FILE: firmware/esp32/splitflap/http_task.cpp ================================================ /* Copyright 2021 Scott Bezek and the splitflap contributors 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. */ #if HTTP #include "http_task.h" #include #include #include #include #include "secrets.h" using namespace json11; // About this example: // - Fetches current weather data for an area in San Francisco (updating infrequently) // - Cycles between showing the temperature and the wind speed on the split-flaps (cycles frequently) // // Make sure to set up secrets.h - see secrets.h.example for more. // // What this example demonstrates: // - a simple JSON GET request (see fetchData) // - json response parsing using json11 (see handleData) // - cycling through messages at a different interval than data is loaded (see run) // Update data every 10 minutes #define REQUEST_INTERVAL_MILLIS (10 * 60 * 1000) // Cycle the message that's showing more frequently, every 30 seconds (exaggerated for example purposes) #define MESSAGE_CYCLE_INTERVAL_MILLIS (30 * 1000) // Don't show stale data if it's been too long since successful data load #define STALE_TIME_MILLIS (REQUEST_INTERVAL_MILLIS * 3) // Public token for synoptic data api (it's not secret, but please don't abuse it) #define SYNOPTICDATA_TOKEN "e763d68537d9498a90fa808eb9d415d9" // Timezone for local time strings; this is America/Los_Angeles. See https://github.com/nayarsystems/posix_tz_db/blob/master/zones.csv #define TIMEZONE "PST8PDT,M3.2.0,M11.1.0" bool HTTPTask::fetchData() { char buf[200]; uint32_t start = millis(); HTTPClient http; // Construct the http request http.begin("https://api.synopticdata.com/v2/stations/latest?&token=" SYNOPTICDATA_TOKEN "&within=30&units=english&vars=air_temp,wind_speed&varsoperator=and&radius=37.765157,-122.419702,4&limit=20&fields=stid"); // If you wanted to add headers, you would do so like this: // http.addHeader("Accept", "application/json"); // Send the request as a GET logger_.log("Sending request"); int http_code = http.GET(); snprintf(buf, sizeof(buf), "Finished request in %lu millis.", millis() - start); logger_.log(buf); if (http_code > 0) { String data = http.getString(); http.end(); snprintf(buf, sizeof(buf), "Response code: %d Data length: %d", http_code, data.length()); logger_.log(buf); std::string err; Json json = Json::parse(data.c_str(), err); if (err.empty()) { return handleData(json); } else { snprintf(buf, sizeof(buf), "Error parsing response! %s", err.c_str()); logger_.log(buf); return false; } } else { snprintf(buf, sizeof(buf), "Error on HTTP request (%d): %s", http_code, http.errorToString(http_code).c_str()); logger_.log(buf); http.end(); return false; } } bool HTTPTask::handleData(Json json) { // Extract data from the json response. You could use ArduinoJson, but I find json11 to be much // easier to use albeit not optimized for a microcontroller. // Example data: /* { ... "STATION": [ { "STID": "F4637", "OBSERVATIONS": { "wind_speed_value_1": { "date_time": "2021-11-30T23:25:00Z", "value": 0.87 }, "air_temp_value_1": { "date_time": "2021-11-30T23:25:00Z", "value": 69 } }, ... }, { "STID": "C5988", "OBSERVATIONS": { "wind_speed_value_1": { "date_time": "2021-11-30T23:24:00Z", "value": 1.74 }, "air_temp_value_1": { "date_time": "2021-11-30T23:24:00Z", "value": 68 } }, ... }, ... ] } */ // Validate json structure and extract data: auto station = json["STATION"]; if (!station.is_array()) { logger_.log("Parse error: STATION"); return false; } auto station_array = station.array_items(); std::vector temps; std::vector wind_speeds; for (uint8_t i = 0; i < station_array.size(); i++) { auto item = station_array[i]; if (!item.is_object()) { logger_.log("Bad station item, ignoring"); continue; } auto observations = item["OBSERVATIONS"]; if (!observations.is_object()) { logger_.log("Bad station observations, ignoring"); continue; } auto air_temp_value = observations["air_temp_value_1"]; if (!air_temp_value.is_object()) { logger_.log("Bad air_temp_value_1, ignoring"); continue; } auto value = air_temp_value["value"]; if (!value.is_number()) { logger_.log("Bad air temp, ignoring"); continue; } temps.push_back(value.number_value()); auto wind_speed_value = observations["wind_speed_value_1"]; if (!wind_speed_value.is_object()) { logger_.log("Bad wind_speed_value_1, ignoring"); continue; } value = wind_speed_value["value"]; if (!value.is_number()) { logger_.log("Bad wind speed, ignoring"); continue; } wind_speeds.push_back(value.number_value()); } auto entries = temps.size(); if (entries == 0) { logger_.log("No data found"); return false; } // Calculate medians std::sort(temps.begin(), temps.end()); std::sort(wind_speeds.begin(), wind_speeds.end()); double median_temp; double median_wind_speed; if ((entries % 2) == 0) { median_temp = (temps[entries/2 - 1] + temps[entries/2]) / 2; median_wind_speed = (wind_speeds[entries/2 - 1] + wind_speeds[entries/2]) / 2; } else { median_temp = temps[entries/2]; median_wind_speed = wind_speeds[entries/2]; } char buf[200]; snprintf(buf, sizeof(buf), "Medians from %d stations: temp=%dºF, wind speed=%d knots", entries, (int)median_temp, (int)median_wind_speed); logger_.log(buf); // Construct the messages to display messages_.clear(); snprintf(buf, sizeof(buf), "%d f", (int)median_temp); messages_.push_back(String(buf)); snprintf(buf, sizeof(buf), "%d mph", (int)(median_wind_speed * 1.151)); messages_.push_back(String(buf)); // Show the data fetch time on the LCD time_t now; time(&now); strftime(buf, sizeof(buf), "Data: %Y-%m-%d %H:%M:%S", localtime(&now)); display_task_.setMessage(0, String(buf)); return true; } HTTPTask::HTTPTask(SplitflapTask& splitflap_task, DisplayTask& display_task, Logger& logger, const uint8_t task_core) : Task("HTTP", 8192, 1, task_core), splitflap_task_(splitflap_task), display_task_(display_task), logger_(logger), wifi_client_() { } void HTTPTask::connectWifi() { WiFi.begin(WIFI_SSID, WIFI_PASSWORD); // Disable WiFi sleep as it causes glitches on pin 39; see https://github.com/espressif/arduino-esp32/issues/4903#issuecomment-793187707 WiFi.setSleep(WIFI_PS_NONE); char buf[256]; logger_.log("Establishing connection to WiFi.."); snprintf(buf, sizeof(buf), "Wifi connecting to %s", WIFI_SSID); display_task_.setMessage(1, String(buf)); while (WiFi.status() != WL_CONNECTED) { delay(1000); } snprintf(buf, sizeof(buf), "Connected to network %s", WIFI_SSID); logger_.log(buf); // Sync SNTP sntp_setoperatingmode(SNTP_OPMODE_POLL); char server[] = "time.nist.gov"; // sntp_setservername takes a non-const char*, so use a non-const variable to avoid warning sntp_setservername(0, server); sntp_init(); logger_.log("Waiting for NTP time sync..."); snprintf(buf, sizeof(buf), "Syncing NTP time via %s...", server); display_task_.setMessage(1, String(buf)); time_t now; while (time(&now),now < 1625099485) { delay(1000); } setenv("TZ", TIMEZONE, 1); tzset(); strftime(buf, sizeof(buf), "Got time: %Y-%m-%d %H:%M:%S", localtime(&now)); logger_.log(buf); } void HTTPTask::run() { char buf[max(NUM_MODULES + 1, 200)]; connectWifi(); bool stale = false; while(1) { long now = millis(); bool update = false; if (http_last_request_time_ == 0 || now - http_last_request_time_ > REQUEST_INTERVAL_MILLIS) { if (fetchData()) { http_last_success_time_ = millis(); stale = false; update = true; } http_last_request_time_ = millis(); } if (!stale && http_last_success_time_ > 0 && millis() - http_last_success_time_ > STALE_TIME_MILLIS) { stale = true; messages_.clear(); messages_.push_back("stale"); update = true; } if (update || now - last_message_change_time_ > MESSAGE_CYCLE_INTERVAL_MILLIS) { if (current_message_index_ >= messages_.size()) { current_message_index_ = 0; } if (messages_.size() > 0) { String message = messages_[current_message_index_].c_str(); snprintf(buf, sizeof(buf), "Cycling to next message: %s", message.c_str()); logger_.log(buf); // Pad message for display size_t len = strlcpy(buf, message.c_str(), sizeof(buf)); memset(buf + len, ' ', sizeof(buf) - len); splitflap_task_.showString(buf, NUM_MODULES, false); } current_message_index_++; last_message_change_time_ = millis(); } String wifi_status; switch (WiFi.status()) { case WL_IDLE_STATUS: wifi_status = "Idle"; break; case WL_NO_SSID_AVAIL: wifi_status = "No SSID"; break; case WL_CONNECTED: wifi_status = String(WIFI_SSID) + " " + WiFi.localIP().toString(); break; case WL_CONNECT_FAILED: wifi_status = "Connection failed"; break; case WL_CONNECTION_LOST: wifi_status = "Connection lost"; break; case WL_DISCONNECTED: wifi_status = "Disconnected"; break; default: wifi_status = "Unknown"; break; } display_task_.setMessage(1, String("Wifi: ") + wifi_status); delay(1000); } } #endif ================================================ FILE: firmware/esp32/splitflap/http_task.h ================================================ /* Copyright 2021 Scott Bezek and the splitflap contributors 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. */ #pragma once #include #include #include #include "../core/logger.h" #include "../core/splitflap_task.h" #include "../core/task.h" #include "display_task.h" class HTTPTask : public Task { friend class Task; // Allow base Task to invoke protected run() public: HTTPTask(SplitflapTask& splitflap_task, DisplayTask& display_task, Logger& logger, const uint8_t task_core); protected: void run(); private: void connectWifi(); bool fetchData(); bool handleData(json11::Json json); SplitflapTask& splitflap_task_; DisplayTask& display_task_; Logger& logger_; WiFiClient wifi_client_; uint32_t http_last_request_time_ = 0; uint32_t http_last_success_time_ = 0; std::vector messages_ = {}; uint8_t current_message_index_ = 0; uint32_t last_message_change_time_ = 0; }; ================================================ FILE: firmware/esp32/splitflap/main.cpp ================================================ /* Copyright 2020 Scott Bezek and the splitflap contributors 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. */ #include #include #include #include "config.h" #include "../core/configuration.h" #include "../core/splitflap_task.h" #include "debug_build_info.h" #include "display_task.h" #include "serial_task.h" Configuration config; SplitflapTask splitflapTask(1, LedMode::AUTO); SerialTask serialTask(splitflapTask, 0); #if ENABLE_DISPLAY DisplayTask displayTask(splitflapTask, 0); #endif #ifdef CHAINLINK_BASE #include "../base/base_supervisor_task.h" BaseSupervisorTask baseSupervisorTask(splitflapTask, serialTask, 0); #endif #if MQTT #include "mqtt_task.h" MQTTTask mqttTask(splitflapTask, displayTask, serialTask, 0); #endif #if HTTP #include "http_task.h" HTTPTask httpTask(splitflapTask, displayTask, serialTask, 0); #endif void setup() { serialTask.begin(); config.setLogger(&serialTask); bool loaded = config.loadFromDisk(); splitflapTask.begin(); splitflapTask.setConfiguration(&config); if (loaded) { PB_PersistentConfiguration saved = config.get(); uint16_t offsets[NUM_MODULES] = {}; for (uint8_t i = 0; i < min(saved.module_offset_steps_count, (pb_size_t)NUM_MODULES); i++) { offsets[i] = saved.module_offset_steps[i]; } splitflapTask.restoreAllOffsets(offsets); } #if ENABLE_DISPLAY displayTask.begin(); #endif #if MQTT mqttTask.begin(); #endif #if HTTP httpTask.begin(); #endif #ifdef CHAINLINK_BASE baseSupervisorTask.begin(); #endif logDebugBuildInfo(serialTask); // Delete the default Arduino loopTask to free up Core 1 vTaskDelete(NULL); } void loop() { assert(false); } ================================================ FILE: firmware/esp32/splitflap/mqtt_task.cpp ================================================ /* Copyright 2021 Scott Bezek and the splitflap contributors 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. */ #if MQTT #include #include "mqtt_task.h" #include "secrets.h" using namespace json11; // This MQTT demo assumes a home assistant MQTT instance, and will do automatic registration // via the home assistant config topic when it comes online and connects to MQTT. You shouldn't // need to change any of this to get it to work with home assistant. #define MQTT_CONFIG_TOPIC "homeassistant/text/" DEVICE_INSTANCE_NAME "/config" #define MQTT_COMMAND_TOPIC "home/" DEVICE_INSTANCE_NAME "/command" #define MQTT_STATE_TOPIC "home/" DEVICE_INSTANCE_NAME "/state" #define MQTT_AVAILABILITY_TOPIC "home/" DEVICE_INSTANCE_NAME "/availability" MQTTTask::MQTTTask(SplitflapTask& splitflap_task, DisplayTask& display_task, Logger& logger, const uint8_t task_core) : Task("MQTT", 8192, 1, task_core), splitflap_task_(splitflap_task), display_task_(display_task), logger_(logger), wifi_client_(), mqtt_client_(wifi_client_) { auto callback = [this](char *topic, byte *payload, unsigned int length) { mqttCallback(topic, payload, length); }; mqtt_client_.setCallback(callback); } void MQTTTask::connectWifi() { WiFi.begin(WIFI_SSID, WIFI_PASSWORD); // Disable WiFi sleep as it causes glitches on pin 39; see https://github.com/espressif/arduino-esp32/issues/4903#issuecomment-793187707 WiFi.setSleep(WIFI_PS_NONE); char buf[256]; snprintf(buf, sizeof(buf), "Wifi connecting to %s", WIFI_SSID); display_task_.setMessage(0, String(buf)); while (WiFi.status() != WL_CONNECTED) { delay(1000); logger_.log("Establishing connection to WiFi.."); } snprintf(buf, sizeof(buf), "Connected to network %s", WIFI_SSID); logger_.log(buf); snprintf(buf, sizeof(buf), "Wifi IP: %s", WiFi.localIP().toString().c_str()); display_task_.setMessage(0, String(buf)); } void MQTTTask::mqttCallback(char *topic, byte *payload, unsigned int length) { char buf[256]; snprintf(buf, sizeof(buf), "Received mqtt callback for topic %s, length %u", topic, length); logger_.log(buf); splitflap_task_.showString((const char *)payload, length, false, true); } void MQTTTask::connectMQTT() { char buf[400]; mqtt_client_.setServer(MQTT_SERVER, MQTT_PORT); logger_.log("Attempting MQTT connection..."); snprintf(buf, sizeof(buf), "MQTT connecting to %s:%d", MQTT_SERVER, MQTT_PORT); display_task_.setMessage(1, String(buf)); if (mqtt_client_.connect(DEVICE_INSTANCE_NAME, MQTT_USER, MQTT_PASSWORD, MQTT_AVAILABILITY_TOPIC, 1, true, "offline")) { logger_.log("MQTT connected"); mqtt_client_.subscribe(MQTT_COMMAND_TOPIC); // TODO: I believe it's possible to do more complex config to register as a device with multiple // entities; it'd be great to explore additional entities like a display backlight control, // detailed module status info, etc. Though at a certain point it may be preferable to make the // splitflap library an ESPHome external component for even more options, easier programming, // and more customization than MQTT offers... Json config = Json::object { { "name", DEVICE_INSTANCE_NAME }, { "command_topic", MQTT_COMMAND_TOPIC }, { "state_topic", MQTT_STATE_TOPIC }, { "availability_topic", MQTT_AVAILABILITY_TOPIC }, { "payload_available", "online" }, { "payload_not_available", "offline" }, { "unique_id", DEVICE_INSTANCE_NAME }, { "max", NUM_MODULES }, }; std::string json_str = config.dump(); boolean result = mqtt_client_.publish(MQTT_CONFIG_TOPIC, json_str.c_str()); snprintf(buf, sizeof(buf), "Result of publish: %d", result); logger_.log(buf); logger_.log("Published MQTT discovery message"); logger_.log(json_str.c_str()); mqtt_client_.publish(MQTT_AVAILABILITY_TOPIC, "online", true); snprintf(buf, sizeof(buf), "MQTT connected! (%s:%d)", MQTT_SERVER, MQTT_PORT); display_task_.setMessage(1, String(buf)); } else { snprintf(buf, sizeof(buf), "MQTT failed rc=%d will try again in 5 seconds", mqtt_client_.state()); logger_.log(buf); snprintf(buf, sizeof(buf), "MQTT failed rc=%d", mqtt_client_.state()); display_task_.setMessage(1, String(buf)); } } void MQTTTask::run() { char buf[256]; display_task_.setMessage(0, ""); display_task_.setMessage(1, ""); connectWifi(); connectMQTT(); ArduinoOTA .onStart([this]() { if (ArduinoOTA.getCommand() == U_FLASH) { logger_.log("Start OTA (flash)"); } else { // U_SPIFFS logger_.log("Start OTA (filesystem)"); // NOTE: if updating SPIFFS this would be the place to unmount SPIFFS using SPIFFS.end() } }) .onEnd([this]() { logger_.log("OTA End"); }) .onProgress([this](unsigned int progress, unsigned int total) { char buf2[256]; static uint32_t last_progress; if (millis() - last_progress > 1000) { snprintf(buf2, sizeof(buf2), "OTA Progress: %d%%", (int)(progress * 100 / total)); logger_.log(buf2); last_progress = millis(); } }) .onError([this](ota_error_t error) { char buf2[256]; snprintf(buf2, sizeof(buf2), "OTA Error: %u", error); logger_.log(buf2); if (error == OTA_AUTH_ERROR) logger_.log("Auth Failed"); else if (error == OTA_BEGIN_ERROR) logger_.log("Begin Failed"); else if (error == OTA_CONNECT_ERROR) logger_.log("Connect Failed"); else if (error == OTA_RECEIVE_ERROR) logger_.log("Receive Failed"); else if (error == OTA_END_ERROR) logger_.log("End Failed"); }) .setHostname(DEVICE_INSTANCE_NAME) .setPassword(OTA_PASSWORD) .begin(); wl_status_t wifi_last_status = WL_DISCONNECTED; uint32_t last_state_publish = 0; SplitflapState last_state = {}; uint32_t last_availability_publish = 0; while(1) { long now = millis(); wl_status_t wifi_new_status = WiFi.status(); if (wifi_new_status != wifi_last_status) { if (wifi_new_status == WL_CONNECTED) { snprintf(buf, sizeof(buf), "Wifi IP: %s", WiFi.localIP().toString().c_str()); display_task_.setMessage(0, String(buf)); } else { snprintf(buf, sizeof(buf), "Wifi connecting to %s", WIFI_SSID); display_task_.setMessage(0, String(buf)); } wifi_last_status = wifi_new_status; } if (!mqtt_client_.connected() && (now - mqtt_last_connect_time_) > 5000) { logger_.log("Reconnecting MQTT"); mqtt_last_connect_time_ = now; connectMQTT(); } if (mqtt_client_.connected()) { SplitflapState state = splitflap_task_.getState(); if (state != last_state) { char flap_buf[NUM_MODULES+1]; bool all_idle = true; for (uint8_t i = 0; i < NUM_MODULES; i++) { flap_buf[i] = flaps[state.modules[i].flap_index]; if (state.modules[i].moving) { all_idle = false; } } flap_buf[NUM_MODULES] = 0; if (all_idle && (now - last_state_publish) > 200) { last_state = state; last_state_publish = now; snprintf(buf, sizeof(buf), "Publishing state: %s", flap_buf); logger_.log(buf); mqtt_client_.publish(MQTT_STATE_TOPIC, flap_buf); } } if (now > last_availability_publish + 1800000) { mqtt_client_.publish(MQTT_AVAILABILITY_TOPIC, "online", true); last_availability_publish = now; } } mqtt_client_.loop(); ArduinoOTA.handle(); delay(1); } } #endif ================================================ FILE: firmware/esp32/splitflap/mqtt_task.h ================================================ /* Copyright 2021 Scott Bezek and the splitflap contributors 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. */ #pragma once #include #include #include #include #include "../core/logger.h" #include "../core/splitflap_task.h" #include "../core/task.h" #include "display_task.h" class MQTTTask : public Task { friend class Task; // Allow base Task to invoke protected run() public: MQTTTask(SplitflapTask& splitflapTask, DisplayTask& DisplayTask, Logger& logger, const uint8_t taskCore); protected: void run(); private: SplitflapTask& splitflap_task_; DisplayTask& display_task_; Logger& logger_; WiFiClient wifi_client_; PubSubClient mqtt_client_; int mqtt_last_connect_time_ = 0; void connectWifi(); void connectMQTT(); void mqttCallback(char *topic, byte *payload, unsigned int length); }; ================================================ FILE: firmware/esp32/splitflap/secrets.h.example ================================================ // Rename this file to secrets.h and add your secret details. // Network setup #define WIFI_SSID "myssid" #define WIFI_PASSWORD "supersecretpassword" // Hostname for this device, which is also used for MDNS, e.g. "splitflap" will result // in an mdns name of "splitflap.local" // If you plan to use OTA uploads, make sure to update the "upload_port" in the "env:chainlink_ota" // section of platformio.ini to match. #define DEVICE_INSTANCE_NAME "splitflap" #define MQTT_SERVER "192.168.0.242" #define MQTT_PORT (1883) #define MQTT_USER "mqttuser" #define MQTT_PASSWORD "megasecretpassword" // Password for wireless firmware uploads (only works with MQTT=1 in build_flags!). // To use OTA functionality: // Setup: // 1. Change this value to something unique in your secrets.h file // 2. Upload the firmware via USB using the "chainlink" env in platformio - this must be // done via USB first to install the initial firmware, including this password for // future wifi uploads. // 3. If you've changed the DEVICE_INSTANCE_NAME, make sure to update the "upload_port" in // the "env:chainlink_ota" section of platformio.ini to match, so the OTA uploads know // who to talk to. // OTA updates: // 1. Make sure the ESP32 is online // 2. Upload the firmware using the "chainlink_ota" environment instead of the "chainlink" // environment #define OTA_PASSWORD "replace_me!" ================================================ FILE: firmware/esp32/splitflap/serial_legacy_json_protocol.cpp ================================================ /* Copyright 2021 Scott Bezek and the splitflap contributors 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. */ #include "json11.hpp" #include "serial_legacy_json_protocol.h" #include "../proto_gen/splitflap.pb.h" using namespace json11; void SerialLegacyJsonProtocol::handleState(const SplitflapState& old_state, const SplitflapState& new_state) { bool all_stopped = true; for (uint8_t i = 0; i < NUM_MODULES; i++) { all_stopped &= !new_state.modules[i].moving; } if (pending_move_response_ && all_stopped) { pending_move_response_ = false; dumpStatus(new_state); } latest_state_ = new_state; } void SerialLegacyJsonProtocol::log(const char* msg) { Json body = Json::object { {"type", "log"}, {"msg", std::string(msg)}, }; stream_.println(body.dump().c_str()); } void SerialLegacyJsonProtocol::loop() { if (latest_state_.mode == SplitflapMode::MODE_SENSOR_TEST) { if (millis() - last_sensor_print_millis_ > 200) { last_sensor_print_millis_ = millis(); for (uint8_t i = 0; i < NUM_MODULES; i++) { stream_.write(latest_state_.modules[i].home_state ? '1' : '0'); } stream_.println(); } } while (stream_.available() > 0) { int b = stream_.read(); if (b == 0) { if (protocol_change_callback_) { protocol_change_callback_(SERIAL_PROTOCOL_PROTO); } break; } if (b == '%') { bool new_sensor_test_state = latest_state_.mode != SplitflapMode::MODE_SENSOR_TEST; splitflap_task_.setSensorTest(new_sensor_test_state); stream_.print("{\"type\":\"sensor_test\", \"enabled\":"); stream_.print(new_sensor_test_state ? "true" : "false"); stream_.print("}\n"); } else if (latest_state_.mode == SplitflapMode::MODE_RUN) { switch (b) { case '@': splitflap_task_.resetAll(); break; case '#': stream_.print("{\"type\":\"no_op\"}\n"); stream_.flush(); break; case '=': recv_count_ = 0; break; case '\n': pending_move_response_ = true; stream_.printf("{\"type\":\"move_echo\", \"dest\":\""); stream_.flush(); for (uint8_t i = 0; i < recv_count_; i++) { stream_.write(recv_buffer_[i]); } stream_.printf("\"}\n"); stream_.flush(); splitflap_task_.showString(recv_buffer_, recv_count_); break; case '+': if (recv_count_ == 1) { for (uint8_t i = 1; i < NUM_MODULES; i++) { recv_buffer_[i] = recv_buffer_[0]; } splitflap_task_.showString(recv_buffer_, NUM_MODULES); } break; case '>': // TODO: make the index configurable splitflap_task_.increaseOffsetTenth(0); break; case '<': // TODO: make the index configurable splitflap_task_.increaseOffsetHalf(0); break; case '\\': splitflap_task_.saveAllOffsets(); break; case '\r': // Ignore break; default: if (recv_count_ > NUM_MODULES - 1) { break; } recv_buffer_[recv_count_] = b; recv_count_++; break; } } } } void SerialLegacyJsonProtocol::sendSupervisorState(PB_SupervisorState& supervisor_state) { // Intentionally not implemented. // Advanced features like supervisor state are not supported via the legacy protocol; use // the proto protocol instead. } void SerialLegacyJsonProtocol::init() { stream_.print("\n\n\n"); stream_.print("{\"type\":\"init\", \"num_modules\":"); stream_.print(NUM_MODULES); stream_.print("}\n"); } void SerialLegacyJsonProtocol::dumpStatus(const SplitflapState& state) { stream_.print("{\"type\":\"status\", \"modules\":["); for (uint8_t i = 0; i < NUM_MODULES; i++) { stream_.print("{\"state\":\""); switch (state.modules[i].state) { case NORMAL: stream_.print("normal"); break; case LOOK_FOR_HOME: stream_.print("look_for_home"); break; case SENSOR_ERROR: stream_.print("sensor_error"); break; case PANIC: stream_.print("panic"); break; case STATE_DISABLED: stream_.print("disabled"); break; } stream_.print("\", \"flap\":\""); stream_.write(flaps[state.modules[i].flap_index]); stream_.print("\", \"count_missed_home\":"); stream_.print(state.modules[i].count_missed_home); stream_.print(", \"count_unexpected_home\":"); stream_.print(state.modules[i].count_unexpected_home); stream_.print("}"); if (i < NUM_MODULES - 1) { stream_.print(", "); } } stream_.print("]}\n"); stream_.flush(); } ================================================ FILE: firmware/esp32/splitflap/serial_legacy_json_protocol.h ================================================ /* Copyright 2021 Scott Bezek and the splitflap contributors 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. */ #pragma once #include "serial_protocol.h" #include "../proto_gen/splitflap.pb.h" class SerialLegacyJsonProtocol : public SerialProtocol { public: SerialLegacyJsonProtocol(SplitflapTask& splitflap_task, Stream& stream) : SerialProtocol(splitflap_task), stream_(stream) {} ~SerialLegacyJsonProtocol(){} void log(const char* msg) override; void loop() override; void handleState(const SplitflapState& old_state, const SplitflapState& new_state) override; void sendSupervisorState(PB_SupervisorState& supervisor_state) override; void init(); private: Stream& stream_; SplitflapState latest_state_ = {}; uint8_t recv_count_ = 0; char recv_buffer_[NUM_MODULES] = {}; bool pending_move_response_ = false; uint32_t last_sensor_print_millis_ = 0; void dumpStatus(const SplitflapState& state); }; ================================================ FILE: firmware/esp32/splitflap/serial_proto_protocol.cpp ================================================ /* Copyright 2021 Scott Bezek and the splitflap contributors 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. */ #include "../proto_gen/splitflap.pb.h" #include "crc32.h" #include "pb_encode.h" #include "pb_decode.h" #include "serial_proto_protocol.h" static SerialProtoProtocol* singleton_for_packet_serial = 0; static const uint16_t MIN_STATE_INTERVAL_MILLIS = 100; static const uint16_t PERIODIC_STATE_INTERVAL_MILLIS = 5000; SerialProtoProtocol::SerialProtoProtocol(SplitflapTask& splitflap_task, Stream& stream) : SerialProtocol(splitflap_task), stream_(stream) { packet_serial_.setStream(&stream); // Note: not threadsafe or instance safe!! but PacketSerial requires a legacy function pointer, so we can't // use a member, std::function, or lambda with captures assert(singleton_for_packet_serial == 0); singleton_for_packet_serial = this; packet_serial_.setPacketHandler([](const uint8_t* buffer, size_t size) { singleton_for_packet_serial->handlePacket(buffer, size); }); } void SerialProtoProtocol::handleState(const SplitflapState& old_state, const SplitflapState& new_state) { latest_state_ = new_state; } void SerialProtoProtocol::ack(uint32_t nonce) { pb_tx_buffer_ = {}; pb_tx_buffer_.which_payload = PB_FromSplitflap_ack_tag; pb_tx_buffer_.payload.ack.nonce = nonce; sendPbTxBuffer(); } void SerialProtoProtocol::log(const char* msg) { pb_tx_buffer_ = {}; pb_tx_buffer_.which_payload = PB_FromSplitflap_log_tag; strlcpy(pb_tx_buffer_.payload.log.msg, msg, sizeof(pb_tx_buffer_.payload.log.msg)); sendPbTxBuffer(); } void SerialProtoProtocol::sendSupervisorState(PB_SupervisorState& supervisor_state) { pb_tx_buffer_ = {}; pb_tx_buffer_.which_payload = PB_FromSplitflap_supervisor_state_tag; pb_tx_buffer_.payload.supervisor_state = supervisor_state; sendPbTxBuffer(); } void SerialProtoProtocol::loop() { do { packet_serial_.update(); } while (stream_.available()); { // SplitflapState updates // Rate limit state change transmissions bool state_changed = latest_state_ != last_sent_state_ && millis() - last_sent_state_millis_ >= MIN_STATE_INTERVAL_MILLIS; // Send state periodically or when forced, regardless of rate limit for state changes bool force_send_state = state_requested_ || millis() - last_sent_state_millis_ > PERIODIC_STATE_INTERVAL_MILLIS; if (state_changed || force_send_state) { pb_tx_buffer_ = {}; pb_tx_buffer_.which_payload = PB_FromSplitflap_splitflap_state_tag; pb_tx_buffer_.payload.splitflap_state.modules_count = NUM_MODULES; for (uint8_t i = 0; i < NUM_MODULES; i++) { pb_tx_buffer_.payload.splitflap_state.modules[i] = { .state = (PB_SplitflapState_ModuleState_State) latest_state_.modules[i].state, .flap_index = latest_state_.modules[i].flap_index, .moving = latest_state_.modules[i].moving, .home_state = latest_state_.modules[i].home_state, .count_unexpected_home = latest_state_.modules[i].count_unexpected_home, .count_missed_home = latest_state_.modules[i].count_missed_home, }; } #ifdef CHAINLINK pb_tx_buffer_.payload.splitflap_state.loopbacks_ok = latest_state_.loopbacks_ok; #endif sendPbTxBuffer(); last_sent_state_ = latest_state_; last_sent_state_millis_ = millis(); } } { // GeneralState updates // Send state periodically or when forced bool force_send_state = state_requested_ || millis() - last_sent_general_state_millis_ > 2000; if (force_send_state) { PB_GeneralState state = {}; state.serial_protocol_version = SERIAL_PROTOCOL_VERSION; state.uptime_millis = millis(); snprintf(state.build_info.git_hash, sizeof(state.build_info.git_hash), BUILD_GIT_HASH); snprintf(state.build_info.build_date, sizeof(state.build_info.build_date), BUILD_DATE); snprintf(state.build_info.build_os, sizeof(state.build_info.build_os), BUILD_OS); state.has_build_info = true; memcpy(&state.flap_character_set.bytes, flaps, NUM_FLAPS); state.flap_character_set.size = NUM_FLAPS; pb_tx_buffer_ = {}; pb_tx_buffer_.which_payload = PB_FromSplitflap_general_state_tag; pb_tx_buffer_.payload.general_state = state; sendPbTxBuffer(); last_sent_general_state_millis_ = millis(); } } if (state_requested_) { // Handled above state_requested_ = false; } } void SerialProtoProtocol::handlePacket(const uint8_t* buffer, size_t size) { if (size <= 4) { // Too small, ignore bad packet log("Small packet"); return; } // Compute and append little-endian CRC32 uint32_t expected_crc = 0; crc32(buffer, size - 4, &expected_crc); uint32_t provided_crc = buffer[size - 4] | (buffer[size - 3] << 8) | (buffer[size - 2] << 16) | (buffer[size - 1] << 24); if (expected_crc != provided_crc) { char buf[200]; snprintf(buf, sizeof(buf), "Bad CRC (%u byte packet). Expected %08x but got %08x.", size - 4, expected_crc, provided_crc); log(buf); return; } pb_istream_t stream = pb_istream_from_buffer(buffer, size - 4); if (!pb_decode(&stream, PB_ToSplitflap_fields, &pb_rx_buffer_)) { char buf[200]; snprintf(buf, sizeof(buf), "Decoding failed: %s", PB_GET_ERROR(&stream)); log(buf); return; } // Always ACK immediately ack(pb_rx_buffer_.nonce); if (pb_rx_buffer_.nonce == last_nonce_) { // Ignore any extraneous retries char buf[200]; snprintf(buf, sizeof(buf), "Already handled nonce %u", pb_rx_buffer_.nonce); log(buf); return; } last_nonce_ = pb_rx_buffer_.nonce; switch (pb_rx_buffer_.which_payload) { case PB_ToSplitflap_splitflap_command_tag: { PB_SplitflapCommand command = pb_rx_buffer_.payload.splitflap_command; if (command.modules_count > 0) { Command c = {}; c.command_type = CommandType::MODULES; for (uint8_t i = 0; i < min((int)command.modules_count, NUM_MODULES); i++) { switch (command.modules[i].action) { case PB_SplitflapCommand_ModuleCommand_Action_NO_OP: c.data.module_command[i] = QCMD_NO_OP; break; case PB_SplitflapCommand_ModuleCommand_Action_RESET_AND_HOME: c.data.module_command[i] = QCMD_RESET_AND_HOME; break; case PB_SplitflapCommand_ModuleCommand_Action_GO_TO_FLAP: if (command.modules[i].param <= 255 - QCMD_FLAP) { c.data.module_command[i] = QCMD_FLAP + command.modules[i].param; } break; case PB_SplitflapCommand_ModuleCommand_Action_INCREASE_OFFSET_TENTH: c.data.module_command[i] = QCMD_INCR_OFFSET_TENTH; break; case PB_SplitflapCommand_ModuleCommand_Action_INCREASE_OFFSET_HALF: c.data.module_command[i] = QCMD_INCR_OFFSET_HALF; break; case PB_SplitflapCommand_ModuleCommand_Action_SET_OFFSET: c.data.module_command[i] = QCMD_SET_OFFSET; break; default: // Ignore unknown action break; } } splitflap_task_.postRawCommand(c); } else if (command.save_all_offsets) { splitflap_task_.saveAllOffsets(); } break; } case PB_ToSplitflap_splitflap_config_tag: { PB_SplitflapConfig config = pb_rx_buffer_.payload.splitflap_config; Command c = {}; c.command_type = CommandType::CONFIG; for (uint8_t i = 0; i < min((int)config.modules_count, NUM_MODULES); i++) { ModuleConfig& module_config = c.data.module_configs.config[i]; module_config.target_flap_index = config.modules[i].target_flap_index; module_config.movement_nonce = config.modules[i].movement_nonce; module_config.reset_nonce = config.modules[i].reset_nonce; } splitflap_task_.postRawCommand(c); break; } case PB_ToSplitflap_request_state_tag: state_requested_ = true; break; default: { char buf[200]; snprintf(buf, sizeof(buf), "Unknown ToSplitflap type: %d", pb_rx_buffer_.which_payload); log(buf); return; } } } void SerialProtoProtocol::sendPbTxBuffer() { // Encode protobuf message to byte buffer pb_ostream_t stream = pb_ostream_from_buffer(tx_buffer_, sizeof(tx_buffer_)); if (!pb_encode(&stream, PB_FromSplitflap_fields, &pb_tx_buffer_)) { stream_.println(stream.errmsg); stream_.flush(); assert(false); } // Compute and append little-endian CRC32 uint32_t crc = 0; crc32(tx_buffer_, stream.bytes_written, &crc); tx_buffer_[stream.bytes_written + 0] = (crc >> 0) & 0xFF; tx_buffer_[stream.bytes_written + 1] = (crc >> 8) & 0xFF; tx_buffer_[stream.bytes_written + 2] = (crc >> 16) & 0xFF; tx_buffer_[stream.bytes_written + 3] = (crc >> 24) & 0xFF; // Encode and send proto+CRC as a COBS packet packet_serial_.send(tx_buffer_, stream.bytes_written + 4); } ================================================ FILE: firmware/esp32/splitflap/serial_proto_protocol.h ================================================ /* Copyright 2024 Scott Bezek and the splitflap contributors 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. */ #pragma once #include "PacketSerial.h" #include "serial_protocol.h" #include "../proto_gen/splitflap.pb.h" /* * Serial protocol version changelog * * 0 (unset): * - No GeneralState message * - May or may not have software offset support * 1: * - GeneralState is introduced (including introduction of serial protocol versioning) */ #define SERIAL_PROTOCOL_VERSION (1); class SerialProtoProtocol : public SerialProtocol { public: SerialProtoProtocol(SplitflapTask& splitflap_task, Stream& stream); ~SerialProtoProtocol() {} void log(const char* msg) override; void loop() override; void handleState(const SplitflapState& old_state, const SplitflapState& new_state) override; void sendSupervisorState(PB_SupervisorState& supervisor_state) override; void init(); private: Stream& stream_; PB_FromSplitflap pb_tx_buffer_; PB_ToSplitflap pb_rx_buffer_; uint8_t tx_buffer_[PB_FromSplitflap_size + 4]; // Max message size + CRC32 PacketSerial_ packet_serial_; uint32_t last_nonce_; SplitflapState latest_state_ = {}; SplitflapState last_sent_state_ = {}; uint32_t last_sent_state_millis_ = 0; uint32_t last_sent_general_state_millis_ = 0; bool state_requested_; void sendPbTxBuffer(); void handlePacket(const uint8_t* buffer, size_t size); void ack(uint32_t nonce); }; ================================================ FILE: firmware/esp32/splitflap/serial_protocol.h ================================================ /* Copyright 2021 Scott Bezek and the splitflap contributors 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. */ #pragma once #include #include "../core/logger.h" #include "../core/splitflap_task.h" #include "../proto_gen/splitflap.pb.h" #define SERIAL_PROTOCOL_LEGACY 0 #define SERIAL_PROTOCOL_PROTO 1 typedef std::function ProtocolChangeCallback; class SerialProtocol : public Logger { public: SerialProtocol(SplitflapTask& splitflap_task) : Logger(), splitflap_task_(splitflap_task) {} virtual ~SerialProtocol(){} virtual void loop() = 0; virtual void handleState(const SplitflapState& old_state, const SplitflapState& new_state) = 0; virtual void sendSupervisorState(PB_SupervisorState& supervisor_state) = 0; virtual void setProtocolChangeCallback(ProtocolChangeCallback cb) { protocol_change_callback_ = cb; } protected: SplitflapTask& splitflap_task_; ProtocolChangeCallback protocol_change_callback_; }; ================================================ FILE: firmware/esp32/splitflap/serial_task.cpp ================================================ /* Copyright 2021 Scott Bezek and the splitflap contributors 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. */ #include "serial_task.h" #include "../core/uart_stream.h" SerialTask::SerialTask(SplitflapTask& splitflap_task, const uint8_t task_core) : Task("Serial", 16000, 1, task_core), Logger(), splitflap_task_(splitflap_task), stream_(), legacy_protocol_(splitflap_task_, stream_), proto_protocol_(splitflap_task_, stream_) { log_queue_ = xQueueCreate(10, sizeof(std::string *)); assert(log_queue_ != NULL); supervisor_state_queue_ = xQueueCreate(1, sizeof(PB_SupervisorState)); assert(supervisor_state_queue_ != NULL); } void SerialTask::run() { stream_.begin(); // Start in legacy protocol mode legacy_protocol_.init(); SerialProtocol* current_protocol = &legacy_protocol_; ProtocolChangeCallback protocol_change_callback = [this, ¤t_protocol] (uint8_t protocol) { switch (protocol) { case SERIAL_PROTOCOL_LEGACY: current_protocol = &legacy_protocol_; break; case SERIAL_PROTOCOL_PROTO: current_protocol = &proto_protocol_; break; default: log("Unknown protocol requested"); break; } }; legacy_protocol_.setProtocolChangeCallback(protocol_change_callback); proto_protocol_.setProtocolChangeCallback(protocol_change_callback); splitflap_task_.setLogger(this); SplitflapState last_state = {}; while(1) { SplitflapState new_state = splitflap_task_.getState(); if (new_state != last_state) { current_protocol->handleState(last_state, new_state); last_state = new_state; } current_protocol->loop(); std::string* log_string; while (xQueueReceive(log_queue_, &log_string, 0) == pdTRUE) { current_protocol->log(log_string->c_str()); delete log_string; } PB_SupervisorState supervisor_state; if (xQueueReceive(supervisor_state_queue_, &supervisor_state, 0) == pdTRUE) { current_protocol->sendSupervisorState(supervisor_state); } delay(1); } } void SerialTask::log(const char* msg) { // Allocate a string for the duration it's in the queue; it is free'd by the queue consumer std::string* msg_str = new std::string(msg); // Put string in queue (or drop if full to avoid blocking) xQueueSendToBack(log_queue_, &msg_str, 0); } void SerialTask::sendSupervisorState(PB_SupervisorState& supervisor_state) { // Only queue the latest supervisor state xQueueOverwrite(supervisor_state_queue_, &supervisor_state); } ================================================ FILE: firmware/esp32/splitflap/serial_task.h ================================================ /* Copyright 2021 Scott Bezek and the splitflap contributors 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. */ #pragma once #include "config.h" #include "../core/splitflap_task.h" #include "../core/task.h" #include "../core/uart_stream.h" #include "serial_legacy_json_protocol.h" #include "serial_proto_protocol.h" class SerialTask : public Task, public Logger { friend class Task; // Allow base Task to invoke protected run() public: SerialTask(SplitflapTask& splitflap_task, const uint8_t task_core); virtual ~SerialTask() {}; void log(const char* msg) override; void sendSupervisorState(PB_SupervisorState& supervisor_state); protected: void run(); private: SplitflapTask& splitflap_task_; UartStream stream_; SerialLegacyJsonProtocol legacy_protocol_; SerialProtoProtocol proto_protocol_; QueueHandle_t log_queue_; QueueHandle_t supervisor_state_queue_; void dumpStatus(SplitflapState& state); }; ================================================ FILE: firmware/esp32/tester/base64url.cpp ================================================ // https://raw.githubusercontent.com/zhicheng/base64/master/base64.c /* This is a public domain base64 implementation written by WEI Zhicheng. */ #include #include "base64url.h" /* BASE 64 encode table */ static const char base64en[] = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '-', '_', }; #define BASE64_PAD '=' #define BASE64DE_FIRST '+' #define BASE64DE_LAST 'z' /* ASCII order for BASE 64 decode, -1 in unused character */ static const signed char base64de[] = { /* '+', ',', '-', '.', '/', '0', '1', '2', */ 62, -1, -1, -1, 63, 52, 53, 54, /* '3', '4', '5', '6', '7', '8', '9', ':', */ 55, 56, 57, 58, 59, 60, 61, -1, /* ';', '<', '=', '>', '?', '@', 'A', 'B', */ -1, -1, -1, -1, -1, -1, 0, 1, /* 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', */ 2, 3, 4, 5, 6, 7, 8, 9, /* 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', */ 10, 11, 12, 13, 14, 15, 16, 17, /* 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', */ 18, 19, 20, 21, 22, 23, 24, 25, /* '[', '\', ']', '^', '_', '`', 'a', 'b', */ -1, -1, -1, -1, -1, -1, 26, 27, /* 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', */ 28, 29, 30, 31, 32, 33, 34, 35, /* 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', */ 36, 37, 38, 39, 40, 41, 42, 43, /* 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', */ 44, 45, 46, 47, 48, 49, 50, 51, }; int base64url_encode(const unsigned char *in, unsigned int inlen, char *out) { unsigned int i, j; for (i = j = 0; i < inlen; i++) { int s = i % 3; /* from 6/gcd(6, 8) */ switch (s) { case 0: out[j++] = base64en[(in[i] >> 2) & 0x3F]; continue; case 1: out[j++] = base64en[((in[i-1] & 0x3) << 4) + ((in[i] >> 4) & 0xF)]; continue; case 2: out[j++] = base64en[((in[i-1] & 0xF) << 2) + ((in[i] >> 6) & 0x3)]; out[j++] = base64en[in[i] & 0x3F]; } } /* move back */ i -= 1; /* check the last and add padding */ if ((i % 3) == 0) { out[j++] = base64en[(in[i] & 0x3) << 4]; //out[j++] = BASE64_PAD; //out[j++] = BASE64_PAD; } else if ((i % 3) == 1) { out[j++] = base64en[(in[i] & 0xF) << 2]; //out[j++] = BASE64_PAD; } out[j++] = 0; return BASE64_OK; } int base64url_decode(const char *in, unsigned int inlen, unsigned char *out) { unsigned int i, j; for (i = j = 0; i < inlen; i++) { int c; int s = i % 4; /* from 8/gcd(6, 8) */ if (in[i] == '=') return BASE64_OK; if (in[i] < BASE64DE_FIRST || in[i] > BASE64DE_LAST || (c = base64de[in[i] - BASE64DE_FIRST]) == -1) return BASE64_INVALID; switch (s) { case 0: out[j] = ((unsigned int)c << 2) & 0xFF; continue; case 1: out[j++] += ((unsigned int)c >> 4) & 0x3; /* if not last char with padding */ if (i < (inlen - 3) || in[inlen - 2] != '=') out[j] = ((unsigned int)c & 0xF) << 4; continue; case 2: out[j++] += ((unsigned int)c >> 2) & 0xF; /* if not last char with padding */ if (i < (inlen - 2) || in[inlen - 1] != '=') out[j] = ((unsigned int)c & 0x3) << 6; continue; case 3: out[j++] += (unsigned char)c; } } return BASE64_OK; } ================================================ FILE: firmware/esp32/tester/base64url.h ================================================ // https://raw.githubusercontent.com/zhicheng/base64/master/base64.h #ifndef __BASE64URL_H__ #define __BASE64URL_H__ enum {BASE64_OK = 0, BASE64_INVALID}; #define BASE64_ENCODE_OUT_SIZE(s) (((s) + 2) / 3 * 4) #define BASE64_DECODE_OUT_SIZE(s) (((s)) / 4 * 3) int base64url_encode(const unsigned char *in, unsigned int inlen, char *out); int base64url_decode(const char *in, unsigned int inlen, unsigned char *out); #endif /* __BASE64URL_H__ */ ================================================ FILE: firmware/esp32/tester/firestore.cpp ================================================ /* Copyright 2021 Scott Bezek and the splitflap contributors 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. */ #include #include #include "json11.hpp" #include "firestore.h" const String FIRESTORE_BASE_URL = "https://firestore.googleapis.com/v1/"; using namespace json11; Firestore::Firestore(String project_id, Jwt jwt) : project_id_(project_id), jwt_(jwt) { } Json Firestore::get(String path, size_t json_capacity=1024) { uint32_t start = millis(); HTTPClient http; http.begin(FIRESTORE_BASE_URL + doc_path(path)); http.addHeader("Authorization", "Bearer " + jwt_.get()); int http_code = http.GET(); Serial.printf("Finished request in %lu millis.\n", millis() - start); if (http_code > 0) { Serial.println(http_code); std::string err; Json json = Json::parse(http.getString().c_str(), err); if (err.empty()) { Serial.println(json.dump().c_str()); } else { Serial.printf("Error parsing response! %s", err.c_str()); } http.end(); return json; } else { Serial.println("Error on HTTP request"); } http.end(); return Json(); } bool Firestore::set(String path, Json fields) { uint32_t start = millis(); Json body = Json::object { {"writes", Json::array { Json::object { {"update", Json::object { {"name", std::string(doc_path(path).c_str())}, {"fields", fields}, }}, }, }}, }; String body_str = String(body.dump().c_str()); Serial.println(body_str); HTTPClient http; http.begin(FIRESTORE_BASE_URL + base_path() + ":batchWrite"); http.addHeader("Authorization", "Bearer " + jwt_.get()); int http_code = http.POST(body_str); Serial.printf("Finished request in %lu millis.\n", millis() - start); if (http_code > 0) { Serial.println(http_code); std::string err; Json json = Json::parse(http.getString().c_str(), err); http.end(); if (err.empty()) { // TODO: Check result for errors! Serial.println(json.dump().c_str()); return http_code == 200; } else { Serial.printf("Error parsing response! %s", err.c_str()); return false; } } else { http.end(); Serial.println("Error on HTTP request"); return false; } } const String Firestore::auto_id_chars_ = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; // Based on the JS auto-id implementation: https://github.com/firebase/firebase-js-sdk/blob/4f446f0a1c00f080fb58451b086efa899be97a08/packages/firestore/src/util/misc.ts#L24-L34 String Firestore::gen_auto_id() { String s; for (uint8_t i = 0; i < 20; i++) { s += auto_id_chars_[random(auto_id_chars_.length())]; } return s; } String Firestore::base_path() { return "projects/" + project_id_ + "/databases/(default)/documents"; } String Firestore::doc_path(String path) { return base_path() + "/" + path; } ================================================ FILE: firmware/esp32/tester/firestore.h ================================================ /* Copyright 2021 Scott Bezek and the splitflap contributors 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. */ #pragma once #include #include "json11.hpp" #include "jwt.h" class Firestore { public: Firestore(String project_id, Jwt jwt); json11::Json get(String path, size_t json_capacity); bool set(String path, json11::Json fields); static String gen_auto_id(); private: static const String auto_id_chars_; String project_id_; Jwt jwt_; String base_path(); String doc_path(String path); }; ================================================ FILE: firmware/esp32/tester/firestore_test_reporter.cpp ================================================ /* Copyright 2021 Scott Bezek and the splitflap contributors 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. */ #include "firestore_test_reporter.h" using namespace json11; const String COLLECTION = "qcResults"; FirestoreTestReporter::FirestoreTestReporter(Firestore firestore) : firestore_(firestore) {} std::string FirestoreTestReporter::resultCodeToString(Result::Code result_code) { switch (result_code) { case Result::Code::ABORT: return "ABORT"; case Result::Code::FAIL: return "FAIL"; case Result::Code::PASS: return "PASS"; default: return "UNKNOWN"; } } bool FirestoreTestReporter::checkFirestoreAccess() { Json r = firestore_.get("dummy/dummy", 1024); if (r["fields"]["test"]["integerValue"].string_value() == "123") { return true; } return false; } void FirestoreTestReporter::testSuiteStarted(String serial, uint32_t test_suite_version) { test_suite_start_millis_ = millis(); test_results_.clear(); test_suite_document_ = Json::object { {"serial", Json::object { {"stringValue", std::string(serial.c_str())}, }}, {"sku", Json::object { {"stringValue", "CD01"}, }}, {"start_seconds", Json::object { {"integerValue", std::string(String(time(nullptr)).c_str())}, }}, {"test_suite_version", Json::object { {"integerValue", std::string(String(test_suite_version).c_str())}, }}, }; } bool FirestoreTestReporter::testSuiteFinished(Result::Code result_code) { test_suite_document_["end_seconds"] = Json::object { {"integerValue", std::string(String(time(nullptr)).c_str())}, }; test_suite_document_["duration_millis"] = Json::object { {"integerValue", std::string(String(millis() - test_suite_start_millis_).c_str())}, }; test_suite_document_["tests"] = Json::object { {"arrayValue", Json::object { {"values", test_results_}, }}, }; test_suite_document_["result"] = Json::object { {"stringValue", resultCodeToString(result_code)}, }; bool result = firestore_.set(COLLECTION + "/" + Firestore::gen_auto_id(), test_suite_document_); test_suite_document_ = Json::object(); return result; } void FirestoreTestReporter::testStarted(String id) { current_test_id_ = id; test_start_millis_ = millis(); } void FirestoreTestReporter::testFinished(Result result) { test_results_.push_back(Json::object { {"mapValue", Json::object { {"fields", Json::object { {"id", Json::object { {"stringValue", std::string(current_test_id_.c_str())}, }}, {"result", Json::object { {"stringValue", resultCodeToString(result.result_code_)}, }}, {"message", Json::object { {"stringValue", std::string(result.message_.c_str())}, }}, {"duration_millis", Json::object { {"integerValue", std::string(String(millis() - test_start_millis_).c_str())}, }}, }}, }}, }); current_test_id_ = ""; test_start_millis_ = 0; } ================================================ FILE: firmware/esp32/tester/firestore_test_reporter.h ================================================ /* Copyright 2021 Scott Bezek and the splitflap contributors 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. */ #pragma once #include #include "json11.hpp" #include "firestore.h" #include "result.h" class FirestoreTestReporter { public: FirestoreTestReporter(Firestore firestore); bool checkFirestoreAccess(); void testSuiteStarted(String serial, uint32_t test_suite_version); bool testSuiteFinished(Result::Code result_code); void testStarted(String id); void testFinished(Result result); private: static std::string resultCodeToString(Result::Code result_code); Firestore firestore_; json11::Json::object test_suite_document_; uint32_t test_suite_start_millis_; uint32_t test_start_millis_; String current_test_id_; json11::Json::array test_results_; }; ================================================ FILE: firmware/esp32/tester/jwt.cpp ================================================ #include #include #include #include #include "jwt.h" #include "base64url.h" Jwt::Jwt(const char* audience, const char* service_key_id, const char* email, uint8_t* private_key, size_t private_key_size) : audience_(audience), service_key_id_(service_key_id), email_(email), private_key_(private_key), private_key_size_(private_key_size) {} String Jwt::get() { time_t now = time(NULL); if (now - last_refresh_ > 50 * 60) { Serial.println("Regenerating JWT..."); uint32_t start = millis(); char* jwt = createGCPJWT(audience_, service_key_id_, email_, private_key_, private_key_size_, now); if (jwt == nullptr) { return ""; } else { last_refresh_ = now; last_jwt_ = String(jwt); free(jwt); Serial.printf("Finished JWT in %lu millis.\n", millis() - start); return last_jwt_; } } else { return last_jwt_; } } char* Jwt::mbedtlsError(int errnum) { static char buffer[200]; mbedtls_strerror(errnum, buffer, sizeof(buffer)); return buffer; } // mbedtlsError char* Jwt::createGCPJWT(const char* audience, const char* service_key_id, const char* email, uint8_t* privateKey, size_t privateKeySize, time_t now) { char base64Header[100]; char header[100]; sprintf(header, "{\"alg\":\"RS256\",\"typ\":\"JWT\",\"kid\":\"%s\"}", service_key_id); base64url_encode( (unsigned char *)header, // Data to encode. strlen(header), // Length of data to encode. base64Header); // Base64 encoded data. uint32_t iat = now; // Set the time now. uint32_t exp = iat + 60*60; // Set the expiry time. char payload[400]; sprintf(payload, "{\"iat\":%d,\"exp\":%d,\"aud\":\"%s\",\"iss\":\"%s\",\"sub\":\"%s\"}", iat, exp, audience, email, email); char base64Payload[400]; base64url_encode( (unsigned char *)payload, // Data to encode. strlen(payload), // Length of data to encode. base64Payload); // Base64 encoded data. uint8_t headerAndPayload[800]; sprintf((char*)headerAndPayload, "%s.%s", base64Header, base64Payload); // At this point we have created the header and payload parts, converted both to base64 and concatenated them // together as a single string. Now we need to sign them using RSASSA mbedtls_pk_context pk_context; mbedtls_pk_init(&pk_context); int rc = mbedtls_pk_parse_key(&pk_context, privateKey, privateKeySize, NULL, 0); if (rc != 0) { printf("Failed to mbedtls_pk_parse_key: %d (-0x%x): %s\n", rc, -rc, mbedtlsError(rc)); return nullptr; } uint8_t oBuf[5000]; mbedtls_entropy_context entropy; mbedtls_ctr_drbg_context ctr_drbg; mbedtls_ctr_drbg_init(&ctr_drbg); mbedtls_entropy_init(&entropy); const char* pers="MyEntropy"; mbedtls_ctr_drbg_seed( &ctr_drbg, mbedtls_entropy_func, &entropy, (const unsigned char*)pers, strlen(pers)); uint8_t digest[32]; rc = mbedtls_md(mbedtls_md_info_from_type(MBEDTLS_MD_SHA256), headerAndPayload, strlen((char*)headerAndPayload), digest); if (rc != 0) { printf("Failed to mbedtls_md: %d (-0x%x): %s\n", rc, -rc, mbedtlsError(rc)); return nullptr; } size_t retSize; rc = mbedtls_pk_sign(&pk_context, MBEDTLS_MD_SHA256, digest, sizeof(digest), oBuf, &retSize, mbedtls_ctr_drbg_random, &ctr_drbg); if (rc != 0) { printf("Failed to mbedtls_pk_sign: %d (-0x%x): %s\n", rc, -rc, mbedtlsError(rc)); return nullptr; } char base64Signature[600]; base64url_encode((unsigned char *)oBuf, retSize, base64Signature); char* retData = (char*)malloc(strlen((char*)headerAndPayload) + 1 + strlen((char*)base64Signature) + 1); sprintf(retData, "%s.%s", headerAndPayload, base64Signature); mbedtls_pk_free(&pk_context); return retData; } ================================================ FILE: firmware/esp32/tester/jwt.h ================================================ #pragma once #include class Jwt { public: Jwt(const char* audience, const char* service_key_id, const char* email, uint8_t* private_key, size_t private_key_size); String get(); /** * Create a JWT token for GCP. * For full details, perform a Google search on JWT. However, in summary, we build two strings. One that represents the * header and one that represents the payload. Both are JSON and are as described in the GCP and JWT documentation. Next * we base64url encode both strings. Note that is distinct from normal/simple base64 encoding. Once we have a string for * the base64url encoding of both header and payload, we concatenate both strings together separated by a ".". This resulting * string is then signed using RSASSA which basically produces an SHA256 message digest that is then signed. The resulting * binary is then itself converted into base64url and concatenated with the previously built base64url combined header and * payload and that is our resulting JWT token. * @param projectId The GCP project. * @param privateKey The PEM or DER of the private key. * @param privateKeySize The size in bytes of the private key. * @returns A JWT token for transmission to GCP. */ static char* createGCPJWT(const char* audience, const char* service_key_id, const char* email, uint8_t* privateKey, size_t privateKeySize, time_t now); private: const char* audience_; const char* service_key_id_; const char* email_; uint8_t* private_key_; size_t private_key_size_; time_t last_refresh_ = 0; String last_jwt_; /** * Return a string representation of an mbedtls error code */ static char* mbedtlsError(int errnum); }; ================================================ FILE: firmware/esp32/tester/main.cpp ================================================ /* Copyright 2020 Scott Bezek and the splitflap contributors 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. */ #include #include "config.h" #include "../core/splitflap_task.h" #include "tester_task.h" SplitflapTask splitflapTask(1, LedMode::MANUAL); TesterTask testerTask(splitflapTask, 0); void setup() { Serial.begin(MONITOR_SPEED); splitflapTask.begin(); testerTask.begin(); // Delete the default Arduino loopTask to free up Core 1 vTaskDelete(NULL); } void loop() { assert(false); } ================================================ FILE: firmware/esp32/tester/result.h ================================================ #pragma once #include class Result { public: enum class Code : uint8_t { PASS = 0, FAIL = 1, ABORT = 2, }; const Code result_code_; const String message_; bool canContinue() { return result_code_ == Code::PASS; } static Result pass(String message) { return Result(Code::PASS, message); } static Result fail(String message) { return Result(Code::FAIL, message); } static Result abort(String message) { return Result(Code::ABORT, message); } private: Result(Code code, String message) : result_code_(code), message_(message) {}; }; ================================================ FILE: firmware/esp32/tester/secrets.h.example ================================================ // Rename this file to secrets.h and add your secret details. #pragma once // Network setup #define WIFI_SSID "" #define WIFI_PASSWORD "" const char* project_id = ""; const char* service_key_id = ""; const char* service_email = "@.iam.gserviceaccount.com"; // Generate using `xxd -i`, then ADD 0x00 to the end and increase _len by 1! unsigned char service_private_key[] = {}; unsigned int service_private_key_len = 0; ================================================ FILE: firmware/esp32/tester/tester_task.cpp ================================================ /* Copyright 2021 Scott Bezek and the splitflap contributors 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. */ #include #include #include #include #include "config.h" #include "firestore.h" #include "firestore_test_reporter.h" #include "jwt.h" #include "secrets.h" #include "tester_task.h" #define PIN_MOTOR_POWER 13 #define PIN_MOTOR_TEST_FEED 27 #define PIN_MCP_NRESET 26 #define PIN_3V3_FUSED 36 #define PIN_BUTTON_BOTTOM 0 #define MCP_PIN_LED_SENSOR_0 0 #define MCP_PIN_CLAMP 12 #define MCP_PIN_BUZZER 11 // Number of modules being tested (different than NUM_MODULES since we only need to test 1 module on the chained board) #define TEST_MODULES 7 #define TEST_SUITE_VERSION 9 using namespace json11; TesterTask::TesterTask(SplitflapTask& splitflap_task, const uint8_t task_core) : Task{"Tester", 16000, 1, task_core}, splitflap_task_{splitflap_task}, jwt_("https://firestore.googleapis.com/", service_key_id, service_email, service_private_key, service_private_key_len), firestore_(project_id, jwt_), firestore_test_reporter_(firestore_) { } void TesterTask::disableHardware() { digitalWrite(PIN_MOTOR_POWER, LOW); digitalWrite(PIN_MOTOR_TEST_FEED, LOW); } void TesterTask::drawSimpleText(uint32_t foreground, uint32_t background, String title, String details, String bottom_button_label = "") { spr_.fillRect(0,0, TFT_HEIGHT, TFT_WIDTH, background); spr_.setTextColor(foreground); spr_.setTextDatum(TL_DATUM); uint8_t title_size = 5; if (title.length() > 12) { title_size = 2; } else if (title.length() > 7) { title_size = 3; } spr_.setTextSize(title_size); spr_.setCursor(0, 0); spr_.print(title.c_str()); uint8_t detail_size = 3; if (details.length() > 30) { detail_size = 0; } else if (details.length() > 20) { detail_size = 1; } else if (details.length() > 12) { detail_size = 2; } spr_.setTextSize(detail_size); spr_.setCursor(0, title_size * 9); spr_.print(details.c_str()); if (bottom_button_label.length() > 0) { spr_.setTextDatum(BR_DATUM); spr_.setTextSize(1); spr_.drawString(bottom_button_label, TFT_HEIGHT - 2, TFT_WIDTH - 2); } spr_.pushSprite(0, 0); } Status TesterTask::doMaintenance() { esp_err_t result = esp_task_wdt_reset(); ESP_ERROR_CHECK(result); voltage_ = ina219_.getBusVoltage_V(); current_ = ina219_.getCurrent_mA(); if (voltage_ > 13) { disableHardware(); return Status::fatal("Over-voltage: " + String(voltage_)); } else if (current_ > 2000) { if (first_over_current_millis_ == 0) { first_over_current_millis_ = millis(); } else if (millis() - first_over_current_millis_ > 50) { disableHardware(); return Status::fatal("Over-current: " + String(current_)); } } else { first_over_current_millis_ = 0; } clamped_ = !mcp_.digitalRead(MCP_PIN_CLAMP); button_bottom_pressed_ = !digitalRead(PIN_BUTTON_BOTTOM); return Status::ok(); } Result TesterTask::doTestMaintenance() { Status status = doMaintenance(); if (!status.isOk()) { return Result::abort(status.message_); } if (!clamped_) { disableHardware(); return Result::fail("Board was removed during test!"); } if (!digitalRead(PIN_3V3_FUSED)) { disableHardware(); return Result::fail("3.3v failure"); } return Result::pass(""); } Result TesterTask::delayWithMaintenance(uint32_t delay_millis) { uint32_t start = millis(); while (millis() - start < delay_millis) { Result maintenanceResult = doTestMaintenance(); if (!maintenanceResult.canContinue()) { return maintenanceResult; } } return Result::pass(""); } Status TesterTask::waitForBoardInserted() { Serial.println("Waiting for board to be inserted..."); uint32_t time_clamped = 0; while (1) { Status status = doMaintenance(); if (!status.isOk()) { return status; } if (!clamped_) { drawSimpleText(TFT_WHITE, COLOR_ACTION, "Insert board", ""); time_clamped = 0; } else { drawSimpleText(TFT_WHITE, TFT_BLACK, "Please wait...", ""); if (time_clamped == 0) { time_clamped = millis(); } else if (millis() - time_clamped > 1500) { return Status::ok(); } } } } Status TesterTask::waitForBoardRemoved() { Serial.println("Waiting for board to be removed..."); uint32_t time_unclamped = 0; while (1) { Status status = doMaintenance(); if (!status.isOk()) { return status; } if (clamped_ && !button_bottom_pressed_) { time_unclamped = 0; } else { if (time_unclamped == 0) { time_unclamped = millis(); } else if (millis() - time_unclamped > 1500) { return Status::ok(); } } } } Result TesterTask::readSerial() { Serial.println("Reading board serial..."); for (uint8_t i = 0; i < 3; i++) { // Trigger scan Serial1.print("~T."); String buffer; bool got_ack = false; uint32_t start = millis(); while (millis() - start < 1500) { Result maintenanceResult = doTestMaintenance(); if (!maintenanceResult.canContinue()) { return maintenanceResult; } if (Serial1.available()) { int b = Serial1.read(); if (!got_ack) { if (b == 6) { got_ack = true; } } else { if (b != -1) { buffer.concat((char)b); if (buffer.length() == String("ABC_CD12345_XYZ").length()) { if (buffer.startsWith("ABC_CD") && buffer.endsWith("_XYZ")) { return Result::pass(buffer.substring(4, 11)); } } } } } } Serial.println("Timed out waiting for serial from scanner"); } return Result::fail("Unable to read serial number"); } Result TesterTask::testLoopbacks() { SplitflapState splitflap_state = splitflap_task_.getState(); if (splitflap_state.loopbacks_ok) { return Result::pass("Loopbacks are ok"); } else { // TODO: Get more information about which loopback(s) failed and in what way disableHardware(); return Result::fail("One or more bad loopback"); } } Result TesterTask::testLeds() { String failure = "Led test failure(s):\n"; bool success = true; for (uint8_t led = 0; led < 6; led++) { Result maintenanceResult = doTestMaintenance(); if (!maintenanceResult.canContinue()) { return maintenanceResult; } testStatus("Checking LED " + String(led)); for (uint8_t i = 0; i < 6; i++) { splitflap_task_.setLed(i, led == i); } delay(20); for (uint8_t i = 0; i < 6; i++) { bool detected = !mcp_.digitalRead(MCP_PIN_LED_SENSOR_0 + i); if (detected && i != led) { failure.concat("LED "); failure.concat(led); failure.concat(" is lit, but falsely detected LED "); failure.concat(i); failure.concat("\n"); success = false; } else if (!detected && i == led) { failure.concat("LED "); failure.concat(led); failure.concat(" is lit, but was not detected\n"); success = false; } delay(10); } } for (uint8_t i = 0; i < 6; i++) { splitflap_task_.setLed(i, 0); } if (success) { return Result::pass("All LEDs ok"); } else { disableHardware(); return Result::fail(failure); } } Result TesterTask::testPowerPreCheck() { uint32_t start = millis(); while (1) { Result result = doTestMaintenance(); if (!result.canContinue()) { return result; } if (voltage_ < 1.5) { break; } testStatus("Waiting for voltage to drop... V=" + String(voltage_)); if (millis() - start > 10000) { disableHardware(); return Result::fail("Timeout waiting for power to reset"); } delay(100); } testStatus("Checking test feed"); digitalWrite(PIN_MOTOR_TEST_FEED, HIGH); start = millis(); while (1) { Result result = doTestMaintenance(); if (!result.canContinue()) { return result; } testStatus("Checking test feed\n" + String(voltage_) + "V\n" + String(current_) + "mA"); if (voltage_ > 3.3) { disableHardware(); return Result::abort("Over-voltage during test feed: " + String(voltage_)); } if (millis() - start > 15000) { disableHardware(); return Result::fail("Timeout waiting for power test feed. Current voltage: " + String(voltage_)); } if (millis() - start > 400 && current_ > 15) { disableHardware(); return Result::fail("Over-current during test feed: " + String(current_)); } if (millis() - start > 400 && voltage_ > 2.5) { digitalWrite(PIN_MOTOR_TEST_FEED, LOW); return Result::pass("Power pre-check OK. " + String(voltage_) + "V, " + String(current_) + "mA"); } delay(10); } } Result TesterTask::testPower() { testStatus("Checking power"); digitalWrite(PIN_MOTOR_POWER, HIGH); uint32_t start = millis(); while (1) { Result result = doTestMaintenance(); if (!result.canContinue()) { return result; } testStatus("Checking power\n" + String(voltage_) + "V\n" + String(current_) + "mA"); if (millis() - start > 5000) { disableHardware(); return Result::fail("Timeout waiting for power"); } if (millis() - start > 500 && current_ > 10) { disableHardware(); return Result::fail("Over-current during test: " + String(current_)); } if (millis() - start > 500 && voltage_ > 11.8) { return Result::pass("Power OK. V=" + String(voltage_) + "v, A=" + String(current_) + "ma"); } delay(10); } } Result TesterTask::testHoming() { testStatus("Homing..."); splitflap_task_.resetAll(); // Delay to make sure we don't read cached state from before the reset delay(100); uint32_t start = millis(); while (1) { Result result = doTestMaintenance(); if (!result.canContinue()) { return result; } SplitflapState splitflap_state = splitflap_task_.getState(); bool ready = true; String description = "Homing...\n"; for (uint8_t i = 0; i < TEST_MODULES; i++) { bool module_ready = splitflap_state.modules[i].state == NORMAL && splitflap_state.modules[i].count_missed_home == 0 && splitflap_state.modules[i].count_unexpected_home == 0 && splitflap_state.modules[i].moving == false; ready &= module_ready; description += String(i) + ": "; if (ready) { description += "OK\n"; } else { description += "...\n"; } } description += String(current_); testStatus(description); uint32_t duration = millis() - start; if (ready && duration > 1000) { return Result::pass("All modules homed successfully"); } else if (duration > 1000 && duration < 20000) { // Failure if all modules have stopped moving but aren't all ready (checked above) // Note: we could fail sooner (if any module has an error state), but it is more useful to identify // *all* module failures instead of just the first. bool any_moving = false; for (uint8_t i = 0; i < TEST_MODULES; i++) { any_moving |= splitflap_state.modules[i].moving; } if (!any_moving) { String failure = "Some modules failed home calibration:\n"; for (uint8_t i = 0; i < TEST_MODULES; i++) { if (splitflap_state.modules[i].state != NORMAL || splitflap_state.modules[i].count_missed_home != 0 || splitflap_state.modules[i].count_unexpected_home != 0) { failure.concat("Module "); failure.concat(i); if (splitflap_state.modules[i].state != NORMAL) { failure.concat(" is in incorrect state "); failure.concat(splitflap_state.modules[i].state); } if (splitflap_state.modules[i].count_missed_home != 0 || splitflap_state.modules[i].count_unexpected_home != 0) { failure.concat(" has errors: missed_home="); failure.concat(splitflap_state.modules[i].count_missed_home); failure.concat(" unexpected_home="); failure.concat(splitflap_state.modules[i].count_unexpected_home); } failure.concat("\n"); } } return Result::fail(failure); } } else if (duration > 20000) { return Result::fail("Timeout waiting for home calibration to complete."); } delay(100); } } Result TesterTask::testMovements() { char test_string_a[TEST_MODULES]; char test_string_b[TEST_MODULES]; for (uint8_t i = 0; i < TEST_MODULES; i++) { test_string_a[i] = 'd' + i*2; test_string_b[i] = 'd' + TEST_MODULES*2 - i*2; } const uint8_t movements = 6; for (uint8_t movement = 0; movement < movements; movement++) { uint32_t start = millis(); splitflap_task_.showString(((movement % 2) == 0) ? test_string_a : test_string_b, TEST_MODULES); testStatus("Running iteration " + String(movement)); while (1) { Result result = doTestMaintenance(); if (!result.canContinue()) { return result; } SplitflapState splitflap_state = splitflap_task_.getState(); bool ready = true; for (uint8_t i = 0; i < TEST_MODULES; i++) { ready &= splitflap_state.modules[i].state == NORMAL && splitflap_state.modules[i].count_missed_home == 0 && splitflap_state.modules[i].count_unexpected_home == 0 && splitflap_state.modules[i].moving == false; } uint32_t duration = millis() - start; if (ready) { break; } else if (duration > 1000 && duration < 10000) { // Failure if all modules have stopped moving but aren't all ready (checked above) // Note: we could fail sooner (if any module has an error state), but it is more useful to identify // *all* module failures instead of just the first. bool any_moving = false; for (uint8_t i = 0; i < TEST_MODULES; i++) { any_moving |= splitflap_state.modules[i].moving; } if (!any_moving) { String failure = "Some modules failed movement on iteration " + String(movement) + ":\n"; for (uint8_t i = 0; i < TEST_MODULES; i++) { if (splitflap_state.modules[i].state != NORMAL || splitflap_state.modules[i].count_missed_home != 0 || splitflap_state.modules[i].count_unexpected_home != 0) { failure.concat("Module "); failure.concat(i); if (splitflap_state.modules[i].state != NORMAL) { failure.concat(" is in incorrect state "); failure.concat(splitflap_state.modules[i].state); } if (splitflap_state.modules[i].count_missed_home != 0 || splitflap_state.modules[i].count_unexpected_home != 0) { failure.concat(" has errors: missed_home="); failure.concat(splitflap_state.modules[i].count_missed_home); failure.concat(" unexpected_home="); failure.concat(splitflap_state.modules[i].count_unexpected_home); } failure.concat("\n"); } } return Result::fail(failure); } } else if (duration > 10000) { return Result::fail("Timeout waiting for movement to complete on iteration " + String(movement) + "."); } delay(50); } delay(50); } return Result::pass("All modules completed " + String(movements) + " iterations successfully"); } Status TesterTask::runStartupSelfTest() { // Check power on startup drawSimpleText(TFT_WHITE, TFT_BLACK, "Starting", "Waiting for power..."); digitalWrite(PIN_MOTOR_POWER, HIGH); uint32_t voltage_detected_millis = 0; while (1) { Status maintenanceResult = doMaintenance(); if (!maintenanceResult.isOk()) { return maintenanceResult; } if (voltage_ > 11.8) { if (voltage_detected_millis == 0) { voltage_detected_millis = millis(); } else if (millis() - voltage_detected_millis > 200) { if (current_ > 10) { disableHardware(); return Status::fatal("Over-current during startup: " + String(current_)); } else { // Good voltage and current; disable motor power for now and continue with startup digitalWrite(PIN_MOTOR_POWER, LOW); return Status::ok(); } } } } } void TesterTask::connectWifi() { WiFi.mode(WIFI_STA); WiFi.begin(WIFI_SSID, WIFI_PASSWORD); while (WiFi.status() != WL_CONNECTED) { esp_err_t result = esp_task_wdt_reset(); ESP_ERROR_CHECK(result); String waitString = "Wifi connecting"; uint8_t dots = (millis() / 200) % 4; for (uint8_t i = 0; i < 4; i++) { if (i < dots) { waitString += "."; } else { waitString += " "; } } drawSimpleText(TFT_WHITE, TFT_ORANGE, "Starting", waitString); delay(1000); } } void TesterTask::syncTime() { sntp_setoperatingmode(SNTP_OPMODE_POLL); char server[] = "time.nist.gov"; // sntp_setservername takes a non-const char*, so use a non-const variable to avoid warning sntp_setservername(0, server); sntp_init(); time_t now = 0; while(time(&now), now < 1625099485) { esp_err_t result = esp_task_wdt_reset(); ESP_ERROR_CHECK(result); String waitString = "Syncing time"; uint8_t dots = (millis() / 200) % 4; for (uint8_t i = 0; i < 4; i++) { if (i < dots) { waitString += "."; } else { waitString += " "; } } drawSimpleText(TFT_WHITE, TFT_ORANGE, "Starting", waitString); delay(1000); } char buf[20]; strftime(buf, 20, "%Y-%m-%d %H:%M:%S", localtime(&now)); Serial.printf("Got time: %s\n", buf); } void TesterTask::run() { esp_err_t result = esp_task_wdt_add(NULL); ESP_ERROR_CHECK(result); initializeIo(); initializeMcp(); ina219_.setCalibrationSplitflap(); initializeDisplay(); drawSimpleText(TFT_WHITE, TFT_PURPLE, "Tester", "v" + String(TEST_SUITE_VERSION)); delay(1500); Status status = runTestSuitesForever(); if (!status.isOk()) { disableHardware(); // Should have already been called by whoever threw fatal error, but disable again just to be safe drawSimpleText(TFT_WHITE, TFT_RED, "FATAL ERROR", status.message_); } while(1) { esp_err_t result = esp_task_wdt_reset(); ESP_ERROR_CHECK(result); delay(10); } } Result TesterTask::runTestSuite() { { testStarted("Loopbacks"); Result result = testLoopbacks(); testFinished(result); if (!result.canContinue()) { return result; } } { testStarted("LEDs"); Result result = testLeds(); testFinished(result); if (!result.canContinue()) { return result; } } { testStarted("Power pre-check"); Result result = testPowerPreCheck(); testFinished(result); if (!result.canContinue()) { return result; } } { testStarted("Power"); Result result = testPower(); testFinished(result); if (!result.canContinue()) { return result; } } { testStarted("Homing"); Result result = testHoming(); testFinished(result); if (!result.canContinue()) { return result; } } { testStarted("Movements"); Result result = testMovements(); testFinished(result); if (!result.canContinue()) { return result; } } // More tests... return Result::pass("All tests passed"); } Status TesterTask::runTestSuitesForever() { connectWifi(); syncTime(); drawSimpleText(TFT_WHITE, TFT_ORANGE, "Starting", "Checking Firestore access..."); esp_err_t result = esp_task_wdt_delete(NULL); ESP_ERROR_CHECK(result); if (!firestore_test_reporter_.checkFirestoreAccess()) { return Status::fatal("Failed Firestore startup self-test!"); } result = esp_task_wdt_add(NULL); ESP_ERROR_CHECK(result); drawSimpleText(TFT_WHITE, COLOR_ACTION, "Remove board", ""); { Status status = waitForBoardRemoved(); if (!status.isOk()) { return status; } } Status status = runStartupSelfTest(); if (!status.isOk()) { return status; } while (1) { { Status status = waitForBoardInserted(); if (!status.isOk()) { return status; } } String serial; { Result result = readSerial(); if (result.result_code_ == Result::Code::ABORT) { return Status::fatal(result.message_); } else if (result.result_code_ == Result::Code::FAIL) { continue; } else { serial = result.message_; } } drawSimpleText(TFT_WHITE, TFT_BLACK, "Serial:", serial); delay(1000); testSuiteStarted(serial); Result result = runTestSuite(); disableHardware(); testSuiteFinished(result.result_code_); switch (result.result_code_) { case Result::Code::ABORT: return Status::fatal(result.message_); case Result::Code::PASS: drawSimpleText(TFT_WHITE, tft_.color565(30, 150, 30), "PASS", result.message_, "Hold to re-run"); for (uint8_t i = 0; i < 2; i++) { mcp_.digitalWrite(MCP_PIN_BUZZER, HIGH); delay(100); mcp_.digitalWrite(MCP_PIN_BUZZER, LOW); delay(150); } break; case Result::Code::FAIL: drawSimpleText(TFT_WHITE, TFT_RED, "FAIL", result.message_, "Hold to re-run"); mcp_.digitalWrite(MCP_PIN_BUZZER, HIGH); delay(1500); mcp_.digitalWrite(MCP_PIN_BUZZER, LOW); break; } { Status status = waitForBoardRemoved(); if (!status.isOk()) { return status; } } } return Status::ok(); } void TesterTask::initializeIo() { pinMode(PIN_MOTOR_POWER, OUTPUT); pinMode(PIN_MOTOR_TEST_FEED, OUTPUT); pinMode(PIN_BUTTON_BOTTOM, INPUT_PULLUP); pinMode(PIN_3V3_FUSED, INPUT); pinMode(PIN_MCP_NRESET, OUTPUT); digitalWrite(PIN_MCP_NRESET, HIGH); Wire.begin(); Wire.setClock(400000); Serial1.begin(9600, SERIAL_8N1, 38, 15); mcp_.begin(0, &Wire); ina219_.begin(); } void TesterTask::initializeMcp() { mcp_.pinMode(MCP_PIN_CLAMP, INPUT); mcp_.pullUp(MCP_PIN_CLAMP, HIGH); for (uint8_t i = MCP_PIN_LED_SENSOR_0; i < MCP_PIN_LED_SENSOR_0 + 6; i++) { mcp_.pinMode(i, INPUT); mcp_.pullUp(i, HIGH); } mcp_.pinMode(MCP_PIN_BUZZER, OUTPUT); mcp_.digitalWrite(MCP_PIN_BUZZER, HIGH); delay(50); mcp_.digitalWrite(MCP_PIN_BUZZER, LOW); } void TesterTask::initializeDisplay() { tft_.begin(); tft_.invertDisplay(1); tft_.setRotation(1); spr_.setColorDepth(16); spr_.createSprite(TFT_HEIGHT, TFT_WIDTH); } void TesterTask::testSuiteStarted(String serial) { Serial.printf("Test suite started: %s\n", serial.c_str()); test_suite_start_millis_ = millis(); firestore_test_reporter_.testSuiteStarted(serial, TEST_SUITE_VERSION); } bool TesterTask::testSuiteFinished(Result::Code result_code) { uint32_t test_suite_duration = millis() - test_suite_start_millis_; Serial.printf("Test suite finished in %u millis\n", test_suite_duration); test_suite_start_millis_ = 0; current_test_id_ = ""; // Report to Firestore drawSimpleText(TFT_WHITE, TFT_BLACK, "Saving...", "Recording results to Firestore..."); esp_err_t result = esp_task_wdt_delete(NULL); ESP_ERROR_CHECK(result); bool success = firestore_test_reporter_.testSuiteFinished(result_code); result = esp_task_wdt_add(NULL); ESP_ERROR_CHECK(result); return success; } void TesterTask::testStarted(String id) { Serial.printf("Test started: %s\n", id.c_str()); current_test_id_ = id; test_start_millis_ = millis(); drawSimpleText(TFT_WHITE, TFT_BLACK, "Test: " + current_test_id_, "Started"); firestore_test_reporter_.testStarted(id); } void TesterTask::testFinished(Result result) { uint32_t test_duration = millis() - test_start_millis_; Serial.printf("Test took %u millis. Result: %u -> %s\n", test_duration, result.result_code_, result.message_.c_str()); test_start_millis_ = 0; current_test_id_ = ""; firestore_test_reporter_.testFinished(result); } void TesterTask::testStatus(String message) { Serial.println(message); drawSimpleText(TFT_WHITE, TFT_BLACK, "Test: " + current_test_id_, message); } ================================================ FILE: firmware/esp32/tester/tester_task.h ================================================ /* Copyright 2021 Scott Bezek and the splitflap contributors 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. */ #pragma once #include #include #include #include "Adafruit_MCP23017.h" #include "Adafruit_INA219.h" #include "result.h" #include "../core/splitflap_task.h" #include "../core/task.h" #include "firestore_test_reporter.h" class Status { public: enum class Code : uint8_t { OK = 0, FATAL_ERROR = 1, }; const Code code_; const String message_; bool isOk() { return code_ == Code::OK; } static Status fatal(String message) { return Status(Code::FATAL_ERROR, message); } static Status ok() { return Status(Code::OK, ""); } private: Status(Code code, String message) : code_(code), message_(message) {}; }; class TesterTask : public Task { friend class Task; // Allow base Task to invoke protected run() public: TesterTask(SplitflapTask& splitflap_task, const uint8_t task_core); protected: void run(); private: SplitflapTask& splitflap_task_; Adafruit_MCP23017 mcp_; Adafruit_INA219 ina219_; TFT_eSPI tft_ = TFT_eSPI(); const uint32_t COLOR_ACTION = tft_.color565(20, 20, 200); /** Full-size sprite used as a framebuffer */ TFT_eSprite spr_ = TFT_eSprite(&tft_); // General state float voltage_; float current_; bool clamped_; bool button_bottom_pressed_; uint32_t first_over_current_millis_ = 0; String message_; void initializeIo(); void initializeMcp(); void initializeDisplay(); void connectWifi(); void syncTime(); void disableHardware(); void drawSimpleText(uint32_t background, uint32_t foreground, String title, String details, String bottom_button_label); Status doMaintenance(); Result doTestMaintenance(); Result delayWithMaintenance(uint32_t delay_millis); Status runStartupSelfTest(); Result runTestSuite(); Status runTestSuitesForever(); Status waitForBoardInserted(); Status waitForBoardRemoved(); Result readSerial(); // Tests: Result testLoopbacks(); Result testLeds(); Result testPowerPreCheck(); Result testPower(); Result testHoming(); Result testMovements(); // Test Reporting // TODO: refactor - extract to separate interface String current_test_id_; uint32_t test_suite_start_millis_; uint32_t test_start_millis_; Jwt jwt_; Firestore firestore_; FirestoreTestReporter firestore_test_reporter_; void testSuiteStarted(String serial); bool testSuiteFinished(Result::Code result_code); void testStarted(String id); void testFinished(Result result); void testStatus(String message); }; ================================================ FILE: firmware/include/README ================================================ This directory is intended for project header files. A header file is a file containing C declarations and macro definitions to be shared between several project source files. You request the use of a header file in your project source file (C, C++, etc) located in `src` folder by including it, with the C preprocessing directive `#include'. ```src/main.c #include "header.h" int main (void) { ... } ``` Including a header file produces the same results as copying the header file into each source file that needs it. Such copying would be time-consuming and error-prone. With a header file, the related declarations appear in only one place. If they need to be changed, they can be changed in one place, and programs that include the header file will automatically use the new version when next recompiled. The header file eliminates the labor of finding and changing all the copies as well as the risk that a failure to find one copy will result in inconsistencies within a program. In C, the usual convention is to give header files names that end with `.h'. It is most portable to use only letters, digits, dashes, and underscores in header file names, and at most one dot. Read more about using header files in official GCC documentation: * Include Syntax * Include Operation * Once-Only Headers * Computed Includes https://gcc.gnu.org/onlinedocs/cpp/Header-Files.html ================================================ FILE: firmware/lib/README ================================================ This directory is intended for project specific (private) libraries. PlatformIO will compile them to static libraries and link into executable file. The source code of each library should be placed in a an own separate directory ("lib/your_library_name/[here are source files]"). For example, see a structure of the following two libraries `Foo` and `Bar`: |--lib | | | |--Bar | | |--docs | | |--examples | | |--src | | |- Bar.c | | |- Bar.h | | |- library.json (optional, custom build options, etc) https://docs.platformio.org/page/librarymanager/config.html | | | |--Foo | | |- Foo.c | | |- Foo.h | | | |- README --> THIS FILE | |- platformio.ini |--src |- main.c and a contents of `src/main.c`: ``` #include #include int main (void) { ... } ``` PlatformIO Library Dependency Finder will find automatically dependent libraries scanning project source files. More information about PlatformIO Library Dependency Finder - https://docs.platformio.org/page/librarymanager/ldf.html ================================================ FILE: firmware/lib/json11/CMakeLists.txt ================================================ cmake_minimum_required(VERSION 2.8) if (CMAKE_VERSION VERSION_LESS "3") project(json11 CXX) else() cmake_policy(SET CMP0048 NEW) project(json11 VERSION 1.0.0 LANGUAGES CXX) endif() enable_testing() option(JSON11_BUILD_TESTS "Build unit tests" OFF) option(JSON11_ENABLE_DR1467_CANARY "Enable canary test for DR 1467" OFF) if(CMAKE_VERSION VERSION_LESS "3") add_definitions(-std=c++11) else() set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_STANDARD_REQUIRED ON) endif() if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) set(CMAKE_INSTALL_PREFIX /usr) endif() add_library(json11 json11.cpp) target_include_directories(json11 PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) target_compile_options(json11 PRIVATE -fPIC -fno-rtti -fno-exceptions -Wall) # Set warning flags, which may vary per platform include(CheckCXXCompilerFlag) set(_possible_warnings_flags /W4 /WX -Wextra -Werror) foreach(_warning_flag ${_possible_warnings_flags}) unset(_flag_supported) CHECK_CXX_COMPILER_FLAG(${_warning_flag} _flag_supported) if(${_flag_supported}) target_compile_options(json11 PRIVATE ${_warning_flag}) endif() endforeach() configure_file("json11.pc.in" "json11.pc" @ONLY) if (JSON11_BUILD_TESTS) # enable test for DR1467, described here: https://llvm.org/bugs/show_bug.cgi?id=23812 if(JSON11_ENABLE_DR1467_CANARY) add_definitions(-D JSON11_ENABLE_DR1467_CANARY=1) else() add_definitions(-D JSON11_ENABLE_DR1467_CANARY=0) endif() add_executable(json11_test test.cpp) target_link_libraries(json11_test json11) endif() install(TARGETS json11 DESTINATION lib/${CMAKE_LIBRARY_ARCHITECTURE}) install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/json11.hpp" DESTINATION include/${CMAKE_LIBRARY_ARCHITECTURE}) install(FILES "${CMAKE_CURRENT_BINARY_DIR}/json11.pc" DESTINATION lib/${CMAKE_LIBRARY_ARCHITECTURE}/pkgconfig) ================================================ FILE: firmware/lib/json11/LICENSE.txt ================================================ Copyright (c) 2013 Dropbox, Inc. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ================================================ FILE: firmware/lib/json11/Makefile ================================================ # Environment variable to enable or disable code which demonstrates the behavior change # in Xcode 7 / Clang 3.7, introduced by DR1467 and described here: # https://llvm.org/bugs/show_bug.cgi?id=23812 # Defaults to on in order to act as a warning to anyone who's unaware of the issue. ifneq ($(JSON11_ENABLE_DR1467_CANARY),) CANARY_ARGS = -DJSON11_ENABLE_DR1467_CANARY=$(JSON11_ENABLE_DR1467_CANARY) endif test: json11.cpp json11.hpp test.cpp $(CXX) $(CANARY_ARGS) -O -std=c++11 json11.cpp test.cpp -o test -fno-rtti -fno-exceptions clean: if [ -e test ]; then rm test; fi .PHONY: clean ================================================ FILE: firmware/lib/json11/README.md ================================================ json11 ------ json11 is a tiny JSON library for C++11, providing JSON parsing and serialization. The core object provided by the library is json11::Json. A Json object represents any JSON value: null, bool, number (int or double), string (std::string), array (std::vector), or object (std::map). Json objects act like values. They can be assigned, copied, moved, compared for equality or order, and so on. There are also helper methods Json::dump, to serialize a Json to a string, and Json::parse (static) to parse a std::string as a Json object. It's easy to make a JSON object with C++11's new initializer syntax: Json my_json = Json::object { { "key1", "value1" }, { "key2", false }, { "key3", Json::array { 1, 2, 3 } }, }; std::string json_str = my_json.dump(); There are also implicit constructors that allow standard and user-defined types to be automatically converted to JSON. For example: class Point { public: int x; int y; Point (int x, int y) : x(x), y(y) {} Json to_json() const { return Json::array { x, y }; } }; std::vector points = { { 1, 2 }, { 10, 20 }, { 100, 200 } }; std::string points_json = Json(points).dump(); JSON values can have their values queried and inspected: Json json = Json::array { Json::object { { "k", "v" } } }; std::string str = json[0]["k"].string_value(); For more documentation see json11.hpp. ================================================ FILE: firmware/lib/json11/json11.cpp ================================================ /* Copyright (c) 2013 Dropbox, Inc. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #include "json11.hpp" #include #include #include #include #include namespace json11 { static const int max_depth = 200; using std::string; using std::vector; using std::map; using std::make_shared; using std::initializer_list; using std::move; /* Helper for representing null - just a do-nothing struct, plus comparison * operators so the helpers in JsonValue work. We can't use nullptr_t because * it may not be orderable. */ struct NullStruct { bool operator==(NullStruct) const { return true; } bool operator<(NullStruct) const { return false; } }; /* * * * * * * * * * * * * * * * * * * * * Serialization */ static void dump(NullStruct, string &out) { out += "null"; } static void dump(double value, string &out) { if (std::isfinite(value)) { char buf[32]; snprintf(buf, sizeof buf, "%.17g", value); out += buf; } else { out += "null"; } } static void dump(int value, string &out) { char buf[32]; snprintf(buf, sizeof buf, "%d", value); out += buf; } static void dump(bool value, string &out) { out += value ? "true" : "false"; } static void dump(const string &value, string &out) { out += '"'; for (size_t i = 0; i < value.length(); i++) { const char ch = value[i]; if (ch == '\\') { out += "\\\\"; } else if (ch == '"') { out += "\\\""; } else if (ch == '\b') { out += "\\b"; } else if (ch == '\f') { out += "\\f"; } else if (ch == '\n') { out += "\\n"; } else if (ch == '\r') { out += "\\r"; } else if (ch == '\t') { out += "\\t"; } else if (static_cast(ch) <= 0x1f) { char buf[8]; snprintf(buf, sizeof buf, "\\u%04x", ch); out += buf; } else if (static_cast(ch) == 0xe2 && static_cast(value[i+1]) == 0x80 && static_cast(value[i+2]) == 0xa8) { out += "\\u2028"; i += 2; } else if (static_cast(ch) == 0xe2 && static_cast(value[i+1]) == 0x80 && static_cast(value[i+2]) == 0xa9) { out += "\\u2029"; i += 2; } else { out += ch; } } out += '"'; } static void dump(const Json::array &values, string &out) { bool first = true; out += "["; for (const auto &value : values) { if (!first) out += ", "; value.dump(out); first = false; } out += "]"; } static void dump(const Json::object &values, string &out) { bool first = true; out += "{"; for (const auto &kv : values) { if (!first) out += ", "; dump(kv.first, out); out += ": "; kv.second.dump(out); first = false; } out += "}"; } void Json::dump(string &out) const { m_ptr->dump(out); } /* * * * * * * * * * * * * * * * * * * * * Value wrappers */ template class Value : public JsonValue { protected: // Constructors explicit Value(const T &value) : m_value(value) {} explicit Value(T &&value) : m_value(move(value)) {} // Get type tag Json::Type type() const override { return tag; } // Comparisons bool equals(const JsonValue * other) const override { return m_value == static_cast *>(other)->m_value; } bool less(const JsonValue * other) const override { return m_value < static_cast *>(other)->m_value; } const T m_value; void dump(string &out) const override { json11::dump(m_value, out); } }; class JsonDouble final : public Value { double number_value() const override { return m_value; } int int_value() const override { return static_cast(m_value); } bool equals(const JsonValue * other) const override { return m_value == other->number_value(); } bool less(const JsonValue * other) const override { return m_value < other->number_value(); } public: explicit JsonDouble(double value) : Value(value) {} }; class JsonInt final : public Value { double number_value() const override { return m_value; } int int_value() const override { return m_value; } bool equals(const JsonValue * other) const override { return m_value == other->number_value(); } bool less(const JsonValue * other) const override { return m_value < other->number_value(); } public: explicit JsonInt(int value) : Value(value) {} }; class JsonBoolean final : public Value { bool bool_value() const override { return m_value; } public: explicit JsonBoolean(bool value) : Value(value) {} }; class JsonString final : public Value { const string &string_value() const override { return m_value; } public: explicit JsonString(const string &value) : Value(value) {} explicit JsonString(string &&value) : Value(move(value)) {} }; class JsonArray final : public Value { const Json::array &array_items() const override { return m_value; } const Json & operator[](size_t i) const override; public: explicit JsonArray(const Json::array &value) : Value(value) {} explicit JsonArray(Json::array &&value) : Value(move(value)) {} }; class JsonObject final : public Value { const Json::object &object_items() const override { return m_value; } const Json & operator[](const string &key) const override; public: explicit JsonObject(const Json::object &value) : Value(value) {} explicit JsonObject(Json::object &&value) : Value(move(value)) {} }; class JsonNull final : public Value { public: JsonNull() : Value({}) {} }; /* * * * * * * * * * * * * * * * * * * * * Static globals - static-init-safe */ struct Statics { const std::shared_ptr null = make_shared(); const std::shared_ptr t = make_shared(true); const std::shared_ptr f = make_shared(false); const string empty_string; const vector empty_vector; const map empty_map; Statics() {} }; static const Statics & statics() { static const Statics s {}; return s; } static const Json & static_null() { // This has to be separate, not in Statics, because Json() accesses statics().null. static const Json json_null; return json_null; } /* * * * * * * * * * * * * * * * * * * * * Constructors */ Json::Json() noexcept : m_ptr(statics().null) {} Json::Json(std::nullptr_t) noexcept : m_ptr(statics().null) {} Json::Json(double value) : m_ptr(make_shared(value)) {} Json::Json(int value) : m_ptr(make_shared(value)) {} Json::Json(bool value) : m_ptr(value ? statics().t : statics().f) {} Json::Json(const string &value) : m_ptr(make_shared(value)) {} Json::Json(string &&value) : m_ptr(make_shared(move(value))) {} Json::Json(const char * value) : m_ptr(make_shared(value)) {} Json::Json(const Json::array &values) : m_ptr(make_shared(values)) {} Json::Json(Json::array &&values) : m_ptr(make_shared(move(values))) {} Json::Json(const Json::object &values) : m_ptr(make_shared(values)) {} Json::Json(Json::object &&values) : m_ptr(make_shared(move(values))) {} /* * * * * * * * * * * * * * * * * * * * * Accessors */ Json::Type Json::type() const { return m_ptr->type(); } double Json::number_value() const { return m_ptr->number_value(); } int Json::int_value() const { return m_ptr->int_value(); } bool Json::bool_value() const { return m_ptr->bool_value(); } const string & Json::string_value() const { return m_ptr->string_value(); } const vector & Json::array_items() const { return m_ptr->array_items(); } const map & Json::object_items() const { return m_ptr->object_items(); } const Json & Json::operator[] (size_t i) const { return (*m_ptr)[i]; } const Json & Json::operator[] (const string &key) const { return (*m_ptr)[key]; } double JsonValue::number_value() const { return 0; } int JsonValue::int_value() const { return 0; } bool JsonValue::bool_value() const { return false; } const string & JsonValue::string_value() const { return statics().empty_string; } const vector & JsonValue::array_items() const { return statics().empty_vector; } const map & JsonValue::object_items() const { return statics().empty_map; } const Json & JsonValue::operator[] (size_t) const { return static_null(); } const Json & JsonValue::operator[] (const string &) const { return static_null(); } const Json & JsonObject::operator[] (const string &key) const { auto iter = m_value.find(key); return (iter == m_value.end()) ? static_null() : iter->second; } const Json & JsonArray::operator[] (size_t i) const { if (i >= m_value.size()) return static_null(); else return m_value[i]; } /* * * * * * * * * * * * * * * * * * * * * Comparison */ bool Json::operator== (const Json &other) const { if (m_ptr == other.m_ptr) return true; if (m_ptr->type() != other.m_ptr->type()) return false; return m_ptr->equals(other.m_ptr.get()); } bool Json::operator< (const Json &other) const { if (m_ptr == other.m_ptr) return false; if (m_ptr->type() != other.m_ptr->type()) return m_ptr->type() < other.m_ptr->type(); return m_ptr->less(other.m_ptr.get()); } /* * * * * * * * * * * * * * * * * * * * * Parsing */ /* esc(c) * * Format char c suitable for printing in an error message. */ static inline string esc(char c) { char buf[12]; if (static_cast(c) >= 0x20 && static_cast(c) <= 0x7f) { snprintf(buf, sizeof buf, "'%c' (%d)", c, c); } else { snprintf(buf, sizeof buf, "(%d)", c); } return string(buf); } static inline bool in_range(long x, long lower, long upper) { return (x >= lower && x <= upper); } namespace { /* JsonParser * * Object that tracks all state of an in-progress parse. */ struct JsonParser final { /* State */ const string &str; size_t i; string &err; bool failed; const JsonParse strategy; /* fail(msg, err_ret = Json()) * * Mark this parse as failed. */ Json fail(string &&msg) { return fail(move(msg), Json()); } template T fail(string &&msg, const T err_ret) { if (!failed) err = std::move(msg); failed = true; return err_ret; } /* consume_whitespace() * * Advance until the current character is non-whitespace. */ void consume_whitespace() { while (str[i] == ' ' || str[i] == '\r' || str[i] == '\n' || str[i] == '\t') i++; } /* consume_comment() * * Advance comments (c-style inline and multiline). */ bool consume_comment() { bool comment_found = false; if (str[i] == '/') { i++; if (i == str.size()) return fail("unexpected end of input after start of comment", false); if (str[i] == '/') { // inline comment i++; // advance until next line, or end of input while (i < str.size() && str[i] != '\n') { i++; } comment_found = true; } else if (str[i] == '*') { // multiline comment i++; if (i > str.size()-2) return fail("unexpected end of input inside multi-line comment", false); // advance until closing tokens while (!(str[i] == '*' && str[i+1] == '/')) { i++; if (i > str.size()-2) return fail( "unexpected end of input inside multi-line comment", false); } i += 2; comment_found = true; } else return fail("malformed comment", false); } return comment_found; } /* consume_garbage() * * Advance until the current character is non-whitespace and non-comment. */ void consume_garbage() { consume_whitespace(); if(strategy == JsonParse::COMMENTS) { bool comment_found = false; do { comment_found = consume_comment(); if (failed) return; consume_whitespace(); } while(comment_found); } } /* get_next_token() * * Return the next non-whitespace character. If the end of the input is reached, * flag an error and return 0. */ char get_next_token() { consume_garbage(); if (failed) return static_cast(0); if (i == str.size()) return fail("unexpected end of input", static_cast(0)); return str[i++]; } /* encode_utf8(pt, out) * * Encode pt as UTF-8 and add it to out. */ void encode_utf8(long pt, string & out) { if (pt < 0) return; if (pt < 0x80) { out += static_cast(pt); } else if (pt < 0x800) { out += static_cast((pt >> 6) | 0xC0); out += static_cast((pt & 0x3F) | 0x80); } else if (pt < 0x10000) { out += static_cast((pt >> 12) | 0xE0); out += static_cast(((pt >> 6) & 0x3F) | 0x80); out += static_cast((pt & 0x3F) | 0x80); } else { out += static_cast((pt >> 18) | 0xF0); out += static_cast(((pt >> 12) & 0x3F) | 0x80); out += static_cast(((pt >> 6) & 0x3F) | 0x80); out += static_cast((pt & 0x3F) | 0x80); } } /* parse_string() * * Parse a string, starting at the current position. */ string parse_string() { string out; long last_escaped_codepoint = -1; while (true) { if (i == str.size()) return fail("unexpected end of input in string", ""); char ch = str[i++]; if (ch == '"') { encode_utf8(last_escaped_codepoint, out); return out; } if (in_range(ch, 0, 0x1f)) return fail("unescaped " + esc(ch) + " in string", ""); // The usual case: non-escaped characters if (ch != '\\') { encode_utf8(last_escaped_codepoint, out); last_escaped_codepoint = -1; out += ch; continue; } // Handle escapes if (i == str.size()) return fail("unexpected end of input in string", ""); ch = str[i++]; if (ch == 'u') { // Extract 4-byte escape sequence string esc = str.substr(i, 4); // Explicitly check length of the substring. The following loop // relies on std::string returning the terminating NUL when // accessing str[length]. Checking here reduces brittleness. if (esc.length() < 4) { return fail("bad \\u escape: " + esc, ""); } for (size_t j = 0; j < 4; j++) { if (!in_range(esc[j], 'a', 'f') && !in_range(esc[j], 'A', 'F') && !in_range(esc[j], '0', '9')) return fail("bad \\u escape: " + esc, ""); } long codepoint = strtol(esc.data(), nullptr, 16); // JSON specifies that characters outside the BMP shall be encoded as a pair // of 4-hex-digit \u escapes encoding their surrogate pair components. Check // whether we're in the middle of such a beast: the previous codepoint was an // escaped lead (high) surrogate, and this is a trail (low) surrogate. if (in_range(last_escaped_codepoint, 0xD800, 0xDBFF) && in_range(codepoint, 0xDC00, 0xDFFF)) { // Reassemble the two surrogate pairs into one astral-plane character, per // the UTF-16 algorithm. encode_utf8((((last_escaped_codepoint - 0xD800) << 10) | (codepoint - 0xDC00)) + 0x10000, out); last_escaped_codepoint = -1; } else { encode_utf8(last_escaped_codepoint, out); last_escaped_codepoint = codepoint; } i += 4; continue; } encode_utf8(last_escaped_codepoint, out); last_escaped_codepoint = -1; if (ch == 'b') { out += '\b'; } else if (ch == 'f') { out += '\f'; } else if (ch == 'n') { out += '\n'; } else if (ch == 'r') { out += '\r'; } else if (ch == 't') { out += '\t'; } else if (ch == '"' || ch == '\\' || ch == '/') { out += ch; } else { return fail("invalid escape character " + esc(ch), ""); } } } /* parse_number() * * Parse a double. */ Json parse_number() { size_t start_pos = i; if (str[i] == '-') i++; // Integer part if (str[i] == '0') { i++; if (in_range(str[i], '0', '9')) return fail("leading 0s not permitted in numbers"); } else if (in_range(str[i], '1', '9')) { i++; while (in_range(str[i], '0', '9')) i++; } else { return fail("invalid " + esc(str[i]) + " in number"); } if (str[i] != '.' && str[i] != 'e' && str[i] != 'E' && (i - start_pos) <= static_cast(std::numeric_limits::digits10)) { return std::atoi(str.c_str() + start_pos); } // Decimal part if (str[i] == '.') { i++; if (!in_range(str[i], '0', '9')) return fail("at least one digit required in fractional part"); while (in_range(str[i], '0', '9')) i++; } // Exponent part if (str[i] == 'e' || str[i] == 'E') { i++; if (str[i] == '+' || str[i] == '-') i++; if (!in_range(str[i], '0', '9')) return fail("at least one digit required in exponent"); while (in_range(str[i], '0', '9')) i++; } return std::strtod(str.c_str() + start_pos, nullptr); } /* expect(str, res) * * Expect that 'str' starts at the character that was just read. If it does, advance * the input and return res. If not, flag an error. */ Json expect(const string &expected, Json res) { assert(i != 0); i--; if (str.compare(i, expected.length(), expected) == 0) { i += expected.length(); return res; } else { return fail("parse error: expected " + expected + ", got " + str.substr(i, expected.length())); } } /* parse_json() * * Parse a JSON object. */ Json parse_json(int depth) { if (depth > max_depth) { return fail("exceeded maximum nesting depth"); } char ch = get_next_token(); if (failed) return Json(); if (ch == '-' || (ch >= '0' && ch <= '9')) { i--; return parse_number(); } if (ch == 't') return expect("true", true); if (ch == 'f') return expect("false", false); if (ch == 'n') return expect("null", Json()); if (ch == '"') return parse_string(); if (ch == '{') { map data; ch = get_next_token(); if (ch == '}') return data; while (1) { if (ch != '"') return fail("expected '\"' in object, got " + esc(ch)); string key = parse_string(); if (failed) return Json(); ch = get_next_token(); if (ch != ':') return fail("expected ':' in object, got " + esc(ch)); data[std::move(key)] = parse_json(depth + 1); if (failed) return Json(); ch = get_next_token(); if (ch == '}') break; if (ch != ',') return fail("expected ',' in object, got " + esc(ch)); ch = get_next_token(); } return data; } if (ch == '[') { vector data; ch = get_next_token(); if (ch == ']') return data; while (1) { i--; data.push_back(parse_json(depth + 1)); if (failed) return Json(); ch = get_next_token(); if (ch == ']') break; if (ch != ',') return fail("expected ',' in list, got " + esc(ch)); ch = get_next_token(); (void)ch; } return data; } return fail("expected value, got " + esc(ch)); } }; }//namespace { Json Json::parse(const string &in, string &err, JsonParse strategy) { JsonParser parser { in, 0, err, false, strategy }; Json result = parser.parse_json(0); // Check for any trailing garbage parser.consume_garbage(); if (parser.failed) return Json(); if (parser.i != in.size()) return parser.fail("unexpected trailing " + esc(in[parser.i])); return result; } // Documented in json11.hpp vector Json::parse_multi(const string &in, std::string::size_type &parser_stop_pos, string &err, JsonParse strategy) { JsonParser parser { in, 0, err, false, strategy }; parser_stop_pos = 0; vector json_vec; while (parser.i != in.size() && !parser.failed) { json_vec.push_back(parser.parse_json(0)); if (parser.failed) break; // Check for another object parser.consume_garbage(); if (parser.failed) break; parser_stop_pos = parser.i; } return json_vec; } /* * * * * * * * * * * * * * * * * * * * * Shape-checking */ bool Json::has_shape(const shape & types, string & err) const { if (!is_object()) { err = "expected JSON object, got " + dump(); return false; } const auto& obj_items = object_items(); for (auto & item : types) { const auto it = obj_items.find(item.first); if (it == obj_items.cend() || it->second.type() != item.second) { err = "bad type for " + item.first + " in " + dump(); return false; } } return true; } } // namespace json11 ================================================ FILE: firmware/lib/json11/json11.hpp ================================================ /* json11 * * json11 is a tiny JSON library for C++11, providing JSON parsing and serialization. * * The core object provided by the library is json11::Json. A Json object represents any JSON * value: null, bool, number (int or double), string (std::string), array (std::vector), or * object (std::map). * * Json objects act like values: they can be assigned, copied, moved, compared for equality or * order, etc. There are also helper methods Json::dump, to serialize a Json to a string, and * Json::parse (static) to parse a std::string as a Json object. * * Internally, the various types of Json object are represented by the JsonValue class * hierarchy. * * A note on numbers - JSON specifies the syntax of number formatting but not its semantics, * so some JSON implementations distinguish between integers and floating-point numbers, while * some don't. In json11, we choose the latter. Because some JSON implementations (namely * Javascript itself) treat all numbers as the same type, distinguishing the two leads * to JSON that will be *silently* changed by a round-trip through those implementations. * Dangerous! To avoid that risk, json11 stores all numbers as double internally, but also * provides integer helpers. * * Fortunately, double-precision IEEE754 ('double') can precisely store any integer in the * range +/-2^53, which includes every 'int' on most systems. (Timestamps often use int64 * or long long to avoid the Y2038K problem; a double storing microseconds since some epoch * will be exact for +/- 275 years.) */ /* Copyright (c) 2013 Dropbox, Inc. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #pragma once #include #include #include #include #include #ifdef _MSC_VER #if _MSC_VER <= 1800 // VS 2013 #ifndef noexcept #define noexcept throw() #endif #ifndef snprintf #define snprintf _snprintf_s #endif #endif #endif namespace json11 { enum JsonParse { STANDARD, COMMENTS }; class JsonValue; class Json final { public: // Types enum Type { NUL, NUMBER, BOOL, STRING, ARRAY, OBJECT }; // Array and object typedefs typedef std::vector array; typedef std::map object; // Constructors for the various types of JSON value. Json() noexcept; // NUL Json(std::nullptr_t) noexcept; // NUL Json(double value); // NUMBER Json(int value); // NUMBER Json(bool value); // BOOL Json(const std::string &value); // STRING Json(std::string &&value); // STRING Json(const char * value); // STRING Json(const array &values); // ARRAY Json(array &&values); // ARRAY Json(const object &values); // OBJECT Json(object &&values); // OBJECT // Implicit constructor: anything with a to_json() function. template Json(const T & t) : Json(t.to_json()) {} // Implicit constructor: map-like objects (std::map, std::unordered_map, etc) template ().begin()->first)>::value && std::is_constructible().begin()->second)>::value, int>::type = 0> Json(const M & m) : Json(object(m.begin(), m.end())) {} // Implicit constructor: vector-like objects (std::list, std::vector, std::set, etc) template ().begin())>::value, int>::type = 0> Json(const V & v) : Json(array(v.begin(), v.end())) {} // This prevents Json(some_pointer) from accidentally producing a bool. Use // Json(bool(some_pointer)) if that behavior is desired. Json(void *) = delete; // Accessors Type type() const; bool is_null() const { return type() == NUL; } bool is_number() const { return type() == NUMBER; } bool is_bool() const { return type() == BOOL; } bool is_string() const { return type() == STRING; } bool is_array() const { return type() == ARRAY; } bool is_object() const { return type() == OBJECT; } // Return the enclosed value if this is a number, 0 otherwise. Note that json11 does not // distinguish between integer and non-integer numbers - number_value() and int_value() // can both be applied to a NUMBER-typed object. double number_value() const; int int_value() const; // Return the enclosed value if this is a boolean, false otherwise. bool bool_value() const; // Return the enclosed string if this is a string, "" otherwise. const std::string &string_value() const; // Return the enclosed std::vector if this is an array, or an empty vector otherwise. const array &array_items() const; // Return the enclosed std::map if this is an object, or an empty map otherwise. const object &object_items() const; // Return a reference to arr[i] if this is an array, Json() otherwise. const Json & operator[](size_t i) const; // Return a reference to obj[key] if this is an object, Json() otherwise. const Json & operator[](const std::string &key) const; // Serialize. void dump(std::string &out) const; std::string dump() const { std::string out; dump(out); return out; } // Parse. If parse fails, return Json() and assign an error message to err. static Json parse(const std::string & in, std::string & err, JsonParse strategy = JsonParse::STANDARD); static Json parse(const char * in, std::string & err, JsonParse strategy = JsonParse::STANDARD) { if (in) { return parse(std::string(in), err, strategy); } else { err = "null input"; return nullptr; } } // Parse multiple objects, concatenated or separated by whitespace static std::vector parse_multi( const std::string & in, std::string::size_type & parser_stop_pos, std::string & err, JsonParse strategy = JsonParse::STANDARD); static inline std::vector parse_multi( const std::string & in, std::string & err, JsonParse strategy = JsonParse::STANDARD) { std::string::size_type parser_stop_pos; return parse_multi(in, parser_stop_pos, err, strategy); } bool operator== (const Json &rhs) const; bool operator< (const Json &rhs) const; bool operator!= (const Json &rhs) const { return !(*this == rhs); } bool operator<= (const Json &rhs) const { return !(rhs < *this); } bool operator> (const Json &rhs) const { return (rhs < *this); } bool operator>= (const Json &rhs) const { return !(*this < rhs); } /* has_shape(types, err) * * Return true if this is a JSON object and, for each item in types, has a field of * the given type. If not, return false and set err to a descriptive message. */ typedef std::initializer_list> shape; bool has_shape(const shape & types, std::string & err) const; private: std::shared_ptr m_ptr; }; // Internal class hierarchy - JsonValue objects are not exposed to users of this API. class JsonValue { protected: friend class Json; friend class JsonInt; friend class JsonDouble; virtual Json::Type type() const = 0; virtual bool equals(const JsonValue * other) const = 0; virtual bool less(const JsonValue * other) const = 0; virtual void dump(std::string &out) const = 0; virtual double number_value() const; virtual int int_value() const; virtual bool bool_value() const; virtual const std::string &string_value() const; virtual const Json::array &array_items() const; virtual const Json &operator[](size_t i) const; virtual const Json::object &object_items() const; virtual const Json &operator[](const std::string &key) const; virtual ~JsonValue() {} }; } // namespace json11 ================================================ FILE: firmware/lib/json11/json11.pc.in ================================================ prefix=@CMAKE_INSTALL_PREFIX@ libdir=${prefix}/lib/@CMAKE_LIBRARY_ARCHITECTURE@ includedir=${prefix}/include/@CMAKE_LIBRARY_ARCHITECTURE@ Name: @PROJECT_NAME@ Description: json11 is a tiny JSON library for C++11, providing JSON parsing and serialization. Version: @PROJECT_VERSION@ Libs: -L${libdir} -ljson11 Cflags: -I${includedir} ================================================ FILE: firmware/lib/json11/test.cpp ================================================ /* * Define JSON11_TEST_CUSTOM_CONFIG to 1 if you want to build this tester into * your own unit-test framework rather than a stand-alone program. By setting * The values of the variables included below, you can insert your own custom * code into this file as it builds, in order to make it into a test case for * your favorite framework. */ #if !JSON11_TEST_CUSTOM_CONFIG #define JSON11_TEST_CPP_PREFIX_CODE #define JSON11_TEST_CPP_SUFFIX_CODE #define JSON11_TEST_STANDALONE_MAIN 1 #define JSON11_TEST_CASE(name) static void name() #define JSON11_TEST_ASSERT(b) assert(b) #ifdef NDEBUG #undef NDEBUG//at now assert will work even in Release build #endif #endif // JSON11_TEST_CUSTOM_CONFIG /* * Enable or disable code which demonstrates the behavior change in Xcode 7 / Clang 3.7, * introduced by DR1467 and described here: https://github.com/dropbox/json11/issues/86 * Defaults to off since it doesn't appear the standards committee is likely to act * on this, so it needs to be considered normal behavior. */ #ifndef JSON11_ENABLE_DR1467_CANARY #define JSON11_ENABLE_DR1467_CANARY 0 #endif /* * Beginning of standard source file, which makes use of the customizations above. */ #include #include #include #include #include #include #include "json11.hpp" #include #include #include #include #include // Insert user-defined prefix code (includes, function declarations, etc) // to set up a custom test suite JSON11_TEST_CPP_PREFIX_CODE using namespace json11; using std::string; // Check that Json has the properties we want. #define CHECK_TRAIT(x) static_assert(std::x::value, #x) CHECK_TRAIT(is_nothrow_constructible); CHECK_TRAIT(is_nothrow_default_constructible); CHECK_TRAIT(is_copy_constructible); CHECK_TRAIT(is_nothrow_move_constructible); CHECK_TRAIT(is_copy_assignable); CHECK_TRAIT(is_nothrow_move_assignable); CHECK_TRAIT(is_nothrow_destructible); JSON11_TEST_CASE(json11_test) { const string simple_test = R"({"k1":"v1", "k2":42, "k3":["a",123,true,false,null]})"; string err; const auto json = Json::parse(simple_test, err); std::cout << "k1: " << json["k1"].string_value() << "\n"; std::cout << "k3: " << json["k3"].dump() << "\n"; for (auto &k : json["k3"].array_items()) { std::cout << " - " << k.dump() << "\n"; } string comment_test = R"({ // comment /* with nested comment */ "a": 1, // comment // continued "b": "text", /* multi line comment // line-comment-inside-multiline-comment */ // and single-line comment // and single-line comment /* multiline inside single line */ "c": [1, 2, 3] // and single-line comment at end of object })"; string err_comment; auto json_comment = Json::parse( comment_test, err_comment, JsonParse::COMMENTS); JSON11_TEST_ASSERT(!json_comment.is_null()); JSON11_TEST_ASSERT(err_comment.empty()); comment_test = "{\"a\": 1}//trailing line comment"; json_comment = Json::parse( comment_test, err_comment, JsonParse::COMMENTS); JSON11_TEST_ASSERT(!json_comment.is_null()); JSON11_TEST_ASSERT(err_comment.empty()); comment_test = "{\"a\": 1}/*trailing multi-line comment*/"; json_comment = Json::parse( comment_test, err_comment, JsonParse::COMMENTS); JSON11_TEST_ASSERT(!json_comment.is_null()); JSON11_TEST_ASSERT(err_comment.empty()); string failing_comment_test = "{\n/* unterminated comment\n\"a\": 1,\n}"; string err_failing_comment; auto json_failing_comment = Json::parse( failing_comment_test, err_failing_comment, JsonParse::COMMENTS); JSON11_TEST_ASSERT(json_failing_comment.is_null()); JSON11_TEST_ASSERT(!err_failing_comment.empty()); failing_comment_test = "{\n/* unterminated trailing comment }"; json_failing_comment = Json::parse( failing_comment_test, err_failing_comment, JsonParse::COMMENTS); JSON11_TEST_ASSERT(json_failing_comment.is_null()); JSON11_TEST_ASSERT(!err_failing_comment.empty()); failing_comment_test = "{\n/ / bad comment }"; json_failing_comment = Json::parse( failing_comment_test, err_failing_comment, JsonParse::COMMENTS); JSON11_TEST_ASSERT(json_failing_comment.is_null()); JSON11_TEST_ASSERT(!err_failing_comment.empty()); failing_comment_test = "{// bad comment }"; json_failing_comment = Json::parse( failing_comment_test, err_failing_comment, JsonParse::COMMENTS); JSON11_TEST_ASSERT(json_failing_comment.is_null()); JSON11_TEST_ASSERT(!err_failing_comment.empty()); failing_comment_test = "{\n\"a\": 1\n}/"; json_failing_comment = Json::parse( failing_comment_test, err_failing_comment, JsonParse::COMMENTS); JSON11_TEST_ASSERT(json_failing_comment.is_null()); JSON11_TEST_ASSERT(!err_failing_comment.empty()); failing_comment_test = "{/* bad\ncomment *}"; json_failing_comment = Json::parse( failing_comment_test, err_failing_comment, JsonParse::COMMENTS); JSON11_TEST_ASSERT(json_failing_comment.is_null()); JSON11_TEST_ASSERT(!err_failing_comment.empty()); std::list l1 { 1, 2, 3 }; std::vector l2 { 1, 2, 3 }; std::set l3 { 1, 2, 3 }; JSON11_TEST_ASSERT(Json(l1) == Json(l2)); JSON11_TEST_ASSERT(Json(l2) == Json(l3)); std::map m1 { { "k1", "v1" }, { "k2", "v2" } }; std::unordered_map m2 { { "k1", "v1" }, { "k2", "v2" } }; JSON11_TEST_ASSERT(Json(m1) == Json(m2)); // Json literals const Json obj = Json::object({ { "k1", "v1" }, { "k2", 42.0 }, { "k3", Json::array({ "a", 123.0, true, false, nullptr }) }, }); std::cout << "obj: " << obj.dump() << "\n"; JSON11_TEST_ASSERT(obj.dump() == "{\"k1\": \"v1\", \"k2\": 42, \"k3\": [\"a\", 123, true, false, null]}"); JSON11_TEST_ASSERT(Json("a").number_value() == 0); JSON11_TEST_ASSERT(Json("a").string_value() == "a"); JSON11_TEST_ASSERT(Json().number_value() == 0); JSON11_TEST_ASSERT(obj == json); JSON11_TEST_ASSERT(Json(42) == Json(42.0)); JSON11_TEST_ASSERT(Json(42) != Json(42.1)); const string unicode_escape_test = R"([ "blah\ud83d\udca9blah\ud83dblah\udca9blah\u0000blah\u1234" ])"; const char utf8[] = "blah" "\xf0\x9f\x92\xa9" "blah" "\xed\xa0\xbd" "blah" "\xed\xb2\xa9" "blah" "\0" "blah" "\xe1\x88\xb4"; Json uni = Json::parse(unicode_escape_test, err); JSON11_TEST_ASSERT(uni[0].string_value().size() == (sizeof utf8) - 1); JSON11_TEST_ASSERT(std::memcmp(uni[0].string_value().data(), utf8, sizeof utf8) == 0); // Demonstrates the behavior change in Xcode 7 / Clang 3.7, introduced by DR1467 // and described here: https://llvm.org/bugs/show_bug.cgi?id=23812 if (JSON11_ENABLE_DR1467_CANARY) { Json nested_array = Json::array { Json::array { 1, 2, 3 } }; JSON11_TEST_ASSERT(nested_array.is_array()); JSON11_TEST_ASSERT(nested_array.array_items().size() == 1); JSON11_TEST_ASSERT(nested_array.array_items()[0].is_array()); JSON11_TEST_ASSERT(nested_array.array_items()[0].array_items().size() == 3); } { const std::string good_json = R"( {"k1" : "v1"})"; const std::string bad_json1 = good_json + " {"; const std::string bad_json2 = good_json + R"({"k2":"v2", "k3":[)"; struct TestMultiParse { std::string input; std::string::size_type expect_parser_stop_pos; size_t expect_not_empty_elms_count; Json expect_parse_res; } tests[] = { {" {", 0, 0, {}}, {good_json, good_json.size(), 1, Json(std::map{ { "k1", "v1" } })}, {bad_json1, good_json.size() + 1, 1, Json(std::map{ { "k1", "v1" } })}, {bad_json2, good_json.size(), 1, Json(std::map{ { "k1", "v1" } })}, {"{}", 2, 1, Json::object{}}, }; for (const auto &tst : tests) { std::string::size_type parser_stop_pos; std::string err; auto res = Json::parse_multi(tst.input, parser_stop_pos, err); JSON11_TEST_ASSERT(parser_stop_pos == tst.expect_parser_stop_pos); JSON11_TEST_ASSERT( (size_t)std::count_if(res.begin(), res.end(), [](const Json& j) { return !j.is_null(); }) == tst.expect_not_empty_elms_count); if (!res.empty()) { JSON11_TEST_ASSERT(tst.expect_parse_res == res[0]); } } } Json my_json = Json::object { { "key1", "value1" }, { "key2", false }, { "key3", Json::array { 1, 2, 3 } }, }; std::string json_obj_str = my_json.dump(); std::cout << "json_obj_str: " << json_obj_str << "\n"; JSON11_TEST_ASSERT(json_obj_str == "{\"key1\": \"value1\", \"key2\": false, \"key3\": [1, 2, 3]}"); class Point { public: int x; int y; Point (int x, int y) : x(x), y(y) {} Json to_json() const { return Json::array { x, y }; } }; std::vector points = { { 1, 2 }, { 10, 20 }, { 100, 200 } }; std::string points_json = Json(points).dump(); std::cout << "points_json: " << points_json << "\n"; JSON11_TEST_ASSERT(points_json == "[[1, 2], [10, 20], [100, 200]]"); JSON11_TEST_ASSERT(((Json)(Json::object { { "foo", nullptr } })).has_shape({ { "foo", Json::NUL } }, err) == true); JSON11_TEST_ASSERT(((Json)(Json::object { { "foo", 1234567 } })).has_shape({ { "foo", Json::NUL } }, err) == false); JSON11_TEST_ASSERT(((Json)(Json::object { { "bar", 1234567 } })).has_shape({ { "foo", Json::NUL } }, err) == false); } #if JSON11_TEST_STANDALONE_MAIN static void parse_from_stdin() { string buf; string line; while (std::getline(std::cin, line)) { buf += line + "\n"; } string err; auto json = Json::parse(buf, err); if (!err.empty()) { printf("Failed: %s\n", err.c_str()); } else { printf("Result: %s\n", json.dump().c_str()); } } int main(int argc, char **argv) { if (argc == 2 && argv[1] == string("--stdin")) { parse_from_stdin(); return 0; } json11_test(); } #endif // JSON11_TEST_STANDALONE_MAIN // Insert user-defined suffix code (function definitions, etc) // to set up a custom test suite JSON11_TEST_CPP_SUFFIX_CODE ================================================ FILE: firmware/src/Adafruit_INA219.cpp ================================================ /*! * @file Adafruit_INA219.cpp * * @mainpage Adafruit INA219 current/power monitor IC * * @section intro_sec Introduction * * Driver for the INA219 current sensor * * This is a library for the Adafruit INA219 breakout * ----> https://www.adafruit.com/product/904 * * Adafruit invests time and resources providing this open source code, * please support Adafruit and open-source hardware by purchasing * products from Adafruit! * * @section author Author * * Written by Bryan Siepert and Kevin "KTOWN" Townsend for Adafruit Industries. * * @section license License * * BSD license, all text here must be included in any redistribution. * */ #include "config.h" #if INA219_POWER_SENSE #include "Arduino.h" #include #include "Adafruit_INA219.h" /*! * @brief Instantiates a new INA219 class * @param addr the I2C address the device can be found on. Default is 0x40 */ Adafruit_INA219::Adafruit_INA219(uint8_t addr) { ina219_i2caddr = addr; ina219_currentDivider_mA = 0; ina219_powerMultiplier_mW = 0.0f; } /*! * @brief Sets up the HW (defaults to 32V and 2A for calibration values) * @param theWire the TwoWire object to use * @return true: success false: Failed to start I2C */ bool Adafruit_INA219::begin(TwoWire *theWire) { i2c_dev = new Adafruit_I2CDevice(ina219_i2caddr, theWire); if (!i2c_dev->begin()) { return false; } init(); return true; } /*! * @brief begin I2C and set up the hardware */ void Adafruit_INA219::init() { // Set chip to large range config values to start setCalibration_32V_2A(); } /*! * @brief Gets the raw bus voltage (16-bit signed integer, so +-32767) * @return the raw bus voltage reading */ int16_t Adafruit_INA219::getBusVoltage_raw() { uint16_t value; Adafruit_BusIO_Register bus_voltage_reg = Adafruit_BusIO_Register(i2c_dev, INA219_REG_BUSVOLTAGE, 2, MSBFIRST); bus_voltage_reg.read(&value); // Shift to the right 3 to drop CNVR and OVF and multiply by LSB return (int16_t)((value >> 3) * 4); } /*! * @brief Gets the raw shunt voltage (16-bit signed integer, so +-32767) * @return the raw shunt voltage reading */ int16_t Adafruit_INA219::getShuntVoltage_raw() { uint16_t value; Adafruit_BusIO_Register shunt_voltage_reg = Adafruit_BusIO_Register(i2c_dev, INA219_REG_SHUNTVOLTAGE, 2, MSBFIRST); shunt_voltage_reg.read(&value); return value; } /*! * @brief Gets the raw current value (16-bit signed integer, so +-32767) * @return the raw current reading */ int16_t Adafruit_INA219::getCurrent_raw() { uint16_t value; // // Sometimes a sharp load will reset the INA219, which will // // reset the cal register, meaning CURRENT and POWER will // // not be available ... avoid this by always setting a cal // // value even if it's an unfortunate extra step // Adafruit_BusIO_Register calibration_reg = // Adafruit_BusIO_Register(i2c_dev, INA219_REG_CALIBRATION, 2, MSBFIRST); // calibration_reg.write(ina219_calValue, 2); // Now we can safely read the CURRENT register! Adafruit_BusIO_Register current_reg = Adafruit_BusIO_Register(i2c_dev, INA219_REG_CURRENT, 2, MSBFIRST); current_reg.read(&value); return value; } /*! * @brief Gets the raw power value (16-bit signed integer, so +-32767) * @return raw power reading */ int16_t Adafruit_INA219::getPower_raw() { uint16_t value; // Sometimes a sharp load will reset the INA219, which will // reset the cal register, meaning CURRENT and POWER will // not be available ... avoid this by always setting a cal // value even if it's an unfortunate extra step Adafruit_BusIO_Register calibration_reg = Adafruit_BusIO_Register(i2c_dev, INA219_REG_CALIBRATION, 2, MSBFIRST); calibration_reg.write(ina219_calValue, 2); // Now we can safely read the POWER register! Adafruit_BusIO_Register power_reg = Adafruit_BusIO_Register(i2c_dev, INA219_REG_POWER, 2, MSBFIRST); power_reg.read(&value); return value; } /*! * @brief Gets the shunt voltage in mV (so +-327mV) * @return the shunt voltage converted to millivolts */ float Adafruit_INA219::getShuntVoltage_mV() { int16_t value; value = getShuntVoltage_raw(); return value * 0.01; } /*! * @brief Gets the shunt voltage in volts * @return the bus voltage converted to volts */ float Adafruit_INA219::getBusVoltage_V() { int16_t value = getBusVoltage_raw(); return value * 0.001; } /*! * @brief Gets the current value in mA, taking into account the * config settings and current LSB * @return the current reading convereted to milliamps */ float Adafruit_INA219::getCurrent_mA() { float valueDec = getCurrent_raw(); valueDec /= ina219_currentDivider_mA; return valueDec; } /*! * @brief Gets the power value in mW, taking into account the * config settings and current LSB * @return power reading converted to milliwatts */ float Adafruit_INA219::getPower_mW() { float valueDec = getPower_raw(); valueDec *= ina219_powerMultiplier_mW; return valueDec; } /*! * @brief Configures to INA219 to be able to measure up to 32V and 2A * of current. Each unit of current corresponds to 100uA, and * each unit of power corresponds to 2mW. Counter overflow * occurs at 3.2A. * @note These calculations assume a 0.1 ohm resistor is present */ void Adafruit_INA219::setCalibration_32V_2A() { // By default we use a pretty huge range for the input voltage, // which probably isn't the most appropriate choice for system // that don't use a lot of power. But all of the calculations // are shown below if you want to change the settings. You will // also need to change any relevant register settings, such as // setting the VBUS_MAX to 16V instead of 32V, etc. // VBUS_MAX = 32V (Assumes 32V, can also be set to 16V) // VSHUNT_MAX = 0.32 (Assumes Gain 8, 320mV, can also be 0.16, 0.08, // 0.04) RSHUNT = 0.1 (Resistor value in ohms) // 1. Determine max possible current // MaxPossible_I = VSHUNT_MAX / RSHUNT // MaxPossible_I = 3.2A // 2. Determine max expected current // MaxExpected_I = 2.0A // 3. Calculate possible range of LSBs (Min = 15-bit, Max = 12-bit) // MinimumLSB = MaxExpected_I/32767 // MinimumLSB = 0.000061 (61uA per bit) // MaximumLSB = MaxExpected_I/4096 // MaximumLSB = 0,000488 (488uA per bit) // 4. Choose an LSB between the min and max values // (Preferrably a roundish number close to MinLSB) // CurrentLSB = 0.0001 (100uA per bit) // 5. Compute the calibration register // Cal = trunc (0.04096 / (Current_LSB * RSHUNT)) // Cal = 4096 (0x1000) ina219_calValue = 4096; // 6. Calculate the power LSB // PowerLSB = 20 * CurrentLSB // PowerLSB = 0.002 (2mW per bit) // 7. Compute the maximum current and shunt voltage values before overflow // // Max_Current = Current_LSB * 32767 // Max_Current = 3.2767A before overflow // // If Max_Current > Max_Possible_I then // Max_Current_Before_Overflow = MaxPossible_I // Else // Max_Current_Before_Overflow = Max_Current // End If // // Max_ShuntVoltage = Max_Current_Before_Overflow * RSHUNT // Max_ShuntVoltage = 0.32V // // If Max_ShuntVoltage >= VSHUNT_MAX // Max_ShuntVoltage_Before_Overflow = VSHUNT_MAX // Else // Max_ShuntVoltage_Before_Overflow = Max_ShuntVoltage // End If // 8. Compute the Maximum Power // MaximumPower = Max_Current_Before_Overflow * VBUS_MAX // MaximumPower = 3.2 * 32V // MaximumPower = 102.4W // Set multipliers to convert raw current/power values ina219_currentDivider_mA = 10; // Current LSB = 100uA per bit (1000/100 = 10) ina219_powerMultiplier_mW = 2; // Power LSB = 1mW per bit (2/1) // Set Calibration register to 'Cal' calculated above Adafruit_BusIO_Register calibration_reg = Adafruit_BusIO_Register(i2c_dev, INA219_REG_CALIBRATION, 2, MSBFIRST); calibration_reg.write(ina219_calValue, 2); // Set Config register to take into account the settings above uint16_t config = INA219_CONFIG_BVOLTAGERANGE_32V | INA219_CONFIG_GAIN_8_320MV | INA219_CONFIG_BADCRES_12BIT | INA219_CONFIG_SADCRES_12BIT_1S_532US | INA219_CONFIG_MODE_SANDBVOLT_CONTINUOUS; Adafruit_BusIO_Register config_reg = Adafruit_BusIO_Register(i2c_dev, INA219_REG_CONFIG, 2, MSBFIRST); config_reg.write(config, 2); } /*! * @brief Set power save mode according to parameters * @param on * boolean value */ void Adafruit_INA219::powerSave(bool on) { Adafruit_BusIO_Register config_reg = Adafruit_BusIO_Register(i2c_dev, INA219_REG_CONFIG, 2, MSBFIRST); Adafruit_BusIO_RegisterBits mode_bits = Adafruit_BusIO_RegisterBits(&config_reg, 3, 0); if (on) { mode_bits.write(INA219_CONFIG_MODE_POWERDOWN); } else { mode_bits.write(INA219_CONFIG_MODE_SANDBVOLT_CONTINUOUS); } } /*! * @brief Configures to INA219 to be able to measure up to 32V and 1A * of current. Each unit of current corresponds to 40uA, and each * unit of power corresponds to 800uW. Counter overflow occurs at * 1.3A. * @note These calculations assume a 0.1 ohm resistor is present */ void Adafruit_INA219::setCalibration_32V_1A() { // By default we use a pretty huge range for the input voltage, // which probably isn't the most appropriate choice for system // that don't use a lot of power. But all of the calculations // are shown below if you want to change the settings. You will // also need to change any relevant register settings, such as // setting the VBUS_MAX to 16V instead of 32V, etc. // VBUS_MAX = 32V (Assumes 32V, can also be set to 16V) // VSHUNT_MAX = 0.32 (Assumes Gain 8, 320mV, can also be 0.16, 0.08, 0.04) // RSHUNT = 0.1 (Resistor value in ohms) // 1. Determine max possible current // MaxPossible_I = VSHUNT_MAX / RSHUNT // MaxPossible_I = 3.2A // 2. Determine max expected current // MaxExpected_I = 1.0A // 3. Calculate possible range of LSBs (Min = 15-bit, Max = 12-bit) // MinimumLSB = MaxExpected_I/32767 // MinimumLSB = 0.0000305 (30.5uA per bit) // MaximumLSB = MaxExpected_I/4096 // MaximumLSB = 0.000244 (244uA per bit) // 4. Choose an LSB between the min and max values // (Preferrably a roundish number close to MinLSB) // CurrentLSB = 0.0000400 (40uA per bit) // 5. Compute the calibration register // Cal = trunc (0.04096 / (Current_LSB * RSHUNT)) // Cal = 10240 (0x2800) ina219_calValue = 10240; // 6. Calculate the power LSB // PowerLSB = 20 * CurrentLSB // PowerLSB = 0.0008 (800uW per bit) // 7. Compute the maximum current and shunt voltage values before overflow // // Max_Current = Current_LSB * 32767 // Max_Current = 1.31068A before overflow // // If Max_Current > Max_Possible_I then // Max_Current_Before_Overflow = MaxPossible_I // Else // Max_Current_Before_Overflow = Max_Current // End If // // ... In this case, we're good though since Max_Current is less than // MaxPossible_I // // Max_ShuntVoltage = Max_Current_Before_Overflow * RSHUNT // Max_ShuntVoltage = 0.131068V // // If Max_ShuntVoltage >= VSHUNT_MAX // Max_ShuntVoltage_Before_Overflow = VSHUNT_MAX // Else // Max_ShuntVoltage_Before_Overflow = Max_ShuntVoltage // End If // 8. Compute the Maximum Power // MaximumPower = Max_Current_Before_Overflow * VBUS_MAX // MaximumPower = 1.31068 * 32V // MaximumPower = 41.94176W // Set multipliers to convert raw current/power values ina219_currentDivider_mA = 25; // Current LSB = 40uA per bit (1000/40 = 25) ina219_powerMultiplier_mW = 0.8f; // Power LSB = 800uW per bit // Set Calibration register to 'Cal' calculated above Adafruit_BusIO_Register calibration_reg = Adafruit_BusIO_Register(i2c_dev, INA219_REG_CALIBRATION, 2, MSBFIRST); calibration_reg.write(ina219_calValue, 2); // Set Config register to take into account the settings above uint16_t config = INA219_CONFIG_BVOLTAGERANGE_32V | INA219_CONFIG_GAIN_8_320MV | INA219_CONFIG_BADCRES_12BIT | INA219_CONFIG_SADCRES_12BIT_1S_532US | INA219_CONFIG_MODE_SANDBVOLT_CONTINUOUS; Adafruit_BusIO_Register config_reg = Adafruit_BusIO_Register(i2c_dev, INA219_REG_CONFIG, 2, MSBFIRST); config_reg.write(config, 2); } /*! * @brief set device to alibration which uses the highest precision for * current measurement (0.1mA), at the expense of * only supporting 16V at 400mA max. */ void Adafruit_INA219::setCalibration_16V_400mA() { // Calibration which uses the highest precision for // current measurement (0.1mA), at the expense of // only supporting 16V at 400mA max. // VBUS_MAX = 16V // VSHUNT_MAX = 0.04 (Assumes Gain 1, 40mV) // RSHUNT = 0.1 (Resistor value in ohms) // 1. Determine max possible current // MaxPossible_I = VSHUNT_MAX / RSHUNT // MaxPossible_I = 0.4A // 2. Determine max expected current // MaxExpected_I = 0.4A // 3. Calculate possible range of LSBs (Min = 15-bit, Max = 12-bit) // MinimumLSB = MaxExpected_I/32767 // MinimumLSB = 0.0000122 (12uA per bit) // MaximumLSB = MaxExpected_I/4096 // MaximumLSB = 0.0000977 (98uA per bit) // 4. Choose an LSB between the min and max values // (Preferrably a roundish number close to MinLSB) // CurrentLSB = 0.00005 (50uA per bit) // 5. Compute the calibration register // Cal = trunc (0.04096 / (Current_LSB * RSHUNT)) // Cal = 8192 (0x2000) ina219_calValue = 8192; // 6. Calculate the power LSB // PowerLSB = 20 * CurrentLSB // PowerLSB = 0.001 (1mW per bit) // 7. Compute the maximum current and shunt voltage values before overflow // // Max_Current = Current_LSB * 32767 // Max_Current = 1.63835A before overflow // // If Max_Current > Max_Possible_I then // Max_Current_Before_Overflow = MaxPossible_I // Else // Max_Current_Before_Overflow = Max_Current // End If // // Max_Current_Before_Overflow = MaxPossible_I // Max_Current_Before_Overflow = 0.4 // // Max_ShuntVoltage = Max_Current_Before_Overflow * RSHUNT // Max_ShuntVoltage = 0.04V // // If Max_ShuntVoltage >= VSHUNT_MAX // Max_ShuntVoltage_Before_Overflow = VSHUNT_MAX // Else // Max_ShuntVoltage_Before_Overflow = Max_ShuntVoltage // End If // // Max_ShuntVoltage_Before_Overflow = VSHUNT_MAX // Max_ShuntVoltage_Before_Overflow = 0.04V // 8. Compute the Maximum Power // MaximumPower = Max_Current_Before_Overflow * VBUS_MAX // MaximumPower = 0.4 * 16V // MaximumPower = 6.4W // Set multipliers to convert raw current/power values ina219_currentDivider_mA = 20; // Current LSB = 50uA per bit (1000/50 = 20) ina219_powerMultiplier_mW = 1.0f; // Power LSB = 1mW per bit // Set Calibration register to 'Cal' calculated above Adafruit_BusIO_Register calibration_reg = Adafruit_BusIO_Register(i2c_dev, INA219_REG_CALIBRATION, 2, MSBFIRST); calibration_reg.write(ina219_calValue, 2); // Set Config register to take into account the settings above uint16_t config = INA219_CONFIG_BVOLTAGERANGE_16V | INA219_CONFIG_GAIN_1_40MV | INA219_CONFIG_BADCRES_12BIT | INA219_CONFIG_SADCRES_12BIT_1S_532US | INA219_CONFIG_MODE_SANDBVOLT_CONTINUOUS; Adafruit_BusIO_Register config_reg = Adafruit_BusIO_Register(i2c_dev, INA219_REG_CONFIG, 2, MSBFIRST); config_reg.write(config, 2); } void Adafruit_INA219::setCalibrationSplitflap() { // By default we use a pretty huge range for the input voltage, // which probably isn't the most appropriate choice for system // that don't use a lot of power. But all of the calculations // are shown below if you want to change the settings. You will // also need to change any relevant register settings, such as // setting the VBUS_MAX to 16V instead of 32V, etc. // VBUS_MAX = 16V // VSHUNT_MAX = 0.16 (Assumes Gain 4, 160mV) // RSHUNT = 0.01 (Resistor value in ohms) // 1. Determine max possible current // MaxPossible_I = VSHUNT_MAX / RSHUNT // MaxPossible_I = 16A // 2. Determine max expected current // MaxExpected_I = 9A // 3. Calculate possible range of LSBs (Min = 15-bit, Max = 12-bit) // MinimumLSB = MaxExpected_I/32767 // MinimumLSB = 0.000274667 (275uA per bit) // MaximumLSB = MaxExpected_I/4096 // MaximumLSB = 0.002197266 (2.2mA per bit) // 4. Choose an LSB between the min and max values // (Preferrably a roundish number close to MinLSB) // CurrentLSB = 0.000333 (333uA per bit) // 5. Compute the calibration register // Cal = trunc (0.04096 / (Current_LSB * RSHUNT)) // Cal = 12300 ina219_calValue = 12300; // 6. Calculate the power LSB // PowerLSB = 20 * CurrentLSB // PowerLSB = 0.00666 (6.66mW per bit) // 7. Compute the maximum current and shunt voltage values before overflow // // Max_Current = Current_LSB * 32767 // Max_Current = 10.9A before overflow // // If Max_Current > Max_Possible_I then // Max_Current_Before_Overflow = MaxPossible_I // Else // Max_Current_Before_Overflow = Max_Current // End If // // ... In this case, we're good though since Max_Current is less than // MaxPossible_I // // Max_ShuntVoltage = Max_Current_Before_Overflow * RSHUNT // Max_ShuntVoltage = 0.109V // // If Max_ShuntVoltage >= VSHUNT_MAX // Max_ShuntVoltage_Before_Overflow = VSHUNT_MAX // Else // Max_ShuntVoltage_Before_Overflow = Max_ShuntVoltage // End If // 8. Compute the Maximum Power // MaximumPower = Max_Current_Before_Overflow * VBUS_MAX // MaximumPower = 1.31068 * 32V // MaximumPower = 41.94176W // Set multipliers to convert raw current/power values ina219_currentDivider_mA = 3; // Current LSB = 333uA per bit (1000/333 = 3) ina219_powerMultiplier_mW = 6.66f; // Power LSB = 6.66mW per bit // Set Calibration register to 'Cal' calculated above Adafruit_BusIO_Register calibration_reg = Adafruit_BusIO_Register(i2c_dev, INA219_REG_CALIBRATION, 2, MSBFIRST); calibration_reg.write(ina219_calValue, 2); // Set Config register to take into account the settings above uint16_t config = INA219_CONFIG_BVOLTAGERANGE_16V | INA219_CONFIG_GAIN_4_160MV | INA219_CONFIG_BADCRES_12BIT | INA219_CONFIG_SADCRES_12BIT_1S_532US | INA219_CONFIG_MODE_SANDBVOLT_CONTINUOUS; Adafruit_BusIO_Register config_reg = Adafruit_BusIO_Register(i2c_dev, INA219_REG_CONFIG, 2, MSBFIRST); config_reg.write(config, 2); } #endif ================================================ FILE: firmware/src/Adafruit_INA219.h ================================================ // Fork of Adafruit_INA219 that exposes the private raw-read functions and // avoids setting calibration before every read for better performance. /*! * @file Adafruit_INA219.h * * This is a library for the Adafruit INA219 breakout board * ----> https://www.adafruit.com/product/904 * * Adafruit invests time and resources providing this open source code, * please support Adafruit and open-source hardware by purchasing * products from Adafruit! * * Written by Bryan Siepert and Kevin "KTOWN" Townsend for Adafruit Industries. * * BSD license, all text here must be included in any redistribution. * */ #include "config.h" #if INA219_POWER_SENSE #ifndef _LIB_ADAFRUIT_INA219_ #define _LIB_ADAFRUIT_INA219_ #include "Arduino.h" #include #include #include /** default I2C address **/ #define INA219_ADDRESS (0x40) // 1000000 (A0+A1=GND) /** read **/ #define INA219_READ (0x01) /*========================================================================= CONFIG REGISTER (R/W) **************************************************************************/ /** config register address **/ #define INA219_REG_CONFIG (0x00) /** reset bit **/ #define INA219_CONFIG_RESET (0x8000) // Reset Bit /** mask for bus voltage range **/ #define INA219_CONFIG_BVOLTAGERANGE_MASK (0x2000) // Bus Voltage Range Mask /** bus voltage range values **/ enum { INA219_CONFIG_BVOLTAGERANGE_16V = (0x0000), // 0-16V Range INA219_CONFIG_BVOLTAGERANGE_32V = (0x2000), // 0-32V Range }; /** mask for gain bits **/ #define INA219_CONFIG_GAIN_MASK (0x1800) // Gain Mask /** values for gain bits **/ enum { INA219_CONFIG_GAIN_1_40MV = (0x0000), // Gain 1, 40mV Range INA219_CONFIG_GAIN_2_80MV = (0x0800), // Gain 2, 80mV Range INA219_CONFIG_GAIN_4_160MV = (0x1000), // Gain 4, 160mV Range INA219_CONFIG_GAIN_8_320MV = (0x1800), // Gain 8, 320mV Range }; /** mask for bus ADC resolution bits **/ #define INA219_CONFIG_BADCRES_MASK (0x0780) /** values for bus ADC resolution **/ enum { INA219_CONFIG_BADCRES_9BIT = (0x0000), // 9-bit bus res = 0..511 INA219_CONFIG_BADCRES_10BIT = (0x0080), // 10-bit bus res = 0..1023 INA219_CONFIG_BADCRES_11BIT = (0x0100), // 11-bit bus res = 0..2047 INA219_CONFIG_BADCRES_12BIT = (0x0180), // 12-bit bus res = 0..4097 INA219_CONFIG_BADCRES_12BIT_2S_1060US = (0x0480), // 2 x 12-bit bus samples averaged together INA219_CONFIG_BADCRES_12BIT_4S_2130US = (0x0500), // 4 x 12-bit bus samples averaged together INA219_CONFIG_BADCRES_12BIT_8S_4260US = (0x0580), // 8 x 12-bit bus samples averaged together INA219_CONFIG_BADCRES_12BIT_16S_8510US = (0x0600), // 16 x 12-bit bus samples averaged together INA219_CONFIG_BADCRES_12BIT_32S_17MS = (0x0680), // 32 x 12-bit bus samples averaged together INA219_CONFIG_BADCRES_12BIT_64S_34MS = (0x0700), // 64 x 12-bit bus samples averaged together INA219_CONFIG_BADCRES_12BIT_128S_69MS = (0x0780), // 128 x 12-bit bus samples averaged together }; /** mask for shunt ADC resolution bits **/ #define INA219_CONFIG_SADCRES_MASK \ (0x0078) // Shunt ADC Resolution and Averaging Mask /** values for shunt ADC resolution **/ enum { INA219_CONFIG_SADCRES_9BIT_1S_84US = (0x0000), // 1 x 9-bit shunt sample INA219_CONFIG_SADCRES_10BIT_1S_148US = (0x0008), // 1 x 10-bit shunt sample INA219_CONFIG_SADCRES_11BIT_1S_276US = (0x0010), // 1 x 11-bit shunt sample INA219_CONFIG_SADCRES_12BIT_1S_532US = (0x0018), // 1 x 12-bit shunt sample INA219_CONFIG_SADCRES_12BIT_2S_1060US = (0x0048), // 2 x 12-bit shunt samples averaged together INA219_CONFIG_SADCRES_12BIT_4S_2130US = (0x0050), // 4 x 12-bit shunt samples averaged together INA219_CONFIG_SADCRES_12BIT_8S_4260US = (0x0058), // 8 x 12-bit shunt samples averaged together INA219_CONFIG_SADCRES_12BIT_16S_8510US = (0x0060), // 16 x 12-bit shunt samples averaged together INA219_CONFIG_SADCRES_12BIT_32S_17MS = (0x0068), // 32 x 12-bit shunt samples averaged together INA219_CONFIG_SADCRES_12BIT_64S_34MS = (0x0070), // 64 x 12-bit shunt samples averaged together INA219_CONFIG_SADCRES_12BIT_128S_69MS = (0x0078), // 128 x 12-bit shunt samples averaged together }; /** mask for operating mode bits **/ #define INA219_CONFIG_MODE_MASK (0x0007) // Operating Mode Mask /** values for operating mode **/ enum { INA219_CONFIG_MODE_POWERDOWN = 0x00, /**< power down */ INA219_CONFIG_MODE_SVOLT_TRIGGERED = 0x01, /**< shunt voltage triggered */ INA219_CONFIG_MODE_BVOLT_TRIGGERED = 0x02, /**< bus voltage triggered */ INA219_CONFIG_MODE_SANDBVOLT_TRIGGERED = 0x03, /**< shunt and bus voltage triggered */ INA219_CONFIG_MODE_ADCOFF = 0x04, /**< ADC off */ INA219_CONFIG_MODE_SVOLT_CONTINUOUS = 0x05, /**< shunt voltage continuous */ INA219_CONFIG_MODE_BVOLT_CONTINUOUS = 0x06, /**< bus voltage continuous */ INA219_CONFIG_MODE_SANDBVOLT_CONTINUOUS = 0x07, /**< shunt and bus voltage continuous */ }; /** shunt voltage register **/ #define INA219_REG_SHUNTVOLTAGE (0x01) /** bus voltage register **/ #define INA219_REG_BUSVOLTAGE (0x02) /** power register **/ #define INA219_REG_POWER (0x03) /** current register **/ #define INA219_REG_CURRENT (0x04) /** calibration register **/ #define INA219_REG_CALIBRATION (0x05) /*! * @brief Class that stores state and functions for interacting with INA219 * current/power monitor IC */ class Adafruit_INA219 { public: Adafruit_INA219(uint8_t addr = INA219_ADDRESS); bool begin(TwoWire *theWire = &Wire); void setCalibration_32V_2A(); void setCalibration_32V_1A(); void setCalibration_16V_400mA(); void setCalibrationSplitflap(); float getBusVoltage_V(); float getShuntVoltage_mV(); float getCurrent_mA(); float getPower_mW(); void powerSave(bool on); int16_t getBusVoltage_raw(); int16_t getShuntVoltage_raw(); int16_t getCurrent_raw(); int16_t getPower_raw(); // The following multipliers are used to convert raw current and power // values to mA and mW, taking into account the current config settings uint32_t ina219_currentDivider_mA; float ina219_powerMultiplier_mW; private: Adafruit_I2CDevice *i2c_dev = NULL; uint8_t ina219_i2caddr = -1; uint32_t ina219_calValue; void init(); }; #endif #endif ================================================ FILE: firmware/src/acceleration.h ================================================ /* Copyright 2020 Scott Bezek and the splitflap contributors 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. */ // NOTE: THIS FILE IS AUTOGENERATED! DO NOT MODIFY! // To update, run `firmware/src/generate_acceleration.py` #ifndef ACCELERATION #define ACCELERATION namespace Acceleration { const PROGMEM uint16_t ACCEL_STEP_PERIODS[] = {1600, 10000, 7920, 6800, 6064, 5530, 5119, 4790, 4518, 4288, 4090, 3918, 3766, 3631, 3510, 3400, 3300, 3208, 3123, 3045, 2973, 2906, 2843, 2783, 2728, 2676, 2626, 2580, 2535, 2493, 2453, 2415, 2379, 2344, 2310, 2278, 2248, 2218, 2190, 2163, 2137, 2111, 2087, 2063, 2040, 2018, 1997, 1976, 1956, 1937, 1918, 1900, 1882, 1864, 1848, 1831, 1815, 1800, 1784, 1770, 1755, 1741, 1727, 1714, 1701, 1688, 1675, 1663, 1651, 1639, 1628, 1617, 1606}; const uint8_t MAX_ACCEL_STEP = 72; } #endif ================================================ FILE: firmware/src/basic_io_config.h ================================================ /* Copyright 2020 Scott Bezek and the splitflap contributors 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. */ #ifndef IO_CONFIG_H #define IO_CONFIG_H #include #include "splitflap_module.h" #if defined(__AVR_ATmega168__) || defined(__AVR_ATmega328P__) #if NUM_MODULES > 3 #error "Basic IO mode only supports up to 3 modules on Atmega168/328-based boards. Set NUM_MODULES to 3 or fewer." #endif // Motor A: PB0-3 = pins 8-11 // Motor B: PD4-7 = pins 4-7 // Motor C: PC0-3 = pins A0-A3 // Sensor A: PB4 = pin 12 // Sensor B: PC4 = pin A4 // Sensor C: PC5 = pin A5 SplitflapModule moduleA((uint8_t&)PORTB, 0, (uint8_t&)PINB, B00010000); SplitflapModule moduleB((uint8_t&)PORTD, 4, (uint8_t&)PINC, B00010000); SplitflapModule moduleC((uint8_t&)PORTC, 0, (uint8_t&)PINC, B00100000); SplitflapModule* modules[] = { &moduleA, &moduleB, &moduleC, }; void initialize_modules() { // Initialize motor outputs DDRB |= 0xF; // Motor A DDRD |= 0xF0; // Motor B DDRC |= 0xF; // Motor C // Initialize sensor inputs with pullups pinMode(12, INPUT_PULLUP); // Sensor A pinMode(18, INPUT_PULLUP); // Sensor B pinMode(19, INPUT_PULLUP); // Sensor C } inline void motor_sensor_io() { // No-op (modules write directly to IO pins) } #elif defined(__AVR_ATmega2560__) SplitflapModule moduleA((uint8_t&)PORTB, 4, (uint8_t&)PINE, 1 << 5); //10-13 3 SplitflapModule moduleB((uint8_t&)PORTA, 0, (uint8_t&)PINE, 1 << 4); //25-22 2 SplitflapModule moduleC((uint8_t&)PORTA, 4, (uint8_t&)PINJ, 1 << 1); //29-26 14 SplitflapModule moduleD((uint8_t&)PORTC, 4, (uint8_t&)PINJ, 1 << 0); //33-30 15 SplitflapModule moduleE((uint8_t&)PORTC, 0, (uint8_t&)PINH, 1 << 1); //37-34 16 SplitflapModule moduleF((uint8_t&)PORTL, 4, (uint8_t&)PINH, 1 << 0); //45-42 17 SplitflapModule moduleG((uint8_t&)PORTL, 0, (uint8_t&)PIND, 1 << 3); //49-46 18 SplitflapModule moduleH((uint8_t&)PORTB, 0, (uint8_t&)PIND, 1 << 2); //53-50 19 SplitflapModule moduleI((uint8_t&)PORTK, 4, (uint8_t&)PIND, 1 << 7); //A12-A15 38 SplitflapModule moduleJ((uint8_t&)PORTK, 0, (uint8_t&)PING, 1 << 2); //A8-A11 39 SplitflapModule moduleK((uint8_t&)PORTF, 4, (uint8_t&)PING, 1 << 1); //A4-A7 40 SplitflapModule moduleL((uint8_t&)PORTF, 0, (uint8_t&)PING, 1 << 0); //A0-A3 41 SplitflapModule* modules[] = { &moduleA, &moduleB, &moduleC, &moduleD, &moduleE, &moduleF, &moduleG, &moduleH, &moduleI, &moduleJ, &moduleK, &moduleL, }; void initialize_modules() { // Initialize motor outputs DDRF = 0xFF; DDRK = 0xFF; DDRB = 0xFF; DDRL = 0xFF; DDRC = 0xFF; DDRA = 0xFF; // Initialize sensor inputs with pullups pinMode(41, INPUT_PULLUP); pinMode(40, INPUT_PULLUP); pinMode(39, INPUT_PULLUP); pinMode(38, INPUT_PULLUP); pinMode(19, INPUT_PULLUP); pinMode(18, INPUT_PULLUP); pinMode(17, INPUT_PULLUP); pinMode(16, INPUT_PULLUP); pinMode(15, INPUT_PULLUP); pinMode(14, INPUT_PULLUP); pinMode(2, INPUT_PULLUP); pinMode(3, INPUT_PULLUP); } inline void motor_sensor_io() { // No-op (modules write directly to IO pins) } #else #error "Basic IO configuration is not supported for this board type. Use SPI IO or modify basic_io_config.h to add support for this board." #endif #endif ================================================ FILE: firmware/src/config.h ================================================ #pragma once #include /***** CONFIGURATION *****/ // 1) Mode #define SENSOR_TEST false // 2) General Settings #ifndef NUM_MODULES // Set NUM_MODULES in platformio.ini instead when using ESP32/PlatformIO #define NUM_MODULES (12) #endif // Whether to force a full rotation when the same letter is specified again #define FORCE_FULL_ROTATION true // Whether to use/expect a home sensor. Enable for auto-calibration via home // sensor feedback. Disable for basic open-loop control (useful when first // testing the split-flap, since home calibration can be tricky to fine tune) #define HOME_CALIBRATION_ENABLED true // 3) Flap Contents & Order // This `flaps` array should match the order of flaps on your spools, with // the first being the "home" flap. // // These are used for the built-in display, plaintext serial interface, and // can be referenced by interactive controllers using the proto interface, but // these are non-critical and only useful for interactive usage with the // standard interfaces. (If you are using custom control software with the // proto interface - you'll know if you are - you can ignore these since the // proto interface uses integer indexes to reference flap positions). // // The conventions for these are as follows: // - basic letters should be UPPER CASE // - lower-case letters can be used to represent color blocks: // - g = green // - p = purple // - r = red // - w = white // - y = yellow // Flap option 1: Legacy printed flaps (40 per module) // #define NUM_FLAPS (40) // const uint8_t flaps[NUM_FLAPS] = { // ' ', // 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', // 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', // '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', // '.', // ',', // '\'', // }; // Flap option 2: v2 flaps (52 per module) #define NUM_FLAPS (52) const uint8_t flaps[NUM_FLAPS] = { ' ', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'g', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'r', '.', '?', '-', '$', '\'', '#', 'y', 'p', ',', '!', '@', '&', 'w' }; // Flap option 3: v2 flaps (limited 40-flap set using the first 40 flaps of the set) // #define NUM_FLAPS (40) // const uint8_t flaps[NUM_FLAPS] = { // ' ', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', // 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', // 'Z', 'g', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'r', // '.', // }; // Flap option 4: YOUR CUSTOM CHARACTER SET HERE! // #define NUM_FLAPS (40) // const uint8_t flaps[NUM_FLAPS] = { // // }; // 4) Hardware configuration and features #ifndef SPLITFLAP_PIO_HARDWARE_CONFIG // Note: these values are only used in the Arduino IDE. For PlatformIO, // hardware configuration is set by the environment, in platformio.ini. #define SPI_IO true #define REVERSE_MOTOR_DIRECTION false #define NEOPIXEL_DEBUGGING_ENABLED true #define INA219_POWER_SENSE false #endif // 5) Board-dependent Default Settings #if defined(__AVR_ATmega168__) || defined(__AVR_ATmega328P__) #if SPI_IO #define NEOPIXEL_PIN 6 #else #define NEOPIXEL_PIN 3 #endif #define MONITOR_SPEED 38400 #elif defined(__AVR_ATmega2560__) #define NEOPIXEL_PIN 5 #define MONITOR_SPEED 38400 #elif defined(ARDUINO_ESP8266_WEMOS_D1MINI) #define NEOPIXEL_PIN (D8) #define MONITOR_SPEED 38400 #elif defined(ESP32) #define NEOPIXEL_PIN (13) #define MONITOR_SPEED 230400 #endif /*************************/ /** * Suggested Pinouts * * Arduino Uno - Basic IO - Up to 3 modules * A: Motor: B0-3 = pins 8-11 Sensor: B4 = pin 12 * B: Motor: D4-7 = pins 4-7 Sensor: C4 = pin A4 * C: Motor: C0-3 = pins A0-A3 Sensor: C5 = pin A5 * * Neopixel: 3 * * Arduino Uno - SPI IO (Shift Register) - Up to 12 modules * 4 Motor latch * 5 Sensor latch * 6 neopixel * 11 MOSI * 12 MISO * 13 CLK * * Arduino Mega 2560 - Basic IO - Up to 12 modules) * Note the order of pins increases for some motors and decreases for others. * Modules whose motor phase pins are in the opposite order are marked with a * below. * * A: Motor: F0-3 = pins A0-A3 Sensor: G0 = pin 41 * B: Motor: F4-7 = pins A4-A7 Sensor: G1 = pin 40 * C: Motor: K0-3 = pins A8-A11 Sensor: G2 = pin 39 * D: Motor: K4-7 = pins A12-A15 Sensor: D7 = pin 38 * E: Motor: B0-3 = pins 53-50 * Sensor: D2 = pin 19 * F: Motor: L0-3 = pins 49-46 * Sensor: D3 = pin 18 * G: Motor: L4-7 = pins 45-42 * Sensor: H0 = pin 17 * H: Motor: C0-3 = pins 37-34 * Sensor: H1 = pin 16 * I: Motor: C4-7 = pins 33-30 * Sensor: J0 = pin 15 * J: Motor: A4-7 = pins 29-26 * Sensor: J1 = pin 14 * K: Motor: A0-3 = pins 25-22 * Sensor: E4 = pin 2 * L: Motor: B4-7 = pins 10-13 Sensor: E5 = pin 3 * * Neopixel: 4 * * INA219: * SDA: 20 * SCL: 21 * * ESP32 - SPI IO (Shift Register) - Up to 120+ modules: * 25 Latch (out) * 33 CLK (out) * 39 MISO (in) * 32 MOSI (out) * */ // Configuration validation and dependent settings #if NUM_MODULES < 1 #error NUM_MODULES must be at least 1 #endif #ifdef CHAINLINK #if NUM_MODULES % 6 != 0 #error NUM_MODULES must be a multiple of 6, to match the capacity of the connected Chainlink Drivers. You can use fewer than this number of modules, but the setting must match the Chainlink Driver outputs. #endif #define NUM_LOOPBACKS (NUM_MODULES / 3) #define CHAINLINK_ENFORCE_LOOPBACKS 1 #endif ================================================ FILE: firmware/src/generate_acceleration.py ================================================ #!/usr/bin/env python3 # Copyright 2020 Scott Bezek and the splitflap contributors # # 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. import os import subprocess MIN_PERIOD_MICROS = 1600 MAX_PERIOD_MICROS = 10000 ACCEL_TIME_MICROS = 200000 IDLE_PERIOD_MICROS = 1600 _TEMPLATE = """/* Copyright 2020 Scott Bezek and the splitflap contributors 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. */ // NOTE: THIS FILE IS AUTOGENERATED! DO NOT MODIFY! // To update, run `{script_path}` #ifndef ACCELERATION #define ACCELERATION namespace Acceleration {{ const PROGMEM uint16_t ACCEL_STEP_PERIODS[] = {{{periods_array}}}; const uint8_t MAX_ACCEL_STEP = {max_accel_step}; }} #endif """ def get_git_root(): try: return subprocess.check_output( ['git', 'rev-parse', '--show-toplevel'], cwd=os.path.dirname(os.path.abspath(__file__)), ).decode('utf-8').strip() except Exception: raise RuntimeError("Could not read git directory path. Make sure you have git installed and you're working with a git clone of the repository.") def run(output_file_path): min_velocity = 1000000 / float(MAX_PERIOD_MICROS) max_velocity = 1000000 / float(MIN_PERIOD_MICROS) t = 0 ramp_periods = [IDLE_PERIOD_MICROS] while t < ACCEL_TIME_MICROS: velocity = min_velocity + (max_velocity - min_velocity) * float(t) / ACCEL_TIME_MICROS if velocity > max_velocity: velocity = max_velocity period = int(1000000 / velocity) ramp_periods.append(period) t += period assert len(ramp_periods) <= 255, 'number of ramp periods would exceed a uint8_t' git_root = get_git_root() script_path = os.path.relpath(os.path.abspath(__file__), os.path.abspath(git_root)) with open(output_file_path, 'wb') as f: f.write(_TEMPLATE.format( periods_array=', '.join([str(x) for x in ramp_periods]), max_accel_step=len(ramp_periods) - 1, script_path=script_path, ).encode('utf-8')) if __name__ == '__main__': output_file_path = os.path.join(os.path.dirname(__file__), 'acceleration.h') run( output_file_path, ) ================================================ FILE: firmware/src/spi_io_config.h ================================================ /* Copyright 2020 Scott Bezek and the splitflap contributors 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. */ #ifndef IO_CONFIG_H #define IO_CONFIG_H #include #if defined(__AVR_ATmega168__) || defined(__AVR_ATmega328P__) #define OUT_LATCH_PIN (4) #define _OUT_LATCH_PORT PORTD #define _OUT_LATCH_BIT 4 #define IN_LATCH_PIN (5) #define _IN_LATCH_PORT PORTD #define _IN_LATCH_BIT 5 #define OUT_LATCH(){\ _OUT_LATCH_PORT |= (1 << _OUT_LATCH_BIT);\ _OUT_LATCH_PORT &= ~(1 << _OUT_LATCH_BIT);\ } #define IN_LATCH() {\ _IN_LATCH_PORT &= ~(1 << _IN_LATCH_BIT);\ _IN_LATCH_PORT |= (1 << _IN_LATCH_BIT);\ } #define SPI_CLOCK 3000000 #define BUFFER_ATTRS #endif #ifdef ARDUINO_ESP8266_WEMOS_D1MINI #define OUT_LATCH_PIN (D1) #define IN_LATCH_PIN (D2) #define OUT_LATCH() {digitalWrite(OUT_LATCH_PIN, HIGH); digitalWrite(OUT_LATCH_PIN, LOW);} #define IN_LATCH() {digitalWrite(IN_LATCH_PIN, LOW); digitalWrite(IN_LATCH_PIN, HIGH);} #define SPI_CLOCK 3000000 #define BUFFER_ATTRS #endif #ifdef ESP32 #include "driver/spi_master.h" #include "driver/spi_slave.h" #define LATCH_PIN (25) // Optional - uncomment if connecting the output enable pin of the 74HC595 shift registers // to the ESP32. You can otherwise hard-wire the output enable pins to always be enabled. // #define OUTPUT_ENABLE_PIN (27) #define PIN_NUM_MISO 39 #define PIN_NUM_MOSI 32 #define PIN_NUM_CLK 33 // Note: You may need to slow this down to 3MHz if you're using a classic driver board; // the MIC5842 only officially supports up to 3.3MHz #define SPI_CLOCK 4000000 #define BUFFER_ATTRS WORD_ALIGNED_ATTR // Note: must use HSPI to avoid conflict with ST7789 driver which uses VSPI #define SPLITFLAP_SPI_HOST HSPI_HOST #define DMA_CHANNEL 1 spi_device_handle_t spi_tx; spi_device_handle_t spi_rx; spi_transaction_t tx_transaction; spi_transaction_t rx_transaction; #endif #if !defined(__AVR_ATmega168__) && !defined(__AVR_ATmega328P__) && !defined(ARDUINO_ESP8266_WEMOS_D1MINI) && !defined(ESP32) #error "Unknown/unsupported board for SPI mode. ATmega328-based boards (Uno, Duemilanove, Diecimila), ESP8266 and ESP32 are currently supported" #endif #ifdef CHAINLINK #define MOTOR_BUFFER_LENGTH (NUM_MODULES * 2 / 3 + (NUM_MODULES % 3 != 0) * 2) #define SENSOR_BUFFER_LENGTH (NUM_MODULES / 6 + (NUM_MODULES % 6 != 0)) #else #define MOTOR_BUFFER_LENGTH (NUM_MODULES / 2 + (NUM_MODULES % 2 != 0)) #define SENSOR_BUFFER_LENGTH (NUM_MODULES / 4 + (NUM_MODULES % 4 != 0)) #endif BUFFER_ATTRS uint8_t motor_buffer[MOTOR_BUFFER_LENGTH]; BUFFER_ATTRS uint8_t sensor_buffer[SENSOR_BUFFER_LENGTH]; #ifdef __AVR__ // Define placement new so we can initialize SplitflapModules at runtime into a static buffer. // (see https://arduino.stackexchange.com/a/1499) void* operator new(__attribute__((unused)) size_t size, void* ptr) { return ptr; } #endif #ifdef ESP32 void reset_latch(spi_transaction_t *trans) { digitalWrite(LATCH_PIN, LOW); } void latch_registers(spi_transaction_t *trans) { digitalWrite(LATCH_PIN, HIGH); } #endif // Static buffer for SplitflapModules (initialized at runtime) static char moduleBuffer[NUM_MODULES][sizeof(SplitflapModule)]; SplitflapModule* modules[NUM_MODULES]; #ifdef CHAINLINK static const uint8_t MOTOR_OFFSET[] = {0, 0, 1, 2, 3, 3}; #endif inline void initialize_modules() { for (uint8_t i = 0; i < NUM_MODULES; i++) { // Create SplitflapModules in a statically allocated buffer using placement new #ifdef CHAINLINK modules[i] = new (moduleBuffer[i]) SplitflapModule(motor_buffer[MOTOR_BUFFER_LENGTH - 1 - i/6*4 - MOTOR_OFFSET[i%6]], i % 2 == 0 ? 0 : 4, sensor_buffer[i/6], 1 << (i % 6)); #else modules[i] = new (moduleBuffer[i]) SplitflapModule(motor_buffer[MOTOR_BUFFER_LENGTH - 1 - i/2], i % 2 == 0 ? 0 : 4, sensor_buffer[i/4], 1 << (i % 4)); #endif } memset(motor_buffer, 0, MOTOR_BUFFER_LENGTH); memset(sensor_buffer, 0, SENSOR_BUFFER_LENGTH); // Initialize SPI #ifdef IN_LATCH_PIN pinMode(IN_LATCH_PIN, OUTPUT); digitalWrite(IN_LATCH_PIN, HIGH); #endif #ifdef OUT_LATCH_PIN pinMode(OUT_LATCH_PIN, OUTPUT); digitalWrite(OUT_LATCH_PIN, LOW); #endif #ifdef LATCH_PIN pinMode(LATCH_PIN, OUTPUT); digitalWrite(LATCH_PIN, LOW); #endif #ifdef ESP32 esp_err_t ret; //Initialize the SPI bus spi_bus_config_t tx_bus_config = { .mosi_io_num = PIN_NUM_MOSI, .miso_io_num = PIN_NUM_MISO, .sclk_io_num = PIN_NUM_CLK, .quadwp_io_num = -1, .quadhd_io_num = -1, .max_transfer_sz = 1000, }; ret=spi_bus_initialize(SPLITFLAP_SPI_HOST, &tx_bus_config, DMA_CHANNEL); ESP_ERROR_CHECK(ret); spi_device_interface_config_t tx_device_config = { .command_bits=0, .address_bits=0, .dummy_bits=0, .mode=3, .duty_cycle_pos=0, .cs_ena_pretrans=0, .cs_ena_posttrans=0, .clock_speed_hz=SPI_CLOCK, .input_delay_ns=0, .spics_io_num=-1, .flags = 0, .queue_size=1, .pre_cb=NULL, .post_cb=NULL, }; ret=spi_bus_add_device(SPLITFLAP_SPI_HOST, &tx_device_config, &spi_tx); ESP_ERROR_CHECK(ret); spi_device_interface_config_t rx_device_config = { .command_bits=0, .address_bits=0, .dummy_bits=0, .mode=2, .duty_cycle_pos=0, .cs_ena_pretrans=0, .cs_ena_posttrans=0, .clock_speed_hz=SPI_CLOCK, .input_delay_ns=30, .spics_io_num=-1, .flags = SPI_DEVICE_HALFDUPLEX, .queue_size=1, .pre_cb=&latch_registers, .post_cb=&reset_latch, }; ret=spi_bus_add_device(SPLITFLAP_SPI_HOST, &rx_device_config, &spi_rx); ESP_ERROR_CHECK(ret); memset(&tx_transaction, 0, sizeof(tx_transaction)); tx_transaction.length = MOTOR_BUFFER_LENGTH*8; tx_transaction.tx_buffer = &motor_buffer; tx_transaction.rx_buffer = NULL; memset(&rx_transaction, 0, sizeof(rx_transaction)); rx_transaction.length = SENSOR_BUFFER_LENGTH*8; rx_transaction.rxlength = SENSOR_BUFFER_LENGTH*8; rx_transaction.tx_buffer = NULL; rx_transaction.rx_buffer = &sensor_buffer; #else SPI.begin(); SPI.beginTransaction(SPISettings(SPI_CLOCK, MSBFIRST, SPI_MODE0)); #endif } inline void motor_sensor_io() { #ifdef ESP32 esp_err_t ret; // Send data ret=spi_device_polling_transmit(spi_tx, &tx_transaction); assert(ret==ESP_OK); // Receive data ret=spi_device_polling_transmit(spi_rx, &rx_transaction); assert(ret==ESP_OK); #else IN_LATCH(); delayMicroseconds(1); #if defined(ARDUINO_ESP8266_WEMOS_D1MINI) // Due to timing differences in the SPI implementation on the ESP8266, the // first bit is "lost" when using SPI to shift in data from a 74HC165 // register. To correct for that, we manually read the first bit before // using SPI to read byte-by-byte and shift the data accordingly. bool extra_bit = digitalRead(D6); #endif for (uint8_t i = 0; i < MOTOR_BUFFER_LENGTH; i++) { int val = SPI.transfer(motor_buffer[i]); if (i < SENSOR_BUFFER_LENGTH) { #if defined(ARDUINO_ESP8266_WEMOS_D1MINI) sensor_buffer[i] = (extra_bit << 7) | (val >> 1); extra_bit = val & B00000001; #else sensor_buffer[i] = val; #endif } } OUT_LATCH(); #endif } #ifdef CHAINLINK void chainlink_set_led(uint8_t moduleIndex, bool on) { uint8_t groupPosition = moduleIndex % 6; uint8_t byteIndex = MOTOR_BUFFER_LENGTH - 1 - moduleIndex/6*4 - (groupPosition < 3 ? 1 : 2); uint8_t bitMask = (groupPosition < 3) ? (1 << (4 + groupPosition)) : (1 << (groupPosition - 3)); if (on) { motor_buffer[byteIndex] |= bitMask; } else { motor_buffer[byteIndex] &= ~bitMask; } } static uint8_t chainlink_loopbackMotorByte(uint8_t loopbackIndex) { return MOTOR_BUFFER_LENGTH - 1 - (loopbackIndex / 2) * 4 - (((loopbackIndex % 2) == 0) ? 1 : 2); } static uint8_t chainlink_loopbackMotorBitMask(uint8_t loopbackIndex) { return (loopbackIndex % 2) == 0 ? (1 << 7) : (1 << 3); } static uint8_t chainlink_loopbackSensorByte(uint8_t loopbackIndex) { return loopbackIndex / 2; } static uint8_t chainlink_loopbackSensorBitMask(uint8_t loopbackIndex) { return (loopbackIndex % 2) == 0 ? 1 << 6 : 1 << 7; } bool chainlink_test_startup_loopback(bool results[NUM_LOOPBACKS]) { bool success = true; // Turn off all motors, leds, and loopbacks; make sure all loopback inputs read 0 memset(motor_buffer, 0, MOTOR_BUFFER_LENGTH); motor_sensor_io(); motor_sensor_io(); for (uint8_t i = 0; i < NUM_LOOPBACKS; i++) { results[i] = ((sensor_buffer[chainlink_loopbackSensorByte(i)] & chainlink_loopbackSensorBitMask(i))) == 0; success &= results[i]; } return success; } void chainlink_set_loopback(uint8_t loop_out_index) { // Turn on loopback output motor_buffer[chainlink_loopbackMotorByte(loop_out_index)] |= chainlink_loopbackMotorBitMask(loop_out_index); } /** * Validate that the loopback from loop_out_index can be read successfully. There must be AT LEAST 2 motor_sensor_io() invocations * between setting the loopback and validating it - one for turning on the shift register output and another to read in the shift * register input. */ bool chainlink_validate_loopback(uint8_t loop_out_index, bool results[NUM_LOOPBACKS]) { bool success = true; for (uint8_t loop_in_index = 0; loop_in_index < NUM_LOOPBACKS; loop_in_index++) { uint8_t expected_bit_mask = (loop_out_index == loop_in_index) ? chainlink_loopbackSensorBitMask(loop_in_index) : 0; uint8_t actual_bit_mask = sensor_buffer[chainlink_loopbackSensorByte(loop_in_index)] & chainlink_loopbackSensorBitMask(loop_in_index); bool ok = actual_bit_mask == expected_bit_mask; success &= ok; if (results != nullptr) { results[loop_in_index] = ok; } } // Turn off loopback output motor_buffer[chainlink_loopbackMotorByte(loop_out_index)] &= ~chainlink_loopbackMotorBitMask(loop_out_index); return success; } bool chainlink_test_all_loopbacks(bool loopback_result[NUM_LOOPBACKS][NUM_LOOPBACKS], bool loopback_off_result[NUM_LOOPBACKS]) { bool loopback_success = true; // Turn one loopback bit on at a time and make sure only that loopback bit is set for (uint8_t loop_out_index = 0; loop_out_index < NUM_LOOPBACKS; loop_out_index++) { chainlink_set_loopback(loop_out_index); motor_sensor_io(); motor_sensor_io(); loopback_success &= chainlink_validate_loopback(loop_out_index, loopback_result[loop_out_index]); } loopback_success &= chainlink_test_startup_loopback(loopback_off_result); return loopback_success; } #endif #endif ================================================ FILE: firmware/src/splitflap_module.h ================================================ /* Copyright 2020 Scott Bezek and the splitflap contributors 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. */ #ifndef SPLITFLAP_MODULE_H #define SPLITFLAP_MODULE_H #include #include "acceleration.h" #include "splitflap_module_data.h" #include "config.h" // Logging and assertions are useful for debugging, but likely add too much time/space overhead to be used when // driving many SplitflapModules at once. #define VERBOSE_LOGGING false #define ASSERTIONS_ENABLED false #define FAKE_HOME_SENSOR false // Must be an integer. This code does not support a fractional steps per revolution for motors with non-integral gear ratios #define STEPS_PER_REVOLUTION (2048) // This is "rough" because it's integer division; it shouldn't be used for movement calculations or the error would // accumulate. #define _ROUGH_STEPS_PER_FLAP (STEPS_PER_REVOLUTION / NUM_FLAPS) #if HOME_CALIBRATION_ENABLED // The number of steps in either direction that's acceptable error for the home sensor #define HOME_ERROR_MARGIN_STEPS (_ROUGH_STEPS_PER_FLAP / 4) // After finding the home position, how long to wait before considering another home blip to be an unexpected error #define UNEXPECTED_HOME_START_BUFFER_STEPS (_ROUGH_STEPS_PER_FLAP * 5) // When recalibrating the home position, the number of steps to travel searching for home before giving up #define MAX_STEPS_LOOKING_FOR_HOME ((NUM_FLAPS + 2) * _ROUGH_STEPS_PER_FLAP) #define UNEXPECTED_HOME_START_STEP UNEXPECTED_HOME_START_BUFFER_STEPS // Start of range where a home sensor blip is unexpected #define UNEXPECTED_HOME_END_STEP (STEPS_PER_REVOLUTION - HOME_ERROR_MARGIN_STEPS) // End of range where a home sensor blip is unexpected // Expected home position step plus some margin of error. If we get to this step without having seen a home // sensor blip, something is wrong and we need to recalibrate. #define MISSED_HOME_STEP HOME_ERROR_MARGIN_STEPS #endif class SplitflapModule { private: // Configuration: uint8_t &motor_out; const uint8_t motor_bitshift; uint8_t &sensor_in; const uint8_t sensor_bitmask; // State: bool last_home = false; unsigned long last_update_micros = 0; // Tracks the most recent target flap index. Not used during motion, but needed to recalculate target step if we // re-calibrate the home position uint8_t target_flap_index = 0; // Current position/destination. Numbers are modulo GEAR_RATIO_INPUT_STEPS uint16_t current_step = 0; uint16_t delta_steps = 0; uint16_t offset_steps = 0; #if HOME_CALIBRATION_ENABLED // Home calibration state HomeState home_state = IGNORE; #endif // Motor state uint8_t current_phase = 0; uint16_t current_period = Acceleration::ACCEL_STEP_PERIODS[0]; void Panic(String message); bool CheckSensor(); void SetMotor(uint8_t out); uint8_t GetFlapFloor(uint16_t step); uint16_t GetTargetStepForFlapIndex(uint8_t target_flap_index); void GoToTargetFlapIndex(); void UpdateExpectedHome(); public: SplitflapModule( uint8_t &motor_out, const uint8_t motor_bitshift, uint8_t &sensor_in, const uint8_t sensor_bitmask ); #if HOME_CALIBRATION_ENABLED State state = SENSOR_ERROR; // Start in SENSOR_ERROR state until initialized #else State state = NORMAL; #endif uint8_t current_accel_step = 0; void GoToFlapIndex(uint8_t index); uint8_t GetCurrentFlapIndex(); uint8_t GetTargetFlapIndex(); void FindAndRecalibrateHome(); void ResetErrorCounters(); void ResetState(); inline void Update(); void Init(); bool GetHomeState(); void Disable(); void IncreaseOffset(uint8_t flap_tenths); void SetOffset(); uint16_t GetOffset(); void RestoreOffset(uint16_t offset); uint8_t count_unexpected_home = 0; uint8_t count_missed_home = 0; }; #define MOT_PHASE_A B00001000 #define MOT_PHASE_B B00000100 #define MOT_PHASE_C B00000010 #define MOT_PHASE_D B00000001 const uint8_t step_pattern[] = { #if REVERSE_MOTOR_DIRECTION MOT_PHASE_D | MOT_PHASE_A, MOT_PHASE_C | MOT_PHASE_D, MOT_PHASE_B | MOT_PHASE_C, MOT_PHASE_A | MOT_PHASE_B, #else MOT_PHASE_A | MOT_PHASE_B, MOT_PHASE_B | MOT_PHASE_C, MOT_PHASE_C | MOT_PHASE_D, MOT_PHASE_D | MOT_PHASE_A, #endif }; SplitflapModule::SplitflapModule( uint8_t &motor_out, const uint8_t motor_bitshift, uint8_t &sensor_in, const uint8_t sensor_bitmask) : motor_out(motor_out), motor_bitshift(motor_bitshift), sensor_in(sensor_in), sensor_bitmask(sensor_bitmask) { } void SplitflapModule::Disable() { SetMotor(0); state = STATE_DISABLED; } void SplitflapModule::Panic(String message) { SetMotor(0); state = PANIC; Serial.print("#### PANIC! ####\n"); Serial.print(message); } __attribute__((always_inline)) inline bool SplitflapModule::CheckSensor() { bool cur_home = (sensor_in & sensor_bitmask) != 0; bool shift = cur_home == true && last_home == false; last_home = cur_home; return shift; } __attribute__((always_inline)) inline void SplitflapModule::SetMotor(uint8_t out) { motor_out = (motor_out & ~(0x0F << motor_bitshift)) | ((out & 0x0F) << motor_bitshift); } __attribute__((always_inline)) inline uint8_t SplitflapModule::GetFlapFloor(uint16_t step) { uint16_t step_without_offset = step >= offset_steps ? step - offset_steps : STEPS_PER_REVOLUTION + step - offset_steps; return (uint32_t)step_without_offset * NUM_FLAPS / STEPS_PER_REVOLUTION; } __attribute__((always_inline)) inline uint16_t SplitflapModule::GetTargetStepForFlapIndex(uint8_t flap) { uint32_t intermediate = (uint32_t)flap * STEPS_PER_REVOLUTION; // Round UP when dividing so that the inverse calculation on the result (GetFlapFloor) returns the expected // result. uint16_t result = intermediate / NUM_FLAPS; if (result % NUM_FLAPS != 0) { result++; } result += offset_steps; if (result >= STEPS_PER_REVOLUTION) { result -= STEPS_PER_REVOLUTION; } return result; } __attribute__((always_inline)) inline void SplitflapModule::GoToTargetFlapIndex() { if (state != NORMAL) { return; } uint16_t target_step = GetTargetStepForFlapIndex(target_flap_index); uint16_t minimum_stopping_step = current_step + current_accel_step; // Can't come to a stop until we've used up any remaining deceleration steps if (target_step <= minimum_stopping_step) { // Must go around delta_steps = STEPS_PER_REVOLUTION - current_step + target_step; // NB: delta_steps can be > 1 full revolution in the event we are not yet at current_step, but couldn't stop in time } else { delta_steps = target_step - current_step; } } __attribute__((always_inline)) inline void SplitflapModule::GoToFlapIndex(uint8_t index) { if (state != NORMAL #if HOME_CALIBRATION_ENABLED && state != LOOK_FOR_HOME #endif ) { return; } target_flap_index = index; GoToTargetFlapIndex(); } __attribute__((always_inline)) inline uint8_t SplitflapModule::GetCurrentFlapIndex() { return GetFlapFloor(current_step); } uint8_t SplitflapModule::GetTargetFlapIndex() { return target_flap_index; } __attribute__((always_inline)) inline void SplitflapModule::FindAndRecalibrateHome() { #if HOME_CALIBRATION_ENABLED if (state == PANIC || state == STATE_DISABLED) { return; } state = LOOK_FOR_HOME; delta_steps = MAX_STEPS_LOOKING_FOR_HOME; #endif } __attribute__((always_inline)) inline void SplitflapModule::Update() { if (state == PANIC || state == STATE_DISABLED) { return; } unsigned long now = micros(); unsigned long delta_time = now - last_update_micros; if (delta_time >= current_period) { last_update_micros = now; uint8_t target_accel_step; if (state == NORMAL) { bool reset_to_home = false; #if HOME_CALIBRATION_ENABLED bool found_home = CheckSensor(); if (home_state == IGNORE) { #if VERBOSE_LOGGING if (found_home) { Serial.print("VERBOSE: Ignoring home"); } #endif if (current_step == UNEXPECTED_HOME_START_STEP) { home_state = UNEXPECTED; } } else if (home_state == UNEXPECTED) { if (found_home) { count_unexpected_home++; #if VERBOSE_LOGGING Serial.print("VERBOSE: Unexpected home! At "); Serial.print(current_step); Serial.print(". Unexpected range "); Serial.print(UNEXPECTED_HOME_START_STEP); Serial.print('-'); Serial.print(UNEXPECTED_HOME_END_STEP); Serial.print("; missed at "); Serial.print(MISSED_HOME_STEP); Serial.print(".\n"); #endif reset_to_home = true; } else if (current_step == UNEXPECTED_HOME_END_STEP) { home_state = EXPECTED; } } else if (home_state == EXPECTED) { if (FAKE_HOME_SENSOR || found_home) { #if VERBOSE_LOGGING Serial.print("VERBOSE: Found expected home."); #endif home_state = IGNORE; } else if (current_step == MISSED_HOME_STEP) { count_missed_home++; #if VERBOSE_LOGGING Serial.print("VERBOSE: Missed expected home! At "); Serial.print(current_step); Serial.print(". Expected between "); Serial.print(UNEXPECTED_HOME_END_STEP); Serial.print(" and "); Serial.print(MISSED_HOME_STEP); Serial.print(".\n"); #endif reset_to_home = true; } } #endif if (reset_to_home) { FindAndRecalibrateHome(); target_accel_step = 0; } else { // Update speed based on distance to target if (delta_steps > Acceleration::MAX_ACCEL_STEP) { target_accel_step = Acceleration::MAX_ACCEL_STEP; } else { target_accel_step = delta_steps; } } #if HOME_CALIBRATION_ENABLED } else if (state == LOOK_FOR_HOME) { bool found_home = CheckSensor(); if (FAKE_HOME_SENSOR || found_home) { #if VERBOSE_LOGGING Serial.print("VERBOSE: Found home!\n"); #endif state = NORMAL; target_accel_step = 0; // Reset frame of reference current_step = 0; home_state = IGNORE; GoToTargetFlapIndex(); } else { if (delta_steps == 0) { #if VERBOSE_LOGGING Serial.print("VERBOSE: Gave up looking for home!\n"); #endif state = SENSOR_ERROR; target_accel_step = 0; } else { target_accel_step = Acceleration::MAX_ACCEL_STEP / 8; } } #endif } else { target_accel_step = 0; } // Update motor if (current_accel_step < target_accel_step) { current_accel_step++; } else if (current_accel_step > target_accel_step) { current_accel_step--; } current_period = pgm_read_word_near(Acceleration::ACCEL_STEP_PERIODS + current_accel_step); if (current_accel_step > 0) { current_step++; if (current_step == STEPS_PER_REVOLUTION) { current_step = 0; } current_phase++; if (current_phase == 4) { current_phase = 0; } if (delta_steps > 0) { delta_steps--; } SetMotor(step_pattern[current_phase]); } else { SetMotor(0); } #if ASSERTIONS_ENABLED // Check modular arithmetic invariant if (current_step >= STEPS_PER_REVOLUTION) { Panic("current_step >= STEPS_PER_REVOLUTION"); } #endif } return; } void SplitflapModule::ResetErrorCounters() { count_unexpected_home = 0; count_missed_home = 0; } void SplitflapModule::ResetState() { ResetErrorCounters(); CheckSensor(); target_flap_index = 0; current_step = 0; delta_steps = 0; #if HOME_CALIBRATION_ENABLED home_state = IGNORE; #endif } void SplitflapModule::Init() { CheckSensor(); } bool SplitflapModule::GetHomeState() { return (sensor_in & sensor_bitmask) != 0; } void SplitflapModule::IncreaseOffset(uint8_t flap_tenths) { offset_steps += flap_tenths * STEPS_PER_REVOLUTION / NUM_FLAPS / 10; offset_steps %= STEPS_PER_REVOLUTION; GoToTargetFlapIndex(); } void SplitflapModule::SetOffset() { offset_steps = current_step; target_flap_index = 0; GoToTargetFlapIndex(); } uint16_t SplitflapModule::GetOffset() { return offset_steps; } void SplitflapModule::RestoreOffset(uint16_t offset) { if (offset != offset_steps) { offset_steps = offset; FindAndRecalibrateHome(); } } #endif ================================================ FILE: firmware/src/splitflap_module_data.h ================================================ /* Copyright 2020 Scott Bezek and the splitflap contributors 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. */ #pragma once #include "config.h" #if HOME_CALIBRATION_ENABLED enum HomeState { // Ignore any home blips (e.g. if we've just seen the home position and haven't traveled past it yet) IGNORE, // Home isn't expected; a home blip in this state/region indicates an error that requires recalibration UNEXPECTED, // Home position is expected in this state/region EXPECTED, }; #endif enum State { NORMAL, LOOK_FOR_HOME, SENSOR_ERROR, PANIC, STATE_DISABLED, }; ================================================ FILE: firmware/test/README ================================================ This directory is intended for PIO Unit Testing and project tests. Unit Testing is a software testing method by which individual units of source code, sets of one or more MCU program modules together with associated control data, usage procedures, and operating procedures, are tested to determine whether they are fit for use. Unit testing finds problems early in the development cycle. More information about PIO Unit Testing: - https://docs.platformio.org/page/plus/unit-testing.html ================================================ FILE: platformio.ini ================================================ ; PlatformIO Project Configuration File ; ; Build options: build flags, source filter ; Upload options: custom upload port, speed and extra flags ; Library options: dependencies, extra library storages ; Advanced options: extra scripting ; ; Please visit documentation for the other options and examples ; https://docs.platformio.org/page/projectconf.html [platformio] src_dir = firmware/src lib_dir = firmware/lib include_dir = firmware/include test_dir = firmware/test data_dir = firmware/data ; Note: change this to the target environment to get VSCode to handle code ; completion, etc, correctly. default_envs = chainlink [extra] lib_deps = Adafruit NeoPixel@1.7.0 ; Note: the Arduino Uno builds are temporarily disabled (legacy .ino files are being cleaned up and only platformio will be supported going forward) ; Go back to 6c1e1913cbfc23ee90155410a65ac26e2389134f for the last stable version that supported them in the meantime. ; ; [env:uno-shift-register] ; platform = atmelavr ; board = uno ; framework = arduino ; monitor_speed = 38400 ; monitor_echo = yes ; monitor_eol = LF ; lib_deps = ${extra.lib_deps} ; build_flags = ; -DSPI_IO=true ; -DREVERSE_MOTOR_DIRECTION=false ; -DNEOPIXEL_DEBUGGING_ENABLED=true ; -DINA219_POWER_SENSE=false ; -DSPLITFLAP_PIO_HARDWARE_CONFIG ; [env:uno-direct] ; platform = atmelavr ; board = uno ; framework = arduino ; monitor_speed = 38400 ; monitor_echo = yes ; monitor_eol = LF ; lib_deps = ${extra.lib_deps} ; build_flags = ; -DNUM_MODULES=3 ; -DSPI_IO=false ; -DREVERSE_MOTOR_DIRECTION=false ; -DNEOPIXEL_DEBUGGING_ENABLED=true ; -DINA219_POWER_SENSE=false ; -DSPLITFLAP_PIO_HARDWARE_CONFIG [esp32base] platform = espressif32@3.4 framework = arduino board = esp32dev upload_speed = 921600 monitor_speed = 230400 monitor_echo = yes monitor_eol = LF monitor_filters = esp32_exception_decoder board_build.partitions = default_ffat.csv extra_scripts = pre:firmware/buildscript_build_info_macros.py ; This would be much cleaner if we didn't need to preserve Arduino IDE compatibility and the splitflap ; module driver could be pulled out to its own library and shared properly... Instead, we remove the ; .ino file (referred to as .ino.cpp during the build) and add additional source. build_src_filter = +<*> -<.git/> -<.svn/> - - - - - +<../esp32/core> +<../esp32/splitflap> +<../esp32/proto_gen> lib_deps = bodmer/TFT_eSPI @ 2.4.25 knolleary/PubSubClient @ 2.8 bakercp/PacketSerial @ 1.4.0 nanopb/Nanopb @ 0.4.6 ; Ideally this would reference the nanopb submodule, but that would require ; everyone to check out submodules to just compile, so we use the library ; registry for the runtime. The submodule is available for manually updating ; the pre-compiled (checked in) .pb.h/c files when proto files change, but is ; otherwise not used during application firmware compilation. build_flags = -DSPI_IO=true -DSPLITFLAP_PIO_HARDWARE_CONFIG -DREVERSE_MOTOR_DIRECTION=false ; Set to true to enable MQTT support (see secrets.h.example for configuration) -DMQTT=false -DMQTT_MAX_PACKET_SIZE=512 ; Set to true to enable HTTP support (see secrets.h.example for configuration) -DHTTP=false ; Set to true to enable display support for T-Display (default) -DENABLE_DISPLAY=true -DUSER_SETUP_LOADED=1 -DST7789_DRIVER=1 -DCGRAM_OFFSET=1 -DTFT_WIDTH=135 -DTFT_HEIGHT=240 -DTFT_MISO=-1 -DTFT_MOSI=19 -DTFT_SCLK=18 -DTFT_CS=5 -DTFT_DC=16 -DTFT_RST=23 -DTFT_BL=4 -DLOAD_GLCD=1 -DLOAD_GFXFF=1 -DSPI_FREQUENCY=40000000 [env:chainlink] extends=esp32base build_flags = ${esp32base.build_flags} -DCHAINLINK -DNUM_MODULES=6 [env:chainlink_ota] extends=env:chainlink upload_protocol = espota upload_port = splitflap.local ; Replace with your device's IP address upload_flags = --auth=replace_me! --port=3232 --host_port=16106 --debug --progress --timeout=30 [env:advanced_chainlinkBase] extends=esp32base build_src_filter = ${esp32base.build_src_filter} +<../esp32/base> build_flags = ${esp32base.build_flags} -DCHAINLINK -DCHAINLINK_BASE -DNUM_MODULES=108 -DINA219_POWER_SENSE=true lib_deps = ${esp32base.lib_deps} adafruit/Adafruit MCP23017 Arduino Library @ 1.3.0 fastled/FastLED @ 3.9.7 adafruit/Adafruit BusIO @ 1.16.2 [env:advanced_chainlinkDriverTester] extends=esp32base build_src_filter = +<*> -<.git/> -<.svn/> - - - - - +<../esp32/core> +<../esp32/tester> build_flags = ${esp32base.build_flags} -DCHAINLINK -DCHAINLINK_DRIVER_TESTER -DNUM_MODULES=12 -DINA219_POWER_SENSE=true lib_deps = ${esp32base.lib_deps} adafruit/Adafruit MCP23017 Arduino Library @ 1.3.0 adafruit/Adafruit BusIO @ 1.16.2 build_type = debug [env:advanced_esp32Custom] ; For non-chainlink custom ESP32-based advanced builds that use shift registers but omit the Chainlink design elements like loopbacks and LEDs. ; This is not the environment you want unless you have custom non-Chainlink hardware and really know the intricacies of the shift register arrangement. extends=esp32base build_flags = ${esp32base.build_flags} -DNUM_MODULES=6 ================================================ FILE: proto/generate_protobuf.py ================================================ #!/usr/bin/env python3 # Copyright 2021 Scott Bezek and the splitflap contributors # # 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. from pathlib import Path import os import shutil import subprocess import sys def run(): SCRIPT_PATH = Path(__file__).absolute().parent REPO_ROOT = SCRIPT_PATH.parent proto_path = REPO_ROOT / 'proto' nanopb_path = REPO_ROOT / 'thirdparty' / 'nanopb' # Make sure nanopb submodule is available if not os.path.isdir(nanopb_path): print(f'Nanopb checkout not found! Make sure you have inited/updated the submodule located at {nanopb_path}', file=sys.stderr) exit(1) nanopb_generator_path = nanopb_path / 'generator' / 'nanopb_generator.py' c_generated_output_path = REPO_ROOT / 'arduino' / 'splitflap' / 'esp32' / 'proto_gen' proto_files = [f for f in os.listdir(proto_path) if f.endswith('.proto')] assert len(proto_files) > 0, 'No proto files found!' # Generate C files via nanopb subprocess.check_call(['python3', nanopb_generator_path, '-D', c_generated_output_path] + proto_files, cwd=proto_path) # Use nanopb's packaged protoc to generate python bindings protoc_path = nanopb_path / 'generator' / 'protoc' python_generated_output_path = REPO_ROOT / 'software' / 'chainlink' / 'proto_gen' python_generated_output_path.mkdir(parents=True, exist_ok=True) subprocess.check_call([ protoc_path, '--python_out', python_generated_output_path, ] + proto_files, cwd=proto_path) # Copy nanopb's compiled options proto shutil.copy2(nanopb_path / 'generator' / 'proto' / 'nanopb_pb2.py', python_generated_output_path) if __name__ == '__main__': run() ================================================ FILE: proto/splitflap.proto ================================================ syntax = "proto3"; import "nanopb.proto"; package PB; message SplitflapState { message ModuleState { enum State { // Keep in sync with splitflap_module_data.h! NORMAL = 0; LOOK_FOR_HOME = 1; SENSOR_ERROR = 2; PANIC = 3; STATE_DISABLED = 4; } State state = 1; uint32 flap_index = 2 [(nanopb).int_size = IS_8]; bool moving = 3; bool home_state = 4; uint32 count_unexpected_home = 5 [(nanopb).int_size = IS_8]; uint32 count_missed_home = 6 [(nanopb).int_size = IS_8]; } repeated ModuleState modules = 1 [(nanopb).max_count = 255]; bool loopbacks_ok = 2; } message Log { string msg = 1 [(nanopb).max_length = 255]; } message Ack { uint32 nonce = 1; } /** Chainlink Base state -- only reported by Chainlink Base firmware, NOT standard Chainlink firmware */ message SupervisorState { enum State { UNKNOWN = 0; STARTING_VERIFY_PSU_OFF = 1; STARTING_VERIFY_VOLTAGES = 2; STARTING_ENABLE_CHANNELS = 3; NORMAL = 4; FAULT = 5; } message PowerChannelState { float voltage_volts = 1; float current_amps = 2; bool on = 3; } message FaultInfo { enum FaultType { UNKNOWN = 0; NONE = 1; INRUSH_CURRENT_NOT_SETTLED = 2; SPLITFLAP_SHUTDOWN = 3; OUT_OF_RANGE = 4; OVER_CURRENT = 5; UNEXPECTED_POWER = 6; } FaultType type = 1; string msg = 2 [(nanopb).max_length = 255]; uint32 ts_millis = 3; } uint32 uptime_millis = 1; State state = 2; repeated PowerChannelState power_channels = 3 [(nanopb).max_count = 5]; FaultInfo fault_info = 4; } /** Chainlink general state, reported infrequently -- only reported by standard Chainlink firmware, NOT Chainlink Base firmware */ message GeneralState { uint32 serial_protocol_version = 1 [(nanopb).int_size = IS_16]; uint32 uptime_millis = 2; message BuildInfo { string git_hash = 1 [(nanopb).max_length = 90]; string build_date = 2 [(nanopb).max_length = 12]; string build_os = 3 [(nanopb).max_length = 12]; } BuildInfo build_info = 3; bytes flap_character_set = 4 [(nanopb).max_size = 80]; // TODO: Flap layout? (share with display code?) // TODO: Wifi status? } message FromSplitflap { oneof payload { SplitflapState splitflap_state = 1; Log log = 2; Ack ack = 3; SupervisorState supervisor_state = 4; GeneralState general_state = 5; } } message SplitflapCommand { message ModuleCommand { enum Action { NO_OP = 0; GO_TO_FLAP = 1; RESET_AND_HOME = 2; INCREASE_OFFSET_TENTH = 90; INCREASE_OFFSET_HALF = 91; SET_OFFSET = 92; } Action action = 1; uint32 param = 2 [(nanopb).int_size = IS_8]; } repeated ModuleCommand modules = 2 [(nanopb).max_count = 255]; bool save_all_offsets = 3; } message SplitflapConfig { message ModuleConfig { uint32 target_flap_index = 1 [(nanopb).int_size = IS_8]; /** * Value that triggers a movement upon change. If unused, only changes to target_flap_index * will trigger a movement. This can be used to trigger a full revolution back to the *same* * flap index. * * NOTE: Must be < 256 */ uint32 movement_nonce = 2 [(nanopb).int_size = IS_8]; /** * Value that triggers a reset (clear error counters, re-home) upon change. If unused, * module will only re-home upon recoverable errors, and error counters will continue * to increase until overflow. * * NOTE: Must be < 256 */ uint32 reset_nonce = 3 [(nanopb).int_size = IS_8]; } repeated ModuleConfig modules = 1 [(nanopb).max_count = 255]; } message RequestState {} message ToSplitflap { uint32 nonce = 1; oneof payload { SplitflapCommand splitflap_command = 2; SplitflapConfig splitflap_config = 3; RequestState request_state = 4; } } /** Non-volatile on-device storage schema */ message PersistentConfiguration { uint32 version = 1; uint32 num_flaps = 2; repeated uint32 module_offset_steps = 3 [(nanopb).max_count = 255, (nanopb).int_size = IS_16]; } ================================================ FILE: scripts/annotate_image.sh ================================================ #!/bin/bash set -e FONT="3d/fonts/roboto/RobotoMono-Bold.ttf" # Make sure font exists ls "$FONT" set -v LABEL="`date --rfc-3339=seconds`\n`git rev-parse --short HEAD`" convert -background black -fill white -pointsize 12 -font "$FONT" -size 300x36 label:"$LABEL" -bordercolor black -border 3 $1 +swap -append $1 ================================================ FILE: scripts/video_thumb/generate_thumbnail.sh ================================================ #!/bin/bash DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )" VIDEO_ID="vq4o_88kN8g" curl https://img.youtube.com/vi/$VIDEO_ID/maxresdefault.jpg | convert - -resize 400x "$DIR/play_button.png" -gravity center -composite -format jpg -quality 90 "$DIR/../../renders/prototypeVideoThumbnail.jpg" ================================================ FILE: software/chainlink/README.md ================================================ # Chainlink software ## Python Code Run the demo by installing the requirement dependencies outlined in the [requirements.txt](./requirements.txt). ### Running the demo The demo will just send multiple different words to the splitflap board. You may start the demo by executing: ```bash python demo.py ``` You may get an output looking like this: ```bash Available ports: [ 0] /dev/ttyACM0 - USB Single Serial [ 1] /dev/ttyAMA0 - ttyAMA0 ``` Select which port the demo script should execute. Now the demo should send different words to the splitflap board with short breaks in between them. ================================================ FILE: software/chainlink/demo.py ================================================ import random import time from splitflap_proto import ( ask_for_serial_port, splitflap_context, ) words = [ 'ALPACA', 'BABOON', 'BADGER', 'BELUGA', 'BOBCAT', 'FERRET', 'GOPHER', 'IMPALA', 'JACKAL', 'JAGUAR', 'KITTEN', 'MARMOT', 'MONKEY', 'OCELOT', 'RABBIT', 'RACOON', 'TURTLE', 'WALRUS', 'WEASEL', 'WOMBAT', ] def _run(): p = ask_for_serial_port() with splitflap_context(p) as s: modules = s.get_num_modules() alphabet = s.get_alphabet() # Show a random word every 10 seconds while True: word = random.choice(words) s.set_text(word) time.sleep(10) if __name__ == '__main__': _run() ================================================ FILE: software/chainlink/js/.gitignore ================================================ node_modules/ lib/ dist ================================================ FILE: software/chainlink/js/.npmrc ================================================ engine-strict=true ================================================ FILE: software/chainlink/js/README.md ================================================ # Typescript Splitflap protobuf interface library and examples ### Requirements (nvm is recommended) - node >= 18.11.0 - npm >= 8.19.2 ### Setup ``` npm ci npm run build ``` ================================================ FILE: software/chainlink/js/package.json ================================================ { "name": "root", "version": "0.1.0", "description": "", "main": "index.js", "engines": { "npm": ">=8.19.2", "node": ">=18.11.0" }, "scripts": { "build": "npm run build --workspaces --if-present", "example-node-cli": "npm -w example-node-cli run main", "example-webserial-basic": "npm -w example-webserial-basic run start" }, "author": "", "license": "Apache-2.0", "//": "NOTE: Workspaces are listed in topological dependency order; intentionally not alphabetical!", "workspaces": [ "packages/splitflapjs-proto", "packages/splitflapjs-core", "packages/splitflapjs-node", "packages/splitflapjs-webserial", "packages/example-node-cli", "packages/example-webserial-basic" ], "devDependencies": { "eslint-config-prettier": "^8.5.0" } } ================================================ FILE: software/chainlink/js/packages/example-node-cli/.eslintrc ================================================ // .eslintrc { "parser": "@typescript-eslint/parser", "parserOptions": { "ecmaVersion": 12, "sourceType": "module" }, "plugins": ["@typescript-eslint"], "extends": ["eslint:recommended", "plugin:@typescript-eslint/recommended", "prettier"], "rules": { "@typescript-eslint/no-unused-vars": "error", "@typescript-eslint/consistent-type-definitions": ["error", "type"] }, "env": { "node": true } } ================================================ FILE: software/chainlink/js/packages/example-node-cli/.prettierrc ================================================ { "printWidth": 120, "tabWidth": 4, "useTabs": false, "semi": false, "singleQuote": true, "trailingComma": "all", "bracketSpacing": false, "arrowParens": "always" } ================================================ FILE: software/chainlink/js/packages/example-node-cli/package.json ================================================ { "name": "example-node-cli", "version": "1.0.0", "description": "Splitflap Node CLI Example", "main": "dist/index.js", "types": "dist/index.d.ts", "scripts": { "build": "tsc", "format": "prettier --write \"**/*.+(js|ts|json)\"", "lint": "eslint --ext .js,.ts .", "main": "ts-node src/index.ts" }, "author": "", "license": "Apache-2.0", "dependencies": { "serialport": "^9.2.4", "splitflapjs-node": "^1.0.0" }, "devDependencies": { "@types/serialport": "^8.0.3", "@typescript-eslint/eslint-plugin": "^5.40.1", "@typescript-eslint/parser": "^5.40.1", "eslint": "^8.25.0", "prettier": "^2.4.1", "ts-node": "^10.2.1", "typescript": "^4.8.4" } } ================================================ FILE: software/chainlink/js/packages/example-node-cli/src/index.ts ================================================ import SerialPort = require('serialport') import readline from 'readline' import {SplitflapNode} from 'splitflapjs-node' import {PB} from 'splitflapjs-proto' import { applySetFlaps } from 'splitflapjs-core/dist/util' // Edit this to restrict to a single device based on serial number, e.g. add something like '02280A9E' to this array. // If this is left blank, a serial device matching the vendor/product codes from SplitflapNode.USB_DEVICE_FILTERS // will be selected. const USB_SERIAL_NUMBERS: Array = [] // Make sure this matches config.h in the splitflap firmware const FLAPS = [ ' ', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '.', ',', "'", ] const main = async (): Promise => { const ports = await SerialPort.list() const matchingPorts = ports.filter((portInfo) => { return USB_SERIAL_NUMBERS.length > 0 ? portInfo.serialNumber !== undefined && USB_SERIAL_NUMBERS.includes(portInfo.serialNumber) : SplitflapNode.USB_DEVICE_FILTERS.some( (f) => f.usbVendorId.toString(16) === portInfo.vendorId && f.usbProductId.toString(16) === portInfo.productId, ) }) if (matchingPorts.length < 1) { console.error(`No splitflap usb serial port found! ${JSON.stringify(ports, undefined, 4)}`) return } else if (matchingPorts.length > 1) { console.error( `Multiple possible splitflap usb serial ports found: ${JSON.stringify(matchingPorts, undefined, 4)}`, ) // TODO: offer option to select one via input rather than failing hard return } const portInfo = matchingPorts[0] let splitflapConfig = PB.SplitflapConfig.create() let onSplitflapStateReceived: () => void const splitflapStateReceived = new Promise((resolve) => onSplitflapStateReceived = () => resolve(null)); const splitflap = new SplitflapNode( portInfo.path, (message: PB.FromSplitflap) => { if (message.payload === 'log' && message.log) { console.log(message.log.msg) } else if ( message.payload === 'splitflapState' && message.splitflapState && message.splitflapState.modules ) { console.log( `State:\n${message.splitflapState.modules.map((mod) => { return mod.flapIndex })}`, ) if (splitflapConfig.modules.length === 0) { // First time we get a state report, initialize our config with the appropriate number of modules for (let i = 0; i < message.splitflapState.modules.length; i++) { splitflapConfig.modules.push(PB.SplitflapConfig.ModuleConfig.create({ targetFlapIndex: 0 })) } onSplitflapStateReceived() } else { if (splitflapConfig.modules.length !== message.splitflapState.modules.length) { console.warn('Number of modules in state is different than number of modules in config', { nModulesState: message.splitflapState.modules.length, nModulesConfig: splitflapConfig.modules.length, }) } } } else if (message.payload === 'supervisorState' && message.supervisorState) { console.log( `Supervisor state:\n${JSON.stringify( PB.SupervisorState.toObject(message.supervisorState as PB.SupervisorState, {defaults: true}), undefined, 4, )}`, ) } }, ) const rl = readline.createInterface({ input: process.stdin, output: process.stdout, }) const reset = await new Promise((resolve) => { rl.question('Reset? y/n', resolve) }) if (reset === 'y') { await splitflap.hardReset() } // TODO: make this wait for idle instead of just any state console.log('Waiting to hear from Splitflap...') await splitflapStateReceived type anim = [number, string] const animation: anim[] = [ [6000, 'hello'], [15000, 'world'], ] let cur = 0 const runAnimation = () => { splitflapConfig = applySetFlaps(splitflapConfig, stringToFlapIndexArray(animation[cur][1])) splitflap.sendConfig(splitflapConfig) setTimeout(runAnimation, animation[cur][0]) cur = (cur + 1) % animation.length } runAnimation() } const charToFlapIndex = (c: string): number | null => { const i = FLAPS.indexOf(c) if (i >= 0) { return i } else { return null } } const stringToFlapIndexArray = (str: string): Array => { return str.split('').map(charToFlapIndex) } main() ================================================ FILE: software/chainlink/js/packages/example-node-cli/tsconfig.json ================================================ { "compilerOptions": { /* Visit https://aka.ms/tsconfig.json to read more about this file */ /* Projects */ // "incremental": true, /* Enable incremental compilation */ // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ // "tsBuildInfoFile": "./", /* Specify the folder for .tsbuildinfo incremental compilation files. */ // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects */ // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ /* Language and Environment */ "target": "es6" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */, // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ // "jsx": "preserve", /* Specify what JSX code is generated. */ // "experimentalDecorators": true, /* Enable experimental support for TC39 stage 2 draft decorators. */ // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h' */ // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using `jsx: react-jsx*`.` */ // "reactNamespace": "", /* Specify the object invoked for `createElement`. This only applies when targeting `react` JSX emit. */ // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ /* Modules */ "module": "commonjs" /* Specify what module code is generated. */, // "rootDir": "./", /* Specify the root folder within your source files. */ // "moduleResolution": "node", /* Specify how TypeScript looks up a file from a given module specifier. */ // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ // "paths" :{ // "*": ["./src/typings/*", "./*"] // }, // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ // "typeRoots": ["src/typings"], /* Specify multiple folders that act like `./node_modules/@types`. */ // "types": [], /* Specify type package names to be included without being referenced in a source file. */ // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ // "resolveJsonModule": true, /* Enable importing .json files */ // "noResolve": true, /* Disallow `import`s, `require`s or ``s from expanding the number of files TypeScript should add to a project. */ /* JavaScript Support */ "allowJs": true /* Allow JavaScript files to be a part of your program. Use the `checkJS` option to get errors from these files. */, // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from `node_modules`. Only applicable with `allowJs`. */ /* Emit */ "declaration": true /* Generate .d.ts files from TypeScript and JavaScript files in your project. */, // "declarationMap": true, /* Create sourcemaps for d.ts files. */ // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If `declaration` is true, also designates a file that bundles all .d.ts output. */ "outDir": "./dist" /* Specify an output folder for all emitted files. */, // "removeComments": true, /* Disable emitting comments. */ // "noEmit": true, /* Disable emitting files from a compilation. */ // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types */ // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ // "newLine": "crlf", /* Set the newline character for emitting files. */ // "stripInternal": true, /* Disable emitting declarations that have `@internal` in their JSDoc comments. */ // "noEmitHelpers": true, /* Disable generating custom helper functions like `__extends` in compiled output. */ "noEmitOnError": true /* Disable emitting files if any type checking errors are reported. */, // "preserveConstEnums": true, /* Disable erasing `const enum` declarations in generated code. */ // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ /* Interop Constraints */ // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ "esModuleInterop": true /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables `allowSyntheticDefaultImports` for type compatibility. */, // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ "forceConsistentCasingInFileNames": true /* Ensure that casing is correct in imports. */, /* Type Checking */ "strict": true /* Enable all strict type-checking options. */, "noImplicitAny": true /* Enable error reporting for expressions and declarations with an implied `any` type.. */, "strictNullChecks": true /* When type checking, take into account `null` and `undefined`. */, // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ // "strictBindCallApply": true, /* Check that the arguments for `bind`, `call`, and `apply` methods match the original function. */ // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ // "noImplicitThis": true, /* Enable error reporting when `this` is given the type `any`. */ // "useUnknownInCatchVariables": true, /* Type catch clause variables as 'unknown' instead of 'any'. */ // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ // "noUnusedLocals": true, /* Enable error reporting when a local variables aren't read. */ // "noUnussedParameters": true, /* Raise an error when a function parameter isn't read */ // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ "noImplicitReturns": true /* Enable error reporting for codepaths that do not explicitly return in a function. */, "noFallthroughCasesInSwitch": true /* Enable error reporting for fallthrough cases in switch statements. */, // "noUncheckedIndexedAccess": true, /* Include 'undefined' in index signature results */ "noImplicitOverride": true /* Ensure overriding members in derived classes are marked with an override modifier. */, // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type */ // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ /* Completeness */ // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ "skipLibCheck": true /* Skip type checking all .d.ts files. */ }, "include": ["src"], "exclude": ["node_modules"] } ================================================ FILE: software/chainlink/js/packages/example-webserial-basic/.eslintrc ================================================ // .eslintrc { "parser": "@typescript-eslint/parser", "parserOptions": { "ecmaVersion": 12, "sourceType": "module" }, "plugins": ["@typescript-eslint"], "extends": ["eslint:recommended", "plugin:@typescript-eslint/recommended", "prettier"], "rules": { "@typescript-eslint/no-unused-vars": "error", "@typescript-eslint/consistent-type-definitions": ["error", "type"] }, "env": { "node": true } } ================================================ FILE: software/chainlink/js/packages/example-webserial-basic/.gitignore ================================================ # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. # dependencies /node_modules /.pnp .pnp.js # testing /coverage # production /build # misc .DS_Store .env.local .env.development.local .env.test.local .env.production.local npm-debug.log* yarn-debug.log* yarn-error.log* ================================================ FILE: software/chainlink/js/packages/example-webserial-basic/.prettierrc ================================================ { "printWidth": 120, "tabWidth": 4, "useTabs": false, "semi": false, "singleQuote": true, "trailingComma": "all", "bracketSpacing": false, "arrowParens": "always" } ================================================ FILE: software/chainlink/js/packages/example-webserial-basic/README.md ================================================ # Getting Started with Create React App This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app). ## Available Scripts In the project directory, you can run: ### `npm start` Runs the app in the development mode.\ Open [http://localhost:3000](http://localhost:3000) to view it in the browser. The page will reload if you make edits.\ You will also see any lint errors in the console. ### `npm test` Launches the test runner in the interactive watch mode.\ See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information. ### `npm run build` Builds the app for production to the `build` folder.\ It correctly bundles React in production mode and optimizes the build for the best performance. The build is minified and the filenames include the hashes.\ Your app is ready to be deployed! See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information. ### `npm run eject` **Note: this is a one-way operation. Once you `eject`, you can’t go back!** If you aren’t satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project. Instead, it will copy all the configuration files and the transitive dependencies (webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point you’re on your own. You don’t have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn’t feel obligated to use this feature. However we understand that this tool wouldn’t be useful if you couldn’t customize it when you are ready for it. ## Learn More You can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started). To learn React, check out the [React documentation](https://reactjs.org/). ================================================ FILE: software/chainlink/js/packages/example-webserial-basic/package.json ================================================ { "name": "example-webserial-basic", "version": "0.1.0", "private": true, "dependencies": { "@emotion/react": "^11.10.5", "@emotion/styled": "^11.10.5", "@fontsource/roboto": "^4.5.8", "@fontsource/roboto-mono": "^5.0.5", "@mui/material": "^5.10.16", "@testing-library/jest-dom": "^5.16.5", "@testing-library/react": "^13.4.0", "@testing-library/user-event": "^13.5.0", "@types/jest": "^27.5.2", "@types/node": "^16.18.4", "@types/react": "^18.0.25", "@types/react-dom": "^18.0.9", "lodash": "^4.17.21", "react": "^18.2.0", "react-dom": "^18.2.0", "react-scripts": "^5.0.1", "splitflapjs-proto": "^1.0.0", "splitflapjs-webserial": "^1.0.0", "typescript": "^4.9.3", "web-vitals": "^2.1.4" }, "scripts": { "start": "PORT=3000 react-scripts start", "build": "react-scripts build", "test": "react-scripts test", "eject": "react-scripts eject" }, "eslintConfig": { "extends": [ "react-app", "react-app/jest" ] }, "browserslist": { "production": [ ">0.2%", "not dead", "not op_mini all" ], "development": [ "last 1 chrome version", "last 1 firefox version", "last 1 safari version" ] }, "proxy": "http://localhost:3001", "devDependencies": { "@types/lodash": "^4.14.191", "@types/w3c-web-serial": "^1.0.3", "eslint-config-prettier": "^8.8.0" } } ================================================ FILE: software/chainlink/js/packages/example-webserial-basic/public/3d_viewer/css/style.css ================================================ h1, h2, h3, h4, h5, h6 { margin: 0; padding: 0; border: 0; outline: 0; font-weight: inherit; font-style: inherit; font-size: 100%; font-family: inherit; vertical-align: baseline; } body { margin: 0; padding: 0; background-color: #ededed; font-family: 'Roboto', sans-serif; } .header { background-color: #4E4C67; min-width: 100%; color: white; padding: 10px 0; z-index: 1000; } .header.fixed { position: fixed; padding-bottom: 0; } .header.placeholder { } .content { width: 800px; margin: 0 auto; padding: 0 50px; } .title { font-size: 32pt; line-height: 40pt; font-weight: 100; padding-bottom: 6px; } .subtitle { font-size: 12pt; color: rgba(255, 255, 255, 0.6); font-weight: 300; } #viewer { height: 460px; position: relative; } #viewer canvas { width: 100%; height: 100%; } #banner { position: absolute; bottom: 20%; background-color: rgba(0, 0, 0, 0.5); font-size: 12pt; color: white; font-weight: 300; padding: 0.8em; display: none; pointer-events: none; } #main_body { padding-top: 1em; color: rgba(0, 0, 0, 0.8); } #footer { color: rgba(0, 0, 0, 0.5); font-weight: 300; } a:link { color: #54527A; text-decoration: none; } a:visited, a:active { color: #985F6F; text-decoration: none; } a:hover { text-decoration: underline; } .floater { width: 45%; max-width: max-content; padding: 10px; } .right_float { float: right; } .left_float { float: left; } h1 { font-size: 16pt; font-weight: 200; clear: both; margin: 0.8em 0; } h3 { font-weight: bold; clear: both; margin: 0.8em 0; } .title_container { display: flex; flex-direction: row; justify-content: space-between; } .title_left { align-self: center; } .title_right { align-self: center; } .github_link { width: 32px; padding: 16px; } .video { display: block; margin: 0 auto; } .embed_container #viewer { width: 100%; height: 100%; } .embed_caption { position:fixed; width: 100%; bottom: 0; padding: 1em; font-weight: 300; background-color: #4E4C67; color: white; } .embed_caption a:link { color: #d4d3de; text-decoration: none; } .embed_caption a:visited, .embed_caption a:active { color: #d4d3de; text-decoration: none; } .embed_caption a:hover { text-decoration: underline; } ================================================ FILE: software/chainlink/js/packages/example-webserial-basic/public/3d_viewer/index.html ================================================ splitflap
splitflap
DIY split-flap display by Scott Bezek

Welcome

This is a work in progress split-flap display. Each module can flip between 40 unique characters: letters, numbers, and a few symbols. Multiple modules fit perfectly alongside each other to build bigger displays.

The primary design goal was to make something that's possible to fabricate at home in small or single quantities and can be customized and built by an intermediate hobbyist at a reasonable price. This meant using widely available materials and avoiding any tooling with a high upfront cost.

Following that philosophy, the design can use store-bought vinyl stickers for the letters, is driven by an ubiquitous and cheap 28BYJ-48 stepper motor, and uses common PVC ID badge cards cut to shape for the flaps (though custom die-cut flaps are also available). Even the enclosure and spool, which are made from laser-cut MDF or acrylic, can be easily ordered online.

This design is currently stable. The source code in the git repo provides 3d designs, electronics schematics and PCBs, and software and firmware that has been tested and used to build displays with up to 108 modules. If you'd like to build your own, see the Ordering Instructions and v0 Assembly Guide. Of course, as this is an open source side-project, you may still come across minor issues or missing documentation; pull requests are appreciated.

Open source, up to date

All of the designs are open source. The 3d model is built using OpenSCAD, the driver electronics board is designed in KiCad, and the driver firmware is written using Arduino + PlatformIO.

Most of the supporting materials, like the schematic, bill of materials, PCB gerbers, and even the interactive 3D rendering seen above are generated automatically as the design changes, using Github Actions. This way you can always see the latest designs, even without having to check out the git repo or install any software yourself.

I'd love to hear your thoughts and questions about this project, and happy to incorporate any feedback you might have into these designs! Please feel free (and encouraged) to open GitHub issues, email me directly, reach out on Twitter, and get involved in the open source development and let's keep chatting and building together!

License

This project is licensed under Apache v2 (see LICENSE.txt for full details).

Copyright 2015-2023 Scott Bezek and the splitflap contributors

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.
                


================================================ FILE: software/chainlink/js/packages/example-webserial-basic/public/3d_viewer/js/OrbitControls.js ================================================ /** * @author qiao / https://github.com/qiao * @author mrdoob / http://mrdoob.com * @author alteredq / http://alteredqualia.com/ * @author WestLangley / http://github.com/WestLangley * @author erich666 / http://erichaines.com */ // This set of controls performs orbiting, dollying (zooming), and panning. // Unlike TrackballControls, it maintains the "up" direction object.up (+Y by default). // // Orbit - left mouse / touch: one finger move // Zoom - middle mouse, or mousewheel / touch: two finger spread or squish // Pan - right mouse, or arrow keys / touch: three finter swipe THREE.OrbitControls = function ( object, domElement ) { this.object = object; this.domElement = ( domElement !== undefined ) ? domElement : document; // Set to false to disable this control this.enabled = true; // "target" sets the location of focus, where the object orbits around this.target = new THREE.Vector3(); // How far you can dolly in and out ( PerspectiveCamera only ) this.minDistance = 0; this.maxDistance = Infinity; // How far you can zoom in and out ( OrthographicCamera only ) this.minZoom = 0; this.maxZoom = Infinity; // How far you can orbit vertically, upper and lower limits. // Range is 0 to Math.PI radians. this.minPolarAngle = 0; // radians this.maxPolarAngle = Math.PI; // radians // How far you can orbit horizontally, upper and lower limits. // If set, must be a sub-interval of the interval [ - Math.PI, Math.PI ]. this.minAzimuthAngle = - Infinity; // radians this.maxAzimuthAngle = Infinity; // radians // Set to true to enable damping (inertia) // If damping is enabled, you must call controls.update() in your animation loop this.enableDamping = false; this.dampingFactor = 0.25; // This option actually enables dollying in and out; left as "zoom" for backwards compatibility. // Set to false to disable zooming this.enableZoom = true; this.zoomSpeed = 1.0; // Set to false to disable rotating this.enableRotate = true; this.rotateSpeed = 1.0; // Set to false to disable panning this.enablePan = true; this.keyPanSpeed = 7.0; // pixels moved per arrow key push // Set to true to automatically rotate around the target // If auto-rotate is enabled, you must call controls.update() in your animation loop this.autoRotate = false; this.autoRotateSpeed = 2.0; // 30 seconds per round when fps is 60 // Set to false to disable use of the keys this.enableKeys = true; // The four arrow keys this.keys = { LEFT: 37, UP: 38, RIGHT: 39, BOTTOM: 40 }; // Mouse buttons this.mouseButtons = { ORBIT: THREE.MOUSE.LEFT, ZOOM: THREE.MOUSE.MIDDLE, PAN: THREE.MOUSE.RIGHT }; // NB(sbezek): custom camera location validation this.validUpdate = function ( position, quaternion, target ) { return true; }; // for reset this.target0 = this.target.clone(); this.position0 = this.object.position.clone(); this.zoom0 = this.object.zoom; // // public methods // this.getPolarAngle = function () { return spherical.phi; }; this.getAzimuthalAngle = function () { return spherical.theta; }; this.reset = function () { scope.target.copy( scope.target0 ); scope.object.position.copy( scope.position0 ); scope.object.zoom = scope.zoom0; scope.object.updateProjectionMatrix(); scope.dispatchEvent( changeEvent ); scope.update(); state = STATE.NONE; }; // this method is exposed, but perhaps it would be better if we can make it private... this.update = function() { var offset = new THREE.Vector3(); // so camera.up is the orbit axis var quat = new THREE.Quaternion().setFromUnitVectors( object.up, new THREE.Vector3( 0, 1, 0 ) ); var quatInverse = quat.clone().inverse(); var lastPosition = new THREE.Vector3(); var lastQuaternion = new THREE.Quaternion(); // NB(sbezek): track last target so we can revert if new position is invalid var lastTarget = new THREE.Vector3(); return function () { var position = scope.object.position; offset.copy( position ).sub( scope.target ); // rotate offset to "y-axis-is-up" space offset.applyQuaternion( quat ); // angle from z-axis around y-axis spherical.setFromVector3( offset ); if ( scope.autoRotate && state === STATE.NONE ) { rotateLeft( getAutoRotationAngle() ); } spherical.theta += sphericalDelta.theta; spherical.phi += sphericalDelta.phi; // restrict theta to be between desired limits spherical.theta = Math.max( scope.minAzimuthAngle, Math.min( scope.maxAzimuthAngle, spherical.theta ) ); // restrict phi to be between desired limits spherical.phi = Math.max( scope.minPolarAngle, Math.min( scope.maxPolarAngle, spherical.phi ) ); spherical.makeSafe(); spherical.radius *= scale; // restrict radius to be between desired limits spherical.radius = Math.max( scope.minDistance, Math.min( scope.maxDistance, spherical.radius ) ); // move target to panned location scope.target.add( panOffset ); offset.setFromSpherical( spherical ); // rotate offset back to "camera-up-vector-is-up" space offset.applyQuaternion( quatInverse ); position.copy( scope.target ).add( offset ); scope.object.lookAt( scope.target ); if ( scope.enableDamping === true ) { sphericalDelta.theta *= ( 1 - scope.dampingFactor ); sphericalDelta.phi *= ( 1 - scope.dampingFactor ); } else { sphericalDelta.set( 0, 0, 0 ); } scale = 1; panOffset.set( 0, 0, 0 ); // NB(sbezek): custom camera location validation if ( !scope.validUpdate( scope.object.position, scope.object.quaternion, scope.target ) ) { scope.object.position.copy( lastPosition ); scope.object.quaternion.copy( lastQuaternion ); scope.target.copy( lastTarget ); scope.object.lookAt( lastTarget ); } // update condition is: // min(camera displacement, camera rotation in radians)^2 > EPS // using small-angle approximation cos(x/2) = 1 - x^2 / 8 if ( zoomChanged || lastPosition.distanceToSquared( scope.object.position ) > EPS || 8 * ( 1 - lastQuaternion.dot( scope.object.quaternion ) ) > EPS ) { scope.dispatchEvent( changeEvent ); lastPosition.copy( scope.object.position ); lastQuaternion.copy( scope.object.quaternion ); // NB(sbezek): track last target so we can revert if new position is invalid lastTarget.copy( scope.target ); zoomChanged = false; return true; } return false; }; }(); this.dispose = function() { scope.domElement.removeEventListener( 'contextmenu', onContextMenu, false ); scope.domElement.removeEventListener( 'mousedown', onMouseDown, false ); scope.domElement.removeEventListener( 'mousewheel', onMouseWheel, false ); scope.domElement.removeEventListener( 'MozMousePixelScroll', onMouseWheel, false ); // firefox scope.domElement.removeEventListener( 'touchstart', onTouchStart, false ); scope.domElement.removeEventListener( 'touchend', onTouchEnd, false ); scope.domElement.removeEventListener( 'touchmove', onTouchMove, false ); document.removeEventListener( 'mousemove', onMouseMove, false ); document.removeEventListener( 'mouseup', onMouseUp, false ); //document.removeEventListener( 'mouseout', onMouseUp, false ); window.removeEventListener( 'keydown', onKeyDown, false ); //scope.dispatchEvent( { type: 'dispose' } ); // should this be added here? }; // // internals // var scope = this; var changeEvent = { type: 'change' }; var startEvent = { type: 'start' }; var endEvent = { type: 'end' }; var STATE = { NONE : - 1, ROTATE : 0, DOLLY : 1, PAN : 2, TOUCH_ROTATE : 3, TOUCH_DOLLY : 4, TOUCH_PAN : 5 }; var state = STATE.NONE; var EPS = 0.000001; // current position in spherical coordinates var spherical = new THREE.Spherical(); var sphericalDelta = new THREE.Spherical(); var scale = 1; var panOffset = new THREE.Vector3(); var zoomChanged = false; var rotateStart = new THREE.Vector2(); var rotateEnd = new THREE.Vector2(); var rotateDelta = new THREE.Vector2(); var panStart = new THREE.Vector2(); var panEnd = new THREE.Vector2(); var panDelta = new THREE.Vector2(); var dollyStart = new THREE.Vector2(); var dollyEnd = new THREE.Vector2(); var dollyDelta = new THREE.Vector2(); function getAutoRotationAngle() { return 2 * Math.PI / 60 / 60 * scope.autoRotateSpeed; } function getZoomScale() { return Math.pow( 0.95, scope.zoomSpeed ); } function rotateLeft( angle ) { sphericalDelta.theta -= angle; } function rotateUp( angle ) { sphericalDelta.phi -= angle; } var panLeft = function() { var v = new THREE.Vector3(); return function panLeft( distance, objectMatrix ) { v.setFromMatrixColumn( objectMatrix, 0 ); // get X column of objectMatrix v.multiplyScalar( - distance ); panOffset.add( v ); }; }(); var panUp = function() { var v = new THREE.Vector3(); return function panUp( distance, objectMatrix ) { v.setFromMatrixColumn( objectMatrix, 1 ); // get Y column of objectMatrix v.multiplyScalar( distance ); panOffset.add( v ); }; }(); // deltaX and deltaY are in pixels; right and down are positive var pan = function() { var offset = new THREE.Vector3(); return function( deltaX, deltaY ) { var element = scope.domElement === document ? scope.domElement.body : scope.domElement; if ( scope.object instanceof THREE.PerspectiveCamera ) { // perspective var position = scope.object.position; offset.copy( position ).sub( scope.target ); var targetDistance = offset.length(); // half of the fov is center to top of screen targetDistance *= Math.tan( ( scope.object.fov / 2 ) * Math.PI / 180.0 ); // we actually don't use screenWidth, since perspective camera is fixed to screen height panLeft( 2 * deltaX * targetDistance / element.clientHeight, scope.object.matrix ); panUp( 2 * deltaY * targetDistance / element.clientHeight, scope.object.matrix ); } else if ( scope.object instanceof THREE.OrthographicCamera ) { // orthographic panLeft( deltaX * ( scope.object.right - scope.object.left ) / scope.object.zoom / element.clientWidth, scope.object.matrix ); panUp( deltaY * ( scope.object.top - scope.object.bottom ) / scope.object.zoom / element.clientHeight, scope.object.matrix ); } else { // camera neither orthographic nor perspective console.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - pan disabled.' ); scope.enablePan = false; } }; }(); function dollyIn( dollyScale ) { if ( scope.object instanceof THREE.PerspectiveCamera ) { scale /= dollyScale; } else if ( scope.object instanceof THREE.OrthographicCamera ) { scope.object.zoom = Math.max( scope.minZoom, Math.min( scope.maxZoom, scope.object.zoom * dollyScale ) ); scope.object.updateProjectionMatrix(); zoomChanged = true; } else { console.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.' ); scope.enableZoom = false; } } function dollyOut( dollyScale ) { if ( scope.object instanceof THREE.PerspectiveCamera ) { scale *= dollyScale; } else if ( scope.object instanceof THREE.OrthographicCamera ) { scope.object.zoom = Math.max( scope.minZoom, Math.min( scope.maxZoom, scope.object.zoom / dollyScale ) ); scope.object.updateProjectionMatrix(); zoomChanged = true; } else { console.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.' ); scope.enableZoom = false; } } // // event callbacks - update the object state // function handleMouseDownRotate( event ) { //console.log( 'handleMouseDownRotate' ); rotateStart.set( event.clientX, event.clientY ); } function handleMouseDownDolly( event ) { //console.log( 'handleMouseDownDolly' ); dollyStart.set( event.clientX, event.clientY ); } function handleMouseDownPan( event ) { //console.log( 'handleMouseDownPan' ); panStart.set( event.clientX, event.clientY ); } function handleMouseMoveRotate( event ) { //console.log( 'handleMouseMoveRotate' ); rotateEnd.set( event.clientX, event.clientY ); rotateDelta.subVectors( rotateEnd, rotateStart ); var element = scope.domElement === document ? scope.domElement.body : scope.domElement; // rotating across whole screen goes 360 degrees around rotateLeft( 2 * Math.PI * rotateDelta.x / element.clientWidth * scope.rotateSpeed ); // rotating up and down along whole screen attempts to go 360, but limited to 180 rotateUp( 2 * Math.PI * rotateDelta.y / element.clientHeight * scope.rotateSpeed ); rotateStart.copy( rotateEnd ); scope.update(); } function handleMouseMoveDolly( event ) { //console.log( 'handleMouseMoveDolly' ); dollyEnd.set( event.clientX, event.clientY ); dollyDelta.subVectors( dollyEnd, dollyStart ); if ( dollyDelta.y > 0 ) { dollyIn( getZoomScale() ); } else if ( dollyDelta.y < 0 ) { dollyOut( getZoomScale() ); } dollyStart.copy( dollyEnd ); scope.update(); } function handleMouseMovePan( event ) { //console.log( 'handleMouseMovePan' ); panEnd.set( event.clientX, event.clientY ); panDelta.subVectors( panEnd, panStart ); pan( panDelta.x, panDelta.y ); panStart.copy( panEnd ); scope.update(); } function handleMouseUp( event ) { //console.log( 'handleMouseUp' ); } function handleMouseWheel( event ) { //console.log( 'handleMouseWheel' ); var delta = 0; if ( event.wheelDelta !== undefined ) { // WebKit / Opera / Explorer 9 delta = event.wheelDelta; } else if ( event.detail !== undefined ) { // Firefox delta = - event.detail; } if ( delta > 0 ) { dollyOut( getZoomScale() ); } else if ( delta < 0 ) { dollyIn( getZoomScale() ); } scope.update(); } function handleKeyDown( event ) { //console.log( 'handleKeyDown' ); switch ( event.keyCode ) { case scope.keys.UP: pan( 0, scope.keyPanSpeed ); scope.update(); break; case scope.keys.BOTTOM: pan( 0, - scope.keyPanSpeed ); scope.update(); break; case scope.keys.LEFT: pan( scope.keyPanSpeed, 0 ); scope.update(); break; case scope.keys.RIGHT: pan( - scope.keyPanSpeed, 0 ); scope.update(); break; } } function handleTouchStartRotate( event ) { //console.log( 'handleTouchStartRotate' ); rotateStart.set( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY ); } function handleTouchStartDolly( event ) { //console.log( 'handleTouchStartDolly' ); var dx = event.touches[ 0 ].pageX - event.touches[ 1 ].pageX; var dy = event.touches[ 0 ].pageY - event.touches[ 1 ].pageY; var distance = Math.sqrt( dx * dx + dy * dy ); dollyStart.set( 0, distance ); } function handleTouchStartPan( event ) { //console.log( 'handleTouchStartPan' ); panStart.set( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY ); } function handleTouchMoveRotate( event ) { //console.log( 'handleTouchMoveRotate' ); rotateEnd.set( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY ); rotateDelta.subVectors( rotateEnd, rotateStart ); var element = scope.domElement === document ? scope.domElement.body : scope.domElement; // rotating across whole screen goes 360 degrees around rotateLeft( 2 * Math.PI * rotateDelta.x / element.clientWidth * scope.rotateSpeed ); // rotating up and down along whole screen attempts to go 360, but limited to 180 rotateUp( 2 * Math.PI * rotateDelta.y / element.clientHeight * scope.rotateSpeed ); rotateStart.copy( rotateEnd ); scope.update(); } function handleTouchMoveDolly( event ) { //console.log( 'handleTouchMoveDolly' ); var dx = event.touches[ 0 ].pageX - event.touches[ 1 ].pageX; var dy = event.touches[ 0 ].pageY - event.touches[ 1 ].pageY; var distance = Math.sqrt( dx * dx + dy * dy ); dollyEnd.set( 0, distance ); dollyDelta.subVectors( dollyEnd, dollyStart ); if ( dollyDelta.y > 0 ) { dollyOut( getZoomScale() ); } else if ( dollyDelta.y < 0 ) { dollyIn( getZoomScale() ); } dollyStart.copy( dollyEnd ); scope.update(); } function handleTouchMovePan( event ) { //console.log( 'handleTouchMovePan' ); panEnd.set( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY ); panDelta.subVectors( panEnd, panStart ); pan( panDelta.x, panDelta.y ); panStart.copy( panEnd ); scope.update(); } function handleTouchEnd( event ) { //console.log( 'handleTouchEnd' ); } // // event handlers - FSM: listen for events and reset state // function onMouseDown( event ) { if ( scope.enabled === false ) return; event.preventDefault(); if ( event.button === scope.mouseButtons.ORBIT ) { if ( scope.enableRotate === false ) return; handleMouseDownRotate( event ); state = STATE.ROTATE; } else if ( event.button === scope.mouseButtons.ZOOM ) { if ( scope.enableZoom === false ) return; handleMouseDownDolly( event ); state = STATE.DOLLY; } else if ( event.button === scope.mouseButtons.PAN ) { if ( scope.enablePan === false ) return; handleMouseDownPan( event ); state = STATE.PAN; } if ( state !== STATE.NONE ) { document.addEventListener( 'mousemove', onMouseMove, false ); document.addEventListener( 'mouseup', onMouseUp, false ); //document.addEventListener( 'mouseout', onMouseUp, false ); scope.dispatchEvent( startEvent ); } } function onMouseMove( event ) { if ( scope.enabled === false ) return; event.preventDefault(); if ( state === STATE.ROTATE ) { if ( scope.enableRotate === false ) return; handleMouseMoveRotate( event ); } else if ( state === STATE.DOLLY ) { if ( scope.enableZoom === false ) return; handleMouseMoveDolly( event ); } else if ( state === STATE.PAN ) { if ( scope.enablePan === false ) return; handleMouseMovePan( event ); } } function onMouseUp( event ) { if ( scope.enabled === false ) return; handleMouseUp( event ); document.removeEventListener( 'mousemove', onMouseMove, false ); document.removeEventListener( 'mouseup', onMouseUp, false ); //document.removeEventListener( 'mouseout', onMouseUp, false ); scope.dispatchEvent( endEvent ); state = STATE.NONE; } function onMouseWheel( event ) { if ( scope.enabled === false || scope.enableZoom === false || ( state !== STATE.NONE && state !== STATE.ROTATE ) ) return; event.preventDefault(); event.stopPropagation(); handleMouseWheel( event ); scope.dispatchEvent( startEvent ); // not sure why these are here... scope.dispatchEvent( endEvent ); } function onKeyDown( event ) { if ( scope.enabled === false || scope.enableKeys === false || scope.enablePan === false ) return; handleKeyDown( event ); } function onTouchStart( event ) { if ( scope.enabled === false ) return; switch ( event.touches.length ) { case 1: // one-fingered touch: rotate if ( scope.enableRotate === false ) return; handleTouchStartRotate( event ); state = STATE.TOUCH_ROTATE; break; case 2: // two-fingered touch: dolly if ( scope.enableZoom === false ) return; handleTouchStartDolly( event ); state = STATE.TOUCH_DOLLY; break; case 3: // three-fingered touch: pan if ( scope.enablePan === false ) return; handleTouchStartPan( event ); state = STATE.TOUCH_PAN; break; default: state = STATE.NONE; } if ( state !== STATE.NONE ) { scope.dispatchEvent( startEvent ); } } function onTouchMove( event ) { if ( scope.enabled === false ) return; event.preventDefault(); event.stopPropagation(); switch ( event.touches.length ) { case 1: // one-fingered touch: rotate if ( scope.enableRotate === false ) return; if ( state !== STATE.TOUCH_ROTATE ) return; // is this needed?... handleTouchMoveRotate( event ); break; case 2: // two-fingered touch: dolly if ( scope.enableZoom === false ) return; if ( state !== STATE.TOUCH_DOLLY ) return; // is this needed?... handleTouchMoveDolly( event ); break; case 3: // three-fingered touch: pan if ( scope.enablePan === false ) return; if ( state !== STATE.TOUCH_PAN ) return; // is this needed?... handleTouchMovePan( event ); break; default: state = STATE.NONE; } } function onTouchEnd( event ) { if ( scope.enabled === false ) return; handleTouchEnd( event ); scope.dispatchEvent( endEvent ); state = STATE.NONE; } function onContextMenu( event ) { event.preventDefault(); } // scope.domElement.addEventListener( 'contextmenu', onContextMenu, false ); scope.domElement.addEventListener( 'mousedown', onMouseDown, false ); scope.domElement.addEventListener( 'mousewheel', onMouseWheel, false ); scope.domElement.addEventListener( 'MozMousePixelScroll', onMouseWheel, false ); // firefox scope.domElement.addEventListener( 'touchstart', onTouchStart, false ); scope.domElement.addEventListener( 'touchend', onTouchEnd, false ); scope.domElement.addEventListener( 'touchmove', onTouchMove, false ); window.addEventListener( 'keydown', onKeyDown, false ); // force an update at start this.update(); }; THREE.OrbitControls.prototype = Object.create( THREE.EventDispatcher.prototype ); THREE.OrbitControls.prototype.constructor = THREE.OrbitControls; Object.defineProperties( THREE.OrbitControls.prototype, { center: { get: function () { console.warn( 'THREE.OrbitControls: .center has been renamed to .target' ); return this.target; } }, // backward compatibility noZoom: { get: function () { console.warn( 'THREE.OrbitControls: .noZoom has been deprecated. Use .enableZoom instead.' ); return ! this.enableZoom; }, set: function ( value ) { console.warn( 'THREE.OrbitControls: .noZoom has been deprecated. Use .enableZoom instead.' ); this.enableZoom = ! value; } }, noRotate: { get: function () { console.warn( 'THREE.OrbitControls: .noRotate has been deprecated. Use .enableRotate instead.' ); return ! this.enableRotate; }, set: function ( value ) { console.warn( 'THREE.OrbitControls: .noRotate has been deprecated. Use .enableRotate instead.' ); this.enableRotate = ! value; } }, noPan: { get: function () { console.warn( 'THREE.OrbitControls: .noPan has been deprecated. Use .enablePan instead.' ); return ! this.enablePan; }, set: function ( value ) { console.warn( 'THREE.OrbitControls: .noPan has been deprecated. Use .enablePan instead.' ); this.enablePan = ! value; } }, noKeys: { get: function () { console.warn( 'THREE.OrbitControls: .noKeys has been deprecated. Use .enableKeys instead.' ); return ! this.enableKeys; }, set: function ( value ) { console.warn( 'THREE.OrbitControls: .noKeys has been deprecated. Use .enableKeys instead.' ); this.enableKeys = ! value; } }, staticMoving : { get: function () { console.warn( 'THREE.OrbitControls: .staticMoving has been deprecated. Use .enableDamping instead.' ); return ! this.enableDamping; }, set: function ( value ) { console.warn( 'THREE.OrbitControls: .staticMoving has been deprecated. Use .enableDamping instead.' ); this.enableDamping = ! value; } }, dynamicDampingFactor : { get: function () { console.warn( 'THREE.OrbitControls: .dynamicDampingFactor has been renamed. Use .dampingFactor instead.' ); return this.dampingFactor; }, set: function ( value ) { console.warn( 'THREE.OrbitControls: .dynamicDampingFactor has been renamed. Use .dampingFactor instead.' ); this.dampingFactor = value; } } } ); ================================================ FILE: software/chainlink/js/packages/example-webserial-basic/public/3d_viewer/js/STLLoader.js ================================================ /** * @author aleeper / http://adamleeper.com/ * @author mrdoob / http://mrdoob.com/ * @author gero3 / https://github.com/gero3 * * Description: A THREE loader for STL ASCII files, as created by Solidworks and other CAD programs. * * Supports both binary and ASCII encoded files, with automatic detection of type. * * Limitations: * Binary decoding supports "Magics" color format (http://en.wikipedia.org/wiki/STL_(file_format)#Color_in_binary_STL). * There is perhaps some question as to how valid it is to always assume little-endian-ness. * ASCII decoding assumes file is UTF-8. Seems to work for the examples... * * Usage: * var loader = new THREE.STLLoader(); * loader.load( './models/stl/slotted_disk.stl', function ( geometry ) { * scene.add( new THREE.Mesh( geometry ) ); * }); * * For binary STLs geometry might contain colors for vertices. To use it: * // use the same code to load STL as above * if (geometry.hasColors) { * material = new THREE.MeshPhongMaterial({ opacity: geometry.alpha, vertexColors: THREE.VertexColors }); * } else { .... } * var mesh = new THREE.Mesh( geometry, material ); */ THREE.STLLoader = function ( manager ) { this.manager = ( manager !== undefined ) ? manager : THREE.DefaultLoadingManager; }; THREE.STLLoader.prototype = { constructor: THREE.STLLoader, load: function ( url, onLoad, onProgress, onError ) { var scope = this; var loader = new THREE.XHRLoader( scope.manager ); loader.setResponseType( 'arraybuffer' ); loader.load( url, function ( text ) { onLoad( scope.parse( text ) ); }, onProgress, onError ); }, parse: function ( data ) { var isBinary = function () { var expect, face_size, n_faces, reader; reader = new DataView( binData ); face_size = ( 32 / 8 * 3 ) + ( ( 32 / 8 * 3 ) * 3 ) + ( 16 / 8 ); n_faces = reader.getUint32( 80, true ); expect = 80 + ( 32 / 8 ) + ( n_faces * face_size ); if ( expect === reader.byteLength ) { return true; } // some binary files will have different size from expected, // checking characters higher than ASCII to confirm is binary var fileLength = reader.byteLength; for ( var index = 0; index < fileLength; index ++ ) { if ( reader.getUint8( index, false ) > 127 ) { return true; } } return false; }; var binData = this.ensureBinary( data ); return isBinary() ? this.parseBinary( binData ) : this.parseASCII( this.ensureString( data ) ); }, parseBinary: function ( data ) { var reader = new DataView( data ); var faces = reader.getUint32( 80, true ); var r, g, b, hasColors = false, colors; var defaultR, defaultG, defaultB, alpha; // process STL header // check for default color in header ("COLOR=rgba" sequence). for ( var index = 0; index < 80 - 10; index ++ ) { if ( ( reader.getUint32( index, false ) == 0x434F4C4F /*COLO*/ ) && ( reader.getUint8( index + 4 ) == 0x52 /*'R'*/ ) && ( reader.getUint8( index + 5 ) == 0x3D /*'='*/ ) ) { hasColors = true; colors = new Float32Array( faces * 3 * 3 ); defaultR = reader.getUint8( index + 6 ) / 255; defaultG = reader.getUint8( index + 7 ) / 255; defaultB = reader.getUint8( index + 8 ) / 255; alpha = reader.getUint8( index + 9 ) / 255; } } var dataOffset = 84; var faceLength = 12 * 4 + 2; var offset = 0; var geometry = new THREE.BufferGeometry(); var vertices = new Float32Array( faces * 3 * 3 ); var normals = new Float32Array( faces * 3 * 3 ); for ( var face = 0; face < faces; face ++ ) { var start = dataOffset + face * faceLength; var normalX = reader.getFloat32( start, true ); var normalY = reader.getFloat32( start + 4, true ); var normalZ = reader.getFloat32( start + 8, true ); if ( hasColors ) { var packedColor = reader.getUint16( start + 48, true ); if ( ( packedColor & 0x8000 ) === 0 ) { // facet has its own unique color r = ( packedColor & 0x1F ) / 31; g = ( ( packedColor >> 5 ) & 0x1F ) / 31; b = ( ( packedColor >> 10 ) & 0x1F ) / 31; } else { r = defaultR; g = defaultG; b = defaultB; } } for ( var i = 1; i <= 3; i ++ ) { var vertexstart = start + i * 12; vertices[ offset ] = reader.getFloat32( vertexstart, true ); vertices[ offset + 1 ] = reader.getFloat32( vertexstart + 4, true ); vertices[ offset + 2 ] = reader.getFloat32( vertexstart + 8, true ); normals[ offset ] = normalX; normals[ offset + 1 ] = normalY; normals[ offset + 2 ] = normalZ; if ( hasColors ) { colors[ offset ] = r; colors[ offset + 1 ] = g; colors[ offset + 2 ] = b; } offset += 3; } } geometry.addAttribute( 'position', new THREE.BufferAttribute( vertices, 3 ) ); geometry.addAttribute( 'normal', new THREE.BufferAttribute( normals, 3 ) ); if ( hasColors ) { geometry.addAttribute( 'color', new THREE.BufferAttribute( colors, 3 ) ); geometry.hasColors = true; geometry.alpha = alpha; } return geometry; }, parseASCII: function ( data ) { var geometry, length, normal, patternFace, patternNormal, patternVertex, result, text; geometry = new THREE.Geometry(); patternFace = /facet([\s\S]*?)endfacet/g; while ( ( result = patternFace.exec( data ) ) !== null ) { text = result[ 0 ]; patternNormal = /normal[\s]+([\-+]?[0-9]+\.?[0-9]*([eE][\-+]?[0-9]+)?)+[\s]+([\-+]?[0-9]*\.?[0-9]+([eE][\-+]?[0-9]+)?)+[\s]+([\-+]?[0-9]*\.?[0-9]+([eE][\-+]?[0-9]+)?)+/g; while ( ( result = patternNormal.exec( text ) ) !== null ) { normal = new THREE.Vector3( parseFloat( result[ 1 ] ), parseFloat( result[ 3 ] ), parseFloat( result[ 5 ] ) ); } patternVertex = /vertex[\s]+([\-+]?[0-9]+\.?[0-9]*([eE][\-+]?[0-9]+)?)+[\s]+([\-+]?[0-9]*\.?[0-9]+([eE][\-+]?[0-9]+)?)+[\s]+([\-+]?[0-9]*\.?[0-9]+([eE][\-+]?[0-9]+)?)+/g; while ( ( result = patternVertex.exec( text ) ) !== null ) { geometry.vertices.push( new THREE.Vector3( parseFloat( result[ 1 ] ), parseFloat( result[ 3 ] ), parseFloat( result[ 5 ] ) ) ); } length = geometry.vertices.length; geometry.faces.push( new THREE.Face3( length - 3, length - 2, length - 1, normal ) ); } geometry.computeBoundingBox(); geometry.computeBoundingSphere(); return geometry; }, ensureString: function ( buf ) { if ( typeof buf !== "string" ) { var array_buffer = new Uint8Array( buf ); var str = ''; for ( var i = 0; i < buf.byteLength; i ++ ) { str += String.fromCharCode( array_buffer[ i ] ); // implicitly assumes little-endian } return str; } else { return buf; } }, ensureBinary: function ( buf ) { if ( typeof buf === "string" ) { var array_buffer = new Uint8Array( buf.length ); for ( var i = 0; i < buf.length; i ++ ) { array_buffer[ i ] = buf.charCodeAt( i ) & 0xff; // implicitly assumes little-endian } return array_buffer.buffer || array_buffer; } else { return buf; } } }; if ( typeof DataView === 'undefined' ) { DataView = function( buffer, byteOffset, byteLength ) { this.buffer = buffer; this.byteOffset = byteOffset || 0; this.byteLength = byteLength || buffer.byteLength || buffer.length; this._isString = typeof buffer === "string"; }; DataView.prototype = { _getCharCodes: function( buffer, start, length ) { start = start || 0; length = length || buffer.length; var end = start + length; var codes = []; for ( var i = start; i < end; i ++ ) { codes.push( buffer.charCodeAt( i ) & 0xff ); } return codes; }, _getBytes: function ( length, byteOffset, littleEndian ) { var result; // Handle the lack of endianness if ( littleEndian === undefined ) { littleEndian = this._littleEndian; } // Handle the lack of byteOffset if ( byteOffset === undefined ) { byteOffset = this.byteOffset; } else { byteOffset = this.byteOffset + byteOffset; } if ( length === undefined ) { length = this.byteLength - byteOffset; } // Error Checking if ( typeof byteOffset !== 'number' ) { throw new TypeError( 'DataView byteOffset is not a number' ); } if ( length < 0 || byteOffset + length > this.byteLength ) { throw new Error( 'DataView length or (byteOffset+length) value is out of bounds' ); } if ( this.isString ) { result = this._getCharCodes( this.buffer, byteOffset, byteOffset + length ); } else { result = this.buffer.slice( byteOffset, byteOffset + length ); } if ( ! littleEndian && length > 1 ) { if ( Array.isArray( result ) === false ) { result = Array.prototype.slice.call( result ); } result.reverse(); } return result; }, // Compatibility functions on a String Buffer getFloat64: function ( byteOffset, littleEndian ) { var b = this._getBytes( 8, byteOffset, littleEndian ), sign = 1 - ( 2 * ( b[ 7 ] >> 7 ) ), exponent = ( ( ( ( b[ 7 ] << 1 ) & 0xff ) << 3 ) | ( b[ 6 ] >> 4 ) ) - ( ( 1 << 10 ) - 1 ), // Binary operators such as | and << operate on 32 bit values, using + and Math.pow(2) instead mantissa = ( ( b[ 6 ] & 0x0f ) * Math.pow( 2, 48 ) ) + ( b[ 5 ] * Math.pow( 2, 40 ) ) + ( b[ 4 ] * Math.pow( 2, 32 ) ) + ( b[ 3 ] * Math.pow( 2, 24 ) ) + ( b[ 2 ] * Math.pow( 2, 16 ) ) + ( b[ 1 ] * Math.pow( 2, 8 ) ) + b[ 0 ]; if ( exponent === 1024 ) { if ( mantissa !== 0 ) { return NaN; } else { return sign * Infinity; } } if ( exponent === - 1023 ) { // Denormalized return sign * mantissa * Math.pow( 2, - 1022 - 52 ); } return sign * ( 1 + mantissa * Math.pow( 2, - 52 ) ) * Math.pow( 2, exponent ); }, getFloat32: function ( byteOffset, littleEndian ) { var b = this._getBytes( 4, byteOffset, littleEndian ), sign = 1 - ( 2 * ( b[ 3 ] >> 7 ) ), exponent = ( ( ( b[ 3 ] << 1 ) & 0xff ) | ( b[ 2 ] >> 7 ) ) - 127, mantissa = ( ( b[ 2 ] & 0x7f ) << 16 ) | ( b[ 1 ] << 8 ) | b[ 0 ]; if ( exponent === 128 ) { if ( mantissa !== 0 ) { return NaN; } else { return sign * Infinity; } } if ( exponent === - 127 ) { // Denormalized return sign * mantissa * Math.pow( 2, - 126 - 23 ); } return sign * ( 1 + mantissa * Math.pow( 2, - 23 ) ) * Math.pow( 2, exponent ); }, getInt32: function ( byteOffset, littleEndian ) { var b = this._getBytes( 4, byteOffset, littleEndian ); return ( b[ 3 ] << 24 ) | ( b[ 2 ] << 16 ) | ( b[ 1 ] << 8 ) | b[ 0 ]; }, getUint32: function ( byteOffset, littleEndian ) { return this.getInt32( byteOffset, littleEndian ) >>> 0; }, getInt16: function ( byteOffset, littleEndian ) { return ( this.getUint16( byteOffset, littleEndian ) << 16 ) >> 16; }, getUint16: function ( byteOffset, littleEndian ) { var b = this._getBytes( 2, byteOffset, littleEndian ); return ( b[ 1 ] << 8 ) | b[ 0 ]; }, getInt8: function ( byteOffset ) { return ( this.getUint8( byteOffset ) << 24 ) >> 24; }, getUint8: function ( byteOffset ) { return this._getBytes( 1, byteOffset )[ 0 ]; } }; } ================================================ FILE: software/chainlink/js/packages/example-webserial-basic/public/3d_viewer/js/WebGL.js ================================================ /** * @author alteredq / http://alteredqualia.com/ * @author mr.doob / http://mrdoob.com/ */ var WEBGL = { isWebGLAvailable: function () { try { var canvas = document.createElement( 'canvas' ); return !! ( window.WebGLRenderingContext && ( canvas.getContext( 'webgl' ) || canvas.getContext( 'experimental-webgl' ) ) ); } catch ( e ) { return false; } }, isWebGL2Available: function () { try { var canvas = document.createElement( 'canvas' ); return !! ( window.WebGL2RenderingContext && canvas.getContext( 'webgl2' ) ); } catch ( e ) { return false; } }, getWebGLErrorMessage: function () { return this.getErrorMessage( 1 ); }, getWebGL2ErrorMessage: function () { return this.getErrorMessage( 2 ); }, getErrorMessage: function ( version ) { var names = { 1: 'WebGL', 2: 'WebGL 2' }; var contexts = { 1: window.WebGLRenderingContext, 2: window.WebGL2RenderingContext }; var message = 'Your $0 does not seem to support $1'; var element = document.createElement( 'div' ); element.id = 'webglmessage'; element.style.fontFamily = 'monospace'; element.style.fontSize = '13px'; element.style.fontWeight = 'normal'; element.style.textAlign = 'center'; element.style.background = '#fff'; element.style.color = '#000'; element.style.padding = '1.5em'; element.style.width = '400px'; element.style.margin = '5em auto 0'; if ( contexts[ version ] ) { message = message.replace( '$0', 'graphics card' ); } else { message = message.replace( '$0', 'browser' ); } message = message.replace( '$1', names[ version ] ); element.innerHTML = message; return element; } }; ================================================ FILE: software/chainlink/js/packages/example-webserial-basic/public/3d_viewer/js/three.js ================================================ // File:src/Three.js /** * @author mrdoob / http://mrdoob.com/ */ var THREE = { REVISION: '78' }; // if ( typeof define === 'function' && define.amd ) { define( 'three', THREE ); } else if ( 'undefined' !== typeof exports && 'undefined' !== typeof module ) { module.exports = THREE; } // Polyfills if ( Number.EPSILON === undefined ) { Number.EPSILON = Math.pow( 2, - 52 ); } // if ( Math.sign === undefined ) { // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/sign Math.sign = function ( x ) { return ( x < 0 ) ? - 1 : ( x > 0 ) ? 1 : + x; }; } if ( Function.prototype.name === undefined ) { // Missing in IE9-11. // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name Object.defineProperty( Function.prototype, 'name', { get: function () { return this.toString().match( /^\s*function\s*(\S*)\s*\(/ )[ 1 ]; } } ); } if ( Object.assign === undefined ) { // Missing in IE. // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign ( function () { Object.assign = function ( target ) { 'use strict'; if ( target === undefined || target === null ) { throw new TypeError( 'Cannot convert undefined or null to object' ); } var output = Object( target ); for ( var index = 1; index < arguments.length; index ++ ) { var source = arguments[ index ]; if ( source !== undefined && source !== null ) { for ( var nextKey in source ) { if ( Object.prototype.hasOwnProperty.call( source, nextKey ) ) { output[ nextKey ] = source[ nextKey ]; } } } } return output; }; } )(); } // Object.assign( THREE, { // https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent.button MOUSE: { LEFT: 0, MIDDLE: 1, RIGHT: 2 }, // GL STATE CONSTANTS CullFaceNone: 0, CullFaceBack: 1, CullFaceFront: 2, CullFaceFrontBack: 3, FrontFaceDirectionCW: 0, FrontFaceDirectionCCW: 1, // SHADOWING TYPES BasicShadowMap: 0, PCFShadowMap: 1, PCFSoftShadowMap: 2, // MATERIAL CONSTANTS // side FrontSide: 0, BackSide: 1, DoubleSide: 2, // shading FlatShading: 1, SmoothShading: 2, // colors NoColors: 0, FaceColors: 1, VertexColors: 2, // blending modes NoBlending: 0, NormalBlending: 1, AdditiveBlending: 2, SubtractiveBlending: 3, MultiplyBlending: 4, CustomBlending: 5, // custom blending equations // (numbers start from 100 not to clash with other // mappings to OpenGL constants defined in Texture.js) AddEquation: 100, SubtractEquation: 101, ReverseSubtractEquation: 102, MinEquation: 103, MaxEquation: 104, // custom blending destination factors ZeroFactor: 200, OneFactor: 201, SrcColorFactor: 202, OneMinusSrcColorFactor: 203, SrcAlphaFactor: 204, OneMinusSrcAlphaFactor: 205, DstAlphaFactor: 206, OneMinusDstAlphaFactor: 207, // custom blending source factors //ZeroFactor: 200, //OneFactor: 201, //SrcAlphaFactor: 204, //OneMinusSrcAlphaFactor: 205, //DstAlphaFactor: 206, //OneMinusDstAlphaFactor: 207, DstColorFactor: 208, OneMinusDstColorFactor: 209, SrcAlphaSaturateFactor: 210, // depth modes NeverDepth: 0, AlwaysDepth: 1, LessDepth: 2, LessEqualDepth: 3, EqualDepth: 4, GreaterEqualDepth: 5, GreaterDepth: 6, NotEqualDepth: 7, // TEXTURE CONSTANTS MultiplyOperation: 0, MixOperation: 1, AddOperation: 2, // Tone Mapping modes NoToneMapping: 0, // do not do any tone mapping, not even exposure (required for special purpose passes.) LinearToneMapping: 1, // only apply exposure. ReinhardToneMapping: 2, Uncharted2ToneMapping: 3, // John Hable CineonToneMapping: 4, // optimized filmic operator by Jim Hejl and Richard Burgess-Dawson // Mapping modes UVMapping: 300, CubeReflectionMapping: 301, CubeRefractionMapping: 302, EquirectangularReflectionMapping: 303, EquirectangularRefractionMapping: 304, SphericalReflectionMapping: 305, CubeUVReflectionMapping: 306, CubeUVRefractionMapping: 307, // Wrapping modes RepeatWrapping: 1000, ClampToEdgeWrapping: 1001, MirroredRepeatWrapping: 1002, // Filters NearestFilter: 1003, NearestMipMapNearestFilter: 1004, NearestMipMapLinearFilter: 1005, LinearFilter: 1006, LinearMipMapNearestFilter: 1007, LinearMipMapLinearFilter: 1008, // Data types UnsignedByteType: 1009, ByteType: 1010, ShortType: 1011, UnsignedShortType: 1012, IntType: 1013, UnsignedIntType: 1014, FloatType: 1015, HalfFloatType: 1025, // Pixel types //UnsignedByteType: 1009, UnsignedShort4444Type: 1016, UnsignedShort5551Type: 1017, UnsignedShort565Type: 1018, // Pixel formats AlphaFormat: 1019, RGBFormat: 1020, RGBAFormat: 1021, LuminanceFormat: 1022, LuminanceAlphaFormat: 1023, // THREE.RGBEFormat handled as THREE.RGBAFormat in shaders RGBEFormat: THREE.RGBAFormat, //1024; DepthFormat: 1026, // DDS / ST3C Compressed texture formats RGB_S3TC_DXT1_Format: 2001, RGBA_S3TC_DXT1_Format: 2002, RGBA_S3TC_DXT3_Format: 2003, RGBA_S3TC_DXT5_Format: 2004, // PVRTC compressed texture formats RGB_PVRTC_4BPPV1_Format: 2100, RGB_PVRTC_2BPPV1_Format: 2101, RGBA_PVRTC_4BPPV1_Format: 2102, RGBA_PVRTC_2BPPV1_Format: 2103, // ETC compressed texture formats RGB_ETC1_Format: 2151, // Loop styles for AnimationAction LoopOnce: 2200, LoopRepeat: 2201, LoopPingPong: 2202, // Interpolation InterpolateDiscrete: 2300, InterpolateLinear: 2301, InterpolateSmooth: 2302, // Interpolant ending modes ZeroCurvatureEnding: 2400, ZeroSlopeEnding: 2401, WrapAroundEnding: 2402, // Triangle Draw modes TrianglesDrawMode: 0, TriangleStripDrawMode: 1, TriangleFanDrawMode: 2, // Texture Encodings LinearEncoding: 3000, // No encoding at all. sRGBEncoding: 3001, GammaEncoding: 3007, // uses GAMMA_FACTOR, for backwards compatibility with WebGLRenderer.gammaInput/gammaOutput // The following Texture Encodings are for RGB-only (no alpha) HDR light emission sources. // These encodings should not specified as output encodings except in rare situations. RGBEEncoding: 3002, // AKA Radiance. LogLuvEncoding: 3003, RGBM7Encoding: 3004, RGBM16Encoding: 3005, RGBDEncoding: 3006, // MaxRange is 256. // Depth packing strategies BasicDepthPacking: 3200, // for writing to float textures for high precision or for visualizing results in RGB buffers RGBADepthPacking: 3201 // for packing into RGBA buffers. } ); // File:src/math/Color.js /** * @author mrdoob / http://mrdoob.com/ */ THREE.Color = function ( r, g, b ) { if ( g === undefined && b === undefined ) { // r is THREE.Color, hex or string return this.set( r ); } return this.setRGB( r, g, b ); }; THREE.Color.prototype = { constructor: THREE.Color, r: 1, g: 1, b: 1, set: function ( value ) { if ( value instanceof THREE.Color ) { this.copy( value ); } else if ( typeof value === 'number' ) { this.setHex( value ); } else if ( typeof value === 'string' ) { this.setStyle( value ); } return this; }, setScalar: function ( scalar ) { this.r = scalar; this.g = scalar; this.b = scalar; }, setHex: function ( hex ) { hex = Math.floor( hex ); this.r = ( hex >> 16 & 255 ) / 255; this.g = ( hex >> 8 & 255 ) / 255; this.b = ( hex & 255 ) / 255; return this; }, setRGB: function ( r, g, b ) { this.r = r; this.g = g; this.b = b; return this; }, setHSL: function () { function hue2rgb( p, q, t ) { if ( t < 0 ) t += 1; if ( t > 1 ) t -= 1; if ( t < 1 / 6 ) return p + ( q - p ) * 6 * t; if ( t < 1 / 2 ) return q; if ( t < 2 / 3 ) return p + ( q - p ) * 6 * ( 2 / 3 - t ); return p; } return function setHSL( h, s, l ) { // h,s,l ranges are in 0.0 - 1.0 h = THREE.Math.euclideanModulo( h, 1 ); s = THREE.Math.clamp( s, 0, 1 ); l = THREE.Math.clamp( l, 0, 1 ); if ( s === 0 ) { this.r = this.g = this.b = l; } else { var p = l <= 0.5 ? l * ( 1 + s ) : l + s - ( l * s ); var q = ( 2 * l ) - p; this.r = hue2rgb( q, p, h + 1 / 3 ); this.g = hue2rgb( q, p, h ); this.b = hue2rgb( q, p, h - 1 / 3 ); } return this; }; }(), setStyle: function ( style ) { function handleAlpha( string ) { if ( string === undefined ) return; if ( parseFloat( string ) < 1 ) { console.warn( 'THREE.Color: Alpha component of ' + style + ' will be ignored.' ); } } var m; if ( m = /^((?:rgb|hsl)a?)\(\s*([^\)]*)\)/.exec( style ) ) { // rgb / hsl var color; var name = m[ 1 ]; var components = m[ 2 ]; switch ( name ) { case 'rgb': case 'rgba': if ( color = /^(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec( components ) ) { // rgb(255,0,0) rgba(255,0,0,0.5) this.r = Math.min( 255, parseInt( color[ 1 ], 10 ) ) / 255; this.g = Math.min( 255, parseInt( color[ 2 ], 10 ) ) / 255; this.b = Math.min( 255, parseInt( color[ 3 ], 10 ) ) / 255; handleAlpha( color[ 5 ] ); return this; } if ( color = /^(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec( components ) ) { // rgb(100%,0%,0%) rgba(100%,0%,0%,0.5) this.r = Math.min( 100, parseInt( color[ 1 ], 10 ) ) / 100; this.g = Math.min( 100, parseInt( color[ 2 ], 10 ) ) / 100; this.b = Math.min( 100, parseInt( color[ 3 ], 10 ) ) / 100; handleAlpha( color[ 5 ] ); return this; } break; case 'hsl': case 'hsla': if ( color = /^([0-9]*\.?[0-9]+)\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec( components ) ) { // hsl(120,50%,50%) hsla(120,50%,50%,0.5) var h = parseFloat( color[ 1 ] ) / 360; var s = parseInt( color[ 2 ], 10 ) / 100; var l = parseInt( color[ 3 ], 10 ) / 100; handleAlpha( color[ 5 ] ); return this.setHSL( h, s, l ); } break; } } else if ( m = /^\#([A-Fa-f0-9]+)$/.exec( style ) ) { // hex color var hex = m[ 1 ]; var size = hex.length; if ( size === 3 ) { // #ff0 this.r = parseInt( hex.charAt( 0 ) + hex.charAt( 0 ), 16 ) / 255; this.g = parseInt( hex.charAt( 1 ) + hex.charAt( 1 ), 16 ) / 255; this.b = parseInt( hex.charAt( 2 ) + hex.charAt( 2 ), 16 ) / 255; return this; } else if ( size === 6 ) { // #ff0000 this.r = parseInt( hex.charAt( 0 ) + hex.charAt( 1 ), 16 ) / 255; this.g = parseInt( hex.charAt( 2 ) + hex.charAt( 3 ), 16 ) / 255; this.b = parseInt( hex.charAt( 4 ) + hex.charAt( 5 ), 16 ) / 255; return this; } } if ( style && style.length > 0 ) { // color keywords var hex = THREE.ColorKeywords[ style ]; if ( hex !== undefined ) { // red this.setHex( hex ); } else { // unknown color console.warn( 'THREE.Color: Unknown color ' + style ); } } return this; }, clone: function () { return new this.constructor( this.r, this.g, this.b ); }, copy: function ( color ) { this.r = color.r; this.g = color.g; this.b = color.b; return this; }, copyGammaToLinear: function ( color, gammaFactor ) { if ( gammaFactor === undefined ) gammaFactor = 2.0; this.r = Math.pow( color.r, gammaFactor ); this.g = Math.pow( color.g, gammaFactor ); this.b = Math.pow( color.b, gammaFactor ); return this; }, copyLinearToGamma: function ( color, gammaFactor ) { if ( gammaFactor === undefined ) gammaFactor = 2.0; var safeInverse = ( gammaFactor > 0 ) ? ( 1.0 / gammaFactor ) : 1.0; this.r = Math.pow( color.r, safeInverse ); this.g = Math.pow( color.g, safeInverse ); this.b = Math.pow( color.b, safeInverse ); return this; }, convertGammaToLinear: function () { var r = this.r, g = this.g, b = this.b; this.r = r * r; this.g = g * g; this.b = b * b; return this; }, convertLinearToGamma: function () { this.r = Math.sqrt( this.r ); this.g = Math.sqrt( this.g ); this.b = Math.sqrt( this.b ); return this; }, getHex: function () { return ( this.r * 255 ) << 16 ^ ( this.g * 255 ) << 8 ^ ( this.b * 255 ) << 0; }, getHexString: function () { return ( '000000' + this.getHex().toString( 16 ) ).slice( - 6 ); }, getHSL: function ( optionalTarget ) { // h,s,l ranges are in 0.0 - 1.0 var hsl = optionalTarget || { h: 0, s: 0, l: 0 }; var r = this.r, g = this.g, b = this.b; var max = Math.max( r, g, b ); var min = Math.min( r, g, b ); var hue, saturation; var lightness = ( min + max ) / 2.0; if ( min === max ) { hue = 0; saturation = 0; } else { var delta = max - min; saturation = lightness <= 0.5 ? delta / ( max + min ) : delta / ( 2 - max - min ); switch ( max ) { case r: hue = ( g - b ) / delta + ( g < b ? 6 : 0 ); break; case g: hue = ( b - r ) / delta + 2; break; case b: hue = ( r - g ) / delta + 4; break; } hue /= 6; } hsl.h = hue; hsl.s = saturation; hsl.l = lightness; return hsl; }, getStyle: function () { return 'rgb(' + ( ( this.r * 255 ) | 0 ) + ',' + ( ( this.g * 255 ) | 0 ) + ',' + ( ( this.b * 255 ) | 0 ) + ')'; }, offsetHSL: function ( h, s, l ) { var hsl = this.getHSL(); hsl.h += h; hsl.s += s; hsl.l += l; this.setHSL( hsl.h, hsl.s, hsl.l ); return this; }, add: function ( color ) { this.r += color.r; this.g += color.g; this.b += color.b; return this; }, addColors: function ( color1, color2 ) { this.r = color1.r + color2.r; this.g = color1.g + color2.g; this.b = color1.b + color2.b; return this; }, addScalar: function ( s ) { this.r += s; this.g += s; this.b += s; return this; }, multiply: function ( color ) { this.r *= color.r; this.g *= color.g; this.b *= color.b; return this; }, multiplyScalar: function ( s ) { this.r *= s; this.g *= s; this.b *= s; return this; }, lerp: function ( color, alpha ) { this.r += ( color.r - this.r ) * alpha; this.g += ( color.g - this.g ) * alpha; this.b += ( color.b - this.b ) * alpha; return this; }, equals: function ( c ) { return ( c.r === this.r ) && ( c.g === this.g ) && ( c.b === this.b ); }, fromArray: function ( array, offset ) { if ( offset === undefined ) offset = 0; this.r = array[ offset ]; this.g = array[ offset + 1 ]; this.b = array[ offset + 2 ]; return this; }, toArray: function ( array, offset ) { if ( array === undefined ) array = []; if ( offset === undefined ) offset = 0; array[ offset ] = this.r; array[ offset + 1 ] = this.g; array[ offset + 2 ] = this.b; return array; } }; THREE.ColorKeywords = { 'aliceblue': 0xF0F8FF, 'antiquewhite': 0xFAEBD7, 'aqua': 0x00FFFF, 'aquamarine': 0x7FFFD4, 'azure': 0xF0FFFF, 'beige': 0xF5F5DC, 'bisque': 0xFFE4C4, 'black': 0x000000, 'blanchedalmond': 0xFFEBCD, 'blue': 0x0000FF, 'blueviolet': 0x8A2BE2, 'brown': 0xA52A2A, 'burlywood': 0xDEB887, 'cadetblue': 0x5F9EA0, 'chartreuse': 0x7FFF00, 'chocolate': 0xD2691E, 'coral': 0xFF7F50, 'cornflowerblue': 0x6495ED, 'cornsilk': 0xFFF8DC, 'crimson': 0xDC143C, 'cyan': 0x00FFFF, 'darkblue': 0x00008B, 'darkcyan': 0x008B8B, 'darkgoldenrod': 0xB8860B, 'darkgray': 0xA9A9A9, 'darkgreen': 0x006400, 'darkgrey': 0xA9A9A9, 'darkkhaki': 0xBDB76B, 'darkmagenta': 0x8B008B, 'darkolivegreen': 0x556B2F, 'darkorange': 0xFF8C00, 'darkorchid': 0x9932CC, 'darkred': 0x8B0000, 'darksalmon': 0xE9967A, 'darkseagreen': 0x8FBC8F, 'darkslateblue': 0x483D8B, 'darkslategray': 0x2F4F4F, 'darkslategrey': 0x2F4F4F, 'darkturquoise': 0x00CED1, 'darkviolet': 0x9400D3, 'deeppink': 0xFF1493, 'deepskyblue': 0x00BFFF, 'dimgray': 0x696969, 'dimgrey': 0x696969, 'dodgerblue': 0x1E90FF, 'firebrick': 0xB22222, 'floralwhite': 0xFFFAF0, 'forestgreen': 0x228B22, 'fuchsia': 0xFF00FF, 'gainsboro': 0xDCDCDC, 'ghostwhite': 0xF8F8FF, 'gold': 0xFFD700, 'goldenrod': 0xDAA520, 'gray': 0x808080, 'green': 0x008000, 'greenyellow': 0xADFF2F, 'grey': 0x808080, 'honeydew': 0xF0FFF0, 'hotpink': 0xFF69B4, 'indianred': 0xCD5C5C, 'indigo': 0x4B0082, 'ivory': 0xFFFFF0, 'khaki': 0xF0E68C, 'lavender': 0xE6E6FA, 'lavenderblush': 0xFFF0F5, 'lawngreen': 0x7CFC00, 'lemonchiffon': 0xFFFACD, 'lightblue': 0xADD8E6, 'lightcoral': 0xF08080, 'lightcyan': 0xE0FFFF, 'lightgoldenrodyellow': 0xFAFAD2, 'lightgray': 0xD3D3D3, 'lightgreen': 0x90EE90, 'lightgrey': 0xD3D3D3, 'lightpink': 0xFFB6C1, 'lightsalmon': 0xFFA07A, 'lightseagreen': 0x20B2AA, 'lightskyblue': 0x87CEFA, 'lightslategray': 0x778899, 'lightslategrey': 0x778899, 'lightsteelblue': 0xB0C4DE, 'lightyellow': 0xFFFFE0, 'lime': 0x00FF00, 'limegreen': 0x32CD32, 'linen': 0xFAF0E6, 'magenta': 0xFF00FF, 'maroon': 0x800000, 'mediumaquamarine': 0x66CDAA, 'mediumblue': 0x0000CD, 'mediumorchid': 0xBA55D3, 'mediumpurple': 0x9370DB, 'mediumseagreen': 0x3CB371, 'mediumslateblue': 0x7B68EE, 'mediumspringgreen': 0x00FA9A, 'mediumturquoise': 0x48D1CC, 'mediumvioletred': 0xC71585, 'midnightblue': 0x191970, 'mintcream': 0xF5FFFA, 'mistyrose': 0xFFE4E1, 'moccasin': 0xFFE4B5, 'navajowhite': 0xFFDEAD, 'navy': 0x000080, 'oldlace': 0xFDF5E6, 'olive': 0x808000, 'olivedrab': 0x6B8E23, 'orange': 0xFFA500, 'orangered': 0xFF4500, 'orchid': 0xDA70D6, 'palegoldenrod': 0xEEE8AA, 'palegreen': 0x98FB98, 'paleturquoise': 0xAFEEEE, 'palevioletred': 0xDB7093, 'papayawhip': 0xFFEFD5, 'peachpuff': 0xFFDAB9, 'peru': 0xCD853F, 'pink': 0xFFC0CB, 'plum': 0xDDA0DD, 'powderblue': 0xB0E0E6, 'purple': 0x800080, 'red': 0xFF0000, 'rosybrown': 0xBC8F8F, 'royalblue': 0x4169E1, 'saddlebrown': 0x8B4513, 'salmon': 0xFA8072, 'sandybrown': 0xF4A460, 'seagreen': 0x2E8B57, 'seashell': 0xFFF5EE, 'sienna': 0xA0522D, 'silver': 0xC0C0C0, 'skyblue': 0x87CEEB, 'slateblue': 0x6A5ACD, 'slategray': 0x708090, 'slategrey': 0x708090, 'snow': 0xFFFAFA, 'springgreen': 0x00FF7F, 'steelblue': 0x4682B4, 'tan': 0xD2B48C, 'teal': 0x008080, 'thistle': 0xD8BFD8, 'tomato': 0xFF6347, 'turquoise': 0x40E0D0, 'violet': 0xEE82EE, 'wheat': 0xF5DEB3, 'white': 0xFFFFFF, 'whitesmoke': 0xF5F5F5, 'yellow': 0xFFFF00, 'yellowgreen': 0x9ACD32 }; // File:src/math/Quaternion.js /** * @author mikael emtinger / http://gomo.se/ * @author alteredq / http://alteredqualia.com/ * @author WestLangley / http://github.com/WestLangley * @author bhouston / http://clara.io */ THREE.Quaternion = function ( x, y, z, w ) { this._x = x || 0; this._y = y || 0; this._z = z || 0; this._w = ( w !== undefined ) ? w : 1; }; THREE.Quaternion.prototype = { constructor: THREE.Quaternion, get x () { return this._x; }, set x ( value ) { this._x = value; this.onChangeCallback(); }, get y () { return this._y; }, set y ( value ) { this._y = value; this.onChangeCallback(); }, get z () { return this._z; }, set z ( value ) { this._z = value; this.onChangeCallback(); }, get w () { return this._w; }, set w ( value ) { this._w = value; this.onChangeCallback(); }, set: function ( x, y, z, w ) { this._x = x; this._y = y; this._z = z; this._w = w; this.onChangeCallback(); return this; }, clone: function () { return new this.constructor( this._x, this._y, this._z, this._w ); }, copy: function ( quaternion ) { this._x = quaternion.x; this._y = quaternion.y; this._z = quaternion.z; this._w = quaternion.w; this.onChangeCallback(); return this; }, setFromEuler: function ( euler, update ) { if ( euler instanceof THREE.Euler === false ) { throw new Error( 'THREE.Quaternion: .setFromEuler() now expects a Euler rotation rather than a Vector3 and order.' ); } // http://www.mathworks.com/matlabcentral/fileexchange/ // 20696-function-to-convert-between-dcm-euler-angles-quaternions-and-euler-vectors/ // content/SpinCalc.m var c1 = Math.cos( euler._x / 2 ); var c2 = Math.cos( euler._y / 2 ); var c3 = Math.cos( euler._z / 2 ); var s1 = Math.sin( euler._x / 2 ); var s2 = Math.sin( euler._y / 2 ); var s3 = Math.sin( euler._z / 2 ); var order = euler.order; if ( order === 'XYZ' ) { this._x = s1 * c2 * c3 + c1 * s2 * s3; this._y = c1 * s2 * c3 - s1 * c2 * s3; this._z = c1 * c2 * s3 + s1 * s2 * c3; this._w = c1 * c2 * c3 - s1 * s2 * s3; } else if ( order === 'YXZ' ) { this._x = s1 * c2 * c3 + c1 * s2 * s3; this._y = c1 * s2 * c3 - s1 * c2 * s3; this._z = c1 * c2 * s3 - s1 * s2 * c3; this._w = c1 * c2 * c3 + s1 * s2 * s3; } else if ( order === 'ZXY' ) { this._x = s1 * c2 * c3 - c1 * s2 * s3; this._y = c1 * s2 * c3 + s1 * c2 * s3; this._z = c1 * c2 * s3 + s1 * s2 * c3; this._w = c1 * c2 * c3 - s1 * s2 * s3; } else if ( order === 'ZYX' ) { this._x = s1 * c2 * c3 - c1 * s2 * s3; this._y = c1 * s2 * c3 + s1 * c2 * s3; this._z = c1 * c2 * s3 - s1 * s2 * c3; this._w = c1 * c2 * c3 + s1 * s2 * s3; } else if ( order === 'YZX' ) { this._x = s1 * c2 * c3 + c1 * s2 * s3; this._y = c1 * s2 * c3 + s1 * c2 * s3; this._z = c1 * c2 * s3 - s1 * s2 * c3; this._w = c1 * c2 * c3 - s1 * s2 * s3; } else if ( order === 'XZY' ) { this._x = s1 * c2 * c3 - c1 * s2 * s3; this._y = c1 * s2 * c3 - s1 * c2 * s3; this._z = c1 * c2 * s3 + s1 * s2 * c3; this._w = c1 * c2 * c3 + s1 * s2 * s3; } if ( update !== false ) this.onChangeCallback(); return this; }, setFromAxisAngle: function ( axis, angle ) { // http://www.euclideanspace.com/maths/geometry/rotations/conversions/angleToQuaternion/index.htm // assumes axis is normalized var halfAngle = angle / 2, s = Math.sin( halfAngle ); this._x = axis.x * s; this._y = axis.y * s; this._z = axis.z * s; this._w = Math.cos( halfAngle ); this.onChangeCallback(); return this; }, setFromRotationMatrix: function ( m ) { // http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToQuaternion/index.htm // assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled) var te = m.elements, m11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ], m21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ], m31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ], trace = m11 + m22 + m33, s; if ( trace > 0 ) { s = 0.5 / Math.sqrt( trace + 1.0 ); this._w = 0.25 / s; this._x = ( m32 - m23 ) * s; this._y = ( m13 - m31 ) * s; this._z = ( m21 - m12 ) * s; } else if ( m11 > m22 && m11 > m33 ) { s = 2.0 * Math.sqrt( 1.0 + m11 - m22 - m33 ); this._w = ( m32 - m23 ) / s; this._x = 0.25 * s; this._y = ( m12 + m21 ) / s; this._z = ( m13 + m31 ) / s; } else if ( m22 > m33 ) { s = 2.0 * Math.sqrt( 1.0 + m22 - m11 - m33 ); this._w = ( m13 - m31 ) / s; this._x = ( m12 + m21 ) / s; this._y = 0.25 * s; this._z = ( m23 + m32 ) / s; } else { s = 2.0 * Math.sqrt( 1.0 + m33 - m11 - m22 ); this._w = ( m21 - m12 ) / s; this._x = ( m13 + m31 ) / s; this._y = ( m23 + m32 ) / s; this._z = 0.25 * s; } this.onChangeCallback(); return this; }, setFromUnitVectors: function () { // http://lolengine.net/blog/2014/02/24/quaternion-from-two-vectors-final // assumes direction vectors vFrom and vTo are normalized var v1, r; var EPS = 0.000001; return function setFromUnitVectors( vFrom, vTo ) { if ( v1 === undefined ) v1 = new THREE.Vector3(); r = vFrom.dot( vTo ) + 1; if ( r < EPS ) { r = 0; if ( Math.abs( vFrom.x ) > Math.abs( vFrom.z ) ) { v1.set( - vFrom.y, vFrom.x, 0 ); } else { v1.set( 0, - vFrom.z, vFrom.y ); } } else { v1.crossVectors( vFrom, vTo ); } this._x = v1.x; this._y = v1.y; this._z = v1.z; this._w = r; return this.normalize(); }; }(), inverse: function () { return this.conjugate().normalize(); }, conjugate: function () { this._x *= - 1; this._y *= - 1; this._z *= - 1; this.onChangeCallback(); return this; }, dot: function ( v ) { return this._x * v._x + this._y * v._y + this._z * v._z + this._w * v._w; }, lengthSq: function () { return this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w; }, length: function () { return Math.sqrt( this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w ); }, normalize: function () { var l = this.length(); if ( l === 0 ) { this._x = 0; this._y = 0; this._z = 0; this._w = 1; } else { l = 1 / l; this._x = this._x * l; this._y = this._y * l; this._z = this._z * l; this._w = this._w * l; } this.onChangeCallback(); return this; }, multiply: function ( q, p ) { if ( p !== undefined ) { console.warn( 'THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead.' ); return this.multiplyQuaternions( q, p ); } return this.multiplyQuaternions( this, q ); }, premultiply: function ( q ) { return this.multiplyQuaternions( q, this ); }, multiplyQuaternions: function ( a, b ) { // from http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/code/index.htm var qax = a._x, qay = a._y, qaz = a._z, qaw = a._w; var qbx = b._x, qby = b._y, qbz = b._z, qbw = b._w; this._x = qax * qbw + qaw * qbx + qay * qbz - qaz * qby; this._y = qay * qbw + qaw * qby + qaz * qbx - qax * qbz; this._z = qaz * qbw + qaw * qbz + qax * qby - qay * qbx; this._w = qaw * qbw - qax * qbx - qay * qby - qaz * qbz; this.onChangeCallback(); return this; }, slerp: function ( qb, t ) { if ( t === 0 ) return this; if ( t === 1 ) return this.copy( qb ); var x = this._x, y = this._y, z = this._z, w = this._w; // http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/slerp/ var cosHalfTheta = w * qb._w + x * qb._x + y * qb._y + z * qb._z; if ( cosHalfTheta < 0 ) { this._w = - qb._w; this._x = - qb._x; this._y = - qb._y; this._z = - qb._z; cosHalfTheta = - cosHalfTheta; } else { this.copy( qb ); } if ( cosHalfTheta >= 1.0 ) { this._w = w; this._x = x; this._y = y; this._z = z; return this; } var sinHalfTheta = Math.sqrt( 1.0 - cosHalfTheta * cosHalfTheta ); if ( Math.abs( sinHalfTheta ) < 0.001 ) { this._w = 0.5 * ( w + this._w ); this._x = 0.5 * ( x + this._x ); this._y = 0.5 * ( y + this._y ); this._z = 0.5 * ( z + this._z ); return this; } var halfTheta = Math.atan2( sinHalfTheta, cosHalfTheta ); var ratioA = Math.sin( ( 1 - t ) * halfTheta ) / sinHalfTheta, ratioB = Math.sin( t * halfTheta ) / sinHalfTheta; this._w = ( w * ratioA + this._w * ratioB ); this._x = ( x * ratioA + this._x * ratioB ); this._y = ( y * ratioA + this._y * ratioB ); this._z = ( z * ratioA + this._z * ratioB ); this.onChangeCallback(); return this; }, equals: function ( quaternion ) { return ( quaternion._x === this._x ) && ( quaternion._y === this._y ) && ( quaternion._z === this._z ) && ( quaternion._w === this._w ); }, fromArray: function ( array, offset ) { if ( offset === undefined ) offset = 0; this._x = array[ offset ]; this._y = array[ offset + 1 ]; this._z = array[ offset + 2 ]; this._w = array[ offset + 3 ]; this.onChangeCallback(); return this; }, toArray: function ( array, offset ) { if ( array === undefined ) array = []; if ( offset === undefined ) offset = 0; array[ offset ] = this._x; array[ offset + 1 ] = this._y; array[ offset + 2 ] = this._z; array[ offset + 3 ] = this._w; return array; }, onChange: function ( callback ) { this.onChangeCallback = callback; return this; }, onChangeCallback: function () {} }; Object.assign( THREE.Quaternion, { slerp: function( qa, qb, qm, t ) { return qm.copy( qa ).slerp( qb, t ); }, slerpFlat: function( dst, dstOffset, src0, srcOffset0, src1, srcOffset1, t ) { // fuzz-free, array-based Quaternion SLERP operation var x0 = src0[ srcOffset0 + 0 ], y0 = src0[ srcOffset0 + 1 ], z0 = src0[ srcOffset0 + 2 ], w0 = src0[ srcOffset0 + 3 ], x1 = src1[ srcOffset1 + 0 ], y1 = src1[ srcOffset1 + 1 ], z1 = src1[ srcOffset1 + 2 ], w1 = src1[ srcOffset1 + 3 ]; if ( w0 !== w1 || x0 !== x1 || y0 !== y1 || z0 !== z1 ) { var s = 1 - t, cos = x0 * x1 + y0 * y1 + z0 * z1 + w0 * w1, dir = ( cos >= 0 ? 1 : - 1 ), sqrSin = 1 - cos * cos; // Skip the Slerp for tiny steps to avoid numeric problems: if ( sqrSin > Number.EPSILON ) { var sin = Math.sqrt( sqrSin ), len = Math.atan2( sin, cos * dir ); s = Math.sin( s * len ) / sin; t = Math.sin( t * len ) / sin; } var tDir = t * dir; x0 = x0 * s + x1 * tDir; y0 = y0 * s + y1 * tDir; z0 = z0 * s + z1 * tDir; w0 = w0 * s + w1 * tDir; // Normalize in case we just did a lerp: if ( s === 1 - t ) { var f = 1 / Math.sqrt( x0 * x0 + y0 * y0 + z0 * z0 + w0 * w0 ); x0 *= f; y0 *= f; z0 *= f; w0 *= f; } } dst[ dstOffset ] = x0; dst[ dstOffset + 1 ] = y0; dst[ dstOffset + 2 ] = z0; dst[ dstOffset + 3 ] = w0; } } ); // File:src/math/Vector2.js /** * @author mrdoob / http://mrdoob.com/ * @author philogb / http://blog.thejit.org/ * @author egraether / http://egraether.com/ * @author zz85 / http://www.lab4games.net/zz85/blog */ THREE.Vector2 = function ( x, y ) { this.x = x || 0; this.y = y || 0; }; THREE.Vector2.prototype = { constructor: THREE.Vector2, get width() { return this.x; }, set width( value ) { this.x = value; }, get height() { return this.y; }, set height( value ) { this.y = value; }, // set: function ( x, y ) { this.x = x; this.y = y; return this; }, setScalar: function ( scalar ) { this.x = scalar; this.y = scalar; return this; }, setX: function ( x ) { this.x = x; return this; }, setY: function ( y ) { this.y = y; return this; }, setComponent: function ( index, value ) { switch ( index ) { case 0: this.x = value; break; case 1: this.y = value; break; default: throw new Error( 'index is out of range: ' + index ); } }, getComponent: function ( index ) { switch ( index ) { case 0: return this.x; case 1: return this.y; default: throw new Error( 'index is out of range: ' + index ); } }, clone: function () { return new this.constructor( this.x, this.y ); }, copy: function ( v ) { this.x = v.x; this.y = v.y; return this; }, add: function ( v, w ) { if ( w !== undefined ) { console.warn( 'THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead.' ); return this.addVectors( v, w ); } this.x += v.x; this.y += v.y; return this; }, addScalar: function ( s ) { this.x += s; this.y += s; return this; }, addVectors: function ( a, b ) { this.x = a.x + b.x; this.y = a.y + b.y; return this; }, addScaledVector: function ( v, s ) { this.x += v.x * s; this.y += v.y * s; return this; }, sub: function ( v, w ) { if ( w !== undefined ) { console.warn( 'THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.' ); return this.subVectors( v, w ); } this.x -= v.x; this.y -= v.y; return this; }, subScalar: function ( s ) { this.x -= s; this.y -= s; return this; }, subVectors: function ( a, b ) { this.x = a.x - b.x; this.y = a.y - b.y; return this; }, multiply: function ( v ) { this.x *= v.x; this.y *= v.y; return this; }, multiplyScalar: function ( scalar ) { if ( isFinite( scalar ) ) { this.x *= scalar; this.y *= scalar; } else { this.x = 0; this.y = 0; } return this; }, divide: function ( v ) { this.x /= v.x; this.y /= v.y; return this; }, divideScalar: function ( scalar ) { return this.multiplyScalar( 1 / scalar ); }, min: function ( v ) { this.x = Math.min( this.x, v.x ); this.y = Math.min( this.y, v.y ); return this; }, max: function ( v ) { this.x = Math.max( this.x, v.x ); this.y = Math.max( this.y, v.y ); return this; }, clamp: function ( min, max ) { // This function assumes min < max, if this assumption isn't true it will not operate correctly this.x = Math.max( min.x, Math.min( max.x, this.x ) ); this.y = Math.max( min.y, Math.min( max.y, this.y ) ); return this; }, clampScalar: function () { var min, max; return function clampScalar( minVal, maxVal ) { if ( min === undefined ) { min = new THREE.Vector2(); max = new THREE.Vector2(); } min.set( minVal, minVal ); max.set( maxVal, maxVal ); return this.clamp( min, max ); }; }(), clampLength: function ( min, max ) { var length = this.length(); return this.multiplyScalar( Math.max( min, Math.min( max, length ) ) / length ); }, floor: function () { this.x = Math.floor( this.x ); this.y = Math.floor( this.y ); return this; }, ceil: function () { this.x = Math.ceil( this.x ); this.y = Math.ceil( this.y ); return this; }, round: function () { this.x = Math.round( this.x ); this.y = Math.round( this.y ); return this; }, roundToZero: function () { this.x = ( this.x < 0 ) ? Math.ceil( this.x ) : Math.floor( this.x ); this.y = ( this.y < 0 ) ? Math.ceil( this.y ) : Math.floor( this.y ); return this; }, negate: function () { this.x = - this.x; this.y = - this.y; return this; }, dot: function ( v ) { return this.x * v.x + this.y * v.y; }, lengthSq: function () { return this.x * this.x + this.y * this.y; }, length: function () { return Math.sqrt( this.x * this.x + this.y * this.y ); }, lengthManhattan: function() { return Math.abs( this.x ) + Math.abs( this.y ); }, normalize: function () { return this.divideScalar( this.length() ); }, angle: function () { // computes the angle in radians with respect to the positive x-axis var angle = Math.atan2( this.y, this.x ); if ( angle < 0 ) angle += 2 * Math.PI; return angle; }, distanceTo: function ( v ) { return Math.sqrt( this.distanceToSquared( v ) ); }, distanceToSquared: function ( v ) { var dx = this.x - v.x, dy = this.y - v.y; return dx * dx + dy * dy; }, setLength: function ( length ) { return this.multiplyScalar( length / this.length() ); }, lerp: function ( v, alpha ) { this.x += ( v.x - this.x ) * alpha; this.y += ( v.y - this.y ) * alpha; return this; }, lerpVectors: function ( v1, v2, alpha ) { return this.subVectors( v2, v1 ).multiplyScalar( alpha ).add( v1 ); }, equals: function ( v ) { return ( ( v.x === this.x ) && ( v.y === this.y ) ); }, fromArray: function ( array, offset ) { if ( offset === undefined ) offset = 0; this.x = array[ offset ]; this.y = array[ offset + 1 ]; return this; }, toArray: function ( array, offset ) { if ( array === undefined ) array = []; if ( offset === undefined ) offset = 0; array[ offset ] = this.x; array[ offset + 1 ] = this.y; return array; }, fromAttribute: function ( attribute, index, offset ) { if ( offset === undefined ) offset = 0; index = index * attribute.itemSize + offset; this.x = attribute.array[ index ]; this.y = attribute.array[ index + 1 ]; return this; }, rotateAround: function ( center, angle ) { var c = Math.cos( angle ), s = Math.sin( angle ); var x = this.x - center.x; var y = this.y - center.y; this.x = x * c - y * s + center.x; this.y = x * s + y * c + center.y; return this; } }; // File:src/math/Vector3.js /** * @author mrdoob / http://mrdoob.com/ * @author *kile / http://kile.stravaganza.org/ * @author philogb / http://blog.thejit.org/ * @author mikael emtinger / http://gomo.se/ * @author egraether / http://egraether.com/ * @author WestLangley / http://github.com/WestLangley */ THREE.Vector3 = function ( x, y, z ) { this.x = x || 0; this.y = y || 0; this.z = z || 0; }; THREE.Vector3.prototype = { constructor: THREE.Vector3, set: function ( x, y, z ) { this.x = x; this.y = y; this.z = z; return this; }, setScalar: function ( scalar ) { this.x = scalar; this.y = scalar; this.z = scalar; return this; }, setX: function ( x ) { this.x = x; return this; }, setY: function ( y ) { this.y = y; return this; }, setZ: function ( z ) { this.z = z; return this; }, setComponent: function ( index, value ) { switch ( index ) { case 0: this.x = value; break; case 1: this.y = value; break; case 2: this.z = value; break; default: throw new Error( 'index is out of range: ' + index ); } }, getComponent: function ( index ) { switch ( index ) { case 0: return this.x; case 1: return this.y; case 2: return this.z; default: throw new Error( 'index is out of range: ' + index ); } }, clone: function () { return new this.constructor( this.x, this.y, this.z ); }, copy: function ( v ) { this.x = v.x; this.y = v.y; this.z = v.z; return this; }, add: function ( v, w ) { if ( w !== undefined ) { console.warn( 'THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead.' ); return this.addVectors( v, w ); } this.x += v.x; this.y += v.y; this.z += v.z; return this; }, addScalar: function ( s ) { this.x += s; this.y += s; this.z += s; return this; }, addVectors: function ( a, b ) { this.x = a.x + b.x; this.y = a.y + b.y; this.z = a.z + b.z; return this; }, addScaledVector: function ( v, s ) { this.x += v.x * s; this.y += v.y * s; this.z += v.z * s; return this; }, sub: function ( v, w ) { if ( w !== undefined ) { console.warn( 'THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.' ); return this.subVectors( v, w ); } this.x -= v.x; this.y -= v.y; this.z -= v.z; return this; }, subScalar: function ( s ) { this.x -= s; this.y -= s; this.z -= s; return this; }, subVectors: function ( a, b ) { this.x = a.x - b.x; this.y = a.y - b.y; this.z = a.z - b.z; return this; }, multiply: function ( v, w ) { if ( w !== undefined ) { console.warn( 'THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead.' ); return this.multiplyVectors( v, w ); } this.x *= v.x; this.y *= v.y; this.z *= v.z; return this; }, multiplyScalar: function ( scalar ) { if ( isFinite( scalar ) ) { this.x *= scalar; this.y *= scalar; this.z *= scalar; } else { this.x = 0; this.y = 0; this.z = 0; } return this; }, multiplyVectors: function ( a, b ) { this.x = a.x * b.x; this.y = a.y * b.y; this.z = a.z * b.z; return this; }, applyEuler: function () { var quaternion; return function applyEuler( euler ) { if ( euler instanceof THREE.Euler === false ) { console.error( 'THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order.' ); } if ( quaternion === undefined ) quaternion = new THREE.Quaternion(); return this.applyQuaternion( quaternion.setFromEuler( euler ) ); }; }(), applyAxisAngle: function () { var quaternion; return function applyAxisAngle( axis, angle ) { if ( quaternion === undefined ) quaternion = new THREE.Quaternion(); return this.applyQuaternion( quaternion.setFromAxisAngle( axis, angle ) ); }; }(), applyMatrix3: function ( m ) { var x = this.x, y = this.y, z = this.z; var e = m.elements; this.x = e[ 0 ] * x + e[ 3 ] * y + e[ 6 ] * z; this.y = e[ 1 ] * x + e[ 4 ] * y + e[ 7 ] * z; this.z = e[ 2 ] * x + e[ 5 ] * y + e[ 8 ] * z; return this; }, applyMatrix4: function ( m ) { // input: THREE.Matrix4 affine matrix var x = this.x, y = this.y, z = this.z; var e = m.elements; this.x = e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z + e[ 12 ]; this.y = e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z + e[ 13 ]; this.z = e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z + e[ 14 ]; return this; }, applyProjection: function ( m ) { // input: THREE.Matrix4 projection matrix var x = this.x, y = this.y, z = this.z; var e = m.elements; var d = 1 / ( e[ 3 ] * x + e[ 7 ] * y + e[ 11 ] * z + e[ 15 ] ); // perspective divide this.x = ( e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z + e[ 12 ] ) * d; this.y = ( e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z + e[ 13 ] ) * d; this.z = ( e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z + e[ 14 ] ) * d; return this; }, applyQuaternion: function ( q ) { var x = this.x, y = this.y, z = this.z; var qx = q.x, qy = q.y, qz = q.z, qw = q.w; // calculate quat * vector var ix = qw * x + qy * z - qz * y; var iy = qw * y + qz * x - qx * z; var iz = qw * z + qx * y - qy * x; var iw = - qx * x - qy * y - qz * z; // calculate result * inverse quat this.x = ix * qw + iw * - qx + iy * - qz - iz * - qy; this.y = iy * qw + iw * - qy + iz * - qx - ix * - qz; this.z = iz * qw + iw * - qz + ix * - qy - iy * - qx; return this; }, project: function () { var matrix; return function project( camera ) { if ( matrix === undefined ) matrix = new THREE.Matrix4(); matrix.multiplyMatrices( camera.projectionMatrix, matrix.getInverse( camera.matrixWorld ) ); return this.applyProjection( matrix ); }; }(), unproject: function () { var matrix; return function unproject( camera ) { if ( matrix === undefined ) matrix = new THREE.Matrix4(); matrix.multiplyMatrices( camera.matrixWorld, matrix.getInverse( camera.projectionMatrix ) ); return this.applyProjection( matrix ); }; }(), transformDirection: function ( m ) { // input: THREE.Matrix4 affine matrix // vector interpreted as a direction var x = this.x, y = this.y, z = this.z; var e = m.elements; this.x = e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z; this.y = e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z; this.z = e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z; return this.normalize(); }, divide: function ( v ) { this.x /= v.x; this.y /= v.y; this.z /= v.z; return this; }, divideScalar: function ( scalar ) { return this.multiplyScalar( 1 / scalar ); }, min: function ( v ) { this.x = Math.min( this.x, v.x ); this.y = Math.min( this.y, v.y ); this.z = Math.min( this.z, v.z ); return this; }, max: function ( v ) { this.x = Math.max( this.x, v.x ); this.y = Math.max( this.y, v.y ); this.z = Math.max( this.z, v.z ); return this; }, clamp: function ( min, max ) { // This function assumes min < max, if this assumption isn't true it will not operate correctly this.x = Math.max( min.x, Math.min( max.x, this.x ) ); this.y = Math.max( min.y, Math.min( max.y, this.y ) ); this.z = Math.max( min.z, Math.min( max.z, this.z ) ); return this; }, clampScalar: function () { var min, max; return function clampScalar( minVal, maxVal ) { if ( min === undefined ) { min = new THREE.Vector3(); max = new THREE.Vector3(); } min.set( minVal, minVal, minVal ); max.set( maxVal, maxVal, maxVal ); return this.clamp( min, max ); }; }(), clampLength: function ( min, max ) { var length = this.length(); return this.multiplyScalar( Math.max( min, Math.min( max, length ) ) / length ); }, floor: function () { this.x = Math.floor( this.x ); this.y = Math.floor( this.y ); this.z = Math.floor( this.z ); return this; }, ceil: function () { this.x = Math.ceil( this.x ); this.y = Math.ceil( this.y ); this.z = Math.ceil( this.z ); return this; }, round: function () { this.x = Math.round( this.x ); this.y = Math.round( this.y ); this.z = Math.round( this.z ); return this; }, roundToZero: function () { this.x = ( this.x < 0 ) ? Math.ceil( this.x ) : Math.floor( this.x ); this.y = ( this.y < 0 ) ? Math.ceil( this.y ) : Math.floor( this.y ); this.z = ( this.z < 0 ) ? Math.ceil( this.z ) : Math.floor( this.z ); return this; }, negate: function () { this.x = - this.x; this.y = - this.y; this.z = - this.z; return this; }, dot: function ( v ) { return this.x * v.x + this.y * v.y + this.z * v.z; }, lengthSq: function () { return this.x * this.x + this.y * this.y + this.z * this.z; }, length: function () { return Math.sqrt( this.x * this.x + this.y * this.y + this.z * this.z ); }, lengthManhattan: function () { return Math.abs( this.x ) + Math.abs( this.y ) + Math.abs( this.z ); }, normalize: function () { return this.divideScalar( this.length() ); }, setLength: function ( length ) { return this.multiplyScalar( length / this.length() ); }, lerp: function ( v, alpha ) { this.x += ( v.x - this.x ) * alpha; this.y += ( v.y - this.y ) * alpha; this.z += ( v.z - this.z ) * alpha; return this; }, lerpVectors: function ( v1, v2, alpha ) { return this.subVectors( v2, v1 ).multiplyScalar( alpha ).add( v1 ); }, cross: function ( v, w ) { if ( w !== undefined ) { console.warn( 'THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead.' ); return this.crossVectors( v, w ); } var x = this.x, y = this.y, z = this.z; this.x = y * v.z - z * v.y; this.y = z * v.x - x * v.z; this.z = x * v.y - y * v.x; return this; }, crossVectors: function ( a, b ) { var ax = a.x, ay = a.y, az = a.z; var bx = b.x, by = b.y, bz = b.z; this.x = ay * bz - az * by; this.y = az * bx - ax * bz; this.z = ax * by - ay * bx; return this; }, projectOnVector: function ( vector ) { var scalar = vector.dot( this ) / vector.lengthSq(); return this.copy( vector ).multiplyScalar( scalar ); }, projectOnPlane: function () { var v1; return function projectOnPlane( planeNormal ) { if ( v1 === undefined ) v1 = new THREE.Vector3(); v1.copy( this ).projectOnVector( planeNormal ); return this.sub( v1 ); }; }(), reflect: function () { // reflect incident vector off plane orthogonal to normal // normal is assumed to have unit length var v1; return function reflect( normal ) { if ( v1 === undefined ) v1 = new THREE.Vector3(); return this.sub( v1.copy( normal ).multiplyScalar( 2 * this.dot( normal ) ) ); }; }(), angleTo: function ( v ) { var theta = this.dot( v ) / ( Math.sqrt( this.lengthSq() * v.lengthSq() ) ); // clamp, to handle numerical problems return Math.acos( THREE.Math.clamp( theta, - 1, 1 ) ); }, distanceTo: function ( v ) { return Math.sqrt( this.distanceToSquared( v ) ); }, distanceToSquared: function ( v ) { var dx = this.x - v.x, dy = this.y - v.y, dz = this.z - v.z; return dx * dx + dy * dy + dz * dz; }, setFromSpherical: function( s ) { var sinPhiRadius = Math.sin( s.phi ) * s.radius; this.x = sinPhiRadius * Math.sin( s.theta ); this.y = Math.cos( s.phi ) * s.radius; this.z = sinPhiRadius * Math.cos( s.theta ); return this; }, setFromMatrixPosition: function ( m ) { return this.setFromMatrixColumn( m, 3 ); }, setFromMatrixScale: function ( m ) { var sx = this.setFromMatrixColumn( m, 0 ).length(); var sy = this.setFromMatrixColumn( m, 1 ).length(); var sz = this.setFromMatrixColumn( m, 2 ).length(); this.x = sx; this.y = sy; this.z = sz; return this; }, setFromMatrixColumn: function ( m, index ) { if ( typeof m === 'number' ) { console.warn( 'THREE.Vector3: setFromMatrixColumn now expects ( matrix, index ).' ); var temp = m m = index; index = temp; } return this.fromArray( m.elements, index * 4 ); }, equals: function ( v ) { return ( ( v.x === this.x ) && ( v.y === this.y ) && ( v.z === this.z ) ); }, fromArray: function ( array, offset ) { if ( offset === undefined ) offset = 0; this.x = array[ offset ]; this.y = array[ offset + 1 ]; this.z = array[ offset + 2 ]; return this; }, toArray: function ( array, offset ) { if ( array === undefined ) array = []; if ( offset === undefined ) offset = 0; array[ offset ] = this.x; array[ offset + 1 ] = this.y; array[ offset + 2 ] = this.z; return array; }, fromAttribute: function ( attribute, index, offset ) { if ( offset === undefined ) offset = 0; index = index * attribute.itemSize + offset; this.x = attribute.array[ index ]; this.y = attribute.array[ index + 1 ]; this.z = attribute.array[ index + 2 ]; return this; } }; // File:src/math/Vector4.js /** * @author supereggbert / http://www.paulbrunt.co.uk/ * @author philogb / http://blog.thejit.org/ * @author mikael emtinger / http://gomo.se/ * @author egraether / http://egraether.com/ * @author WestLangley / http://github.com/WestLangley */ THREE.Vector4 = function ( x, y, z, w ) { this.x = x || 0; this.y = y || 0; this.z = z || 0; this.w = ( w !== undefined ) ? w : 1; }; THREE.Vector4.prototype = { constructor: THREE.Vector4, set: function ( x, y, z, w ) { this.x = x; this.y = y; this.z = z; this.w = w; return this; }, setScalar: function ( scalar ) { this.x = scalar; this.y = scalar; this.z = scalar; this.w = scalar; return this; }, setX: function ( x ) { this.x = x; return this; }, setY: function ( y ) { this.y = y; return this; }, setZ: function ( z ) { this.z = z; return this; }, setW: function ( w ) { this.w = w; return this; }, setComponent: function ( index, value ) { switch ( index ) { case 0: this.x = value; break; case 1: this.y = value; break; case 2: this.z = value; break; case 3: this.w = value; break; default: throw new Error( 'index is out of range: ' + index ); } }, getComponent: function ( index ) { switch ( index ) { case 0: return this.x; case 1: return this.y; case 2: return this.z; case 3: return this.w; default: throw new Error( 'index is out of range: ' + index ); } }, clone: function () { return new this.constructor( this.x, this.y, this.z, this.w ); }, copy: function ( v ) { this.x = v.x; this.y = v.y; this.z = v.z; this.w = ( v.w !== undefined ) ? v.w : 1; return this; }, add: function ( v, w ) { if ( w !== undefined ) { console.warn( 'THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead.' ); return this.addVectors( v, w ); } this.x += v.x; this.y += v.y; this.z += v.z; this.w += v.w; return this; }, addScalar: function ( s ) { this.x += s; this.y += s; this.z += s; this.w += s; return this; }, addVectors: function ( a, b ) { this.x = a.x + b.x; this.y = a.y + b.y; this.z = a.z + b.z; this.w = a.w + b.w; return this; }, addScaledVector: function ( v, s ) { this.x += v.x * s; this.y += v.y * s; this.z += v.z * s; this.w += v.w * s; return this; }, sub: function ( v, w ) { if ( w !== undefined ) { console.warn( 'THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.' ); return this.subVectors( v, w ); } this.x -= v.x; this.y -= v.y; this.z -= v.z; this.w -= v.w; return this; }, subScalar: function ( s ) { this.x -= s; this.y -= s; this.z -= s; this.w -= s; return this; }, subVectors: function ( a, b ) { this.x = a.x - b.x; this.y = a.y - b.y; this.z = a.z - b.z; this.w = a.w - b.w; return this; }, multiplyScalar: function ( scalar ) { if ( isFinite( scalar ) ) { this.x *= scalar; this.y *= scalar; this.z *= scalar; this.w *= scalar; } else { this.x = 0; this.y = 0; this.z = 0; this.w = 0; } return this; }, applyMatrix4: function ( m ) { var x = this.x, y = this.y, z = this.z, w = this.w; var e = m.elements; this.x = e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z + e[ 12 ] * w; this.y = e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z + e[ 13 ] * w; this.z = e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z + e[ 14 ] * w; this.w = e[ 3 ] * x + e[ 7 ] * y + e[ 11 ] * z + e[ 15 ] * w; return this; }, divideScalar: function ( scalar ) { return this.multiplyScalar( 1 / scalar ); }, setAxisAngleFromQuaternion: function ( q ) { // http://www.euclideanspace.com/maths/geometry/rotations/conversions/quaternionToAngle/index.htm // q is assumed to be normalized this.w = 2 * Math.acos( q.w ); var s = Math.sqrt( 1 - q.w * q.w ); if ( s < 0.0001 ) { this.x = 1; this.y = 0; this.z = 0; } else { this.x = q.x / s; this.y = q.y / s; this.z = q.z / s; } return this; }, setAxisAngleFromRotationMatrix: function ( m ) { // http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToAngle/index.htm // assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled) var angle, x, y, z, // variables for result epsilon = 0.01, // margin to allow for rounding errors epsilon2 = 0.1, // margin to distinguish between 0 and 180 degrees te = m.elements, m11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ], m21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ], m31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ]; if ( ( Math.abs( m12 - m21 ) < epsilon ) && ( Math.abs( m13 - m31 ) < epsilon ) && ( Math.abs( m23 - m32 ) < epsilon ) ) { // singularity found // first check for identity matrix which must have +1 for all terms // in leading diagonal and zero in other terms if ( ( Math.abs( m12 + m21 ) < epsilon2 ) && ( Math.abs( m13 + m31 ) < epsilon2 ) && ( Math.abs( m23 + m32 ) < epsilon2 ) && ( Math.abs( m11 + m22 + m33 - 3 ) < epsilon2 ) ) { // this singularity is identity matrix so angle = 0 this.set( 1, 0, 0, 0 ); return this; // zero angle, arbitrary axis } // otherwise this singularity is angle = 180 angle = Math.PI; var xx = ( m11 + 1 ) / 2; var yy = ( m22 + 1 ) / 2; var zz = ( m33 + 1 ) / 2; var xy = ( m12 + m21 ) / 4; var xz = ( m13 + m31 ) / 4; var yz = ( m23 + m32 ) / 4; if ( ( xx > yy ) && ( xx > zz ) ) { // m11 is the largest diagonal term if ( xx < epsilon ) { x = 0; y = 0.707106781; z = 0.707106781; } else { x = Math.sqrt( xx ); y = xy / x; z = xz / x; } } else if ( yy > zz ) { // m22 is the largest diagonal term if ( yy < epsilon ) { x = 0.707106781; y = 0; z = 0.707106781; } else { y = Math.sqrt( yy ); x = xy / y; z = yz / y; } } else { // m33 is the largest diagonal term so base result on this if ( zz < epsilon ) { x = 0.707106781; y = 0.707106781; z = 0; } else { z = Math.sqrt( zz ); x = xz / z; y = yz / z; } } this.set( x, y, z, angle ); return this; // return 180 deg rotation } // as we have reached here there are no singularities so we can handle normally var s = Math.sqrt( ( m32 - m23 ) * ( m32 - m23 ) + ( m13 - m31 ) * ( m13 - m31 ) + ( m21 - m12 ) * ( m21 - m12 ) ); // used to normalize if ( Math.abs( s ) < 0.001 ) s = 1; // prevent divide by zero, should not happen if matrix is orthogonal and should be // caught by singularity test above, but I've left it in just in case this.x = ( m32 - m23 ) / s; this.y = ( m13 - m31 ) / s; this.z = ( m21 - m12 ) / s; this.w = Math.acos( ( m11 + m22 + m33 - 1 ) / 2 ); return this; }, min: function ( v ) { this.x = Math.min( this.x, v.x ); this.y = Math.min( this.y, v.y ); this.z = Math.min( this.z, v.z ); this.w = Math.min( this.w, v.w ); return this; }, max: function ( v ) { this.x = Math.max( this.x, v.x ); this.y = Math.max( this.y, v.y ); this.z = Math.max( this.z, v.z ); this.w = Math.max( this.w, v.w ); return this; }, clamp: function ( min, max ) { // This function assumes min < max, if this assumption isn't true it will not operate correctly this.x = Math.max( min.x, Math.min( max.x, this.x ) ); this.y = Math.max( min.y, Math.min( max.y, this.y ) ); this.z = Math.max( min.z, Math.min( max.z, this.z ) ); this.w = Math.max( min.w, Math.min( max.w, this.w ) ); return this; }, clampScalar: function () { var min, max; return function clampScalar( minVal, maxVal ) { if ( min === undefined ) { min = new THREE.Vector4(); max = new THREE.Vector4(); } min.set( minVal, minVal, minVal, minVal ); max.set( maxVal, maxVal, maxVal, maxVal ); return this.clamp( min, max ); }; }(), floor: function () { this.x = Math.floor( this.x ); this.y = Math.floor( this.y ); this.z = Math.floor( this.z ); this.w = Math.floor( this.w ); return this; }, ceil: function () { this.x = Math.ceil( this.x ); this.y = Math.ceil( this.y ); this.z = Math.ceil( this.z ); this.w = Math.ceil( this.w ); return this; }, round: function () { this.x = Math.round( this.x ); this.y = Math.round( this.y ); this.z = Math.round( this.z ); this.w = Math.round( this.w ); return this; }, roundToZero: function () { this.x = ( this.x < 0 ) ? Math.ceil( this.x ) : Math.floor( this.x ); this.y = ( this.y < 0 ) ? Math.ceil( this.y ) : Math.floor( this.y ); this.z = ( this.z < 0 ) ? Math.ceil( this.z ) : Math.floor( this.z ); this.w = ( this.w < 0 ) ? Math.ceil( this.w ) : Math.floor( this.w ); return this; }, negate: function () { this.x = - this.x; this.y = - this.y; this.z = - this.z; this.w = - this.w; return this; }, dot: function ( v ) { return this.x * v.x + this.y * v.y + this.z * v.z + this.w * v.w; }, lengthSq: function () { return this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w; }, length: function () { return Math.sqrt( this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w ); }, lengthManhattan: function () { return Math.abs( this.x ) + Math.abs( this.y ) + Math.abs( this.z ) + Math.abs( this.w ); }, normalize: function () { return this.divideScalar( this.length() ); }, setLength: function ( length ) { return this.multiplyScalar( length / this.length() ); }, lerp: function ( v, alpha ) { this.x += ( v.x - this.x ) * alpha; this.y += ( v.y - this.y ) * alpha; this.z += ( v.z - this.z ) * alpha; this.w += ( v.w - this.w ) * alpha; return this; }, lerpVectors: function ( v1, v2, alpha ) { return this.subVectors( v2, v1 ).multiplyScalar( alpha ).add( v1 ); }, equals: function ( v ) { return ( ( v.x === this.x ) && ( v.y === this.y ) && ( v.z === this.z ) && ( v.w === this.w ) ); }, fromArray: function ( array, offset ) { if ( offset === undefined ) offset = 0; this.x = array[ offset ]; this.y = array[ offset + 1 ]; this.z = array[ offset + 2 ]; this.w = array[ offset + 3 ]; return this; }, toArray: function ( array, offset ) { if ( array === undefined ) array = []; if ( offset === undefined ) offset = 0; array[ offset ] = this.x; array[ offset + 1 ] = this.y; array[ offset + 2 ] = this.z; array[ offset + 3 ] = this.w; return array; }, fromAttribute: function ( attribute, index, offset ) { if ( offset === undefined ) offset = 0; index = index * attribute.itemSize + offset; this.x = attribute.array[ index ]; this.y = attribute.array[ index + 1 ]; this.z = attribute.array[ index + 2 ]; this.w = attribute.array[ index + 3 ]; return this; } }; // File:src/math/Euler.js /** * @author mrdoob / http://mrdoob.com/ * @author WestLangley / http://github.com/WestLangley * @author bhouston / http://clara.io */ THREE.Euler = function ( x, y, z, order ) { this._x = x || 0; this._y = y || 0; this._z = z || 0; this._order = order || THREE.Euler.DefaultOrder; }; THREE.Euler.RotationOrders = [ 'XYZ', 'YZX', 'ZXY', 'XZY', 'YXZ', 'ZYX' ]; THREE.Euler.DefaultOrder = 'XYZ'; THREE.Euler.prototype = { constructor: THREE.Euler, get x () { return this._x; }, set x ( value ) { this._x = value; this.onChangeCallback(); }, get y () { return this._y; }, set y ( value ) { this._y = value; this.onChangeCallback(); }, get z () { return this._z; }, set z ( value ) { this._z = value; this.onChangeCallback(); }, get order () { return this._order; }, set order ( value ) { this._order = value; this.onChangeCallback(); }, set: function ( x, y, z, order ) { this._x = x; this._y = y; this._z = z; this._order = order || this._order; this.onChangeCallback(); return this; }, clone: function () { return new this.constructor( this._x, this._y, this._z, this._order ); }, copy: function ( euler ) { this._x = euler._x; this._y = euler._y; this._z = euler._z; this._order = euler._order; this.onChangeCallback(); return this; }, setFromRotationMatrix: function ( m, order, update ) { var clamp = THREE.Math.clamp; // assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled) var te = m.elements; var m11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ]; var m21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ]; var m31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ]; order = order || this._order; if ( order === 'XYZ' ) { this._y = Math.asin( clamp( m13, - 1, 1 ) ); if ( Math.abs( m13 ) < 0.99999 ) { this._x = Math.atan2( - m23, m33 ); this._z = Math.atan2( - m12, m11 ); } else { this._x = Math.atan2( m32, m22 ); this._z = 0; } } else if ( order === 'YXZ' ) { this._x = Math.asin( - clamp( m23, - 1, 1 ) ); if ( Math.abs( m23 ) < 0.99999 ) { this._y = Math.atan2( m13, m33 ); this._z = Math.atan2( m21, m22 ); } else { this._y = Math.atan2( - m31, m11 ); this._z = 0; } } else if ( order === 'ZXY' ) { this._x = Math.asin( clamp( m32, - 1, 1 ) ); if ( Math.abs( m32 ) < 0.99999 ) { this._y = Math.atan2( - m31, m33 ); this._z = Math.atan2( - m12, m22 ); } else { this._y = 0; this._z = Math.atan2( m21, m11 ); } } else if ( order === 'ZYX' ) { this._y = Math.asin( - clamp( m31, - 1, 1 ) ); if ( Math.abs( m31 ) < 0.99999 ) { this._x = Math.atan2( m32, m33 ); this._z = Math.atan2( m21, m11 ); } else { this._x = 0; this._z = Math.atan2( - m12, m22 ); } } else if ( order === 'YZX' ) { this._z = Math.asin( clamp( m21, - 1, 1 ) ); if ( Math.abs( m21 ) < 0.99999 ) { this._x = Math.atan2( - m23, m22 ); this._y = Math.atan2( - m31, m11 ); } else { this._x = 0; this._y = Math.atan2( m13, m33 ); } } else if ( order === 'XZY' ) { this._z = Math.asin( - clamp( m12, - 1, 1 ) ); if ( Math.abs( m12 ) < 0.99999 ) { this._x = Math.atan2( m32, m22 ); this._y = Math.atan2( m13, m11 ); } else { this._x = Math.atan2( - m23, m33 ); this._y = 0; } } else { console.warn( 'THREE.Euler: .setFromRotationMatrix() given unsupported order: ' + order ); } this._order = order; if ( update !== false ) this.onChangeCallback(); return this; }, setFromQuaternion: function () { var matrix; return function setFromQuaternion( q, order, update ) { if ( matrix === undefined ) matrix = new THREE.Matrix4(); matrix.makeRotationFromQuaternion( q ); return this.setFromRotationMatrix( matrix, order, update ); }; }(), setFromVector3: function ( v, order ) { return this.set( v.x, v.y, v.z, order || this._order ); }, reorder: function () { // WARNING: this discards revolution information -bhouston var q = new THREE.Quaternion(); return function reorder( newOrder ) { q.setFromEuler( this ); return this.setFromQuaternion( q, newOrder ); }; }(), equals: function ( euler ) { return ( euler._x === this._x ) && ( euler._y === this._y ) && ( euler._z === this._z ) && ( euler._order === this._order ); }, fromArray: function ( array ) { this._x = array[ 0 ]; this._y = array[ 1 ]; this._z = array[ 2 ]; if ( array[ 3 ] !== undefined ) this._order = array[ 3 ]; this.onChangeCallback(); return this; }, toArray: function ( array, offset ) { if ( array === undefined ) array = []; if ( offset === undefined ) offset = 0; array[ offset ] = this._x; array[ offset + 1 ] = this._y; array[ offset + 2 ] = this._z; array[ offset + 3 ] = this._order; return array; }, toVector3: function ( optionalResult ) { if ( optionalResult ) { return optionalResult.set( this._x, this._y, this._z ); } else { return new THREE.Vector3( this._x, this._y, this._z ); } }, onChange: function ( callback ) { this.onChangeCallback = callback; return this; }, onChangeCallback: function () {} }; // File:src/math/Line3.js /** * @author bhouston / http://clara.io */ THREE.Line3 = function ( start, end ) { this.start = ( start !== undefined ) ? start : new THREE.Vector3(); this.end = ( end !== undefined ) ? end : new THREE.Vector3(); }; THREE.Line3.prototype = { constructor: THREE.Line3, set: function ( start, end ) { this.start.copy( start ); this.end.copy( end ); return this; }, clone: function () { return new this.constructor().copy( this ); }, copy: function ( line ) { this.start.copy( line.start ); this.end.copy( line.end ); return this; }, center: function ( optionalTarget ) { var result = optionalTarget || new THREE.Vector3(); return result.addVectors( this.start, this.end ).multiplyScalar( 0.5 ); }, delta: function ( optionalTarget ) { var result = optionalTarget || new THREE.Vector3(); return result.subVectors( this.end, this.start ); }, distanceSq: function () { return this.start.distanceToSquared( this.end ); }, distance: function () { return this.start.distanceTo( this.end ); }, at: function ( t, optionalTarget ) { var result = optionalTarget || new THREE.Vector3(); return this.delta( result ).multiplyScalar( t ).add( this.start ); }, closestPointToPointParameter: function () { var startP = new THREE.Vector3(); var startEnd = new THREE.Vector3(); return function closestPointToPointParameter( point, clampToLine ) { startP.subVectors( point, this.start ); startEnd.subVectors( this.end, this.start ); var startEnd2 = startEnd.dot( startEnd ); var startEnd_startP = startEnd.dot( startP ); var t = startEnd_startP / startEnd2; if ( clampToLine ) { t = THREE.Math.clamp( t, 0, 1 ); } return t; }; }(), closestPointToPoint: function ( point, clampToLine, optionalTarget ) { var t = this.closestPointToPointParameter( point, clampToLine ); var result = optionalTarget || new THREE.Vector3(); return this.delta( result ).multiplyScalar( t ).add( this.start ); }, applyMatrix4: function ( matrix ) { this.start.applyMatrix4( matrix ); this.end.applyMatrix4( matrix ); return this; }, equals: function ( line ) { return line.start.equals( this.start ) && line.end.equals( this.end ); } }; // File:src/math/Box2.js /** * @author bhouston / http://clara.io */ THREE.Box2 = function ( min, max ) { this.min = ( min !== undefined ) ? min : new THREE.Vector2( + Infinity, + Infinity ); this.max = ( max !== undefined ) ? max : new THREE.Vector2( - Infinity, - Infinity ); }; THREE.Box2.prototype = { constructor: THREE.Box2, set: function ( min, max ) { this.min.copy( min ); this.max.copy( max ); return this; }, setFromPoints: function ( points ) { this.makeEmpty(); for ( var i = 0, il = points.length; i < il; i ++ ) { this.expandByPoint( points[ i ] ); } return this; }, setFromCenterAndSize: function () { var v1 = new THREE.Vector2(); return function setFromCenterAndSize( center, size ) { var halfSize = v1.copy( size ).multiplyScalar( 0.5 ); this.min.copy( center ).sub( halfSize ); this.max.copy( center ).add( halfSize ); return this; }; }(), clone: function () { return new this.constructor().copy( this ); }, copy: function ( box ) { this.min.copy( box.min ); this.max.copy( box.max ); return this; }, makeEmpty: function () { this.min.x = this.min.y = + Infinity; this.max.x = this.max.y = - Infinity; return this; }, isEmpty: function () { // this is a more robust check for empty than ( volume <= 0 ) because volume can get positive with two negative axes return ( this.max.x < this.min.x ) || ( this.max.y < this.min.y ); }, center: function ( optionalTarget ) { var result = optionalTarget || new THREE.Vector2(); return result.addVectors( this.min, this.max ).multiplyScalar( 0.5 ); }, size: function ( optionalTarget ) { var result = optionalTarget || new THREE.Vector2(); return result.subVectors( this.max, this.min ); }, expandByPoint: function ( point ) { this.min.min( point ); this.max.max( point ); return this; }, expandByVector: function ( vector ) { this.min.sub( vector ); this.max.add( vector ); return this; }, expandByScalar: function ( scalar ) { this.min.addScalar( - scalar ); this.max.addScalar( scalar ); return this; }, containsPoint: function ( point ) { if ( point.x < this.min.x || point.x > this.max.x || point.y < this.min.y || point.y > this.max.y ) { return false; } return true; }, containsBox: function ( box ) { if ( ( this.min.x <= box.min.x ) && ( box.max.x <= this.max.x ) && ( this.min.y <= box.min.y ) && ( box.max.y <= this.max.y ) ) { return true; } return false; }, getParameter: function ( point, optionalTarget ) { // This can potentially have a divide by zero if the box // has a size dimension of 0. var result = optionalTarget || new THREE.Vector2(); return result.set( ( point.x - this.min.x ) / ( this.max.x - this.min.x ), ( point.y - this.min.y ) / ( this.max.y - this.min.y ) ); }, intersectsBox: function ( box ) { // using 6 splitting planes to rule out intersections. if ( box.max.x < this.min.x || box.min.x > this.max.x || box.max.y < this.min.y || box.min.y > this.max.y ) { return false; } return true; }, clampPoint: function ( point, optionalTarget ) { var result = optionalTarget || new THREE.Vector2(); return result.copy( point ).clamp( this.min, this.max ); }, distanceToPoint: function () { var v1 = new THREE.Vector2(); return function distanceToPoint( point ) { var clampedPoint = v1.copy( point ).clamp( this.min, this.max ); return clampedPoint.sub( point ).length(); }; }(), intersect: function ( box ) { this.min.max( box.min ); this.max.min( box.max ); return this; }, union: function ( box ) { this.min.min( box.min ); this.max.max( box.max ); return this; }, translate: function ( offset ) { this.min.add( offset ); this.max.add( offset ); return this; }, equals: function ( box ) { return box.min.equals( this.min ) && box.max.equals( this.max ); } }; // File:src/math/Box3.js /** * @author bhouston / http://clara.io * @author WestLangley / http://github.com/WestLangley */ THREE.Box3 = function ( min, max ) { this.min = ( min !== undefined ) ? min : new THREE.Vector3( + Infinity, + Infinity, + Infinity ); this.max = ( max !== undefined ) ? max : new THREE.Vector3( - Infinity, - Infinity, - Infinity ); }; THREE.Box3.prototype = { constructor: THREE.Box3, set: function ( min, max ) { this.min.copy( min ); this.max.copy( max ); return this; }, setFromArray: function ( array ) { var minX = + Infinity; var minY = + Infinity; var minZ = + Infinity; var maxX = - Infinity; var maxY = - Infinity; var maxZ = - Infinity; for ( var i = 0, l = array.length; i < l; i += 3 ) { var x = array[ i ]; var y = array[ i + 1 ]; var z = array[ i + 2 ]; if ( x < minX ) minX = x; if ( y < minY ) minY = y; if ( z < minZ ) minZ = z; if ( x > maxX ) maxX = x; if ( y > maxY ) maxY = y; if ( z > maxZ ) maxZ = z; } this.min.set( minX, minY, minZ ); this.max.set( maxX, maxY, maxZ ); }, setFromPoints: function ( points ) { this.makeEmpty(); for ( var i = 0, il = points.length; i < il; i ++ ) { this.expandByPoint( points[ i ] ); } return this; }, setFromCenterAndSize: function () { var v1 = new THREE.Vector3(); return function setFromCenterAndSize( center, size ) { var halfSize = v1.copy( size ).multiplyScalar( 0.5 ); this.min.copy( center ).sub( halfSize ); this.max.copy( center ).add( halfSize ); return this; }; }(), setFromObject: function () { // Computes the world-axis-aligned bounding box of an object (including its children), // accounting for both the object's, and children's, world transforms var v1 = new THREE.Vector3(); return function setFromObject( object ) { var scope = this; object.updateMatrixWorld( true ); this.makeEmpty(); object.traverse( function ( node ) { var geometry = node.geometry; if ( geometry !== undefined ) { if ( geometry instanceof THREE.Geometry ) { var vertices = geometry.vertices; for ( var i = 0, il = vertices.length; i < il; i ++ ) { v1.copy( vertices[ i ] ); v1.applyMatrix4( node.matrixWorld ); scope.expandByPoint( v1 ); } } else if ( geometry instanceof THREE.BufferGeometry && geometry.attributes[ 'position' ] !== undefined ) { var positions = geometry.attributes[ 'position' ].array; for ( var i = 0, il = positions.length; i < il; i += 3 ) { v1.fromArray( positions, i ); v1.applyMatrix4( node.matrixWorld ); scope.expandByPoint( v1 ); } } } } ); return this; }; }(), clone: function () { return new this.constructor().copy( this ); }, copy: function ( box ) { this.min.copy( box.min ); this.max.copy( box.max ); return this; }, makeEmpty: function () { this.min.x = this.min.y = this.min.z = + Infinity; this.max.x = this.max.y = this.max.z = - Infinity; return this; }, isEmpty: function () { // this is a more robust check for empty than ( volume <= 0 ) because volume can get positive with two negative axes return ( this.max.x < this.min.x ) || ( this.max.y < this.min.y ) || ( this.max.z < this.min.z ); }, center: function ( optionalTarget ) { var result = optionalTarget || new THREE.Vector3(); return result.addVectors( this.min, this.max ).multiplyScalar( 0.5 ); }, size: function ( optionalTarget ) { var result = optionalTarget || new THREE.Vector3(); return result.subVectors( this.max, this.min ); }, expandByPoint: function ( point ) { this.min.min( point ); this.max.max( point ); return this; }, expandByVector: function ( vector ) { this.min.sub( vector ); this.max.add( vector ); return this; }, expandByScalar: function ( scalar ) { this.min.addScalar( - scalar ); this.max.addScalar( scalar ); return this; }, containsPoint: function ( point ) { if ( point.x < this.min.x || point.x > this.max.x || point.y < this.min.y || point.y > this.max.y || point.z < this.min.z || point.z > this.max.z ) { return false; } return true; }, containsBox: function ( box ) { if ( ( this.min.x <= box.min.x ) && ( box.max.x <= this.max.x ) && ( this.min.y <= box.min.y ) && ( box.max.y <= this.max.y ) && ( this.min.z <= box.min.z ) && ( box.max.z <= this.max.z ) ) { return true; } return false; }, getParameter: function ( point, optionalTarget ) { // This can potentially have a divide by zero if the box // has a size dimension of 0. var result = optionalTarget || new THREE.Vector3(); return result.set( ( point.x - this.min.x ) / ( this.max.x - this.min.x ), ( point.y - this.min.y ) / ( this.max.y - this.min.y ), ( point.z - this.min.z ) / ( this.max.z - this.min.z ) ); }, intersectsBox: function ( box ) { // using 6 splitting planes to rule out intersections. if ( box.max.x < this.min.x || box.min.x > this.max.x || box.max.y < this.min.y || box.min.y > this.max.y || box.max.z < this.min.z || box.min.z > this.max.z ) { return false; } return true; }, intersectsSphere: ( function () { var closestPoint; return function intersectsSphere( sphere ) { if ( closestPoint === undefined ) closestPoint = new THREE.Vector3(); // Find the point on the AABB closest to the sphere center. this.clampPoint( sphere.center, closestPoint ); // If that point is inside the sphere, the AABB and sphere intersect. return closestPoint.distanceToSquared( sphere.center ) <= ( sphere.radius * sphere.radius ); }; } )(), intersectsPlane: function ( plane ) { // We compute the minimum and maximum dot product values. If those values // are on the same side (back or front) of the plane, then there is no intersection. var min, max; if ( plane.normal.x > 0 ) { min = plane.normal.x * this.min.x; max = plane.normal.x * this.max.x; } else { min = plane.normal.x * this.max.x; max = plane.normal.x * this.min.x; } if ( plane.normal.y > 0 ) { min += plane.normal.y * this.min.y; max += plane.normal.y * this.max.y; } else { min += plane.normal.y * this.max.y; max += plane.normal.y * this.min.y; } if ( plane.normal.z > 0 ) { min += plane.normal.z * this.min.z; max += plane.normal.z * this.max.z; } else { min += plane.normal.z * this.max.z; max += plane.normal.z * this.min.z; } return ( min <= plane.constant && max >= plane.constant ); }, clampPoint: function ( point, optionalTarget ) { var result = optionalTarget || new THREE.Vector3(); return result.copy( point ).clamp( this.min, this.max ); }, distanceToPoint: function () { var v1 = new THREE.Vector3(); return function distanceToPoint( point ) { var clampedPoint = v1.copy( point ).clamp( this.min, this.max ); return clampedPoint.sub( point ).length(); }; }(), getBoundingSphere: function () { var v1 = new THREE.Vector3(); return function getBoundingSphere( optionalTarget ) { var result = optionalTarget || new THREE.Sphere(); result.center = this.center(); result.radius = this.size( v1 ).length() * 0.5; return result; }; }(), intersect: function ( box ) { this.min.max( box.min ); this.max.min( box.max ); // ensure that if there is no overlap, the result is fully empty, not slightly empty with non-inf/+inf values that will cause subsequence intersects to erroneously return valid values. if( this.isEmpty() ) this.makeEmpty(); return this; }, union: function ( box ) { this.min.min( box.min ); this.max.max( box.max ); return this; }, applyMatrix4: function () { var points = [ new THREE.Vector3(), new THREE.Vector3(), new THREE.Vector3(), new THREE.Vector3(), new THREE.Vector3(), new THREE.Vector3(), new THREE.Vector3(), new THREE.Vector3() ]; return function applyMatrix4( matrix ) { // transform of empty box is an empty box. if( this.isEmpty() ) return this; // NOTE: I am using a binary pattern to specify all 2^3 combinations below points[ 0 ].set( this.min.x, this.min.y, this.min.z ).applyMatrix4( matrix ); // 000 points[ 1 ].set( this.min.x, this.min.y, this.max.z ).applyMatrix4( matrix ); // 001 points[ 2 ].set( this.min.x, this.max.y, this.min.z ).applyMatrix4( matrix ); // 010 points[ 3 ].set( this.min.x, this.max.y, this.max.z ).applyMatrix4( matrix ); // 011 points[ 4 ].set( this.max.x, this.min.y, this.min.z ).applyMatrix4( matrix ); // 100 points[ 5 ].set( this.max.x, this.min.y, this.max.z ).applyMatrix4( matrix ); // 101 points[ 6 ].set( this.max.x, this.max.y, this.min.z ).applyMatrix4( matrix ); // 110 points[ 7 ].set( this.max.x, this.max.y, this.max.z ).applyMatrix4( matrix ); // 111 this.setFromPoints( points ); return this; }; }(), translate: function ( offset ) { this.min.add( offset ); this.max.add( offset ); return this; }, equals: function ( box ) { return box.min.equals( this.min ) && box.max.equals( this.max ); } }; // File:src/math/Matrix3.js /** * @author alteredq / http://alteredqualia.com/ * @author WestLangley / http://github.com/WestLangley * @author bhouston / http://clara.io * @author tschw */ THREE.Matrix3 = function () { this.elements = new Float32Array( [ 1, 0, 0, 0, 1, 0, 0, 0, 1 ] ); if ( arguments.length > 0 ) { console.error( 'THREE.Matrix3: the constructor no longer reads arguments. use .set() instead.' ); } }; THREE.Matrix3.prototype = { constructor: THREE.Matrix3, set: function ( n11, n12, n13, n21, n22, n23, n31, n32, n33 ) { var te = this.elements; te[ 0 ] = n11; te[ 1 ] = n21; te[ 2 ] = n31; te[ 3 ] = n12; te[ 4 ] = n22; te[ 5 ] = n32; te[ 6 ] = n13; te[ 7 ] = n23; te[ 8 ] = n33; return this; }, identity: function () { this.set( 1, 0, 0, 0, 1, 0, 0, 0, 1 ); return this; }, clone: function () { return new this.constructor().fromArray( this.elements ); }, copy: function ( m ) { var me = m.elements; this.set( me[ 0 ], me[ 3 ], me[ 6 ], me[ 1 ], me[ 4 ], me[ 7 ], me[ 2 ], me[ 5 ], me[ 8 ] ); return this; }, setFromMatrix4: function( m ) { var me = m.elements; this.set( me[ 0 ], me[ 4 ], me[ 8 ], me[ 1 ], me[ 5 ], me[ 9 ], me[ 2 ], me[ 6 ], me[ 10 ] ); return this; }, applyToVector3Array: function () { var v1; return function applyToVector3Array( array, offset, length ) { if ( v1 === undefined ) v1 = new THREE.Vector3(); if ( offset === undefined ) offset = 0; if ( length === undefined ) length = array.length; for ( var i = 0, j = offset; i < length; i += 3, j += 3 ) { v1.fromArray( array, j ); v1.applyMatrix3( this ); v1.toArray( array, j ); } return array; }; }(), applyToBuffer: function () { var v1; return function applyToBuffer( buffer, offset, length ) { if ( v1 === undefined ) v1 = new THREE.Vector3(); if ( offset === undefined ) offset = 0; if ( length === undefined ) length = buffer.length / buffer.itemSize; for ( var i = 0, j = offset; i < length; i ++, j ++ ) { v1.x = buffer.getX( j ); v1.y = buffer.getY( j ); v1.z = buffer.getZ( j ); v1.applyMatrix3( this ); buffer.setXYZ( v1.x, v1.y, v1.z ); } return buffer; }; }(), multiplyScalar: function ( s ) { var te = this.elements; te[ 0 ] *= s; te[ 3 ] *= s; te[ 6 ] *= s; te[ 1 ] *= s; te[ 4 ] *= s; te[ 7 ] *= s; te[ 2 ] *= s; te[ 5 ] *= s; te[ 8 ] *= s; return this; }, determinant: function () { var te = this.elements; var a = te[ 0 ], b = te[ 1 ], c = te[ 2 ], d = te[ 3 ], e = te[ 4 ], f = te[ 5 ], g = te[ 6 ], h = te[ 7 ], i = te[ 8 ]; return a * e * i - a * f * h - b * d * i + b * f * g + c * d * h - c * e * g; }, getInverse: function ( matrix, throwOnDegenerate ) { if ( matrix instanceof THREE.Matrix4 ) { console.error( "THREE.Matrix3.getInverse no longer takes a Matrix4 argument." ); } var me = matrix.elements, te = this.elements, n11 = me[ 0 ], n21 = me[ 1 ], n31 = me[ 2 ], n12 = me[ 3 ], n22 = me[ 4 ], n32 = me[ 5 ], n13 = me[ 6 ], n23 = me[ 7 ], n33 = me[ 8 ], t11 = n33 * n22 - n32 * n23, t12 = n32 * n13 - n33 * n12, t13 = n23 * n12 - n22 * n13, det = n11 * t11 + n21 * t12 + n31 * t13; if ( det === 0 ) { var msg = "THREE.Matrix3.getInverse(): can't invert matrix, determinant is 0"; if ( throwOnDegenerate || false ) { throw new Error( msg ); } else { console.warn( msg ); } return this.identity(); } var detInv = 1 / det; te[ 0 ] = t11 * detInv; te[ 1 ] = ( n31 * n23 - n33 * n21 ) * detInv; te[ 2 ] = ( n32 * n21 - n31 * n22 ) * detInv; te[ 3 ] = t12 * detInv; te[ 4 ] = ( n33 * n11 - n31 * n13 ) * detInv; te[ 5 ] = ( n31 * n12 - n32 * n11 ) * detInv; te[ 6 ] = t13 * detInv; te[ 7 ] = ( n21 * n13 - n23 * n11 ) * detInv; te[ 8 ] = ( n22 * n11 - n21 * n12 ) * detInv; return this; }, transpose: function () { var tmp, m = this.elements; tmp = m[ 1 ]; m[ 1 ] = m[ 3 ]; m[ 3 ] = tmp; tmp = m[ 2 ]; m[ 2 ] = m[ 6 ]; m[ 6 ] = tmp; tmp = m[ 5 ]; m[ 5 ] = m[ 7 ]; m[ 7 ] = tmp; return this; }, flattenToArrayOffset: function ( array, offset ) { console.warn( "THREE.Matrix3: .flattenToArrayOffset is deprecated " + "- just use .toArray instead." ); return this.toArray( array, offset ); }, getNormalMatrix: function ( matrix4 ) { return this.setFromMatrix4( matrix4 ).getInverse( this ).transpose(); }, transposeIntoArray: function ( r ) { var m = this.elements; r[ 0 ] = m[ 0 ]; r[ 1 ] = m[ 3 ]; r[ 2 ] = m[ 6 ]; r[ 3 ] = m[ 1 ]; r[ 4 ] = m[ 4 ]; r[ 5 ] = m[ 7 ]; r[ 6 ] = m[ 2 ]; r[ 7 ] = m[ 5 ]; r[ 8 ] = m[ 8 ]; return this; }, fromArray: function ( array ) { this.elements.set( array ); return this; }, toArray: function ( array, offset ) { if ( array === undefined ) array = []; if ( offset === undefined ) offset = 0; var te = this.elements; array[ offset ] = te[ 0 ]; array[ offset + 1 ] = te[ 1 ]; array[ offset + 2 ] = te[ 2 ]; array[ offset + 3 ] = te[ 3 ]; array[ offset + 4 ] = te[ 4 ]; array[ offset + 5 ] = te[ 5 ]; array[ offset + 6 ] = te[ 6 ]; array[ offset + 7 ] = te[ 7 ]; array[ offset + 8 ] = te[ 8 ]; return array; } }; // File:src/math/Matrix4.js /** * @author mrdoob / http://mrdoob.com/ * @author supereggbert / http://www.paulbrunt.co.uk/ * @author philogb / http://blog.thejit.org/ * @author jordi_ros / http://plattsoft.com * @author D1plo1d / http://github.com/D1plo1d * @author alteredq / http://alteredqualia.com/ * @author mikael emtinger / http://gomo.se/ * @author timknip / http://www.floorplanner.com/ * @author bhouston / http://clara.io * @author WestLangley / http://github.com/WestLangley */ THREE.Matrix4 = function () { this.elements = new Float32Array( [ 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1 ] ); if ( arguments.length > 0 ) { console.error( 'THREE.Matrix4: the constructor no longer reads arguments. use .set() instead.' ); } }; THREE.Matrix4.prototype = { constructor: THREE.Matrix4, set: function ( n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44 ) { var te = this.elements; te[ 0 ] = n11; te[ 4 ] = n12; te[ 8 ] = n13; te[ 12 ] = n14; te[ 1 ] = n21; te[ 5 ] = n22; te[ 9 ] = n23; te[ 13 ] = n24; te[ 2 ] = n31; te[ 6 ] = n32; te[ 10 ] = n33; te[ 14 ] = n34; te[ 3 ] = n41; te[ 7 ] = n42; te[ 11 ] = n43; te[ 15 ] = n44; return this; }, identity: function () { this.set( 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1 ); return this; }, clone: function () { return new THREE.Matrix4().fromArray( this.elements ); }, copy: function ( m ) { this.elements.set( m.elements ); return this; }, copyPosition: function ( m ) { var te = this.elements; var me = m.elements; te[ 12 ] = me[ 12 ]; te[ 13 ] = me[ 13 ]; te[ 14 ] = me[ 14 ]; return this; }, extractBasis: function ( xAxis, yAxis, zAxis ) { xAxis.setFromMatrixColumn( this, 0 ); yAxis.setFromMatrixColumn( this, 1 ); zAxis.setFromMatrixColumn( this, 2 ); return this; }, makeBasis: function ( xAxis, yAxis, zAxis ) { this.set( xAxis.x, yAxis.x, zAxis.x, 0, xAxis.y, yAxis.y, zAxis.y, 0, xAxis.z, yAxis.z, zAxis.z, 0, 0, 0, 0, 1 ); return this; }, extractRotation: function () { var v1; return function extractRotation( m ) { if ( v1 === undefined ) v1 = new THREE.Vector3(); var te = this.elements; var me = m.elements; var scaleX = 1 / v1.setFromMatrixColumn( m, 0 ).length(); var scaleY = 1 / v1.setFromMatrixColumn( m, 1 ).length(); var scaleZ = 1 / v1.setFromMatrixColumn( m, 2 ).length(); te[ 0 ] = me[ 0 ] * scaleX; te[ 1 ] = me[ 1 ] * scaleX; te[ 2 ] = me[ 2 ] * scaleX; te[ 4 ] = me[ 4 ] * scaleY; te[ 5 ] = me[ 5 ] * scaleY; te[ 6 ] = me[ 6 ] * scaleY; te[ 8 ] = me[ 8 ] * scaleZ; te[ 9 ] = me[ 9 ] * scaleZ; te[ 10 ] = me[ 10 ] * scaleZ; return this; }; }(), makeRotationFromEuler: function ( euler ) { if ( euler instanceof THREE.Euler === false ) { console.error( 'THREE.Matrix: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order.' ); } var te = this.elements; var x = euler.x, y = euler.y, z = euler.z; var a = Math.cos( x ), b = Math.sin( x ); var c = Math.cos( y ), d = Math.sin( y ); var e = Math.cos( z ), f = Math.sin( z ); if ( euler.order === 'XYZ' ) { var ae = a * e, af = a * f, be = b * e, bf = b * f; te[ 0 ] = c * e; te[ 4 ] = - c * f; te[ 8 ] = d; te[ 1 ] = af + be * d; te[ 5 ] = ae - bf * d; te[ 9 ] = - b * c; te[ 2 ] = bf - ae * d; te[ 6 ] = be + af * d; te[ 10 ] = a * c; } else if ( euler.order === 'YXZ' ) { var ce = c * e, cf = c * f, de = d * e, df = d * f; te[ 0 ] = ce + df * b; te[ 4 ] = de * b - cf; te[ 8 ] = a * d; te[ 1 ] = a * f; te[ 5 ] = a * e; te[ 9 ] = - b; te[ 2 ] = cf * b - de; te[ 6 ] = df + ce * b; te[ 10 ] = a * c; } else if ( euler.order === 'ZXY' ) { var ce = c * e, cf = c * f, de = d * e, df = d * f; te[ 0 ] = ce - df * b; te[ 4 ] = - a * f; te[ 8 ] = de + cf * b; te[ 1 ] = cf + de * b; te[ 5 ] = a * e; te[ 9 ] = df - ce * b; te[ 2 ] = - a * d; te[ 6 ] = b; te[ 10 ] = a * c; } else if ( euler.order === 'ZYX' ) { var ae = a * e, af = a * f, be = b * e, bf = b * f; te[ 0 ] = c * e; te[ 4 ] = be * d - af; te[ 8 ] = ae * d + bf; te[ 1 ] = c * f; te[ 5 ] = bf * d + ae; te[ 9 ] = af * d - be; te[ 2 ] = - d; te[ 6 ] = b * c; te[ 10 ] = a * c; } else if ( euler.order === 'YZX' ) { var ac = a * c, ad = a * d, bc = b * c, bd = b * d; te[ 0 ] = c * e; te[ 4 ] = bd - ac * f; te[ 8 ] = bc * f + ad; te[ 1 ] = f; te[ 5 ] = a * e; te[ 9 ] = - b * e; te[ 2 ] = - d * e; te[ 6 ] = ad * f + bc; te[ 10 ] = ac - bd * f; } else if ( euler.order === 'XZY' ) { var ac = a * c, ad = a * d, bc = b * c, bd = b * d; te[ 0 ] = c * e; te[ 4 ] = - f; te[ 8 ] = d * e; te[ 1 ] = ac * f + bd; te[ 5 ] = a * e; te[ 9 ] = ad * f - bc; te[ 2 ] = bc * f - ad; te[ 6 ] = b * e; te[ 10 ] = bd * f + ac; } // last column te[ 3 ] = 0; te[ 7 ] = 0; te[ 11 ] = 0; // bottom row te[ 12 ] = 0; te[ 13 ] = 0; te[ 14 ] = 0; te[ 15 ] = 1; return this; }, makeRotationFromQuaternion: function ( q ) { var te = this.elements; var x = q.x, y = q.y, z = q.z, w = q.w; var x2 = x + x, y2 = y + y, z2 = z + z; var xx = x * x2, xy = x * y2, xz = x * z2; var yy = y * y2, yz = y * z2, zz = z * z2; var wx = w * x2, wy = w * y2, wz = w * z2; te[ 0 ] = 1 - ( yy + zz ); te[ 4 ] = xy - wz; te[ 8 ] = xz + wy; te[ 1 ] = xy + wz; te[ 5 ] = 1 - ( xx + zz ); te[ 9 ] = yz - wx; te[ 2 ] = xz - wy; te[ 6 ] = yz + wx; te[ 10 ] = 1 - ( xx + yy ); // last column te[ 3 ] = 0; te[ 7 ] = 0; te[ 11 ] = 0; // bottom row te[ 12 ] = 0; te[ 13 ] = 0; te[ 14 ] = 0; te[ 15 ] = 1; return this; }, lookAt: function () { var x, y, z; return function lookAt( eye, target, up ) { if ( x === undefined ) { x = new THREE.Vector3(); y = new THREE.Vector3(); z = new THREE.Vector3(); } var te = this.elements; z.subVectors( eye, target ).normalize(); if ( z.lengthSq() === 0 ) { z.z = 1; } x.crossVectors( up, z ).normalize(); if ( x.lengthSq() === 0 ) { z.z += 0.0001; x.crossVectors( up, z ).normalize(); } y.crossVectors( z, x ); te[ 0 ] = x.x; te[ 4 ] = y.x; te[ 8 ] = z.x; te[ 1 ] = x.y; te[ 5 ] = y.y; te[ 9 ] = z.y; te[ 2 ] = x.z; te[ 6 ] = y.z; te[ 10 ] = z.z; return this; }; }(), multiply: function ( m, n ) { if ( n !== undefined ) { console.warn( 'THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead.' ); return this.multiplyMatrices( m, n ); } return this.multiplyMatrices( this, m ); }, premultiply: function ( m ) { return this.multiplyMatrices( m, this ); }, multiplyMatrices: function ( a, b ) { var ae = a.elements; var be = b.elements; var te = this.elements; var a11 = ae[ 0 ], a12 = ae[ 4 ], a13 = ae[ 8 ], a14 = ae[ 12 ]; var a21 = ae[ 1 ], a22 = ae[ 5 ], a23 = ae[ 9 ], a24 = ae[ 13 ]; var a31 = ae[ 2 ], a32 = ae[ 6 ], a33 = ae[ 10 ], a34 = ae[ 14 ]; var a41 = ae[ 3 ], a42 = ae[ 7 ], a43 = ae[ 11 ], a44 = ae[ 15 ]; var b11 = be[ 0 ], b12 = be[ 4 ], b13 = be[ 8 ], b14 = be[ 12 ]; var b21 = be[ 1 ], b22 = be[ 5 ], b23 = be[ 9 ], b24 = be[ 13 ]; var b31 = be[ 2 ], b32 = be[ 6 ], b33 = be[ 10 ], b34 = be[ 14 ]; var b41 = be[ 3 ], b42 = be[ 7 ], b43 = be[ 11 ], b44 = be[ 15 ]; te[ 0 ] = a11 * b11 + a12 * b21 + a13 * b31 + a14 * b41; te[ 4 ] = a11 * b12 + a12 * b22 + a13 * b32 + a14 * b42; te[ 8 ] = a11 * b13 + a12 * b23 + a13 * b33 + a14 * b43; te[ 12 ] = a11 * b14 + a12 * b24 + a13 * b34 + a14 * b44; te[ 1 ] = a21 * b11 + a22 * b21 + a23 * b31 + a24 * b41; te[ 5 ] = a21 * b12 + a22 * b22 + a23 * b32 + a24 * b42; te[ 9 ] = a21 * b13 + a22 * b23 + a23 * b33 + a24 * b43; te[ 13 ] = a21 * b14 + a22 * b24 + a23 * b34 + a24 * b44; te[ 2 ] = a31 * b11 + a32 * b21 + a33 * b31 + a34 * b41; te[ 6 ] = a31 * b12 + a32 * b22 + a33 * b32 + a34 * b42; te[ 10 ] = a31 * b13 + a32 * b23 + a33 * b33 + a34 * b43; te[ 14 ] = a31 * b14 + a32 * b24 + a33 * b34 + a34 * b44; te[ 3 ] = a41 * b11 + a42 * b21 + a43 * b31 + a44 * b41; te[ 7 ] = a41 * b12 + a42 * b22 + a43 * b32 + a44 * b42; te[ 11 ] = a41 * b13 + a42 * b23 + a43 * b33 + a44 * b43; te[ 15 ] = a41 * b14 + a42 * b24 + a43 * b34 + a44 * b44; return this; }, multiplyToArray: function ( a, b, r ) { var te = this.elements; this.multiplyMatrices( a, b ); r[ 0 ] = te[ 0 ]; r[ 1 ] = te[ 1 ]; r[ 2 ] = te[ 2 ]; r[ 3 ] = te[ 3 ]; r[ 4 ] = te[ 4 ]; r[ 5 ] = te[ 5 ]; r[ 6 ] = te[ 6 ]; r[ 7 ] = te[ 7 ]; r[ 8 ] = te[ 8 ]; r[ 9 ] = te[ 9 ]; r[ 10 ] = te[ 10 ]; r[ 11 ] = te[ 11 ]; r[ 12 ] = te[ 12 ]; r[ 13 ] = te[ 13 ]; r[ 14 ] = te[ 14 ]; r[ 15 ] = te[ 15 ]; return this; }, multiplyScalar: function ( s ) { var te = this.elements; te[ 0 ] *= s; te[ 4 ] *= s; te[ 8 ] *= s; te[ 12 ] *= s; te[ 1 ] *= s; te[ 5 ] *= s; te[ 9 ] *= s; te[ 13 ] *= s; te[ 2 ] *= s; te[ 6 ] *= s; te[ 10 ] *= s; te[ 14 ] *= s; te[ 3 ] *= s; te[ 7 ] *= s; te[ 11 ] *= s; te[ 15 ] *= s; return this; }, applyToVector3Array: function () { var v1; return function applyToVector3Array( array, offset, length ) { if ( v1 === undefined ) v1 = new THREE.Vector3(); if ( offset === undefined ) offset = 0; if ( length === undefined ) length = array.length; for ( var i = 0, j = offset; i < length; i += 3, j += 3 ) { v1.fromArray( array, j ); v1.applyMatrix4( this ); v1.toArray( array, j ); } return array; }; }(), applyToBuffer: function () { var v1; return function applyToBuffer( buffer, offset, length ) { if ( v1 === undefined ) v1 = new THREE.Vector3(); if ( offset === undefined ) offset = 0; if ( length === undefined ) length = buffer.length / buffer.itemSize; for ( var i = 0, j = offset; i < length; i ++, j ++ ) { v1.x = buffer.getX( j ); v1.y = buffer.getY( j ); v1.z = buffer.getZ( j ); v1.applyMatrix4( this ); buffer.setXYZ( v1.x, v1.y, v1.z ); } return buffer; }; }(), determinant: function () { var te = this.elements; var n11 = te[ 0 ], n12 = te[ 4 ], n13 = te[ 8 ], n14 = te[ 12 ]; var n21 = te[ 1 ], n22 = te[ 5 ], n23 = te[ 9 ], n24 = te[ 13 ]; var n31 = te[ 2 ], n32 = te[ 6 ], n33 = te[ 10 ], n34 = te[ 14 ]; var n41 = te[ 3 ], n42 = te[ 7 ], n43 = te[ 11 ], n44 = te[ 15 ]; //TODO: make this more efficient //( based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm ) return ( n41 * ( + n14 * n23 * n32 - n13 * n24 * n32 - n14 * n22 * n33 + n12 * n24 * n33 + n13 * n22 * n34 - n12 * n23 * n34 ) + n42 * ( + n11 * n23 * n34 - n11 * n24 * n33 + n14 * n21 * n33 - n13 * n21 * n34 + n13 * n24 * n31 - n14 * n23 * n31 ) + n43 * ( + n11 * n24 * n32 - n11 * n22 * n34 - n14 * n21 * n32 + n12 * n21 * n34 + n14 * n22 * n31 - n12 * n24 * n31 ) + n44 * ( - n13 * n22 * n31 - n11 * n23 * n32 + n11 * n22 * n33 + n13 * n21 * n32 - n12 * n21 * n33 + n12 * n23 * n31 ) ); }, transpose: function () { var te = this.elements; var tmp; tmp = te[ 1 ]; te[ 1 ] = te[ 4 ]; te[ 4 ] = tmp; tmp = te[ 2 ]; te[ 2 ] = te[ 8 ]; te[ 8 ] = tmp; tmp = te[ 6 ]; te[ 6 ] = te[ 9 ]; te[ 9 ] = tmp; tmp = te[ 3 ]; te[ 3 ] = te[ 12 ]; te[ 12 ] = tmp; tmp = te[ 7 ]; te[ 7 ] = te[ 13 ]; te[ 13 ] = tmp; tmp = te[ 11 ]; te[ 11 ] = te[ 14 ]; te[ 14 ] = tmp; return this; }, flattenToArrayOffset: function ( array, offset ) { console.warn( "THREE.Matrix3: .flattenToArrayOffset is deprecated " + "- just use .toArray instead." ); return this.toArray( array, offset ); }, getPosition: function () { var v1; return function getPosition() { if ( v1 === undefined ) v1 = new THREE.Vector3(); console.warn( 'THREE.Matrix4: .getPosition() has been removed. Use Vector3.setFromMatrixPosition( matrix ) instead.' ); return v1.setFromMatrixColumn( this, 3 ); }; }(), setPosition: function ( v ) { var te = this.elements; te[ 12 ] = v.x; te[ 13 ] = v.y; te[ 14 ] = v.z; return this; }, getInverse: function ( m, throwOnDegenerate ) { // based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm var te = this.elements, me = m.elements, n11 = me[ 0 ], n21 = me[ 1 ], n31 = me[ 2 ], n41 = me[ 3 ], n12 = me[ 4 ], n22 = me[ 5 ], n32 = me[ 6 ], n42 = me[ 7 ], n13 = me[ 8 ], n23 = me[ 9 ], n33 = me[ 10 ], n43 = me[ 11 ], n14 = me[ 12 ], n24 = me[ 13 ], n34 = me[ 14 ], n44 = me[ 15 ], t11 = n23 * n34 * n42 - n24 * n33 * n42 + n24 * n32 * n43 - n22 * n34 * n43 - n23 * n32 * n44 + n22 * n33 * n44, t12 = n14 * n33 * n42 - n13 * n34 * n42 - n14 * n32 * n43 + n12 * n34 * n43 + n13 * n32 * n44 - n12 * n33 * n44, t13 = n13 * n24 * n42 - n14 * n23 * n42 + n14 * n22 * n43 - n12 * n24 * n43 - n13 * n22 * n44 + n12 * n23 * n44, t14 = n14 * n23 * n32 - n13 * n24 * n32 - n14 * n22 * n33 + n12 * n24 * n33 + n13 * n22 * n34 - n12 * n23 * n34; var det = n11 * t11 + n21 * t12 + n31 * t13 + n41 * t14; if ( det === 0 ) { var msg = "THREE.Matrix4.getInverse(): can't invert matrix, determinant is 0"; if ( throwOnDegenerate || false ) { throw new Error( msg ); } else { console.warn( msg ); } return this.identity(); } var detInv = 1 / det; te[ 0 ] = t11 * detInv; te[ 1 ] = ( n24 * n33 * n41 - n23 * n34 * n41 - n24 * n31 * n43 + n21 * n34 * n43 + n23 * n31 * n44 - n21 * n33 * n44 ) * detInv; te[ 2 ] = ( n22 * n34 * n41 - n24 * n32 * n41 + n24 * n31 * n42 - n21 * n34 * n42 - n22 * n31 * n44 + n21 * n32 * n44 ) * detInv; te[ 3 ] = ( n23 * n32 * n41 - n22 * n33 * n41 - n23 * n31 * n42 + n21 * n33 * n42 + n22 * n31 * n43 - n21 * n32 * n43 ) * detInv; te[ 4 ] = t12 * detInv; te[ 5 ] = ( n13 * n34 * n41 - n14 * n33 * n41 + n14 * n31 * n43 - n11 * n34 * n43 - n13 * n31 * n44 + n11 * n33 * n44 ) * detInv; te[ 6 ] = ( n14 * n32 * n41 - n12 * n34 * n41 - n14 * n31 * n42 + n11 * n34 * n42 + n12 * n31 * n44 - n11 * n32 * n44 ) * detInv; te[ 7 ] = ( n12 * n33 * n41 - n13 * n32 * n41 + n13 * n31 * n42 - n11 * n33 * n42 - n12 * n31 * n43 + n11 * n32 * n43 ) * detInv; te[ 8 ] = t13 * detInv; te[ 9 ] = ( n14 * n23 * n41 - n13 * n24 * n41 - n14 * n21 * n43 + n11 * n24 * n43 + n13 * n21 * n44 - n11 * n23 * n44 ) * detInv; te[ 10 ] = ( n12 * n24 * n41 - n14 * n22 * n41 + n14 * n21 * n42 - n11 * n24 * n42 - n12 * n21 * n44 + n11 * n22 * n44 ) * detInv; te[ 11 ] = ( n13 * n22 * n41 - n12 * n23 * n41 - n13 * n21 * n42 + n11 * n23 * n42 + n12 * n21 * n43 - n11 * n22 * n43 ) * detInv; te[ 12 ] = t14 * detInv; te[ 13 ] = ( n13 * n24 * n31 - n14 * n23 * n31 + n14 * n21 * n33 - n11 * n24 * n33 - n13 * n21 * n34 + n11 * n23 * n34 ) * detInv; te[ 14 ] = ( n14 * n22 * n31 - n12 * n24 * n31 - n14 * n21 * n32 + n11 * n24 * n32 + n12 * n21 * n34 - n11 * n22 * n34 ) * detInv; te[ 15 ] = ( n12 * n23 * n31 - n13 * n22 * n31 + n13 * n21 * n32 - n11 * n23 * n32 - n12 * n21 * n33 + n11 * n22 * n33 ) * detInv; return this; }, scale: function ( v ) { var te = this.elements; var x = v.x, y = v.y, z = v.z; te[ 0 ] *= x; te[ 4 ] *= y; te[ 8 ] *= z; te[ 1 ] *= x; te[ 5 ] *= y; te[ 9 ] *= z; te[ 2 ] *= x; te[ 6 ] *= y; te[ 10 ] *= z; te[ 3 ] *= x; te[ 7 ] *= y; te[ 11 ] *= z; return this; }, getMaxScaleOnAxis: function () { var te = this.elements; var scaleXSq = te[ 0 ] * te[ 0 ] + te[ 1 ] * te[ 1 ] + te[ 2 ] * te[ 2 ]; var scaleYSq = te[ 4 ] * te[ 4 ] + te[ 5 ] * te[ 5 ] + te[ 6 ] * te[ 6 ]; var scaleZSq = te[ 8 ] * te[ 8 ] + te[ 9 ] * te[ 9 ] + te[ 10 ] * te[ 10 ]; return Math.sqrt( Math.max( scaleXSq, scaleYSq, scaleZSq ) ); }, makeTranslation: function ( x, y, z ) { this.set( 1, 0, 0, x, 0, 1, 0, y, 0, 0, 1, z, 0, 0, 0, 1 ); return this; }, makeRotationX: function ( theta ) { var c = Math.cos( theta ), s = Math.sin( theta ); this.set( 1, 0, 0, 0, 0, c, - s, 0, 0, s, c, 0, 0, 0, 0, 1 ); return this; }, makeRotationY: function ( theta ) { var c = Math.cos( theta ), s = Math.sin( theta ); this.set( c, 0, s, 0, 0, 1, 0, 0, - s, 0, c, 0, 0, 0, 0, 1 ); return this; }, makeRotationZ: function ( theta ) { var c = Math.cos( theta ), s = Math.sin( theta ); this.set( c, - s, 0, 0, s, c, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1 ); return this; }, makeRotationAxis: function ( axis, angle ) { // Based on http://www.gamedev.net/reference/articles/article1199.asp var c = Math.cos( angle ); var s = Math.sin( angle ); var t = 1 - c; var x = axis.x, y = axis.y, z = axis.z; var tx = t * x, ty = t * y; this.set( tx * x + c, tx * y - s * z, tx * z + s * y, 0, tx * y + s * z, ty * y + c, ty * z - s * x, 0, tx * z - s * y, ty * z + s * x, t * z * z + c, 0, 0, 0, 0, 1 ); return this; }, makeScale: function ( x, y, z ) { this.set( x, 0, 0, 0, 0, y, 0, 0, 0, 0, z, 0, 0, 0, 0, 1 ); return this; }, compose: function ( position, quaternion, scale ) { this.makeRotationFromQuaternion( quaternion ); this.scale( scale ); this.setPosition( position ); return this; }, decompose: function () { var vector, matrix; return function decompose( position, quaternion, scale ) { if ( vector === undefined ) { vector = new THREE.Vector3(); matrix = new THREE.Matrix4(); } var te = this.elements; var sx = vector.set( te[ 0 ], te[ 1 ], te[ 2 ] ).length(); var sy = vector.set( te[ 4 ], te[ 5 ], te[ 6 ] ).length(); var sz = vector.set( te[ 8 ], te[ 9 ], te[ 10 ] ).length(); // if determine is negative, we need to invert one scale var det = this.determinant(); if ( det < 0 ) { sx = - sx; } position.x = te[ 12 ]; position.y = te[ 13 ]; position.z = te[ 14 ]; // scale the rotation part matrix.elements.set( this.elements ); // at this point matrix is incomplete so we can't use .copy() var invSX = 1 / sx; var invSY = 1 / sy; var invSZ = 1 / sz; matrix.elements[ 0 ] *= invSX; matrix.elements[ 1 ] *= invSX; matrix.elements[ 2 ] *= invSX; matrix.elements[ 4 ] *= invSY; matrix.elements[ 5 ] *= invSY; matrix.elements[ 6 ] *= invSY; matrix.elements[ 8 ] *= invSZ; matrix.elements[ 9 ] *= invSZ; matrix.elements[ 10 ] *= invSZ; quaternion.setFromRotationMatrix( matrix ); scale.x = sx; scale.y = sy; scale.z = sz; return this; }; }(), makeFrustum: function ( left, right, bottom, top, near, far ) { var te = this.elements; var x = 2 * near / ( right - left ); var y = 2 * near / ( top - bottom ); var a = ( right + left ) / ( right - left ); var b = ( top + bottom ) / ( top - bottom ); var c = - ( far + near ) / ( far - near ); var d = - 2 * far * near / ( far - near ); te[ 0 ] = x; te[ 4 ] = 0; te[ 8 ] = a; te[ 12 ] = 0; te[ 1 ] = 0; te[ 5 ] = y; te[ 9 ] = b; te[ 13 ] = 0; te[ 2 ] = 0; te[ 6 ] = 0; te[ 10 ] = c; te[ 14 ] = d; te[ 3 ] = 0; te[ 7 ] = 0; te[ 11 ] = - 1; te[ 15 ] = 0; return this; }, makePerspective: function ( fov, aspect, near, far ) { var ymax = near * Math.tan( THREE.Math.DEG2RAD * fov * 0.5 ); var ymin = - ymax; var xmin = ymin * aspect; var xmax = ymax * aspect; return this.makeFrustum( xmin, xmax, ymin, ymax, near, far ); }, makeOrthographic: function ( left, right, top, bottom, near, far ) { var te = this.elements; var w = 1.0 / ( right - left ); var h = 1.0 / ( top - bottom ); var p = 1.0 / ( far - near ); var x = ( right + left ) * w; var y = ( top + bottom ) * h; var z = ( far + near ) * p; te[ 0 ] = 2 * w; te[ 4 ] = 0; te[ 8 ] = 0; te[ 12 ] = - x; te[ 1 ] = 0; te[ 5 ] = 2 * h; te[ 9 ] = 0; te[ 13 ] = - y; te[ 2 ] = 0; te[ 6 ] = 0; te[ 10 ] = - 2 * p; te[ 14 ] = - z; te[ 3 ] = 0; te[ 7 ] = 0; te[ 11 ] = 0; te[ 15 ] = 1; return this; }, equals: function ( matrix ) { var te = this.elements; var me = matrix.elements; for ( var i = 0; i < 16; i ++ ) { if ( te[ i ] !== me[ i ] ) return false; } return true; }, fromArray: function ( array ) { this.elements.set( array ); return this; }, toArray: function ( array, offset ) { if ( array === undefined ) array = []; if ( offset === undefined ) offset = 0; var te = this.elements; array[ offset ] = te[ 0 ]; array[ offset + 1 ] = te[ 1 ]; array[ offset + 2 ] = te[ 2 ]; array[ offset + 3 ] = te[ 3 ]; array[ offset + 4 ] = te[ 4 ]; array[ offset + 5 ] = te[ 5 ]; array[ offset + 6 ] = te[ 6 ]; array[ offset + 7 ] = te[ 7 ]; array[ offset + 8 ] = te[ 8 ]; array[ offset + 9 ] = te[ 9 ]; array[ offset + 10 ] = te[ 10 ]; array[ offset + 11 ] = te[ 11 ]; array[ offset + 12 ] = te[ 12 ]; array[ offset + 13 ] = te[ 13 ]; array[ offset + 14 ] = te[ 14 ]; array[ offset + 15 ] = te[ 15 ]; return array; } }; // File:src/math/Ray.js /** * @author bhouston / http://clara.io */ THREE.Ray = function ( origin, direction ) { this.origin = ( origin !== undefined ) ? origin : new THREE.Vector3(); this.direction = ( direction !== undefined ) ? direction : new THREE.Vector3(); }; THREE.Ray.prototype = { constructor: THREE.Ray, set: function ( origin, direction ) { this.origin.copy( origin ); this.direction.copy( direction ); return this; }, clone: function () { return new this.constructor().copy( this ); }, copy: function ( ray ) { this.origin.copy( ray.origin ); this.direction.copy( ray.direction ); return this; }, at: function ( t, optionalTarget ) { var result = optionalTarget || new THREE.Vector3(); return result.copy( this.direction ).multiplyScalar( t ).add( this.origin ); }, lookAt: function ( v ) { this.direction.copy( v ).sub( this.origin ).normalize(); return this; }, recast: function () { var v1 = new THREE.Vector3(); return function recast( t ) { this.origin.copy( this.at( t, v1 ) ); return this; }; }(), closestPointToPoint: function ( point, optionalTarget ) { var result = optionalTarget || new THREE.Vector3(); result.subVectors( point, this.origin ); var directionDistance = result.dot( this.direction ); if ( directionDistance < 0 ) { return result.copy( this.origin ); } return result.copy( this.direction ).multiplyScalar( directionDistance ).add( this.origin ); }, distanceToPoint: function ( point ) { return Math.sqrt( this.distanceSqToPoint( point ) ); }, distanceSqToPoint: function () { var v1 = new THREE.Vector3(); return function distanceSqToPoint( point ) { var directionDistance = v1.subVectors( point, this.origin ).dot( this.direction ); // point behind the ray if ( directionDistance < 0 ) { return this.origin.distanceToSquared( point ); } v1.copy( this.direction ).multiplyScalar( directionDistance ).add( this.origin ); return v1.distanceToSquared( point ); }; }(), distanceSqToSegment: function () { var segCenter = new THREE.Vector3(); var segDir = new THREE.Vector3(); var diff = new THREE.Vector3(); return function distanceSqToSegment( v0, v1, optionalPointOnRay, optionalPointOnSegment ) { // from http://www.geometrictools.com/GTEngine/Include/Mathematics/GteDistRaySegment.h // It returns the min distance between the ray and the segment // defined by v0 and v1 // It can also set two optional targets : // - The closest point on the ray // - The closest point on the segment segCenter.copy( v0 ).add( v1 ).multiplyScalar( 0.5 ); segDir.copy( v1 ).sub( v0 ).normalize(); diff.copy( this.origin ).sub( segCenter ); var segExtent = v0.distanceTo( v1 ) * 0.5; var a01 = - this.direction.dot( segDir ); var b0 = diff.dot( this.direction ); var b1 = - diff.dot( segDir ); var c = diff.lengthSq(); var det = Math.abs( 1 - a01 * a01 ); var s0, s1, sqrDist, extDet; if ( det > 0 ) { // The ray and segment are not parallel. s0 = a01 * b1 - b0; s1 = a01 * b0 - b1; extDet = segExtent * det; if ( s0 >= 0 ) { if ( s1 >= - extDet ) { if ( s1 <= extDet ) { // region 0 // Minimum at interior points of ray and segment. var invDet = 1 / det; s0 *= invDet; s1 *= invDet; sqrDist = s0 * ( s0 + a01 * s1 + 2 * b0 ) + s1 * ( a01 * s0 + s1 + 2 * b1 ) + c; } else { // region 1 s1 = segExtent; s0 = Math.max( 0, - ( a01 * s1 + b0 ) ); sqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c; } } else { // region 5 s1 = - segExtent; s0 = Math.max( 0, - ( a01 * s1 + b0 ) ); sqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c; } } else { if ( s1 <= - extDet ) { // region 4 s0 = Math.max( 0, - ( - a01 * segExtent + b0 ) ); s1 = ( s0 > 0 ) ? - segExtent : Math.min( Math.max( - segExtent, - b1 ), segExtent ); sqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c; } else if ( s1 <= extDet ) { // region 3 s0 = 0; s1 = Math.min( Math.max( - segExtent, - b1 ), segExtent ); sqrDist = s1 * ( s1 + 2 * b1 ) + c; } else { // region 2 s0 = Math.max( 0, - ( a01 * segExtent + b0 ) ); s1 = ( s0 > 0 ) ? segExtent : Math.min( Math.max( - segExtent, - b1 ), segExtent ); sqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c; } } } else { // Ray and segment are parallel. s1 = ( a01 > 0 ) ? - segExtent : segExtent; s0 = Math.max( 0, - ( a01 * s1 + b0 ) ); sqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c; } if ( optionalPointOnRay ) { optionalPointOnRay.copy( this.direction ).multiplyScalar( s0 ).add( this.origin ); } if ( optionalPointOnSegment ) { optionalPointOnSegment.copy( segDir ).multiplyScalar( s1 ).add( segCenter ); } return sqrDist; }; }(), intersectSphere: function () { var v1 = new THREE.Vector3(); return function intersectSphere( sphere, optionalTarget ) { v1.subVectors( sphere.center, this.origin ); var tca = v1.dot( this.direction ); var d2 = v1.dot( v1 ) - tca * tca; var radius2 = sphere.radius * sphere.radius; if ( d2 > radius2 ) return null; var thc = Math.sqrt( radius2 - d2 ); // t0 = first intersect point - entrance on front of sphere var t0 = tca - thc; // t1 = second intersect point - exit point on back of sphere var t1 = tca + thc; // test to see if both t0 and t1 are behind the ray - if so, return null if ( t0 < 0 && t1 < 0 ) return null; // test to see if t0 is behind the ray: // if it is, the ray is inside the sphere, so return the second exit point scaled by t1, // in order to always return an intersect point that is in front of the ray. if ( t0 < 0 ) return this.at( t1, optionalTarget ); // else t0 is in front of the ray, so return the first collision point scaled by t0 return this.at( t0, optionalTarget ); }; }(), intersectsSphere: function ( sphere ) { return this.distanceToPoint( sphere.center ) <= sphere.radius; }, distanceToPlane: function ( plane ) { var denominator = plane.normal.dot( this.direction ); if ( denominator === 0 ) { // line is coplanar, return origin if ( plane.distanceToPoint( this.origin ) === 0 ) { return 0; } // Null is preferable to undefined since undefined means.... it is undefined return null; } var t = - ( this.origin.dot( plane.normal ) + plane.constant ) / denominator; // Return if the ray never intersects the plane return t >= 0 ? t : null; }, intersectPlane: function ( plane, optionalTarget ) { var t = this.distanceToPlane( plane ); if ( t === null ) { return null; } return this.at( t, optionalTarget ); }, intersectsPlane: function ( plane ) { // check if the ray lies on the plane first var distToPoint = plane.distanceToPoint( this.origin ); if ( distToPoint === 0 ) { return true; } var denominator = plane.normal.dot( this.direction ); if ( denominator * distToPoint < 0 ) { return true; } // ray origin is behind the plane (and is pointing behind it) return false; }, intersectBox: function ( box, optionalTarget ) { var tmin, tmax, tymin, tymax, tzmin, tzmax; var invdirx = 1 / this.direction.x, invdiry = 1 / this.direction.y, invdirz = 1 / this.direction.z; var origin = this.origin; if ( invdirx >= 0 ) { tmin = ( box.min.x - origin.x ) * invdirx; tmax = ( box.max.x - origin.x ) * invdirx; } else { tmin = ( box.max.x - origin.x ) * invdirx; tmax = ( box.min.x - origin.x ) * invdirx; } if ( invdiry >= 0 ) { tymin = ( box.min.y - origin.y ) * invdiry; tymax = ( box.max.y - origin.y ) * invdiry; } else { tymin = ( box.max.y - origin.y ) * invdiry; tymax = ( box.min.y - origin.y ) * invdiry; } if ( ( tmin > tymax ) || ( tymin > tmax ) ) return null; // These lines also handle the case where tmin or tmax is NaN // (result of 0 * Infinity). x !== x returns true if x is NaN if ( tymin > tmin || tmin !== tmin ) tmin = tymin; if ( tymax < tmax || tmax !== tmax ) tmax = tymax; if ( invdirz >= 0 ) { tzmin = ( box.min.z - origin.z ) * invdirz; tzmax = ( box.max.z - origin.z ) * invdirz; } else { tzmin = ( box.max.z - origin.z ) * invdirz; tzmax = ( box.min.z - origin.z ) * invdirz; } if ( ( tmin > tzmax ) || ( tzmin > tmax ) ) return null; if ( tzmin > tmin || tmin !== tmin ) tmin = tzmin; if ( tzmax < tmax || tmax !== tmax ) tmax = tzmax; //return point closest to the ray (positive side) if ( tmax < 0 ) return null; return this.at( tmin >= 0 ? tmin : tmax, optionalTarget ); }, intersectsBox: ( function () { var v = new THREE.Vector3(); return function intersectsBox( box ) { return this.intersectBox( box, v ) !== null; }; } )(), intersectTriangle: function () { // Compute the offset origin, edges, and normal. var diff = new THREE.Vector3(); var edge1 = new THREE.Vector3(); var edge2 = new THREE.Vector3(); var normal = new THREE.Vector3(); return function intersectTriangle( a, b, c, backfaceCulling, optionalTarget ) { // from http://www.geometrictools.com/GTEngine/Include/Mathematics/GteIntrRay3Triangle3.h edge1.subVectors( b, a ); edge2.subVectors( c, a ); normal.crossVectors( edge1, edge2 ); // Solve Q + t*D = b1*E1 + b2*E2 (Q = kDiff, D = ray direction, // E1 = kEdge1, E2 = kEdge2, N = Cross(E1,E2)) by // |Dot(D,N)|*b1 = sign(Dot(D,N))*Dot(D,Cross(Q,E2)) // |Dot(D,N)|*b2 = sign(Dot(D,N))*Dot(D,Cross(E1,Q)) // |Dot(D,N)|*t = -sign(Dot(D,N))*Dot(Q,N) var DdN = this.direction.dot( normal ); var sign; if ( DdN > 0 ) { if ( backfaceCulling ) return null; sign = 1; } else if ( DdN < 0 ) { sign = - 1; DdN = - DdN; } else { return null; } diff.subVectors( this.origin, a ); var DdQxE2 = sign * this.direction.dot( edge2.crossVectors( diff, edge2 ) ); // b1 < 0, no intersection if ( DdQxE2 < 0 ) { return null; } var DdE1xQ = sign * this.direction.dot( edge1.cross( diff ) ); // b2 < 0, no intersection if ( DdE1xQ < 0 ) { return null; } // b1+b2 > 1, no intersection if ( DdQxE2 + DdE1xQ > DdN ) { return null; } // Line intersects triangle, check if ray does. var QdN = - sign * diff.dot( normal ); // t < 0, no intersection if ( QdN < 0 ) { return null; } // Ray intersects triangle. return this.at( QdN / DdN, optionalTarget ); }; }(), applyMatrix4: function ( matrix4 ) { this.direction.add( this.origin ).applyMatrix4( matrix4 ); this.origin.applyMatrix4( matrix4 ); this.direction.sub( this.origin ); this.direction.normalize(); return this; }, equals: function ( ray ) { return ray.origin.equals( this.origin ) && ray.direction.equals( this.direction ); } }; // File:src/math/Sphere.js /** * @author bhouston / http://clara.io * @author mrdoob / http://mrdoob.com/ */ THREE.Sphere = function ( center, radius ) { this.center = ( center !== undefined ) ? center : new THREE.Vector3(); this.radius = ( radius !== undefined ) ? radius : 0; }; THREE.Sphere.prototype = { constructor: THREE.Sphere, set: function ( center, radius ) { this.center.copy( center ); this.radius = radius; return this; }, setFromPoints: function () { var box = new THREE.Box3(); return function setFromPoints( points, optionalCenter ) { var center = this.center; if ( optionalCenter !== undefined ) { center.copy( optionalCenter ); } else { box.setFromPoints( points ).center( center ); } var maxRadiusSq = 0; for ( var i = 0, il = points.length; i < il; i ++ ) { maxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( points[ i ] ) ); } this.radius = Math.sqrt( maxRadiusSq ); return this; }; }(), clone: function () { return new this.constructor().copy( this ); }, copy: function ( sphere ) { this.center.copy( sphere.center ); this.radius = sphere.radius; return this; }, empty: function () { return ( this.radius <= 0 ); }, containsPoint: function ( point ) { return ( point.distanceToSquared( this.center ) <= ( this.radius * this.radius ) ); }, distanceToPoint: function ( point ) { return ( point.distanceTo( this.center ) - this.radius ); }, intersectsSphere: function ( sphere ) { var radiusSum = this.radius + sphere.radius; return sphere.center.distanceToSquared( this.center ) <= ( radiusSum * radiusSum ); }, intersectsBox: function ( box ) { return box.intersectsSphere( this ); }, intersectsPlane: function ( plane ) { // We use the following equation to compute the signed distance from // the center of the sphere to the plane. // // distance = q * n - d // // If this distance is greater than the radius of the sphere, // then there is no intersection. return Math.abs( this.center.dot( plane.normal ) - plane.constant ) <= this.radius; }, clampPoint: function ( point, optionalTarget ) { var deltaLengthSq = this.center.distanceToSquared( point ); var result = optionalTarget || new THREE.Vector3(); result.copy( point ); if ( deltaLengthSq > ( this.radius * this.radius ) ) { result.sub( this.center ).normalize(); result.multiplyScalar( this.radius ).add( this.center ); } return result; }, getBoundingBox: function ( optionalTarget ) { var box = optionalTarget || new THREE.Box3(); box.set( this.center, this.center ); box.expandByScalar( this.radius ); return box; }, applyMatrix4: function ( matrix ) { this.center.applyMatrix4( matrix ); this.radius = this.radius * matrix.getMaxScaleOnAxis(); return this; }, translate: function ( offset ) { this.center.add( offset ); return this; }, equals: function ( sphere ) { return sphere.center.equals( this.center ) && ( sphere.radius === this.radius ); } }; // File:src/math/Frustum.js /** * @author mrdoob / http://mrdoob.com/ * @author alteredq / http://alteredqualia.com/ * @author bhouston / http://clara.io */ THREE.Frustum = function ( p0, p1, p2, p3, p4, p5 ) { this.planes = [ ( p0 !== undefined ) ? p0 : new THREE.Plane(), ( p1 !== undefined ) ? p1 : new THREE.Plane(), ( p2 !== undefined ) ? p2 : new THREE.Plane(), ( p3 !== undefined ) ? p3 : new THREE.Plane(), ( p4 !== undefined ) ? p4 : new THREE.Plane(), ( p5 !== undefined ) ? p5 : new THREE.Plane() ]; }; THREE.Frustum.prototype = { constructor: THREE.Frustum, set: function ( p0, p1, p2, p3, p4, p5 ) { var planes = this.planes; planes[ 0 ].copy( p0 ); planes[ 1 ].copy( p1 ); planes[ 2 ].copy( p2 ); planes[ 3 ].copy( p3 ); planes[ 4 ].copy( p4 ); planes[ 5 ].copy( p5 ); return this; }, clone: function () { return new this.constructor().copy( this ); }, copy: function ( frustum ) { var planes = this.planes; for ( var i = 0; i < 6; i ++ ) { planes[ i ].copy( frustum.planes[ i ] ); } return this; }, setFromMatrix: function ( m ) { var planes = this.planes; var me = m.elements; var me0 = me[ 0 ], me1 = me[ 1 ], me2 = me[ 2 ], me3 = me[ 3 ]; var me4 = me[ 4 ], me5 = me[ 5 ], me6 = me[ 6 ], me7 = me[ 7 ]; var me8 = me[ 8 ], me9 = me[ 9 ], me10 = me[ 10 ], me11 = me[ 11 ]; var me12 = me[ 12 ], me13 = me[ 13 ], me14 = me[ 14 ], me15 = me[ 15 ]; planes[ 0 ].setComponents( me3 - me0, me7 - me4, me11 - me8, me15 - me12 ).normalize(); planes[ 1 ].setComponents( me3 + me0, me7 + me4, me11 + me8, me15 + me12 ).normalize(); planes[ 2 ].setComponents( me3 + me1, me7 + me5, me11 + me9, me15 + me13 ).normalize(); planes[ 3 ].setComponents( me3 - me1, me7 - me5, me11 - me9, me15 - me13 ).normalize(); planes[ 4 ].setComponents( me3 - me2, me7 - me6, me11 - me10, me15 - me14 ).normalize(); planes[ 5 ].setComponents( me3 + me2, me7 + me6, me11 + me10, me15 + me14 ).normalize(); return this; }, intersectsObject: function () { var sphere = new THREE.Sphere(); return function intersectsObject( object ) { var geometry = object.geometry; if ( geometry.boundingSphere === null ) geometry.computeBoundingSphere(); sphere.copy( geometry.boundingSphere ) .applyMatrix4( object.matrixWorld ); return this.intersectsSphere( sphere ); }; }(), intersectsSprite: function () { var sphere = new THREE.Sphere(); return function intersectsSprite( sprite ) { sphere.center.set( 0, 0, 0 ); sphere.radius = 0.7071067811865476; sphere.applyMatrix4( sprite.matrixWorld ); return this.intersectsSphere( sphere ); }; }(), intersectsSphere: function ( sphere ) { var planes = this.planes; var center = sphere.center; var negRadius = - sphere.radius; for ( var i = 0; i < 6; i ++ ) { var distance = planes[ i ].distanceToPoint( center ); if ( distance < negRadius ) { return false; } } return true; }, intersectsBox: function () { var p1 = new THREE.Vector3(), p2 = new THREE.Vector3(); return function intersectsBox( box ) { var planes = this.planes; for ( var i = 0; i < 6 ; i ++ ) { var plane = planes[ i ]; p1.x = plane.normal.x > 0 ? box.min.x : box.max.x; p2.x = plane.normal.x > 0 ? box.max.x : box.min.x; p1.y = plane.normal.y > 0 ? box.min.y : box.max.y; p2.y = plane.normal.y > 0 ? box.max.y : box.min.y; p1.z = plane.normal.z > 0 ? box.min.z : box.max.z; p2.z = plane.normal.z > 0 ? box.max.z : box.min.z; var d1 = plane.distanceToPoint( p1 ); var d2 = plane.distanceToPoint( p2 ); // if both outside plane, no intersection if ( d1 < 0 && d2 < 0 ) { return false; } } return true; }; }(), containsPoint: function ( point ) { var planes = this.planes; for ( var i = 0; i < 6; i ++ ) { if ( planes[ i ].distanceToPoint( point ) < 0 ) { return false; } } return true; } }; // File:src/math/Plane.js /** * @author bhouston / http://clara.io */ THREE.Plane = function ( normal, constant ) { this.normal = ( normal !== undefined ) ? normal : new THREE.Vector3( 1, 0, 0 ); this.constant = ( constant !== undefined ) ? constant : 0; }; THREE.Plane.prototype = { constructor: THREE.Plane, set: function ( normal, constant ) { this.normal.copy( normal ); this.constant = constant; return this; }, setComponents: function ( x, y, z, w ) { this.normal.set( x, y, z ); this.constant = w; return this; }, setFromNormalAndCoplanarPoint: function ( normal, point ) { this.normal.copy( normal ); this.constant = - point.dot( this.normal ); // must be this.normal, not normal, as this.normal is normalized return this; }, setFromCoplanarPoints: function () { var v1 = new THREE.Vector3(); var v2 = new THREE.Vector3(); return function setFromCoplanarPoints( a, b, c ) { var normal = v1.subVectors( c, b ).cross( v2.subVectors( a, b ) ).normalize(); // Q: should an error be thrown if normal is zero (e.g. degenerate plane)? this.setFromNormalAndCoplanarPoint( normal, a ); return this; }; }(), clone: function () { return new this.constructor().copy( this ); }, copy: function ( plane ) { this.normal.copy( plane.normal ); this.constant = plane.constant; return this; }, normalize: function () { // Note: will lead to a divide by zero if the plane is invalid. var inverseNormalLength = 1.0 / this.normal.length(); this.normal.multiplyScalar( inverseNormalLength ); this.constant *= inverseNormalLength; return this; }, negate: function () { this.constant *= - 1; this.normal.negate(); return this; }, distanceToPoint: function ( point ) { return this.normal.dot( point ) + this.constant; }, distanceToSphere: function ( sphere ) { return this.distanceToPoint( sphere.center ) - sphere.radius; }, projectPoint: function ( point, optionalTarget ) { return this.orthoPoint( point, optionalTarget ).sub( point ).negate(); }, orthoPoint: function ( point, optionalTarget ) { var perpendicularMagnitude = this.distanceToPoint( point ); var result = optionalTarget || new THREE.Vector3(); return result.copy( this.normal ).multiplyScalar( perpendicularMagnitude ); }, intersectLine: function () { var v1 = new THREE.Vector3(); return function intersectLine( line, optionalTarget ) { var result = optionalTarget || new THREE.Vector3(); var direction = line.delta( v1 ); var denominator = this.normal.dot( direction ); if ( denominator === 0 ) { // line is coplanar, return origin if ( this.distanceToPoint( line.start ) === 0 ) { return result.copy( line.start ); } // Unsure if this is the correct method to handle this case. return undefined; } var t = - ( line.start.dot( this.normal ) + this.constant ) / denominator; if ( t < 0 || t > 1 ) { return undefined; } return result.copy( direction ).multiplyScalar( t ).add( line.start ); }; }(), intersectsLine: function ( line ) { // Note: this tests if a line intersects the plane, not whether it (or its end-points) are coplanar with it. var startSign = this.distanceToPoint( line.start ); var endSign = this.distanceToPoint( line.end ); return ( startSign < 0 && endSign > 0 ) || ( endSign < 0 && startSign > 0 ); }, intersectsBox: function ( box ) { return box.intersectsPlane( this ); }, intersectsSphere: function ( sphere ) { return sphere.intersectsPlane( this ); }, coplanarPoint: function ( optionalTarget ) { var result = optionalTarget || new THREE.Vector3(); return result.copy( this.normal ).multiplyScalar( - this.constant ); }, applyMatrix4: function () { var v1 = new THREE.Vector3(); var m1 = new THREE.Matrix3(); return function applyMatrix4( matrix, optionalNormalMatrix ) { var referencePoint = this.coplanarPoint( v1 ).applyMatrix4( matrix ); // transform normal based on theory here: // http://www.songho.ca/opengl/gl_normaltransform.html var normalMatrix = optionalNormalMatrix || m1.getNormalMatrix( matrix ); var normal = this.normal.applyMatrix3( normalMatrix ).normalize(); // recalculate constant (like in setFromNormalAndCoplanarPoint) this.constant = - referencePoint.dot( normal ); return this; }; }(), translate: function ( offset ) { this.constant = this.constant - offset.dot( this.normal ); return this; }, equals: function ( plane ) { return plane.normal.equals( this.normal ) && ( plane.constant === this.constant ); } }; // File:src/math/Spherical.js /** * @author bhouston / http://clara.io * @author WestLangley / http://github.com/WestLangley * * Ref: https://en.wikipedia.org/wiki/Spherical_coordinate_system * * The poles (phi) are at the positive and negative y axis. * The equator starts at positive z. */ THREE.Spherical = function ( radius, phi, theta ) { this.radius = ( radius !== undefined ) ? radius : 1.0; this.phi = ( phi !== undefined ) ? phi : 0; // up / down towards top and bottom pole this.theta = ( theta !== undefined ) ? theta : 0; // around the equator of the sphere return this; }; THREE.Spherical.prototype = { constructor: THREE.Spherical, set: function ( radius, phi, theta ) { this.radius = radius; this.phi = phi; this.theta = theta; return this; }, clone: function () { return new this.constructor().copy( this ); }, copy: function ( other ) { this.radius.copy( other.radius ); this.phi.copy( other.phi ); this.theta.copy( other.theta ); return this; }, // restrict phi to be betwee EPS and PI-EPS makeSafe: function() { var EPS = 0.000001; this.phi = Math.max( EPS, Math.min( Math.PI - EPS, this.phi ) ); return this; }, setFromVector3: function( vec3 ) { this.radius = vec3.length(); if ( this.radius === 0 ) { this.theta = 0; this.phi = 0; } else { this.theta = Math.atan2( vec3.x, vec3.z ); // equator angle around y-up axis this.phi = Math.acos( THREE.Math.clamp( vec3.y / this.radius, - 1, 1 ) ); // polar angle } return this; }, }; // File:src/math/Math.js /** * @author alteredq / http://alteredqualia.com/ * @author mrdoob / http://mrdoob.com/ */ THREE.Math = { DEG2RAD: Math.PI / 180, RAD2DEG: 180 / Math.PI, generateUUID: function () { // http://www.broofa.com/Tools/Math.uuid.htm var chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split( '' ); var uuid = new Array( 36 ); var rnd = 0, r; return function generateUUID() { for ( var i = 0; i < 36; i ++ ) { if ( i === 8 || i === 13 || i === 18 || i === 23 ) { uuid[ i ] = '-'; } else if ( i === 14 ) { uuid[ i ] = '4'; } else { if ( rnd <= 0x02 ) rnd = 0x2000000 + ( Math.random() * 0x1000000 ) | 0; r = rnd & 0xf; rnd = rnd >> 4; uuid[ i ] = chars[ ( i === 19 ) ? ( r & 0x3 ) | 0x8 : r ]; } } return uuid.join( '' ); }; }(), clamp: function ( value, min, max ) { return Math.max( min, Math.min( max, value ) ); }, // compute euclidian modulo of m % n // https://en.wikipedia.org/wiki/Modulo_operation euclideanModulo: function ( n, m ) { return ( ( n % m ) + m ) % m; }, // Linear mapping from range to range mapLinear: function ( x, a1, a2, b1, b2 ) { return b1 + ( x - a1 ) * ( b2 - b1 ) / ( a2 - a1 ); }, // http://en.wikipedia.org/wiki/Smoothstep smoothstep: function ( x, min, max ) { if ( x <= min ) return 0; if ( x >= max ) return 1; x = ( x - min ) / ( max - min ); return x * x * ( 3 - 2 * x ); }, smootherstep: function ( x, min, max ) { if ( x <= min ) return 0; if ( x >= max ) return 1; x = ( x - min ) / ( max - min ); return x * x * x * ( x * ( x * 6 - 15 ) + 10 ); }, random16: function () { console.warn( 'THREE.Math.random16() has been deprecated. Use Math.random() instead.' ); return Math.random(); }, // Random integer from interval randInt: function ( low, high ) { return low + Math.floor( Math.random() * ( high - low + 1 ) ); }, // Random float from interval randFloat: function ( low, high ) { return low + Math.random() * ( high - low ); }, // Random float from <-range/2, range/2> interval randFloatSpread: function ( range ) { return range * ( 0.5 - Math.random() ); }, degToRad: function ( degrees ) { return degrees * THREE.Math.DEG2RAD; }, radToDeg: function ( radians ) { return radians * THREE.Math.RAD2DEG; }, isPowerOfTwo: function ( value ) { return ( value & ( value - 1 ) ) === 0 && value !== 0; }, nearestPowerOfTwo: function ( value ) { return Math.pow( 2, Math.round( Math.log( value ) / Math.LN2 ) ); }, nextPowerOfTwo: function ( value ) { value --; value |= value >> 1; value |= value >> 2; value |= value >> 4; value |= value >> 8; value |= value >> 16; value ++; return value; } }; // File:src/math/Spline.js /** * Spline from Tween.js, slightly optimized (and trashed) * http://sole.github.com/tween.js/examples/05_spline.html * * @author mrdoob / http://mrdoob.com/ * @author alteredq / http://alteredqualia.com/ */ THREE.Spline = function ( points ) { this.points = points; var c = [], v3 = { x: 0, y: 0, z: 0 }, point, intPoint, weight, w2, w3, pa, pb, pc, pd; this.initFromArray = function ( a ) { this.points = []; for ( var i = 0; i < a.length; i ++ ) { this.points[ i ] = { x: a[ i ][ 0 ], y: a[ i ][ 1 ], z: a[ i ][ 2 ] }; } }; this.getPoint = function ( k ) { point = ( this.points.length - 1 ) * k; intPoint = Math.floor( point ); weight = point - intPoint; c[ 0 ] = intPoint === 0 ? intPoint : intPoint - 1; c[ 1 ] = intPoint; c[ 2 ] = intPoint > this.points.length - 2 ? this.points.length - 1 : intPoint + 1; c[ 3 ] = intPoint > this.points.length - 3 ? this.points.length - 1 : intPoint + 2; pa = this.points[ c[ 0 ] ]; pb = this.points[ c[ 1 ] ]; pc = this.points[ c[ 2 ] ]; pd = this.points[ c[ 3 ] ]; w2 = weight * weight; w3 = weight * w2; v3.x = interpolate( pa.x, pb.x, pc.x, pd.x, weight, w2, w3 ); v3.y = interpolate( pa.y, pb.y, pc.y, pd.y, weight, w2, w3 ); v3.z = interpolate( pa.z, pb.z, pc.z, pd.z, weight, w2, w3 ); return v3; }; this.getControlPointsArray = function () { var i, p, l = this.points.length, coords = []; for ( i = 0; i < l; i ++ ) { p = this.points[ i ]; coords[ i ] = [ p.x, p.y, p.z ]; } return coords; }; // approximate length by summing linear segments this.getLength = function ( nSubDivisions ) { var i, index, nSamples, position, point = 0, intPoint = 0, oldIntPoint = 0, oldPosition = new THREE.Vector3(), tmpVec = new THREE.Vector3(), chunkLengths = [], totalLength = 0; // first point has 0 length chunkLengths[ 0 ] = 0; if ( ! nSubDivisions ) nSubDivisions = 100; nSamples = this.points.length * nSubDivisions; oldPosition.copy( this.points[ 0 ] ); for ( i = 1; i < nSamples; i ++ ) { index = i / nSamples; position = this.getPoint( index ); tmpVec.copy( position ); totalLength += tmpVec.distanceTo( oldPosition ); oldPosition.copy( position ); point = ( this.points.length - 1 ) * index; intPoint = Math.floor( point ); if ( intPoint !== oldIntPoint ) { chunkLengths[ intPoint ] = totalLength; oldIntPoint = intPoint; } } // last point ends with total length chunkLengths[ chunkLengths.length ] = totalLength; return { chunks: chunkLengths, total: totalLength }; }; this.reparametrizeByArcLength = function ( samplingCoef ) { var i, j, index, indexCurrent, indexNext, realDistance, sampling, position, newpoints = [], tmpVec = new THREE.Vector3(), sl = this.getLength(); newpoints.push( tmpVec.copy( this.points[ 0 ] ).clone() ); for ( i = 1; i < this.points.length; i ++ ) { //tmpVec.copy( this.points[ i - 1 ] ); //linearDistance = tmpVec.distanceTo( this.points[ i ] ); realDistance = sl.chunks[ i ] - sl.chunks[ i - 1 ]; sampling = Math.ceil( samplingCoef * realDistance / sl.total ); indexCurrent = ( i - 1 ) / ( this.points.length - 1 ); indexNext = i / ( this.points.length - 1 ); for ( j = 1; j < sampling - 1; j ++ ) { index = indexCurrent + j * ( 1 / sampling ) * ( indexNext - indexCurrent ); position = this.getPoint( index ); newpoints.push( tmpVec.copy( position ).clone() ); } newpoints.push( tmpVec.copy( this.points[ i ] ).clone() ); } this.points = newpoints; }; // Catmull-Rom function interpolate( p0, p1, p2, p3, t, t2, t3 ) { var v0 = ( p2 - p0 ) * 0.5, v1 = ( p3 - p1 ) * 0.5; return ( 2 * ( p1 - p2 ) + v0 + v1 ) * t3 + ( - 3 * ( p1 - p2 ) - 2 * v0 - v1 ) * t2 + v0 * t + p1; } }; // File:src/math/Triangle.js /** * @author bhouston / http://clara.io * @author mrdoob / http://mrdoob.com/ */ THREE.Triangle = function ( a, b, c ) { this.a = ( a !== undefined ) ? a : new THREE.Vector3(); this.b = ( b !== undefined ) ? b : new THREE.Vector3(); this.c = ( c !== undefined ) ? c : new THREE.Vector3(); }; THREE.Triangle.normal = function () { var v0 = new THREE.Vector3(); return function normal( a, b, c, optionalTarget ) { var result = optionalTarget || new THREE.Vector3(); result.subVectors( c, b ); v0.subVectors( a, b ); result.cross( v0 ); var resultLengthSq = result.lengthSq(); if ( resultLengthSq > 0 ) { return result.multiplyScalar( 1 / Math.sqrt( resultLengthSq ) ); } return result.set( 0, 0, 0 ); }; }(); // static/instance method to calculate barycentric coordinates // based on: http://www.blackpawn.com/texts/pointinpoly/default.html THREE.Triangle.barycoordFromPoint = function () { var v0 = new THREE.Vector3(); var v1 = new THREE.Vector3(); var v2 = new THREE.Vector3(); return function barycoordFromPoint( point, a, b, c, optionalTarget ) { v0.subVectors( c, a ); v1.subVectors( b, a ); v2.subVectors( point, a ); var dot00 = v0.dot( v0 ); var dot01 = v0.dot( v1 ); var dot02 = v0.dot( v2 ); var dot11 = v1.dot( v1 ); var dot12 = v1.dot( v2 ); var denom = ( dot00 * dot11 - dot01 * dot01 ); var result = optionalTarget || new THREE.Vector3(); // collinear or singular triangle if ( denom === 0 ) { // arbitrary location outside of triangle? // not sure if this is the best idea, maybe should be returning undefined return result.set( - 2, - 1, - 1 ); } var invDenom = 1 / denom; var u = ( dot11 * dot02 - dot01 * dot12 ) * invDenom; var v = ( dot00 * dot12 - dot01 * dot02 ) * invDenom; // barycentric coordinates must always sum to 1 return result.set( 1 - u - v, v, u ); }; }(); THREE.Triangle.containsPoint = function () { var v1 = new THREE.Vector3(); return function containsPoint( point, a, b, c ) { var result = THREE.Triangle.barycoordFromPoint( point, a, b, c, v1 ); return ( result.x >= 0 ) && ( result.y >= 0 ) && ( ( result.x + result.y ) <= 1 ); }; }(); THREE.Triangle.prototype = { constructor: THREE.Triangle, set: function ( a, b, c ) { this.a.copy( a ); this.b.copy( b ); this.c.copy( c ); return this; }, setFromPointsAndIndices: function ( points, i0, i1, i2 ) { this.a.copy( points[ i0 ] ); this.b.copy( points[ i1 ] ); this.c.copy( points[ i2 ] ); return this; }, clone: function () { return new this.constructor().copy( this ); }, copy: function ( triangle ) { this.a.copy( triangle.a ); this.b.copy( triangle.b ); this.c.copy( triangle.c ); return this; }, area: function () { var v0 = new THREE.Vector3(); var v1 = new THREE.Vector3(); return function area() { v0.subVectors( this.c, this.b ); v1.subVectors( this.a, this.b ); return v0.cross( v1 ).length() * 0.5; }; }(), midpoint: function ( optionalTarget ) { var result = optionalTarget || new THREE.Vector3(); return result.addVectors( this.a, this.b ).add( this.c ).multiplyScalar( 1 / 3 ); }, normal: function ( optionalTarget ) { return THREE.Triangle.normal( this.a, this.b, this.c, optionalTarget ); }, plane: function ( optionalTarget ) { var result = optionalTarget || new THREE.Plane(); return result.setFromCoplanarPoints( this.a, this.b, this.c ); }, barycoordFromPoint: function ( point, optionalTarget ) { return THREE.Triangle.barycoordFromPoint( point, this.a, this.b, this.c, optionalTarget ); }, containsPoint: function ( point ) { return THREE.Triangle.containsPoint( point, this.a, this.b, this.c ); }, closestPointToPoint: function () { var plane, edgeList, projectedPoint, closestPoint; return function closestPointToPoint( point, optionalTarget ) { if ( plane === undefined ) { plane = new THREE.Plane(); edgeList = [ new THREE.Line3(), new THREE.Line3(), new THREE.Line3() ]; projectedPoint = new THREE.Vector3(); closestPoint = new THREE.Vector3(); } var result = optionalTarget || new THREE.Vector3(); var minDistance = Infinity; // project the point onto the plane of the triangle plane.setFromCoplanarPoints( this.a, this.b, this.c ); plane.projectPoint( point, projectedPoint ); // check if the projection lies within the triangle if( this.containsPoint( projectedPoint ) === true ) { // if so, this is the closest point result.copy( projectedPoint ); } else { // if not, the point falls outside the triangle. the result is the closest point to the triangle's edges or vertices edgeList[ 0 ].set( this.a, this.b ); edgeList[ 1 ].set( this.b, this.c ); edgeList[ 2 ].set( this.c, this.a ); for( var i = 0; i < edgeList.length; i ++ ) { edgeList[ i ].closestPointToPoint( projectedPoint, true, closestPoint ); var distance = projectedPoint.distanceToSquared( closestPoint ); if( distance < minDistance ) { minDistance = distance; result.copy( closestPoint ); } } } return result; }; }(), equals: function ( triangle ) { return triangle.a.equals( this.a ) && triangle.b.equals( this.b ) && triangle.c.equals( this.c ); } }; // File:src/math/Interpolant.js /** * Abstract base class of interpolants over parametric samples. * * The parameter domain is one dimensional, typically the time or a path * along a curve defined by the data. * * The sample values can have any dimensionality and derived classes may * apply special interpretations to the data. * * This class provides the interval seek in a Template Method, deferring * the actual interpolation to derived classes. * * Time complexity is O(1) for linear access crossing at most two points * and O(log N) for random access, where N is the number of positions. * * References: * * http://www.oodesign.com/template-method-pattern.html * * @author tschw */ THREE.Interpolant = function( parameterPositions, sampleValues, sampleSize, resultBuffer ) { this.parameterPositions = parameterPositions; this._cachedIndex = 0; this.resultBuffer = resultBuffer !== undefined ? resultBuffer : new sampleValues.constructor( sampleSize ); this.sampleValues = sampleValues; this.valueSize = sampleSize; }; THREE.Interpolant.prototype = { constructor: THREE.Interpolant, evaluate: function( t ) { var pp = this.parameterPositions, i1 = this._cachedIndex, t1 = pp[ i1 ], t0 = pp[ i1 - 1 ]; validate_interval: { seek: { var right; linear_scan: { //- See http://jsperf.com/comparison-to-undefined/3 //- slower code: //- //- if ( t >= t1 || t1 === undefined ) { forward_scan: if ( ! ( t < t1 ) ) { for ( var giveUpAt = i1 + 2; ;) { if ( t1 === undefined ) { if ( t < t0 ) break forward_scan; // after end i1 = pp.length; this._cachedIndex = i1; return this.afterEnd_( i1 - 1, t, t0 ); } if ( i1 === giveUpAt ) break; // this loop t0 = t1; t1 = pp[ ++ i1 ]; if ( t < t1 ) { // we have arrived at the sought interval break seek; } } // prepare binary search on the right side of the index right = pp.length; break linear_scan; } //- slower code: //- if ( t < t0 || t0 === undefined ) { if ( ! ( t >= t0 ) ) { // looping? var t1global = pp[ 1 ]; if ( t < t1global ) { i1 = 2; // + 1, using the scan for the details t0 = t1global; } // linear reverse scan for ( var giveUpAt = i1 - 2; ;) { if ( t0 === undefined ) { // before start this._cachedIndex = 0; return this.beforeStart_( 0, t, t1 ); } if ( i1 === giveUpAt ) break; // this loop t1 = t0; t0 = pp[ -- i1 - 1 ]; if ( t >= t0 ) { // we have arrived at the sought interval break seek; } } // prepare binary search on the left side of the index right = i1; i1 = 0; break linear_scan; } // the interval is valid break validate_interval; } // linear scan // binary search while ( i1 < right ) { var mid = ( i1 + right ) >>> 1; if ( t < pp[ mid ] ) { right = mid; } else { i1 = mid + 1; } } t1 = pp[ i1 ]; t0 = pp[ i1 - 1 ]; // check boundary cases, again if ( t0 === undefined ) { this._cachedIndex = 0; return this.beforeStart_( 0, t, t1 ); } if ( t1 === undefined ) { i1 = pp.length; this._cachedIndex = i1; return this.afterEnd_( i1 - 1, t0, t ); } } // seek this._cachedIndex = i1; this.intervalChanged_( i1, t0, t1 ); } // validate_interval return this.interpolate_( i1, t0, t, t1 ); }, settings: null, // optional, subclass-specific settings structure // Note: The indirection allows central control of many interpolants. // --- Protected interface DefaultSettings_: {}, getSettings_: function() { return this.settings || this.DefaultSettings_; }, copySampleValue_: function( index ) { // copies a sample value to the result buffer var result = this.resultBuffer, values = this.sampleValues, stride = this.valueSize, offset = index * stride; for ( var i = 0; i !== stride; ++ i ) { result[ i ] = values[ offset + i ]; } return result; }, // Template methods for derived classes: interpolate_: function( i1, t0, t, t1 ) { throw new Error( "call to abstract method" ); // implementations shall return this.resultBuffer }, intervalChanged_: function( i1, t0, t1 ) { // empty } }; Object.assign( THREE.Interpolant.prototype, { beforeStart_: //( 0, t, t0 ), returns this.resultBuffer THREE.Interpolant.prototype.copySampleValue_, afterEnd_: //( N-1, tN-1, t ), returns this.resultBuffer THREE.Interpolant.prototype.copySampleValue_ } ); // File:src/math/interpolants/CubicInterpolant.js /** * Fast and simple cubic spline interpolant. * * It was derived from a Hermitian construction setting the first derivative * at each sample position to the linear slope between neighboring positions * over their parameter interval. * * @author tschw */ THREE.CubicInterpolant = function( parameterPositions, sampleValues, sampleSize, resultBuffer ) { THREE.Interpolant.call( this, parameterPositions, sampleValues, sampleSize, resultBuffer ); this._weightPrev = -0; this._offsetPrev = -0; this._weightNext = -0; this._offsetNext = -0; }; THREE.CubicInterpolant.prototype = Object.assign( Object.create( THREE.Interpolant.prototype ), { constructor: THREE.CubicInterpolant, DefaultSettings_: { endingStart: THREE.ZeroCurvatureEnding, endingEnd: THREE.ZeroCurvatureEnding }, intervalChanged_: function( i1, t0, t1 ) { var pp = this.parameterPositions, iPrev = i1 - 2, iNext = i1 + 1, tPrev = pp[ iPrev ], tNext = pp[ iNext ]; if ( tPrev === undefined ) { switch ( this.getSettings_().endingStart ) { case THREE.ZeroSlopeEnding: // f'(t0) = 0 iPrev = i1; tPrev = 2 * t0 - t1; break; case THREE.WrapAroundEnding: // use the other end of the curve iPrev = pp.length - 2; tPrev = t0 + pp[ iPrev ] - pp[ iPrev + 1 ]; break; default: // ZeroCurvatureEnding // f''(t0) = 0 a.k.a. Natural Spline iPrev = i1; tPrev = t1; } } if ( tNext === undefined ) { switch ( this.getSettings_().endingEnd ) { case THREE.ZeroSlopeEnding: // f'(tN) = 0 iNext = i1; tNext = 2 * t1 - t0; break; case THREE.WrapAroundEnding: // use the other end of the curve iNext = 1; tNext = t1 + pp[ 1 ] - pp[ 0 ]; break; default: // ZeroCurvatureEnding // f''(tN) = 0, a.k.a. Natural Spline iNext = i1 - 1; tNext = t0; } } var halfDt = ( t1 - t0 ) * 0.5, stride = this.valueSize; this._weightPrev = halfDt / ( t0 - tPrev ); this._weightNext = halfDt / ( tNext - t1 ); this._offsetPrev = iPrev * stride; this._offsetNext = iNext * stride; }, interpolate_: function( i1, t0, t, t1 ) { var result = this.resultBuffer, values = this.sampleValues, stride = this.valueSize, o1 = i1 * stride, o0 = o1 - stride, oP = this._offsetPrev, oN = this._offsetNext, wP = this._weightPrev, wN = this._weightNext, p = ( t - t0 ) / ( t1 - t0 ), pp = p * p, ppp = pp * p; // evaluate polynomials var sP = - wP * ppp + 2 * wP * pp - wP * p; var s0 = ( 1 + wP ) * ppp + (-1.5 - 2 * wP ) * pp + ( -0.5 + wP ) * p + 1; var s1 = (-1 - wN ) * ppp + ( 1.5 + wN ) * pp + 0.5 * p; var sN = wN * ppp - wN * pp; // combine data linearly for ( var i = 0; i !== stride; ++ i ) { result[ i ] = sP * values[ oP + i ] + s0 * values[ o0 + i ] + s1 * values[ o1 + i ] + sN * values[ oN + i ]; } return result; } } ); // File:src/math/interpolants/DiscreteInterpolant.js /** * * Interpolant that evaluates to the sample value at the position preceeding * the parameter. * * @author tschw */ THREE.DiscreteInterpolant = function( parameterPositions, sampleValues, sampleSize, resultBuffer ) { THREE.Interpolant.call( this, parameterPositions, sampleValues, sampleSize, resultBuffer ); }; THREE.DiscreteInterpolant.prototype = Object.assign( Object.create( THREE.Interpolant.prototype ), { constructor: THREE.DiscreteInterpolant, interpolate_: function( i1, t0, t, t1 ) { return this.copySampleValue_( i1 - 1 ); } } ); // File:src/math/interpolants/LinearInterpolant.js /** * @author tschw */ THREE.LinearInterpolant = function( parameterPositions, sampleValues, sampleSize, resultBuffer ) { THREE.Interpolant.call( this, parameterPositions, sampleValues, sampleSize, resultBuffer ); }; THREE.LinearInterpolant.prototype = Object.assign( Object.create( THREE.Interpolant.prototype ), { constructor: THREE.LinearInterpolant, interpolate_: function( i1, t0, t, t1 ) { var result = this.resultBuffer, values = this.sampleValues, stride = this.valueSize, offset1 = i1 * stride, offset0 = offset1 - stride, weight1 = ( t - t0 ) / ( t1 - t0 ), weight0 = 1 - weight1; for ( var i = 0; i !== stride; ++ i ) { result[ i ] = values[ offset0 + i ] * weight0 + values[ offset1 + i ] * weight1; } return result; } } ); // File:src/math/interpolants/QuaternionLinearInterpolant.js /** * Spherical linear unit quaternion interpolant. * * @author tschw */ THREE.QuaternionLinearInterpolant = function( parameterPositions, sampleValues, sampleSize, resultBuffer ) { THREE.Interpolant.call( this, parameterPositions, sampleValues, sampleSize, resultBuffer ); }; THREE.QuaternionLinearInterpolant.prototype = Object.assign( Object.create( THREE.Interpolant.prototype ), { constructor: THREE.QuaternionLinearInterpolant, interpolate_: function( i1, t0, t, t1 ) { var result = this.resultBuffer, values = this.sampleValues, stride = this.valueSize, offset = i1 * stride, alpha = ( t - t0 ) / ( t1 - t0 ); for ( var end = offset + stride; offset !== end; offset += 4 ) { THREE.Quaternion.slerpFlat( result, 0, values, offset - stride, values, offset, alpha ); } return result; } } ); // File:src/core/Clock.js /** * @author alteredq / http://alteredqualia.com/ */ THREE.Clock = function ( autoStart ) { this.autoStart = ( autoStart !== undefined ) ? autoStart : true; this.startTime = 0; this.oldTime = 0; this.elapsedTime = 0; this.running = false; }; THREE.Clock.prototype = { constructor: THREE.Clock, start: function () { this.startTime = ( performance || Date ).now(); this.oldTime = this.startTime; this.running = true; }, stop: function () { this.getElapsedTime(); this.running = false; }, getElapsedTime: function () { this.getDelta(); return this.elapsedTime; }, getDelta: function () { var diff = 0; if ( this.autoStart && ! this.running ) { this.start(); } if ( this.running ) { var newTime = ( performance || Date ).now(); diff = ( newTime - this.oldTime ) / 1000; this.oldTime = newTime; this.elapsedTime += diff; } return diff; } }; // File:src/core/EventDispatcher.js /** * https://github.com/mrdoob/eventdispatcher.js/ */ THREE.EventDispatcher = function () {}; Object.assign( THREE.EventDispatcher.prototype, { addEventListener: function ( type, listener ) { if ( this._listeners === undefined ) this._listeners = {}; var listeners = this._listeners; if ( listeners[ type ] === undefined ) { listeners[ type ] = []; } if ( listeners[ type ].indexOf( listener ) === - 1 ) { listeners[ type ].push( listener ); } }, hasEventListener: function ( type, listener ) { if ( this._listeners === undefined ) return false; var listeners = this._listeners; if ( listeners[ type ] !== undefined && listeners[ type ].indexOf( listener ) !== - 1 ) { return true; } return false; }, removeEventListener: function ( type, listener ) { if ( this._listeners === undefined ) return; var listeners = this._listeners; var listenerArray = listeners[ type ]; if ( listenerArray !== undefined ) { var index = listenerArray.indexOf( listener ); if ( index !== - 1 ) { listenerArray.splice( index, 1 ); } } }, dispatchEvent: function ( event ) { if ( this._listeners === undefined ) return; var listeners = this._listeners; var listenerArray = listeners[ event.type ]; if ( listenerArray !== undefined ) { event.target = this; var array = [], i = 0; var length = listenerArray.length; for ( i = 0; i < length; i ++ ) { array[ i ] = listenerArray[ i ]; } for ( i = 0; i < length; i ++ ) { array[ i ].call( this, event ); } } } } ); // File:src/core/Layers.js /** * @author mrdoob / http://mrdoob.com/ */ THREE.Layers = function () { this.mask = 1; }; THREE.Layers.prototype = { constructor: THREE.Layers, set: function ( channel ) { this.mask = 1 << channel; }, enable: function ( channel ) { this.mask |= 1 << channel; }, toggle: function ( channel ) { this.mask ^= 1 << channel; }, disable: function ( channel ) { this.mask &= ~ ( 1 << channel ); }, test: function ( layers ) { return ( this.mask & layers.mask ) !== 0; } }; // File:src/core/Raycaster.js /** * @author mrdoob / http://mrdoob.com/ * @author bhouston / http://clara.io/ * @author stephomi / http://stephaneginier.com/ */ ( function ( THREE ) { THREE.Raycaster = function ( origin, direction, near, far ) { this.ray = new THREE.Ray( origin, direction ); // direction is assumed to be normalized (for accurate distance calculations) this.near = near || 0; this.far = far || Infinity; this.params = { Mesh: {}, Line: {}, LOD: {}, Points: { threshold: 1 }, Sprite: {} }; Object.defineProperties( this.params, { PointCloud: { get: function () { console.warn( 'THREE.Raycaster: params.PointCloud has been renamed to params.Points.' ); return this.Points; } } } ); }; function ascSort( a, b ) { return a.distance - b.distance; } function intersectObject( object, raycaster, intersects, recursive ) { if ( object.visible === false ) return; object.raycast( raycaster, intersects ); if ( recursive === true ) { var children = object.children; for ( var i = 0, l = children.length; i < l; i ++ ) { intersectObject( children[ i ], raycaster, intersects, true ); } } } // THREE.Raycaster.prototype = { constructor: THREE.Raycaster, linePrecision: 1, set: function ( origin, direction ) { // direction is assumed to be normalized (for accurate distance calculations) this.ray.set( origin, direction ); }, setFromCamera: function ( coords, camera ) { if ( camera instanceof THREE.PerspectiveCamera ) { this.ray.origin.setFromMatrixPosition( camera.matrixWorld ); this.ray.direction.set( coords.x, coords.y, 0.5 ).unproject( camera ).sub( this.ray.origin ).normalize(); } else if ( camera instanceof THREE.OrthographicCamera ) { this.ray.origin.set( coords.x, coords.y, ( camera.near + camera.far ) / ( camera.near - camera.far ) ).unproject( camera ); // set origin in plane of camera this.ray.direction.set( 0, 0, - 1 ).transformDirection( camera.matrixWorld ); } else { console.error( 'THREE.Raycaster: Unsupported camera type.' ); } }, intersectObject: function ( object, recursive ) { var intersects = []; intersectObject( object, this, intersects, recursive ); intersects.sort( ascSort ); return intersects; }, intersectObjects: function ( objects, recursive ) { var intersects = []; if ( Array.isArray( objects ) === false ) { console.warn( 'THREE.Raycaster.intersectObjects: objects is not an Array.' ); return intersects; } for ( var i = 0, l = objects.length; i < l; i ++ ) { intersectObject( objects[ i ], this, intersects, recursive ); } intersects.sort( ascSort ); return intersects; } }; }( THREE ) ); // File:src/core/Object3D.js /** * @author mrdoob / http://mrdoob.com/ * @author mikael emtinger / http://gomo.se/ * @author alteredq / http://alteredqualia.com/ * @author WestLangley / http://github.com/WestLangley * @author elephantatwork / www.elephantatwork.ch */ THREE.Object3D = function () { Object.defineProperty( this, 'id', { value: THREE.Object3DIdCount ++ } ); this.uuid = THREE.Math.generateUUID(); this.name = ''; this.type = 'Object3D'; this.parent = null; this.children = []; this.up = THREE.Object3D.DefaultUp.clone(); var position = new THREE.Vector3(); var rotation = new THREE.Euler(); var quaternion = new THREE.Quaternion(); var scale = new THREE.Vector3( 1, 1, 1 ); function onRotationChange() { quaternion.setFromEuler( rotation, false ); } function onQuaternionChange() { rotation.setFromQuaternion( quaternion, undefined, false ); } rotation.onChange( onRotationChange ); quaternion.onChange( onQuaternionChange ); Object.defineProperties( this, { position: { enumerable: true, value: position }, rotation: { enumerable: true, value: rotation }, quaternion: { enumerable: true, value: quaternion }, scale: { enumerable: true, value: scale }, modelViewMatrix: { value: new THREE.Matrix4() }, normalMatrix: { value: new THREE.Matrix3() } } ); this.matrix = new THREE.Matrix4(); this.matrixWorld = new THREE.Matrix4(); this.matrixAutoUpdate = THREE.Object3D.DefaultMatrixAutoUpdate; this.matrixWorldNeedsUpdate = false; this.layers = new THREE.Layers(); this.visible = true; this.castShadow = false; this.receiveShadow = false; this.frustumCulled = true; this.renderOrder = 0; this.userData = {}; }; THREE.Object3D.DefaultUp = new THREE.Vector3( 0, 1, 0 ); THREE.Object3D.DefaultMatrixAutoUpdate = true; Object.assign( THREE.Object3D.prototype, THREE.EventDispatcher.prototype, { applyMatrix: function ( matrix ) { this.matrix.multiplyMatrices( matrix, this.matrix ); this.matrix.decompose( this.position, this.quaternion, this.scale ); }, setRotationFromAxisAngle: function ( axis, angle ) { // assumes axis is normalized this.quaternion.setFromAxisAngle( axis, angle ); }, setRotationFromEuler: function ( euler ) { this.quaternion.setFromEuler( euler, true ); }, setRotationFromMatrix: function ( m ) { // assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled) this.quaternion.setFromRotationMatrix( m ); }, setRotationFromQuaternion: function ( q ) { // assumes q is normalized this.quaternion.copy( q ); }, rotateOnAxis: function () { // rotate object on axis in object space // axis is assumed to be normalized var q1 = new THREE.Quaternion(); return function rotateOnAxis( axis, angle ) { q1.setFromAxisAngle( axis, angle ); this.quaternion.multiply( q1 ); return this; }; }(), rotateX: function () { var v1 = new THREE.Vector3( 1, 0, 0 ); return function rotateX( angle ) { return this.rotateOnAxis( v1, angle ); }; }(), rotateY: function () { var v1 = new THREE.Vector3( 0, 1, 0 ); return function rotateY( angle ) { return this.rotateOnAxis( v1, angle ); }; }(), rotateZ: function () { var v1 = new THREE.Vector3( 0, 0, 1 ); return function rotateZ( angle ) { return this.rotateOnAxis( v1, angle ); }; }(), translateOnAxis: function () { // translate object by distance along axis in object space // axis is assumed to be normalized var v1 = new THREE.Vector3(); return function translateOnAxis( axis, distance ) { v1.copy( axis ).applyQuaternion( this.quaternion ); this.position.add( v1.multiplyScalar( distance ) ); return this; }; }(), translateX: function () { var v1 = new THREE.Vector3( 1, 0, 0 ); return function translateX( distance ) { return this.translateOnAxis( v1, distance ); }; }(), translateY: function () { var v1 = new THREE.Vector3( 0, 1, 0 ); return function translateY( distance ) { return this.translateOnAxis( v1, distance ); }; }(), translateZ: function () { var v1 = new THREE.Vector3( 0, 0, 1 ); return function translateZ( distance ) { return this.translateOnAxis( v1, distance ); }; }(), localToWorld: function ( vector ) { return vector.applyMatrix4( this.matrixWorld ); }, worldToLocal: function () { var m1 = new THREE.Matrix4(); return function worldToLocal( vector ) { return vector.applyMatrix4( m1.getInverse( this.matrixWorld ) ); }; }(), lookAt: function () { // This routine does not support objects with rotated and/or translated parent(s) var m1 = new THREE.Matrix4(); return function lookAt( vector ) { m1.lookAt( vector, this.position, this.up ); this.quaternion.setFromRotationMatrix( m1 ); }; }(), add: function ( object ) { if ( arguments.length > 1 ) { for ( var i = 0; i < arguments.length; i ++ ) { this.add( arguments[ i ] ); } return this; } if ( object === this ) { console.error( "THREE.Object3D.add: object can't be added as a child of itself.", object ); return this; } if ( object instanceof THREE.Object3D ) { if ( object.parent !== null ) { object.parent.remove( object ); } object.parent = this; object.dispatchEvent( { type: 'added' } ); this.children.push( object ); } else { console.error( "THREE.Object3D.add: object not an instance of THREE.Object3D.", object ); } return this; }, remove: function ( object ) { if ( arguments.length > 1 ) { for ( var i = 0; i < arguments.length; i ++ ) { this.remove( arguments[ i ] ); } } var index = this.children.indexOf( object ); if ( index !== - 1 ) { object.parent = null; object.dispatchEvent( { type: 'removed' } ); this.children.splice( index, 1 ); } }, getObjectById: function ( id ) { return this.getObjectByProperty( 'id', id ); }, getObjectByName: function ( name ) { return this.getObjectByProperty( 'name', name ); }, getObjectByProperty: function ( name, value ) { if ( this[ name ] === value ) return this; for ( var i = 0, l = this.children.length; i < l; i ++ ) { var child = this.children[ i ]; var object = child.getObjectByProperty( name, value ); if ( object !== undefined ) { return object; } } return undefined; }, getWorldPosition: function ( optionalTarget ) { var result = optionalTarget || new THREE.Vector3(); this.updateMatrixWorld( true ); return result.setFromMatrixPosition( this.matrixWorld ); }, getWorldQuaternion: function () { var position = new THREE.Vector3(); var scale = new THREE.Vector3(); return function getWorldQuaternion( optionalTarget ) { var result = optionalTarget || new THREE.Quaternion(); this.updateMatrixWorld( true ); this.matrixWorld.decompose( position, result, scale ); return result; }; }(), getWorldRotation: function () { var quaternion = new THREE.Quaternion(); return function getWorldRotation( optionalTarget ) { var result = optionalTarget || new THREE.Euler(); this.getWorldQuaternion( quaternion ); return result.setFromQuaternion( quaternion, this.rotation.order, false ); }; }(), getWorldScale: function () { var position = new THREE.Vector3(); var quaternion = new THREE.Quaternion(); return function getWorldScale( optionalTarget ) { var result = optionalTarget || new THREE.Vector3(); this.updateMatrixWorld( true ); this.matrixWorld.decompose( position, quaternion, result ); return result; }; }(), getWorldDirection: function () { var quaternion = new THREE.Quaternion(); return function getWorldDirection( optionalTarget ) { var result = optionalTarget || new THREE.Vector3(); this.getWorldQuaternion( quaternion ); return result.set( 0, 0, 1 ).applyQuaternion( quaternion ); }; }(), raycast: function () {}, traverse: function ( callback ) { callback( this ); var children = this.children; for ( var i = 0, l = children.length; i < l; i ++ ) { children[ i ].traverse( callback ); } }, traverseVisible: function ( callback ) { if ( this.visible === false ) return; callback( this ); var children = this.children; for ( var i = 0, l = children.length; i < l; i ++ ) { children[ i ].traverseVisible( callback ); } }, traverseAncestors: function ( callback ) { var parent = this.parent; if ( parent !== null ) { callback( parent ); parent.traverseAncestors( callback ); } }, updateMatrix: function () { this.matrix.compose( this.position, this.quaternion, this.scale ); this.matrixWorldNeedsUpdate = true; }, updateMatrixWorld: function ( force ) { if ( this.matrixAutoUpdate === true ) this.updateMatrix(); if ( this.matrixWorldNeedsUpdate === true || force === true ) { if ( this.parent === null ) { this.matrixWorld.copy( this.matrix ); } else { this.matrixWorld.multiplyMatrices( this.parent.matrixWorld, this.matrix ); } this.matrixWorldNeedsUpdate = false; force = true; } // update children for ( var i = 0, l = this.children.length; i < l; i ++ ) { this.children[ i ].updateMatrixWorld( force ); } }, toJSON: function ( meta ) { // meta is '' when called from JSON.stringify var isRootObject = ( meta === undefined || meta === '' ); var output = {}; // meta is a hash used to collect geometries, materials. // not providing it implies that this is the root object // being serialized. if ( isRootObject ) { // initialize meta obj meta = { geometries: {}, materials: {}, textures: {}, images: {} }; output.metadata = { version: 4.4, type: 'Object', generator: 'Object3D.toJSON' }; } // standard Object3D serialization var object = {}; object.uuid = this.uuid; object.type = this.type; if ( this.name !== '' ) object.name = this.name; if ( JSON.stringify( this.userData ) !== '{}' ) object.userData = this.userData; if ( this.castShadow === true ) object.castShadow = true; if ( this.receiveShadow === true ) object.receiveShadow = true; if ( this.visible === false ) object.visible = false; object.matrix = this.matrix.toArray(); // if ( this.geometry !== undefined ) { if ( meta.geometries[ this.geometry.uuid ] === undefined ) { meta.geometries[ this.geometry.uuid ] = this.geometry.toJSON( meta ); } object.geometry = this.geometry.uuid; } if ( this.material !== undefined ) { if ( meta.materials[ this.material.uuid ] === undefined ) { meta.materials[ this.material.uuid ] = this.material.toJSON( meta ); } object.material = this.material.uuid; } // if ( this.children.length > 0 ) { object.children = []; for ( var i = 0; i < this.children.length; i ++ ) { object.children.push( this.children[ i ].toJSON( meta ).object ); } } if ( isRootObject ) { var geometries = extractFromCache( meta.geometries ); var materials = extractFromCache( meta.materials ); var textures = extractFromCache( meta.textures ); var images = extractFromCache( meta.images ); if ( geometries.length > 0 ) output.geometries = geometries; if ( materials.length > 0 ) output.materials = materials; if ( textures.length > 0 ) output.textures = textures; if ( images.length > 0 ) output.images = images; } output.object = object; return output; // extract data from the cache hash // remove metadata on each item // and return as array function extractFromCache ( cache ) { var values = []; for ( var key in cache ) { var data = cache[ key ]; delete data.metadata; values.push( data ); } return values; } }, clone: function ( recursive ) { return new this.constructor().copy( this, recursive ); }, copy: function ( source, recursive ) { if ( recursive === undefined ) recursive = true; this.name = source.name; this.up.copy( source.up ); this.position.copy( source.position ); this.quaternion.copy( source.quaternion ); this.scale.copy( source.scale ); this.matrix.copy( source.matrix ); this.matrixWorld.copy( source.matrixWorld ); this.matrixAutoUpdate = source.matrixAutoUpdate; this.matrixWorldNeedsUpdate = source.matrixWorldNeedsUpdate; this.visible = source.visible; this.castShadow = source.castShadow; this.receiveShadow = source.receiveShadow; this.frustumCulled = source.frustumCulled; this.renderOrder = source.renderOrder; this.userData = JSON.parse( JSON.stringify( source.userData ) ); if ( recursive === true ) { for ( var i = 0; i < source.children.length; i ++ ) { var child = source.children[ i ]; this.add( child.clone() ); } } return this; } } ); THREE.Object3DIdCount = 0; // File:src/core/Face3.js /** * @author mrdoob / http://mrdoob.com/ * @author alteredq / http://alteredqualia.com/ */ THREE.Face3 = function ( a, b, c, normal, color, materialIndex ) { this.a = a; this.b = b; this.c = c; this.normal = normal instanceof THREE.Vector3 ? normal : new THREE.Vector3(); this.vertexNormals = Array.isArray( normal ) ? normal : []; this.color = color instanceof THREE.Color ? color : new THREE.Color(); this.vertexColors = Array.isArray( color ) ? color : []; this.materialIndex = materialIndex !== undefined ? materialIndex : 0; }; THREE.Face3.prototype = { constructor: THREE.Face3, clone: function () { return new this.constructor().copy( this ); }, copy: function ( source ) { this.a = source.a; this.b = source.b; this.c = source.c; this.normal.copy( source.normal ); this.color.copy( source.color ); this.materialIndex = source.materialIndex; for ( var i = 0, il = source.vertexNormals.length; i < il; i ++ ) { this.vertexNormals[ i ] = source.vertexNormals[ i ].clone(); } for ( var i = 0, il = source.vertexColors.length; i < il; i ++ ) { this.vertexColors[ i ] = source.vertexColors[ i ].clone(); } return this; } }; // File:src/core/BufferAttribute.js /** * @author mrdoob / http://mrdoob.com/ */ THREE.BufferAttribute = function ( array, itemSize, normalized ) { this.uuid = THREE.Math.generateUUID(); this.array = array; this.itemSize = itemSize; this.dynamic = false; this.updateRange = { offset: 0, count: - 1 }; this.version = 0; this.normalized = normalized === true; }; THREE.BufferAttribute.prototype = { constructor: THREE.BufferAttribute, get count() { return this.array.length / this.itemSize; }, set needsUpdate( value ) { if ( value === true ) this.version ++; }, setDynamic: function ( value ) { this.dynamic = value; return this; }, copy: function ( source ) { this.array = new source.array.constructor( source.array ); this.itemSize = source.itemSize; this.dynamic = source.dynamic; return this; }, copyAt: function ( index1, attribute, index2 ) { index1 *= this.itemSize; index2 *= attribute.itemSize; for ( var i = 0, l = this.itemSize; i < l; i ++ ) { this.array[ index1 + i ] = attribute.array[ index2 + i ]; } return this; }, copyArray: function ( array ) { this.array.set( array ); return this; }, copyColorsArray: function ( colors ) { var array = this.array, offset = 0; for ( var i = 0, l = colors.length; i < l; i ++ ) { var color = colors[ i ]; if ( color === undefined ) { console.warn( 'THREE.BufferAttribute.copyColorsArray(): color is undefined', i ); color = new THREE.Color(); } array[ offset ++ ] = color.r; array[ offset ++ ] = color.g; array[ offset ++ ] = color.b; } return this; }, copyIndicesArray: function ( indices ) { var array = this.array, offset = 0; for ( var i = 0, l = indices.length; i < l; i ++ ) { var index = indices[ i ]; array[ offset ++ ] = index.a; array[ offset ++ ] = index.b; array[ offset ++ ] = index.c; } return this; }, copyVector2sArray: function ( vectors ) { var array = this.array, offset = 0; for ( var i = 0, l = vectors.length; i < l; i ++ ) { var vector = vectors[ i ]; if ( vector === undefined ) { console.warn( 'THREE.BufferAttribute.copyVector2sArray(): vector is undefined', i ); vector = new THREE.Vector2(); } array[ offset ++ ] = vector.x; array[ offset ++ ] = vector.y; } return this; }, copyVector3sArray: function ( vectors ) { var array = this.array, offset = 0; for ( var i = 0, l = vectors.length; i < l; i ++ ) { var vector = vectors[ i ]; if ( vector === undefined ) { console.warn( 'THREE.BufferAttribute.copyVector3sArray(): vector is undefined', i ); vector = new THREE.Vector3(); } array[ offset ++ ] = vector.x; array[ offset ++ ] = vector.y; array[ offset ++ ] = vector.z; } return this; }, copyVector4sArray: function ( vectors ) { var array = this.array, offset = 0; for ( var i = 0, l = vectors.length; i < l; i ++ ) { var vector = vectors[ i ]; if ( vector === undefined ) { console.warn( 'THREE.BufferAttribute.copyVector4sArray(): vector is undefined', i ); vector = new THREE.Vector4(); } array[ offset ++ ] = vector.x; array[ offset ++ ] = vector.y; array[ offset ++ ] = vector.z; array[ offset ++ ] = vector.w; } return this; }, set: function ( value, offset ) { if ( offset === undefined ) offset = 0; this.array.set( value, offset ); return this; }, getX: function ( index ) { return this.array[ index * this.itemSize ]; }, setX: function ( index, x ) { this.array[ index * this.itemSize ] = x; return this; }, getY: function ( index ) { return this.array[ index * this.itemSize + 1 ]; }, setY: function ( index, y ) { this.array[ index * this.itemSize + 1 ] = y; return this; }, getZ: function ( index ) { return this.array[ index * this.itemSize + 2 ]; }, setZ: function ( index, z ) { this.array[ index * this.itemSize + 2 ] = z; return this; }, getW: function ( index ) { return this.array[ index * this.itemSize + 3 ]; }, setW: function ( index, w ) { this.array[ index * this.itemSize + 3 ] = w; return this; }, setXY: function ( index, x, y ) { index *= this.itemSize; this.array[ index + 0 ] = x; this.array[ index + 1 ] = y; return this; }, setXYZ: function ( index, x, y, z ) { index *= this.itemSize; this.array[ index + 0 ] = x; this.array[ index + 1 ] = y; this.array[ index + 2 ] = z; return this; }, setXYZW: function ( index, x, y, z, w ) { index *= this.itemSize; this.array[ index + 0 ] = x; this.array[ index + 1 ] = y; this.array[ index + 2 ] = z; this.array[ index + 3 ] = w; return this; }, clone: function () { return new this.constructor().copy( this ); } }; // THREE.Int8Attribute = function ( array, itemSize ) { return new THREE.BufferAttribute( new Int8Array( array ), itemSize ); }; THREE.Uint8Attribute = function ( array, itemSize ) { return new THREE.BufferAttribute( new Uint8Array( array ), itemSize ); }; THREE.Uint8ClampedAttribute = function ( array, itemSize ) { return new THREE.BufferAttribute( new Uint8ClampedArray( array ), itemSize ); }; THREE.Int16Attribute = function ( array, itemSize ) { return new THREE.BufferAttribute( new Int16Array( array ), itemSize ); }; THREE.Uint16Attribute = function ( array, itemSize ) { return new THREE.BufferAttribute( new Uint16Array( array ), itemSize ); }; THREE.Int32Attribute = function ( array, itemSize ) { return new THREE.BufferAttribute( new Int32Array( array ), itemSize ); }; THREE.Uint32Attribute = function ( array, itemSize ) { return new THREE.BufferAttribute( new Uint32Array( array ), itemSize ); }; THREE.Float32Attribute = function ( array, itemSize ) { return new THREE.BufferAttribute( new Float32Array( array ), itemSize ); }; THREE.Float64Attribute = function ( array, itemSize ) { return new THREE.BufferAttribute( new Float64Array( array ), itemSize ); }; // Deprecated THREE.DynamicBufferAttribute = function ( array, itemSize ) { console.warn( 'THREE.DynamicBufferAttribute has been removed. Use new THREE.BufferAttribute().setDynamic( true ) instead.' ); return new THREE.BufferAttribute( array, itemSize ).setDynamic( true ); }; // File:src/core/InstancedBufferAttribute.js /** * @author benaadams / https://twitter.com/ben_a_adams */ THREE.InstancedBufferAttribute = function ( array, itemSize, meshPerAttribute ) { THREE.BufferAttribute.call( this, array, itemSize ); this.meshPerAttribute = meshPerAttribute || 1; }; THREE.InstancedBufferAttribute.prototype = Object.create( THREE.BufferAttribute.prototype ); THREE.InstancedBufferAttribute.prototype.constructor = THREE.InstancedBufferAttribute; THREE.InstancedBufferAttribute.prototype.copy = function ( source ) { THREE.BufferAttribute.prototype.copy.call( this, source ); this.meshPerAttribute = source.meshPerAttribute; return this; }; // File:src/core/InterleavedBuffer.js /** * @author benaadams / https://twitter.com/ben_a_adams */ THREE.InterleavedBuffer = function ( array, stride ) { this.uuid = THREE.Math.generateUUID(); this.array = array; this.stride = stride; this.dynamic = false; this.updateRange = { offset: 0, count: - 1 }; this.version = 0; }; THREE.InterleavedBuffer.prototype = { constructor: THREE.InterleavedBuffer, get length () { return this.array.length; }, get count () { return this.array.length / this.stride; }, set needsUpdate( value ) { if ( value === true ) this.version ++; }, setDynamic: function ( value ) { this.dynamic = value; return this; }, copy: function ( source ) { this.array = new source.array.constructor( source.array ); this.stride = source.stride; this.dynamic = source.dynamic; return this; }, copyAt: function ( index1, attribute, index2 ) { index1 *= this.stride; index2 *= attribute.stride; for ( var i = 0, l = this.stride; i < l; i ++ ) { this.array[ index1 + i ] = attribute.array[ index2 + i ]; } return this; }, set: function ( value, offset ) { if ( offset === undefined ) offset = 0; this.array.set( value, offset ); return this; }, clone: function () { return new this.constructor().copy( this ); } }; // File:src/core/InstancedInterleavedBuffer.js /** * @author benaadams / https://twitter.com/ben_a_adams */ THREE.InstancedInterleavedBuffer = function ( array, stride, meshPerAttribute ) { THREE.InterleavedBuffer.call( this, array, stride ); this.meshPerAttribute = meshPerAttribute || 1; }; THREE.InstancedInterleavedBuffer.prototype = Object.create( THREE.InterleavedBuffer.prototype ); THREE.InstancedInterleavedBuffer.prototype.constructor = THREE.InstancedInterleavedBuffer; THREE.InstancedInterleavedBuffer.prototype.copy = function ( source ) { THREE.InterleavedBuffer.prototype.copy.call( this, source ); this.meshPerAttribute = source.meshPerAttribute; return this; }; // File:src/core/InterleavedBufferAttribute.js /** * @author benaadams / https://twitter.com/ben_a_adams */ THREE.InterleavedBufferAttribute = function ( interleavedBuffer, itemSize, offset ) { this.uuid = THREE.Math.generateUUID(); this.data = interleavedBuffer; this.itemSize = itemSize; this.offset = offset; }; THREE.InterleavedBufferAttribute.prototype = { constructor: THREE.InterleavedBufferAttribute, get length() { console.warn( 'THREE.BufferAttribute: .length has been deprecated. Please use .count.' ); return this.array.length; }, get count() { return this.data.count; }, setX: function ( index, x ) { this.data.array[ index * this.data.stride + this.offset ] = x; return this; }, setY: function ( index, y ) { this.data.array[ index * this.data.stride + this.offset + 1 ] = y; return this; }, setZ: function ( index, z ) { this.data.array[ index * this.data.stride + this.offset + 2 ] = z; return this; }, setW: function ( index, w ) { this.data.array[ index * this.data.stride + this.offset + 3 ] = w; return this; }, getX: function ( index ) { return this.data.array[ index * this.data.stride + this.offset ]; }, getY: function ( index ) { return this.data.array[ index * this.data.stride + this.offset + 1 ]; }, getZ: function ( index ) { return this.data.array[ index * this.data.stride + this.offset + 2 ]; }, getW: function ( index ) { return this.data.array[ index * this.data.stride + this.offset + 3 ]; }, setXY: function ( index, x, y ) { index = index * this.data.stride + this.offset; this.data.array[ index + 0 ] = x; this.data.array[ index + 1 ] = y; return this; }, setXYZ: function ( index, x, y, z ) { index = index * this.data.stride + this.offset; this.data.array[ index + 0 ] = x; this.data.array[ index + 1 ] = y; this.data.array[ index + 2 ] = z; return this; }, setXYZW: function ( index, x, y, z, w ) { index = index * this.data.stride + this.offset; this.data.array[ index + 0 ] = x; this.data.array[ index + 1 ] = y; this.data.array[ index + 2 ] = z; this.data.array[ index + 3 ] = w; return this; } }; // File:src/core/Geometry.js /** * @author mrdoob / http://mrdoob.com/ * @author kile / http://kile.stravaganza.org/ * @author alteredq / http://alteredqualia.com/ * @author mikael emtinger / http://gomo.se/ * @author zz85 / http://www.lab4games.net/zz85/blog * @author bhouston / http://clara.io */ THREE.Geometry = function () { Object.defineProperty( this, 'id', { value: THREE.GeometryIdCount ++ } ); this.uuid = THREE.Math.generateUUID(); this.name = ''; this.type = 'Geometry'; this.vertices = []; this.colors = []; this.faces = []; this.faceVertexUvs = [ [] ]; this.morphTargets = []; this.morphNormals = []; this.skinWeights = []; this.skinIndices = []; this.lineDistances = []; this.boundingBox = null; this.boundingSphere = null; // update flags this.verticesNeedUpdate = false; this.elementsNeedUpdate = false; this.uvsNeedUpdate = false; this.normalsNeedUpdate = false; this.colorsNeedUpdate = false; this.lineDistancesNeedUpdate = false; this.groupsNeedUpdate = false; }; Object.assign( THREE.Geometry.prototype, THREE.EventDispatcher.prototype, { applyMatrix: function ( matrix ) { var normalMatrix = new THREE.Matrix3().getNormalMatrix( matrix ); for ( var i = 0, il = this.vertices.length; i < il; i ++ ) { var vertex = this.vertices[ i ]; vertex.applyMatrix4( matrix ); } for ( var i = 0, il = this.faces.length; i < il; i ++ ) { var face = this.faces[ i ]; face.normal.applyMatrix3( normalMatrix ).normalize(); for ( var j = 0, jl = face.vertexNormals.length; j < jl; j ++ ) { face.vertexNormals[ j ].applyMatrix3( normalMatrix ).normalize(); } } if ( this.boundingBox !== null ) { this.computeBoundingBox(); } if ( this.boundingSphere !== null ) { this.computeBoundingSphere(); } this.verticesNeedUpdate = true; this.normalsNeedUpdate = true; return this; }, rotateX: function () { // rotate geometry around world x-axis var m1; return function rotateX( angle ) { if ( m1 === undefined ) m1 = new THREE.Matrix4(); m1.makeRotationX( angle ); this.applyMatrix( m1 ); return this; }; }(), rotateY: function () { // rotate geometry around world y-axis var m1; return function rotateY( angle ) { if ( m1 === undefined ) m1 = new THREE.Matrix4(); m1.makeRotationY( angle ); this.applyMatrix( m1 ); return this; }; }(), rotateZ: function () { // rotate geometry around world z-axis var m1; return function rotateZ( angle ) { if ( m1 === undefined ) m1 = new THREE.Matrix4(); m1.makeRotationZ( angle ); this.applyMatrix( m1 ); return this; }; }(), translate: function () { // translate geometry var m1; return function translate( x, y, z ) { if ( m1 === undefined ) m1 = new THREE.Matrix4(); m1.makeTranslation( x, y, z ); this.applyMatrix( m1 ); return this; }; }(), scale: function () { // scale geometry var m1; return function scale( x, y, z ) { if ( m1 === undefined ) m1 = new THREE.Matrix4(); m1.makeScale( x, y, z ); this.applyMatrix( m1 ); return this; }; }(), lookAt: function () { var obj; return function lookAt( vector ) { if ( obj === undefined ) obj = new THREE.Object3D(); obj.lookAt( vector ); obj.updateMatrix(); this.applyMatrix( obj.matrix ); }; }(), fromBufferGeometry: function ( geometry ) { var scope = this; var indices = geometry.index !== null ? geometry.index.array : undefined; var attributes = geometry.attributes; var positions = attributes.position.array; var normals = attributes.normal !== undefined ? attributes.normal.array : undefined; var colors = attributes.color !== undefined ? attributes.color.array : undefined; var uvs = attributes.uv !== undefined ? attributes.uv.array : undefined; var uvs2 = attributes.uv2 !== undefined ? attributes.uv2.array : undefined; if ( uvs2 !== undefined ) this.faceVertexUvs[ 1 ] = []; var tempNormals = []; var tempUVs = []; var tempUVs2 = []; for ( var i = 0, j = 0; i < positions.length; i += 3, j += 2 ) { scope.vertices.push( new THREE.Vector3( positions[ i ], positions[ i + 1 ], positions[ i + 2 ] ) ); if ( normals !== undefined ) { tempNormals.push( new THREE.Vector3( normals[ i ], normals[ i + 1 ], normals[ i + 2 ] ) ); } if ( colors !== undefined ) { scope.colors.push( new THREE.Color( colors[ i ], colors[ i + 1 ], colors[ i + 2 ] ) ); } if ( uvs !== undefined ) { tempUVs.push( new THREE.Vector2( uvs[ j ], uvs[ j + 1 ] ) ); } if ( uvs2 !== undefined ) { tempUVs2.push( new THREE.Vector2( uvs2[ j ], uvs2[ j + 1 ] ) ); } } function addFace( a, b, c, materialIndex ) { var vertexNormals = normals !== undefined ? [ tempNormals[ a ].clone(), tempNormals[ b ].clone(), tempNormals[ c ].clone() ] : []; var vertexColors = colors !== undefined ? [ scope.colors[ a ].clone(), scope.colors[ b ].clone(), scope.colors[ c ].clone() ] : []; var face = new THREE.Face3( a, b, c, vertexNormals, vertexColors, materialIndex ); scope.faces.push( face ); if ( uvs !== undefined ) { scope.faceVertexUvs[ 0 ].push( [ tempUVs[ a ].clone(), tempUVs[ b ].clone(), tempUVs[ c ].clone() ] ); } if ( uvs2 !== undefined ) { scope.faceVertexUvs[ 1 ].push( [ tempUVs2[ a ].clone(), tempUVs2[ b ].clone(), tempUVs2[ c ].clone() ] ); } } if ( indices !== undefined ) { var groups = geometry.groups; if ( groups.length > 0 ) { for ( var i = 0; i < groups.length; i ++ ) { var group = groups[ i ]; var start = group.start; var count = group.count; for ( var j = start, jl = start + count; j < jl; j += 3 ) { addFace( indices[ j ], indices[ j + 1 ], indices[ j + 2 ], group.materialIndex ); } } } else { for ( var i = 0; i < indices.length; i += 3 ) { addFace( indices[ i ], indices[ i + 1 ], indices[ i + 2 ] ); } } } else { for ( var i = 0; i < positions.length / 3; i += 3 ) { addFace( i, i + 1, i + 2 ); } } this.computeFaceNormals(); if ( geometry.boundingBox !== null ) { this.boundingBox = geometry.boundingBox.clone(); } if ( geometry.boundingSphere !== null ) { this.boundingSphere = geometry.boundingSphere.clone(); } return this; }, center: function () { this.computeBoundingBox(); var offset = this.boundingBox.center().negate(); this.translate( offset.x, offset.y, offset.z ); return offset; }, normalize: function () { this.computeBoundingSphere(); var center = this.boundingSphere.center; var radius = this.boundingSphere.radius; var s = radius === 0 ? 1 : 1.0 / radius; var matrix = new THREE.Matrix4(); matrix.set( s, 0, 0, - s * center.x, 0, s, 0, - s * center.y, 0, 0, s, - s * center.z, 0, 0, 0, 1 ); this.applyMatrix( matrix ); return this; }, computeFaceNormals: function () { var cb = new THREE.Vector3(), ab = new THREE.Vector3(); for ( var f = 0, fl = this.faces.length; f < fl; f ++ ) { var face = this.faces[ f ]; var vA = this.vertices[ face.a ]; var vB = this.vertices[ face.b ]; var vC = this.vertices[ face.c ]; cb.subVectors( vC, vB ); ab.subVectors( vA, vB ); cb.cross( ab ); cb.normalize(); face.normal.copy( cb ); } }, computeVertexNormals: function ( areaWeighted ) { if ( areaWeighted === undefined ) areaWeighted = true; var v, vl, f, fl, face, vertices; vertices = new Array( this.vertices.length ); for ( v = 0, vl = this.vertices.length; v < vl; v ++ ) { vertices[ v ] = new THREE.Vector3(); } if ( areaWeighted ) { // vertex normals weighted by triangle areas // http://www.iquilezles.org/www/articles/normals/normals.htm var vA, vB, vC; var cb = new THREE.Vector3(), ab = new THREE.Vector3(); for ( f = 0, fl = this.faces.length; f < fl; f ++ ) { face = this.faces[ f ]; vA = this.vertices[ face.a ]; vB = this.vertices[ face.b ]; vC = this.vertices[ face.c ]; cb.subVectors( vC, vB ); ab.subVectors( vA, vB ); cb.cross( ab ); vertices[ face.a ].add( cb ); vertices[ face.b ].add( cb ); vertices[ face.c ].add( cb ); } } else { for ( f = 0, fl = this.faces.length; f < fl; f ++ ) { face = this.faces[ f ]; vertices[ face.a ].add( face.normal ); vertices[ face.b ].add( face.normal ); vertices[ face.c ].add( face.normal ); } } for ( v = 0, vl = this.vertices.length; v < vl; v ++ ) { vertices[ v ].normalize(); } for ( f = 0, fl = this.faces.length; f < fl; f ++ ) { face = this.faces[ f ]; var vertexNormals = face.vertexNormals; if ( vertexNormals.length === 3 ) { vertexNormals[ 0 ].copy( vertices[ face.a ] ); vertexNormals[ 1 ].copy( vertices[ face.b ] ); vertexNormals[ 2 ].copy( vertices[ face.c ] ); } else { vertexNormals[ 0 ] = vertices[ face.a ].clone(); vertexNormals[ 1 ] = vertices[ face.b ].clone(); vertexNormals[ 2 ] = vertices[ face.c ].clone(); } } if ( this.faces.length > 0 ) { this.normalsNeedUpdate = true; } }, computeMorphNormals: function () { var i, il, f, fl, face; // save original normals // - create temp variables on first access // otherwise just copy (for faster repeated calls) for ( f = 0, fl = this.faces.length; f < fl; f ++ ) { face = this.faces[ f ]; if ( ! face.__originalFaceNormal ) { face.__originalFaceNormal = face.normal.clone(); } else { face.__originalFaceNormal.copy( face.normal ); } if ( ! face.__originalVertexNormals ) face.__originalVertexNormals = []; for ( i = 0, il = face.vertexNormals.length; i < il; i ++ ) { if ( ! face.__originalVertexNormals[ i ] ) { face.__originalVertexNormals[ i ] = face.vertexNormals[ i ].clone(); } else { face.__originalVertexNormals[ i ].copy( face.vertexNormals[ i ] ); } } } // use temp geometry to compute face and vertex normals for each morph var tmpGeo = new THREE.Geometry(); tmpGeo.faces = this.faces; for ( i = 0, il = this.morphTargets.length; i < il; i ++ ) { // create on first access if ( ! this.morphNormals[ i ] ) { this.morphNormals[ i ] = {}; this.morphNormals[ i ].faceNormals = []; this.morphNormals[ i ].vertexNormals = []; var dstNormalsFace = this.morphNormals[ i ].faceNormals; var dstNormalsVertex = this.morphNormals[ i ].vertexNormals; var faceNormal, vertexNormals; for ( f = 0, fl = this.faces.length; f < fl; f ++ ) { faceNormal = new THREE.Vector3(); vertexNormals = { a: new THREE.Vector3(), b: new THREE.Vector3(), c: new THREE.Vector3() }; dstNormalsFace.push( faceNormal ); dstNormalsVertex.push( vertexNormals ); } } var morphNormals = this.morphNormals[ i ]; // set vertices to morph target tmpGeo.vertices = this.morphTargets[ i ].vertices; // compute morph normals tmpGeo.computeFaceNormals(); tmpGeo.computeVertexNormals(); // store morph normals var faceNormal, vertexNormals; for ( f = 0, fl = this.faces.length; f < fl; f ++ ) { face = this.faces[ f ]; faceNormal = morphNormals.faceNormals[ f ]; vertexNormals = morphNormals.vertexNormals[ f ]; faceNormal.copy( face.normal ); vertexNormals.a.copy( face.vertexNormals[ 0 ] ); vertexNormals.b.copy( face.vertexNormals[ 1 ] ); vertexNormals.c.copy( face.vertexNormals[ 2 ] ); } } // restore original normals for ( f = 0, fl = this.faces.length; f < fl; f ++ ) { face = this.faces[ f ]; face.normal = face.__originalFaceNormal; face.vertexNormals = face.__originalVertexNormals; } }, computeTangents: function () { console.warn( 'THREE.Geometry: .computeTangents() has been removed.' ); }, computeLineDistances: function () { var d = 0; var vertices = this.vertices; for ( var i = 0, il = vertices.length; i < il; i ++ ) { if ( i > 0 ) { d += vertices[ i ].distanceTo( vertices[ i - 1 ] ); } this.lineDistances[ i ] = d; } }, computeBoundingBox: function () { if ( this.boundingBox === null ) { this.boundingBox = new THREE.Box3(); } this.boundingBox.setFromPoints( this.vertices ); }, computeBoundingSphere: function () { if ( this.boundingSphere === null ) { this.boundingSphere = new THREE.Sphere(); } this.boundingSphere.setFromPoints( this.vertices ); }, merge: function ( geometry, matrix, materialIndexOffset ) { if ( geometry instanceof THREE.Geometry === false ) { console.error( 'THREE.Geometry.merge(): geometry not an instance of THREE.Geometry.', geometry ); return; } var normalMatrix, vertexOffset = this.vertices.length, vertices1 = this.vertices, vertices2 = geometry.vertices, faces1 = this.faces, faces2 = geometry.faces, uvs1 = this.faceVertexUvs[ 0 ], uvs2 = geometry.faceVertexUvs[ 0 ]; if ( materialIndexOffset === undefined ) materialIndexOffset = 0; if ( matrix !== undefined ) { normalMatrix = new THREE.Matrix3().getNormalMatrix( matrix ); } // vertices for ( var i = 0, il = vertices2.length; i < il; i ++ ) { var vertex = vertices2[ i ]; var vertexCopy = vertex.clone(); if ( matrix !== undefined ) vertexCopy.applyMatrix4( matrix ); vertices1.push( vertexCopy ); } // faces for ( i = 0, il = faces2.length; i < il; i ++ ) { var face = faces2[ i ], faceCopy, normal, color, faceVertexNormals = face.vertexNormals, faceVertexColors = face.vertexColors; faceCopy = new THREE.Face3( face.a + vertexOffset, face.b + vertexOffset, face.c + vertexOffset ); faceCopy.normal.copy( face.normal ); if ( normalMatrix !== undefined ) { faceCopy.normal.applyMatrix3( normalMatrix ).normalize(); } for ( var j = 0, jl = faceVertexNormals.length; j < jl; j ++ ) { normal = faceVertexNormals[ j ].clone(); if ( normalMatrix !== undefined ) { normal.applyMatrix3( normalMatrix ).normalize(); } faceCopy.vertexNormals.push( normal ); } faceCopy.color.copy( face.color ); for ( var j = 0, jl = faceVertexColors.length; j < jl; j ++ ) { color = faceVertexColors[ j ]; faceCopy.vertexColors.push( color.clone() ); } faceCopy.materialIndex = face.materialIndex + materialIndexOffset; faces1.push( faceCopy ); } // uvs for ( i = 0, il = uvs2.length; i < il; i ++ ) { var uv = uvs2[ i ], uvCopy = []; if ( uv === undefined ) { continue; } for ( var j = 0, jl = uv.length; j < jl; j ++ ) { uvCopy.push( uv[ j ].clone() ); } uvs1.push( uvCopy ); } }, mergeMesh: function ( mesh ) { if ( mesh instanceof THREE.Mesh === false ) { console.error( 'THREE.Geometry.mergeMesh(): mesh not an instance of THREE.Mesh.', mesh ); return; } mesh.matrixAutoUpdate && mesh.updateMatrix(); this.merge( mesh.geometry, mesh.matrix ); }, /* * Checks for duplicate vertices with hashmap. * Duplicated vertices are removed * and faces' vertices are updated. */ mergeVertices: function () { var verticesMap = {}; // Hashmap for looking up vertices by position coordinates (and making sure they are unique) var unique = [], changes = []; var v, key; var precisionPoints = 4; // number of decimal points, e.g. 4 for epsilon of 0.0001 var precision = Math.pow( 10, precisionPoints ); var i, il, face; var indices, j, jl; for ( i = 0, il = this.vertices.length; i < il; i ++ ) { v = this.vertices[ i ]; key = Math.round( v.x * precision ) + '_' + Math.round( v.y * precision ) + '_' + Math.round( v.z * precision ); if ( verticesMap[ key ] === undefined ) { verticesMap[ key ] = i; unique.push( this.vertices[ i ] ); changes[ i ] = unique.length - 1; } else { //console.log('Duplicate vertex found. ', i, ' could be using ', verticesMap[key]); changes[ i ] = changes[ verticesMap[ key ] ]; } } // if faces are completely degenerate after merging vertices, we // have to remove them from the geometry. var faceIndicesToRemove = []; for ( i = 0, il = this.faces.length; i < il; i ++ ) { face = this.faces[ i ]; face.a = changes[ face.a ]; face.b = changes[ face.b ]; face.c = changes[ face.c ]; indices = [ face.a, face.b, face.c ]; var dupIndex = - 1; // if any duplicate vertices are found in a Face3 // we have to remove the face as nothing can be saved for ( var n = 0; n < 3; n ++ ) { if ( indices[ n ] === indices[ ( n + 1 ) % 3 ] ) { dupIndex = n; faceIndicesToRemove.push( i ); break; } } } for ( i = faceIndicesToRemove.length - 1; i >= 0; i -- ) { var idx = faceIndicesToRemove[ i ]; this.faces.splice( idx, 1 ); for ( j = 0, jl = this.faceVertexUvs.length; j < jl; j ++ ) { this.faceVertexUvs[ j ].splice( idx, 1 ); } } // Use unique set of vertices var diff = this.vertices.length - unique.length; this.vertices = unique; return diff; }, sortFacesByMaterialIndex: function () { var faces = this.faces; var length = faces.length; // tag faces for ( var i = 0; i < length; i ++ ) { faces[ i ]._id = i; } // sort faces function materialIndexSort( a, b ) { return a.materialIndex - b.materialIndex; } faces.sort( materialIndexSort ); // sort uvs var uvs1 = this.faceVertexUvs[ 0 ]; var uvs2 = this.faceVertexUvs[ 1 ]; var newUvs1, newUvs2; if ( uvs1 && uvs1.length === length ) newUvs1 = []; if ( uvs2 && uvs2.length === length ) newUvs2 = []; for ( var i = 0; i < length; i ++ ) { var id = faces[ i ]._id; if ( newUvs1 ) newUvs1.push( uvs1[ id ] ); if ( newUvs2 ) newUvs2.push( uvs2[ id ] ); } if ( newUvs1 ) this.faceVertexUvs[ 0 ] = newUvs1; if ( newUvs2 ) this.faceVertexUvs[ 1 ] = newUvs2; }, toJSON: function () { var data = { metadata: { version: 4.4, type: 'Geometry', generator: 'Geometry.toJSON' } }; // standard Geometry serialization data.uuid = this.uuid; data.type = this.type; if ( this.name !== '' ) data.name = this.name; if ( this.parameters !== undefined ) { var parameters = this.parameters; for ( var key in parameters ) { if ( parameters[ key ] !== undefined ) data[ key ] = parameters[ key ]; } return data; } var vertices = []; for ( var i = 0; i < this.vertices.length; i ++ ) { var vertex = this.vertices[ i ]; vertices.push( vertex.x, vertex.y, vertex.z ); } var faces = []; var normals = []; var normalsHash = {}; var colors = []; var colorsHash = {}; var uvs = []; var uvsHash = {}; for ( var i = 0; i < this.faces.length; i ++ ) { var face = this.faces[ i ]; var hasMaterial = true; var hasFaceUv = false; // deprecated var hasFaceVertexUv = this.faceVertexUvs[ 0 ][ i ] !== undefined; var hasFaceNormal = face.normal.length() > 0; var hasFaceVertexNormal = face.vertexNormals.length > 0; var hasFaceColor = face.color.r !== 1 || face.color.g !== 1 || face.color.b !== 1; var hasFaceVertexColor = face.vertexColors.length > 0; var faceType = 0; faceType = setBit( faceType, 0, 0 ); // isQuad faceType = setBit( faceType, 1, hasMaterial ); faceType = setBit( faceType, 2, hasFaceUv ); faceType = setBit( faceType, 3, hasFaceVertexUv ); faceType = setBit( faceType, 4, hasFaceNormal ); faceType = setBit( faceType, 5, hasFaceVertexNormal ); faceType = setBit( faceType, 6, hasFaceColor ); faceType = setBit( faceType, 7, hasFaceVertexColor ); faces.push( faceType ); faces.push( face.a, face.b, face.c ); faces.push( face.materialIndex ); if ( hasFaceVertexUv ) { var faceVertexUvs = this.faceVertexUvs[ 0 ][ i ]; faces.push( getUvIndex( faceVertexUvs[ 0 ] ), getUvIndex( faceVertexUvs[ 1 ] ), getUvIndex( faceVertexUvs[ 2 ] ) ); } if ( hasFaceNormal ) { faces.push( getNormalIndex( face.normal ) ); } if ( hasFaceVertexNormal ) { var vertexNormals = face.vertexNormals; faces.push( getNormalIndex( vertexNormals[ 0 ] ), getNormalIndex( vertexNormals[ 1 ] ), getNormalIndex( vertexNormals[ 2 ] ) ); } if ( hasFaceColor ) { faces.push( getColorIndex( face.color ) ); } if ( hasFaceVertexColor ) { var vertexColors = face.vertexColors; faces.push( getColorIndex( vertexColors[ 0 ] ), getColorIndex( vertexColors[ 1 ] ), getColorIndex( vertexColors[ 2 ] ) ); } } function setBit( value, position, enabled ) { return enabled ? value | ( 1 << position ) : value & ( ~ ( 1 << position ) ); } function getNormalIndex( normal ) { var hash = normal.x.toString() + normal.y.toString() + normal.z.toString(); if ( normalsHash[ hash ] !== undefined ) { return normalsHash[ hash ]; } normalsHash[ hash ] = normals.length / 3; normals.push( normal.x, normal.y, normal.z ); return normalsHash[ hash ]; } function getColorIndex( color ) { var hash = color.r.toString() + color.g.toString() + color.b.toString(); if ( colorsHash[ hash ] !== undefined ) { return colorsHash[ hash ]; } colorsHash[ hash ] = colors.length; colors.push( color.getHex() ); return colorsHash[ hash ]; } function getUvIndex( uv ) { var hash = uv.x.toString() + uv.y.toString(); if ( uvsHash[ hash ] !== undefined ) { return uvsHash[ hash ]; } uvsHash[ hash ] = uvs.length / 2; uvs.push( uv.x, uv.y ); return uvsHash[ hash ]; } data.data = {}; data.data.vertices = vertices; data.data.normals = normals; if ( colors.length > 0 ) data.data.colors = colors; if ( uvs.length > 0 ) data.data.uvs = [ uvs ]; // temporal backward compatibility data.data.faces = faces; return data; }, clone: function () { /* // Handle primitives var parameters = this.parameters; if ( parameters !== undefined ) { var values = []; for ( var key in parameters ) { values.push( parameters[ key ] ); } var geometry = Object.create( this.constructor.prototype ); this.constructor.apply( geometry, values ); return geometry; } return new this.constructor().copy( this ); */ return new THREE.Geometry().copy( this ); }, copy: function ( source ) { this.vertices = []; this.faces = []; this.faceVertexUvs = [ [] ]; var vertices = source.vertices; for ( var i = 0, il = vertices.length; i < il; i ++ ) { this.vertices.push( vertices[ i ].clone() ); } var faces = source.faces; for ( var i = 0, il = faces.length; i < il; i ++ ) { this.faces.push( faces[ i ].clone() ); } for ( var i = 0, il = source.faceVertexUvs.length; i < il; i ++ ) { var faceVertexUvs = source.faceVertexUvs[ i ]; if ( this.faceVertexUvs[ i ] === undefined ) { this.faceVertexUvs[ i ] = []; } for ( var j = 0, jl = faceVertexUvs.length; j < jl; j ++ ) { var uvs = faceVertexUvs[ j ], uvsCopy = []; for ( var k = 0, kl = uvs.length; k < kl; k ++ ) { var uv = uvs[ k ]; uvsCopy.push( uv.clone() ); } this.faceVertexUvs[ i ].push( uvsCopy ); } } return this; }, dispose: function () { this.dispatchEvent( { type: 'dispose' } ); } } ); THREE.GeometryIdCount = 0; // File:src/core/DirectGeometry.js /** * @author mrdoob / http://mrdoob.com/ */ THREE.DirectGeometry = function () { Object.defineProperty( this, 'id', { value: THREE.GeometryIdCount ++ } ); this.uuid = THREE.Math.generateUUID(); this.name = ''; this.type = 'DirectGeometry'; this.indices = []; this.vertices = []; this.normals = []; this.colors = []; this.uvs = []; this.uvs2 = []; this.groups = []; this.morphTargets = {}; this.skinWeights = []; this.skinIndices = []; // this.lineDistances = []; this.boundingBox = null; this.boundingSphere = null; // update flags this.verticesNeedUpdate = false; this.normalsNeedUpdate = false; this.colorsNeedUpdate = false; this.uvsNeedUpdate = false; this.groupsNeedUpdate = false; }; Object.assign( THREE.DirectGeometry.prototype, THREE.EventDispatcher.prototype, { computeBoundingBox: THREE.Geometry.prototype.computeBoundingBox, computeBoundingSphere: THREE.Geometry.prototype.computeBoundingSphere, computeFaceNormals: function () { console.warn( 'THREE.DirectGeometry: computeFaceNormals() is not a method of this type of geometry.' ); }, computeVertexNormals: function () { console.warn( 'THREE.DirectGeometry: computeVertexNormals() is not a method of this type of geometry.' ); }, computeGroups: function ( geometry ) { var group; var groups = []; var materialIndex; var faces = geometry.faces; for ( var i = 0; i < faces.length; i ++ ) { var face = faces[ i ]; // materials if ( face.materialIndex !== materialIndex ) { materialIndex = face.materialIndex; if ( group !== undefined ) { group.count = ( i * 3 ) - group.start; groups.push( group ); } group = { start: i * 3, materialIndex: materialIndex }; } } if ( group !== undefined ) { group.count = ( i * 3 ) - group.start; groups.push( group ); } this.groups = groups; }, fromGeometry: function ( geometry ) { var faces = geometry.faces; var vertices = geometry.vertices; var faceVertexUvs = geometry.faceVertexUvs; var hasFaceVertexUv = faceVertexUvs[ 0 ] && faceVertexUvs[ 0 ].length > 0; var hasFaceVertexUv2 = faceVertexUvs[ 1 ] && faceVertexUvs[ 1 ].length > 0; // morphs var morphTargets = geometry.morphTargets; var morphTargetsLength = morphTargets.length; var morphTargetsPosition; if ( morphTargetsLength > 0 ) { morphTargetsPosition = []; for ( var i = 0; i < morphTargetsLength; i ++ ) { morphTargetsPosition[ i ] = []; } this.morphTargets.position = morphTargetsPosition; } var morphNormals = geometry.morphNormals; var morphNormalsLength = morphNormals.length; var morphTargetsNormal; if ( morphNormalsLength > 0 ) { morphTargetsNormal = []; for ( var i = 0; i < morphNormalsLength; i ++ ) { morphTargetsNormal[ i ] = []; } this.morphTargets.normal = morphTargetsNormal; } // skins var skinIndices = geometry.skinIndices; var skinWeights = geometry.skinWeights; var hasSkinIndices = skinIndices.length === vertices.length; var hasSkinWeights = skinWeights.length === vertices.length; // for ( var i = 0; i < faces.length; i ++ ) { var face = faces[ i ]; this.vertices.push( vertices[ face.a ], vertices[ face.b ], vertices[ face.c ] ); var vertexNormals = face.vertexNormals; if ( vertexNormals.length === 3 ) { this.normals.push( vertexNormals[ 0 ], vertexNormals[ 1 ], vertexNormals[ 2 ] ); } else { var normal = face.normal; this.normals.push( normal, normal, normal ); } var vertexColors = face.vertexColors; if ( vertexColors.length === 3 ) { this.colors.push( vertexColors[ 0 ], vertexColors[ 1 ], vertexColors[ 2 ] ); } else { var color = face.color; this.colors.push( color, color, color ); } if ( hasFaceVertexUv === true ) { var vertexUvs = faceVertexUvs[ 0 ][ i ]; if ( vertexUvs !== undefined ) { this.uvs.push( vertexUvs[ 0 ], vertexUvs[ 1 ], vertexUvs[ 2 ] ); } else { console.warn( 'THREE.DirectGeometry.fromGeometry(): Undefined vertexUv ', i ); this.uvs.push( new THREE.Vector2(), new THREE.Vector2(), new THREE.Vector2() ); } } if ( hasFaceVertexUv2 === true ) { var vertexUvs = faceVertexUvs[ 1 ][ i ]; if ( vertexUvs !== undefined ) { this.uvs2.push( vertexUvs[ 0 ], vertexUvs[ 1 ], vertexUvs[ 2 ] ); } else { console.warn( 'THREE.DirectGeometry.fromGeometry(): Undefined vertexUv2 ', i ); this.uvs2.push( new THREE.Vector2(), new THREE.Vector2(), new THREE.Vector2() ); } } // morphs for ( var j = 0; j < morphTargetsLength; j ++ ) { var morphTarget = morphTargets[ j ].vertices; morphTargetsPosition[ j ].push( morphTarget[ face.a ], morphTarget[ face.b ], morphTarget[ face.c ] ); } for ( var j = 0; j < morphNormalsLength; j ++ ) { var morphNormal = morphNormals[ j ].vertexNormals[ i ]; morphTargetsNormal[ j ].push( morphNormal.a, morphNormal.b, morphNormal.c ); } // skins if ( hasSkinIndices ) { this.skinIndices.push( skinIndices[ face.a ], skinIndices[ face.b ], skinIndices[ face.c ] ); } if ( hasSkinWeights ) { this.skinWeights.push( skinWeights[ face.a ], skinWeights[ face.b ], skinWeights[ face.c ] ); } } this.computeGroups( geometry ); this.verticesNeedUpdate = geometry.verticesNeedUpdate; this.normalsNeedUpdate = geometry.normalsNeedUpdate; this.colorsNeedUpdate = geometry.colorsNeedUpdate; this.uvsNeedUpdate = geometry.uvsNeedUpdate; this.groupsNeedUpdate = geometry.groupsNeedUpdate; return this; }, dispose: function () { this.dispatchEvent( { type: 'dispose' } ); } } ); // File:src/core/BufferGeometry.js /** * @author alteredq / http://alteredqualia.com/ * @author mrdoob / http://mrdoob.com/ */ THREE.BufferGeometry = function () { Object.defineProperty( this, 'id', { value: THREE.GeometryIdCount ++ } ); this.uuid = THREE.Math.generateUUID(); this.name = ''; this.type = 'BufferGeometry'; this.index = null; this.attributes = {}; this.morphAttributes = {}; this.groups = []; this.boundingBox = null; this.boundingSphere = null; this.drawRange = { start: 0, count: Infinity }; }; Object.assign( THREE.BufferGeometry.prototype, THREE.EventDispatcher.prototype, { getIndex: function () { return this.index; }, setIndex: function ( index ) { this.index = index; }, addAttribute: function ( name, attribute ) { if ( attribute instanceof THREE.BufferAttribute === false && attribute instanceof THREE.InterleavedBufferAttribute === false ) { console.warn( 'THREE.BufferGeometry: .addAttribute() now expects ( name, attribute ).' ); this.addAttribute( name, new THREE.BufferAttribute( arguments[ 1 ], arguments[ 2 ] ) ); return; } if ( name === 'index' ) { console.warn( 'THREE.BufferGeometry.addAttribute: Use .setIndex() for index attribute.' ); this.setIndex( attribute ); return; } this.attributes[ name ] = attribute; return this; }, getAttribute: function ( name ) { return this.attributes[ name ]; }, removeAttribute: function ( name ) { delete this.attributes[ name ]; return this; }, addGroup: function ( start, count, materialIndex ) { this.groups.push( { start: start, count: count, materialIndex: materialIndex !== undefined ? materialIndex : 0 } ); }, clearGroups: function () { this.groups = []; }, setDrawRange: function ( start, count ) { this.drawRange.start = start; this.drawRange.count = count; }, applyMatrix: function ( matrix ) { var position = this.attributes.position; if ( position !== undefined ) { matrix.applyToVector3Array( position.array ); position.needsUpdate = true; } var normal = this.attributes.normal; if ( normal !== undefined ) { var normalMatrix = new THREE.Matrix3().getNormalMatrix( matrix ); normalMatrix.applyToVector3Array( normal.array ); normal.needsUpdate = true; } if ( this.boundingBox !== null ) { this.computeBoundingBox(); } if ( this.boundingSphere !== null ) { this.computeBoundingSphere(); } return this; }, rotateX: function () { // rotate geometry around world x-axis var m1; return function rotateX( angle ) { if ( m1 === undefined ) m1 = new THREE.Matrix4(); m1.makeRotationX( angle ); this.applyMatrix( m1 ); return this; }; }(), rotateY: function () { // rotate geometry around world y-axis var m1; return function rotateY( angle ) { if ( m1 === undefined ) m1 = new THREE.Matrix4(); m1.makeRotationY( angle ); this.applyMatrix( m1 ); return this; }; }(), rotateZ: function () { // rotate geometry around world z-axis var m1; return function rotateZ( angle ) { if ( m1 === undefined ) m1 = new THREE.Matrix4(); m1.makeRotationZ( angle ); this.applyMatrix( m1 ); return this; }; }(), translate: function () { // translate geometry var m1; return function translate( x, y, z ) { if ( m1 === undefined ) m1 = new THREE.Matrix4(); m1.makeTranslation( x, y, z ); this.applyMatrix( m1 ); return this; }; }(), scale: function () { // scale geometry var m1; return function scale( x, y, z ) { if ( m1 === undefined ) m1 = new THREE.Matrix4(); m1.makeScale( x, y, z ); this.applyMatrix( m1 ); return this; }; }(), lookAt: function () { var obj; return function lookAt( vector ) { if ( obj === undefined ) obj = new THREE.Object3D(); obj.lookAt( vector ); obj.updateMatrix(); this.applyMatrix( obj.matrix ); }; }(), center: function () { this.computeBoundingBox(); var offset = this.boundingBox.center().negate(); this.translate( offset.x, offset.y, offset.z ); return offset; }, setFromObject: function ( object ) { // console.log( 'THREE.BufferGeometry.setFromObject(). Converting', object, this ); var geometry = object.geometry; if ( object instanceof THREE.Points || object instanceof THREE.Line ) { var positions = new THREE.Float32Attribute( geometry.vertices.length * 3, 3 ); var colors = new THREE.Float32Attribute( geometry.colors.length * 3, 3 ); this.addAttribute( 'position', positions.copyVector3sArray( geometry.vertices ) ); this.addAttribute( 'color', colors.copyColorsArray( geometry.colors ) ); if ( geometry.lineDistances && geometry.lineDistances.length === geometry.vertices.length ) { var lineDistances = new THREE.Float32Attribute( geometry.lineDistances.length, 1 ); this.addAttribute( 'lineDistance', lineDistances.copyArray( geometry.lineDistances ) ); } if ( geometry.boundingSphere !== null ) { this.boundingSphere = geometry.boundingSphere.clone(); } if ( geometry.boundingBox !== null ) { this.boundingBox = geometry.boundingBox.clone(); } } else if ( object instanceof THREE.Mesh ) { if ( geometry instanceof THREE.Geometry ) { this.fromGeometry( geometry ); } } return this; }, updateFromObject: function ( object ) { var geometry = object.geometry; if ( object instanceof THREE.Mesh ) { var direct = geometry.__directGeometry; if ( direct === undefined ) { return this.fromGeometry( geometry ); } direct.verticesNeedUpdate = geometry.verticesNeedUpdate; direct.normalsNeedUpdate = geometry.normalsNeedUpdate; direct.colorsNeedUpdate = geometry.colorsNeedUpdate; direct.uvsNeedUpdate = geometry.uvsNeedUpdate; direct.groupsNeedUpdate = geometry.groupsNeedUpdate; geometry.verticesNeedUpdate = false; geometry.normalsNeedUpdate = false; geometry.colorsNeedUpdate = false; geometry.uvsNeedUpdate = false; geometry.groupsNeedUpdate = false; geometry = direct; } if ( geometry.verticesNeedUpdate === true ) { var attribute = this.attributes.position; if ( attribute !== undefined ) { attribute.copyVector3sArray( geometry.vertices ); attribute.needsUpdate = true; } geometry.verticesNeedUpdate = false; } if ( geometry.normalsNeedUpdate === true ) { var attribute = this.attributes.normal; if ( attribute !== undefined ) { attribute.copyVector3sArray( geometry.normals ); attribute.needsUpdate = true; } geometry.normalsNeedUpdate = false; } if ( geometry.colorsNeedUpdate === true ) { var attribute = this.attributes.color; if ( attribute !== undefined ) { attribute.copyColorsArray( geometry.colors ); attribute.needsUpdate = true; } geometry.colorsNeedUpdate = false; } if ( geometry.uvsNeedUpdate ) { var attribute = this.attributes.uv; if ( attribute !== undefined ) { attribute.copyVector2sArray( geometry.uvs ); attribute.needsUpdate = true; } geometry.uvsNeedUpdate = false; } if ( geometry.lineDistancesNeedUpdate ) { var attribute = this.attributes.lineDistance; if ( attribute !== undefined ) { attribute.copyArray( geometry.lineDistances ); attribute.needsUpdate = true; } geometry.lineDistancesNeedUpdate = false; } if ( geometry.groupsNeedUpdate ) { geometry.computeGroups( object.geometry ); this.groups = geometry.groups; geometry.groupsNeedUpdate = false; } return this; }, fromGeometry: function ( geometry ) { geometry.__directGeometry = new THREE.DirectGeometry().fromGeometry( geometry ); return this.fromDirectGeometry( geometry.__directGeometry ); }, fromDirectGeometry: function ( geometry ) { var positions = new Float32Array( geometry.vertices.length * 3 ); this.addAttribute( 'position', new THREE.BufferAttribute( positions, 3 ).copyVector3sArray( geometry.vertices ) ); if ( geometry.normals.length > 0 ) { var normals = new Float32Array( geometry.normals.length * 3 ); this.addAttribute( 'normal', new THREE.BufferAttribute( normals, 3 ).copyVector3sArray( geometry.normals ) ); } if ( geometry.colors.length > 0 ) { var colors = new Float32Array( geometry.colors.length * 3 ); this.addAttribute( 'color', new THREE.BufferAttribute( colors, 3 ).copyColorsArray( geometry.colors ) ); } if ( geometry.uvs.length > 0 ) { var uvs = new Float32Array( geometry.uvs.length * 2 ); this.addAttribute( 'uv', new THREE.BufferAttribute( uvs, 2 ).copyVector2sArray( geometry.uvs ) ); } if ( geometry.uvs2.length > 0 ) { var uvs2 = new Float32Array( geometry.uvs2.length * 2 ); this.addAttribute( 'uv2', new THREE.BufferAttribute( uvs2, 2 ).copyVector2sArray( geometry.uvs2 ) ); } if ( geometry.indices.length > 0 ) { var TypeArray = geometry.vertices.length > 65535 ? Uint32Array : Uint16Array; var indices = new TypeArray( geometry.indices.length * 3 ); this.setIndex( new THREE.BufferAttribute( indices, 1 ).copyIndicesArray( geometry.indices ) ); } // groups this.groups = geometry.groups; // morphs for ( var name in geometry.morphTargets ) { var array = []; var morphTargets = geometry.morphTargets[ name ]; for ( var i = 0, l = morphTargets.length; i < l; i ++ ) { var morphTarget = morphTargets[ i ]; var attribute = new THREE.Float32Attribute( morphTarget.length * 3, 3 ); array.push( attribute.copyVector3sArray( morphTarget ) ); } this.morphAttributes[ name ] = array; } // skinning if ( geometry.skinIndices.length > 0 ) { var skinIndices = new THREE.Float32Attribute( geometry.skinIndices.length * 4, 4 ); this.addAttribute( 'skinIndex', skinIndices.copyVector4sArray( geometry.skinIndices ) ); } if ( geometry.skinWeights.length > 0 ) { var skinWeights = new THREE.Float32Attribute( geometry.skinWeights.length * 4, 4 ); this.addAttribute( 'skinWeight', skinWeights.copyVector4sArray( geometry.skinWeights ) ); } // if ( geometry.boundingSphere !== null ) { this.boundingSphere = geometry.boundingSphere.clone(); } if ( geometry.boundingBox !== null ) { this.boundingBox = geometry.boundingBox.clone(); } return this; }, computeBoundingBox: function () { if ( this.boundingBox === null ) { this.boundingBox = new THREE.Box3(); } var positions = this.attributes.position.array; if ( positions !== undefined ) { this.boundingBox.setFromArray( positions ); } else { this.boundingBox.makeEmpty(); } if ( isNaN( this.boundingBox.min.x ) || isNaN( this.boundingBox.min.y ) || isNaN( this.boundingBox.min.z ) ) { console.error( 'THREE.BufferGeometry.computeBoundingBox: Computed min/max have NaN values. The "position" attribute is likely to have NaN values.', this ); } }, computeBoundingSphere: function () { var box = new THREE.Box3(); var vector = new THREE.Vector3(); return function computeBoundingSphere() { if ( this.boundingSphere === null ) { this.boundingSphere = new THREE.Sphere(); } var positions = this.attributes.position; if ( positions ) { var array = positions.array; var center = this.boundingSphere.center; box.setFromArray( array ); box.center( center ); // hoping to find a boundingSphere with a radius smaller than the // boundingSphere of the boundingBox: sqrt(3) smaller in the best case var maxRadiusSq = 0; for ( var i = 0, il = array.length; i < il; i += 3 ) { vector.fromArray( array, i ); maxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( vector ) ); } this.boundingSphere.radius = Math.sqrt( maxRadiusSq ); if ( isNaN( this.boundingSphere.radius ) ) { console.error( 'THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The "position" attribute is likely to have NaN values.', this ); } } }; }(), computeFaceNormals: function () { // backwards compatibility }, computeVertexNormals: function () { var index = this.index; var attributes = this.attributes; var groups = this.groups; if ( attributes.position ) { var positions = attributes.position.array; if ( attributes.normal === undefined ) { this.addAttribute( 'normal', new THREE.BufferAttribute( new Float32Array( positions.length ), 3 ) ); } else { // reset existing normals to zero var array = attributes.normal.array; for ( var i = 0, il = array.length; i < il; i ++ ) { array[ i ] = 0; } } var normals = attributes.normal.array; var vA, vB, vC, pA = new THREE.Vector3(), pB = new THREE.Vector3(), pC = new THREE.Vector3(), cb = new THREE.Vector3(), ab = new THREE.Vector3(); // indexed elements if ( index ) { var indices = index.array; if ( groups.length === 0 ) { this.addGroup( 0, indices.length ); } for ( var j = 0, jl = groups.length; j < jl; ++ j ) { var group = groups[ j ]; var start = group.start; var count = group.count; for ( var i = start, il = start + count; i < il; i += 3 ) { vA = indices[ i + 0 ] * 3; vB = indices[ i + 1 ] * 3; vC = indices[ i + 2 ] * 3; pA.fromArray( positions, vA ); pB.fromArray( positions, vB ); pC.fromArray( positions, vC ); cb.subVectors( pC, pB ); ab.subVectors( pA, pB ); cb.cross( ab ); normals[ vA ] += cb.x; normals[ vA + 1 ] += cb.y; normals[ vA + 2 ] += cb.z; normals[ vB ] += cb.x; normals[ vB + 1 ] += cb.y; normals[ vB + 2 ] += cb.z; normals[ vC ] += cb.x; normals[ vC + 1 ] += cb.y; normals[ vC + 2 ] += cb.z; } } } else { // non-indexed elements (unconnected triangle soup) for ( var i = 0, il = positions.length; i < il; i += 9 ) { pA.fromArray( positions, i ); pB.fromArray( positions, i + 3 ); pC.fromArray( positions, i + 6 ); cb.subVectors( pC, pB ); ab.subVectors( pA, pB ); cb.cross( ab ); normals[ i ] = cb.x; normals[ i + 1 ] = cb.y; normals[ i + 2 ] = cb.z; normals[ i + 3 ] = cb.x; normals[ i + 4 ] = cb.y; normals[ i + 5 ] = cb.z; normals[ i + 6 ] = cb.x; normals[ i + 7 ] = cb.y; normals[ i + 8 ] = cb.z; } } this.normalizeNormals(); attributes.normal.needsUpdate = true; } }, merge: function ( geometry, offset ) { if ( geometry instanceof THREE.BufferGeometry === false ) { console.error( 'THREE.BufferGeometry.merge(): geometry not an instance of THREE.BufferGeometry.', geometry ); return; } if ( offset === undefined ) offset = 0; var attributes = this.attributes; for ( var key in attributes ) { if ( geometry.attributes[ key ] === undefined ) continue; var attribute1 = attributes[ key ]; var attributeArray1 = attribute1.array; var attribute2 = geometry.attributes[ key ]; var attributeArray2 = attribute2.array; var attributeSize = attribute2.itemSize; for ( var i = 0, j = attributeSize * offset; i < attributeArray2.length; i ++, j ++ ) { attributeArray1[ j ] = attributeArray2[ i ]; } } return this; }, normalizeNormals: function () { var normals = this.attributes.normal.array; var x, y, z, n; for ( var i = 0, il = normals.length; i < il; i += 3 ) { x = normals[ i ]; y = normals[ i + 1 ]; z = normals[ i + 2 ]; n = 1.0 / Math.sqrt( x * x + y * y + z * z ); normals[ i ] *= n; normals[ i + 1 ] *= n; normals[ i + 2 ] *= n; } }, toNonIndexed: function () { if ( this.index === null ) { console.warn( 'THREE.BufferGeometry.toNonIndexed(): Geometry is already non-indexed.' ); return this; } var geometry2 = new THREE.BufferGeometry(); var indices = this.index.array; var attributes = this.attributes; for ( var name in attributes ) { var attribute = attributes[ name ]; var array = attribute.array; var itemSize = attribute.itemSize; var array2 = new array.constructor( indices.length * itemSize ); var index = 0, index2 = 0; for ( var i = 0, l = indices.length; i < l; i ++ ) { index = indices[ i ] * itemSize; for ( var j = 0; j < itemSize; j ++ ) { array2[ index2 ++ ] = array[ index ++ ]; } } geometry2.addAttribute( name, new THREE.BufferAttribute( array2, itemSize ) ); } return geometry2; }, toJSON: function () { var data = { metadata: { version: 4.4, type: 'BufferGeometry', generator: 'BufferGeometry.toJSON' } }; // standard BufferGeometry serialization data.uuid = this.uuid; data.type = this.type; if ( this.name !== '' ) data.name = this.name; if ( this.parameters !== undefined ) { var parameters = this.parameters; for ( var key in parameters ) { if ( parameters[ key ] !== undefined ) data[ key ] = parameters[ key ]; } return data; } data.data = { attributes: {} }; var index = this.index; if ( index !== null ) { var array = Array.prototype.slice.call( index.array ); data.data.index = { type: index.array.constructor.name, array: array }; } var attributes = this.attributes; for ( var key in attributes ) { var attribute = attributes[ key ]; var array = Array.prototype.slice.call( attribute.array ); data.data.attributes[ key ] = { itemSize: attribute.itemSize, type: attribute.array.constructor.name, array: array, normalized: attribute.normalized }; } var groups = this.groups; if ( groups.length > 0 ) { data.data.groups = JSON.parse( JSON.stringify( groups ) ); } var boundingSphere = this.boundingSphere; if ( boundingSphere !== null ) { data.data.boundingSphere = { center: boundingSphere.center.toArray(), radius: boundingSphere.radius }; } return data; }, clone: function () { /* // Handle primitives var parameters = this.parameters; if ( parameters !== undefined ) { var values = []; for ( var key in parameters ) { values.push( parameters[ key ] ); } var geometry = Object.create( this.constructor.prototype ); this.constructor.apply( geometry, values ); return geometry; } return new this.constructor().copy( this ); */ return new THREE.BufferGeometry().copy( this ); }, copy: function ( source ) { var index = source.index; if ( index !== null ) { this.setIndex( index.clone() ); } var attributes = source.attributes; for ( var name in attributes ) { var attribute = attributes[ name ]; this.addAttribute( name, attribute.clone() ); } var groups = source.groups; for ( var i = 0, l = groups.length; i < l; i ++ ) { var group = groups[ i ]; this.addGroup( group.start, group.count, group.materialIndex ); } return this; }, dispose: function () { this.dispatchEvent( { type: 'dispose' } ); } } ); THREE.BufferGeometry.MaxIndex = 65535; // File:src/core/InstancedBufferGeometry.js /** * @author benaadams / https://twitter.com/ben_a_adams */ THREE.InstancedBufferGeometry = function () { THREE.BufferGeometry.call( this ); this.type = 'InstancedBufferGeometry'; this.maxInstancedCount = undefined; }; THREE.InstancedBufferGeometry.prototype = Object.create( THREE.BufferGeometry.prototype ); THREE.InstancedBufferGeometry.prototype.constructor = THREE.InstancedBufferGeometry; THREE.InstancedBufferGeometry.prototype.addGroup = function ( start, count, instances ) { this.groups.push( { start: start, count: count, instances: instances } ); }; THREE.InstancedBufferGeometry.prototype.copy = function ( source ) { var index = source.index; if ( index !== null ) { this.setIndex( index.clone() ); } var attributes = source.attributes; for ( var name in attributes ) { var attribute = attributes[ name ]; this.addAttribute( name, attribute.clone() ); } var groups = source.groups; for ( var i = 0, l = groups.length; i < l; i ++ ) { var group = groups[ i ]; this.addGroup( group.start, group.count, group.instances ); } return this; }; // File:src/core/Uniform.js /** * @author mrdoob / http://mrdoob.com/ */ THREE.Uniform = function ( value ) { if ( typeof value === 'string' ) { console.warn( 'THREE.Uniform: Type parameter is no longer needed.' ); value = arguments[ 1 ]; } this.value = value; this.dynamic = false; }; THREE.Uniform.prototype = { constructor: THREE.Uniform, onUpdate: function ( callback ) { this.dynamic = true; this.onUpdateCallback = callback; return this; } }; // File:src/animation/AnimationAction.js /** * * Action provided by AnimationMixer for scheduling clip playback on specific * objects. * * @author Ben Houston / http://clara.io/ * @author David Sarno / http://lighthaus.us/ * @author tschw * */ THREE.AnimationAction = function() { throw new Error( "THREE.AnimationAction: " + "Use mixer.clipAction for construction." ); }; THREE.AnimationAction._new = function AnimationAction( mixer, clip, localRoot ) { this._mixer = mixer; this._clip = clip; this._localRoot = localRoot || null; var tracks = clip.tracks, nTracks = tracks.length, interpolants = new Array( nTracks ); var interpolantSettings = { endingStart: THREE.ZeroCurvatureEnding, endingEnd: THREE.ZeroCurvatureEnding }; for ( var i = 0; i !== nTracks; ++ i ) { var interpolant = tracks[ i ].createInterpolant( null ); interpolants[ i ] = interpolant; interpolant.settings = interpolantSettings; } this._interpolantSettings = interpolantSettings; this._interpolants = interpolants; // bound by the mixer // inside: PropertyMixer (managed by the mixer) this._propertyBindings = new Array( nTracks ); this._cacheIndex = null; // for the memory manager this._byClipCacheIndex = null; // for the memory manager this._timeScaleInterpolant = null; this._weightInterpolant = null; this.loop = THREE.LoopRepeat; this._loopCount = -1; // global mixer time when the action is to be started // it's set back to 'null' upon start of the action this._startTime = null; // scaled local time of the action // gets clamped or wrapped to 0..clip.duration according to loop this.time = 0; this.timeScale = 1; this._effectiveTimeScale = 1; this.weight = 1; this._effectiveWeight = 1; this.repetitions = Infinity; // no. of repetitions when looping this.paused = false; // false -> zero effective time scale this.enabled = true; // true -> zero effective weight this.clampWhenFinished = false; // keep feeding the last frame? this.zeroSlopeAtStart = true; // for smooth interpolation w/o separate this.zeroSlopeAtEnd = true; // clips for start, loop and end }; THREE.AnimationAction._new.prototype = { constructor: THREE.AnimationAction._new, // State & Scheduling play: function() { this._mixer._activateAction( this ); return this; }, stop: function() { this._mixer._deactivateAction( this ); return this.reset(); }, reset: function() { this.paused = false; this.enabled = true; this.time = 0; // restart clip this._loopCount = -1; // forget previous loops this._startTime = null; // forget scheduling return this.stopFading().stopWarping(); }, isRunning: function() { var start = this._startTime; return this.enabled && ! this.paused && this.timeScale !== 0 && this._startTime === null && this._mixer._isActiveAction( this ); }, // return true when play has been called isScheduled: function() { return this._mixer._isActiveAction( this ); }, startAt: function( time ) { this._startTime = time; return this; }, setLoop: function( mode, repetitions ) { this.loop = mode; this.repetitions = repetitions; return this; }, // Weight // set the weight stopping any scheduled fading // although .enabled = false yields an effective weight of zero, this // method does *not* change .enabled, because it would be confusing setEffectiveWeight: function( weight ) { this.weight = weight; // note: same logic as when updated at runtime this._effectiveWeight = this.enabled ? weight : 0; return this.stopFading(); }, // return the weight considering fading and .enabled getEffectiveWeight: function() { return this._effectiveWeight; }, fadeIn: function( duration ) { return this._scheduleFading( duration, 0, 1 ); }, fadeOut: function( duration ) { return this._scheduleFading( duration, 1, 0 ); }, crossFadeFrom: function( fadeOutAction, duration, warp ) { var mixer = this._mixer; fadeOutAction.fadeOut( duration ); this.fadeIn( duration ); if( warp ) { var fadeInDuration = this._clip.duration, fadeOutDuration = fadeOutAction._clip.duration, startEndRatio = fadeOutDuration / fadeInDuration, endStartRatio = fadeInDuration / fadeOutDuration; fadeOutAction.warp( 1.0, startEndRatio, duration ); this.warp( endStartRatio, 1.0, duration ); } return this; }, crossFadeTo: function( fadeInAction, duration, warp ) { return fadeInAction.crossFadeFrom( this, duration, warp ); }, stopFading: function() { var weightInterpolant = this._weightInterpolant; if ( weightInterpolant !== null ) { this._weightInterpolant = null; this._mixer._takeBackControlInterpolant( weightInterpolant ); } return this; }, // Time Scale Control // set the weight stopping any scheduled warping // although .paused = true yields an effective time scale of zero, this // method does *not* change .paused, because it would be confusing setEffectiveTimeScale: function( timeScale ) { this.timeScale = timeScale; this._effectiveTimeScale = this.paused ? 0 :timeScale; return this.stopWarping(); }, // return the time scale considering warping and .paused getEffectiveTimeScale: function() { return this._effectiveTimeScale; }, setDuration: function( duration ) { this.timeScale = this._clip.duration / duration; return this.stopWarping(); }, syncWith: function( action ) { this.time = action.time; this.timeScale = action.timeScale; return this.stopWarping(); }, halt: function( duration ) { return this.warp( this._effectiveTimeScale, 0, duration ); }, warp: function( startTimeScale, endTimeScale, duration ) { var mixer = this._mixer, now = mixer.time, interpolant = this._timeScaleInterpolant, timeScale = this.timeScale; if ( interpolant === null ) { interpolant = mixer._lendControlInterpolant(), this._timeScaleInterpolant = interpolant; } var times = interpolant.parameterPositions, values = interpolant.sampleValues; times[ 0 ] = now; times[ 1 ] = now + duration; values[ 0 ] = startTimeScale / timeScale; values[ 1 ] = endTimeScale / timeScale; return this; }, stopWarping: function() { var timeScaleInterpolant = this._timeScaleInterpolant; if ( timeScaleInterpolant !== null ) { this._timeScaleInterpolant = null; this._mixer._takeBackControlInterpolant( timeScaleInterpolant ); } return this; }, // Object Accessors getMixer: function() { return this._mixer; }, getClip: function() { return this._clip; }, getRoot: function() { return this._localRoot || this._mixer._root; }, // Interna _update: function( time, deltaTime, timeDirection, accuIndex ) { // called by the mixer var startTime = this._startTime; if ( startTime !== null ) { // check for scheduled start of action var timeRunning = ( time - startTime ) * timeDirection; if ( timeRunning < 0 || timeDirection === 0 ) { return; // yet to come / don't decide when delta = 0 } // start this._startTime = null; // unschedule deltaTime = timeDirection * timeRunning; } // apply time scale and advance time deltaTime *= this._updateTimeScale( time ); var clipTime = this._updateTime( deltaTime ); // note: _updateTime may disable the action resulting in // an effective weight of 0 var weight = this._updateWeight( time ); if ( weight > 0 ) { var interpolants = this._interpolants; var propertyMixers = this._propertyBindings; for ( var j = 0, m = interpolants.length; j !== m; ++ j ) { interpolants[ j ].evaluate( clipTime ); propertyMixers[ j ].accumulate( accuIndex, weight ); } } }, _updateWeight: function( time ) { var weight = 0; if ( this.enabled ) { weight = this.weight; var interpolant = this._weightInterpolant; if ( interpolant !== null ) { var interpolantValue = interpolant.evaluate( time )[ 0 ]; weight *= interpolantValue; if ( time > interpolant.parameterPositions[ 1 ] ) { this.stopFading(); if ( interpolantValue === 0 ) { // faded out, disable this.enabled = false; } } } } this._effectiveWeight = weight; return weight; }, _updateTimeScale: function( time ) { var timeScale = 0; if ( ! this.paused ) { timeScale = this.timeScale; var interpolant = this._timeScaleInterpolant; if ( interpolant !== null ) { var interpolantValue = interpolant.evaluate( time )[ 0 ]; timeScale *= interpolantValue; if ( time > interpolant.parameterPositions[ 1 ] ) { this.stopWarping(); if ( timeScale === 0 ) { // motion has halted, pause this.paused = true; } else { // warp done - apply final time scale this.timeScale = timeScale; } } } } this._effectiveTimeScale = timeScale; return timeScale; }, _updateTime: function( deltaTime ) { var time = this.time + deltaTime; if ( deltaTime === 0 ) return time; var duration = this._clip.duration, loop = this.loop, loopCount = this._loopCount; if ( loop === THREE.LoopOnce ) { if ( loopCount === -1 ) { // just started this.loopCount = 0; this._setEndings( true, true, false ); } handle_stop: { if ( time >= duration ) { time = duration; } else if ( time < 0 ) { time = 0; } else break handle_stop; if ( this.clampWhenFinished ) this.paused = true; else this.enabled = false; this._mixer.dispatchEvent( { type: 'finished', action: this, direction: deltaTime < 0 ? -1 : 1 } ); } } else { // repetitive Repeat or PingPong var pingPong = ( loop === THREE.LoopPingPong ); if ( loopCount === -1 ) { // just started if ( deltaTime >= 0 ) { loopCount = 0; this._setEndings( true, this.repetitions === 0, pingPong ); } else { // when looping in reverse direction, the initial // transition through zero counts as a repetition, // so leave loopCount at -1 this._setEndings( this.repetitions === 0, true, pingPong ); } } if ( time >= duration || time < 0 ) { // wrap around var loopDelta = Math.floor( time / duration ); // signed time -= duration * loopDelta; loopCount += Math.abs( loopDelta ); var pending = this.repetitions - loopCount; if ( pending < 0 ) { // have to stop (switch state, clamp time, fire event) if ( this.clampWhenFinished ) this.paused = true; else this.enabled = false; time = deltaTime > 0 ? duration : 0; this._mixer.dispatchEvent( { type: 'finished', action: this, direction: deltaTime > 0 ? 1 : -1 } ); } else { // keep running if ( pending === 0 ) { // entering the last round var atStart = deltaTime < 0; this._setEndings( atStart, ! atStart, pingPong ); } else { this._setEndings( false, false, pingPong ); } this._loopCount = loopCount; this._mixer.dispatchEvent( { type: 'loop', action: this, loopDelta: loopDelta } ); } } if ( pingPong && ( loopCount & 1 ) === 1 ) { // invert time for the "pong round" this.time = time; return duration - time; } } this.time = time; return time; }, _setEndings: function( atStart, atEnd, pingPong ) { var settings = this._interpolantSettings; if ( pingPong ) { settings.endingStart = THREE.ZeroSlopeEnding; settings.endingEnd = THREE.ZeroSlopeEnding; } else { // assuming for LoopOnce atStart == atEnd == true if ( atStart ) { settings.endingStart = this.zeroSlopeAtStart ? THREE.ZeroSlopeEnding : THREE.ZeroCurvatureEnding; } else { settings.endingStart = THREE.WrapAroundEnding; } if ( atEnd ) { settings.endingEnd = this.zeroSlopeAtEnd ? THREE.ZeroSlopeEnding : THREE.ZeroCurvatureEnding; } else { settings.endingEnd = THREE.WrapAroundEnding; } } }, _scheduleFading: function( duration, weightNow, weightThen ) { var mixer = this._mixer, now = mixer.time, interpolant = this._weightInterpolant; if ( interpolant === null ) { interpolant = mixer._lendControlInterpolant(), this._weightInterpolant = interpolant; } var times = interpolant.parameterPositions, values = interpolant.sampleValues; times[ 0 ] = now; values[ 0 ] = weightNow; times[ 1 ] = now + duration; values[ 1 ] = weightThen; return this; } }; // File:src/animation/AnimationClip.js /** * * Reusable set of Tracks that represent an animation. * * @author Ben Houston / http://clara.io/ * @author David Sarno / http://lighthaus.us/ */ THREE.AnimationClip = function ( name, duration, tracks ) { this.name = name; this.tracks = tracks; this.duration = ( duration !== undefined ) ? duration : -1; this.uuid = THREE.Math.generateUUID(); // this means it should figure out its duration by scanning the tracks if ( this.duration < 0 ) { this.resetDuration(); } // maybe only do these on demand, as doing them here could potentially slow down loading // but leaving these here during development as this ensures a lot of testing of these functions this.trim(); this.optimize(); }; THREE.AnimationClip.prototype = { constructor: THREE.AnimationClip, resetDuration: function() { var tracks = this.tracks, duration = 0; for ( var i = 0, n = tracks.length; i !== n; ++ i ) { var track = this.tracks[ i ]; duration = Math.max( duration, track.times[ track.times.length - 1 ] ); } this.duration = duration; }, trim: function() { for ( var i = 0; i < this.tracks.length; i ++ ) { this.tracks[ i ].trim( 0, this.duration ); } return this; }, optimize: function() { for ( var i = 0; i < this.tracks.length; i ++ ) { this.tracks[ i ].optimize(); } return this; } }; // Static methods: Object.assign( THREE.AnimationClip, { parse: function( json ) { var tracks = [], jsonTracks = json.tracks, frameTime = 1.0 / ( json.fps || 1.0 ); for ( var i = 0, n = jsonTracks.length; i !== n; ++ i ) { tracks.push( THREE.KeyframeTrack.parse( jsonTracks[ i ] ).scale( frameTime ) ); } return new THREE.AnimationClip( json.name, json.duration, tracks ); }, toJSON: function( clip ) { var tracks = [], clipTracks = clip.tracks; var json = { 'name': clip.name, 'duration': clip.duration, 'tracks': tracks }; for ( var i = 0, n = clipTracks.length; i !== n; ++ i ) { tracks.push( THREE.KeyframeTrack.toJSON( clipTracks[ i ] ) ); } return json; }, CreateFromMorphTargetSequence: function( name, morphTargetSequence, fps, noLoop ) { var numMorphTargets = morphTargetSequence.length; var tracks = []; for ( var i = 0; i < numMorphTargets; i ++ ) { var times = []; var values = []; times.push( ( i + numMorphTargets - 1 ) % numMorphTargets, i, ( i + 1 ) % numMorphTargets ); values.push( 0, 1, 0 ); var order = THREE.AnimationUtils.getKeyframeOrder( times ); times = THREE.AnimationUtils.sortedArray( times, 1, order ); values = THREE.AnimationUtils.sortedArray( values, 1, order ); // if there is a key at the first frame, duplicate it as the // last frame as well for perfect loop. if ( ! noLoop && times[ 0 ] === 0 ) { times.push( numMorphTargets ); values.push( values[ 0 ] ); } tracks.push( new THREE.NumberKeyframeTrack( '.morphTargetInfluences[' + morphTargetSequence[ i ].name + ']', times, values ).scale( 1.0 / fps ) ); } return new THREE.AnimationClip( name, -1, tracks ); }, findByName: function( objectOrClipArray, name ) { var clipArray = objectOrClipArray; if ( ! Array.isArray( objectOrClipArray ) ) { var o = objectOrClipArray; clipArray = o.geometry && o.geometry.animations || o.animations; } for ( var i = 0; i < clipArray.length; i ++ ) { if ( clipArray[ i ].name === name ) { return clipArray[ i ]; } } return null; }, CreateClipsFromMorphTargetSequences: function( morphTargets, fps, noLoop ) { var animationToMorphTargets = {}; // tested with https://regex101.com/ on trick sequences // such flamingo_flyA_003, flamingo_run1_003, crdeath0059 var pattern = /^([\w-]*?)([\d]+)$/; // sort morph target names into animation groups based // patterns like Walk_001, Walk_002, Run_001, Run_002 for ( var i = 0, il = morphTargets.length; i < il; i ++ ) { var morphTarget = morphTargets[ i ]; var parts = morphTarget.name.match( pattern ); if ( parts && parts.length > 1 ) { var name = parts[ 1 ]; var animationMorphTargets = animationToMorphTargets[ name ]; if ( ! animationMorphTargets ) { animationToMorphTargets[ name ] = animationMorphTargets = []; } animationMorphTargets.push( morphTarget ); } } var clips = []; for ( var name in animationToMorphTargets ) { clips.push( THREE.AnimationClip.CreateFromMorphTargetSequence( name, animationToMorphTargets[ name ], fps, noLoop ) ); } return clips; }, // parse the animation.hierarchy format parseAnimation: function( animation, bones, nodeName ) { if ( ! animation ) { console.error( " no animation in JSONLoader data" ); return null; } var addNonemptyTrack = function( trackType, trackName, animationKeys, propertyName, destTracks ) { // only return track if there are actually keys. if ( animationKeys.length !== 0 ) { var times = []; var values = []; THREE.AnimationUtils.flattenJSON( animationKeys, times, values, propertyName ); // empty keys are filtered out, so check again if ( times.length !== 0 ) { destTracks.push( new trackType( trackName, times, values ) ); } } }; var tracks = []; var clipName = animation.name || 'default'; // automatic length determination in AnimationClip. var duration = animation.length || -1; var fps = animation.fps || 30; var hierarchyTracks = animation.hierarchy || []; for ( var h = 0; h < hierarchyTracks.length; h ++ ) { var animationKeys = hierarchyTracks[ h ].keys; // skip empty tracks if ( ! animationKeys || animationKeys.length === 0 ) continue; // process morph targets in a way exactly compatible // with AnimationHandler.init( animation ) if ( animationKeys[0].morphTargets ) { // figure out all morph targets used in this track var morphTargetNames = {}; for ( var k = 0; k < animationKeys.length; k ++ ) { if ( animationKeys[k].morphTargets ) { for ( var m = 0; m < animationKeys[k].morphTargets.length; m ++ ) { morphTargetNames[ animationKeys[k].morphTargets[m] ] = -1; } } } // create a track for each morph target with all zero // morphTargetInfluences except for the keys in which // the morphTarget is named. for ( var morphTargetName in morphTargetNames ) { var times = []; var values = []; for ( var m = 0; m !== animationKeys[k].morphTargets.length; ++ m ) { var animationKey = animationKeys[k]; times.push( animationKey.time ); values.push( ( animationKey.morphTarget === morphTargetName ) ? 1 : 0 ); } tracks.push( new THREE.NumberKeyframeTrack( '.morphTargetInfluence[' + morphTargetName + ']', times, values ) ); } duration = morphTargetNames.length * ( fps || 1.0 ); } else { // ...assume skeletal animation var boneName = '.bones[' + bones[ h ].name + ']'; addNonemptyTrack( THREE.VectorKeyframeTrack, boneName + '.position', animationKeys, 'pos', tracks ); addNonemptyTrack( THREE.QuaternionKeyframeTrack, boneName + '.quaternion', animationKeys, 'rot', tracks ); addNonemptyTrack( THREE.VectorKeyframeTrack, boneName + '.scale', animationKeys, 'scl', tracks ); } } if ( tracks.length === 0 ) { return null; } var clip = new THREE.AnimationClip( clipName, duration, tracks ); return clip; } } ); // File:src/animation/AnimationMixer.js /** * * Player for AnimationClips. * * * @author Ben Houston / http://clara.io/ * @author David Sarno / http://lighthaus.us/ * @author tschw */ THREE.AnimationMixer = function( root ) { this._root = root; this._initMemoryManager(); this._accuIndex = 0; this.time = 0; this.timeScale = 1.0; }; Object.assign( THREE.AnimationMixer.prototype, THREE.EventDispatcher.prototype, { // return an action for a clip optionally using a custom root target // object (this method allocates a lot of dynamic memory in case a // previously unknown clip/root combination is specified) clipAction: function( clip, optionalRoot ) { var root = optionalRoot || this._root, rootUuid = root.uuid, clipObject = typeof clip === 'string' ? THREE.AnimationClip.findByName( root, clip ) : clip, clipUuid = clipObject !== null ? clipObject.uuid : clip, actionsForClip = this._actionsByClip[ clipUuid ], prototypeAction = null; if ( actionsForClip !== undefined ) { var existingAction = actionsForClip.actionByRoot[ rootUuid ]; if ( existingAction !== undefined ) { return existingAction; } // we know the clip, so we don't have to parse all // the bindings again but can just copy prototypeAction = actionsForClip.knownActions[ 0 ]; // also, take the clip from the prototype action if ( clipObject === null ) clipObject = prototypeAction._clip; } // clip must be known when specified via string if ( clipObject === null ) return null; // allocate all resources required to run it var newAction = new THREE. AnimationMixer._Action( this, clipObject, optionalRoot ); this._bindAction( newAction, prototypeAction ); // and make the action known to the memory manager this._addInactiveAction( newAction, clipUuid, rootUuid ); return newAction; }, // get an existing action existingAction: function( clip, optionalRoot ) { var root = optionalRoot || this._root, rootUuid = root.uuid, clipObject = typeof clip === 'string' ? THREE.AnimationClip.findByName( root, clip ) : clip, clipUuid = clipObject ? clipObject.uuid : clip, actionsForClip = this._actionsByClip[ clipUuid ]; if ( actionsForClip !== undefined ) { return actionsForClip.actionByRoot[ rootUuid ] || null; } return null; }, // deactivates all previously scheduled actions stopAllAction: function() { var actions = this._actions, nActions = this._nActiveActions, bindings = this._bindings, nBindings = this._nActiveBindings; this._nActiveActions = 0; this._nActiveBindings = 0; for ( var i = 0; i !== nActions; ++ i ) { actions[ i ].reset(); } for ( var i = 0; i !== nBindings; ++ i ) { bindings[ i ].useCount = 0; } return this; }, // advance the time and update apply the animation update: function( deltaTime ) { deltaTime *= this.timeScale; var actions = this._actions, nActions = this._nActiveActions, time = this.time += deltaTime, timeDirection = Math.sign( deltaTime ), accuIndex = this._accuIndex ^= 1; // run active actions for ( var i = 0; i !== nActions; ++ i ) { var action = actions[ i ]; if ( action.enabled ) { action._update( time, deltaTime, timeDirection, accuIndex ); } } // update scene graph var bindings = this._bindings, nBindings = this._nActiveBindings; for ( var i = 0; i !== nBindings; ++ i ) { bindings[ i ].apply( accuIndex ); } return this; }, // return this mixer's root target object getRoot: function() { return this._root; }, // free all resources specific to a particular clip uncacheClip: function( clip ) { var actions = this._actions, clipUuid = clip.uuid, actionsByClip = this._actionsByClip, actionsForClip = actionsByClip[ clipUuid ]; if ( actionsForClip !== undefined ) { // note: just calling _removeInactiveAction would mess up the // iteration state and also require updating the state we can // just throw away var actionsToRemove = actionsForClip.knownActions; for ( var i = 0, n = actionsToRemove.length; i !== n; ++ i ) { var action = actionsToRemove[ i ]; this._deactivateAction( action ); var cacheIndex = action._cacheIndex, lastInactiveAction = actions[ actions.length - 1 ]; action._cacheIndex = null; action._byClipCacheIndex = null; lastInactiveAction._cacheIndex = cacheIndex; actions[ cacheIndex ] = lastInactiveAction; actions.pop(); this._removeInactiveBindingsForAction( action ); } delete actionsByClip[ clipUuid ]; } }, // free all resources specific to a particular root target object uncacheRoot: function( root ) { var rootUuid = root.uuid, actionsByClip = this._actionsByClip; for ( var clipUuid in actionsByClip ) { var actionByRoot = actionsByClip[ clipUuid ].actionByRoot, action = actionByRoot[ rootUuid ]; if ( action !== undefined ) { this._deactivateAction( action ); this._removeInactiveAction( action ); } } var bindingsByRoot = this._bindingsByRootAndName, bindingByName = bindingsByRoot[ rootUuid ]; if ( bindingByName !== undefined ) { for ( var trackName in bindingByName ) { var binding = bindingByName[ trackName ]; binding.restoreOriginalState(); this._removeInactiveBinding( binding ); } } }, // remove a targeted clip from the cache uncacheAction: function( clip, optionalRoot ) { var action = this.existingAction( clip, optionalRoot ); if ( action !== null ) { this._deactivateAction( action ); this._removeInactiveAction( action ); } } } ); THREE.AnimationMixer._Action = THREE.AnimationAction._new; // Implementation details: Object.assign( THREE.AnimationMixer.prototype, { _bindAction: function( action, prototypeAction ) { var root = action._localRoot || this._root, tracks = action._clip.tracks, nTracks = tracks.length, bindings = action._propertyBindings, interpolants = action._interpolants, rootUuid = root.uuid, bindingsByRoot = this._bindingsByRootAndName, bindingsByName = bindingsByRoot[ rootUuid ]; if ( bindingsByName === undefined ) { bindingsByName = {}; bindingsByRoot[ rootUuid ] = bindingsByName; } for ( var i = 0; i !== nTracks; ++ i ) { var track = tracks[ i ], trackName = track.name, binding = bindingsByName[ trackName ]; if ( binding !== undefined ) { bindings[ i ] = binding; } else { binding = bindings[ i ]; if ( binding !== undefined ) { // existing binding, make sure the cache knows if ( binding._cacheIndex === null ) { ++ binding.referenceCount; this._addInactiveBinding( binding, rootUuid, trackName ); } continue; } var path = prototypeAction && prototypeAction. _propertyBindings[ i ].binding.parsedPath; binding = new THREE.PropertyMixer( THREE.PropertyBinding.create( root, trackName, path ), track.ValueTypeName, track.getValueSize() ); ++ binding.referenceCount; this._addInactiveBinding( binding, rootUuid, trackName ); bindings[ i ] = binding; } interpolants[ i ].resultBuffer = binding.buffer; } }, _activateAction: function( action ) { if ( ! this._isActiveAction( action ) ) { if ( action._cacheIndex === null ) { // this action has been forgotten by the cache, but the user // appears to be still using it -> rebind var rootUuid = ( action._localRoot || this._root ).uuid, clipUuid = action._clip.uuid, actionsForClip = this._actionsByClip[ clipUuid ]; this._bindAction( action, actionsForClip && actionsForClip.knownActions[ 0 ] ); this._addInactiveAction( action, clipUuid, rootUuid ); } var bindings = action._propertyBindings; // increment reference counts / sort out state for ( var i = 0, n = bindings.length; i !== n; ++ i ) { var binding = bindings[ i ]; if ( binding.useCount ++ === 0 ) { this._lendBinding( binding ); binding.saveOriginalState(); } } this._lendAction( action ); } }, _deactivateAction: function( action ) { if ( this._isActiveAction( action ) ) { var bindings = action._propertyBindings; // decrement reference counts / sort out state for ( var i = 0, n = bindings.length; i !== n; ++ i ) { var binding = bindings[ i ]; if ( -- binding.useCount === 0 ) { binding.restoreOriginalState(); this._takeBackBinding( binding ); } } this._takeBackAction( action ); } }, // Memory manager _initMemoryManager: function() { this._actions = []; // 'nActiveActions' followed by inactive ones this._nActiveActions = 0; this._actionsByClip = {}; // inside: // { // knownActions: Array< _Action > - used as prototypes // actionByRoot: _Action - lookup // } this._bindings = []; // 'nActiveBindings' followed by inactive ones this._nActiveBindings = 0; this._bindingsByRootAndName = {}; // inside: Map< name, PropertyMixer > this._controlInterpolants = []; // same game as above this._nActiveControlInterpolants = 0; var scope = this; this.stats = { actions: { get total() { return scope._actions.length; }, get inUse() { return scope._nActiveActions; } }, bindings: { get total() { return scope._bindings.length; }, get inUse() { return scope._nActiveBindings; } }, controlInterpolants: { get total() { return scope._controlInterpolants.length; }, get inUse() { return scope._nActiveControlInterpolants; } } }; }, // Memory management for _Action objects _isActiveAction: function( action ) { var index = action._cacheIndex; return index !== null && index < this._nActiveActions; }, _addInactiveAction: function( action, clipUuid, rootUuid ) { var actions = this._actions, actionsByClip = this._actionsByClip, actionsForClip = actionsByClip[ clipUuid ]; if ( actionsForClip === undefined ) { actionsForClip = { knownActions: [ action ], actionByRoot: {} }; action._byClipCacheIndex = 0; actionsByClip[ clipUuid ] = actionsForClip; } else { var knownActions = actionsForClip.knownActions; action._byClipCacheIndex = knownActions.length; knownActions.push( action ); } action._cacheIndex = actions.length; actions.push( action ); actionsForClip.actionByRoot[ rootUuid ] = action; }, _removeInactiveAction: function( action ) { var actions = this._actions, lastInactiveAction = actions[ actions.length - 1 ], cacheIndex = action._cacheIndex; lastInactiveAction._cacheIndex = cacheIndex; actions[ cacheIndex ] = lastInactiveAction; actions.pop(); action._cacheIndex = null; var clipUuid = action._clip.uuid, actionsByClip = this._actionsByClip, actionsForClip = actionsByClip[ clipUuid ], knownActionsForClip = actionsForClip.knownActions, lastKnownAction = knownActionsForClip[ knownActionsForClip.length - 1 ], byClipCacheIndex = action._byClipCacheIndex; lastKnownAction._byClipCacheIndex = byClipCacheIndex; knownActionsForClip[ byClipCacheIndex ] = lastKnownAction; knownActionsForClip.pop(); action._byClipCacheIndex = null; var actionByRoot = actionsForClip.actionByRoot, rootUuid = ( actions._localRoot || this._root ).uuid; delete actionByRoot[ rootUuid ]; if ( knownActionsForClip.length === 0 ) { delete actionsByClip[ clipUuid ]; } this._removeInactiveBindingsForAction( action ); }, _removeInactiveBindingsForAction: function( action ) { var bindings = action._propertyBindings; for ( var i = 0, n = bindings.length; i !== n; ++ i ) { var binding = bindings[ i ]; if ( -- binding.referenceCount === 0 ) { this._removeInactiveBinding( binding ); } } }, _lendAction: function( action ) { // [ active actions | inactive actions ] // [ active actions >| inactive actions ] // s a // <-swap-> // a s var actions = this._actions, prevIndex = action._cacheIndex, lastActiveIndex = this._nActiveActions ++, firstInactiveAction = actions[ lastActiveIndex ]; action._cacheIndex = lastActiveIndex; actions[ lastActiveIndex ] = action; firstInactiveAction._cacheIndex = prevIndex; actions[ prevIndex ] = firstInactiveAction; }, _takeBackAction: function( action ) { // [ active actions | inactive actions ] // [ active actions |< inactive actions ] // a s // <-swap-> // s a var actions = this._actions, prevIndex = action._cacheIndex, firstInactiveIndex = -- this._nActiveActions, lastActiveAction = actions[ firstInactiveIndex ]; action._cacheIndex = firstInactiveIndex; actions[ firstInactiveIndex ] = action; lastActiveAction._cacheIndex = prevIndex; actions[ prevIndex ] = lastActiveAction; }, // Memory management for PropertyMixer objects _addInactiveBinding: function( binding, rootUuid, trackName ) { var bindingsByRoot = this._bindingsByRootAndName, bindingByName = bindingsByRoot[ rootUuid ], bindings = this._bindings; if ( bindingByName === undefined ) { bindingByName = {}; bindingsByRoot[ rootUuid ] = bindingByName; } bindingByName[ trackName ] = binding; binding._cacheIndex = bindings.length; bindings.push( binding ); }, _removeInactiveBinding: function( binding ) { var bindings = this._bindings, propBinding = binding.binding, rootUuid = propBinding.rootNode.uuid, trackName = propBinding.path, bindingsByRoot = this._bindingsByRootAndName, bindingByName = bindingsByRoot[ rootUuid ], lastInactiveBinding = bindings[ bindings.length - 1 ], cacheIndex = binding._cacheIndex; lastInactiveBinding._cacheIndex = cacheIndex; bindings[ cacheIndex ] = lastInactiveBinding; bindings.pop(); delete bindingByName[ trackName ]; remove_empty_map: { for ( var _ in bindingByName ) break remove_empty_map; delete bindingsByRoot[ rootUuid ]; } }, _lendBinding: function( binding ) { var bindings = this._bindings, prevIndex = binding._cacheIndex, lastActiveIndex = this._nActiveBindings ++, firstInactiveBinding = bindings[ lastActiveIndex ]; binding._cacheIndex = lastActiveIndex; bindings[ lastActiveIndex ] = binding; firstInactiveBinding._cacheIndex = prevIndex; bindings[ prevIndex ] = firstInactiveBinding; }, _takeBackBinding: function( binding ) { var bindings = this._bindings, prevIndex = binding._cacheIndex, firstInactiveIndex = -- this._nActiveBindings, lastActiveBinding = bindings[ firstInactiveIndex ]; binding._cacheIndex = firstInactiveIndex; bindings[ firstInactiveIndex ] = binding; lastActiveBinding._cacheIndex = prevIndex; bindings[ prevIndex ] = lastActiveBinding; }, // Memory management of Interpolants for weight and time scale _lendControlInterpolant: function() { var interpolants = this._controlInterpolants, lastActiveIndex = this._nActiveControlInterpolants ++, interpolant = interpolants[ lastActiveIndex ]; if ( interpolant === undefined ) { interpolant = new THREE.LinearInterpolant( new Float32Array( 2 ), new Float32Array( 2 ), 1, this._controlInterpolantsResultBuffer ); interpolant.__cacheIndex = lastActiveIndex; interpolants[ lastActiveIndex ] = interpolant; } return interpolant; }, _takeBackControlInterpolant: function( interpolant ) { var interpolants = this._controlInterpolants, prevIndex = interpolant.__cacheIndex, firstInactiveIndex = -- this._nActiveControlInterpolants, lastActiveInterpolant = interpolants[ firstInactiveIndex ]; interpolant.__cacheIndex = firstInactiveIndex; interpolants[ firstInactiveIndex ] = interpolant; lastActiveInterpolant.__cacheIndex = prevIndex; interpolants[ prevIndex ] = lastActiveInterpolant; }, _controlInterpolantsResultBuffer: new Float32Array( 1 ) } ); // File:src/animation/AnimationObjectGroup.js /** * * A group of objects that receives a shared animation state. * * Usage: * * - Add objects you would otherwise pass as 'root' to the * constructor or the .clipAction method of AnimationMixer. * * - Instead pass this object as 'root'. * * - You can also add and remove objects later when the mixer * is running. * * Note: * * Objects of this class appear as one object to the mixer, * so cache control of the individual objects must be done * on the group. * * Limitation: * * - The animated properties must be compatible among the * all objects in the group. * * - A single property can either be controlled through a * target group or directly, but not both. * * @author tschw */ THREE.AnimationObjectGroup = function( var_args ) { this.uuid = THREE.Math.generateUUID(); // cached objects followed by the active ones this._objects = Array.prototype.slice.call( arguments ); this.nCachedObjects_ = 0; // threshold // note: read by PropertyBinding.Composite var indices = {}; this._indicesByUUID = indices; // for bookkeeping for ( var i = 0, n = arguments.length; i !== n; ++ i ) { indices[ arguments[ i ].uuid ] = i; } this._paths = []; // inside: string this._parsedPaths = []; // inside: { we don't care, here } this._bindings = []; // inside: Array< PropertyBinding > this._bindingsIndicesByPath = {}; // inside: indices in these arrays var scope = this; this.stats = { objects: { get total() { return scope._objects.length; }, get inUse() { return this.total - scope.nCachedObjects_; } }, get bindingsPerObject() { return scope._bindings.length; } }; }; THREE.AnimationObjectGroup.prototype = { constructor: THREE.AnimationObjectGroup, add: function( var_args ) { var objects = this._objects, nObjects = objects.length, nCachedObjects = this.nCachedObjects_, indicesByUUID = this._indicesByUUID, paths = this._paths, parsedPaths = this._parsedPaths, bindings = this._bindings, nBindings = bindings.length; for ( var i = 0, n = arguments.length; i !== n; ++ i ) { var object = arguments[ i ], uuid = object.uuid, index = indicesByUUID[ uuid ]; if ( index === undefined ) { // unknown object -> add it to the ACTIVE region index = nObjects ++; indicesByUUID[ uuid ] = index; objects.push( object ); // accounting is done, now do the same for all bindings for ( var j = 0, m = nBindings; j !== m; ++ j ) { bindings[ j ].push( new THREE.PropertyBinding( object, paths[ j ], parsedPaths[ j ] ) ); } } else if ( index < nCachedObjects ) { var knownObject = objects[ index ]; // move existing object to the ACTIVE region var firstActiveIndex = -- nCachedObjects, lastCachedObject = objects[ firstActiveIndex ]; indicesByUUID[ lastCachedObject.uuid ] = index; objects[ index ] = lastCachedObject; indicesByUUID[ uuid ] = firstActiveIndex; objects[ firstActiveIndex ] = object; // accounting is done, now do the same for all bindings for ( var j = 0, m = nBindings; j !== m; ++ j ) { var bindingsForPath = bindings[ j ], lastCached = bindingsForPath[ firstActiveIndex ], binding = bindingsForPath[ index ]; bindingsForPath[ index ] = lastCached; if ( binding === undefined ) { // since we do not bother to create new bindings // for objects that are cached, the binding may // or may not exist binding = new THREE.PropertyBinding( object, paths[ j ], parsedPaths[ j ] ); } bindingsForPath[ firstActiveIndex ] = binding; } } else if ( objects[ index ] !== knownObject) { console.error( "Different objects with the same UUID " + "detected. Clean the caches or recreate your " + "infrastructure when reloading scenes..." ); } // else the object is already where we want it to be } // for arguments this.nCachedObjects_ = nCachedObjects; }, remove: function( var_args ) { var objects = this._objects, nObjects = objects.length, nCachedObjects = this.nCachedObjects_, indicesByUUID = this._indicesByUUID, bindings = this._bindings, nBindings = bindings.length; for ( var i = 0, n = arguments.length; i !== n; ++ i ) { var object = arguments[ i ], uuid = object.uuid, index = indicesByUUID[ uuid ]; if ( index !== undefined && index >= nCachedObjects ) { // move existing object into the CACHED region var lastCachedIndex = nCachedObjects ++, firstActiveObject = objects[ lastCachedIndex ]; indicesByUUID[ firstActiveObject.uuid ] = index; objects[ index ] = firstActiveObject; indicesByUUID[ uuid ] = lastCachedIndex; objects[ lastCachedIndex ] = object; // accounting is done, now do the same for all bindings for ( var j = 0, m = nBindings; j !== m; ++ j ) { var bindingsForPath = bindings[ j ], firstActive = bindingsForPath[ lastCachedIndex ], binding = bindingsForPath[ index ]; bindingsForPath[ index ] = firstActive; bindingsForPath[ lastCachedIndex ] = binding; } } } // for arguments this.nCachedObjects_ = nCachedObjects; }, // remove & forget uncache: function( var_args ) { var objects = this._objects, nObjects = objects.length, nCachedObjects = this.nCachedObjects_, indicesByUUID = this._indicesByUUID, bindings = this._bindings, nBindings = bindings.length; for ( var i = 0, n = arguments.length; i !== n; ++ i ) { var object = arguments[ i ], uuid = object.uuid, index = indicesByUUID[ uuid ]; if ( index !== undefined ) { delete indicesByUUID[ uuid ]; if ( index < nCachedObjects ) { // object is cached, shrink the CACHED region var firstActiveIndex = -- nCachedObjects, lastCachedObject = objects[ firstActiveIndex ], lastIndex = -- nObjects, lastObject = objects[ lastIndex ]; // last cached object takes this object's place indicesByUUID[ lastCachedObject.uuid ] = index; objects[ index ] = lastCachedObject; // last object goes to the activated slot and pop indicesByUUID[ lastObject.uuid ] = firstActiveIndex; objects[ firstActiveIndex ] = lastObject; objects.pop(); // accounting is done, now do the same for all bindings for ( var j = 0, m = nBindings; j !== m; ++ j ) { var bindingsForPath = bindings[ j ], lastCached = bindingsForPath[ firstActiveIndex ], last = bindingsForPath[ lastIndex ]; bindingsForPath[ index ] = lastCached; bindingsForPath[ firstActiveIndex ] = last; bindingsForPath.pop(); } } else { // object is active, just swap with the last and pop var lastIndex = -- nObjects, lastObject = objects[ lastIndex ]; indicesByUUID[ lastObject.uuid ] = index; objects[ index ] = lastObject; objects.pop(); // accounting is done, now do the same for all bindings for ( var j = 0, m = nBindings; j !== m; ++ j ) { var bindingsForPath = bindings[ j ]; bindingsForPath[ index ] = bindingsForPath[ lastIndex ]; bindingsForPath.pop(); } } // cached or active } // if object is known } // for arguments this.nCachedObjects_ = nCachedObjects; }, // Internal interface used by befriended PropertyBinding.Composite: subscribe_: function( path, parsedPath ) { // returns an array of bindings for the given path that is changed // according to the contained objects in the group var indicesByPath = this._bindingsIndicesByPath, index = indicesByPath[ path ], bindings = this._bindings; if ( index !== undefined ) return bindings[ index ]; var paths = this._paths, parsedPaths = this._parsedPaths, objects = this._objects, nObjects = objects.length, nCachedObjects = this.nCachedObjects_, bindingsForPath = new Array( nObjects ); index = bindings.length; indicesByPath[ path ] = index; paths.push( path ); parsedPaths.push( parsedPath ); bindings.push( bindingsForPath ); for ( var i = nCachedObjects, n = objects.length; i !== n; ++ i ) { var object = objects[ i ]; bindingsForPath[ i ] = new THREE.PropertyBinding( object, path, parsedPath ); } return bindingsForPath; }, unsubscribe_: function( path ) { // tells the group to forget about a property path and no longer // update the array previously obtained with 'subscribe_' var indicesByPath = this._bindingsIndicesByPath, index = indicesByPath[ path ]; if ( index !== undefined ) { var paths = this._paths, parsedPaths = this._parsedPaths, bindings = this._bindings, lastBindingsIndex = bindings.length - 1, lastBindings = bindings[ lastBindingsIndex ], lastBindingsPath = path[ lastBindingsIndex ]; indicesByPath[ lastBindingsPath ] = index; bindings[ index ] = lastBindings; bindings.pop(); parsedPaths[ index ] = parsedPaths[ lastBindingsIndex ]; parsedPaths.pop(); paths[ index ] = paths[ lastBindingsIndex ]; paths.pop(); } } }; // File:src/animation/AnimationUtils.js /** * @author tschw * @author Ben Houston / http://clara.io/ * @author David Sarno / http://lighthaus.us/ */ THREE.AnimationUtils = { // same as Array.prototype.slice, but also works on typed arrays arraySlice: function( array, from, to ) { if ( THREE.AnimationUtils.isTypedArray( array ) ) { return new array.constructor( array.subarray( from, to ) ); } return array.slice( from, to ); }, // converts an array to a specific type convertArray: function( array, type, forceClone ) { if ( ! array || // let 'undefined' and 'null' pass ! forceClone && array.constructor === type ) return array; if ( typeof type.BYTES_PER_ELEMENT === 'number' ) { return new type( array ); // create typed array } return Array.prototype.slice.call( array ); // create Array }, isTypedArray: function( object ) { return ArrayBuffer.isView( object ) && ! ( object instanceof DataView ); }, // returns an array by which times and values can be sorted getKeyframeOrder: function( times ) { function compareTime( i, j ) { return times[ i ] - times[ j ]; } var n = times.length; var result = new Array( n ); for ( var i = 0; i !== n; ++ i ) result[ i ] = i; result.sort( compareTime ); return result; }, // uses the array previously returned by 'getKeyframeOrder' to sort data sortedArray: function( values, stride, order ) { var nValues = values.length; var result = new values.constructor( nValues ); for ( var i = 0, dstOffset = 0; dstOffset !== nValues; ++ i ) { var srcOffset = order[ i ] * stride; for ( var j = 0; j !== stride; ++ j ) { result[ dstOffset ++ ] = values[ srcOffset + j ]; } } return result; }, // function for parsing AOS keyframe formats flattenJSON: function( jsonKeys, times, values, valuePropertyName ) { var i = 1, key = jsonKeys[ 0 ]; while ( key !== undefined && key[ valuePropertyName ] === undefined ) { key = jsonKeys[ i ++ ]; } if ( key === undefined ) return; // no data var value = key[ valuePropertyName ]; if ( value === undefined ) return; // no data if ( Array.isArray( value ) ) { do { value = key[ valuePropertyName ]; if ( value !== undefined ) { times.push( key.time ); values.push.apply( values, value ); // push all elements } key = jsonKeys[ i ++ ]; } while ( key !== undefined ); } else if ( value.toArray !== undefined ) { // ...assume THREE.Math-ish do { value = key[ valuePropertyName ]; if ( value !== undefined ) { times.push( key.time ); value.toArray( values, values.length ); } key = jsonKeys[ i ++ ]; } while ( key !== undefined ); } else { // otherwise push as-is do { value = key[ valuePropertyName ]; if ( value !== undefined ) { times.push( key.time ); values.push( value ); } key = jsonKeys[ i ++ ]; } while ( key !== undefined ); } } }; // File:src/animation/KeyframeTrack.js /** * * A timed sequence of keyframes for a specific property. * * * @author Ben Houston / http://clara.io/ * @author David Sarno / http://lighthaus.us/ * @author tschw */ THREE.KeyframeTrack = function ( name, times, values, interpolation ) { if( name === undefined ) throw new Error( "track name is undefined" ); if( times === undefined || times.length === 0 ) { throw new Error( "no keyframes in track named " + name ); } this.name = name; this.times = THREE.AnimationUtils.convertArray( times, this.TimeBufferType ); this.values = THREE.AnimationUtils.convertArray( values, this.ValueBufferType ); this.setInterpolation( interpolation || this.DefaultInterpolation ); this.validate(); this.optimize(); }; THREE.KeyframeTrack.prototype = { constructor: THREE.KeyframeTrack, TimeBufferType: Float32Array, ValueBufferType: Float32Array, DefaultInterpolation: THREE.InterpolateLinear, InterpolantFactoryMethodDiscrete: function( result ) { return new THREE.DiscreteInterpolant( this.times, this.values, this.getValueSize(), result ); }, InterpolantFactoryMethodLinear: function( result ) { return new THREE.LinearInterpolant( this.times, this.values, this.getValueSize(), result ); }, InterpolantFactoryMethodSmooth: function( result ) { return new THREE.CubicInterpolant( this.times, this.values, this.getValueSize(), result ); }, setInterpolation: function( interpolation ) { var factoryMethod; switch ( interpolation ) { case THREE.InterpolateDiscrete: factoryMethod = this.InterpolantFactoryMethodDiscrete; break; case THREE.InterpolateLinear: factoryMethod = this.InterpolantFactoryMethodLinear; break; case THREE.InterpolateSmooth: factoryMethod = this.InterpolantFactoryMethodSmooth; break; } if ( factoryMethod === undefined ) { var message = "unsupported interpolation for " + this.ValueTypeName + " keyframe track named " + this.name; if ( this.createInterpolant === undefined ) { // fall back to default, unless the default itself is messed up if ( interpolation !== this.DefaultInterpolation ) { this.setInterpolation( this.DefaultInterpolation ); } else { throw new Error( message ); // fatal, in this case } } console.warn( message ); return; } this.createInterpolant = factoryMethod; }, getInterpolation: function() { switch ( this.createInterpolant ) { case this.InterpolantFactoryMethodDiscrete: return THREE.InterpolateDiscrete; case this.InterpolantFactoryMethodLinear: return THREE.InterpolateLinear; case this.InterpolantFactoryMethodSmooth: return THREE.InterpolateSmooth; } }, getValueSize: function() { return this.values.length / this.times.length; }, // move all keyframes either forwards or backwards in time shift: function( timeOffset ) { if( timeOffset !== 0.0 ) { var times = this.times; for( var i = 0, n = times.length; i !== n; ++ i ) { times[ i ] += timeOffset; } } return this; }, // scale all keyframe times by a factor (useful for frame <-> seconds conversions) scale: function( timeScale ) { if( timeScale !== 1.0 ) { var times = this.times; for( var i = 0, n = times.length; i !== n; ++ i ) { times[ i ] *= timeScale; } } return this; }, // removes keyframes before and after animation without changing any values within the range [startTime, endTime]. // IMPORTANT: We do not shift around keys to the start of the track time, because for interpolated keys this will change their values trim: function( startTime, endTime ) { var times = this.times, nKeys = times.length, from = 0, to = nKeys - 1; while ( from !== nKeys && times[ from ] < startTime ) ++ from; while ( to !== -1 && times[ to ] > endTime ) -- to; ++ to; // inclusive -> exclusive bound if( from !== 0 || to !== nKeys ) { // empty tracks are forbidden, so keep at least one keyframe if ( from >= to ) to = Math.max( to , 1 ), from = to - 1; var stride = this.getValueSize(); this.times = THREE.AnimationUtils.arraySlice( times, from, to ); this.values = THREE.AnimationUtils. arraySlice( this.values, from * stride, to * stride ); } return this; }, // ensure we do not get a GarbageInGarbageOut situation, make sure tracks are at least minimally viable validate: function() { var valid = true; var valueSize = this.getValueSize(); if ( valueSize - Math.floor( valueSize ) !== 0 ) { console.error( "invalid value size in track", this ); valid = false; } var times = this.times, values = this.values, nKeys = times.length; if( nKeys === 0 ) { console.error( "track is empty", this ); valid = false; } var prevTime = null; for( var i = 0; i !== nKeys; i ++ ) { var currTime = times[ i ]; if ( typeof currTime === 'number' && isNaN( currTime ) ) { console.error( "time is not a valid number", this, i, currTime ); valid = false; break; } if( prevTime !== null && prevTime > currTime ) { console.error( "out of order keys", this, i, currTime, prevTime ); valid = false; break; } prevTime = currTime; } if ( values !== undefined ) { if ( THREE.AnimationUtils.isTypedArray( values ) ) { for ( var i = 0, n = values.length; i !== n; ++ i ) { var value = values[ i ]; if ( isNaN( value ) ) { console.error( "value is not a valid number", this, i, value ); valid = false; break; } } } } return valid; }, // removes equivalent sequential keys as common in morph target sequences // (0,0,0,0,1,1,1,0,0,0,0,0,0,0) --> (0,0,1,1,0,0) optimize: function() { var times = this.times, values = this.values, stride = this.getValueSize(), writeIndex = 1; for( var i = 1, n = times.length - 1; i <= n; ++ i ) { var keep = false; var time = times[ i ]; var timeNext = times[ i + 1 ]; // remove adjacent keyframes scheduled at the same time if ( time !== timeNext && ( i !== 1 || time !== time[ 0 ] ) ) { // remove unnecessary keyframes same as their neighbors var offset = i * stride, offsetP = offset - stride, offsetN = offset + stride; for ( var j = 0; j !== stride; ++ j ) { var value = values[ offset + j ]; if ( value !== values[ offsetP + j ] || value !== values[ offsetN + j ] ) { keep = true; break; } } } // in-place compaction if ( keep ) { if ( i !== writeIndex ) { times[ writeIndex ] = times[ i ]; var readOffset = i * stride, writeOffset = writeIndex * stride; for ( var j = 0; j !== stride; ++ j ) { values[ writeOffset + j ] = values[ readOffset + j ]; } } ++ writeIndex; } } if ( writeIndex !== times.length ) { this.times = THREE.AnimationUtils.arraySlice( times, 0, writeIndex ); this.values = THREE.AnimationUtils.arraySlice( values, 0, writeIndex * stride ); } return this; } }; // Static methods: Object.assign( THREE.KeyframeTrack, { // Serialization (in static context, because of constructor invocation // and automatic invocation of .toJSON): parse: function( json ) { if( json.type === undefined ) { throw new Error( "track type undefined, can not parse" ); } var trackType = THREE.KeyframeTrack._getTrackTypeForValueTypeName( json.type ); if ( json.times === undefined ) { var times = [], values = []; THREE.AnimationUtils.flattenJSON( json.keys, times, values, 'value' ); json.times = times; json.values = values; } // derived classes can define a static parse method if ( trackType.parse !== undefined ) { return trackType.parse( json ); } else { // by default, we asssume a constructor compatible with the base return new trackType( json.name, json.times, json.values, json.interpolation ); } }, toJSON: function( track ) { var trackType = track.constructor; var json; // derived classes can define a static toJSON method if ( trackType.toJSON !== undefined ) { json = trackType.toJSON( track ); } else { // by default, we assume the data can be serialized as-is json = { 'name': track.name, 'times': THREE.AnimationUtils.convertArray( track.times, Array ), 'values': THREE.AnimationUtils.convertArray( track.values, Array ) }; var interpolation = track.getInterpolation(); if ( interpolation !== track.DefaultInterpolation ) { json.interpolation = interpolation; } } json.type = track.ValueTypeName; // mandatory return json; }, _getTrackTypeForValueTypeName: function( typeName ) { switch( typeName.toLowerCase() ) { case "scalar": case "double": case "float": case "number": case "integer": return THREE.NumberKeyframeTrack; case "vector": case "vector2": case "vector3": case "vector4": return THREE.VectorKeyframeTrack; case "color": return THREE.ColorKeyframeTrack; case "quaternion": return THREE.QuaternionKeyframeTrack; case "bool": case "boolean": return THREE.BooleanKeyframeTrack; case "string": return THREE.StringKeyframeTrack; } throw new Error( "Unsupported typeName: " + typeName ); } } ); // File:src/animation/PropertyBinding.js /** * * A reference to a real property in the scene graph. * * * @author Ben Houston / http://clara.io/ * @author David Sarno / http://lighthaus.us/ * @author tschw */ THREE.PropertyBinding = function ( rootNode, path, parsedPath ) { this.path = path; this.parsedPath = parsedPath || THREE.PropertyBinding.parseTrackName( path ); this.node = THREE.PropertyBinding.findNode( rootNode, this.parsedPath.nodeName ) || rootNode; this.rootNode = rootNode; }; THREE.PropertyBinding.prototype = { constructor: THREE.PropertyBinding, getValue: function getValue_unbound( targetArray, offset ) { this.bind(); this.getValue( targetArray, offset ); // Note: This class uses a State pattern on a per-method basis: // 'bind' sets 'this.getValue' / 'setValue' and shadows the // prototype version of these methods with one that represents // the bound state. When the property is not found, the methods // become no-ops. }, setValue: function getValue_unbound( sourceArray, offset ) { this.bind(); this.setValue( sourceArray, offset ); }, // create getter / setter pair for a property in the scene graph bind: function() { var targetObject = this.node, parsedPath = this.parsedPath, objectName = parsedPath.objectName, propertyName = parsedPath.propertyName, propertyIndex = parsedPath.propertyIndex; if ( ! targetObject ) { targetObject = THREE.PropertyBinding.findNode( this.rootNode, parsedPath.nodeName ) || this.rootNode; this.node = targetObject; } // set fail state so we can just 'return' on error this.getValue = this._getValue_unavailable; this.setValue = this._setValue_unavailable; // ensure there is a value node if ( ! targetObject ) { console.error( " trying to update node for track: " + this.path + " but it wasn't found." ); return; } if ( objectName ) { var objectIndex = parsedPath.objectIndex; // special cases were we need to reach deeper into the hierarchy to get the face materials.... switch ( objectName ) { case 'materials': if ( ! targetObject.material ) { console.error( ' can not bind to material as node does not have a material', this ); return; } if ( ! targetObject.material.materials ) { console.error( ' can not bind to material.materials as node.material does not have a materials array', this ); return; } targetObject = targetObject.material.materials; break; case 'bones': if ( ! targetObject.skeleton ) { console.error( ' can not bind to bones as node does not have a skeleton', this ); return; } // potential future optimization: skip this if propertyIndex is already an integer // and convert the integer string to a true integer. targetObject = targetObject.skeleton.bones; // support resolving morphTarget names into indices. for ( var i = 0; i < targetObject.length; i ++ ) { if ( targetObject[ i ].name === objectIndex ) { objectIndex = i; break; } } break; default: if ( targetObject[ objectName ] === undefined ) { console.error( ' can not bind to objectName of node, undefined', this ); return; } targetObject = targetObject[ objectName ]; } if ( objectIndex !== undefined ) { if ( targetObject[ objectIndex ] === undefined ) { console.error( " trying to bind to objectIndex of objectName, but is undefined:", this, targetObject ); return; } targetObject = targetObject[ objectIndex ]; } } // resolve property var nodeProperty = targetObject[ propertyName ]; if ( nodeProperty === undefined ) { var nodeName = parsedPath.nodeName; console.error( " trying to update property for track: " + nodeName + '.' + propertyName + " but it wasn't found.", targetObject ); return; } // determine versioning scheme var versioning = this.Versioning.None; if ( targetObject.needsUpdate !== undefined ) { // material versioning = this.Versioning.NeedsUpdate; this.targetObject = targetObject; } else if ( targetObject.matrixWorldNeedsUpdate !== undefined ) { // node transform versioning = this.Versioning.MatrixWorldNeedsUpdate; this.targetObject = targetObject; } // determine how the property gets bound var bindingType = this.BindingType.Direct; if ( propertyIndex !== undefined ) { // access a sub element of the property array (only primitives are supported right now) if ( propertyName === "morphTargetInfluences" ) { // potential optimization, skip this if propertyIndex is already an integer, and convert the integer string to a true integer. // support resolving morphTarget names into indices. if ( ! targetObject.geometry ) { console.error( ' can not bind to morphTargetInfluences becasuse node does not have a geometry', this ); return; } if ( ! targetObject.geometry.morphTargets ) { console.error( ' can not bind to morphTargetInfluences becasuse node does not have a geometry.morphTargets', this ); return; } for ( var i = 0; i < this.node.geometry.morphTargets.length; i ++ ) { if ( targetObject.geometry.morphTargets[ i ].name === propertyIndex ) { propertyIndex = i; break; } } } bindingType = this.BindingType.ArrayElement; this.resolvedProperty = nodeProperty; this.propertyIndex = propertyIndex; } else if ( nodeProperty.fromArray !== undefined && nodeProperty.toArray !== undefined ) { // must use copy for Object3D.Euler/Quaternion bindingType = this.BindingType.HasFromToArray; this.resolvedProperty = nodeProperty; } else if ( nodeProperty.length !== undefined ) { bindingType = this.BindingType.EntireArray; this.resolvedProperty = nodeProperty; } else { this.propertyName = propertyName; } // select getter / setter this.getValue = this.GetterByBindingType[ bindingType ]; this.setValue = this.SetterByBindingTypeAndVersioning[ bindingType ][ versioning ]; }, unbind: function() { this.node = null; // back to the prototype version of getValue / setValue // note: avoiding to mutate the shape of 'this' via 'delete' this.getValue = this._getValue_unbound; this.setValue = this._setValue_unbound; } }; Object.assign( THREE.PropertyBinding.prototype, { // prototype, continued // these are used to "bind" a nonexistent property _getValue_unavailable: function() {}, _setValue_unavailable: function() {}, // initial state of these methods that calls 'bind' _getValue_unbound: THREE.PropertyBinding.prototype.getValue, _setValue_unbound: THREE.PropertyBinding.prototype.setValue, BindingType: { Direct: 0, EntireArray: 1, ArrayElement: 2, HasFromToArray: 3 }, Versioning: { None: 0, NeedsUpdate: 1, MatrixWorldNeedsUpdate: 2 }, GetterByBindingType: [ function getValue_direct( buffer, offset ) { buffer[ offset ] = this.node[ this.propertyName ]; }, function getValue_array( buffer, offset ) { var source = this.resolvedProperty; for ( var i = 0, n = source.length; i !== n; ++ i ) { buffer[ offset ++ ] = source[ i ]; } }, function getValue_arrayElement( buffer, offset ) { buffer[ offset ] = this.resolvedProperty[ this.propertyIndex ]; }, function getValue_toArray( buffer, offset ) { this.resolvedProperty.toArray( buffer, offset ); } ], SetterByBindingTypeAndVersioning: [ [ // Direct function setValue_direct( buffer, offset ) { this.node[ this.propertyName ] = buffer[ offset ]; }, function setValue_direct_setNeedsUpdate( buffer, offset ) { this.node[ this.propertyName ] = buffer[ offset ]; this.targetObject.needsUpdate = true; }, function setValue_direct_setMatrixWorldNeedsUpdate( buffer, offset ) { this.node[ this.propertyName ] = buffer[ offset ]; this.targetObject.matrixWorldNeedsUpdate = true; } ], [ // EntireArray function setValue_array( buffer, offset ) { var dest = this.resolvedProperty; for ( var i = 0, n = dest.length; i !== n; ++ i ) { dest[ i ] = buffer[ offset ++ ]; } }, function setValue_array_setNeedsUpdate( buffer, offset ) { var dest = this.resolvedProperty; for ( var i = 0, n = dest.length; i !== n; ++ i ) { dest[ i ] = buffer[ offset ++ ]; } this.targetObject.needsUpdate = true; }, function setValue_array_setMatrixWorldNeedsUpdate( buffer, offset ) { var dest = this.resolvedProperty; for ( var i = 0, n = dest.length; i !== n; ++ i ) { dest[ i ] = buffer[ offset ++ ]; } this.targetObject.matrixWorldNeedsUpdate = true; } ], [ // ArrayElement function setValue_arrayElement( buffer, offset ) { this.resolvedProperty[ this.propertyIndex ] = buffer[ offset ]; }, function setValue_arrayElement_setNeedsUpdate( buffer, offset ) { this.resolvedProperty[ this.propertyIndex ] = buffer[ offset ]; this.targetObject.needsUpdate = true; }, function setValue_arrayElement_setMatrixWorldNeedsUpdate( buffer, offset ) { this.resolvedProperty[ this.propertyIndex ] = buffer[ offset ]; this.targetObject.matrixWorldNeedsUpdate = true; } ], [ // HasToFromArray function setValue_fromArray( buffer, offset ) { this.resolvedProperty.fromArray( buffer, offset ); }, function setValue_fromArray_setNeedsUpdate( buffer, offset ) { this.resolvedProperty.fromArray( buffer, offset ); this.targetObject.needsUpdate = true; }, function setValue_fromArray_setMatrixWorldNeedsUpdate( buffer, offset ) { this.resolvedProperty.fromArray( buffer, offset ); this.targetObject.matrixWorldNeedsUpdate = true; } ] ] } ); THREE.PropertyBinding.Composite = function( targetGroup, path, optionalParsedPath ) { var parsedPath = optionalParsedPath || THREE.PropertyBinding.parseTrackName( path ); this._targetGroup = targetGroup; this._bindings = targetGroup.subscribe_( path, parsedPath ); }; THREE.PropertyBinding.Composite.prototype = { constructor: THREE.PropertyBinding.Composite, getValue: function( array, offset ) { this.bind(); // bind all binding var firstValidIndex = this._targetGroup.nCachedObjects_, binding = this._bindings[ firstValidIndex ]; // and only call .getValue on the first if ( binding !== undefined ) binding.getValue( array, offset ); }, setValue: function( array, offset ) { var bindings = this._bindings; for ( var i = this._targetGroup.nCachedObjects_, n = bindings.length; i !== n; ++ i ) { bindings[ i ].setValue( array, offset ); } }, bind: function() { var bindings = this._bindings; for ( var i = this._targetGroup.nCachedObjects_, n = bindings.length; i !== n; ++ i ) { bindings[ i ].bind(); } }, unbind: function() { var bindings = this._bindings; for ( var i = this._targetGroup.nCachedObjects_, n = bindings.length; i !== n; ++ i ) { bindings[ i ].unbind(); } } }; THREE.PropertyBinding.create = function( root, path, parsedPath ) { if ( ! ( root instanceof THREE.AnimationObjectGroup ) ) { return new THREE.PropertyBinding( root, path, parsedPath ); } else { return new THREE.PropertyBinding.Composite( root, path, parsedPath ); } }; THREE.PropertyBinding.parseTrackName = function( trackName ) { // matches strings in the form of: // nodeName.property // nodeName.property[accessor] // nodeName.material.property[accessor] // uuid.property[accessor] // uuid.objectName[objectIndex].propertyName[propertyIndex] // parentName/nodeName.property // parentName/parentName/nodeName.property[index] // .bone[Armature.DEF_cog].position // created and tested via https://regex101.com/#javascript var re = /^(([\w]+\/)*)([\w-\d]+)?(\.([\w]+)(\[([\w\d\[\]\_.:\- ]+)\])?)?(\.([\w.]+)(\[([\w\d\[\]\_. ]+)\])?)$/; var matches = re.exec( trackName ); if ( ! matches ) { throw new Error( "cannot parse trackName at all: " + trackName ); } if ( matches.index === re.lastIndex ) { re.lastIndex++; } var results = { // directoryName: matches[ 1 ], // (tschw) currently unused nodeName: matches[ 3 ], // allowed to be null, specified root node. objectName: matches[ 5 ], objectIndex: matches[ 7 ], propertyName: matches[ 9 ], propertyIndex: matches[ 11 ] // allowed to be null, specifies that the whole property is set. }; if ( results.propertyName === null || results.propertyName.length === 0 ) { throw new Error( "can not parse propertyName from trackName: " + trackName ); } return results; }; THREE.PropertyBinding.findNode = function( root, nodeName ) { if ( ! nodeName || nodeName === "" || nodeName === "root" || nodeName === "." || nodeName === -1 || nodeName === root.name || nodeName === root.uuid ) { return root; } // search into skeleton bones. if ( root.skeleton ) { var searchSkeleton = function( skeleton ) { for( var i = 0; i < skeleton.bones.length; i ++ ) { var bone = skeleton.bones[ i ]; if ( bone.name === nodeName ) { return bone; } } return null; }; var bone = searchSkeleton( root.skeleton ); if ( bone ) { return bone; } } // search into node subtree. if ( root.children ) { var searchNodeSubtree = function( children ) { for( var i = 0; i < children.length; i ++ ) { var childNode = children[ i ]; if ( childNode.name === nodeName || childNode.uuid === nodeName ) { return childNode; } var result = searchNodeSubtree( childNode.children ); if ( result ) return result; } return null; }; var subTreeNode = searchNodeSubtree( root.children ); if ( subTreeNode ) { return subTreeNode; } } return null; }; // File:src/animation/PropertyMixer.js /** * * Buffered scene graph property that allows weighted accumulation. * * * @author Ben Houston / http://clara.io/ * @author David Sarno / http://lighthaus.us/ * @author tschw */ THREE.PropertyMixer = function ( binding, typeName, valueSize ) { this.binding = binding; this.valueSize = valueSize; var bufferType = Float64Array, mixFunction; switch ( typeName ) { case 'quaternion': mixFunction = this._slerp; break; case 'string': case 'bool': bufferType = Array, mixFunction = this._select; break; default: mixFunction = this._lerp; } this.buffer = new bufferType( valueSize * 4 ); // layout: [ incoming | accu0 | accu1 | orig ] // // interpolators can use .buffer as their .result // the data then goes to 'incoming' // // 'accu0' and 'accu1' are used frame-interleaved for // the cumulative result and are compared to detect // changes // // 'orig' stores the original state of the property this._mixBufferRegion = mixFunction; this.cumulativeWeight = 0; this.useCount = 0; this.referenceCount = 0; }; THREE.PropertyMixer.prototype = { constructor: THREE.PropertyMixer, // accumulate data in the 'incoming' region into 'accu' accumulate: function( accuIndex, weight ) { // note: happily accumulating nothing when weight = 0, the caller knows // the weight and shouldn't have made the call in the first place var buffer = this.buffer, stride = this.valueSize, offset = accuIndex * stride + stride, currentWeight = this.cumulativeWeight; if ( currentWeight === 0 ) { // accuN := incoming * weight for ( var i = 0; i !== stride; ++ i ) { buffer[ offset + i ] = buffer[ i ]; } currentWeight = weight; } else { // accuN := accuN + incoming * weight currentWeight += weight; var mix = weight / currentWeight; this._mixBufferRegion( buffer, offset, 0, mix, stride ); } this.cumulativeWeight = currentWeight; }, // apply the state of 'accu' to the binding when accus differ apply: function( accuIndex ) { var stride = this.valueSize, buffer = this.buffer, offset = accuIndex * stride + stride, weight = this.cumulativeWeight, binding = this.binding; this.cumulativeWeight = 0; if ( weight < 1 ) { // accuN := accuN + original * ( 1 - cumulativeWeight ) var originalValueOffset = stride * 3; this._mixBufferRegion( buffer, offset, originalValueOffset, 1 - weight, stride ); } for ( var i = stride, e = stride + stride; i !== e; ++ i ) { if ( buffer[ i ] !== buffer[ i + stride ] ) { // value has changed -> update scene graph binding.setValue( buffer, offset ); break; } } }, // remember the state of the bound property and copy it to both accus saveOriginalState: function() { var binding = this.binding; var buffer = this.buffer, stride = this.valueSize, originalValueOffset = stride * 3; binding.getValue( buffer, originalValueOffset ); // accu[0..1] := orig -- initially detect changes against the original for ( var i = stride, e = originalValueOffset; i !== e; ++ i ) { buffer[ i ] = buffer[ originalValueOffset + ( i % stride ) ]; } this.cumulativeWeight = 0; }, // apply the state previously taken via 'saveOriginalState' to the binding restoreOriginalState: function() { var originalValueOffset = this.valueSize * 3; this.binding.setValue( this.buffer, originalValueOffset ); }, // mix functions _select: function( buffer, dstOffset, srcOffset, t, stride ) { if ( t >= 0.5 ) { for ( var i = 0; i !== stride; ++ i ) { buffer[ dstOffset + i ] = buffer[ srcOffset + i ]; } } }, _slerp: function( buffer, dstOffset, srcOffset, t, stride ) { THREE.Quaternion.slerpFlat( buffer, dstOffset, buffer, dstOffset, buffer, srcOffset, t ); }, _lerp: function( buffer, dstOffset, srcOffset, t, stride ) { var s = 1 - t; for ( var i = 0; i !== stride; ++ i ) { var j = dstOffset + i; buffer[ j ] = buffer[ j ] * s + buffer[ srcOffset + i ] * t; } } }; // File:src/animation/tracks/BooleanKeyframeTrack.js /** * * A Track of Boolean keyframe values. * * * @author Ben Houston / http://clara.io/ * @author David Sarno / http://lighthaus.us/ * @author tschw */ THREE.BooleanKeyframeTrack = function ( name, times, values ) { THREE.KeyframeTrack.call( this, name, times, values ); }; THREE.BooleanKeyframeTrack.prototype = Object.assign( Object.create( THREE.KeyframeTrack.prototype ), { constructor: THREE.BooleanKeyframeTrack, ValueTypeName: 'bool', ValueBufferType: Array, DefaultInterpolation: THREE.InterpolateDiscrete, InterpolantFactoryMethodLinear: undefined, InterpolantFactoryMethodSmooth: undefined // Note: Actually this track could have a optimized / compressed // representation of a single value and a custom interpolant that // computes "firstValue ^ isOdd( index )". } ); // File:src/animation/tracks/ColorKeyframeTrack.js /** * * A Track of keyframe values that represent color. * * * @author Ben Houston / http://clara.io/ * @author David Sarno / http://lighthaus.us/ * @author tschw */ THREE.ColorKeyframeTrack = function ( name, times, values, interpolation ) { THREE.KeyframeTrack.call( this, name, times, values, interpolation ); }; THREE.ColorKeyframeTrack.prototype = Object.assign( Object.create( THREE.KeyframeTrack.prototype ), { constructor: THREE.ColorKeyframeTrack, ValueTypeName: 'color' // ValueBufferType is inherited // DefaultInterpolation is inherited // Note: Very basic implementation and nothing special yet. // However, this is the place for color space parameterization. } ); // File:src/animation/tracks/NumberKeyframeTrack.js /** * * A Track of numeric keyframe values. * * @author Ben Houston / http://clara.io/ * @author David Sarno / http://lighthaus.us/ * @author tschw */ THREE.NumberKeyframeTrack = function ( name, times, values, interpolation ) { THREE.KeyframeTrack.call( this, name, times, values, interpolation ); }; THREE.NumberKeyframeTrack.prototype = Object.assign( Object.create( THREE.KeyframeTrack.prototype ), { constructor: THREE.NumberKeyframeTrack, ValueTypeName: 'number', // ValueBufferType is inherited // DefaultInterpolation is inherited } ); // File:src/animation/tracks/QuaternionKeyframeTrack.js /** * * A Track of quaternion keyframe values. * * @author Ben Houston / http://clara.io/ * @author David Sarno / http://lighthaus.us/ * @author tschw */ THREE.QuaternionKeyframeTrack = function ( name, times, values, interpolation ) { THREE.KeyframeTrack.call( this, name, times, values, interpolation ); }; THREE.QuaternionKeyframeTrack.prototype = Object.assign( Object.create( THREE.KeyframeTrack.prototype ), { constructor: THREE.QuaternionKeyframeTrack, ValueTypeName: 'quaternion', // ValueBufferType is inherited DefaultInterpolation: THREE.InterpolateLinear, InterpolantFactoryMethodLinear: function( result ) { return new THREE.QuaternionLinearInterpolant( this.times, this.values, this.getValueSize(), result ); }, InterpolantFactoryMethodSmooth: undefined // not yet implemented } ); // File:src/animation/tracks/StringKeyframeTrack.js /** * * A Track that interpolates Strings * * * @author Ben Houston / http://clara.io/ * @author David Sarno / http://lighthaus.us/ * @author tschw */ THREE.StringKeyframeTrack = function ( name, times, values, interpolation ) { THREE.KeyframeTrack.call( this, name, times, values, interpolation ); }; THREE.StringKeyframeTrack.prototype = Object.assign( Object.create( THREE.KeyframeTrack.prototype ), { constructor: THREE.StringKeyframeTrack, ValueTypeName: 'string', ValueBufferType: Array, DefaultInterpolation: THREE.InterpolateDiscrete, InterpolantFactoryMethodLinear: undefined, InterpolantFactoryMethodSmooth: undefined } ); // File:src/animation/tracks/VectorKeyframeTrack.js /** * * A Track of vectored keyframe values. * * * @author Ben Houston / http://clara.io/ * @author David Sarno / http://lighthaus.us/ * @author tschw */ THREE.VectorKeyframeTrack = function ( name, times, values, interpolation ) { THREE.KeyframeTrack.call( this, name, times, values, interpolation ); }; THREE.VectorKeyframeTrack.prototype = Object.assign( Object.create( THREE.KeyframeTrack.prototype ), { constructor: THREE.VectorKeyframeTrack, ValueTypeName: 'vector' // ValueBufferType is inherited // DefaultInterpolation is inherited } ); // File:src/audio/Audio.js /** * @author mrdoob / http://mrdoob.com/ * @author Reece Aaron Lecrivain / http://reecenotes.com/ */ THREE.Audio = function ( listener ) { THREE.Object3D.call( this ); this.type = 'Audio'; this.context = listener.context; this.source = this.context.createBufferSource(); this.source.onended = this.onEnded.bind( this ); this.gain = this.context.createGain(); this.gain.connect( listener.getInput() ); this.autoplay = false; this.startTime = 0; this.playbackRate = 1; this.isPlaying = false; this.hasPlaybackControl = true; this.sourceType = 'empty'; this.filters = []; }; THREE.Audio.prototype = Object.assign( Object.create( THREE.Object3D.prototype ), { constructor: THREE.Audio, getOutput: function () { return this.gain; }, setNodeSource: function ( audioNode ) { this.hasPlaybackControl = false; this.sourceType = 'audioNode'; this.source = audioNode; this.connect(); return this; }, setBuffer: function ( audioBuffer ) { this.source.buffer = audioBuffer; this.sourceType = 'buffer'; if ( this.autoplay ) this.play(); return this; }, play: function () { if ( this.isPlaying === true ) { console.warn( 'THREE.Audio: Audio is already playing.' ); return; } if ( this.hasPlaybackControl === false ) { console.warn( 'THREE.Audio: this Audio has no playback control.' ); return; } var source = this.context.createBufferSource(); source.buffer = this.source.buffer; source.loop = this.source.loop; source.onended = this.source.onended; source.start( 0, this.startTime ); source.playbackRate.value = this.playbackRate; this.isPlaying = true; this.source = source; return this.connect(); }, pause: function () { if ( this.hasPlaybackControl === false ) { console.warn( 'THREE.Audio: this Audio has no playback control.' ); return; } this.source.stop(); this.startTime = this.context.currentTime; this.isPlaying = false; return this; }, stop: function () { if ( this.hasPlaybackControl === false ) { console.warn( 'THREE.Audio: this Audio has no playback control.' ); return; } this.source.stop(); this.startTime = 0; this.isPlaying = false; return this; }, connect: function () { if ( this.filters.length > 0 ) { this.source.connect( this.filters[ 0 ] ); for ( var i = 1, l = this.filters.length; i < l; i ++ ) { this.filters[ i - 1 ].connect( this.filters[ i ] ); } this.filters[ this.filters.length - 1 ].connect( this.getOutput() ); } else { this.source.connect( this.getOutput() ); } return this; }, disconnect: function () { if ( this.filters.length > 0 ) { this.source.disconnect( this.filters[ 0 ] ); for ( var i = 1, l = this.filters.length; i < l; i ++ ) { this.filters[ i - 1 ].disconnect( this.filters[ i ] ); } this.filters[ this.filters.length - 1 ].disconnect( this.getOutput() ); } else { this.source.disconnect( this.getOutput() ); } return this; }, getFilters: function () { return this.filters; }, setFilters: function ( value ) { if ( ! value ) value = []; if ( this.isPlaying === true ) { this.disconnect(); this.filters = value; this.connect(); } else { this.filters = value; } return this; }, getFilter: function () { return this.getFilters()[ 0 ]; }, setFilter: function ( filter ) { return this.setFilters( filter ? [ filter ] : [] ); }, setPlaybackRate: function ( value ) { if ( this.hasPlaybackControl === false ) { console.warn( 'THREE.Audio: this Audio has no playback control.' ); return; } this.playbackRate = value; if ( this.isPlaying === true ) { this.source.playbackRate.value = this.playbackRate; } return this; }, getPlaybackRate: function () { return this.playbackRate; }, onEnded: function () { this.isPlaying = false; }, getLoop: function () { if ( this.hasPlaybackControl === false ) { console.warn( 'THREE.Audio: this Audio has no playback control.' ); return false; } return this.source.loop; }, setLoop: function ( value ) { if ( this.hasPlaybackControl === false ) { console.warn( 'THREE.Audio: this Audio has no playback control.' ); return; } this.source.loop = value; }, getVolume: function () { return this.gain.gain.value; }, setVolume: function ( value ) { this.gain.gain.value = value; return this; } } ); // File:src/audio/AudioAnalyser.js /** * @author mrdoob / http://mrdoob.com/ */ THREE.AudioAnalyser = function ( audio, fftSize ) { this.analyser = audio.context.createAnalyser(); this.analyser.fftSize = fftSize !== undefined ? fftSize : 2048; this.data = new Uint8Array( this.analyser.frequencyBinCount ); audio.getOutput().connect( this.analyser ); }; Object.assign( THREE.AudioAnalyser.prototype, { getFrequencyData: function () { this.analyser.getByteFrequencyData( this.data ); return this.data; }, getAverageFrequency: function () { var value = 0, data = this.getFrequencyData(); for ( var i = 0; i < data.length; i ++ ) { value += data[ i ]; } return value / data.length; } } ); // File:src/audio/AudioContext.js /** * @author mrdoob / http://mrdoob.com/ */ Object.defineProperty( THREE, 'AudioContext', { get: ( function () { var context; return function get() { if ( context === undefined ) { context = new ( window.AudioContext || window.webkitAudioContext )(); } return context; }; } )() } ); // File:src/audio/PositionalAudio.js /** * @author mrdoob / http://mrdoob.com/ */ THREE.PositionalAudio = function ( listener ) { THREE.Audio.call( this, listener ); this.panner = this.context.createPanner(); this.panner.connect( this.gain ); }; THREE.PositionalAudio.prototype = Object.assign( Object.create( THREE.Audio.prototype ), { constructor: THREE.PositionalAudio, getOutput: function () { return this.panner; }, getRefDistance: function () { return this.panner.refDistance; }, setRefDistance: function ( value ) { this.panner.refDistance = value; }, getRolloffFactor: function () { return this.panner.rolloffFactor; }, setRolloffFactor: function ( value ) { this.panner.rolloffFactor = value; }, getDistanceModel: function () { return this.panner.distanceModel; }, setDistanceModel: function ( value ) { this.panner.distanceModel = value; }, getMaxDistance: function () { return this.panner.maxDistance; }, setMaxDistance: function ( value ) { this.panner.maxDistance = value; }, updateMatrixWorld: ( function () { var position = new THREE.Vector3(); return function updateMatrixWorld( force ) { THREE.Object3D.prototype.updateMatrixWorld.call( this, force ); position.setFromMatrixPosition( this.matrixWorld ); this.panner.setPosition( position.x, position.y, position.z ); }; } )() } ); // File:src/audio/AudioListener.js /** * @author mrdoob / http://mrdoob.com/ */ THREE.AudioListener = function () { THREE.Object3D.call( this ); this.type = 'AudioListener'; this.context = THREE.AudioContext; this.gain = this.context.createGain(); this.gain.connect( this.context.destination ); this.filter = null; }; THREE.AudioListener.prototype = Object.assign( Object.create( THREE.Object3D.prototype ), { constructor: THREE.AudioListener, getInput: function () { return this.gain; }, removeFilter: function ( ) { if ( this.filter !== null ) { this.gain.disconnect( this.filter ); this.filter.disconnect( this.context.destination ); this.gain.connect( this.context.destination ); this.filter = null; } }, getFilter: function () { return this.filter; }, setFilter: function ( value ) { if ( this.filter !== null ) { this.gain.disconnect( this.filter ); this.filter.disconnect( this.context.destination ); } else { this.gain.disconnect( this.context.destination ); } this.filter = value; this.gain.connect( this.filter ); this.filter.connect( this.context.destination ); }, getMasterVolume: function () { return this.gain.gain.value; }, setMasterVolume: function ( value ) { this.gain.gain.value = value; }, updateMatrixWorld: ( function () { var position = new THREE.Vector3(); var quaternion = new THREE.Quaternion(); var scale = new THREE.Vector3(); var orientation = new THREE.Vector3(); return function updateMatrixWorld( force ) { THREE.Object3D.prototype.updateMatrixWorld.call( this, force ); var listener = this.context.listener; var up = this.up; this.matrixWorld.decompose( position, quaternion, scale ); orientation.set( 0, 0, - 1 ).applyQuaternion( quaternion ); listener.setPosition( position.x, position.y, position.z ); listener.setOrientation( orientation.x, orientation.y, orientation.z, up.x, up.y, up.z ); }; } )() } ); // File:src/cameras/Camera.js /** * @author mrdoob / http://mrdoob.com/ * @author mikael emtinger / http://gomo.se/ * @author WestLangley / http://github.com/WestLangley */ THREE.Camera = function () { THREE.Object3D.call( this ); this.type = 'Camera'; this.matrixWorldInverse = new THREE.Matrix4(); this.projectionMatrix = new THREE.Matrix4(); }; THREE.Camera.prototype = Object.create( THREE.Object3D.prototype ); THREE.Camera.prototype.constructor = THREE.Camera; THREE.Camera.prototype.getWorldDirection = function () { var quaternion = new THREE.Quaternion(); return function getWorldDirection( optionalTarget ) { var result = optionalTarget || new THREE.Vector3(); this.getWorldQuaternion( quaternion ); return result.set( 0, 0, - 1 ).applyQuaternion( quaternion ); }; }(); THREE.Camera.prototype.lookAt = function () { // This routine does not support cameras with rotated and/or translated parent(s) var m1 = new THREE.Matrix4(); return function lookAt( vector ) { m1.lookAt( this.position, vector, this.up ); this.quaternion.setFromRotationMatrix( m1 ); }; }(); THREE.Camera.prototype.clone = function () { return new this.constructor().copy( this ); }; THREE.Camera.prototype.copy = function ( source ) { THREE.Object3D.prototype.copy.call( this, source ); this.matrixWorldInverse.copy( source.matrixWorldInverse ); this.projectionMatrix.copy( source.projectionMatrix ); return this; }; // File:src/cameras/CubeCamera.js /** * Camera for rendering cube maps * - renders scene into axis-aligned cube * * @author alteredq / http://alteredqualia.com/ */ THREE.CubeCamera = function ( near, far, cubeResolution ) { THREE.Object3D.call( this ); this.type = 'CubeCamera'; var fov = 90, aspect = 1; var cameraPX = new THREE.PerspectiveCamera( fov, aspect, near, far ); cameraPX.up.set( 0, - 1, 0 ); cameraPX.lookAt( new THREE.Vector3( 1, 0, 0 ) ); this.add( cameraPX ); var cameraNX = new THREE.PerspectiveCamera( fov, aspect, near, far ); cameraNX.up.set( 0, - 1, 0 ); cameraNX.lookAt( new THREE.Vector3( - 1, 0, 0 ) ); this.add( cameraNX ); var cameraPY = new THREE.PerspectiveCamera( fov, aspect, near, far ); cameraPY.up.set( 0, 0, 1 ); cameraPY.lookAt( new THREE.Vector3( 0, 1, 0 ) ); this.add( cameraPY ); var cameraNY = new THREE.PerspectiveCamera( fov, aspect, near, far ); cameraNY.up.set( 0, 0, - 1 ); cameraNY.lookAt( new THREE.Vector3( 0, - 1, 0 ) ); this.add( cameraNY ); var cameraPZ = new THREE.PerspectiveCamera( fov, aspect, near, far ); cameraPZ.up.set( 0, - 1, 0 ); cameraPZ.lookAt( new THREE.Vector3( 0, 0, 1 ) ); this.add( cameraPZ ); var cameraNZ = new THREE.PerspectiveCamera( fov, aspect, near, far ); cameraNZ.up.set( 0, - 1, 0 ); cameraNZ.lookAt( new THREE.Vector3( 0, 0, - 1 ) ); this.add( cameraNZ ); var options = { format: THREE.RGBFormat, magFilter: THREE.LinearFilter, minFilter: THREE.LinearFilter }; this.renderTarget = new THREE.WebGLRenderTargetCube( cubeResolution, cubeResolution, options ); this.updateCubeMap = function ( renderer, scene ) { if ( this.parent === null ) this.updateMatrixWorld(); var renderTarget = this.renderTarget; var generateMipmaps = renderTarget.texture.generateMipmaps; renderTarget.texture.generateMipmaps = false; renderTarget.activeCubeFace = 0; renderer.render( scene, cameraPX, renderTarget ); renderTarget.activeCubeFace = 1; renderer.render( scene, cameraNX, renderTarget ); renderTarget.activeCubeFace = 2; renderer.render( scene, cameraPY, renderTarget ); renderTarget.activeCubeFace = 3; renderer.render( scene, cameraNY, renderTarget ); renderTarget.activeCubeFace = 4; renderer.render( scene, cameraPZ, renderTarget ); renderTarget.texture.generateMipmaps = generateMipmaps; renderTarget.activeCubeFace = 5; renderer.render( scene, cameraNZ, renderTarget ); renderer.setRenderTarget( null ); }; }; THREE.CubeCamera.prototype = Object.create( THREE.Object3D.prototype ); THREE.CubeCamera.prototype.constructor = THREE.CubeCamera; // File:src/cameras/OrthographicCamera.js /** * @author alteredq / http://alteredqualia.com/ * @author arose / http://github.com/arose */ THREE.OrthographicCamera = function ( left, right, top, bottom, near, far ) { THREE.Camera.call( this ); this.type = 'OrthographicCamera'; this.zoom = 1; this.view = null; this.left = left; this.right = right; this.top = top; this.bottom = bottom; this.near = ( near !== undefined ) ? near : 0.1; this.far = ( far !== undefined ) ? far : 2000; this.updateProjectionMatrix(); }; THREE.OrthographicCamera.prototype = Object.assign( Object.create( THREE.Camera.prototype ), { constructor: THREE.OrthographicCamera, copy: function ( source ) { THREE.Camera.prototype.copy.call( this, source ); this.left = source.left; this.right = source.right; this.top = source.top; this.bottom = source.bottom; this.near = source.near; this.far = source.far; this.zoom = source.zoom; this.view = source.view === null ? null : Object.assign( {}, source.view ); return this; }, setViewOffset: function( fullWidth, fullHeight, x, y, width, height ) { this.view = { fullWidth: fullWidth, fullHeight: fullHeight, offsetX: x, offsetY: y, width: width, height: height }; this.updateProjectionMatrix(); }, clearViewOffset: function() { this.view = null; this.updateProjectionMatrix(); }, updateProjectionMatrix: function () { var dx = ( this.right - this.left ) / ( 2 * this.zoom ); var dy = ( this.top - this.bottom ) / ( 2 * this.zoom ); var cx = ( this.right + this.left ) / 2; var cy = ( this.top + this.bottom ) / 2; var left = cx - dx; var right = cx + dx; var top = cy + dy; var bottom = cy - dy; if ( this.view !== null ) { var zoomW = this.zoom / ( this.view.width / this.view.fullWidth ); var zoomH = this.zoom / ( this.view.height / this.view.fullHeight ); var scaleW = ( this.right - this.left ) / this.view.width; var scaleH = ( this.top - this.bottom ) / this.view.height; left += scaleW * ( this.view.offsetX / zoomW ); right = left + scaleW * ( this.view.width / zoomW ); top -= scaleH * ( this.view.offsetY / zoomH ); bottom = top - scaleH * ( this.view.height / zoomH ); } this.projectionMatrix.makeOrthographic( left, right, top, bottom, this.near, this.far ); }, toJSON: function ( meta ) { var data = THREE.Object3D.prototype.toJSON.call( this, meta ); data.object.zoom = this.zoom; data.object.left = this.left; data.object.right = this.right; data.object.top = this.top; data.object.bottom = this.bottom; data.object.near = this.near; data.object.far = this.far; if ( this.view !== null ) data.object.view = Object.assign( {}, this.view ); return data; } } ); // File:src/cameras/PerspectiveCamera.js /** * @author mrdoob / http://mrdoob.com/ * @author greggman / http://games.greggman.com/ * @author zz85 / http://www.lab4games.net/zz85/blog * @author tschw */ THREE.PerspectiveCamera = function( fov, aspect, near, far ) { THREE.Camera.call( this ); this.type = 'PerspectiveCamera'; this.fov = fov !== undefined ? fov : 50; this.zoom = 1; this.near = near !== undefined ? near : 0.1; this.far = far !== undefined ? far : 2000; this.focus = 10; this.aspect = aspect !== undefined ? aspect : 1; this.view = null; this.filmGauge = 35; // width of the film (default in millimeters) this.filmOffset = 0; // horizontal film offset (same unit as gauge) this.updateProjectionMatrix(); }; THREE.PerspectiveCamera.prototype = Object.assign( Object.create( THREE.Camera.prototype ), { constructor: THREE.PerspectiveCamera, copy: function ( source ) { THREE.Camera.prototype.copy.call( this, source ); this.fov = source.fov; this.zoom = source.zoom; this.near = source.near; this.far = source.far; this.focus = source.focus; this.aspect = source.aspect; this.view = source.view === null ? null : Object.assign( {}, source.view ); this.filmGauge = source.filmGauge; this.filmOffset = source.filmOffset; return this; }, /** * Sets the FOV by focal length in respect to the current .filmGauge. * * The default film gauge is 35, so that the focal length can be specified for * a 35mm (full frame) camera. * * Values for focal length and film gauge must have the same unit. */ setFocalLength: function ( focalLength ) { // see http://www.bobatkins.com/photography/technical/field_of_view.html var vExtentSlope = 0.5 * this.getFilmHeight() / focalLength; this.fov = THREE.Math.RAD2DEG * 2 * Math.atan( vExtentSlope ); this.updateProjectionMatrix(); }, /** * Calculates the focal length from the current .fov and .filmGauge. */ getFocalLength: function () { var vExtentSlope = Math.tan( THREE.Math.DEG2RAD * 0.5 * this.fov ); return 0.5 * this.getFilmHeight() / vExtentSlope; }, getEffectiveFOV: function () { return THREE.Math.RAD2DEG * 2 * Math.atan( Math.tan( THREE.Math.DEG2RAD * 0.5 * this.fov ) / this.zoom ); }, getFilmWidth: function () { // film not completely covered in portrait format (aspect < 1) return this.filmGauge * Math.min( this.aspect, 1 ); }, getFilmHeight: function () { // film not completely covered in landscape format (aspect > 1) return this.filmGauge / Math.max( this.aspect, 1 ); }, /** * Sets an offset in a larger frustum. This is useful for multi-window or * multi-monitor/multi-machine setups. * * For example, if you have 3x2 monitors and each monitor is 1920x1080 and * the monitors are in grid like this * * +---+---+---+ * | A | B | C | * +---+---+---+ * | D | E | F | * +---+---+---+ * * then for each monitor you would call it like this * * var w = 1920; * var h = 1080; * var fullWidth = w * 3; * var fullHeight = h * 2; * * --A-- * camera.setOffset( fullWidth, fullHeight, w * 0, h * 0, w, h ); * --B-- * camera.setOffset( fullWidth, fullHeight, w * 1, h * 0, w, h ); * --C-- * camera.setOffset( fullWidth, fullHeight, w * 2, h * 0, w, h ); * --D-- * camera.setOffset( fullWidth, fullHeight, w * 0, h * 1, w, h ); * --E-- * camera.setOffset( fullWidth, fullHeight, w * 1, h * 1, w, h ); * --F-- * camera.setOffset( fullWidth, fullHeight, w * 2, h * 1, w, h ); * * Note there is no reason monitors have to be the same size or in a grid. */ setViewOffset: function ( fullWidth, fullHeight, x, y, width, height ) { this.aspect = fullWidth / fullHeight; this.view = { fullWidth: fullWidth, fullHeight: fullHeight, offsetX: x, offsetY: y, width: width, height: height }; this.updateProjectionMatrix(); }, clearViewOffset: function() { this.view = null; this.updateProjectionMatrix(); }, updateProjectionMatrix: function () { var near = this.near, top = near * Math.tan( THREE.Math.DEG2RAD * 0.5 * this.fov ) / this.zoom, height = 2 * top, width = this.aspect * height, left = - 0.5 * width, view = this.view; if ( view !== null ) { var fullWidth = view.fullWidth, fullHeight = view.fullHeight; left += view.offsetX * width / fullWidth; top -= view.offsetY * height / fullHeight; width *= view.width / fullWidth; height *= view.height / fullHeight; } var skew = this.filmOffset; if ( skew !== 0 ) left += near * skew / this.getFilmWidth(); this.projectionMatrix.makeFrustum( left, left + width, top - height, top, near, this.far ); }, toJSON: function ( meta ) { var data = THREE.Object3D.prototype.toJSON.call( this, meta ); data.object.fov = this.fov; data.object.zoom = this.zoom; data.object.near = this.near; data.object.far = this.far; data.object.focus = this.focus; data.object.aspect = this.aspect; if ( this.view !== null ) data.object.view = Object.assign( {}, this.view ); data.object.filmGauge = this.filmGauge; data.object.filmOffset = this.filmOffset; return data; } } ); // File:src/cameras/StereoCamera.js /** * @author mrdoob / http://mrdoob.com/ */ THREE.StereoCamera = function () { this.type = 'StereoCamera'; this.aspect = 1; this.cameraL = new THREE.PerspectiveCamera(); this.cameraL.layers.enable( 1 ); this.cameraL.matrixAutoUpdate = false; this.cameraR = new THREE.PerspectiveCamera(); this.cameraR.layers.enable( 2 ); this.cameraR.matrixAutoUpdate = false; }; Object.assign( THREE.StereoCamera.prototype, { update: ( function () { var focus, fov, aspect, near, far; var eyeRight = new THREE.Matrix4(); var eyeLeft = new THREE.Matrix4(); return function update( camera ) { var needsUpdate = focus !== camera.focus || fov !== camera.fov || aspect !== camera.aspect * this.aspect || near !== camera.near || far !== camera.far; if ( needsUpdate ) { focus = camera.focus; fov = camera.fov; aspect = camera.aspect * this.aspect; near = camera.near; far = camera.far; // Off-axis stereoscopic effect based on // http://paulbourke.net/stereographics/stereorender/ var projectionMatrix = camera.projectionMatrix.clone(); var eyeSep = 0.064 / 2; var eyeSepOnProjection = eyeSep * near / focus; var ymax = near * Math.tan( THREE.Math.DEG2RAD * fov * 0.5 ); var xmin, xmax; // translate xOffset eyeLeft.elements[ 12 ] = - eyeSep; eyeRight.elements[ 12 ] = eyeSep; // for left eye xmin = - ymax * aspect + eyeSepOnProjection; xmax = ymax * aspect + eyeSepOnProjection; projectionMatrix.elements[ 0 ] = 2 * near / ( xmax - xmin ); projectionMatrix.elements[ 8 ] = ( xmax + xmin ) / ( xmax - xmin ); this.cameraL.projectionMatrix.copy( projectionMatrix ); // for right eye xmin = - ymax * aspect - eyeSepOnProjection; xmax = ymax * aspect - eyeSepOnProjection; projectionMatrix.elements[ 0 ] = 2 * near / ( xmax - xmin ); projectionMatrix.elements[ 8 ] = ( xmax + xmin ) / ( xmax - xmin ); this.cameraR.projectionMatrix.copy( projectionMatrix ); } this.cameraL.matrixWorld.copy( camera.matrixWorld ).multiply( eyeLeft ); this.cameraR.matrixWorld.copy( camera.matrixWorld ).multiply( eyeRight ); }; } )() } ); // File:src/lights/Light.js /** * @author mrdoob / http://mrdoob.com/ * @author alteredq / http://alteredqualia.com/ */ THREE.Light = function ( color, intensity ) { THREE.Object3D.call( this ); this.type = 'Light'; this.color = new THREE.Color( color ); this.intensity = intensity !== undefined ? intensity : 1; this.receiveShadow = undefined; }; THREE.Light.prototype = Object.assign( Object.create( THREE.Object3D.prototype ), { constructor: THREE.Light, copy: function ( source ) { THREE.Object3D.prototype.copy.call( this, source ); this.color.copy( source.color ); this.intensity = source.intensity; return this; }, toJSON: function ( meta ) { var data = THREE.Object3D.prototype.toJSON.call( this, meta ); data.object.color = this.color.getHex(); data.object.intensity = this.intensity; if ( this.groundColor !== undefined ) data.object.groundColor = this.groundColor.getHex(); if ( this.distance !== undefined ) data.object.distance = this.distance; if ( this.angle !== undefined ) data.object.angle = this.angle; if ( this.decay !== undefined ) data.object.decay = this.decay; if ( this.penumbra !== undefined ) data.object.penumbra = this.penumbra; return data; } } ); // File:src/lights/LightShadow.js /** * @author mrdoob / http://mrdoob.com/ */ THREE.LightShadow = function ( camera ) { this.camera = camera; this.bias = 0; this.radius = 1; this.mapSize = new THREE.Vector2( 512, 512 ); this.map = null; this.matrix = new THREE.Matrix4(); }; Object.assign( THREE.LightShadow.prototype, { copy: function ( source ) { this.camera = source.camera.clone(); this.bias = source.bias; this.radius = source.radius; this.mapSize.copy( source.mapSize ); return this; }, clone: function () { return new this.constructor().copy( this ); } } ); // File:src/lights/AmbientLight.js /** * @author mrdoob / http://mrdoob.com/ */ THREE.AmbientLight = function ( color, intensity ) { THREE.Light.call( this, color, intensity ); this.type = 'AmbientLight'; this.castShadow = undefined; }; THREE.AmbientLight.prototype = Object.assign( Object.create( THREE.Light.prototype ), { constructor: THREE.AmbientLight } ); // File:src/lights/DirectionalLight.js /** * @author mrdoob / http://mrdoob.com/ * @author alteredq / http://alteredqualia.com/ */ THREE.DirectionalLight = function ( color, intensity ) { THREE.Light.call( this, color, intensity ); this.type = 'DirectionalLight'; this.position.set( 0, 1, 0 ); this.updateMatrix(); this.target = new THREE.Object3D(); this.shadow = new THREE.DirectionalLightShadow(); }; THREE.DirectionalLight.prototype = Object.assign( Object.create( THREE.Light.prototype ), { constructor: THREE.DirectionalLight, copy: function ( source ) { THREE.Light.prototype.copy.call( this, source ); this.target = source.target.clone(); this.shadow = source.shadow.clone(); return this; } } ); // File:src/lights/DirectionalLightShadow.js /** * @author mrdoob / http://mrdoob.com/ */ THREE.DirectionalLightShadow = function ( light ) { THREE.LightShadow.call( this, new THREE.OrthographicCamera( - 5, 5, 5, - 5, 0.5, 500 ) ); }; THREE.DirectionalLightShadow.prototype = Object.assign( Object.create( THREE.LightShadow.prototype ), { constructor: THREE.DirectionalLightShadow } ); // File:src/lights/HemisphereLight.js /** * @author alteredq / http://alteredqualia.com/ */ THREE.HemisphereLight = function ( skyColor, groundColor, intensity ) { THREE.Light.call( this, skyColor, intensity ); this.type = 'HemisphereLight'; this.castShadow = undefined; this.position.set( 0, 1, 0 ); this.updateMatrix(); this.groundColor = new THREE.Color( groundColor ); }; THREE.HemisphereLight.prototype = Object.assign( Object.create( THREE.Light.prototype ), { constructor: THREE.HemisphereLight, copy: function ( source ) { THREE.Light.prototype.copy.call( this, source ); this.groundColor.copy( source.groundColor ); return this; } } ); // File:src/lights/PointLight.js /** * @author mrdoob / http://mrdoob.com/ */ THREE.PointLight = function ( color, intensity, distance, decay ) { THREE.Light.call( this, color, intensity ); this.type = 'PointLight'; Object.defineProperty( this, 'power', { get: function () { // intensity = power per solid angle. // ref: equation (15) from http://www.frostbite.com/wp-content/uploads/2014/11/course_notes_moving_frostbite_to_pbr.pdf return this.intensity * 4 * Math.PI; }, set: function ( power ) { // intensity = power per solid angle. // ref: equation (15) from http://www.frostbite.com/wp-content/uploads/2014/11/course_notes_moving_frostbite_to_pbr.pdf this.intensity = power / ( 4 * Math.PI ); } } ); this.distance = ( distance !== undefined ) ? distance : 0; this.decay = ( decay !== undefined ) ? decay : 1; // for physically correct lights, should be 2. this.shadow = new THREE.LightShadow( new THREE.PerspectiveCamera( 90, 1, 0.5, 500 ) ); }; THREE.PointLight.prototype = Object.assign( Object.create( THREE.Light.prototype ), { constructor: THREE.PointLight, copy: function ( source ) { THREE.Light.prototype.copy.call( this, source ); this.distance = source.distance; this.decay = source.decay; this.shadow = source.shadow.clone(); return this; } } ); // File:src/lights/SpotLight.js /** * @author alteredq / http://alteredqualia.com/ */ THREE.SpotLight = function ( color, intensity, distance, angle, penumbra, decay ) { THREE.Light.call( this, color, intensity ); this.type = 'SpotLight'; this.position.set( 0, 1, 0 ); this.updateMatrix(); this.target = new THREE.Object3D(); Object.defineProperty( this, 'power', { get: function () { // intensity = power per solid angle. // ref: equation (17) from http://www.frostbite.com/wp-content/uploads/2014/11/course_notes_moving_frostbite_to_pbr.pdf return this.intensity * Math.PI; }, set: function ( power ) { // intensity = power per solid angle. // ref: equation (17) from http://www.frostbite.com/wp-content/uploads/2014/11/course_notes_moving_frostbite_to_pbr.pdf this.intensity = power / Math.PI; } } ); this.distance = ( distance !== undefined ) ? distance : 0; this.angle = ( angle !== undefined ) ? angle : Math.PI / 3; this.penumbra = ( penumbra !== undefined ) ? penumbra : 0; this.decay = ( decay !== undefined ) ? decay : 1; // for physically correct lights, should be 2. this.shadow = new THREE.SpotLightShadow(); }; THREE.SpotLight.prototype = Object.assign( Object.create( THREE.Light.prototype ), { constructor: THREE.SpotLight, copy: function ( source ) { THREE.Light.prototype.copy.call( this, source ); this.distance = source.distance; this.angle = source.angle; this.penumbra = source.penumbra; this.decay = source.decay; this.target = source.target.clone(); this.shadow = source.shadow.clone(); return this; } } ); // File:src/lights/SpotLightShadow.js /** * @author mrdoob / http://mrdoob.com/ */ THREE.SpotLightShadow = function () { THREE.LightShadow.call( this, new THREE.PerspectiveCamera( 50, 1, 0.5, 500 ) ); }; THREE.SpotLightShadow.prototype = Object.assign( Object.create( THREE.LightShadow.prototype ), { constructor: THREE.SpotLightShadow, update: function ( light ) { var fov = THREE.Math.RAD2DEG * 2 * light.angle; var aspect = this.mapSize.width / this.mapSize.height; var far = light.distance || 500; var camera = this.camera; if ( fov !== camera.fov || aspect !== camera.aspect || far !== camera.far ) { camera.fov = fov; camera.aspect = aspect; camera.far = far; camera.updateProjectionMatrix(); } } } ); // File:src/loaders/AudioLoader.js /** * @author Reece Aaron Lecrivain / http://reecenotes.com/ */ THREE.AudioLoader = function ( manager ) { this.manager = ( manager !== undefined ) ? manager : THREE.DefaultLoadingManager; }; Object.assign( THREE.AudioLoader.prototype, { load: function ( url, onLoad, onProgress, onError ) { var loader = new THREE.XHRLoader( this.manager ); loader.setResponseType( 'arraybuffer' ); loader.load( url, function ( buffer ) { var context = THREE.AudioContext; context.decodeAudioData( buffer, function ( audioBuffer ) { onLoad( audioBuffer ); } ); }, onProgress, onError ); } } ); // File:src/loaders/Cache.js /** * @author mrdoob / http://mrdoob.com/ */ THREE.Cache = { enabled: false, files: {}, add: function ( key, file ) { if ( this.enabled === false ) return; // console.log( 'THREE.Cache', 'Adding key:', key ); this.files[ key ] = file; }, get: function ( key ) { if ( this.enabled === false ) return; // console.log( 'THREE.Cache', 'Checking key:', key ); return this.files[ key ]; }, remove: function ( key ) { delete this.files[ key ]; }, clear: function () { this.files = {}; } }; // File:src/loaders/Loader.js /** * @author alteredq / http://alteredqualia.com/ */ THREE.Loader = function () { this.onLoadStart = function () {}; this.onLoadProgress = function () {}; this.onLoadComplete = function () {}; }; THREE.Loader.prototype = { constructor: THREE.Loader, crossOrigin: undefined, extractUrlBase: function ( url ) { var parts = url.split( '/' ); if ( parts.length === 1 ) return './'; parts.pop(); return parts.join( '/' ) + '/'; }, initMaterials: function ( materials, texturePath, crossOrigin ) { var array = []; for ( var i = 0; i < materials.length; ++ i ) { array[ i ] = this.createMaterial( materials[ i ], texturePath, crossOrigin ); } return array; }, createMaterial: ( function () { var color, textureLoader, materialLoader; return function createMaterial( m, texturePath, crossOrigin ) { if ( color === undefined ) color = new THREE.Color(); if ( textureLoader === undefined ) textureLoader = new THREE.TextureLoader(); if ( materialLoader === undefined ) materialLoader = new THREE.MaterialLoader(); // convert from old material format var textures = {}; function loadTexture( path, repeat, offset, wrap, anisotropy ) { var fullPath = texturePath + path; var loader = THREE.Loader.Handlers.get( fullPath ); var texture; if ( loader !== null ) { texture = loader.load( fullPath ); } else { textureLoader.setCrossOrigin( crossOrigin ); texture = textureLoader.load( fullPath ); } if ( repeat !== undefined ) { texture.repeat.fromArray( repeat ); if ( repeat[ 0 ] !== 1 ) texture.wrapS = THREE.RepeatWrapping; if ( repeat[ 1 ] !== 1 ) texture.wrapT = THREE.RepeatWrapping; } if ( offset !== undefined ) { texture.offset.fromArray( offset ); } if ( wrap !== undefined ) { if ( wrap[ 0 ] === 'repeat' ) texture.wrapS = THREE.RepeatWrapping; if ( wrap[ 0 ] === 'mirror' ) texture.wrapS = THREE.MirroredRepeatWrapping; if ( wrap[ 1 ] === 'repeat' ) texture.wrapT = THREE.RepeatWrapping; if ( wrap[ 1 ] === 'mirror' ) texture.wrapT = THREE.MirroredRepeatWrapping; } if ( anisotropy !== undefined ) { texture.anisotropy = anisotropy; } var uuid = THREE.Math.generateUUID(); textures[ uuid ] = texture; return uuid; } // var json = { uuid: THREE.Math.generateUUID(), type: 'MeshLambertMaterial' }; for ( var name in m ) { var value = m[ name ]; switch ( name ) { case 'DbgColor': case 'DbgIndex': case 'opticalDensity': case 'illumination': break; case 'DbgName': json.name = value; break; case 'blending': json.blending = THREE[ value ]; break; case 'colorAmbient': case 'mapAmbient': console.warn( 'THREE.Loader.createMaterial:', name, 'is no longer supported.' ); break; case 'colorDiffuse': json.color = color.fromArray( value ).getHex(); break; case 'colorSpecular': json.specular = color.fromArray( value ).getHex(); break; case 'colorEmissive': json.emissive = color.fromArray( value ).getHex(); break; case 'specularCoef': json.shininess = value; break; case 'shading': if ( value.toLowerCase() === 'basic' ) json.type = 'MeshBasicMaterial'; if ( value.toLowerCase() === 'phong' ) json.type = 'MeshPhongMaterial'; if ( value.toLowerCase() === 'standard' ) json.type = 'MeshStandardMaterial'; break; case 'mapDiffuse': json.map = loadTexture( value, m.mapDiffuseRepeat, m.mapDiffuseOffset, m.mapDiffuseWrap, m.mapDiffuseAnisotropy ); break; case 'mapDiffuseRepeat': case 'mapDiffuseOffset': case 'mapDiffuseWrap': case 'mapDiffuseAnisotropy': break; case 'mapEmissive': json.emissiveMap = loadTexture( value, m.mapEmissiveRepeat, m.mapEmissiveOffset, m.mapEmissiveWrap, m.mapEmissiveAnisotropy ); break; case 'mapEmissiveRepeat': case 'mapEmissiveOffset': case 'mapEmissiveWrap': case 'mapEmissiveAnisotropy': break; case 'mapLight': json.lightMap = loadTexture( value, m.mapLightRepeat, m.mapLightOffset, m.mapLightWrap, m.mapLightAnisotropy ); break; case 'mapLightRepeat': case 'mapLightOffset': case 'mapLightWrap': case 'mapLightAnisotropy': break; case 'mapAO': json.aoMap = loadTexture( value, m.mapAORepeat, m.mapAOOffset, m.mapAOWrap, m.mapAOAnisotropy ); break; case 'mapAORepeat': case 'mapAOOffset': case 'mapAOWrap': case 'mapAOAnisotropy': break; case 'mapBump': json.bumpMap = loadTexture( value, m.mapBumpRepeat, m.mapBumpOffset, m.mapBumpWrap, m.mapBumpAnisotropy ); break; case 'mapBumpScale': json.bumpScale = value; break; case 'mapBumpRepeat': case 'mapBumpOffset': case 'mapBumpWrap': case 'mapBumpAnisotropy': break; case 'mapNormal': json.normalMap = loadTexture( value, m.mapNormalRepeat, m.mapNormalOffset, m.mapNormalWrap, m.mapNormalAnisotropy ); break; case 'mapNormalFactor': json.normalScale = [ value, value ]; break; case 'mapNormalRepeat': case 'mapNormalOffset': case 'mapNormalWrap': case 'mapNormalAnisotropy': break; case 'mapSpecular': json.specularMap = loadTexture( value, m.mapSpecularRepeat, m.mapSpecularOffset, m.mapSpecularWrap, m.mapSpecularAnisotropy ); break; case 'mapSpecularRepeat': case 'mapSpecularOffset': case 'mapSpecularWrap': case 'mapSpecularAnisotropy': break; case 'mapMetalness': json.metalnessMap = loadTexture( value, m.mapMetalnessRepeat, m.mapMetalnessOffset, m.mapMetalnessWrap, m.mapMetalnessAnisotropy ); break; case 'mapMetalnessRepeat': case 'mapMetalnessOffset': case 'mapMetalnessWrap': case 'mapMetalnessAnisotropy': break; case 'mapRoughness': json.roughnessMap = loadTexture( value, m.mapRoughnessRepeat, m.mapRoughnessOffset, m.mapRoughnessWrap, m.mapRoughnessAnisotropy ); break; case 'mapRoughnessRepeat': case 'mapRoughnessOffset': case 'mapRoughnessWrap': case 'mapRoughnessAnisotropy': break; case 'mapAlpha': json.alphaMap = loadTexture( value, m.mapAlphaRepeat, m.mapAlphaOffset, m.mapAlphaWrap, m.mapAlphaAnisotropy ); break; case 'mapAlphaRepeat': case 'mapAlphaOffset': case 'mapAlphaWrap': case 'mapAlphaAnisotropy': break; case 'flipSided': json.side = THREE.BackSide; break; case 'doubleSided': json.side = THREE.DoubleSide; break; case 'transparency': console.warn( 'THREE.Loader.createMaterial: transparency has been renamed to opacity' ); json.opacity = value; break; case 'depthTest': case 'depthWrite': case 'colorWrite': case 'opacity': case 'reflectivity': case 'transparent': case 'visible': case 'wireframe': json[ name ] = value; break; case 'vertexColors': if ( value === true ) json.vertexColors = THREE.VertexColors; if ( value === 'face' ) json.vertexColors = THREE.FaceColors; break; default: console.error( 'THREE.Loader.createMaterial: Unsupported', name, value ); break; } } if ( json.type === 'MeshBasicMaterial' ) delete json.emissive; if ( json.type !== 'MeshPhongMaterial' ) delete json.specular; if ( json.opacity < 1 ) json.transparent = true; materialLoader.setTextures( textures ); return materialLoader.parse( json ); }; } )() }; THREE.Loader.Handlers = { handlers: [], add: function ( regex, loader ) { this.handlers.push( regex, loader ); }, get: function ( file ) { var handlers = this.handlers; for ( var i = 0, l = handlers.length; i < l; i += 2 ) { var regex = handlers[ i ]; var loader = handlers[ i + 1 ]; if ( regex.test( file ) ) { return loader; } } return null; } }; // File:src/loaders/XHRLoader.js /** * @author mrdoob / http://mrdoob.com/ */ THREE.XHRLoader = function ( manager ) { this.manager = ( manager !== undefined ) ? manager : THREE.DefaultLoadingManager; }; Object.assign( THREE.XHRLoader.prototype, { load: function ( url, onLoad, onProgress, onError ) { if ( this.path !== undefined ) url = this.path + url; var scope = this; var cached = THREE.Cache.get( url ); if ( cached !== undefined ) { if ( onLoad ) { setTimeout( function () { onLoad( cached ); }, 0 ); } return cached; } var request = new XMLHttpRequest(); request.overrideMimeType( 'text/plain' ); request.open( 'GET', url, true ); request.addEventListener( 'load', function ( event ) { var response = event.target.response; THREE.Cache.add( url, response ); if ( this.status === 200 ) { if ( onLoad ) onLoad( response ); scope.manager.itemEnd( url ); } else if ( this.status === 0 ) { // Some browsers return HTTP Status 0 when using non-http protocol // e.g. 'file://' or 'data://'. Handle as success. console.warn( 'THREE.XHRLoader: HTTP Status 0 received.' ); if ( onLoad ) onLoad( response ); scope.manager.itemEnd( url ); } else { if ( onError ) onError( event ); scope.manager.itemError( url ); } }, false ); if ( onProgress !== undefined ) { request.addEventListener( 'progress', function ( event ) { onProgress( event ); }, false ); } request.addEventListener( 'error', function ( event ) { if ( onError ) onError( event ); scope.manager.itemError( url ); }, false ); if ( this.responseType !== undefined ) request.responseType = this.responseType; if ( this.withCredentials !== undefined ) request.withCredentials = this.withCredentials; request.send( null ); scope.manager.itemStart( url ); return request; }, setPath: function ( value ) { this.path = value; return this; }, setResponseType: function ( value ) { this.responseType = value; return this; }, setWithCredentials: function ( value ) { this.withCredentials = value; return this; } } ); // File:src/loaders/FontLoader.js /** * @author mrdoob / http://mrdoob.com/ */ THREE.FontLoader = function ( manager ) { this.manager = ( manager !== undefined ) ? manager : THREE.DefaultLoadingManager; }; Object.assign( THREE.FontLoader.prototype, { load: function ( url, onLoad, onProgress, onError ) { var scope = this; var loader = new THREE.XHRLoader( this.manager ); loader.load( url, function ( text ) { var json; try { json = JSON.parse( text ); } catch ( e ) { console.warn( 'THREE.FontLoader: typeface.js support is being deprecated. Use typeface.json instead.' ); json = JSON.parse( text.substring( 65, text.length - 2 ) ); } var font = scope.parse( json ); if ( onLoad ) onLoad( font ); }, onProgress, onError ); }, parse: function ( json ) { return new THREE.Font( json ); } } ); // File:src/loaders/ImageLoader.js /** * @author mrdoob / http://mrdoob.com/ */ THREE.ImageLoader = function ( manager ) { this.manager = ( manager !== undefined ) ? manager : THREE.DefaultLoadingManager; }; Object.assign( THREE.ImageLoader.prototype, { load: function ( url, onLoad, onProgress, onError ) { var image = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'img' ); image.onload = function () { URL.revokeObjectURL( image.src ); if ( onLoad ) onLoad( image ); }; if ( url.indexOf( 'data:' ) === 0 ) { image.src = url; } else { var loader = new THREE.XHRLoader( this.manager ); loader.setPath( this.path ); loader.setResponseType( 'blob' ); loader.load( url, function ( blob ) { image.src = URL.createObjectURL( blob ); }, onProgress, onError ); } return image; }, setCrossOrigin: function ( value ) { this.crossOrigin = value; return this; }, setPath: function ( value ) { this.path = value; return this; } } ); // File:src/loaders/JSONLoader.js /** * @author mrdoob / http://mrdoob.com/ * @author alteredq / http://alteredqualia.com/ */ THREE.JSONLoader = function ( manager ) { if ( typeof manager === 'boolean' ) { console.warn( 'THREE.JSONLoader: showStatus parameter has been removed from constructor.' ); manager = undefined; } this.manager = ( manager !== undefined ) ? manager : THREE.DefaultLoadingManager; this.withCredentials = false; }; Object.assign( THREE.JSONLoader.prototype, { load: function( url, onLoad, onProgress, onError ) { var scope = this; var texturePath = this.texturePath && ( typeof this.texturePath === "string" ) ? this.texturePath : THREE.Loader.prototype.extractUrlBase( url ); var loader = new THREE.XHRLoader( this.manager ); loader.setWithCredentials( this.withCredentials ); loader.load( url, function ( text ) { var json = JSON.parse( text ); var metadata = json.metadata; if ( metadata !== undefined ) { var type = metadata.type; if ( type !== undefined ) { if ( type.toLowerCase() === 'object' ) { console.error( 'THREE.JSONLoader: ' + url + ' should be loaded with THREE.ObjectLoader instead.' ); return; } if ( type.toLowerCase() === 'scene' ) { console.error( 'THREE.JSONLoader: ' + url + ' should be loaded with THREE.SceneLoader instead.' ); return; } } } var object = scope.parse( json, texturePath ); onLoad( object.geometry, object.materials ); }, onProgress, onError ); }, setTexturePath: function ( value ) { this.texturePath = value; }, parse: function ( json, texturePath ) { var geometry = new THREE.Geometry(), scale = ( json.scale !== undefined ) ? 1.0 / json.scale : 1.0; parseModel( scale ); parseSkin(); parseMorphing( scale ); parseAnimations(); geometry.computeFaceNormals(); geometry.computeBoundingSphere(); function parseModel( scale ) { function isBitSet( value, position ) { return value & ( 1 << position ); } var i, j, fi, offset, zLength, colorIndex, normalIndex, uvIndex, materialIndex, type, isQuad, hasMaterial, hasFaceVertexUv, hasFaceNormal, hasFaceVertexNormal, hasFaceColor, hasFaceVertexColor, vertex, face, faceA, faceB, hex, normal, uvLayer, uv, u, v, faces = json.faces, vertices = json.vertices, normals = json.normals, colors = json.colors, nUvLayers = 0; if ( json.uvs !== undefined ) { // disregard empty arrays for ( i = 0; i < json.uvs.length; i ++ ) { if ( json.uvs[ i ].length ) nUvLayers ++; } for ( i = 0; i < nUvLayers; i ++ ) { geometry.faceVertexUvs[ i ] = []; } } offset = 0; zLength = vertices.length; while ( offset < zLength ) { vertex = new THREE.Vector3(); vertex.x = vertices[ offset ++ ] * scale; vertex.y = vertices[ offset ++ ] * scale; vertex.z = vertices[ offset ++ ] * scale; geometry.vertices.push( vertex ); } offset = 0; zLength = faces.length; while ( offset < zLength ) { type = faces[ offset ++ ]; isQuad = isBitSet( type, 0 ); hasMaterial = isBitSet( type, 1 ); hasFaceVertexUv = isBitSet( type, 3 ); hasFaceNormal = isBitSet( type, 4 ); hasFaceVertexNormal = isBitSet( type, 5 ); hasFaceColor = isBitSet( type, 6 ); hasFaceVertexColor = isBitSet( type, 7 ); // console.log("type", type, "bits", isQuad, hasMaterial, hasFaceVertexUv, hasFaceNormal, hasFaceVertexNormal, hasFaceColor, hasFaceVertexColor); if ( isQuad ) { faceA = new THREE.Face3(); faceA.a = faces[ offset ]; faceA.b = faces[ offset + 1 ]; faceA.c = faces[ offset + 3 ]; faceB = new THREE.Face3(); faceB.a = faces[ offset + 1 ]; faceB.b = faces[ offset + 2 ]; faceB.c = faces[ offset + 3 ]; offset += 4; if ( hasMaterial ) { materialIndex = faces[ offset ++ ]; faceA.materialIndex = materialIndex; faceB.materialIndex = materialIndex; } // to get face <=> uv index correspondence fi = geometry.faces.length; if ( hasFaceVertexUv ) { for ( i = 0; i < nUvLayers; i ++ ) { uvLayer = json.uvs[ i ]; geometry.faceVertexUvs[ i ][ fi ] = []; geometry.faceVertexUvs[ i ][ fi + 1 ] = []; for ( j = 0; j < 4; j ++ ) { uvIndex = faces[ offset ++ ]; u = uvLayer[ uvIndex * 2 ]; v = uvLayer[ uvIndex * 2 + 1 ]; uv = new THREE.Vector2( u, v ); if ( j !== 2 ) geometry.faceVertexUvs[ i ][ fi ].push( uv ); if ( j !== 0 ) geometry.faceVertexUvs[ i ][ fi + 1 ].push( uv ); } } } if ( hasFaceNormal ) { normalIndex = faces[ offset ++ ] * 3; faceA.normal.set( normals[ normalIndex ++ ], normals[ normalIndex ++ ], normals[ normalIndex ] ); faceB.normal.copy( faceA.normal ); } if ( hasFaceVertexNormal ) { for ( i = 0; i < 4; i ++ ) { normalIndex = faces[ offset ++ ] * 3; normal = new THREE.Vector3( normals[ normalIndex ++ ], normals[ normalIndex ++ ], normals[ normalIndex ] ); if ( i !== 2 ) faceA.vertexNormals.push( normal ); if ( i !== 0 ) faceB.vertexNormals.push( normal ); } } if ( hasFaceColor ) { colorIndex = faces[ offset ++ ]; hex = colors[ colorIndex ]; faceA.color.setHex( hex ); faceB.color.setHex( hex ); } if ( hasFaceVertexColor ) { for ( i = 0; i < 4; i ++ ) { colorIndex = faces[ offset ++ ]; hex = colors[ colorIndex ]; if ( i !== 2 ) faceA.vertexColors.push( new THREE.Color( hex ) ); if ( i !== 0 ) faceB.vertexColors.push( new THREE.Color( hex ) ); } } geometry.faces.push( faceA ); geometry.faces.push( faceB ); } else { face = new THREE.Face3(); face.a = faces[ offset ++ ]; face.b = faces[ offset ++ ]; face.c = faces[ offset ++ ]; if ( hasMaterial ) { materialIndex = faces[ offset ++ ]; face.materialIndex = materialIndex; } // to get face <=> uv index correspondence fi = geometry.faces.length; if ( hasFaceVertexUv ) { for ( i = 0; i < nUvLayers; i ++ ) { uvLayer = json.uvs[ i ]; geometry.faceVertexUvs[ i ][ fi ] = []; for ( j = 0; j < 3; j ++ ) { uvIndex = faces[ offset ++ ]; u = uvLayer[ uvIndex * 2 ]; v = uvLayer[ uvIndex * 2 + 1 ]; uv = new THREE.Vector2( u, v ); geometry.faceVertexUvs[ i ][ fi ].push( uv ); } } } if ( hasFaceNormal ) { normalIndex = faces[ offset ++ ] * 3; face.normal.set( normals[ normalIndex ++ ], normals[ normalIndex ++ ], normals[ normalIndex ] ); } if ( hasFaceVertexNormal ) { for ( i = 0; i < 3; i ++ ) { normalIndex = faces[ offset ++ ] * 3; normal = new THREE.Vector3( normals[ normalIndex ++ ], normals[ normalIndex ++ ], normals[ normalIndex ] ); face.vertexNormals.push( normal ); } } if ( hasFaceColor ) { colorIndex = faces[ offset ++ ]; face.color.setHex( colors[ colorIndex ] ); } if ( hasFaceVertexColor ) { for ( i = 0; i < 3; i ++ ) { colorIndex = faces[ offset ++ ]; face.vertexColors.push( new THREE.Color( colors[ colorIndex ] ) ); } } geometry.faces.push( face ); } } } function parseSkin() { var influencesPerVertex = ( json.influencesPerVertex !== undefined ) ? json.influencesPerVertex : 2; if ( json.skinWeights ) { for ( var i = 0, l = json.skinWeights.length; i < l; i += influencesPerVertex ) { var x = json.skinWeights[ i ]; var y = ( influencesPerVertex > 1 ) ? json.skinWeights[ i + 1 ] : 0; var z = ( influencesPerVertex > 2 ) ? json.skinWeights[ i + 2 ] : 0; var w = ( influencesPerVertex > 3 ) ? json.skinWeights[ i + 3 ] : 0; geometry.skinWeights.push( new THREE.Vector4( x, y, z, w ) ); } } if ( json.skinIndices ) { for ( var i = 0, l = json.skinIndices.length; i < l; i += influencesPerVertex ) { var a = json.skinIndices[ i ]; var b = ( influencesPerVertex > 1 ) ? json.skinIndices[ i + 1 ] : 0; var c = ( influencesPerVertex > 2 ) ? json.skinIndices[ i + 2 ] : 0; var d = ( influencesPerVertex > 3 ) ? json.skinIndices[ i + 3 ] : 0; geometry.skinIndices.push( new THREE.Vector4( a, b, c, d ) ); } } geometry.bones = json.bones; if ( geometry.bones && geometry.bones.length > 0 && ( geometry.skinWeights.length !== geometry.skinIndices.length || geometry.skinIndices.length !== geometry.vertices.length ) ) { console.warn( 'When skinning, number of vertices (' + geometry.vertices.length + '), skinIndices (' + geometry.skinIndices.length + '), and skinWeights (' + geometry.skinWeights.length + ') should match.' ); } } function parseMorphing( scale ) { if ( json.morphTargets !== undefined ) { for ( var i = 0, l = json.morphTargets.length; i < l; i ++ ) { geometry.morphTargets[ i ] = {}; geometry.morphTargets[ i ].name = json.morphTargets[ i ].name; geometry.morphTargets[ i ].vertices = []; var dstVertices = geometry.morphTargets[ i ].vertices; var srcVertices = json.morphTargets[ i ].vertices; for ( var v = 0, vl = srcVertices.length; v < vl; v += 3 ) { var vertex = new THREE.Vector3(); vertex.x = srcVertices[ v ] * scale; vertex.y = srcVertices[ v + 1 ] * scale; vertex.z = srcVertices[ v + 2 ] * scale; dstVertices.push( vertex ); } } } if ( json.morphColors !== undefined && json.morphColors.length > 0 ) { console.warn( 'THREE.JSONLoader: "morphColors" no longer supported. Using them as face colors.' ); var faces = geometry.faces; var morphColors = json.morphColors[ 0 ].colors; for ( var i = 0, l = faces.length; i < l; i ++ ) { faces[ i ].color.fromArray( morphColors, i * 3 ); } } } function parseAnimations() { var outputAnimations = []; // parse old style Bone/Hierarchy animations var animations = []; if ( json.animation !== undefined ) { animations.push( json.animation ); } if ( json.animations !== undefined ) { if ( json.animations.length ) { animations = animations.concat( json.animations ); } else { animations.push( json.animations ); } } for ( var i = 0; i < animations.length; i ++ ) { var clip = THREE.AnimationClip.parseAnimation( animations[ i ], geometry.bones ); if ( clip ) outputAnimations.push( clip ); } // parse implicit morph animations if ( geometry.morphTargets ) { // TODO: Figure out what an appropraite FPS is for morph target animations -- defaulting to 10, but really it is completely arbitrary. var morphAnimationClips = THREE.AnimationClip.CreateClipsFromMorphTargetSequences( geometry.morphTargets, 10 ); outputAnimations = outputAnimations.concat( morphAnimationClips ); } if ( outputAnimations.length > 0 ) geometry.animations = outputAnimations; } if ( json.materials === undefined || json.materials.length === 0 ) { return { geometry: geometry }; } else { var materials = THREE.Loader.prototype.initMaterials( json.materials, texturePath, this.crossOrigin ); return { geometry: geometry, materials: materials }; } } } ); // File:src/loaders/LoadingManager.js /** * @author mrdoob / http://mrdoob.com/ */ THREE.LoadingManager = function ( onLoad, onProgress, onError ) { var scope = this; var isLoading = false, itemsLoaded = 0, itemsTotal = 0; this.onStart = undefined; this.onLoad = onLoad; this.onProgress = onProgress; this.onError = onError; this.itemStart = function ( url ) { itemsTotal ++; if ( isLoading === false ) { if ( scope.onStart !== undefined ) { scope.onStart( url, itemsLoaded, itemsTotal ); } } isLoading = true; }; this.itemEnd = function ( url ) { itemsLoaded ++; if ( scope.onProgress !== undefined ) { scope.onProgress( url, itemsLoaded, itemsTotal ); } if ( itemsLoaded === itemsTotal ) { isLoading = false; if ( scope.onLoad !== undefined ) { scope.onLoad(); } } }; this.itemError = function ( url ) { if ( scope.onError !== undefined ) { scope.onError( url ); } }; }; THREE.DefaultLoadingManager = new THREE.LoadingManager(); // File:src/loaders/BufferGeometryLoader.js /** * @author mrdoob / http://mrdoob.com/ */ THREE.BufferGeometryLoader = function ( manager ) { this.manager = ( manager !== undefined ) ? manager : THREE.DefaultLoadingManager; }; Object.assign( THREE.BufferGeometryLoader.prototype, { load: function ( url, onLoad, onProgress, onError ) { var scope = this; var loader = new THREE.XHRLoader( scope.manager ); loader.load( url, function ( text ) { onLoad( scope.parse( JSON.parse( text ) ) ); }, onProgress, onError ); }, parse: function ( json ) { var geometry = new THREE.BufferGeometry(); var index = json.data.index; var TYPED_ARRAYS = { 'Int8Array': Int8Array, 'Uint8Array': Uint8Array, 'Uint8ClampedArray': Uint8ClampedArray, 'Int16Array': Int16Array, 'Uint16Array': Uint16Array, 'Int32Array': Int32Array, 'Uint32Array': Uint32Array, 'Float32Array': Float32Array, 'Float64Array': Float64Array }; if ( index !== undefined ) { var typedArray = new TYPED_ARRAYS[ index.type ]( index.array ); geometry.setIndex( new THREE.BufferAttribute( typedArray, 1 ) ); } var attributes = json.data.attributes; for ( var key in attributes ) { var attribute = attributes[ key ]; var typedArray = new TYPED_ARRAYS[ attribute.type ]( attribute.array ); geometry.addAttribute( key, new THREE.BufferAttribute( typedArray, attribute.itemSize, attribute.normalized ) ); } var groups = json.data.groups || json.data.drawcalls || json.data.offsets; if ( groups !== undefined ) { for ( var i = 0, n = groups.length; i !== n; ++ i ) { var group = groups[ i ]; geometry.addGroup( group.start, group.count, group.materialIndex ); } } var boundingSphere = json.data.boundingSphere; if ( boundingSphere !== undefined ) { var center = new THREE.Vector3(); if ( boundingSphere.center !== undefined ) { center.fromArray( boundingSphere.center ); } geometry.boundingSphere = new THREE.Sphere( center, boundingSphere.radius ); } return geometry; } } ); // File:src/loaders/MaterialLoader.js /** * @author mrdoob / http://mrdoob.com/ */ THREE.MaterialLoader = function ( manager ) { this.manager = ( manager !== undefined ) ? manager : THREE.DefaultLoadingManager; this.textures = {}; }; Object.assign( THREE.MaterialLoader.prototype, { load: function ( url, onLoad, onProgress, onError ) { var scope = this; var loader = new THREE.XHRLoader( scope.manager ); loader.load( url, function ( text ) { onLoad( scope.parse( JSON.parse( text ) ) ); }, onProgress, onError ); }, setTextures: function ( value ) { this.textures = value; }, getTexture: function ( name ) { var textures = this.textures; if ( textures[ name ] === undefined ) { console.warn( 'THREE.MaterialLoader: Undefined texture', name ); } return textures[ name ]; }, parse: function ( json ) { var material = new THREE[ json.type ]; if ( json.uuid !== undefined ) material.uuid = json.uuid; if ( json.name !== undefined ) material.name = json.name; if ( json.color !== undefined ) material.color.setHex( json.color ); if ( json.roughness !== undefined ) material.roughness = json.roughness; if ( json.metalness !== undefined ) material.metalness = json.metalness; if ( json.emissive !== undefined ) material.emissive.setHex( json.emissive ); if ( json.specular !== undefined ) material.specular.setHex( json.specular ); if ( json.shininess !== undefined ) material.shininess = json.shininess; if ( json.uniforms !== undefined ) material.uniforms = json.uniforms; if ( json.vertexShader !== undefined ) material.vertexShader = json.vertexShader; if ( json.fragmentShader !== undefined ) material.fragmentShader = json.fragmentShader; if ( json.vertexColors !== undefined ) material.vertexColors = json.vertexColors; if ( json.shading !== undefined ) material.shading = json.shading; if ( json.blending !== undefined ) material.blending = json.blending; if ( json.side !== undefined ) material.side = json.side; if ( json.opacity !== undefined ) material.opacity = json.opacity; if ( json.transparent !== undefined ) material.transparent = json.transparent; if ( json.alphaTest !== undefined ) material.alphaTest = json.alphaTest; if ( json.depthTest !== undefined ) material.depthTest = json.depthTest; if ( json.depthWrite !== undefined ) material.depthWrite = json.depthWrite; if ( json.colorWrite !== undefined ) material.colorWrite = json.colorWrite; if ( json.wireframe !== undefined ) material.wireframe = json.wireframe; if ( json.wireframeLinewidth !== undefined ) material.wireframeLinewidth = json.wireframeLinewidth; // for PointsMaterial if ( json.size !== undefined ) material.size = json.size; if ( json.sizeAttenuation !== undefined ) material.sizeAttenuation = json.sizeAttenuation; // maps if ( json.map !== undefined ) material.map = this.getTexture( json.map ); if ( json.alphaMap !== undefined ) { material.alphaMap = this.getTexture( json.alphaMap ); material.transparent = true; } if ( json.bumpMap !== undefined ) material.bumpMap = this.getTexture( json.bumpMap ); if ( json.bumpScale !== undefined ) material.bumpScale = json.bumpScale; if ( json.normalMap !== undefined ) material.normalMap = this.getTexture( json.normalMap ); if ( json.normalScale !== undefined ) { var normalScale = json.normalScale; if ( Array.isArray( normalScale ) === false ) { // Blender exporter used to export a scalar. See #7459 normalScale = [ normalScale, normalScale ]; } material.normalScale = new THREE.Vector2().fromArray( normalScale ); } if ( json.displacementMap !== undefined ) material.displacementMap = this.getTexture( json.displacementMap ); if ( json.displacementScale !== undefined ) material.displacementScale = json.displacementScale; if ( json.displacementBias !== undefined ) material.displacementBias = json.displacementBias; if ( json.roughnessMap !== undefined ) material.roughnessMap = this.getTexture( json.roughnessMap ); if ( json.metalnessMap !== undefined ) material.metalnessMap = this.getTexture( json.metalnessMap ); if ( json.emissiveMap !== undefined ) material.emissiveMap = this.getTexture( json.emissiveMap ); if ( json.emissiveIntensity !== undefined ) material.emissiveIntensity = json.emissiveIntensity; if ( json.specularMap !== undefined ) material.specularMap = this.getTexture( json.specularMap ); if ( json.envMap !== undefined ) { material.envMap = this.getTexture( json.envMap ); material.combine = THREE.MultiplyOperation; } if ( json.reflectivity !== undefined ) material.reflectivity = json.reflectivity; if ( json.lightMap !== undefined ) material.lightMap = this.getTexture( json.lightMap ); if ( json.lightMapIntensity !== undefined ) material.lightMapIntensity = json.lightMapIntensity; if ( json.aoMap !== undefined ) material.aoMap = this.getTexture( json.aoMap ); if ( json.aoMapIntensity !== undefined ) material.aoMapIntensity = json.aoMapIntensity; // MultiMaterial if ( json.materials !== undefined ) { for ( var i = 0, l = json.materials.length; i < l; i ++ ) { material.materials.push( this.parse( json.materials[ i ] ) ); } } return material; } } ); // File:src/loaders/ObjectLoader.js /** * @author mrdoob / http://mrdoob.com/ */ THREE.ObjectLoader = function ( manager ) { this.manager = ( manager !== undefined ) ? manager : THREE.DefaultLoadingManager; this.texturePath = ''; }; Object.assign( THREE.ObjectLoader.prototype, { load: function ( url, onLoad, onProgress, onError ) { if ( this.texturePath === '' ) { this.texturePath = url.substring( 0, url.lastIndexOf( '/' ) + 1 ); } var scope = this; var loader = new THREE.XHRLoader( scope.manager ); loader.load( url, function ( text ) { scope.parse( JSON.parse( text ), onLoad ); }, onProgress, onError ); }, setTexturePath: function ( value ) { this.texturePath = value; }, setCrossOrigin: function ( value ) { this.crossOrigin = value; }, parse: function ( json, onLoad ) { var geometries = this.parseGeometries( json.geometries ); var images = this.parseImages( json.images, function () { if ( onLoad !== undefined ) onLoad( object ); } ); var textures = this.parseTextures( json.textures, images ); var materials = this.parseMaterials( json.materials, textures ); var object = this.parseObject( json.object, geometries, materials ); if ( json.animations ) { object.animations = this.parseAnimations( json.animations ); } if ( json.images === undefined || json.images.length === 0 ) { if ( onLoad !== undefined ) onLoad( object ); } return object; }, parseGeometries: function ( json ) { var geometries = {}; if ( json !== undefined ) { var geometryLoader = new THREE.JSONLoader(); var bufferGeometryLoader = new THREE.BufferGeometryLoader(); for ( var i = 0, l = json.length; i < l; i ++ ) { var geometry; var data = json[ i ]; switch ( data.type ) { case 'PlaneGeometry': case 'PlaneBufferGeometry': geometry = new THREE[ data.type ]( data.width, data.height, data.widthSegments, data.heightSegments ); break; case 'BoxGeometry': case 'BoxBufferGeometry': case 'CubeGeometry': // backwards compatible geometry = new THREE[ data.type ]( data.width, data.height, data.depth, data.widthSegments, data.heightSegments, data.depthSegments ); break; case 'CircleGeometry': case 'CircleBufferGeometry': geometry = new THREE[ data.type ]( data.radius, data.segments, data.thetaStart, data.thetaLength ); break; case 'CylinderGeometry': case 'CylinderBufferGeometry': geometry = new THREE[ data.type ]( data.radiusTop, data.radiusBottom, data.height, data.radialSegments, data.heightSegments, data.openEnded, data.thetaStart, data.thetaLength ); break; case 'ConeGeometry': case 'ConeBufferGeometry': geometry = new THREE [ data.type ]( data.radius, data.height, data.radialSegments, data.heightSegments, data.openEnded, data.thetaStart, data.thetaLength ); break; case 'SphereGeometry': case 'SphereBufferGeometry': geometry = new THREE[ data.type ]( data.radius, data.widthSegments, data.heightSegments, data.phiStart, data.phiLength, data.thetaStart, data.thetaLength ); break; case 'DodecahedronGeometry': case 'IcosahedronGeometry': case 'OctahedronGeometry': case 'TetrahedronGeometry': geometry = new THREE[ data.type ]( data.radius, data.detail ); break; case 'RingGeometry': case 'RingBufferGeometry': geometry = new THREE[ data.type ]( data.innerRadius, data.outerRadius, data.thetaSegments, data.phiSegments, data.thetaStart, data.thetaLength ); break; case 'TorusGeometry': case 'TorusBufferGeometry': geometry = new THREE[ data.type ]( data.radius, data.tube, data.radialSegments, data.tubularSegments, data.arc ); break; case 'TorusKnotGeometry': case 'TorusKnotBufferGeometry': geometry = new THREE[ data.type ]( data.radius, data.tube, data.tubularSegments, data.radialSegments, data.p, data.q ); break; case 'LatheGeometry': case 'LatheBufferGeometry': geometry = new THREE[ data.type ]( data.points, data.segments, data.phiStart, data.phiLength ); break; case 'BufferGeometry': geometry = bufferGeometryLoader.parse( data ); break; case 'Geometry': geometry = geometryLoader.parse( data.data, this.texturePath ).geometry; break; default: console.warn( 'THREE.ObjectLoader: Unsupported geometry type "' + data.type + '"' ); continue; } geometry.uuid = data.uuid; if ( data.name !== undefined ) geometry.name = data.name; geometries[ data.uuid ] = geometry; } } return geometries; }, parseMaterials: function ( json, textures ) { var materials = {}; if ( json !== undefined ) { var loader = new THREE.MaterialLoader(); loader.setTextures( textures ); for ( var i = 0, l = json.length; i < l; i ++ ) { var material = loader.parse( json[ i ] ); materials[ material.uuid ] = material; } } return materials; }, parseAnimations: function ( json ) { var animations = []; for ( var i = 0; i < json.length; i ++ ) { var clip = THREE.AnimationClip.parse( json[ i ] ); animations.push( clip ); } return animations; }, parseImages: function ( json, onLoad ) { var scope = this; var images = {}; function loadImage( url ) { scope.manager.itemStart( url ); return loader.load( url, function () { scope.manager.itemEnd( url ); } ); } if ( json !== undefined && json.length > 0 ) { var manager = new THREE.LoadingManager( onLoad ); var loader = new THREE.ImageLoader( manager ); loader.setCrossOrigin( this.crossOrigin ); for ( var i = 0, l = json.length; i < l; i ++ ) { var image = json[ i ]; var path = /^(\/\/)|([a-z]+:(\/\/)?)/i.test( image.url ) ? image.url : scope.texturePath + image.url; images[ image.uuid ] = loadImage( path ); } } return images; }, parseTextures: function ( json, images ) { function parseConstant( value ) { if ( typeof( value ) === 'number' ) return value; console.warn( 'THREE.ObjectLoader.parseTexture: Constant should be in numeric form.', value ); return THREE[ value ]; } var textures = {}; if ( json !== undefined ) { for ( var i = 0, l = json.length; i < l; i ++ ) { var data = json[ i ]; if ( data.image === undefined ) { console.warn( 'THREE.ObjectLoader: No "image" specified for', data.uuid ); } if ( images[ data.image ] === undefined ) { console.warn( 'THREE.ObjectLoader: Undefined image', data.image ); } var texture = new THREE.Texture( images[ data.image ] ); texture.needsUpdate = true; texture.uuid = data.uuid; if ( data.name !== undefined ) texture.name = data.name; if ( data.mapping !== undefined ) texture.mapping = parseConstant( data.mapping ); if ( data.offset !== undefined ) texture.offset = new THREE.Vector2( data.offset[ 0 ], data.offset[ 1 ] ); if ( data.repeat !== undefined ) texture.repeat = new THREE.Vector2( data.repeat[ 0 ], data.repeat[ 1 ] ); if ( data.minFilter !== undefined ) texture.minFilter = parseConstant( data.minFilter ); if ( data.magFilter !== undefined ) texture.magFilter = parseConstant( data.magFilter ); if ( data.anisotropy !== undefined ) texture.anisotropy = data.anisotropy; if ( Array.isArray( data.wrap ) ) { texture.wrapS = parseConstant( data.wrap[ 0 ] ); texture.wrapT = parseConstant( data.wrap[ 1 ] ); } textures[ data.uuid ] = texture; } } return textures; }, parseObject: function () { var matrix = new THREE.Matrix4(); return function parseObject( data, geometries, materials ) { var object; function getGeometry( name ) { if ( geometries[ name ] === undefined ) { console.warn( 'THREE.ObjectLoader: Undefined geometry', name ); } return geometries[ name ]; } function getMaterial( name ) { if ( name === undefined ) return undefined; if ( materials[ name ] === undefined ) { console.warn( 'THREE.ObjectLoader: Undefined material', name ); } return materials[ name ]; } switch ( data.type ) { case 'Scene': object = new THREE.Scene(); break; case 'PerspectiveCamera': object = new THREE.PerspectiveCamera( data.fov, data.aspect, data.near, data.far ); if ( data.focus !== undefined ) object.focus = data.focus; if ( data.zoom !== undefined ) object.zoom = data.zoom; if ( data.filmGauge !== undefined ) object.filmGauge = data.filmGauge; if ( data.filmOffset !== undefined ) object.filmOffset = data.filmOffset; if ( data.view !== undefined ) object.view = Object.assign( {}, data.view ); break; case 'OrthographicCamera': object = new THREE.OrthographicCamera( data.left, data.right, data.top, data.bottom, data.near, data.far ); break; case 'AmbientLight': object = new THREE.AmbientLight( data.color, data.intensity ); break; case 'DirectionalLight': object = new THREE.DirectionalLight( data.color, data.intensity ); break; case 'PointLight': object = new THREE.PointLight( data.color, data.intensity, data.distance, data.decay ); break; case 'SpotLight': object = new THREE.SpotLight( data.color, data.intensity, data.distance, data.angle, data.penumbra, data.decay ); break; case 'HemisphereLight': object = new THREE.HemisphereLight( data.color, data.groundColor, data.intensity ); break; case 'Mesh': var geometry = getGeometry( data.geometry ); var material = getMaterial( data.material ); if ( geometry.bones && geometry.bones.length > 0 ) { object = new THREE.SkinnedMesh( geometry, material ); } else { object = new THREE.Mesh( geometry, material ); } break; case 'LOD': object = new THREE.LOD(); break; case 'Line': object = new THREE.Line( getGeometry( data.geometry ), getMaterial( data.material ), data.mode ); break; case 'PointCloud': case 'Points': object = new THREE.Points( getGeometry( data.geometry ), getMaterial( data.material ) ); break; case 'Sprite': object = new THREE.Sprite( getMaterial( data.material ) ); break; case 'Group': object = new THREE.Group(); break; default: object = new THREE.Object3D(); } object.uuid = data.uuid; if ( data.name !== undefined ) object.name = data.name; if ( data.matrix !== undefined ) { matrix.fromArray( data.matrix ); matrix.decompose( object.position, object.quaternion, object.scale ); } else { if ( data.position !== undefined ) object.position.fromArray( data.position ); if ( data.rotation !== undefined ) object.rotation.fromArray( data.rotation ); if ( data.scale !== undefined ) object.scale.fromArray( data.scale ); } if ( data.castShadow !== undefined ) object.castShadow = data.castShadow; if ( data.receiveShadow !== undefined ) object.receiveShadow = data.receiveShadow; if ( data.visible !== undefined ) object.visible = data.visible; if ( data.userData !== undefined ) object.userData = data.userData; if ( data.children !== undefined ) { for ( var child in data.children ) { object.add( this.parseObject( data.children[ child ], geometries, materials ) ); } } if ( data.type === 'LOD' ) { var levels = data.levels; for ( var l = 0; l < levels.length; l ++ ) { var level = levels[ l ]; var child = object.getObjectByProperty( 'uuid', level.object ); if ( child !== undefined ) { object.addLevel( child, level.distance ); } } } return object; }; }() } ); // File:src/loaders/TextureLoader.js /** * @author mrdoob / http://mrdoob.com/ */ THREE.TextureLoader = function ( manager ) { this.manager = ( manager !== undefined ) ? manager : THREE.DefaultLoadingManager; }; Object.assign( THREE.TextureLoader.prototype, { load: function ( url, onLoad, onProgress, onError ) { var texture = new THREE.Texture(); var loader = new THREE.ImageLoader( this.manager ); loader.setCrossOrigin( this.crossOrigin ); loader.setPath( this.path ); loader.load( url, function ( image ) { texture.image = image; texture.needsUpdate = true; if ( onLoad !== undefined ) { onLoad( texture ); } }, onProgress, onError ); return texture; }, setCrossOrigin: function ( value ) { this.crossOrigin = value; return this; }, setPath: function ( value ) { this.path = value; return this; } } ); // File:src/loaders/CubeTextureLoader.js /** * @author mrdoob / http://mrdoob.com/ */ THREE.CubeTextureLoader = function ( manager ) { this.manager = ( manager !== undefined ) ? manager : THREE.DefaultLoadingManager; }; Object.assign( THREE.CubeTextureLoader.prototype, { load: function ( urls, onLoad, onProgress, onError ) { var texture = new THREE.CubeTexture(); var loader = new THREE.ImageLoader( this.manager ); loader.setCrossOrigin( this.crossOrigin ); loader.setPath( this.path ); var loaded = 0; function loadTexture( i ) { loader.load( urls[ i ], function ( image ) { texture.images[ i ] = image; loaded ++; if ( loaded === 6 ) { texture.needsUpdate = true; if ( onLoad ) onLoad( texture ); } }, undefined, onError ); } for ( var i = 0; i < urls.length; ++ i ) { loadTexture( i ); } return texture; }, setCrossOrigin: function ( value ) { this.crossOrigin = value; return this; }, setPath: function ( value ) { this.path = value; return this; } } ); // File:src/loaders/BinaryTextureLoader.js /** * @author Nikos M. / https://github.com/foo123/ * * Abstract Base class to load generic binary textures formats (rgbe, hdr, ...) */ THREE.DataTextureLoader = THREE.BinaryTextureLoader = function ( manager ) { this.manager = ( manager !== undefined ) ? manager : THREE.DefaultLoadingManager; // override in sub classes this._parser = null; }; Object.assign( THREE.BinaryTextureLoader.prototype, { load: function ( url, onLoad, onProgress, onError ) { var scope = this; var texture = new THREE.DataTexture(); var loader = new THREE.XHRLoader( this.manager ); loader.setResponseType( 'arraybuffer' ); loader.load( url, function ( buffer ) { var texData = scope._parser( buffer ); if ( ! texData ) return; if ( undefined !== texData.image ) { texture.image = texData.image; } else if ( undefined !== texData.data ) { texture.image.width = texData.width; texture.image.height = texData.height; texture.image.data = texData.data; } texture.wrapS = undefined !== texData.wrapS ? texData.wrapS : THREE.ClampToEdgeWrapping; texture.wrapT = undefined !== texData.wrapT ? texData.wrapT : THREE.ClampToEdgeWrapping; texture.magFilter = undefined !== texData.magFilter ? texData.magFilter : THREE.LinearFilter; texture.minFilter = undefined !== texData.minFilter ? texData.minFilter : THREE.LinearMipMapLinearFilter; texture.anisotropy = undefined !== texData.anisotropy ? texData.anisotropy : 1; if ( undefined !== texData.format ) { texture.format = texData.format; } if ( undefined !== texData.type ) { texture.type = texData.type; } if ( undefined !== texData.mipmaps ) { texture.mipmaps = texData.mipmaps; } if ( 1 === texData.mipmapCount ) { texture.minFilter = THREE.LinearFilter; } texture.needsUpdate = true; if ( onLoad ) onLoad( texture, texData ); }, onProgress, onError ); return texture; } } ); // File:src/loaders/CompressedTextureLoader.js /** * @author mrdoob / http://mrdoob.com/ * * Abstract Base class to block based textures loader (dds, pvr, ...) */ THREE.CompressedTextureLoader = function ( manager ) { this.manager = ( manager !== undefined ) ? manager : THREE.DefaultLoadingManager; // override in sub classes this._parser = null; }; Object.assign( THREE.CompressedTextureLoader.prototype, { load: function ( url, onLoad, onProgress, onError ) { var scope = this; var images = []; var texture = new THREE.CompressedTexture(); texture.image = images; var loader = new THREE.XHRLoader( this.manager ); loader.setPath( this.path ); loader.setResponseType( 'arraybuffer' ); function loadTexture( i ) { loader.load( url[ i ], function ( buffer ) { var texDatas = scope._parser( buffer, true ); images[ i ] = { width: texDatas.width, height: texDatas.height, format: texDatas.format, mipmaps: texDatas.mipmaps }; loaded += 1; if ( loaded === 6 ) { if ( texDatas.mipmapCount === 1 ) texture.minFilter = THREE.LinearFilter; texture.format = texDatas.format; texture.needsUpdate = true; if ( onLoad ) onLoad( texture ); } }, onProgress, onError ); } if ( Array.isArray( url ) ) { var loaded = 0; for ( var i = 0, il = url.length; i < il; ++ i ) { loadTexture( i ); } } else { // compressed cubemap texture stored in a single DDS file loader.load( url, function ( buffer ) { var texDatas = scope._parser( buffer, true ); if ( texDatas.isCubemap ) { var faces = texDatas.mipmaps.length / texDatas.mipmapCount; for ( var f = 0; f < faces; f ++ ) { images[ f ] = { mipmaps : [] }; for ( var i = 0; i < texDatas.mipmapCount; i ++ ) { images[ f ].mipmaps.push( texDatas.mipmaps[ f * texDatas.mipmapCount + i ] ); images[ f ].format = texDatas.format; images[ f ].width = texDatas.width; images[ f ].height = texDatas.height; } } } else { texture.image.width = texDatas.width; texture.image.height = texDatas.height; texture.mipmaps = texDatas.mipmaps; } if ( texDatas.mipmapCount === 1 ) { texture.minFilter = THREE.LinearFilter; } texture.format = texDatas.format; texture.needsUpdate = true; if ( onLoad ) onLoad( texture ); }, onProgress, onError ); } return texture; }, setPath: function ( value ) { this.path = value; return this; } } ); // File:src/materials/Material.js /** * @author mrdoob / http://mrdoob.com/ * @author alteredq / http://alteredqualia.com/ */ THREE.Material = function () { Object.defineProperty( this, 'id', { value: THREE.MaterialIdCount ++ } ); this.uuid = THREE.Math.generateUUID(); this.name = ''; this.type = 'Material'; this.fog = true; this.lights = true; this.blending = THREE.NormalBlending; this.side = THREE.FrontSide; this.shading = THREE.SmoothShading; // THREE.FlatShading, THREE.SmoothShading this.vertexColors = THREE.NoColors; // THREE.NoColors, THREE.VertexColors, THREE.FaceColors this.opacity = 1; this.transparent = false; this.blendSrc = THREE.SrcAlphaFactor; this.blendDst = THREE.OneMinusSrcAlphaFactor; this.blendEquation = THREE.AddEquation; this.blendSrcAlpha = null; this.blendDstAlpha = null; this.blendEquationAlpha = null; this.depthFunc = THREE.LessEqualDepth; this.depthTest = true; this.depthWrite = true; this.clippingPlanes = null; this.clipShadows = false; this.colorWrite = true; this.precision = null; // override the renderer's default precision for this material this.polygonOffset = false; this.polygonOffsetFactor = 0; this.polygonOffsetUnits = 0; this.alphaTest = 0; this.premultipliedAlpha = false; this.overdraw = 0; // Overdrawn pixels (typically between 0 and 1) for fixing antialiasing gaps in CanvasRenderer this.visible = true; this._needsUpdate = true; }; THREE.Material.prototype = { constructor: THREE.Material, get needsUpdate() { return this._needsUpdate; }, set needsUpdate( value ) { if ( value === true ) this.update(); this._needsUpdate = value; }, setValues: function ( values ) { if ( values === undefined ) return; for ( var key in values ) { var newValue = values[ key ]; if ( newValue === undefined ) { console.warn( "THREE.Material: '" + key + "' parameter is undefined." ); continue; } var currentValue = this[ key ]; if ( currentValue === undefined ) { console.warn( "THREE." + this.type + ": '" + key + "' is not a property of this material." ); continue; } if ( currentValue instanceof THREE.Color ) { currentValue.set( newValue ); } else if ( currentValue instanceof THREE.Vector3 && newValue instanceof THREE.Vector3 ) { currentValue.copy( newValue ); } else if ( key === 'overdraw' ) { // ensure overdraw is backwards-compatible with legacy boolean type this[ key ] = Number( newValue ); } else { this[ key ] = newValue; } } }, toJSON: function ( meta ) { var isRoot = meta === undefined; if ( isRoot ) { meta = { textures: {}, images: {} }; } var data = { metadata: { version: 4.4, type: 'Material', generator: 'Material.toJSON' } }; // standard Material serialization data.uuid = this.uuid; data.type = this.type; if ( this.name !== '' ) data.name = this.name; if ( this.color instanceof THREE.Color ) data.color = this.color.getHex(); if ( this.roughness !== undefined ) data.roughness = this.roughness; if ( this.metalness !== undefined ) data.metalness = this.metalness; if ( this.emissive instanceof THREE.Color ) data.emissive = this.emissive.getHex(); if ( this.specular instanceof THREE.Color ) data.specular = this.specular.getHex(); if ( this.shininess !== undefined ) data.shininess = this.shininess; if ( this.map instanceof THREE.Texture ) data.map = this.map.toJSON( meta ).uuid; if ( this.alphaMap instanceof THREE.Texture ) data.alphaMap = this.alphaMap.toJSON( meta ).uuid; if ( this.lightMap instanceof THREE.Texture ) data.lightMap = this.lightMap.toJSON( meta ).uuid; if ( this.bumpMap instanceof THREE.Texture ) { data.bumpMap = this.bumpMap.toJSON( meta ).uuid; data.bumpScale = this.bumpScale; } if ( this.normalMap instanceof THREE.Texture ) { data.normalMap = this.normalMap.toJSON( meta ).uuid; data.normalScale = this.normalScale.toArray(); } if ( this.displacementMap instanceof THREE.Texture ) { data.displacementMap = this.displacementMap.toJSON( meta ).uuid; data.displacementScale = this.displacementScale; data.displacementBias = this.displacementBias; } if ( this.roughnessMap instanceof THREE.Texture ) data.roughnessMap = this.roughnessMap.toJSON( meta ).uuid; if ( this.metalnessMap instanceof THREE.Texture ) data.metalnessMap = this.metalnessMap.toJSON( meta ).uuid; if ( this.emissiveMap instanceof THREE.Texture ) data.emissiveMap = this.emissiveMap.toJSON( meta ).uuid; if ( this.specularMap instanceof THREE.Texture ) data.specularMap = this.specularMap.toJSON( meta ).uuid; if ( this.envMap instanceof THREE.Texture ) { data.envMap = this.envMap.toJSON( meta ).uuid; data.reflectivity = this.reflectivity; // Scale behind envMap } if ( this.size !== undefined ) data.size = this.size; if ( this.sizeAttenuation !== undefined ) data.sizeAttenuation = this.sizeAttenuation; if ( this.blending !== THREE.NormalBlending ) data.blending = this.blending; if ( this.shading !== THREE.SmoothShading ) data.shading = this.shading; if ( this.side !== THREE.FrontSide ) data.side = this.side; if ( this.vertexColors !== THREE.NoColors ) data.vertexColors = this.vertexColors; if ( this.opacity < 1 ) data.opacity = this.opacity; if ( this.transparent === true ) data.transparent = this.transparent; if ( this.alphaTest > 0 ) data.alphaTest = this.alphaTest; if ( this.premultipliedAlpha === true ) data.premultipliedAlpha = this.premultipliedAlpha; if ( this.wireframe === true ) data.wireframe = this.wireframe; if ( this.wireframeLinewidth > 1 ) data.wireframeLinewidth = this.wireframeLinewidth; // TODO: Copied from Object3D.toJSON function extractFromCache ( cache ) { var values = []; for ( var key in cache ) { var data = cache[ key ]; delete data.metadata; values.push( data ); } return values; } if ( isRoot ) { var textures = extractFromCache( meta.textures ); var images = extractFromCache( meta.images ); if ( textures.length > 0 ) data.textures = textures; if ( images.length > 0 ) data.images = images; } return data; }, clone: function () { return new this.constructor().copy( this ); }, copy: function ( source ) { this.name = source.name; this.fog = source.fog; this.lights = source.lights; this.blending = source.blending; this.side = source.side; this.shading = source.shading; this.vertexColors = source.vertexColors; this.opacity = source.opacity; this.transparent = source.transparent; this.blendSrc = source.blendSrc; this.blendDst = source.blendDst; this.blendEquation = source.blendEquation; this.blendSrcAlpha = source.blendSrcAlpha; this.blendDstAlpha = source.blendDstAlpha; this.blendEquationAlpha = source.blendEquationAlpha; this.depthFunc = source.depthFunc; this.depthTest = source.depthTest; this.depthWrite = source.depthWrite; this.colorWrite = source.colorWrite; this.precision = source.precision; this.polygonOffset = source.polygonOffset; this.polygonOffsetFactor = source.polygonOffsetFactor; this.polygonOffsetUnits = source.polygonOffsetUnits; this.alphaTest = source.alphaTest; this.premultipliedAlpha = source.premultipliedAlpha; this.overdraw = source.overdraw; this.visible = source.visible; this.clipShadows = source.clipShadows; var srcPlanes = source.clippingPlanes, dstPlanes = null; if ( srcPlanes !== null ) { var n = srcPlanes.length; dstPlanes = new Array( n ); for ( var i = 0; i !== n; ++ i ) dstPlanes[ i ] = srcPlanes[ i ].clone(); } this.clippingPlanes = dstPlanes; return this; }, update: function () { this.dispatchEvent( { type: 'update' } ); }, dispose: function () { this.dispatchEvent( { type: 'dispose' } ); } }; Object.assign( THREE.Material.prototype, THREE.EventDispatcher.prototype ); THREE.MaterialIdCount = 0; // File:src/materials/LineBasicMaterial.js /** * @author mrdoob / http://mrdoob.com/ * @author alteredq / http://alteredqualia.com/ * * parameters = { * color: , * opacity: , * * linewidth: , * linecap: "round", * linejoin: "round" * } */ THREE.LineBasicMaterial = function ( parameters ) { THREE.Material.call( this ); this.type = 'LineBasicMaterial'; this.color = new THREE.Color( 0xffffff ); this.linewidth = 1; this.linecap = 'round'; this.linejoin = 'round'; this.lights = false; this.setValues( parameters ); }; THREE.LineBasicMaterial.prototype = Object.create( THREE.Material.prototype ); THREE.LineBasicMaterial.prototype.constructor = THREE.LineBasicMaterial; THREE.LineBasicMaterial.prototype.copy = function ( source ) { THREE.Material.prototype.copy.call( this, source ); this.color.copy( source.color ); this.linewidth = source.linewidth; this.linecap = source.linecap; this.linejoin = source.linejoin; return this; }; // File:src/materials/LineDashedMaterial.js /** * @author alteredq / http://alteredqualia.com/ * * parameters = { * color: , * opacity: , * * linewidth: , * * scale: , * dashSize: , * gapSize: * } */ THREE.LineDashedMaterial = function ( parameters ) { THREE.Material.call( this ); this.type = 'LineDashedMaterial'; this.color = new THREE.Color( 0xffffff ); this.linewidth = 1; this.scale = 1; this.dashSize = 3; this.gapSize = 1; this.lights = false; this.setValues( parameters ); }; THREE.LineDashedMaterial.prototype = Object.create( THREE.Material.prototype ); THREE.LineDashedMaterial.prototype.constructor = THREE.LineDashedMaterial; THREE.LineDashedMaterial.prototype.copy = function ( source ) { THREE.Material.prototype.copy.call( this, source ); this.color.copy( source.color ); this.linewidth = source.linewidth; this.scale = source.scale; this.dashSize = source.dashSize; this.gapSize = source.gapSize; return this; }; // File:src/materials/MeshBasicMaterial.js /** * @author mrdoob / http://mrdoob.com/ * @author alteredq / http://alteredqualia.com/ * * parameters = { * color: , * opacity: , * map: new THREE.Texture( ), * * aoMap: new THREE.Texture( ), * aoMapIntensity: * * specularMap: new THREE.Texture( ), * * alphaMap: new THREE.Texture( ), * * envMap: new THREE.TextureCube( [posx, negx, posy, negy, posz, negz] ), * combine: THREE.Multiply, * reflectivity: , * refractionRatio: , * * shading: THREE.SmoothShading, * depthTest: , * depthWrite: , * * wireframe: , * wireframeLinewidth: , * * skinning: , * morphTargets: * } */ THREE.MeshBasicMaterial = function ( parameters ) { THREE.Material.call( this ); this.type = 'MeshBasicMaterial'; this.color = new THREE.Color( 0xffffff ); // emissive this.map = null; this.aoMap = null; this.aoMapIntensity = 1.0; this.specularMap = null; this.alphaMap = null; this.envMap = null; this.combine = THREE.MultiplyOperation; this.reflectivity = 1; this.refractionRatio = 0.98; this.wireframe = false; this.wireframeLinewidth = 1; this.wireframeLinecap = 'round'; this.wireframeLinejoin = 'round'; this.skinning = false; this.morphTargets = false; this.lights = false; this.setValues( parameters ); }; THREE.MeshBasicMaterial.prototype = Object.create( THREE.Material.prototype ); THREE.MeshBasicMaterial.prototype.constructor = THREE.MeshBasicMaterial; THREE.MeshBasicMaterial.prototype.copy = function ( source ) { THREE.Material.prototype.copy.call( this, source ); this.color.copy( source.color ); this.map = source.map; this.aoMap = source.aoMap; this.aoMapIntensity = source.aoMapIntensity; this.specularMap = source.specularMap; this.alphaMap = source.alphaMap; this.envMap = source.envMap; this.combine = source.combine; this.reflectivity = source.reflectivity; this.refractionRatio = source.refractionRatio; this.wireframe = source.wireframe; this.wireframeLinewidth = source.wireframeLinewidth; this.wireframeLinecap = source.wireframeLinecap; this.wireframeLinejoin = source.wireframeLinejoin; this.skinning = source.skinning; this.morphTargets = source.morphTargets; return this; }; // File:src/materials/MeshDepthMaterial.js /** * @author mrdoob / http://mrdoob.com/ * @author alteredq / http://alteredqualia.com/ * @author bhouston / https://clara.io * @author WestLangley / http://github.com/WestLangley * * parameters = { * * opacity: , * * map: new THREE.Texture( ), * * alphaMap: new THREE.Texture( ), * * displacementMap: new THREE.Texture( ), * displacementScale: , * displacementBias: , * * wireframe: , * wireframeLinewidth: * } */ THREE.MeshDepthMaterial = function ( parameters ) { THREE.Material.call( this ); this.type = 'MeshDepthMaterial'; this.depthPacking = THREE.BasicDepthPacking; this.skinning = false; this.morphTargets = false; this.map = null; this.alphaMap = null; this.displacementMap = null; this.displacementScale = 1; this.displacementBias = 0; this.wireframe = false; this.wireframeLinewidth = 1; this.fog = false; this.lights = false; this.setValues( parameters ); }; THREE.MeshDepthMaterial.prototype = Object.create( THREE.Material.prototype ); THREE.MeshDepthMaterial.prototype.constructor = THREE.MeshDepthMaterial; THREE.MeshDepthMaterial.prototype.copy = function ( source ) { THREE.Material.prototype.copy.call( this, source ); this.depthPacking = source.depthPacking; this.skinning = source.skinning; this.morphTargets = source.morphTargets; this.map = source.map; this.alphaMap = source.alphaMap; this.displacementMap = source.displacementMap; this.displacementScale = source.displacementScale; this.displacementBias = source.displacementBias; this.wireframe = source.wireframe; this.wireframeLinewidth = source.wireframeLinewidth; return this; }; // File:src/materials/MeshLambertMaterial.js /** * @author mrdoob / http://mrdoob.com/ * @author alteredq / http://alteredqualia.com/ * * parameters = { * color: , * opacity: , * * map: new THREE.Texture( ), * * lightMap: new THREE.Texture( ), * lightMapIntensity: * * aoMap: new THREE.Texture( ), * aoMapIntensity: * * emissive: , * emissiveIntensity: * emissiveMap: new THREE.Texture( ), * * specularMap: new THREE.Texture( ), * * alphaMap: new THREE.Texture( ), * * envMap: new THREE.TextureCube( [posx, negx, posy, negy, posz, negz] ), * combine: THREE.Multiply, * reflectivity: , * refractionRatio: , * * wireframe: , * wireframeLinewidth: , * * skinning: , * morphTargets: , * morphNormals: * } */ THREE.MeshLambertMaterial = function ( parameters ) { THREE.Material.call( this ); this.type = 'MeshLambertMaterial'; this.color = new THREE.Color( 0xffffff ); // diffuse this.map = null; this.lightMap = null; this.lightMapIntensity = 1.0; this.aoMap = null; this.aoMapIntensity = 1.0; this.emissive = new THREE.Color( 0x000000 ); this.emissiveIntensity = 1.0; this.emissiveMap = null; this.specularMap = null; this.alphaMap = null; this.envMap = null; this.combine = THREE.MultiplyOperation; this.reflectivity = 1; this.refractionRatio = 0.98; this.wireframe = false; this.wireframeLinewidth = 1; this.wireframeLinecap = 'round'; this.wireframeLinejoin = 'round'; this.skinning = false; this.morphTargets = false; this.morphNormals = false; this.setValues( parameters ); }; THREE.MeshLambertMaterial.prototype = Object.create( THREE.Material.prototype ); THREE.MeshLambertMaterial.prototype.constructor = THREE.MeshLambertMaterial; THREE.MeshLambertMaterial.prototype.copy = function ( source ) { THREE.Material.prototype.copy.call( this, source ); this.color.copy( source.color ); this.map = source.map; this.lightMap = source.lightMap; this.lightMapIntensity = source.lightMapIntensity; this.aoMap = source.aoMap; this.aoMapIntensity = source.aoMapIntensity; this.emissive.copy( source.emissive ); this.emissiveMap = source.emissiveMap; this.emissiveIntensity = source.emissiveIntensity; this.specularMap = source.specularMap; this.alphaMap = source.alphaMap; this.envMap = source.envMap; this.combine = source.combine; this.reflectivity = source.reflectivity; this.refractionRatio = source.refractionRatio; this.wireframe = source.wireframe; this.wireframeLinewidth = source.wireframeLinewidth; this.wireframeLinecap = source.wireframeLinecap; this.wireframeLinejoin = source.wireframeLinejoin; this.skinning = source.skinning; this.morphTargets = source.morphTargets; this.morphNormals = source.morphNormals; return this; }; // File:src/materials/MeshNormalMaterial.js /** * @author mrdoob / http://mrdoob.com/ * * parameters = { * opacity: , * * wireframe: , * wireframeLinewidth: * } */ THREE.MeshNormalMaterial = function ( parameters ) { THREE.Material.call( this, parameters ); this.type = 'MeshNormalMaterial'; this.wireframe = false; this.wireframeLinewidth = 1; this.fog = false; this.lights = false; this.morphTargets = false; this.setValues( parameters ); }; THREE.MeshNormalMaterial.prototype = Object.create( THREE.Material.prototype ); THREE.MeshNormalMaterial.prototype.constructor = THREE.MeshNormalMaterial; THREE.MeshNormalMaterial.prototype.copy = function ( source ) { THREE.Material.prototype.copy.call( this, source ); this.wireframe = source.wireframe; this.wireframeLinewidth = source.wireframeLinewidth; return this; }; // File:src/materials/MeshPhongMaterial.js /** * @author mrdoob / http://mrdoob.com/ * @author alteredq / http://alteredqualia.com/ * * parameters = { * color: , * specular: , * shininess: , * opacity: , * * map: new THREE.Texture( ), * * lightMap: new THREE.Texture( ), * lightMapIntensity: * * aoMap: new THREE.Texture( ), * aoMapIntensity: * * emissive: , * emissiveIntensity: * emissiveMap: new THREE.Texture( ), * * bumpMap: new THREE.Texture( ), * bumpScale: , * * normalMap: new THREE.Texture( ), * normalScale: , * * displacementMap: new THREE.Texture( ), * displacementScale: , * displacementBias: , * * specularMap: new THREE.Texture( ), * * alphaMap: new THREE.Texture( ), * * envMap: new THREE.TextureCube( [posx, negx, posy, negy, posz, negz] ), * combine: THREE.Multiply, * reflectivity: , * refractionRatio: , * * wireframe: , * wireframeLinewidth: , * * skinning: , * morphTargets: , * morphNormals: * } */ THREE.MeshPhongMaterial = function ( parameters ) { THREE.Material.call( this ); this.type = 'MeshPhongMaterial'; this.color = new THREE.Color( 0xffffff ); // diffuse this.specular = new THREE.Color( 0x111111 ); this.shininess = 30; this.map = null; this.lightMap = null; this.lightMapIntensity = 1.0; this.aoMap = null; this.aoMapIntensity = 1.0; this.emissive = new THREE.Color( 0x000000 ); this.emissiveIntensity = 1.0; this.emissiveMap = null; this.bumpMap = null; this.bumpScale = 1; this.normalMap = null; this.normalScale = new THREE.Vector2( 1, 1 ); this.displacementMap = null; this.displacementScale = 1; this.displacementBias = 0; this.specularMap = null; this.alphaMap = null; this.envMap = null; this.combine = THREE.MultiplyOperation; this.reflectivity = 1; this.refractionRatio = 0.98; this.wireframe = false; this.wireframeLinewidth = 1; this.wireframeLinecap = 'round'; this.wireframeLinejoin = 'round'; this.skinning = false; this.morphTargets = false; this.morphNormals = false; this.setValues( parameters ); }; THREE.MeshPhongMaterial.prototype = Object.create( THREE.Material.prototype ); THREE.MeshPhongMaterial.prototype.constructor = THREE.MeshPhongMaterial; THREE.MeshPhongMaterial.prototype.copy = function ( source ) { THREE.Material.prototype.copy.call( this, source ); this.color.copy( source.color ); this.specular.copy( source.specular ); this.shininess = source.shininess; this.map = source.map; this.lightMap = source.lightMap; this.lightMapIntensity = source.lightMapIntensity; this.aoMap = source.aoMap; this.aoMapIntensity = source.aoMapIntensity; this.emissive.copy( source.emissive ); this.emissiveMap = source.emissiveMap; this.emissiveIntensity = source.emissiveIntensity; this.bumpMap = source.bumpMap; this.bumpScale = source.bumpScale; this.normalMap = source.normalMap; this.normalScale.copy( source.normalScale ); this.displacementMap = source.displacementMap; this.displacementScale = source.displacementScale; this.displacementBias = source.displacementBias; this.specularMap = source.specularMap; this.alphaMap = source.alphaMap; this.envMap = source.envMap; this.combine = source.combine; this.reflectivity = source.reflectivity; this.refractionRatio = source.refractionRatio; this.wireframe = source.wireframe; this.wireframeLinewidth = source.wireframeLinewidth; this.wireframeLinecap = source.wireframeLinecap; this.wireframeLinejoin = source.wireframeLinejoin; this.skinning = source.skinning; this.morphTargets = source.morphTargets; this.morphNormals = source.morphNormals; return this; }; // File:src/materials/MeshStandardMaterial.js /** * @author WestLangley / http://github.com/WestLangley * * parameters = { * color: , * roughness: , * metalness: , * opacity: , * * map: new THREE.Texture( ), * * lightMap: new THREE.Texture( ), * lightMapIntensity: * * aoMap: new THREE.Texture( ), * aoMapIntensity: * * emissive: , * emissiveIntensity: * emissiveMap: new THREE.Texture( ), * * bumpMap: new THREE.Texture( ), * bumpScale: , * * normalMap: new THREE.Texture( ), * normalScale: , * * displacementMap: new THREE.Texture( ), * displacementScale: , * displacementBias: , * * roughnessMap: new THREE.Texture( ), * * metalnessMap: new THREE.Texture( ), * * alphaMap: new THREE.Texture( ), * * envMap: new THREE.CubeTexture( [posx, negx, posy, negy, posz, negz] ), * envMapIntensity: * * refractionRatio: , * * wireframe: , * wireframeLinewidth: , * * skinning: , * morphTargets: , * morphNormals: * } */ THREE.MeshStandardMaterial = function ( parameters ) { THREE.Material.call( this ); this.defines = { 'STANDARD': '' }; this.type = 'MeshStandardMaterial'; this.color = new THREE.Color( 0xffffff ); // diffuse this.roughness = 0.5; this.metalness = 0.5; this.map = null; this.lightMap = null; this.lightMapIntensity = 1.0; this.aoMap = null; this.aoMapIntensity = 1.0; this.emissive = new THREE.Color( 0x000000 ); this.emissiveIntensity = 1.0; this.emissiveMap = null; this.bumpMap = null; this.bumpScale = 1; this.normalMap = null; this.normalScale = new THREE.Vector2( 1, 1 ); this.displacementMap = null; this.displacementScale = 1; this.displacementBias = 0; this.roughnessMap = null; this.metalnessMap = null; this.alphaMap = null; this.envMap = null; this.envMapIntensity = 1.0; this.refractionRatio = 0.98; this.wireframe = false; this.wireframeLinewidth = 1; this.wireframeLinecap = 'round'; this.wireframeLinejoin = 'round'; this.skinning = false; this.morphTargets = false; this.morphNormals = false; this.setValues( parameters ); }; THREE.MeshStandardMaterial.prototype = Object.create( THREE.Material.prototype ); THREE.MeshStandardMaterial.prototype.constructor = THREE.MeshStandardMaterial; THREE.MeshStandardMaterial.prototype.copy = function ( source ) { THREE.Material.prototype.copy.call( this, source ); this.defines = { 'STANDARD': '' }; this.color.copy( source.color ); this.roughness = source.roughness; this.metalness = source.metalness; this.map = source.map; this.lightMap = source.lightMap; this.lightMapIntensity = source.lightMapIntensity; this.aoMap = source.aoMap; this.aoMapIntensity = source.aoMapIntensity; this.emissive.copy( source.emissive ); this.emissiveMap = source.emissiveMap; this.emissiveIntensity = source.emissiveIntensity; this.bumpMap = source.bumpMap; this.bumpScale = source.bumpScale; this.normalMap = source.normalMap; this.normalScale.copy( source.normalScale ); this.displacementMap = source.displacementMap; this.displacementScale = source.displacementScale; this.displacementBias = source.displacementBias; this.roughnessMap = source.roughnessMap; this.metalnessMap = source.metalnessMap; this.alphaMap = source.alphaMap; this.envMap = source.envMap; this.envMapIntensity = source.envMapIntensity; this.refractionRatio = source.refractionRatio; this.wireframe = source.wireframe; this.wireframeLinewidth = source.wireframeLinewidth; this.wireframeLinecap = source.wireframeLinecap; this.wireframeLinejoin = source.wireframeLinejoin; this.skinning = source.skinning; this.morphTargets = source.morphTargets; this.morphNormals = source.morphNormals; return this; }; // File:src/materials/MeshPhysicalMaterial.js /** * @author WestLangley / http://github.com/WestLangley * * parameters = { * reflectivity: * } */ THREE.MeshPhysicalMaterial = function ( parameters ) { THREE.MeshStandardMaterial.call( this ); this.defines = { 'PHYSICAL': '' }; this.type = 'MeshPhysicalMaterial'; this.reflectivity = 0.5; // maps to F0 = 0.04 this.clearCoat = 0.0; this.clearCoatRoughness = 0.0; this.setValues( parameters ); }; THREE.MeshPhysicalMaterial.prototype = Object.create( THREE.MeshStandardMaterial.prototype ); THREE.MeshPhysicalMaterial.prototype.constructor = THREE.MeshPhysicalMaterial; THREE.MeshPhysicalMaterial.prototype.copy = function ( source ) { THREE.MeshStandardMaterial.prototype.copy.call( this, source ); this.defines = { 'PHYSICAL': '' }; this.reflectivity = source.reflectivity; this.clearCoat = source.clearCoat; this.clearCoatRoughness = source.clearCoatRoughness; return this; }; // File:src/materials/MultiMaterial.js /** * @author mrdoob / http://mrdoob.com/ */ THREE.MultiMaterial = function ( materials ) { this.uuid = THREE.Math.generateUUID(); this.type = 'MultiMaterial'; this.materials = materials instanceof Array ? materials : []; this.visible = true; }; THREE.MultiMaterial.prototype = { constructor: THREE.MultiMaterial, toJSON: function ( meta ) { var output = { metadata: { version: 4.2, type: 'material', generator: 'MaterialExporter' }, uuid: this.uuid, type: this.type, materials: [] }; var materials = this.materials; for ( var i = 0, l = materials.length; i < l; i ++ ) { var material = materials[ i ].toJSON( meta ); delete material.metadata; output.materials.push( material ); } output.visible = this.visible; return output; }, clone: function () { var material = new this.constructor(); for ( var i = 0; i < this.materials.length; i ++ ) { material.materials.push( this.materials[ i ].clone() ); } material.visible = this.visible; return material; } }; // File:src/materials/PointsMaterial.js /** * @author mrdoob / http://mrdoob.com/ * @author alteredq / http://alteredqualia.com/ * * parameters = { * color: , * opacity: , * map: new THREE.Texture( ), * * size: , * sizeAttenuation: * } */ THREE.PointsMaterial = function ( parameters ) { THREE.Material.call( this ); this.type = 'PointsMaterial'; this.color = new THREE.Color( 0xffffff ); this.map = null; this.size = 1; this.sizeAttenuation = true; this.lights = false; this.setValues( parameters ); }; THREE.PointsMaterial.prototype = Object.create( THREE.Material.prototype ); THREE.PointsMaterial.prototype.constructor = THREE.PointsMaterial; THREE.PointsMaterial.prototype.copy = function ( source ) { THREE.Material.prototype.copy.call( this, source ); this.color.copy( source.color ); this.map = source.map; this.size = source.size; this.sizeAttenuation = source.sizeAttenuation; return this; }; // File:src/materials/ShaderMaterial.js /** * @author alteredq / http://alteredqualia.com/ * * parameters = { * defines: { "label" : "value" }, * uniforms: { "parameter1": { value: 1.0 }, "parameter2": { value2: 2 } }, * * fragmentShader: , * vertexShader: , * * wireframe: , * wireframeLinewidth: , * * lights: , * * skinning: , * morphTargets: , * morphNormals: * } */ THREE.ShaderMaterial = function ( parameters ) { THREE.Material.call( this ); this.type = 'ShaderMaterial'; this.defines = {}; this.uniforms = {}; this.vertexShader = 'void main() {\n\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n}'; this.fragmentShader = 'void main() {\n\tgl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );\n}'; this.linewidth = 1; this.wireframe = false; this.wireframeLinewidth = 1; this.fog = false; // set to use scene fog this.lights = false; // set to use scene lights this.clipping = false; // set to use user-defined clipping planes this.skinning = false; // set to use skinning attribute streams this.morphTargets = false; // set to use morph targets this.morphNormals = false; // set to use morph normals this.extensions = { derivatives: false, // set to use derivatives fragDepth: false, // set to use fragment depth values drawBuffers: false, // set to use draw buffers shaderTextureLOD: false // set to use shader texture LOD }; // When rendered geometry doesn't include these attributes but the material does, // use these default values in WebGL. This avoids errors when buffer data is missing. this.defaultAttributeValues = { 'color': [ 1, 1, 1 ], 'uv': [ 0, 0 ], 'uv2': [ 0, 0 ] }; this.index0AttributeName = undefined; if ( parameters !== undefined ) { if ( parameters.attributes !== undefined ) { console.error( 'THREE.ShaderMaterial: attributes should now be defined in THREE.BufferGeometry instead.' ); } this.setValues( parameters ); } }; THREE.ShaderMaterial.prototype = Object.create( THREE.Material.prototype ); THREE.ShaderMaterial.prototype.constructor = THREE.ShaderMaterial; THREE.ShaderMaterial.prototype.copy = function ( source ) { THREE.Material.prototype.copy.call( this, source ); this.fragmentShader = source.fragmentShader; this.vertexShader = source.vertexShader; this.uniforms = THREE.UniformsUtils.clone( source.uniforms ); this.defines = source.defines; this.wireframe = source.wireframe; this.wireframeLinewidth = source.wireframeLinewidth; this.lights = source.lights; this.clipping = source.clipping; this.skinning = source.skinning; this.morphTargets = source.morphTargets; this.morphNormals = source.morphNormals; this.extensions = source.extensions; return this; }; THREE.ShaderMaterial.prototype.toJSON = function ( meta ) { var data = THREE.Material.prototype.toJSON.call( this, meta ); data.uniforms = this.uniforms; data.vertexShader = this.vertexShader; data.fragmentShader = this.fragmentShader; return data; }; // File:src/materials/RawShaderMaterial.js /** * @author mrdoob / http://mrdoob.com/ */ THREE.RawShaderMaterial = function ( parameters ) { THREE.ShaderMaterial.call( this, parameters ); this.type = 'RawShaderMaterial'; }; THREE.RawShaderMaterial.prototype = Object.create( THREE.ShaderMaterial.prototype ); THREE.RawShaderMaterial.prototype.constructor = THREE.RawShaderMaterial; // File:src/materials/SpriteMaterial.js /** * @author alteredq / http://alteredqualia.com/ * * parameters = { * color: , * opacity: , * map: new THREE.Texture( ), * * uvOffset: new THREE.Vector2(), * uvScale: new THREE.Vector2() * } */ THREE.SpriteMaterial = function ( parameters ) { THREE.Material.call( this ); this.type = 'SpriteMaterial'; this.color = new THREE.Color( 0xffffff ); this.map = null; this.rotation = 0; this.fog = false; this.lights = false; this.setValues( parameters ); }; THREE.SpriteMaterial.prototype = Object.create( THREE.Material.prototype ); THREE.SpriteMaterial.prototype.constructor = THREE.SpriteMaterial; THREE.SpriteMaterial.prototype.copy = function ( source ) { THREE.Material.prototype.copy.call( this, source ); this.color.copy( source.color ); this.map = source.map; this.rotation = source.rotation; return this; }; // File:src/materials/ShadowMaterial.js /** * @author mrdoob / http://mrdoob.com/ */ THREE.ShadowMaterial = function () { THREE.ShaderMaterial.call( this, { uniforms: THREE.UniformsUtils.merge( [ THREE.UniformsLib[ "lights" ], { opacity: { value: 1.0 } } ] ), vertexShader: THREE.ShaderChunk[ 'shadow_vert' ], fragmentShader: THREE.ShaderChunk[ 'shadow_frag' ] } ); this.lights = true; this.transparent = true; Object.defineProperties( this, { opacity: { enumerable: true, get: function () { return this.uniforms.opacity.value; }, set: function ( value ) { this.uniforms.opacity.value = value; } } } ); }; THREE.ShadowMaterial.prototype = Object.create( THREE.ShaderMaterial.prototype ); THREE.ShadowMaterial.prototype.constructor = THREE.ShadowMaterial; // File:src/textures/Texture.js /** * @author mrdoob / http://mrdoob.com/ * @author alteredq / http://alteredqualia.com/ * @author szimek / https://github.com/szimek/ */ THREE.Texture = function ( image, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding ) { Object.defineProperty( this, 'id', { value: THREE.TextureIdCount ++ } ); this.uuid = THREE.Math.generateUUID(); this.name = ''; this.sourceFile = ''; this.image = image !== undefined ? image : THREE.Texture.DEFAULT_IMAGE; this.mipmaps = []; this.mapping = mapping !== undefined ? mapping : THREE.Texture.DEFAULT_MAPPING; this.wrapS = wrapS !== undefined ? wrapS : THREE.ClampToEdgeWrapping; this.wrapT = wrapT !== undefined ? wrapT : THREE.ClampToEdgeWrapping; this.magFilter = magFilter !== undefined ? magFilter : THREE.LinearFilter; this.minFilter = minFilter !== undefined ? minFilter : THREE.LinearMipMapLinearFilter; this.anisotropy = anisotropy !== undefined ? anisotropy : 1; this.format = format !== undefined ? format : THREE.RGBAFormat; this.type = type !== undefined ? type : THREE.UnsignedByteType; this.offset = new THREE.Vector2( 0, 0 ); this.repeat = new THREE.Vector2( 1, 1 ); this.generateMipmaps = true; this.premultiplyAlpha = false; this.flipY = true; this.unpackAlignment = 4; // valid values: 1, 2, 4, 8 (see http://www.khronos.org/opengles/sdk/docs/man/xhtml/glPixelStorei.xml) // Values of encoding !== THREE.LinearEncoding only supported on map, envMap and emissiveMap. // // Also changing the encoding after already used by a Material will not automatically make the Material // update. You need to explicitly call Material.needsUpdate to trigger it to recompile. this.encoding = encoding !== undefined ? encoding : THREE.LinearEncoding; this.version = 0; this.onUpdate = null; }; THREE.Texture.DEFAULT_IMAGE = undefined; THREE.Texture.DEFAULT_MAPPING = THREE.UVMapping; THREE.Texture.prototype = { constructor: THREE.Texture, set needsUpdate( value ) { if ( value === true ) this.version ++; }, clone: function () { return new this.constructor().copy( this ); }, copy: function ( source ) { this.image = source.image; this.mipmaps = source.mipmaps.slice( 0 ); this.mapping = source.mapping; this.wrapS = source.wrapS; this.wrapT = source.wrapT; this.magFilter = source.magFilter; this.minFilter = source.minFilter; this.anisotropy = source.anisotropy; this.format = source.format; this.type = source.type; this.offset.copy( source.offset ); this.repeat.copy( source.repeat ); this.generateMipmaps = source.generateMipmaps; this.premultiplyAlpha = source.premultiplyAlpha; this.flipY = source.flipY; this.unpackAlignment = source.unpackAlignment; this.encoding = source.encoding; return this; }, toJSON: function ( meta ) { if ( meta.textures[ this.uuid ] !== undefined ) { return meta.textures[ this.uuid ]; } function getDataURL( image ) { var canvas; if ( image.toDataURL !== undefined ) { canvas = image; } else { canvas = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' ); canvas.width = image.width; canvas.height = image.height; canvas.getContext( '2d' ).drawImage( image, 0, 0, image.width, image.height ); } if ( canvas.width > 2048 || canvas.height > 2048 ) { return canvas.toDataURL( 'image/jpeg', 0.6 ); } else { return canvas.toDataURL( 'image/png' ); } } var output = { metadata: { version: 4.4, type: 'Texture', generator: 'Texture.toJSON' }, uuid: this.uuid, name: this.name, mapping: this.mapping, repeat: [ this.repeat.x, this.repeat.y ], offset: [ this.offset.x, this.offset.y ], wrap: [ this.wrapS, this.wrapT ], minFilter: this.minFilter, magFilter: this.magFilter, anisotropy: this.anisotropy }; if ( this.image !== undefined ) { // TODO: Move to THREE.Image var image = this.image; if ( image.uuid === undefined ) { image.uuid = THREE.Math.generateUUID(); // UGH } if ( meta.images[ image.uuid ] === undefined ) { meta.images[ image.uuid ] = { uuid: image.uuid, url: getDataURL( image ) }; } output.image = image.uuid; } meta.textures[ this.uuid ] = output; return output; }, dispose: function () { this.dispatchEvent( { type: 'dispose' } ); }, transformUv: function ( uv ) { if ( this.mapping !== THREE.UVMapping ) return; uv.multiply( this.repeat ); uv.add( this.offset ); if ( uv.x < 0 || uv.x > 1 ) { switch ( this.wrapS ) { case THREE.RepeatWrapping: uv.x = uv.x - Math.floor( uv.x ); break; case THREE.ClampToEdgeWrapping: uv.x = uv.x < 0 ? 0 : 1; break; case THREE.MirroredRepeatWrapping: if ( Math.abs( Math.floor( uv.x ) % 2 ) === 1 ) { uv.x = Math.ceil( uv.x ) - uv.x; } else { uv.x = uv.x - Math.floor( uv.x ); } break; } } if ( uv.y < 0 || uv.y > 1 ) { switch ( this.wrapT ) { case THREE.RepeatWrapping: uv.y = uv.y - Math.floor( uv.y ); break; case THREE.ClampToEdgeWrapping: uv.y = uv.y < 0 ? 0 : 1; break; case THREE.MirroredRepeatWrapping: if ( Math.abs( Math.floor( uv.y ) % 2 ) === 1 ) { uv.y = Math.ceil( uv.y ) - uv.y; } else { uv.y = uv.y - Math.floor( uv.y ); } break; } } if ( this.flipY ) { uv.y = 1 - uv.y; } } }; Object.assign( THREE.Texture.prototype, THREE.EventDispatcher.prototype ); THREE.TextureIdCount = 0; // File:src/textures/DepthTexture.js /** * @author Matt DesLauriers / @mattdesl */ THREE.DepthTexture = function ( width, height, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy ) { THREE.Texture.call( this, null, mapping, wrapS, wrapT, magFilter, minFilter, THREE.DepthFormat, type, anisotropy ); this.image = { width: width, height: height }; this.type = type !== undefined ? type : THREE.UnsignedShortType; this.magFilter = magFilter !== undefined ? magFilter : THREE.NearestFilter; this.minFilter = minFilter !== undefined ? minFilter : THREE.NearestFilter; this.flipY = false; this.generateMipmaps = false; }; THREE.DepthTexture.prototype = Object.create( THREE.Texture.prototype ); THREE.DepthTexture.prototype.constructor = THREE.DepthTexture; // File:src/textures/CanvasTexture.js /** * @author mrdoob / http://mrdoob.com/ */ THREE.CanvasTexture = function ( canvas, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ) { THREE.Texture.call( this, canvas, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ); this.needsUpdate = true; }; THREE.CanvasTexture.prototype = Object.create( THREE.Texture.prototype ); THREE.CanvasTexture.prototype.constructor = THREE.CanvasTexture; // File:src/textures/CubeTexture.js /** * @author mrdoob / http://mrdoob.com/ */ THREE.CubeTexture = function ( images, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding ) { images = images !== undefined ? images : []; mapping = mapping !== undefined ? mapping : THREE.CubeReflectionMapping; THREE.Texture.call( this, images, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding ); this.flipY = false; }; THREE.CubeTexture.prototype = Object.create( THREE.Texture.prototype ); THREE.CubeTexture.prototype.constructor = THREE.CubeTexture; Object.defineProperty( THREE.CubeTexture.prototype, 'images', { get: function () { return this.image; }, set: function ( value ) { this.image = value; } } ); // File:src/textures/CompressedTexture.js /** * @author alteredq / http://alteredqualia.com/ */ THREE.CompressedTexture = function ( mipmaps, width, height, format, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, encoding ) { THREE.Texture.call( this, null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding ); this.image = { width: width, height: height }; this.mipmaps = mipmaps; // no flipping for cube textures // (also flipping doesn't work for compressed textures ) this.flipY = false; // can't generate mipmaps for compressed textures // mips must be embedded in DDS files this.generateMipmaps = false; }; THREE.CompressedTexture.prototype = Object.create( THREE.Texture.prototype ); THREE.CompressedTexture.prototype.constructor = THREE.CompressedTexture; // File:src/textures/DataTexture.js /** * @author alteredq / http://alteredqualia.com/ */ THREE.DataTexture = function ( data, width, height, format, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, encoding ) { THREE.Texture.call( this, null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding ); this.image = { data: data, width: width, height: height }; this.magFilter = magFilter !== undefined ? magFilter : THREE.NearestFilter; this.minFilter = minFilter !== undefined ? minFilter : THREE.NearestFilter; this.flipY = false; this.generateMipmaps = false; }; THREE.DataTexture.prototype = Object.create( THREE.Texture.prototype ); THREE.DataTexture.prototype.constructor = THREE.DataTexture; // File:src/textures/VideoTexture.js /** * @author mrdoob / http://mrdoob.com/ */ THREE.VideoTexture = function ( video, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ) { THREE.Texture.call( this, video, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ); this.generateMipmaps = false; var scope = this; function update() { requestAnimationFrame( update ); if ( video.readyState >= video.HAVE_CURRENT_DATA ) { scope.needsUpdate = true; } } update(); }; THREE.VideoTexture.prototype = Object.create( THREE.Texture.prototype ); THREE.VideoTexture.prototype.constructor = THREE.VideoTexture; // File:src/objects/Group.js /** * @author mrdoob / http://mrdoob.com/ */ THREE.Group = function () { THREE.Object3D.call( this ); this.type = 'Group'; }; THREE.Group.prototype = Object.assign( Object.create( THREE.Object3D.prototype ), { constructor: THREE.Group } ); // File:src/objects/Points.js /** * @author alteredq / http://alteredqualia.com/ */ THREE.Points = function ( geometry, material ) { THREE.Object3D.call( this ); this.type = 'Points'; this.geometry = geometry !== undefined ? geometry : new THREE.BufferGeometry(); this.material = material !== undefined ? material : new THREE.PointsMaterial( { color: Math.random() * 0xffffff } ); }; THREE.Points.prototype = Object.assign( Object.create( THREE.Object3D.prototype ), { constructor: THREE.Points, raycast: ( function () { var inverseMatrix = new THREE.Matrix4(); var ray = new THREE.Ray(); var sphere = new THREE.Sphere(); return function raycast( raycaster, intersects ) { var object = this; var geometry = this.geometry; var matrixWorld = this.matrixWorld; var threshold = raycaster.params.Points.threshold; // Checking boundingSphere distance to ray if ( geometry.boundingSphere === null ) geometry.computeBoundingSphere(); sphere.copy( geometry.boundingSphere ); sphere.applyMatrix4( matrixWorld ); if ( raycaster.ray.intersectsSphere( sphere ) === false ) return; // inverseMatrix.getInverse( matrixWorld ); ray.copy( raycaster.ray ).applyMatrix4( inverseMatrix ); var localThreshold = threshold / ( ( this.scale.x + this.scale.y + this.scale.z ) / 3 ); var localThresholdSq = localThreshold * localThreshold; var position = new THREE.Vector3(); function testPoint( point, index ) { var rayPointDistanceSq = ray.distanceSqToPoint( point ); if ( rayPointDistanceSq < localThresholdSq ) { var intersectPoint = ray.closestPointToPoint( point ); intersectPoint.applyMatrix4( matrixWorld ); var distance = raycaster.ray.origin.distanceTo( intersectPoint ); if ( distance < raycaster.near || distance > raycaster.far ) return; intersects.push( { distance: distance, distanceToRay: Math.sqrt( rayPointDistanceSq ), point: intersectPoint.clone(), index: index, face: null, object: object } ); } } if ( geometry instanceof THREE.BufferGeometry ) { var index = geometry.index; var attributes = geometry.attributes; var positions = attributes.position.array; if ( index !== null ) { var indices = index.array; for ( var i = 0, il = indices.length; i < il; i ++ ) { var a = indices[ i ]; position.fromArray( positions, a * 3 ); testPoint( position, a ); } } else { for ( var i = 0, l = positions.length / 3; i < l; i ++ ) { position.fromArray( positions, i * 3 ); testPoint( position, i ); } } } else { var vertices = geometry.vertices; for ( var i = 0, l = vertices.length; i < l; i ++ ) { testPoint( vertices[ i ], i ); } } }; }() ), clone: function () { return new this.constructor( this.geometry, this.material ).copy( this ); } } ); // File:src/objects/Line.js /** * @author mrdoob / http://mrdoob.com/ */ THREE.Line = function ( geometry, material, mode ) { if ( mode === 1 ) { console.warn( 'THREE.Line: parameter THREE.LinePieces no longer supported. Created THREE.LineSegments instead.' ); return new THREE.LineSegments( geometry, material ); } THREE.Object3D.call( this ); this.type = 'Line'; this.geometry = geometry !== undefined ? geometry : new THREE.BufferGeometry(); this.material = material !== undefined ? material : new THREE.LineBasicMaterial( { color: Math.random() * 0xffffff } ); }; THREE.Line.prototype = Object.assign( Object.create( THREE.Object3D.prototype ), { constructor: THREE.Line, raycast: ( function () { var inverseMatrix = new THREE.Matrix4(); var ray = new THREE.Ray(); var sphere = new THREE.Sphere(); return function raycast( raycaster, intersects ) { var precision = raycaster.linePrecision; var precisionSq = precision * precision; var geometry = this.geometry; var matrixWorld = this.matrixWorld; // Checking boundingSphere distance to ray if ( geometry.boundingSphere === null ) geometry.computeBoundingSphere(); sphere.copy( geometry.boundingSphere ); sphere.applyMatrix4( matrixWorld ); if ( raycaster.ray.intersectsSphere( sphere ) === false ) return; // inverseMatrix.getInverse( matrixWorld ); ray.copy( raycaster.ray ).applyMatrix4( inverseMatrix ); var vStart = new THREE.Vector3(); var vEnd = new THREE.Vector3(); var interSegment = new THREE.Vector3(); var interRay = new THREE.Vector3(); var step = this instanceof THREE.LineSegments ? 2 : 1; if ( geometry instanceof THREE.BufferGeometry ) { var index = geometry.index; var attributes = geometry.attributes; var positions = attributes.position.array; if ( index !== null ) { var indices = index.array; for ( var i = 0, l = indices.length - 1; i < l; i += step ) { var a = indices[ i ]; var b = indices[ i + 1 ]; vStart.fromArray( positions, a * 3 ); vEnd.fromArray( positions, b * 3 ); var distSq = ray.distanceSqToSegment( vStart, vEnd, interRay, interSegment ); if ( distSq > precisionSq ) continue; interRay.applyMatrix4( this.matrixWorld ); //Move back to world space for distance calculation var distance = raycaster.ray.origin.distanceTo( interRay ); if ( distance < raycaster.near || distance > raycaster.far ) continue; intersects.push( { distance: distance, // What do we want? intersection point on the ray or on the segment?? // point: raycaster.ray.at( distance ), point: interSegment.clone().applyMatrix4( this.matrixWorld ), index: i, face: null, faceIndex: null, object: this } ); } } else { for ( var i = 0, l = positions.length / 3 - 1; i < l; i += step ) { vStart.fromArray( positions, 3 * i ); vEnd.fromArray( positions, 3 * i + 3 ); var distSq = ray.distanceSqToSegment( vStart, vEnd, interRay, interSegment ); if ( distSq > precisionSq ) continue; interRay.applyMatrix4( this.matrixWorld ); //Move back to world space for distance calculation var distance = raycaster.ray.origin.distanceTo( interRay ); if ( distance < raycaster.near || distance > raycaster.far ) continue; intersects.push( { distance: distance, // What do we want? intersection point on the ray or on the segment?? // point: raycaster.ray.at( distance ), point: interSegment.clone().applyMatrix4( this.matrixWorld ), index: i, face: null, faceIndex: null, object: this } ); } } } else if ( geometry instanceof THREE.Geometry ) { var vertices = geometry.vertices; var nbVertices = vertices.length; for ( var i = 0; i < nbVertices - 1; i += step ) { var distSq = ray.distanceSqToSegment( vertices[ i ], vertices[ i + 1 ], interRay, interSegment ); if ( distSq > precisionSq ) continue; interRay.applyMatrix4( this.matrixWorld ); //Move back to world space for distance calculation var distance = raycaster.ray.origin.distanceTo( interRay ); if ( distance < raycaster.near || distance > raycaster.far ) continue; intersects.push( { distance: distance, // What do we want? intersection point on the ray or on the segment?? // point: raycaster.ray.at( distance ), point: interSegment.clone().applyMatrix4( this.matrixWorld ), index: i, face: null, faceIndex: null, object: this } ); } } }; }() ), clone: function () { return new this.constructor( this.geometry, this.material ).copy( this ); } } ); // File:src/objects/LineSegments.js /** * @author mrdoob / http://mrdoob.com/ */ THREE.LineSegments = function ( geometry, material ) { THREE.Line.call( this, geometry, material ); this.type = 'LineSegments'; }; THREE.LineSegments.prototype = Object.assign( Object.create( THREE.Line.prototype ), { constructor: THREE.LineSegments } ); // File:src/objects/Mesh.js /** * @author mrdoob / http://mrdoob.com/ * @author alteredq / http://alteredqualia.com/ * @author mikael emtinger / http://gomo.se/ * @author jonobr1 / http://jonobr1.com/ */ THREE.Mesh = function ( geometry, material ) { THREE.Object3D.call( this ); this.type = 'Mesh'; this.geometry = geometry !== undefined ? geometry : new THREE.BufferGeometry(); this.material = material !== undefined ? material : new THREE.MeshBasicMaterial( { color: Math.random() * 0xffffff } ); this.drawMode = THREE.TrianglesDrawMode; this.updateMorphTargets(); }; THREE.Mesh.prototype = Object.assign( Object.create( THREE.Object3D.prototype ), { constructor: THREE.Mesh, setDrawMode: function ( value ) { this.drawMode = value; }, copy: function ( source ) { THREE.Object3D.prototype.copy.call( this, source ); this.drawMode = source.drawMode; return this; }, updateMorphTargets: function () { if ( this.geometry.morphTargets !== undefined && this.geometry.morphTargets.length > 0 ) { this.morphTargetBase = - 1; this.morphTargetInfluences = []; this.morphTargetDictionary = {}; for ( var m = 0, ml = this.geometry.morphTargets.length; m < ml; m ++ ) { this.morphTargetInfluences.push( 0 ); this.morphTargetDictionary[ this.geometry.morphTargets[ m ].name ] = m; } } }, getMorphTargetIndexByName: function ( name ) { if ( this.morphTargetDictionary[ name ] !== undefined ) { return this.morphTargetDictionary[ name ]; } console.warn( 'THREE.Mesh.getMorphTargetIndexByName: morph target ' + name + ' does not exist. Returning 0.' ); return 0; }, raycast: ( function () { var inverseMatrix = new THREE.Matrix4(); var ray = new THREE.Ray(); var sphere = new THREE.Sphere(); var vA = new THREE.Vector3(); var vB = new THREE.Vector3(); var vC = new THREE.Vector3(); var tempA = new THREE.Vector3(); var tempB = new THREE.Vector3(); var tempC = new THREE.Vector3(); var uvA = new THREE.Vector2(); var uvB = new THREE.Vector2(); var uvC = new THREE.Vector2(); var barycoord = new THREE.Vector3(); var intersectionPoint = new THREE.Vector3(); var intersectionPointWorld = new THREE.Vector3(); function uvIntersection( point, p1, p2, p3, uv1, uv2, uv3 ) { THREE.Triangle.barycoordFromPoint( point, p1, p2, p3, barycoord ); uv1.multiplyScalar( barycoord.x ); uv2.multiplyScalar( barycoord.y ); uv3.multiplyScalar( barycoord.z ); uv1.add( uv2 ).add( uv3 ); return uv1.clone(); } function checkIntersection( object, raycaster, ray, pA, pB, pC, point ) { var intersect; var material = object.material; if ( material.side === THREE.BackSide ) { intersect = ray.intersectTriangle( pC, pB, pA, true, point ); } else { intersect = ray.intersectTriangle( pA, pB, pC, material.side !== THREE.DoubleSide, point ); } if ( intersect === null ) return null; intersectionPointWorld.copy( point ); intersectionPointWorld.applyMatrix4( object.matrixWorld ); var distance = raycaster.ray.origin.distanceTo( intersectionPointWorld ); if ( distance < raycaster.near || distance > raycaster.far ) return null; return { distance: distance, point: intersectionPointWorld.clone(), object: object }; } function checkBufferGeometryIntersection( object, raycaster, ray, positions, uvs, a, b, c ) { vA.fromArray( positions, a * 3 ); vB.fromArray( positions, b * 3 ); vC.fromArray( positions, c * 3 ); var intersection = checkIntersection( object, raycaster, ray, vA, vB, vC, intersectionPoint ); if ( intersection ) { if ( uvs ) { uvA.fromArray( uvs, a * 2 ); uvB.fromArray( uvs, b * 2 ); uvC.fromArray( uvs, c * 2 ); intersection.uv = uvIntersection( intersectionPoint, vA, vB, vC, uvA, uvB, uvC ); } intersection.face = new THREE.Face3( a, b, c, THREE.Triangle.normal( vA, vB, vC ) ); intersection.faceIndex = a; } return intersection; } return function raycast( raycaster, intersects ) { var geometry = this.geometry; var material = this.material; var matrixWorld = this.matrixWorld; if ( material === undefined ) return; // Checking boundingSphere distance to ray if ( geometry.boundingSphere === null ) geometry.computeBoundingSphere(); sphere.copy( geometry.boundingSphere ); sphere.applyMatrix4( matrixWorld ); if ( raycaster.ray.intersectsSphere( sphere ) === false ) return; // inverseMatrix.getInverse( matrixWorld ); ray.copy( raycaster.ray ).applyMatrix4( inverseMatrix ); // Check boundingBox before continuing if ( geometry.boundingBox !== null ) { if ( ray.intersectsBox( geometry.boundingBox ) === false ) return; } var uvs, intersection; if ( geometry instanceof THREE.BufferGeometry ) { var a, b, c; var index = geometry.index; var attributes = geometry.attributes; var positions = attributes.position.array; if ( attributes.uv !== undefined ) { uvs = attributes.uv.array; } if ( index !== null ) { var indices = index.array; for ( var i = 0, l = indices.length; i < l; i += 3 ) { a = indices[ i ]; b = indices[ i + 1 ]; c = indices[ i + 2 ]; intersection = checkBufferGeometryIntersection( this, raycaster, ray, positions, uvs, a, b, c ); if ( intersection ) { intersection.faceIndex = Math.floor( i / 3 ); // triangle number in indices buffer semantics intersects.push( intersection ); } } } else { for ( var i = 0, l = positions.length; i < l; i += 9 ) { a = i / 3; b = a + 1; c = a + 2; intersection = checkBufferGeometryIntersection( this, raycaster, ray, positions, uvs, a, b, c ); if ( intersection ) { intersection.index = a; // triangle number in positions buffer semantics intersects.push( intersection ); } } } } else if ( geometry instanceof THREE.Geometry ) { var fvA, fvB, fvC; var isFaceMaterial = material instanceof THREE.MultiMaterial; var materials = isFaceMaterial === true ? material.materials : null; var vertices = geometry.vertices; var faces = geometry.faces; var faceVertexUvs = geometry.faceVertexUvs[ 0 ]; if ( faceVertexUvs.length > 0 ) uvs = faceVertexUvs; for ( var f = 0, fl = faces.length; f < fl; f ++ ) { var face = faces[ f ]; var faceMaterial = isFaceMaterial === true ? materials[ face.materialIndex ] : material; if ( faceMaterial === undefined ) continue; fvA = vertices[ face.a ]; fvB = vertices[ face.b ]; fvC = vertices[ face.c ]; if ( faceMaterial.morphTargets === true ) { var morphTargets = geometry.morphTargets; var morphInfluences = this.morphTargetInfluences; vA.set( 0, 0, 0 ); vB.set( 0, 0, 0 ); vC.set( 0, 0, 0 ); for ( var t = 0, tl = morphTargets.length; t < tl; t ++ ) { var influence = morphInfluences[ t ]; if ( influence === 0 ) continue; var targets = morphTargets[ t ].vertices; vA.addScaledVector( tempA.subVectors( targets[ face.a ], fvA ), influence ); vB.addScaledVector( tempB.subVectors( targets[ face.b ], fvB ), influence ); vC.addScaledVector( tempC.subVectors( targets[ face.c ], fvC ), influence ); } vA.add( fvA ); vB.add( fvB ); vC.add( fvC ); fvA = vA; fvB = vB; fvC = vC; } intersection = checkIntersection( this, raycaster, ray, fvA, fvB, fvC, intersectionPoint ); if ( intersection ) { if ( uvs ) { var uvs_f = uvs[ f ]; uvA.copy( uvs_f[ 0 ] ); uvB.copy( uvs_f[ 1 ] ); uvC.copy( uvs_f[ 2 ] ); intersection.uv = uvIntersection( intersectionPoint, fvA, fvB, fvC, uvA, uvB, uvC ); } intersection.face = face; intersection.faceIndex = f; intersects.push( intersection ); } } } }; }() ), clone: function () { return new this.constructor( this.geometry, this.material ).copy( this ); } } ); // File:src/objects/Bone.js /** * @author mikael emtinger / http://gomo.se/ * @author alteredq / http://alteredqualia.com/ * @author ikerr / http://verold.com */ THREE.Bone = function ( skin ) { THREE.Object3D.call( this ); this.type = 'Bone'; this.skin = skin; }; THREE.Bone.prototype = Object.assign( Object.create( THREE.Object3D.prototype ), { constructor: THREE.Bone, copy: function ( source ) { THREE.Object3D.prototype.copy.call( this, source ); this.skin = source.skin; return this; } } ); // File:src/objects/Skeleton.js /** * @author mikael emtinger / http://gomo.se/ * @author alteredq / http://alteredqualia.com/ * @author michael guerrero / http://realitymeltdown.com * @author ikerr / http://verold.com */ THREE.Skeleton = function ( bones, boneInverses, useVertexTexture ) { this.useVertexTexture = useVertexTexture !== undefined ? useVertexTexture : true; this.identityMatrix = new THREE.Matrix4(); // copy the bone array bones = bones || []; this.bones = bones.slice( 0 ); // create a bone texture or an array of floats if ( this.useVertexTexture ) { // layout (1 matrix = 4 pixels) // RGBA RGBA RGBA RGBA (=> column1, column2, column3, column4) // with 8x8 pixel texture max 16 bones * 4 pixels = (8 * 8) // 16x16 pixel texture max 64 bones * 4 pixels = (16 * 16) // 32x32 pixel texture max 256 bones * 4 pixels = (32 * 32) // 64x64 pixel texture max 1024 bones * 4 pixels = (64 * 64) var size = Math.sqrt( this.bones.length * 4 ); // 4 pixels needed for 1 matrix size = THREE.Math.nextPowerOfTwo( Math.ceil( size ) ); size = Math.max( size, 4 ); this.boneTextureWidth = size; this.boneTextureHeight = size; this.boneMatrices = new Float32Array( this.boneTextureWidth * this.boneTextureHeight * 4 ); // 4 floats per RGBA pixel this.boneTexture = new THREE.DataTexture( this.boneMatrices, this.boneTextureWidth, this.boneTextureHeight, THREE.RGBAFormat, THREE.FloatType ); } else { this.boneMatrices = new Float32Array( 16 * this.bones.length ); } // use the supplied bone inverses or calculate the inverses if ( boneInverses === undefined ) { this.calculateInverses(); } else { if ( this.bones.length === boneInverses.length ) { this.boneInverses = boneInverses.slice( 0 ); } else { console.warn( 'THREE.Skeleton bonInverses is the wrong length.' ); this.boneInverses = []; for ( var b = 0, bl = this.bones.length; b < bl; b ++ ) { this.boneInverses.push( new THREE.Matrix4() ); } } } }; Object.assign( THREE.Skeleton.prototype, { calculateInverses: function () { this.boneInverses = []; for ( var b = 0, bl = this.bones.length; b < bl; b ++ ) { var inverse = new THREE.Matrix4(); if ( this.bones[ b ] ) { inverse.getInverse( this.bones[ b ].matrixWorld ); } this.boneInverses.push( inverse ); } }, pose: function () { var bone; // recover the bind-time world matrices for ( var b = 0, bl = this.bones.length; b < bl; b ++ ) { bone = this.bones[ b ]; if ( bone ) { bone.matrixWorld.getInverse( this.boneInverses[ b ] ); } } // compute the local matrices, positions, rotations and scales for ( var b = 0, bl = this.bones.length; b < bl; b ++ ) { bone = this.bones[ b ]; if ( bone ) { if ( bone.parent instanceof THREE.Bone ) { bone.matrix.getInverse( bone.parent.matrixWorld ); bone.matrix.multiply( bone.matrixWorld ); } else { bone.matrix.copy( bone.matrixWorld ); } bone.matrix.decompose( bone.position, bone.quaternion, bone.scale ); } } }, update: ( function () { var offsetMatrix = new THREE.Matrix4(); return function update() { // flatten bone matrices to array for ( var b = 0, bl = this.bones.length; b < bl; b ++ ) { // compute the offset between the current and the original transform var matrix = this.bones[ b ] ? this.bones[ b ].matrixWorld : this.identityMatrix; offsetMatrix.multiplyMatrices( matrix, this.boneInverses[ b ] ); offsetMatrix.toArray( this.boneMatrices, b * 16 ); } if ( this.useVertexTexture ) { this.boneTexture.needsUpdate = true; } }; } )(), clone: function () { return new THREE.Skeleton( this.bones, this.boneInverses, this.useVertexTexture ); } } ); // File:src/objects/SkinnedMesh.js /** * @author mikael emtinger / http://gomo.se/ * @author alteredq / http://alteredqualia.com/ * @author ikerr / http://verold.com */ THREE.SkinnedMesh = function ( geometry, material, useVertexTexture ) { THREE.Mesh.call( this, geometry, material ); this.type = 'SkinnedMesh'; this.bindMode = "attached"; this.bindMatrix = new THREE.Matrix4(); this.bindMatrixInverse = new THREE.Matrix4(); // init bones // TODO: remove bone creation as there is no reason (other than // convenience) for THREE.SkinnedMesh to do this. var bones = []; if ( this.geometry && this.geometry.bones !== undefined ) { var bone, gbone; for ( var b = 0, bl = this.geometry.bones.length; b < bl; ++ b ) { gbone = this.geometry.bones[ b ]; bone = new THREE.Bone( this ); bones.push( bone ); bone.name = gbone.name; bone.position.fromArray( gbone.pos ); bone.quaternion.fromArray( gbone.rotq ); if ( gbone.scl !== undefined ) bone.scale.fromArray( gbone.scl ); } for ( var b = 0, bl = this.geometry.bones.length; b < bl; ++ b ) { gbone = this.geometry.bones[ b ]; if ( gbone.parent !== - 1 && gbone.parent !== null && bones[ gbone.parent ] !== undefined ) { bones[ gbone.parent ].add( bones[ b ] ); } else { this.add( bones[ b ] ); } } } this.normalizeSkinWeights(); this.updateMatrixWorld( true ); this.bind( new THREE.Skeleton( bones, undefined, useVertexTexture ), this.matrixWorld ); }; THREE.SkinnedMesh.prototype = Object.assign( Object.create( THREE.Mesh.prototype ), { constructor: THREE.SkinnedMesh, bind: function( skeleton, bindMatrix ) { this.skeleton = skeleton; if ( bindMatrix === undefined ) { this.updateMatrixWorld( true ); this.skeleton.calculateInverses(); bindMatrix = this.matrixWorld; } this.bindMatrix.copy( bindMatrix ); this.bindMatrixInverse.getInverse( bindMatrix ); }, pose: function () { this.skeleton.pose(); }, normalizeSkinWeights: function () { if ( this.geometry instanceof THREE.Geometry ) { for ( var i = 0; i < this.geometry.skinWeights.length; i ++ ) { var sw = this.geometry.skinWeights[ i ]; var scale = 1.0 / sw.lengthManhattan(); if ( scale !== Infinity ) { sw.multiplyScalar( scale ); } else { sw.set( 1, 0, 0, 0 ); // do something reasonable } } } else if ( this.geometry instanceof THREE.BufferGeometry ) { var vec = new THREE.Vector4(); var skinWeight = this.geometry.attributes.skinWeight; for ( var i = 0; i < skinWeight.count; i ++ ) { vec.x = skinWeight.getX( i ); vec.y = skinWeight.getY( i ); vec.z = skinWeight.getZ( i ); vec.w = skinWeight.getW( i ); var scale = 1.0 / vec.lengthManhattan(); if ( scale !== Infinity ) { vec.multiplyScalar( scale ); } else { vec.set( 1, 0, 0, 0 ); // do something reasonable } skinWeight.setXYZW( i, vec.x, vec.y, vec.z, vec.w ); } } }, updateMatrixWorld: function( force ) { THREE.Mesh.prototype.updateMatrixWorld.call( this, true ); if ( this.bindMode === "attached" ) { this.bindMatrixInverse.getInverse( this.matrixWorld ); } else if ( this.bindMode === "detached" ) { this.bindMatrixInverse.getInverse( this.bindMatrix ); } else { console.warn( 'THREE.SkinnedMesh unrecognized bindMode: ' + this.bindMode ); } }, clone: function() { return new this.constructor( this.geometry, this.material, this.skeleton.useVertexTexture ).copy( this ); } } ); // File:src/objects/LOD.js /** * @author mikael emtinger / http://gomo.se/ * @author alteredq / http://alteredqualia.com/ * @author mrdoob / http://mrdoob.com/ */ THREE.LOD = function () { THREE.Object3D.call( this ); this.type = 'LOD'; Object.defineProperties( this, { levels: { enumerable: true, value: [] } } ); }; THREE.LOD.prototype = Object.assign( Object.create( THREE.Object3D.prototype ), { constructor: THREE.LOD, copy: function ( source ) { THREE.Object3D.prototype.copy.call( this, source, false ); var levels = source.levels; for ( var i = 0, l = levels.length; i < l; i ++ ) { var level = levels[ i ]; this.addLevel( level.object.clone(), level.distance ); } return this; }, addLevel: function ( object, distance ) { if ( distance === undefined ) distance = 0; distance = Math.abs( distance ); var levels = this.levels; for ( var l = 0; l < levels.length; l ++ ) { if ( distance < levels[ l ].distance ) { break; } } levels.splice( l, 0, { distance: distance, object: object } ); this.add( object ); }, getObjectForDistance: function ( distance ) { var levels = this.levels; for ( var i = 1, l = levels.length; i < l; i ++ ) { if ( distance < levels[ i ].distance ) { break; } } return levels[ i - 1 ].object; }, raycast: ( function () { var matrixPosition = new THREE.Vector3(); return function raycast( raycaster, intersects ) { matrixPosition.setFromMatrixPosition( this.matrixWorld ); var distance = raycaster.ray.origin.distanceTo( matrixPosition ); this.getObjectForDistance( distance ).raycast( raycaster, intersects ); }; }() ), update: function () { var v1 = new THREE.Vector3(); var v2 = new THREE.Vector3(); return function update( camera ) { var levels = this.levels; if ( levels.length > 1 ) { v1.setFromMatrixPosition( camera.matrixWorld ); v2.setFromMatrixPosition( this.matrixWorld ); var distance = v1.distanceTo( v2 ); levels[ 0 ].object.visible = true; for ( var i = 1, l = levels.length; i < l; i ++ ) { if ( distance >= levels[ i ].distance ) { levels[ i - 1 ].object.visible = false; levels[ i ].object.visible = true; } else { break; } } for ( ; i < l; i ++ ) { levels[ i ].object.visible = false; } } }; }(), toJSON: function ( meta ) { var data = THREE.Object3D.prototype.toJSON.call( this, meta ); data.object.levels = []; var levels = this.levels; for ( var i = 0, l = levels.length; i < l; i ++ ) { var level = levels[ i ]; data.object.levels.push( { object: level.object.uuid, distance: level.distance } ); } return data; } } ); // File:src/objects/Sprite.js /** * @author mikael emtinger / http://gomo.se/ * @author alteredq / http://alteredqualia.com/ */ THREE.Sprite = function ( material ) { THREE.Object3D.call( this ); this.type = 'Sprite'; this.material = ( material !== undefined ) ? material : new THREE.SpriteMaterial(); }; THREE.Sprite.prototype = Object.assign( Object.create( THREE.Object3D.prototype ), { constructor: THREE.Sprite, raycast: ( function () { var matrixPosition = new THREE.Vector3(); return function raycast( raycaster, intersects ) { matrixPosition.setFromMatrixPosition( this.matrixWorld ); var distanceSq = raycaster.ray.distanceSqToPoint( matrixPosition ); var guessSizeSq = this.scale.x * this.scale.y / 4; if ( distanceSq > guessSizeSq ) { return; } intersects.push( { distance: Math.sqrt( distanceSq ), point: this.position, face: null, object: this } ); }; }() ), clone: function () { return new this.constructor( this.material ).copy( this ); } } ); // File:src/objects/LensFlare.js /** * @author mikael emtinger / http://gomo.se/ * @author alteredq / http://alteredqualia.com/ */ THREE.LensFlare = function ( texture, size, distance, blending, color ) { THREE.Object3D.call( this ); this.lensFlares = []; this.positionScreen = new THREE.Vector3(); this.customUpdateCallback = undefined; if ( texture !== undefined ) { this.add( texture, size, distance, blending, color ); } }; THREE.LensFlare.prototype = Object.assign( Object.create( THREE.Object3D.prototype ), { constructor: THREE.LensFlare, copy: function ( source ) { THREE.Object3D.prototype.copy.call( this, source ); this.positionScreen.copy( source.positionScreen ); this.customUpdateCallback = source.customUpdateCallback; for ( var i = 0, l = source.lensFlares.length; i < l; i ++ ) { this.lensFlares.push( source.lensFlares[ i ] ); } return this; }, add: function ( texture, size, distance, blending, color, opacity ) { if ( size === undefined ) size = - 1; if ( distance === undefined ) distance = 0; if ( opacity === undefined ) opacity = 1; if ( color === undefined ) color = new THREE.Color( 0xffffff ); if ( blending === undefined ) blending = THREE.NormalBlending; distance = Math.min( distance, Math.max( 0, distance ) ); this.lensFlares.push( { texture: texture, // THREE.Texture size: size, // size in pixels (-1 = use texture.width) distance: distance, // distance (0-1) from light source (0=at light source) x: 0, y: 0, z: 0, // screen position (-1 => 1) z = 0 is in front z = 1 is back scale: 1, // scale rotation: 0, // rotation opacity: opacity, // opacity color: color, // color blending: blending // blending } ); }, /* * Update lens flares update positions on all flares based on the screen position * Set myLensFlare.customUpdateCallback to alter the flares in your project specific way. */ updateLensFlares: function () { var f, fl = this.lensFlares.length; var flare; var vecX = - this.positionScreen.x * 2; var vecY = - this.positionScreen.y * 2; for ( f = 0; f < fl; f ++ ) { flare = this.lensFlares[ f ]; flare.x = this.positionScreen.x + vecX * flare.distance; flare.y = this.positionScreen.y + vecY * flare.distance; flare.wantedRotation = flare.x * Math.PI * 0.25; flare.rotation += ( flare.wantedRotation - flare.rotation ) * 0.25; } } } ); // File:src/scenes/Scene.js /** * @author mrdoob / http://mrdoob.com/ */ THREE.Scene = function () { THREE.Object3D.call( this ); this.type = 'Scene'; this.background = null; this.fog = null; this.overrideMaterial = null; this.autoUpdate = true; // checked by the renderer }; THREE.Scene.prototype = Object.create( THREE.Object3D.prototype ); THREE.Scene.prototype.constructor = THREE.Scene; THREE.Scene.prototype.copy = function ( source, recursive ) { THREE.Object3D.prototype.copy.call( this, source, recursive ); if ( source.background !== null ) this.background = source.background.clone(); if ( source.fog !== null ) this.fog = source.fog.clone(); if ( source.overrideMaterial !== null ) this.overrideMaterial = source.overrideMaterial.clone(); this.autoUpdate = source.autoUpdate; this.matrixAutoUpdate = source.matrixAutoUpdate; return this; }; // File:src/scenes/Fog.js /** * @author mrdoob / http://mrdoob.com/ * @author alteredq / http://alteredqualia.com/ */ THREE.Fog = function ( color, near, far ) { this.name = ''; this.color = new THREE.Color( color ); this.near = ( near !== undefined ) ? near : 1; this.far = ( far !== undefined ) ? far : 1000; }; THREE.Fog.prototype.clone = function () { return new THREE.Fog( this.color.getHex(), this.near, this.far ); }; // File:src/scenes/FogExp2.js /** * @author mrdoob / http://mrdoob.com/ * @author alteredq / http://alteredqualia.com/ */ THREE.FogExp2 = function ( color, density ) { this.name = ''; this.color = new THREE.Color( color ); this.density = ( density !== undefined ) ? density : 0.00025; }; THREE.FogExp2.prototype.clone = function () { return new THREE.FogExp2( this.color.getHex(), this.density ); }; // File:src/renderers/shaders/ShaderChunk.js THREE.ShaderChunk = {}; // File:src/renderers/shaders/ShaderChunk/alphamap_fragment.glsl THREE.ShaderChunk[ 'alphamap_fragment' ] = "#ifdef USE_ALPHAMAP\n diffuseColor.a *= texture2D( alphaMap, vUv ).g;\n#endif\n"; // File:src/renderers/shaders/ShaderChunk/alphamap_pars_fragment.glsl THREE.ShaderChunk[ 'alphamap_pars_fragment' ] = "#ifdef USE_ALPHAMAP\n uniform sampler2D alphaMap;\n#endif\n"; // File:src/renderers/shaders/ShaderChunk/alphatest_fragment.glsl THREE.ShaderChunk[ 'alphatest_fragment' ] = "#ifdef ALPHATEST\n if ( diffuseColor.a < ALPHATEST ) discard;\n#endif\n"; // File:src/renderers/shaders/ShaderChunk/aomap_fragment.glsl THREE.ShaderChunk[ 'aomap_fragment' ] = "#ifdef USE_AOMAP\n float ambientOcclusion = ( texture2D( aoMap, vUv2 ).r - 1.0 ) * aoMapIntensity + 1.0;\n reflectedLight.indirectDiffuse *= ambientOcclusion;\n #if defined( USE_ENVMAP ) && defined( PHYSICAL )\n float dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n reflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.specularRoughness );\n #endif\n#endif\n"; // File:src/renderers/shaders/ShaderChunk/aomap_pars_fragment.glsl THREE.ShaderChunk[ 'aomap_pars_fragment' ] = "#ifdef USE_AOMAP\n uniform sampler2D aoMap;\n uniform float aoMapIntensity;\n#endif"; // File:src/renderers/shaders/ShaderChunk/begin_vertex.glsl THREE.ShaderChunk[ 'begin_vertex' ] = "\nvec3 transformed = vec3( position );\n"; // File:src/renderers/shaders/ShaderChunk/beginnormal_vertex.glsl THREE.ShaderChunk[ 'beginnormal_vertex' ] = "\nvec3 objectNormal = vec3( normal );\n"; // File:src/renderers/shaders/ShaderChunk/bsdfs.glsl THREE.ShaderChunk[ 'bsdfs' ] = "bool testLightInRange( const in float lightDistance, const in float cutoffDistance ) {\n return any( bvec2( cutoffDistance == 0.0, lightDistance < cutoffDistance ) );\n}\nfloat punctualLightIntensityToIrradianceFactor( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\n if( decayExponent > 0.0 ) {\n#if defined ( PHYSICALLY_CORRECT_LIGHTS )\n float distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\n float maxDistanceCutoffFactor = pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\n return distanceFalloff * maxDistanceCutoffFactor;\n#else\n return pow( saturate( -lightDistance / cutoffDistance + 1.0 ), decayExponent );\n#endif\n }\n return 1.0;\n}\nvec3 BRDF_Diffuse_Lambert( const in vec3 diffuseColor ) {\n return RECIPROCAL_PI * diffuseColor;\n}\nvec3 F_Schlick( const in vec3 specularColor, const in float dotLH ) {\n float fresnel = exp2( ( -5.55473 * dotLH - 6.98316 ) * dotLH );\n return ( 1.0 - specularColor ) * fresnel + specularColor;\n}\nfloat G_GGX_Smith( const in float alpha, const in float dotNL, const in float dotNV ) {\n float a2 = pow2( alpha );\n float gl = dotNL + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n float gv = dotNV + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n return 1.0 / ( gl * gv );\n}\nfloat G_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {\n float a2 = pow2( alpha );\n float gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n float gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n return 0.5 / max( gv + gl, EPSILON );\n}\nfloat D_GGX( const in float alpha, const in float dotNH ) {\n float a2 = pow2( alpha );\n float denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;\n return RECIPROCAL_PI * a2 / pow2( denom );\n}\nvec3 BRDF_Specular_GGX( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float roughness ) {\n float alpha = pow2( roughness );\n vec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\n float dotNL = saturate( dot( geometry.normal, incidentLight.direction ) );\n float dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n float dotNH = saturate( dot( geometry.normal, halfDir ) );\n float dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n vec3 F = F_Schlick( specularColor, dotLH );\n float G = G_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n float D = D_GGX( alpha, dotNH );\n return F * ( G * D );\n}\nvec3 BRDF_Specular_GGX_Environment( const in GeometricContext geometry, const in vec3 specularColor, const in float roughness ) {\n float dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n const vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 );\n const vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 );\n vec4 r = roughness * c0 + c1;\n float a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y;\n vec2 AB = vec2( -1.04, 1.04 ) * a004 + r.zw;\n return specularColor * AB.x + AB.y;\n}\nfloat G_BlinnPhong_Implicit( ) {\n return 0.25;\n}\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\n return RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\n}\nvec3 BRDF_Specular_BlinnPhong( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float shininess ) {\n vec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\n float dotNH = saturate( dot( geometry.normal, halfDir ) );\n float dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n vec3 F = F_Schlick( specularColor, dotLH );\n float G = G_BlinnPhong_Implicit( );\n float D = D_BlinnPhong( shininess, dotNH );\n return F * ( G * D );\n}\nfloat GGXRoughnessToBlinnExponent( const in float ggxRoughness ) {\n return ( 2.0 / pow2( ggxRoughness + 0.0001 ) - 2.0 );\n}\nfloat BlinnExponentToGGXRoughness( const in float blinnExponent ) {\n return sqrt( 2.0 / ( blinnExponent + 2.0 ) );\n}\n"; // File:src/renderers/shaders/ShaderChunk/bumpmap_pars_fragment.glsl THREE.ShaderChunk[ 'bumpmap_pars_fragment' ] = "#ifdef USE_BUMPMAP\n uniform sampler2D bumpMap;\n uniform float bumpScale;\n vec2 dHdxy_fwd() {\n vec2 dSTdx = dFdx( vUv );\n vec2 dSTdy = dFdy( vUv );\n float Hll = bumpScale * texture2D( bumpMap, vUv ).x;\n float dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\n float dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\n return vec2( dBx, dBy );\n }\n vec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy ) {\n vec3 vSigmaX = dFdx( surf_pos );\n vec3 vSigmaY = dFdy( surf_pos );\n vec3 vN = surf_norm;\n vec3 R1 = cross( vSigmaY, vN );\n vec3 R2 = cross( vN, vSigmaX );\n float fDet = dot( vSigmaX, R1 );\n vec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\n return normalize( abs( fDet ) * surf_norm - vGrad );\n }\n#endif\n"; // File:src/renderers/shaders/ShaderChunk/clipping_planes_fragment.glsl THREE.ShaderChunk[ 'clipping_planes_fragment' ] = "#if NUM_CLIPPING_PLANES > 0\n for ( int i = 0; i < NUM_CLIPPING_PLANES; ++ i ) {\n vec4 plane = clippingPlanes[ i ];\n if ( dot( vViewPosition, plane.xyz ) > plane.w ) discard;\n }\n#endif\n"; // File:src/renderers/shaders/ShaderChunk/clipping_planes_pars_fragment.glsl THREE.ShaderChunk[ 'clipping_planes_pars_fragment' ] = "#if NUM_CLIPPING_PLANES > 0\n #if ! defined( PHYSICAL ) && ! defined( PHONG )\n varying vec3 vViewPosition;\n #endif\n uniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\n#endif\n"; // File:src/renderers/shaders/ShaderChunk/clipping_planes_pars_vertex.glsl THREE.ShaderChunk[ 'clipping_planes_pars_vertex' ] = "#if NUM_CLIPPING_PLANES > 0 && ! defined( PHYSICAL ) && ! defined( PHONG )\n varying vec3 vViewPosition;\n#endif\n"; // File:src/renderers/shaders/ShaderChunk/clipping_planes_vertex.glsl THREE.ShaderChunk[ 'clipping_planes_vertex' ] = "#if NUM_CLIPPING_PLANES > 0 && ! defined( PHYSICAL ) && ! defined( PHONG )\n vViewPosition = - mvPosition.xyz;\n#endif\n"; // File:src/renderers/shaders/ShaderChunk/color_fragment.glsl THREE.ShaderChunk[ 'color_fragment' ] = "#ifdef USE_COLOR\n diffuseColor.rgb *= vColor;\n#endif"; // File:src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl THREE.ShaderChunk[ 'color_pars_fragment' ] = "#ifdef USE_COLOR\n varying vec3 vColor;\n#endif\n"; // File:src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl THREE.ShaderChunk[ 'color_pars_vertex' ] = "#ifdef USE_COLOR\n varying vec3 vColor;\n#endif"; // File:src/renderers/shaders/ShaderChunk/color_vertex.glsl THREE.ShaderChunk[ 'color_vertex' ] = "#ifdef USE_COLOR\n vColor.xyz = color.xyz;\n#endif"; // File:src/renderers/shaders/ShaderChunk/common.glsl THREE.ShaderChunk[ 'common' ] = "#define PI 3.14159265359\n#define PI2 6.28318530718\n#define RECIPROCAL_PI 0.31830988618\n#define RECIPROCAL_PI2 0.15915494\n#define LOG2 1.442695\n#define EPSILON 1e-6\n#define saturate(a) clamp( a, 0.0, 1.0 )\n#define whiteCompliment(a) ( 1.0 - saturate( a ) )\nfloat pow2( const in float x ) { return x*x; }\nfloat pow3( const in float x ) { return x*x*x; }\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\nfloat average( const in vec3 color ) { return dot( color, vec3( 0.3333 ) ); }\nhighp float rand( const in vec2 uv ) {\n const highp float a = 12.9898, b = 78.233, c = 43758.5453;\n highp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\n return fract(sin(sn) * c);\n}\nstruct IncidentLight {\n vec3 color;\n vec3 direction;\n bool visible;\n};\nstruct ReflectedLight {\n vec3 directDiffuse;\n vec3 directSpecular;\n vec3 indirectDiffuse;\n vec3 indirectSpecular;\n};\nstruct GeometricContext {\n vec3 position;\n vec3 normal;\n vec3 viewDir;\n};\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n return normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n}\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\n return normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\n}\nvec3 projectOnPlane(in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n float distance = dot( planeNormal, point - pointOnPlane );\n return - distance * planeNormal + point;\n}\nfloat sideOfPlane( in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n return sign( dot( point - pointOnPlane, planeNormal ) );\n}\nvec3 linePlaneIntersect( in vec3 pointOnLine, in vec3 lineDirection, in vec3 pointOnPlane, in vec3 planeNormal ) {\n return lineDirection * ( dot( planeNormal, pointOnPlane - pointOnLine ) / dot( planeNormal, lineDirection ) ) + pointOnLine;\n}\n"; // File:src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl THREE.ShaderChunk[ 'cube_uv_reflection_fragment' ] = "#ifdef ENVMAP_TYPE_CUBE_UV\n#define cubeUV_textureSize (1024.0)\nint getFaceFromDirection(vec3 direction) {\n vec3 absDirection = abs(direction);\n int face = -1;\n if( absDirection.x > absDirection.z ) {\n if(absDirection.x > absDirection.y )\n face = direction.x > 0.0 ? 0 : 3;\n else\n face = direction.y > 0.0 ? 1 : 4;\n }\n else {\n if(absDirection.z > absDirection.y )\n face = direction.z > 0.0 ? 2 : 5;\n else\n face = direction.y > 0.0 ? 1 : 4;\n }\n return face;\n}\n#define cubeUV_maxLods1 (log2(cubeUV_textureSize*0.25) - 1.0)\n#define cubeUV_rangeClamp (exp2((6.0 - 1.0) * 2.0))\nvec2 MipLevelInfo( vec3 vec, float roughnessLevel, float roughness ) {\n float scale = exp2(cubeUV_maxLods1 - roughnessLevel);\n float dxRoughness = dFdx(roughness);\n float dyRoughness = dFdy(roughness);\n vec3 dx = dFdx( vec * scale * dxRoughness );\n vec3 dy = dFdy( vec * scale * dyRoughness );\n float d = max( dot( dx, dx ), dot( dy, dy ) );\n d = clamp(d, 1.0, cubeUV_rangeClamp);\n float mipLevel = 0.5 * log2(d);\n return vec2(floor(mipLevel), fract(mipLevel));\n}\n#define cubeUV_maxLods2 (log2(cubeUV_textureSize*0.25) - 2.0)\n#define cubeUV_rcpTextureSize (1.0 / cubeUV_textureSize)\nvec2 getCubeUV(vec3 direction, float roughnessLevel, float mipLevel) {\n mipLevel = roughnessLevel > cubeUV_maxLods2 - 3.0 ? 0.0 : mipLevel;\n float a = 16.0 * cubeUV_rcpTextureSize;\n vec2 exp2_packed = exp2( vec2( roughnessLevel, mipLevel ) );\n vec2 rcp_exp2_packed = vec2( 1.0 ) / exp2_packed;\n float powScale = exp2_packed.x * exp2_packed.y;\n float scale = rcp_exp2_packed.x * rcp_exp2_packed.y * 0.25;\n float mipOffset = 0.75*(1.0 - rcp_exp2_packed.y) * rcp_exp2_packed.x;\n bool bRes = mipLevel == 0.0;\n scale = bRes && (scale < a) ? a : scale;\n vec3 r;\n vec2 offset;\n int face = getFaceFromDirection(direction);\n float rcpPowScale = 1.0 / powScale;\n if( face == 0) {\n r = vec3(direction.x, -direction.z, direction.y);\n offset = vec2(0.0+mipOffset,0.75 * rcpPowScale);\n offset.y = bRes && (offset.y < 2.0*a) ? a : offset.y;\n }\n else if( face == 1) {\n r = vec3(direction.y, direction.x, direction.z);\n offset = vec2(scale+mipOffset, 0.75 * rcpPowScale);\n offset.y = bRes && (offset.y < 2.0*a) ? a : offset.y;\n }\n else if( face == 2) {\n r = vec3(direction.z, direction.x, direction.y);\n offset = vec2(2.0*scale+mipOffset, 0.75 * rcpPowScale);\n offset.y = bRes && (offset.y < 2.0*a) ? a : offset.y;\n }\n else if( face == 3) {\n r = vec3(direction.x, direction.z, direction.y);\n offset = vec2(0.0+mipOffset,0.5 * rcpPowScale);\n offset.y = bRes && (offset.y < 2.0*a) ? 0.0 : offset.y;\n }\n else if( face == 4) {\n r = vec3(direction.y, direction.x, -direction.z);\n offset = vec2(scale+mipOffset, 0.5 * rcpPowScale);\n offset.y = bRes && (offset.y < 2.0*a) ? 0.0 : offset.y;\n }\n else {\n r = vec3(direction.z, -direction.x, direction.y);\n offset = vec2(2.0*scale+mipOffset, 0.5 * rcpPowScale);\n offset.y = bRes && (offset.y < 2.0*a) ? 0.0 : offset.y;\n }\n r = normalize(r);\n float texelOffset = 0.5 * cubeUV_rcpTextureSize;\n vec2 s = ( r.yz / abs( r.x ) + vec2( 1.0 ) ) * 0.5;\n vec2 base = offset + vec2( texelOffset );\n return base + s * ( scale - 2.0 * texelOffset );\n}\n#define cubeUV_maxLods3 (log2(cubeUV_textureSize*0.25) - 3.0)\nvec4 textureCubeUV(vec3 reflectedDirection, float roughness ) {\n float roughnessVal = roughness* cubeUV_maxLods3;\n float r1 = floor(roughnessVal);\n float r2 = r1 + 1.0;\n float t = fract(roughnessVal);\n vec2 mipInfo = MipLevelInfo(reflectedDirection, r1, roughness);\n float s = mipInfo.y;\n float level0 = mipInfo.x;\n float level1 = level0 + 1.0;\n level1 = level1 > 5.0 ? 5.0 : level1;\n level0 += min( floor( s + 0.5 ), 5.0 );\n vec2 uv_10 = getCubeUV(reflectedDirection, r1, level0);\n vec4 color10 = envMapTexelToLinear(texture2D(envMap, uv_10));\n vec2 uv_20 = getCubeUV(reflectedDirection, r2, level0);\n vec4 color20 = envMapTexelToLinear(texture2D(envMap, uv_20));\n vec4 result = mix(color10, color20, t);\n return vec4(result.rgb, 1.0);\n}\n#endif\n"; // File:src/renderers/shaders/ShaderChunk/defaultnormal_vertex.glsl THREE.ShaderChunk[ 'defaultnormal_vertex' ] = "#ifdef FLIP_SIDED\n objectNormal = -objectNormal;\n#endif\nvec3 transformedNormal = normalMatrix * objectNormal;\n"; // File:src/renderers/shaders/ShaderChunk/displacementmap_vertex.glsl THREE.ShaderChunk[ 'displacementmap_vertex' ] = "#ifdef USE_DISPLACEMENTMAP\n transformed += normal * ( texture2D( displacementMap, uv ).x * displacementScale + displacementBias );\n#endif\n"; // File:src/renderers/shaders/ShaderChunk/displacementmap_pars_vertex.glsl THREE.ShaderChunk[ 'displacementmap_pars_vertex' ] = "#ifdef USE_DISPLACEMENTMAP\n uniform sampler2D displacementMap;\n uniform float displacementScale;\n uniform float displacementBias;\n#endif\n"; // File:src/renderers/shaders/ShaderChunk/emissivemap_fragment.glsl THREE.ShaderChunk[ 'emissivemap_fragment' ] = "#ifdef USE_EMISSIVEMAP\n vec4 emissiveColor = texture2D( emissiveMap, vUv );\n emissiveColor.rgb = emissiveMapTexelToLinear( emissiveColor ).rgb;\n totalEmissiveRadiance *= emissiveColor.rgb;\n#endif\n"; // File:src/renderers/shaders/ShaderChunk/emissivemap_pars_fragment.glsl THREE.ShaderChunk[ 'emissivemap_pars_fragment' ] = "#ifdef USE_EMISSIVEMAP\n uniform sampler2D emissiveMap;\n#endif\n"; // File:src/renderers/shaders/ShaderChunk/encodings_pars_fragment.glsl THREE.ShaderChunk[ 'encodings_pars_fragment' ] = "\nvec4 LinearToLinear( in vec4 value ) {\n return value;\n}\nvec4 GammaToLinear( in vec4 value, in float gammaFactor ) {\n return vec4( pow( value.xyz, vec3( gammaFactor ) ), value.w );\n}\nvec4 LinearToGamma( in vec4 value, in float gammaFactor ) {\n return vec4( pow( value.xyz, vec3( 1.0 / gammaFactor ) ), value.w );\n}\nvec4 sRGBToLinear( in vec4 value ) {\n return vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.w );\n}\nvec4 LinearTosRGB( in vec4 value ) {\n return vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.w );\n}\nvec4 RGBEToLinear( in vec4 value ) {\n return vec4( value.rgb * exp2( value.a * 255.0 - 128.0 ), 1.0 );\n}\nvec4 LinearToRGBE( in vec4 value ) {\n float maxComponent = max( max( value.r, value.g ), value.b );\n float fExp = clamp( ceil( log2( maxComponent ) ), -128.0, 127.0 );\n return vec4( value.rgb / exp2( fExp ), ( fExp + 128.0 ) / 255.0 );\n}\nvec4 RGBMToLinear( in vec4 value, in float maxRange ) {\n return vec4( value.xyz * value.w * maxRange, 1.0 );\n}\nvec4 LinearToRGBM( in vec4 value, in float maxRange ) {\n float maxRGB = max( value.x, max( value.g, value.b ) );\n float M = clamp( maxRGB / maxRange, 0.0, 1.0 );\n M = ceil( M * 255.0 ) / 255.0;\n return vec4( value.rgb / ( M * maxRange ), M );\n}\nvec4 RGBDToLinear( in vec4 value, in float maxRange ) {\n return vec4( value.rgb * ( ( maxRange / 255.0 ) / value.a ), 1.0 );\n}\nvec4 LinearToRGBD( in vec4 value, in float maxRange ) {\n float maxRGB = max( value.x, max( value.g, value.b ) );\n float D = max( maxRange / maxRGB, 1.0 );\n D = min( floor( D ) / 255.0, 1.0 );\n return vec4( value.rgb * ( D * ( 255.0 / maxRange ) ), D );\n}\nconst mat3 cLogLuvM = mat3( 0.2209, 0.3390, 0.4184, 0.1138, 0.6780, 0.7319, 0.0102, 0.1130, 0.2969 );\nvec4 LinearToLogLuv( in vec4 value ) {\n vec3 Xp_Y_XYZp = value.rgb * cLogLuvM;\n Xp_Y_XYZp = max(Xp_Y_XYZp, vec3(1e-6, 1e-6, 1e-6));\n vec4 vResult;\n vResult.xy = Xp_Y_XYZp.xy / Xp_Y_XYZp.z;\n float Le = 2.0 * log2(Xp_Y_XYZp.y) + 127.0;\n vResult.w = fract(Le);\n vResult.z = (Le - (floor(vResult.w*255.0))/255.0)/255.0;\n return vResult;\n}\nconst mat3 cLogLuvInverseM = mat3( 6.0014, -2.7008, -1.7996, -1.3320, 3.1029, -5.7721, 0.3008, -1.0882, 5.6268 );\nvec4 LogLuvToLinear( in vec4 value ) {\n float Le = value.z * 255.0 + value.w;\n vec3 Xp_Y_XYZp;\n Xp_Y_XYZp.y = exp2((Le - 127.0) / 2.0);\n Xp_Y_XYZp.z = Xp_Y_XYZp.y / value.y;\n Xp_Y_XYZp.x = value.x * Xp_Y_XYZp.z;\n vec3 vRGB = Xp_Y_XYZp.rgb * cLogLuvInverseM;\n return vec4( max(vRGB, 0.0), 1.0 );\n}\n"; // File:src/renderers/shaders/ShaderChunk/encodings_fragment.glsl THREE.ShaderChunk[ 'encodings_fragment' ] = " gl_FragColor = linearToOutputTexel( gl_FragColor );\n"; // File:src/renderers/shaders/ShaderChunk/envmap_fragment.glsl THREE.ShaderChunk[ 'envmap_fragment' ] = "#ifdef USE_ENVMAP\n #if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n vec3 cameraToVertex = normalize( vWorldPosition - cameraPosition );\n vec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n #ifdef ENVMAP_MODE_REFLECTION\n vec3 reflectVec = reflect( cameraToVertex, worldNormal );\n #else\n vec3 reflectVec = refract( cameraToVertex, worldNormal, refractionRatio );\n #endif\n #else\n vec3 reflectVec = vReflect;\n #endif\n #ifdef ENVMAP_TYPE_CUBE\n vec4 envColor = textureCube( envMap, flipNormal * vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n #elif defined( ENVMAP_TYPE_EQUIREC )\n vec2 sampleUV;\n sampleUV.y = saturate( flipNormal * reflectVec.y * 0.5 + 0.5 );\n sampleUV.x = atan( flipNormal * reflectVec.z, flipNormal * reflectVec.x ) * RECIPROCAL_PI2 + 0.5;\n vec4 envColor = texture2D( envMap, sampleUV );\n #elif defined( ENVMAP_TYPE_SPHERE )\n vec3 reflectView = flipNormal * normalize( ( viewMatrix * vec4( reflectVec, 0.0 ) ).xyz + vec3( 0.0, 0.0, 1.0 ) );\n vec4 envColor = texture2D( envMap, reflectView.xy * 0.5 + 0.5 );\n #endif\n envColor = envMapTexelToLinear( envColor );\n #ifdef ENVMAP_BLENDING_MULTIPLY\n outgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\n #elif defined( ENVMAP_BLENDING_MIX )\n outgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\n #elif defined( ENVMAP_BLENDING_ADD )\n outgoingLight += envColor.xyz * specularStrength * reflectivity;\n #endif\n#endif\n"; // File:src/renderers/shaders/ShaderChunk/envmap_pars_fragment.glsl THREE.ShaderChunk[ 'envmap_pars_fragment' ] = "#if defined( USE_ENVMAP ) || defined( PHYSICAL )\n uniform float reflectivity;\n uniform float envMapIntenstiy;\n#endif\n#ifdef USE_ENVMAP\n #if ! defined( PHYSICAL ) && ( defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) )\n varying vec3 vWorldPosition;\n #endif\n #ifdef ENVMAP_TYPE_CUBE\n uniform samplerCube envMap;\n #else\n uniform sampler2D envMap;\n #endif\n uniform float flipEnvMap;\n #if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( PHYSICAL )\n uniform float refractionRatio;\n #else\n varying vec3 vReflect;\n #endif\n#endif\n"; // File:src/renderers/shaders/ShaderChunk/envmap_pars_vertex.glsl THREE.ShaderChunk[ 'envmap_pars_vertex' ] = "#ifdef USE_ENVMAP\n #if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n varying vec3 vWorldPosition;\n #else\n varying vec3 vReflect;\n uniform float refractionRatio;\n #endif\n#endif\n"; // File:src/renderers/shaders/ShaderChunk/envmap_vertex.glsl THREE.ShaderChunk[ 'envmap_vertex' ] = "#ifdef USE_ENVMAP\n #if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n vWorldPosition = worldPosition.xyz;\n #else\n vec3 cameraToVertex = normalize( worldPosition.xyz - cameraPosition );\n vec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n #ifdef ENVMAP_MODE_REFLECTION\n vReflect = reflect( cameraToVertex, worldNormal );\n #else\n vReflect = refract( cameraToVertex, worldNormal, refractionRatio );\n #endif\n #endif\n#endif\n"; // File:src/renderers/shaders/ShaderChunk/fog_fragment.glsl THREE.ShaderChunk[ 'fog_fragment' ] = "#ifdef USE_FOG\n #ifdef USE_LOGDEPTHBUF_EXT\n float depth = gl_FragDepthEXT / gl_FragCoord.w;\n #else\n float depth = gl_FragCoord.z / gl_FragCoord.w;\n #endif\n #ifdef FOG_EXP2\n float fogFactor = whiteCompliment( exp2( - fogDensity * fogDensity * depth * depth * LOG2 ) );\n #else\n float fogFactor = smoothstep( fogNear, fogFar, depth );\n #endif\n gl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\n#endif\n"; // File:src/renderers/shaders/ShaderChunk/fog_pars_fragment.glsl THREE.ShaderChunk[ 'fog_pars_fragment' ] = "#ifdef USE_FOG\n uniform vec3 fogColor;\n #ifdef FOG_EXP2\n uniform float fogDensity;\n #else\n uniform float fogNear;\n uniform float fogFar;\n #endif\n#endif"; // File:src/renderers/shaders/ShaderChunk/lightmap_fragment.glsl THREE.ShaderChunk[ 'lightmap_fragment' ] = "#ifdef USE_LIGHTMAP\n reflectedLight.indirectDiffuse += PI * texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;\n#endif\n"; // File:src/renderers/shaders/ShaderChunk/lightmap_pars_fragment.glsl THREE.ShaderChunk[ 'lightmap_pars_fragment' ] = "#ifdef USE_LIGHTMAP\n uniform sampler2D lightMap;\n uniform float lightMapIntensity;\n#endif"; // File:src/renderers/shaders/ShaderChunk/lights_lambert_vertex.glsl THREE.ShaderChunk[ 'lights_lambert_vertex' ] = "vec3 diffuse = vec3( 1.0 );\nGeometricContext geometry;\ngeometry.position = mvPosition.xyz;\ngeometry.normal = normalize( transformedNormal );\ngeometry.viewDir = normalize( -mvPosition.xyz );\nGeometricContext backGeometry;\nbackGeometry.position = geometry.position;\nbackGeometry.normal = -geometry.normal;\nbackGeometry.viewDir = geometry.viewDir;\nvLightFront = vec3( 0.0 );\n#ifdef DOUBLE_SIDED\n vLightBack = vec3( 0.0 );\n#endif\nIncidentLight directLight;\nfloat dotNL;\nvec3 directLightColor_Diffuse;\n#if NUM_POINT_LIGHTS > 0\n for ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n getPointDirectLightIrradiance( pointLights[ i ], geometry, directLight );\n dotNL = dot( geometry.normal, directLight.direction );\n directLightColor_Diffuse = PI * directLight.color;\n vLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n #ifdef DOUBLE_SIDED\n vLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n #endif\n }\n#endif\n#if NUM_SPOT_LIGHTS > 0\n for ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n getSpotDirectLightIrradiance( spotLights[ i ], geometry, directLight );\n dotNL = dot( geometry.normal, directLight.direction );\n directLightColor_Diffuse = PI * directLight.color;\n vLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n #ifdef DOUBLE_SIDED\n vLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n #endif\n }\n#endif\n#if NUM_DIR_LIGHTS > 0\n for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n getDirectionalDirectLightIrradiance( directionalLights[ i ], geometry, directLight );\n dotNL = dot( geometry.normal, directLight.direction );\n directLightColor_Diffuse = PI * directLight.color;\n vLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n #ifdef DOUBLE_SIDED\n vLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n #endif\n }\n#endif\n#if NUM_HEMI_LIGHTS > 0\n for ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n vLightFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n #ifdef DOUBLE_SIDED\n vLightBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry );\n #endif\n }\n#endif\n"; // File:src/renderers/shaders/ShaderChunk/lights_pars.glsl THREE.ShaderChunk[ 'lights_pars' ] = "uniform vec3 ambientLightColor;\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\n vec3 irradiance = ambientLightColor;\n #ifndef PHYSICALLY_CORRECT_LIGHTS\n irradiance *= PI;\n #endif\n return irradiance;\n}\n#if NUM_DIR_LIGHTS > 0\n struct DirectionalLight {\n vec3 direction;\n vec3 color;\n int shadow;\n float shadowBias;\n float shadowRadius;\n vec2 shadowMapSize;\n };\n uniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\n void getDirectionalDirectLightIrradiance( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n directLight.color = directionalLight.color;\n directLight.direction = directionalLight.direction;\n directLight.visible = true;\n }\n#endif\n#if NUM_POINT_LIGHTS > 0\n struct PointLight {\n vec3 position;\n vec3 color;\n float distance;\n float decay;\n int shadow;\n float shadowBias;\n float shadowRadius;\n vec2 shadowMapSize;\n };\n uniform PointLight pointLights[ NUM_POINT_LIGHTS ];\n void getPointDirectLightIrradiance( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n vec3 lVector = pointLight.position - geometry.position;\n directLight.direction = normalize( lVector );\n float lightDistance = length( lVector );\n if ( testLightInRange( lightDistance, pointLight.distance ) ) {\n directLight.color = pointLight.color;\n directLight.color *= punctualLightIntensityToIrradianceFactor( lightDistance, pointLight.distance, pointLight.decay );\n directLight.visible = true;\n } else {\n directLight.color = vec3( 0.0 );\n directLight.visible = false;\n }\n }\n#endif\n#if NUM_SPOT_LIGHTS > 0\n struct SpotLight {\n vec3 position;\n vec3 direction;\n vec3 color;\n float distance;\n float decay;\n float coneCos;\n float penumbraCos;\n int shadow;\n float shadowBias;\n float shadowRadius;\n vec2 shadowMapSize;\n };\n uniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\n void getSpotDirectLightIrradiance( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n vec3 lVector = spotLight.position - geometry.position;\n directLight.direction = normalize( lVector );\n float lightDistance = length( lVector );\n float angleCos = dot( directLight.direction, spotLight.direction );\n if ( all( bvec2( angleCos > spotLight.coneCos, testLightInRange( lightDistance, spotLight.distance ) ) ) ) {\n float spotEffect = smoothstep( spotLight.coneCos, spotLight.penumbraCos, angleCos );\n directLight.color = spotLight.color;\n directLight.color *= spotEffect * punctualLightIntensityToIrradianceFactor( lightDistance, spotLight.distance, spotLight.decay );\n directLight.visible = true;\n } else {\n directLight.color = vec3( 0.0 );\n directLight.visible = false;\n }\n }\n#endif\n#if NUM_HEMI_LIGHTS > 0\n struct HemisphereLight {\n vec3 direction;\n vec3 skyColor;\n vec3 groundColor;\n };\n uniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\n vec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in GeometricContext geometry ) {\n float dotNL = dot( geometry.normal, hemiLight.direction );\n float hemiDiffuseWeight = 0.5 * dotNL + 0.5;\n vec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\n #ifndef PHYSICALLY_CORRECT_LIGHTS\n irradiance *= PI;\n #endif\n return irradiance;\n }\n#endif\n#if defined( USE_ENVMAP ) && defined( PHYSICAL )\n vec3 getLightProbeIndirectIrradiance( const in GeometricContext geometry, const in int maxMIPLevel ) {\n #include \n vec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n #ifdef ENVMAP_TYPE_CUBE\n vec3 queryVec = flipNormal * vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\n #ifdef TEXTURE_LOD_EXT\n vec4 envMapColor = textureCubeLodEXT( envMap, queryVec, float( maxMIPLevel ) );\n #else\n vec4 envMapColor = textureCube( envMap, queryVec, float( maxMIPLevel ) );\n #endif\n envMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n #elif defined( ENVMAP_TYPE_CUBE_UV )\n vec3 queryVec = flipNormal * vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\n vec4 envMapColor = textureCubeUV( queryVec, 1.0 );\n #else\n vec4 envMapColor = vec4( 0.0 );\n #endif\n return PI * envMapColor.rgb * envMapIntensity;\n }\n float getSpecularMIPLevel( const in float blinnShininessExponent, const in int maxMIPLevel ) {\n float maxMIPLevelScalar = float( maxMIPLevel );\n float desiredMIPLevel = maxMIPLevelScalar - 0.79248 - 0.5 * log2( pow2( blinnShininessExponent ) + 1.0 );\n return clamp( desiredMIPLevel, 0.0, maxMIPLevelScalar );\n }\n vec3 getLightProbeIndirectRadiance( const in GeometricContext geometry, const in float blinnShininessExponent, const in int maxMIPLevel ) {\n #ifdef ENVMAP_MODE_REFLECTION\n vec3 reflectVec = reflect( -geometry.viewDir, geometry.normal );\n #else\n vec3 reflectVec = refract( -geometry.viewDir, geometry.normal, refractionRatio );\n #endif\n #include \n reflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n float specularMIPLevel = getSpecularMIPLevel( blinnShininessExponent, maxMIPLevel );\n #ifdef ENVMAP_TYPE_CUBE\n vec3 queryReflectVec = flipNormal * vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\n #ifdef TEXTURE_LOD_EXT\n vec4 envMapColor = textureCubeLodEXT( envMap, queryReflectVec, specularMIPLevel );\n #else\n vec4 envMapColor = textureCube( envMap, queryReflectVec, specularMIPLevel );\n #endif\n envMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n #elif defined( ENVMAP_TYPE_CUBE_UV )\n vec3 queryReflectVec = flipNormal * vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\n vec4 envMapColor = textureCubeUV(queryReflectVec, BlinnExponentToGGXRoughness(blinnShininessExponent));\n #elif defined( ENVMAP_TYPE_EQUIREC )\n vec2 sampleUV;\n sampleUV.y = saturate( flipNormal * reflectVec.y * 0.5 + 0.5 );\n sampleUV.x = atan( flipNormal * reflectVec.z, flipNormal * reflectVec.x ) * RECIPROCAL_PI2 + 0.5;\n #ifdef TEXTURE_LOD_EXT\n vec4 envMapColor = texture2DLodEXT( envMap, sampleUV, specularMIPLevel );\n #else\n vec4 envMapColor = texture2D( envMap, sampleUV, specularMIPLevel );\n #endif\n envMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n #elif defined( ENVMAP_TYPE_SPHERE )\n vec3 reflectView = flipNormal * normalize( ( viewMatrix * vec4( reflectVec, 0.0 ) ).xyz + vec3( 0.0,0.0,1.0 ) );\n #ifdef TEXTURE_LOD_EXT\n vec4 envMapColor = texture2DLodEXT( envMap, reflectView.xy * 0.5 + 0.5, specularMIPLevel );\n #else\n vec4 envMapColor = texture2D( envMap, reflectView.xy * 0.5 + 0.5, specularMIPLevel );\n #endif\n envMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n #endif\n return envMapColor.rgb * envMapIntensity;\n }\n#endif\n"; // File:src/renderers/shaders/ShaderChunk/lights_phong_fragment.glsl THREE.ShaderChunk[ 'lights_phong_fragment' ] = "BlinnPhongMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularColor = specular;\nmaterial.specularShininess = shininess;\nmaterial.specularStrength = specularStrength;\n"; // File:src/renderers/shaders/ShaderChunk/lights_phong_pars_fragment.glsl THREE.ShaderChunk[ 'lights_phong_pars_fragment' ] = "varying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n varying vec3 vNormal;\n#endif\nstruct BlinnPhongMaterial {\n vec3 diffuseColor;\n vec3 specularColor;\n float specularShininess;\n float specularStrength;\n};\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n float dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n vec3 irradiance = dotNL * directLight.color;\n #ifndef PHYSICALLY_CORRECT_LIGHTS\n irradiance *= PI;\n #endif\n reflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n reflectedLight.directSpecular += irradiance * BRDF_Specular_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess ) * material.specularStrength;\n}\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n reflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\n#define RE_Direct RE_Direct_BlinnPhong\n#define RE_IndirectDiffuse RE_IndirectDiffuse_BlinnPhong\n#define Material_LightProbeLOD( material ) (0)\n"; // File:src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl THREE.ShaderChunk[ 'lights_physical_fragment' ] = "PhysicalMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\nmaterial.specularRoughness = clamp( roughnessFactor, 0.04, 1.0 );\n#ifdef STANDARD\n material.specularColor = mix( vec3( DEFAULT_SPECULAR_COEFFICIENT ), diffuseColor.rgb, metalnessFactor );\n#else\n material.specularColor = mix( vec3( MAXIMUM_SPECULAR_COEFFICIENT * pow2( reflectivity ) ), diffuseColor.rgb, metalnessFactor );\n material.clearCoat = saturate( clearCoat ); material.clearCoatRoughness = clamp( clearCoatRoughness, 0.04, 1.0 );\n#endif\n"; // File:src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl THREE.ShaderChunk[ 'lights_physical_pars_fragment' ] = "struct PhysicalMaterial {\n vec3 diffuseColor;\n float specularRoughness;\n vec3 specularColor;\n #ifndef STANDARD\n float clearCoat;\n float clearCoatRoughness;\n #endif\n};\n#define MAXIMUM_SPECULAR_COEFFICIENT 0.16\n#define DEFAULT_SPECULAR_COEFFICIENT 0.04\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n float dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n vec3 irradiance = dotNL * directLight.color;\n #ifndef PHYSICALLY_CORRECT_LIGHTS\n irradiance *= PI;\n #endif\n reflectedLight.directSpecular += irradiance * BRDF_Specular_GGX( directLight, geometry, material.specularColor, material.specularRoughness );\n reflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n #ifndef STANDARD\n reflectedLight.directSpecular += irradiance * material.clearCoat * BRDF_Specular_GGX( directLight, geometry, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearCoatRoughness );\n #endif\n}\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n reflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 clearCoatRadiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n reflectedLight.indirectSpecular += radiance * BRDF_Specular_GGX_Environment( geometry, material.specularColor, material.specularRoughness );\n #ifndef STANDARD\n reflectedLight.indirectSpecular += clearCoatRadiance * material.clearCoat * BRDF_Specular_GGX_Environment( geometry, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearCoatRoughness );\n #endif\n}\n#define RE_Direct RE_Direct_Physical\n#define RE_IndirectDiffuse RE_IndirectDiffuse_Physical\n#define RE_IndirectSpecular RE_IndirectSpecular_Physical\n#define Material_BlinnShininessExponent( material ) GGXRoughnessToBlinnExponent( material.specularRoughness )\n#define Material_ClearCoat_BlinnShininessExponent( material ) GGXRoughnessToBlinnExponent( material.clearCoatRoughness )\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\n return saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\n}\n"; // File:src/renderers/shaders/ShaderChunk/lights_template.glsl THREE.ShaderChunk[ 'lights_template' ] = "\nGeometricContext geometry;\ngeometry.position = - vViewPosition;\ngeometry.normal = normal;\ngeometry.viewDir = normalize( vViewPosition );\nIncidentLight directLight;\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\n PointLight pointLight;\n for ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n pointLight = pointLights[ i ];\n getPointDirectLightIrradiance( pointLight, geometry, directLight );\n #ifdef USE_SHADOWMAP\n directLight.color *= all( bvec2( pointLight.shadow, directLight.visible ) ) ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ] ) : 1.0;\n #endif\n RE_Direct( directLight, geometry, material, reflectedLight );\n }\n#endif\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\n SpotLight spotLight;\n for ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n spotLight = spotLights[ i ];\n getSpotDirectLightIrradiance( spotLight, geometry, directLight );\n #ifdef USE_SHADOWMAP\n directLight.color *= all( bvec2( spotLight.shadow, directLight.visible ) ) ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n #endif\n RE_Direct( directLight, geometry, material, reflectedLight );\n }\n#endif\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\n DirectionalLight directionalLight;\n for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n directionalLight = directionalLights[ i ];\n getDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );\n #ifdef USE_SHADOWMAP\n directLight.color *= all( bvec2( directionalLight.shadow, directLight.visible ) ) ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n #endif\n RE_Direct( directLight, geometry, material, reflectedLight );\n }\n#endif\n#if defined( RE_IndirectDiffuse )\n vec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\n #ifdef USE_LIGHTMAP\n vec3 lightMapIrradiance = texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;\n #ifndef PHYSICALLY_CORRECT_LIGHTS\n lightMapIrradiance *= PI;\n #endif\n irradiance += lightMapIrradiance;\n #endif\n #if ( NUM_HEMI_LIGHTS > 0 )\n for ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n irradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n }\n #endif\n #if defined( USE_ENVMAP ) && defined( PHYSICAL ) && defined( ENVMAP_TYPE_CUBE_UV )\n irradiance += getLightProbeIndirectIrradiance( geometry, 8 );\n #endif\n RE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\n#endif\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\n vec3 radiance = getLightProbeIndirectRadiance( geometry, Material_BlinnShininessExponent( material ), 8 );\n #ifndef STANDARD\n vec3 clearCoatRadiance = getLightProbeIndirectRadiance( geometry, Material_ClearCoat_BlinnShininessExponent( material ), 8 );\n #else\n vec3 clearCoatRadiance = vec3( 0.0 );\n #endif\n \n RE_IndirectSpecular( radiance, clearCoatRadiance, geometry, material, reflectedLight );\n#endif\n"; // File:src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl THREE.ShaderChunk[ 'logdepthbuf_fragment' ] = "#if defined(USE_LOGDEPTHBUF) && defined(USE_LOGDEPTHBUF_EXT)\n gl_FragDepthEXT = log2(vFragDepth) * logDepthBufFC * 0.5;\n#endif"; // File:src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl THREE.ShaderChunk[ 'logdepthbuf_pars_fragment' ] = "#ifdef USE_LOGDEPTHBUF\n uniform float logDepthBufFC;\n #ifdef USE_LOGDEPTHBUF_EXT\n varying float vFragDepth;\n #endif\n#endif\n"; // File:src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl THREE.ShaderChunk[ 'logdepthbuf_pars_vertex' ] = "#ifdef USE_LOGDEPTHBUF\n #ifdef USE_LOGDEPTHBUF_EXT\n varying float vFragDepth;\n #endif\n uniform float logDepthBufFC;\n#endif"; // File:src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl THREE.ShaderChunk[ 'logdepthbuf_vertex' ] = "#ifdef USE_LOGDEPTHBUF\n gl_Position.z = log2(max( EPSILON, gl_Position.w + 1.0 )) * logDepthBufFC;\n #ifdef USE_LOGDEPTHBUF_EXT\n vFragDepth = 1.0 + gl_Position.w;\n #else\n gl_Position.z = (gl_Position.z - 1.0) * gl_Position.w;\n #endif\n#endif\n"; // File:src/renderers/shaders/ShaderChunk/map_fragment.glsl THREE.ShaderChunk[ 'map_fragment' ] = "#ifdef USE_MAP\n vec4 texelColor = texture2D( map, vUv );\n texelColor = mapTexelToLinear( texelColor );\n diffuseColor *= texelColor;\n#endif\n"; // File:src/renderers/shaders/ShaderChunk/map_pars_fragment.glsl THREE.ShaderChunk[ 'map_pars_fragment' ] = "#ifdef USE_MAP\n uniform sampler2D map;\n#endif\n"; // File:src/renderers/shaders/ShaderChunk/map_particle_fragment.glsl THREE.ShaderChunk[ 'map_particle_fragment' ] = "#ifdef USE_MAP\n vec4 mapTexel = texture2D( map, vec2( gl_PointCoord.x, 1.0 - gl_PointCoord.y ) * offsetRepeat.zw + offsetRepeat.xy );\n diffuseColor *= mapTexelToLinear( mapTexel );\n#endif\n"; // File:src/renderers/shaders/ShaderChunk/map_particle_pars_fragment.glsl THREE.ShaderChunk[ 'map_particle_pars_fragment' ] = "#ifdef USE_MAP\n uniform vec4 offsetRepeat;\n uniform sampler2D map;\n#endif\n"; // File:src/renderers/shaders/ShaderChunk/metalnessmap_fragment.glsl THREE.ShaderChunk[ 'metalnessmap_fragment' ] = "float metalnessFactor = metalness;\n#ifdef USE_METALNESSMAP\n vec4 texelMetalness = texture2D( metalnessMap, vUv );\n metalnessFactor *= texelMetalness.r;\n#endif\n"; // File:src/renderers/shaders/ShaderChunk/metalnessmap_pars_fragment.glsl THREE.ShaderChunk[ 'metalnessmap_pars_fragment' ] = "#ifdef USE_METALNESSMAP\n uniform sampler2D metalnessMap;\n#endif"; // File:src/renderers/shaders/ShaderChunk/morphnormal_vertex.glsl THREE.ShaderChunk[ 'morphnormal_vertex' ] = "#ifdef USE_MORPHNORMALS\n objectNormal += ( morphNormal0 - normal ) * morphTargetInfluences[ 0 ];\n objectNormal += ( morphNormal1 - normal ) * morphTargetInfluences[ 1 ];\n objectNormal += ( morphNormal2 - normal ) * morphTargetInfluences[ 2 ];\n objectNormal += ( morphNormal3 - normal ) * morphTargetInfluences[ 3 ];\n#endif\n"; // File:src/renderers/shaders/ShaderChunk/morphtarget_pars_vertex.glsl THREE.ShaderChunk[ 'morphtarget_pars_vertex' ] = "#ifdef USE_MORPHTARGETS\n #ifndef USE_MORPHNORMALS\n uniform float morphTargetInfluences[ 8 ];\n #else\n uniform float morphTargetInfluences[ 4 ];\n #endif\n#endif"; // File:src/renderers/shaders/ShaderChunk/morphtarget_vertex.glsl THREE.ShaderChunk[ 'morphtarget_vertex' ] = "#ifdef USE_MORPHTARGETS\n transformed += ( morphTarget0 - position ) * morphTargetInfluences[ 0 ];\n transformed += ( morphTarget1 - position ) * morphTargetInfluences[ 1 ];\n transformed += ( morphTarget2 - position ) * morphTargetInfluences[ 2 ];\n transformed += ( morphTarget3 - position ) * morphTargetInfluences[ 3 ];\n #ifndef USE_MORPHNORMALS\n transformed += ( morphTarget4 - position ) * morphTargetInfluences[ 4 ];\n transformed += ( morphTarget5 - position ) * morphTargetInfluences[ 5 ];\n transformed += ( morphTarget6 - position ) * morphTargetInfluences[ 6 ];\n transformed += ( morphTarget7 - position ) * morphTargetInfluences[ 7 ];\n #endif\n#endif\n"; // File:src/renderers/shaders/ShaderChunk/normal_flip.glsl THREE.ShaderChunk[ 'normal_flip' ] = "#ifdef DOUBLE_SIDED\n float flipNormal = ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n#else\n float flipNormal = 1.0;\n#endif\n"; // File:src/renderers/shaders/ShaderChunk/normal_fragment.glsl THREE.ShaderChunk[ 'normal_fragment' ] = "#ifdef FLAT_SHADED\n vec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );\n vec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );\n vec3 normal = normalize( cross( fdx, fdy ) );\n#else\n vec3 normal = normalize( vNormal ) * flipNormal;\n#endif\n#ifdef USE_NORMALMAP\n normal = perturbNormal2Arb( -vViewPosition, normal );\n#elif defined( USE_BUMPMAP )\n normal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd() );\n#endif\n"; // File:src/renderers/shaders/ShaderChunk/normalmap_pars_fragment.glsl THREE.ShaderChunk[ 'normalmap_pars_fragment' ] = "#ifdef USE_NORMALMAP\n uniform sampler2D normalMap;\n uniform vec2 normalScale;\n vec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm ) {\n vec3 q0 = dFdx( eye_pos.xyz );\n vec3 q1 = dFdy( eye_pos.xyz );\n vec2 st0 = dFdx( vUv.st );\n vec2 st1 = dFdy( vUv.st );\n vec3 S = normalize( q0 * st1.t - q1 * st0.t );\n vec3 T = normalize( -q0 * st1.s + q1 * st0.s );\n vec3 N = normalize( surf_norm );\n vec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n mapN.xy = normalScale * mapN.xy;\n mat3 tsn = mat3( S, T, N );\n return normalize( tsn * mapN );\n }\n#endif\n"; // File:src/renderers/shaders/ShaderChunk/packing.glsl THREE.ShaderChunk[ 'packing' ] = "vec3 packNormalToRGB( const in vec3 normal ) {\n return normalize( normal ) * 0.5 + 0.5;\n}\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\n return 1.0 - 2.0 * rgb.xyz;\n}\nconst float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;\nconst vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256., 256. );\nconst vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. );\nconst float ShiftRight8 = 1. / 256.;\nvec4 packDepthToRGBA( const in float v ) {\n vec4 r = vec4( fract( v * PackFactors ), v );\n r.yzw -= r.xyz * ShiftRight8; return r * PackUpscale;\n}\nfloat unpackRGBAToDepth( const in vec4 v ) {\n return dot( v, UnpackFactors );\n}\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\n return ( viewZ + near ) / ( near - far );\n}\nfloat orthographicDepthToViewZ( const in float linearClipZ, const in float near, const in float far ) {\n return linearClipZ * ( near - far ) - near;\n}\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\n return (( near + viewZ ) * far ) / (( far - near ) * viewZ );\n}\nfloat perspectiveDepthToViewZ( const in float invClipZ, const in float near, const in float far ) {\n return ( near * far ) / ( ( far - near ) * invClipZ - far );\n}\n"; // File:src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl THREE.ShaderChunk[ 'premultiplied_alpha_fragment' ] = "#ifdef PREMULTIPLIED_ALPHA\n gl_FragColor.rgb *= gl_FragColor.a;\n#endif\n"; // File:src/renderers/shaders/ShaderChunk/project_vertex.glsl THREE.ShaderChunk[ 'project_vertex' ] = "#ifdef USE_SKINNING\n vec4 mvPosition = modelViewMatrix * skinned;\n#else\n vec4 mvPosition = modelViewMatrix * vec4( transformed, 1.0 );\n#endif\ngl_Position = projectionMatrix * mvPosition;\n"; // File:src/renderers/shaders/ShaderChunk/roughnessmap_fragment.glsl THREE.ShaderChunk[ 'roughnessmap_fragment' ] = "float roughnessFactor = roughness;\n#ifdef USE_ROUGHNESSMAP\n vec4 texelRoughness = texture2D( roughnessMap, vUv );\n roughnessFactor *= texelRoughness.r;\n#endif\n"; // File:src/renderers/shaders/ShaderChunk/roughnessmap_pars_fragment.glsl THREE.ShaderChunk[ 'roughnessmap_pars_fragment' ] = "#ifdef USE_ROUGHNESSMAP\n uniform sampler2D roughnessMap;\n#endif"; // File:src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl THREE.ShaderChunk[ 'shadowmap_pars_fragment' ] = "#ifdef USE_SHADOWMAP\n #if NUM_DIR_LIGHTS > 0\n uniform sampler2D directionalShadowMap[ NUM_DIR_LIGHTS ];\n varying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHTS ];\n #endif\n #if NUM_SPOT_LIGHTS > 0\n uniform sampler2D spotShadowMap[ NUM_SPOT_LIGHTS ];\n varying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHTS ];\n #endif\n #if NUM_POINT_LIGHTS > 0\n uniform sampler2D pointShadowMap[ NUM_POINT_LIGHTS ];\n varying vec4 vPointShadowCoord[ NUM_POINT_LIGHTS ];\n #endif\n float texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\n return step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\n }\n float texture2DShadowLerp( sampler2D depths, vec2 size, vec2 uv, float compare ) {\n const vec2 offset = vec2( 0.0, 1.0 );\n vec2 texelSize = vec2( 1.0 ) / size;\n vec2 centroidUV = floor( uv * size + 0.5 ) / size;\n float lb = texture2DCompare( depths, centroidUV + texelSize * offset.xx, compare );\n float lt = texture2DCompare( depths, centroidUV + texelSize * offset.xy, compare );\n float rb = texture2DCompare( depths, centroidUV + texelSize * offset.yx, compare );\n float rt = texture2DCompare( depths, centroidUV + texelSize * offset.yy, compare );\n vec2 f = fract( uv * size + 0.5 );\n float a = mix( lb, lt, f.y );\n float b = mix( rb, rt, f.y );\n float c = mix( a, b, f.x );\n return c;\n }\n float getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n shadowCoord.xyz /= shadowCoord.w;\n shadowCoord.z += shadowBias;\n bvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\n bool inFrustum = all( inFrustumVec );\n bvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\n bool frustumTest = all( frustumTestVec );\n if ( frustumTest ) {\n #if defined( SHADOWMAP_TYPE_PCF )\n vec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n float dx0 = - texelSize.x * shadowRadius;\n float dy0 = - texelSize.y * shadowRadius;\n float dx1 = + texelSize.x * shadowRadius;\n float dy1 = + texelSize.y * shadowRadius;\n return (\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n ) * ( 1.0 / 9.0 );\n #elif defined( SHADOWMAP_TYPE_PCF_SOFT )\n vec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n float dx0 = - texelSize.x * shadowRadius;\n float dy0 = - texelSize.y * shadowRadius;\n float dx1 = + texelSize.x * shadowRadius;\n float dy1 = + texelSize.y * shadowRadius;\n return (\n texture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n texture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n texture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n texture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n texture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy, shadowCoord.z ) +\n texture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n texture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n texture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n texture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n ) * ( 1.0 / 9.0 );\n #else\n return texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\n #endif\n }\n return 1.0;\n }\n vec2 cubeToUV( vec3 v, float texelSizeY ) {\n vec3 absV = abs( v );\n float scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\n absV *= scaleToCube;\n v *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\n vec2 planar = v.xy;\n float almostATexel = 1.5 * texelSizeY;\n float almostOne = 1.0 - almostATexel;\n if ( absV.z >= almostOne ) {\n if ( v.z > 0.0 )\n planar.x = 4.0 - v.x;\n } else if ( absV.x >= almostOne ) {\n float signX = sign( v.x );\n planar.x = v.z * signX + 2.0 * signX;\n } else if ( absV.y >= almostOne ) {\n float signY = sign( v.y );\n planar.x = v.x + 2.0 * signY + 2.0;\n planar.y = v.z * signY - 2.0;\n }\n return vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\n }\n float getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n vec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\n vec3 lightToPosition = shadowCoord.xyz;\n vec3 bd3D = normalize( lightToPosition );\n float dp = ( length( lightToPosition ) - shadowBias ) / 1000.0;\n #if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT )\n vec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\n return (\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\n ) * ( 1.0 / 9.0 );\n #else\n return texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\n #endif\n }\n#endif\n"; // File:src/renderers/shaders/ShaderChunk/shadowmap_pars_vertex.glsl THREE.ShaderChunk[ 'shadowmap_pars_vertex' ] = "#ifdef USE_SHADOWMAP\n #if NUM_DIR_LIGHTS > 0\n uniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHTS ];\n varying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHTS ];\n #endif\n #if NUM_SPOT_LIGHTS > 0\n uniform mat4 spotShadowMatrix[ NUM_SPOT_LIGHTS ];\n varying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHTS ];\n #endif\n #if NUM_POINT_LIGHTS > 0\n uniform mat4 pointShadowMatrix[ NUM_POINT_LIGHTS ];\n varying vec4 vPointShadowCoord[ NUM_POINT_LIGHTS ];\n #endif\n#endif\n"; // File:src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl THREE.ShaderChunk[ 'shadowmap_vertex' ] = "#ifdef USE_SHADOWMAP\n #if NUM_DIR_LIGHTS > 0\n for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n vDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * worldPosition;\n }\n #endif\n #if NUM_SPOT_LIGHTS > 0\n for ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n vSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * worldPosition;\n }\n #endif\n #if NUM_POINT_LIGHTS > 0\n for ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n vPointShadowCoord[ i ] = pointShadowMatrix[ i ] * worldPosition;\n }\n #endif\n#endif\n"; // File:src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl THREE.ShaderChunk[ 'shadowmask_pars_fragment' ] = "float getShadowMask() {\n float shadow = 1.0;\n #ifdef USE_SHADOWMAP\n #if NUM_DIR_LIGHTS > 0\n DirectionalLight directionalLight;\n for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n directionalLight = directionalLights[ i ];\n shadow *= bool( directionalLight.shadow ) ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n }\n #endif\n #if NUM_SPOT_LIGHTS > 0\n SpotLight spotLight;\n for ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n spotLight = spotLights[ i ];\n shadow *= bool( spotLight.shadow ) ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n }\n #endif\n #if NUM_POINT_LIGHTS > 0\n PointLight pointLight;\n for ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n pointLight = pointLights[ i ];\n shadow *= bool( pointLight.shadow ) ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ] ) : 1.0;\n }\n #endif\n #endif\n return shadow;\n}\n"; // File:src/renderers/shaders/ShaderChunk/skinbase_vertex.glsl THREE.ShaderChunk[ 'skinbase_vertex' ] = "#ifdef USE_SKINNING\n mat4 boneMatX = getBoneMatrix( skinIndex.x );\n mat4 boneMatY = getBoneMatrix( skinIndex.y );\n mat4 boneMatZ = getBoneMatrix( skinIndex.z );\n mat4 boneMatW = getBoneMatrix( skinIndex.w );\n#endif"; // File:src/renderers/shaders/ShaderChunk/skinning_pars_vertex.glsl THREE.ShaderChunk[ 'skinning_pars_vertex' ] = "#ifdef USE_SKINNING\n uniform mat4 bindMatrix;\n uniform mat4 bindMatrixInverse;\n #ifdef BONE_TEXTURE\n uniform sampler2D boneTexture;\n uniform int boneTextureWidth;\n uniform int boneTextureHeight;\n mat4 getBoneMatrix( const in float i ) {\n float j = i * 4.0;\n float x = mod( j, float( boneTextureWidth ) );\n float y = floor( j / float( boneTextureWidth ) );\n float dx = 1.0 / float( boneTextureWidth );\n float dy = 1.0 / float( boneTextureHeight );\n y = dy * ( y + 0.5 );\n vec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\n vec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\n vec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\n vec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\n mat4 bone = mat4( v1, v2, v3, v4 );\n return bone;\n }\n #else\n uniform mat4 boneMatrices[ MAX_BONES ];\n mat4 getBoneMatrix( const in float i ) {\n mat4 bone = boneMatrices[ int(i) ];\n return bone;\n }\n #endif\n#endif\n"; // File:src/renderers/shaders/ShaderChunk/skinning_vertex.glsl THREE.ShaderChunk[ 'skinning_vertex' ] = "#ifdef USE_SKINNING\n vec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\n vec4 skinned = vec4( 0.0 );\n skinned += boneMatX * skinVertex * skinWeight.x;\n skinned += boneMatY * skinVertex * skinWeight.y;\n skinned += boneMatZ * skinVertex * skinWeight.z;\n skinned += boneMatW * skinVertex * skinWeight.w;\n skinned = bindMatrixInverse * skinned;\n#endif\n"; // File:src/renderers/shaders/ShaderChunk/skinnormal_vertex.glsl THREE.ShaderChunk[ 'skinnormal_vertex' ] = "#ifdef USE_SKINNING\n mat4 skinMatrix = mat4( 0.0 );\n skinMatrix += skinWeight.x * boneMatX;\n skinMatrix += skinWeight.y * boneMatY;\n skinMatrix += skinWeight.z * boneMatZ;\n skinMatrix += skinWeight.w * boneMatW;\n skinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\n objectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\n#endif\n"; // File:src/renderers/shaders/ShaderChunk/specularmap_fragment.glsl THREE.ShaderChunk[ 'specularmap_fragment' ] = "float specularStrength;\n#ifdef USE_SPECULARMAP\n vec4 texelSpecular = texture2D( specularMap, vUv );\n specularStrength = texelSpecular.r;\n#else\n specularStrength = 1.0;\n#endif"; // File:src/renderers/shaders/ShaderChunk/specularmap_pars_fragment.glsl THREE.ShaderChunk[ 'specularmap_pars_fragment' ] = "#ifdef USE_SPECULARMAP\n uniform sampler2D specularMap;\n#endif"; // File:src/renderers/shaders/ShaderChunk/tonemapping_fragment.glsl THREE.ShaderChunk[ 'tonemapping_fragment' ] = "#if defined( TONE_MAPPING )\n gl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\n#endif\n"; // File:src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl THREE.ShaderChunk[ 'tonemapping_pars_fragment' ] = "#define saturate(a) clamp( a, 0.0, 1.0 )\nuniform float toneMappingExposure;\nuniform float toneMappingWhitePoint;\nvec3 LinearToneMapping( vec3 color ) {\n return toneMappingExposure * color;\n}\nvec3 ReinhardToneMapping( vec3 color ) {\n color *= toneMappingExposure;\n return saturate( color / ( vec3( 1.0 ) + color ) );\n}\n#define Uncharted2Helper( x ) max( ( ( x * ( 0.15 * x + 0.10 * 0.50 ) + 0.20 * 0.02 ) / ( x * ( 0.15 * x + 0.50 ) + 0.20 * 0.30 ) ) - 0.02 / 0.30, vec3( 0.0 ) )\nvec3 Uncharted2ToneMapping( vec3 color ) {\n color *= toneMappingExposure;\n return saturate( Uncharted2Helper( color ) / Uncharted2Helper( vec3( toneMappingWhitePoint ) ) );\n}\nvec3 OptimizedCineonToneMapping( vec3 color ) {\n color *= toneMappingExposure;\n color = max( vec3( 0.0 ), color - 0.004 );\n return pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\n}\n"; // File:src/renderers/shaders/ShaderChunk/uv2_pars_fragment.glsl THREE.ShaderChunk[ 'uv2_pars_fragment' ] = "#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n varying vec2 vUv2;\n#endif"; // File:src/renderers/shaders/ShaderChunk/uv2_pars_vertex.glsl THREE.ShaderChunk[ 'uv2_pars_vertex' ] = "#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n attribute vec2 uv2;\n varying vec2 vUv2;\n#endif"; // File:src/renderers/shaders/ShaderChunk/uv2_vertex.glsl THREE.ShaderChunk[ 'uv2_vertex' ] = "#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n vUv2 = uv2;\n#endif"; // File:src/renderers/shaders/ShaderChunk/uv_pars_fragment.glsl THREE.ShaderChunk[ 'uv_pars_fragment' ] = "#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )\n varying vec2 vUv;\n#endif"; // File:src/renderers/shaders/ShaderChunk/uv_pars_vertex.glsl THREE.ShaderChunk[ 'uv_pars_vertex' ] = "#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )\n varying vec2 vUv;\n uniform vec4 offsetRepeat;\n#endif\n"; // File:src/renderers/shaders/ShaderChunk/uv_vertex.glsl THREE.ShaderChunk[ 'uv_vertex' ] = "#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )\n vUv = uv * offsetRepeat.zw + offsetRepeat.xy;\n#endif"; // File:src/renderers/shaders/ShaderChunk/worldpos_vertex.glsl THREE.ShaderChunk[ 'worldpos_vertex' ] = "#if defined( USE_ENVMAP ) || defined( PHONG ) || defined( PHYSICAL ) || defined( LAMBERT ) || defined ( USE_SHADOWMAP )\n #ifdef USE_SKINNING\n vec4 worldPosition = modelMatrix * skinned;\n #else\n vec4 worldPosition = modelMatrix * vec4( transformed, 1.0 );\n #endif\n#endif\n"; // File:src/renderers/shaders/UniformsUtils.js /** * Uniform Utilities */ THREE.UniformsUtils = { merge: function ( uniforms ) { var merged = {}; for ( var u = 0; u < uniforms.length; u ++ ) { var tmp = this.clone( uniforms[ u ] ); for ( var p in tmp ) { merged[ p ] = tmp[ p ]; } } return merged; }, clone: function ( uniforms_src ) { var uniforms_dst = {}; for ( var u in uniforms_src ) { uniforms_dst[ u ] = {}; for ( var p in uniforms_src[ u ] ) { var parameter_src = uniforms_src[ u ][ p ]; if ( parameter_src instanceof THREE.Color || parameter_src instanceof THREE.Vector2 || parameter_src instanceof THREE.Vector3 || parameter_src instanceof THREE.Vector4 || parameter_src instanceof THREE.Matrix3 || parameter_src instanceof THREE.Matrix4 || parameter_src instanceof THREE.Texture ) { uniforms_dst[ u ][ p ] = parameter_src.clone(); } else if ( Array.isArray( parameter_src ) ) { uniforms_dst[ u ][ p ] = parameter_src.slice(); } else { uniforms_dst[ u ][ p ] = parameter_src; } } } return uniforms_dst; } }; // File:src/renderers/shaders/UniformsLib.js /** * Uniforms library for shared webgl shaders */ THREE.UniformsLib = { common: { "diffuse": { value: new THREE.Color( 0xeeeeee ) }, "opacity": { value: 1.0 }, "map": { value: null }, "offsetRepeat": { value: new THREE.Vector4( 0, 0, 1, 1 ) }, "specularMap": { value: null }, "alphaMap": { value: null }, "envMap": { value: null }, "flipEnvMap": { value: - 1 }, "reflectivity": { value: 1.0 }, "refractionRatio": { value: 0.98 } }, aomap: { "aoMap": { value: null }, "aoMapIntensity": { value: 1 } }, lightmap: { "lightMap": { value: null }, "lightMapIntensity": { value: 1 } }, emissivemap: { "emissiveMap": { value: null } }, bumpmap: { "bumpMap": { value: null }, "bumpScale": { value: 1 } }, normalmap: { "normalMap": { value: null }, "normalScale": { value: new THREE.Vector2( 1, 1 ) } }, displacementmap: { "displacementMap": { value: null }, "displacementScale": { value: 1 }, "displacementBias": { value: 0 } }, roughnessmap: { "roughnessMap": { value: null } }, metalnessmap: { "metalnessMap": { value: null } }, fog: { "fogDensity": { value: 0.00025 }, "fogNear": { value: 1 }, "fogFar": { value: 2000 }, "fogColor": { value: new THREE.Color( 0xffffff ) } }, lights: { "ambientLightColor": { value: [] }, "directionalLights": { value: [], properties: { "direction": {}, "color": {}, "shadow": {}, "shadowBias": {}, "shadowRadius": {}, "shadowMapSize": {} } }, "directionalShadowMap": { value: [] }, "directionalShadowMatrix": { value: [] }, "spotLights": { value: [], properties: { "color": {}, "position": {}, "direction": {}, "distance": {}, "coneCos": {}, "penumbraCos": {}, "decay": {}, "shadow": {}, "shadowBias": {}, "shadowRadius": {}, "shadowMapSize": {} } }, "spotShadowMap": { value: [] }, "spotShadowMatrix": { value: [] }, "pointLights": { value: [], properties: { "color": {}, "position": {}, "decay": {}, "distance": {}, "shadow": {}, "shadowBias": {}, "shadowRadius": {}, "shadowMapSize": {} } }, "pointShadowMap": { value: [] }, "pointShadowMatrix": { value: [] }, "hemisphereLights": { value: [], properties: { "direction": {}, "skyColor": {}, "groundColor": {} } } }, points: { "diffuse": { value: new THREE.Color( 0xeeeeee ) }, "opacity": { value: 1.0 }, "size": { value: 1.0 }, "scale": { value: 1.0 }, "map": { value: null }, "offsetRepeat": { value: new THREE.Vector4( 0, 0, 1, 1 ) } } }; // File:src/renderers/shaders/ShaderLib/cube_frag.glsl THREE.ShaderChunk[ 'cube_frag' ] = "uniform samplerCube tCube;\nuniform float tFlip;\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \nvoid main() {\n #include \n gl_FragColor = textureCube( tCube, vec3( tFlip * vWorldPosition.x, vWorldPosition.yz ) );\n #include \n}\n"; // File:src/renderers/shaders/ShaderLib/cube_vert.glsl THREE.ShaderChunk[ 'cube_vert' ] = "varying vec3 vWorldPosition;\n#include \n#include \n#include \nvoid main() {\n vWorldPosition = transformDirection( position, modelMatrix );\n #include \n #include \n #include \n #include \n}\n"; // File:src/renderers/shaders/ShaderLib/depth_frag.glsl THREE.ShaderChunk[ 'depth_frag' ] = "#if DEPTH_PACKING == 3200\n uniform float opacity;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n #include \n vec4 diffuseColor = vec4( 1.0 );\n #if DEPTH_PACKING == 3200\n diffuseColor.a = opacity;\n #endif\n #include \n #include \n #include \n #include \n #if DEPTH_PACKING == 3200\n gl_FragColor = vec4( vec3( gl_FragCoord.z ), opacity );\n #elif DEPTH_PACKING == 3201\n gl_FragColor = packDepthToRGBA( gl_FragCoord.z );\n #endif\n}\n"; // File:src/renderers/shaders/ShaderLib/depth_vert.glsl THREE.ShaderChunk[ 'depth_vert' ] = "#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n}\n"; // File:src/renderers/shaders/ShaderLib/distanceRGBA_frag.glsl THREE.ShaderChunk[ 'distanceRGBA_frag' ] = "uniform vec3 lightPos;\nvarying vec4 vWorldPosition;\n#include \n#include \n#include \nvoid main () {\n #include \n gl_FragColor = packDepthToRGBA( length( vWorldPosition.xyz - lightPos.xyz ) / 1000.0 );\n}\n"; // File:src/renderers/shaders/ShaderLib/distanceRGBA_vert.glsl THREE.ShaderChunk[ 'distanceRGBA_vert' ] = "varying vec4 vWorldPosition;\n#include \n#include \n#include \n#include \nvoid main() {\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n vWorldPosition = worldPosition;\n}\n"; // File:src/renderers/shaders/ShaderLib/equirect_frag.glsl THREE.ShaderChunk[ 'equirect_frag' ] = "uniform sampler2D tEquirect;\nuniform float tFlip;\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \nvoid main() {\n #include \n vec3 direction = normalize( vWorldPosition );\n vec2 sampleUV;\n sampleUV.y = saturate( tFlip * direction.y * -0.5 + 0.5 );\n sampleUV.x = atan( direction.z, direction.x ) * RECIPROCAL_PI2 + 0.5;\n gl_FragColor = texture2D( tEquirect, sampleUV );\n #include \n}\n"; // File:src/renderers/shaders/ShaderLib/equirect_vert.glsl THREE.ShaderChunk[ 'equirect_vert' ] = "varying vec3 vWorldPosition;\n#include \n#include \n#include \nvoid main() {\n vWorldPosition = transformDirection( position, modelMatrix );\n #include \n #include \n #include \n #include \n}\n"; // File:src/renderers/shaders/ShaderLib/linedashed_frag.glsl THREE.ShaderChunk[ 'linedashed_frag' ] = "uniform vec3 diffuse;\nuniform float opacity;\nuniform float dashSize;\nuniform float totalSize;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n #include \n if ( mod( vLineDistance, totalSize ) > dashSize ) {\n discard;\n }\n vec3 outgoingLight = vec3( 0.0 );\n vec4 diffuseColor = vec4( diffuse, opacity );\n #include \n #include \n outgoingLight = diffuseColor.rgb;\n gl_FragColor = vec4( outgoingLight, diffuseColor.a );\n #include \n #include \n #include \n #include \n}\n"; // File:src/renderers/shaders/ShaderLib/linedashed_vert.glsl THREE.ShaderChunk[ 'linedashed_vert' ] = "uniform float scale;\nattribute float lineDistance;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \nvoid main() {\n #include \n vLineDistance = scale * lineDistance;\n vec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\n gl_Position = projectionMatrix * mvPosition;\n #include \n #include \n}\n"; // File:src/renderers/shaders/ShaderLib/meshbasic_frag.glsl THREE.ShaderChunk[ 'meshbasic_frag' ] = "uniform vec3 diffuse;\nuniform float opacity;\n#ifndef FLAT_SHADED\n varying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n #include \n vec4 diffuseColor = vec4( diffuse, opacity );\n #include \n #include \n #include \n #include \n #include \n #include \n ReflectedLight reflectedLight;\n reflectedLight.directDiffuse = vec3( 0.0 );\n reflectedLight.directSpecular = vec3( 0.0 );\n reflectedLight.indirectDiffuse = diffuseColor.rgb;\n reflectedLight.indirectSpecular = vec3( 0.0 );\n #include \n vec3 outgoingLight = reflectedLight.indirectDiffuse;\n #include \n #include \n gl_FragColor = vec4( outgoingLight, diffuseColor.a );\n #include \n #include \n #include \n #include \n}\n"; // File:src/renderers/shaders/ShaderLib/meshbasic_vert.glsl THREE.ShaderChunk[ 'meshbasic_vert' ] = "#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n #include \n #include \n #include \n #include \n #ifdef USE_ENVMAP\n #include \n #include \n #include \n #include \n #endif\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n}\n"; // File:src/renderers/shaders/ShaderLib/meshlambert_frag.glsl THREE.ShaderChunk[ 'meshlambert_frag' ] = "uniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\nvarying vec3 vLightFront;\n#ifdef DOUBLE_SIDED\n varying vec3 vLightBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n #include \n vec4 diffuseColor = vec4( diffuse, opacity );\n ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n vec3 totalEmissiveRadiance = emissive;\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n reflectedLight.indirectDiffuse = getAmbientLightIrradiance( ambientLightColor );\n #include \n reflectedLight.indirectDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb );\n #ifdef DOUBLE_SIDED\n reflectedLight.directDiffuse = ( gl_FrontFacing ) ? vLightFront : vLightBack;\n #else\n reflectedLight.directDiffuse = vLightFront;\n #endif\n reflectedLight.directDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb ) * getShadowMask();\n #include \n vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n #include \n #include \n gl_FragColor = vec4( outgoingLight, diffuseColor.a );\n #include \n #include \n #include \n #include \n}\n"; // File:src/renderers/shaders/ShaderLib/meshlambert_vert.glsl THREE.ShaderChunk[ 'meshlambert_vert' ] = "#define LAMBERT\nvarying vec3 vLightFront;\n#ifdef DOUBLE_SIDED\n varying vec3 vLightBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n}\n"; // File:src/renderers/shaders/ShaderLib/meshphong_frag.glsl THREE.ShaderChunk[ 'meshphong_frag' ] = "#define PHONG\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n #include \n vec4 diffuseColor = vec4( diffuse, opacity );\n ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n vec3 totalEmissiveRadiance = emissive;\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n #include \n gl_FragColor = vec4( outgoingLight, diffuseColor.a );\n #include \n #include \n #include \n #include \n}\n"; // File:src/renderers/shaders/ShaderLib/meshphong_vert.glsl THREE.ShaderChunk[ 'meshphong_vert' ] = "#define PHONG\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n varying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n#ifndef FLAT_SHADED\n vNormal = normalize( transformedNormal );\n#endif\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n vViewPosition = - mvPosition.xyz;\n #include \n #include \n #include \n}\n"; // File:src/renderers/shaders/ShaderLib/meshphysical_frag.glsl THREE.ShaderChunk[ 'meshphysical_frag' ] = "#define PHYSICAL\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\n#ifndef STANDARD\n uniform float clearCoat;\n uniform float clearCoatRoughness;\n#endif\nuniform float envMapIntensity;\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n varying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n #include \n vec4 diffuseColor = vec4( diffuse, opacity );\n ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n vec3 totalEmissiveRadiance = emissive;\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n gl_FragColor = vec4( outgoingLight, diffuseColor.a );\n #include \n #include \n #include \n #include \n}\n"; // File:src/renderers/shaders/ShaderLib/meshphysical_vert.glsl THREE.ShaderChunk[ 'meshphysical_vert' ] = "#define PHYSICAL\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n varying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n#ifndef FLAT_SHADED\n vNormal = normalize( transformedNormal );\n#endif\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n vViewPosition = - mvPosition.xyz;\n #include \n #include \n}\n"; // File:src/renderers/shaders/ShaderLib/normal_frag.glsl THREE.ShaderChunk[ 'normal_frag' ] = "uniform float opacity;\nvarying vec3 vNormal;\n#include \n#include \n#include \n#include \nvoid main() {\n #include \n gl_FragColor = vec4( packNormalToRGB( vNormal ), opacity );\n #include \n}\n"; // File:src/renderers/shaders/ShaderLib/normal_vert.glsl THREE.ShaderChunk[ 'normal_vert' ] = "varying vec3 vNormal;\n#include \n#include \n#include \n#include \nvoid main() {\n vNormal = normalize( normalMatrix * normal );\n #include \n #include \n #include \n #include \n #include \n}\n"; // File:src/renderers/shaders/ShaderLib/points_frag.glsl THREE.ShaderChunk[ 'points_frag' ] = "uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n #include \n vec3 outgoingLight = vec3( 0.0 );\n vec4 diffuseColor = vec4( diffuse, opacity );\n #include \n #include \n #include \n #include \n outgoingLight = diffuseColor.rgb;\n gl_FragColor = vec4( outgoingLight, diffuseColor.a );\n #include \n #include \n #include \n #include \n}\n"; // File:src/renderers/shaders/ShaderLib/points_vert.glsl THREE.ShaderChunk[ 'points_vert' ] = "uniform float size;\nuniform float scale;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n #include \n #include \n #include \n #ifdef USE_SIZEATTENUATION\n gl_PointSize = size * ( scale / - mvPosition.z );\n #else\n gl_PointSize = size;\n #endif\n #include \n #include \n #include \n #include \n}\n"; // File:src/renderers/shaders/ShaderLib/shadow_frag.glsl THREE.ShaderChunk[ 'shadow_frag' ] = "uniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n gl_FragColor = vec4( 0.0, 0.0, 0.0, opacity * ( 1.0 - getShadowMask() ) );\n}\n"; // File:src/renderers/shaders/ShaderLib/shadow_vert.glsl THREE.ShaderChunk[ 'shadow_vert' ] = "#include \nvoid main() {\n #include \n #include \n #include \n #include \n}\n"; // File:src/renderers/shaders/ShaderLib.js /** * Webgl Shader Library for three.js * * @author alteredq / http://alteredqualia.com/ * @author mrdoob / http://mrdoob.com/ * @author mikael emtinger / http://gomo.se/ */ THREE.ShaderLib = { 'basic': { uniforms: THREE.UniformsUtils.merge( [ THREE.UniformsLib[ 'common' ], THREE.UniformsLib[ 'aomap' ], THREE.UniformsLib[ 'fog' ] ] ), vertexShader: THREE.ShaderChunk[ 'meshbasic_vert' ], fragmentShader: THREE.ShaderChunk[ 'meshbasic_frag' ] }, 'lambert': { uniforms: THREE.UniformsUtils.merge( [ THREE.UniformsLib[ 'common' ], THREE.UniformsLib[ 'aomap' ], THREE.UniformsLib[ 'lightmap' ], THREE.UniformsLib[ 'emissivemap' ], THREE.UniformsLib[ 'fog' ], THREE.UniformsLib[ 'lights' ], { "emissive" : { value: new THREE.Color( 0x000000 ) } } ] ), vertexShader: THREE.ShaderChunk[ 'meshlambert_vert' ], fragmentShader: THREE.ShaderChunk[ 'meshlambert_frag' ] }, 'phong': { uniforms: THREE.UniformsUtils.merge( [ THREE.UniformsLib[ 'common' ], THREE.UniformsLib[ 'aomap' ], THREE.UniformsLib[ 'lightmap' ], THREE.UniformsLib[ 'emissivemap' ], THREE.UniformsLib[ 'bumpmap' ], THREE.UniformsLib[ 'normalmap' ], THREE.UniformsLib[ 'displacementmap' ], THREE.UniformsLib[ 'fog' ], THREE.UniformsLib[ 'lights' ], { "emissive" : { value: new THREE.Color( 0x000000 ) }, "specular" : { value: new THREE.Color( 0x111111 ) }, "shininess": { value: 30 } } ] ), vertexShader: THREE.ShaderChunk[ 'meshphong_vert' ], fragmentShader: THREE.ShaderChunk[ 'meshphong_frag' ] }, 'standard': { uniforms: THREE.UniformsUtils.merge( [ THREE.UniformsLib[ 'common' ], THREE.UniformsLib[ 'aomap' ], THREE.UniformsLib[ 'lightmap' ], THREE.UniformsLib[ 'emissivemap' ], THREE.UniformsLib[ 'bumpmap' ], THREE.UniformsLib[ 'normalmap' ], THREE.UniformsLib[ 'displacementmap' ], THREE.UniformsLib[ 'roughnessmap' ], THREE.UniformsLib[ 'metalnessmap' ], THREE.UniformsLib[ 'fog' ], THREE.UniformsLib[ 'lights' ], { "emissive" : { value: new THREE.Color( 0x000000 ) }, "roughness": { value: 0.5 }, "metalness": { value: 0 }, "envMapIntensity" : { value: 1 }, // temporary } ] ), vertexShader: THREE.ShaderChunk[ 'meshphysical_vert' ], fragmentShader: THREE.ShaderChunk[ 'meshphysical_frag' ] }, 'points': { uniforms: THREE.UniformsUtils.merge( [ THREE.UniformsLib[ 'points' ], THREE.UniformsLib[ 'fog' ] ] ), vertexShader: THREE.ShaderChunk[ 'points_vert' ], fragmentShader: THREE.ShaderChunk[ 'points_frag' ] }, 'dashed': { uniforms: THREE.UniformsUtils.merge( [ THREE.UniformsLib[ 'common' ], THREE.UniformsLib[ 'fog' ], { "scale" : { value: 1 }, "dashSize" : { value: 1 }, "totalSize": { value: 2 } } ] ), vertexShader: THREE.ShaderChunk[ 'linedashed_vert' ], fragmentShader: THREE.ShaderChunk[ 'linedashed_frag' ] }, 'depth': { uniforms: THREE.UniformsUtils.merge( [ THREE.UniformsLib[ 'common' ], THREE.UniformsLib[ 'displacementmap' ] ] ), vertexShader: THREE.ShaderChunk[ 'depth_vert' ], fragmentShader: THREE.ShaderChunk[ 'depth_frag' ] }, 'normal': { uniforms: { "opacity" : { value: 1.0 } }, vertexShader: THREE.ShaderChunk[ 'normal_vert' ], fragmentShader: THREE.ShaderChunk[ 'normal_frag' ] }, /* ------------------------------------------------------------------------- // Cube map shader ------------------------------------------------------------------------- */ 'cube': { uniforms: { "tCube": { value: null }, "tFlip": { value: - 1 } }, vertexShader: THREE.ShaderChunk[ 'cube_vert' ], fragmentShader: THREE.ShaderChunk[ 'cube_frag' ] }, /* ------------------------------------------------------------------------- // Cube map shader ------------------------------------------------------------------------- */ 'equirect': { uniforms: { "tEquirect": { value: null }, "tFlip": { value: - 1 } }, vertexShader: THREE.ShaderChunk[ 'equirect_vert' ], fragmentShader: THREE.ShaderChunk[ 'equirect_frag' ] }, 'distanceRGBA': { uniforms: { "lightPos": { value: new THREE.Vector3() } }, vertexShader: THREE.ShaderChunk[ 'distanceRGBA_vert' ], fragmentShader: THREE.ShaderChunk[ 'distanceRGBA_frag' ] } }; THREE.ShaderLib[ 'physical' ] = { uniforms: THREE.UniformsUtils.merge( [ THREE.ShaderLib[ 'standard' ].uniforms, { "clearCoat": { value: 0 }, "clearCoatRoughness": { value: 0 } } ] ), vertexShader: THREE.ShaderChunk[ 'meshphysical_vert' ], fragmentShader: THREE.ShaderChunk[ 'meshphysical_frag' ] }; // File:src/renderers/WebGLRenderer.js /** * @author supereggbert / http://www.paulbrunt.co.uk/ * @author mrdoob / http://mrdoob.com/ * @author alteredq / http://alteredqualia.com/ * @author szimek / https://github.com/szimek/ * @author tschw */ THREE.WebGLRenderer = function ( parameters ) { console.log( 'THREE.WebGLRenderer', THREE.REVISION ); parameters = parameters || {}; var _canvas = parameters.canvas !== undefined ? parameters.canvas : document.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' ), _context = parameters.context !== undefined ? parameters.context : null, _alpha = parameters.alpha !== undefined ? parameters.alpha : false, _depth = parameters.depth !== undefined ? parameters.depth : true, _stencil = parameters.stencil !== undefined ? parameters.stencil : true, _antialias = parameters.antialias !== undefined ? parameters.antialias : false, _premultipliedAlpha = parameters.premultipliedAlpha !== undefined ? parameters.premultipliedAlpha : true, _preserveDrawingBuffer = parameters.preserveDrawingBuffer !== undefined ? parameters.preserveDrawingBuffer : false; var lights = []; var opaqueObjects = []; var opaqueObjectsLastIndex = - 1; var transparentObjects = []; var transparentObjectsLastIndex = - 1; var morphInfluences = new Float32Array( 8 ); var sprites = []; var lensFlares = []; // public properties this.domElement = _canvas; this.context = null; // clearing this.autoClear = true; this.autoClearColor = true; this.autoClearDepth = true; this.autoClearStencil = true; // scene graph this.sortObjects = true; // user-defined clipping this.clippingPlanes = []; this.localClippingEnabled = false; // physically based shading this.gammaFactor = 2.0; // for backwards compatibility this.gammaInput = false; this.gammaOutput = false; // physical lights this.physicallyCorrectLights = false; // tone mapping this.toneMapping = THREE.LinearToneMapping; this.toneMappingExposure = 1.0; this.toneMappingWhitePoint = 1.0; // morphs this.maxMorphTargets = 8; this.maxMorphNormals = 4; // internal properties var _this = this, // internal state cache _currentProgram = null, _currentRenderTarget = null, _currentFramebuffer = null, _currentMaterialId = - 1, _currentGeometryProgram = '', _currentCamera = null, _currentScissor = new THREE.Vector4(), _currentScissorTest = null, _currentViewport = new THREE.Vector4(), // _usedTextureUnits = 0, // _clearColor = new THREE.Color( 0x000000 ), _clearAlpha = 0, _width = _canvas.width, _height = _canvas.height, _pixelRatio = 1, _scissor = new THREE.Vector4( 0, 0, _width, _height ), _scissorTest = false, _viewport = new THREE.Vector4( 0, 0, _width, _height ), // frustum _frustum = new THREE.Frustum(), // clipping _clipping = new THREE.WebGLClipping(), _clippingEnabled = false, _localClippingEnabled = false, _sphere = new THREE.Sphere(), // camera matrices cache _projScreenMatrix = new THREE.Matrix4(), _vector3 = new THREE.Vector3(), // light arrays cache _lights = { hash: '', ambient: [ 0, 0, 0 ], directional: [], directionalShadowMap: [], directionalShadowMatrix: [], spot: [], spotShadowMap: [], spotShadowMatrix: [], point: [], pointShadowMap: [], pointShadowMatrix: [], hemi: [], shadows: [] }, // info _infoRender = { calls: 0, vertices: 0, faces: 0, points: 0 }; this.info = { render: _infoRender, memory: { geometries: 0, textures: 0 }, programs: null }; // initialize var _gl; try { var attributes = { alpha: _alpha, depth: _depth, stencil: _stencil, antialias: _antialias, premultipliedAlpha: _premultipliedAlpha, preserveDrawingBuffer: _preserveDrawingBuffer }; _gl = _context || _canvas.getContext( 'webgl', attributes ) || _canvas.getContext( 'experimental-webgl', attributes ); if ( _gl === null ) { if ( _canvas.getContext( 'webgl' ) !== null ) { throw 'Error creating WebGL context with your selected attributes.'; } else { throw 'Error creating WebGL context.'; } } // Some experimental-webgl implementations do not have getShaderPrecisionFormat if ( _gl.getShaderPrecisionFormat === undefined ) { _gl.getShaderPrecisionFormat = function () { return { 'rangeMin': 1, 'rangeMax': 1, 'precision': 1 }; }; } _canvas.addEventListener( 'webglcontextlost', onContextLost, false ); } catch ( error ) { console.error( 'THREE.WebGLRenderer: ' + error ); } var extensions = new THREE.WebGLExtensions( _gl ); extensions.get( 'WEBGL_depth_texture' ); extensions.get( 'OES_texture_float' ); extensions.get( 'OES_texture_float_linear' ); extensions.get( 'OES_texture_half_float' ); extensions.get( 'OES_texture_half_float_linear' ); extensions.get( 'OES_standard_derivatives' ); extensions.get( 'ANGLE_instanced_arrays' ); if ( extensions.get( 'OES_element_index_uint' ) ) { THREE.BufferGeometry.MaxIndex = 4294967296; } var capabilities = new THREE.WebGLCapabilities( _gl, extensions, parameters ); var state = new THREE.WebGLState( _gl, extensions, paramThreeToGL ); var properties = new THREE.WebGLProperties(); var textures = new THREE.WebGLTextures( _gl, extensions, state, properties, capabilities, paramThreeToGL, this.info ); var objects = new THREE.WebGLObjects( _gl, properties, this.info ); var programCache = new THREE.WebGLPrograms( this, capabilities ); var lightCache = new THREE.WebGLLights(); this.info.programs = programCache.programs; var bufferRenderer = new THREE.WebGLBufferRenderer( _gl, extensions, _infoRender ); var indexedBufferRenderer = new THREE.WebGLIndexedBufferRenderer( _gl, extensions, _infoRender ); // var backgroundCamera = new THREE.OrthographicCamera( - 1, 1, 1, - 1, 0, 1 ); var backgroundCamera2 = new THREE.PerspectiveCamera(); var backgroundPlaneMesh = new THREE.Mesh( new THREE.PlaneBufferGeometry( 2, 2 ), new THREE.MeshBasicMaterial( { depthTest: false, depthWrite: false } ) ); var backgroundBoxShader = THREE.ShaderLib[ 'cube' ]; var backgroundBoxMesh = new THREE.Mesh( new THREE.BoxBufferGeometry( 5, 5, 5 ), new THREE.ShaderMaterial( { uniforms: backgroundBoxShader.uniforms, vertexShader: backgroundBoxShader.vertexShader, fragmentShader: backgroundBoxShader.fragmentShader, depthTest: false, depthWrite: false, side: THREE.BackSide } ) ); objects.update( backgroundPlaneMesh ); objects.update( backgroundBoxMesh ); // function getTargetPixelRatio() { return _currentRenderTarget === null ? _pixelRatio : 1; } function glClearColor( r, g, b, a ) { if ( _premultipliedAlpha === true ) { r *= a; g *= a; b *= a; } state.clearColor( r, g, b, a ); } function setDefaultGLState() { state.init(); state.scissor( _currentScissor.copy( _scissor ).multiplyScalar( _pixelRatio ) ); state.viewport( _currentViewport.copy( _viewport ).multiplyScalar( _pixelRatio ) ); glClearColor( _clearColor.r, _clearColor.g, _clearColor.b, _clearAlpha ); } function resetGLState() { _currentProgram = null; _currentCamera = null; _currentGeometryProgram = ''; _currentMaterialId = - 1; state.reset(); } setDefaultGLState(); this.context = _gl; this.capabilities = capabilities; this.extensions = extensions; this.properties = properties; this.state = state; // shadow map var shadowMap = new THREE.WebGLShadowMap( this, _lights, objects ); this.shadowMap = shadowMap; // Plugins var spritePlugin = new THREE.SpritePlugin( this, sprites ); var lensFlarePlugin = new THREE.LensFlarePlugin( this, lensFlares ); // API this.getContext = function () { return _gl; }; this.getContextAttributes = function () { return _gl.getContextAttributes(); }; this.forceContextLoss = function () { extensions.get( 'WEBGL_lose_context' ).loseContext(); }; this.getMaxAnisotropy = function () { return capabilities.getMaxAnisotropy(); }; this.getPrecision = function () { return capabilities.precision; }; this.getPixelRatio = function () { return _pixelRatio; }; this.setPixelRatio = function ( value ) { if ( value === undefined ) return; _pixelRatio = value; this.setSize( _viewport.z, _viewport.w, false ); }; this.getSize = function () { return { width: _width, height: _height }; }; this.setSize = function ( width, height, updateStyle ) { _width = width; _height = height; _canvas.width = width * _pixelRatio; _canvas.height = height * _pixelRatio; if ( updateStyle !== false ) { _canvas.style.width = width + 'px'; _canvas.style.height = height + 'px'; } this.setViewport( 0, 0, width, height ); }; this.setViewport = function ( x, y, width, height ) { state.viewport( _viewport.set( x, y, width, height ) ); }; this.setScissor = function ( x, y, width, height ) { state.scissor( _scissor.set( x, y, width, height ) ); }; this.setScissorTest = function ( boolean ) { state.setScissorTest( _scissorTest = boolean ); }; // Clearing this.getClearColor = function () { return _clearColor; }; this.setClearColor = function ( color, alpha ) { _clearColor.set( color ); _clearAlpha = alpha !== undefined ? alpha : 1; glClearColor( _clearColor.r, _clearColor.g, _clearColor.b, _clearAlpha ); }; this.getClearAlpha = function () { return _clearAlpha; }; this.setClearAlpha = function ( alpha ) { _clearAlpha = alpha; glClearColor( _clearColor.r, _clearColor.g, _clearColor.b, _clearAlpha ); }; this.clear = function ( color, depth, stencil ) { var bits = 0; if ( color === undefined || color ) bits |= _gl.COLOR_BUFFER_BIT; if ( depth === undefined || depth ) bits |= _gl.DEPTH_BUFFER_BIT; if ( stencil === undefined || stencil ) bits |= _gl.STENCIL_BUFFER_BIT; _gl.clear( bits ); }; this.clearColor = function () { this.clear( true, false, false ); }; this.clearDepth = function () { this.clear( false, true, false ); }; this.clearStencil = function () { this.clear( false, false, true ); }; this.clearTarget = function ( renderTarget, color, depth, stencil ) { this.setRenderTarget( renderTarget ); this.clear( color, depth, stencil ); }; // Reset this.resetGLState = resetGLState; this.dispose = function() { transparentObjects = []; transparentObjectsLastIndex = -1; opaqueObjects = []; opaqueObjectsLastIndex = -1; _canvas.removeEventListener( 'webglcontextlost', onContextLost, false ); }; // Events function onContextLost( event ) { event.preventDefault(); resetGLState(); setDefaultGLState(); properties.clear(); } function onMaterialDispose( event ) { var material = event.target; material.removeEventListener( 'dispose', onMaterialDispose ); deallocateMaterial( material ); } // Buffer deallocation function deallocateMaterial( material ) { releaseMaterialProgramReference( material ); properties.delete( material ); } function releaseMaterialProgramReference( material ) { var programInfo = properties.get( material ).program; material.program = undefined; if ( programInfo !== undefined ) { programCache.releaseProgram( programInfo ); } } // Buffer rendering this.renderBufferImmediate = function ( object, program, material ) { state.initAttributes(); var buffers = properties.get( object ); if ( object.hasPositions && ! buffers.position ) buffers.position = _gl.createBuffer(); if ( object.hasNormals && ! buffers.normal ) buffers.normal = _gl.createBuffer(); if ( object.hasUvs && ! buffers.uv ) buffers.uv = _gl.createBuffer(); if ( object.hasColors && ! buffers.color ) buffers.color = _gl.createBuffer(); var attributes = program.getAttributes(); if ( object.hasPositions ) { _gl.bindBuffer( _gl.ARRAY_BUFFER, buffers.position ); _gl.bufferData( _gl.ARRAY_BUFFER, object.positionArray, _gl.DYNAMIC_DRAW ); state.enableAttribute( attributes.position ); _gl.vertexAttribPointer( attributes.position, 3, _gl.FLOAT, false, 0, 0 ); } if ( object.hasNormals ) { _gl.bindBuffer( _gl.ARRAY_BUFFER, buffers.normal ); if ( material.type !== 'MeshPhongMaterial' && material.type !== 'MeshStandardMaterial' && material.type !== 'MeshPhysicalMaterial' && material.shading === THREE.FlatShading ) { for ( var i = 0, l = object.count * 3; i < l; i += 9 ) { var array = object.normalArray; var nx = ( array[ i + 0 ] + array[ i + 3 ] + array[ i + 6 ] ) / 3; var ny = ( array[ i + 1 ] + array[ i + 4 ] + array[ i + 7 ] ) / 3; var nz = ( array[ i + 2 ] + array[ i + 5 ] + array[ i + 8 ] ) / 3; array[ i + 0 ] = nx; array[ i + 1 ] = ny; array[ i + 2 ] = nz; array[ i + 3 ] = nx; array[ i + 4 ] = ny; array[ i + 5 ] = nz; array[ i + 6 ] = nx; array[ i + 7 ] = ny; array[ i + 8 ] = nz; } } _gl.bufferData( _gl.ARRAY_BUFFER, object.normalArray, _gl.DYNAMIC_DRAW ); state.enableAttribute( attributes.normal ); _gl.vertexAttribPointer( attributes.normal, 3, _gl.FLOAT, false, 0, 0 ); } if ( object.hasUvs && material.map ) { _gl.bindBuffer( _gl.ARRAY_BUFFER, buffers.uv ); _gl.bufferData( _gl.ARRAY_BUFFER, object.uvArray, _gl.DYNAMIC_DRAW ); state.enableAttribute( attributes.uv ); _gl.vertexAttribPointer( attributes.uv, 2, _gl.FLOAT, false, 0, 0 ); } if ( object.hasColors && material.vertexColors !== THREE.NoColors ) { _gl.bindBuffer( _gl.ARRAY_BUFFER, buffers.color ); _gl.bufferData( _gl.ARRAY_BUFFER, object.colorArray, _gl.DYNAMIC_DRAW ); state.enableAttribute( attributes.color ); _gl.vertexAttribPointer( attributes.color, 3, _gl.FLOAT, false, 0, 0 ); } state.disableUnusedAttributes(); _gl.drawArrays( _gl.TRIANGLES, 0, object.count ); object.count = 0; }; this.renderBufferDirect = function ( camera, fog, geometry, material, object, group ) { setMaterial( material ); var program = setProgram( camera, fog, material, object ); var updateBuffers = false; var geometryProgram = geometry.id + '_' + program.id + '_' + material.wireframe; if ( geometryProgram !== _currentGeometryProgram ) { _currentGeometryProgram = geometryProgram; updateBuffers = true; } // morph targets var morphTargetInfluences = object.morphTargetInfluences; if ( morphTargetInfluences !== undefined ) { var activeInfluences = []; for ( var i = 0, l = morphTargetInfluences.length; i < l; i ++ ) { var influence = morphTargetInfluences[ i ]; activeInfluences.push( [ influence, i ] ); } activeInfluences.sort( absNumericalSort ); if ( activeInfluences.length > 8 ) { activeInfluences.length = 8; } var morphAttributes = geometry.morphAttributes; for ( var i = 0, l = activeInfluences.length; i < l; i ++ ) { var influence = activeInfluences[ i ]; morphInfluences[ i ] = influence[ 0 ]; if ( influence[ 0 ] !== 0 ) { var index = influence[ 1 ]; if ( material.morphTargets === true && morphAttributes.position ) geometry.addAttribute( 'morphTarget' + i, morphAttributes.position[ index ] ); if ( material.morphNormals === true && morphAttributes.normal ) geometry.addAttribute( 'morphNormal' + i, morphAttributes.normal[ index ] ); } else { if ( material.morphTargets === true ) geometry.removeAttribute( 'morphTarget' + i ); if ( material.morphNormals === true ) geometry.removeAttribute( 'morphNormal' + i ); } } program.getUniforms().setValue( _gl, 'morphTargetInfluences', morphInfluences ); updateBuffers = true; } // var index = geometry.index; var position = geometry.attributes.position; if ( material.wireframe === true ) { index = objects.getWireframeAttribute( geometry ); } var renderer; if ( index !== null ) { renderer = indexedBufferRenderer; renderer.setIndex( index ); } else { renderer = bufferRenderer; } if ( updateBuffers ) { setupVertexAttributes( material, program, geometry ); if ( index !== null ) { _gl.bindBuffer( _gl.ELEMENT_ARRAY_BUFFER, objects.getAttributeBuffer( index ) ); } } // var dataStart = 0; var dataCount = Infinity; if ( index !== null ) { dataCount = index.count; } else if ( position !== undefined ) { dataCount = position.count; } var rangeStart = geometry.drawRange.start; var rangeCount = geometry.drawRange.count; var groupStart = group !== null ? group.start : 0; var groupCount = group !== null ? group.count : Infinity; var drawStart = Math.max( dataStart, rangeStart, groupStart ); var drawEnd = Math.min( dataStart + dataCount, rangeStart + rangeCount, groupStart + groupCount ) - 1; var drawCount = Math.max( 0, drawEnd - drawStart + 1 ); // if ( object instanceof THREE.Mesh ) { if ( material.wireframe === true ) { state.setLineWidth( material.wireframeLinewidth * getTargetPixelRatio() ); renderer.setMode( _gl.LINES ); } else { switch ( object.drawMode ) { case THREE.TrianglesDrawMode: renderer.setMode( _gl.TRIANGLES ); break; case THREE.TriangleStripDrawMode: renderer.setMode( _gl.TRIANGLE_STRIP ); break; case THREE.TriangleFanDrawMode: renderer.setMode( _gl.TRIANGLE_FAN ); break; } } } else if ( object instanceof THREE.Line ) { var lineWidth = material.linewidth; if ( lineWidth === undefined ) lineWidth = 1; // Not using Line*Material state.setLineWidth( lineWidth * getTargetPixelRatio() ); if ( object instanceof THREE.LineSegments ) { renderer.setMode( _gl.LINES ); } else { renderer.setMode( _gl.LINE_STRIP ); } } else if ( object instanceof THREE.Points ) { renderer.setMode( _gl.POINTS ); } if ( geometry instanceof THREE.InstancedBufferGeometry ) { if ( geometry.maxInstancedCount > 0 ) { renderer.renderInstances( geometry, drawStart, drawCount ); } } else { renderer.render( drawStart, drawCount ); } }; function setupVertexAttributes( material, program, geometry, startIndex ) { var extension; if ( geometry instanceof THREE.InstancedBufferGeometry ) { extension = extensions.get( 'ANGLE_instanced_arrays' ); if ( extension === null ) { console.error( 'THREE.WebGLRenderer.setupVertexAttributes: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.' ); return; } } if ( startIndex === undefined ) startIndex = 0; state.initAttributes(); var geometryAttributes = geometry.attributes; var programAttributes = program.getAttributes(); var materialDefaultAttributeValues = material.defaultAttributeValues; for ( var name in programAttributes ) { var programAttribute = programAttributes[ name ]; if ( programAttribute >= 0 ) { var geometryAttribute = geometryAttributes[ name ]; if ( geometryAttribute !== undefined ) { var type = _gl.FLOAT; var array = geometryAttribute.array; var normalized = geometryAttribute.normalized; if ( array instanceof Float32Array ) { type = _gl.FLOAT; } else if ( array instanceof Float64Array ) { console.warn("Unsupported data buffer format: Float64Array"); } else if ( array instanceof Uint16Array ) { type = _gl.UNSIGNED_SHORT; } else if ( array instanceof Int16Array ) { type = _gl.SHORT; } else if ( array instanceof Uint32Array ) { type = _gl.UNSIGNED_INT; } else if ( array instanceof Int32Array ) { type = _gl.INT; } else if ( array instanceof Int8Array ) { type = _gl.BYTE; } else if ( array instanceof Uint8Array ) { type = _gl.UNSIGNED_BYTE; } var size = geometryAttribute.itemSize; var buffer = objects.getAttributeBuffer( geometryAttribute ); if ( geometryAttribute instanceof THREE.InterleavedBufferAttribute ) { var data = geometryAttribute.data; var stride = data.stride; var offset = geometryAttribute.offset; if ( data instanceof THREE.InstancedInterleavedBuffer ) { state.enableAttributeAndDivisor( programAttribute, data.meshPerAttribute, extension ); if ( geometry.maxInstancedCount === undefined ) { geometry.maxInstancedCount = data.meshPerAttribute * data.count; } } else { state.enableAttribute( programAttribute ); } _gl.bindBuffer( _gl.ARRAY_BUFFER, buffer ); _gl.vertexAttribPointer( programAttribute, size, type, normalized, stride * data.array.BYTES_PER_ELEMENT, ( startIndex * stride + offset ) * data.array.BYTES_PER_ELEMENT ); } else { if ( geometryAttribute instanceof THREE.InstancedBufferAttribute ) { state.enableAttributeAndDivisor( programAttribute, geometryAttribute.meshPerAttribute, extension ); if ( geometry.maxInstancedCount === undefined ) { geometry.maxInstancedCount = geometryAttribute.meshPerAttribute * geometryAttribute.count; } } else { state.enableAttribute( programAttribute ); } _gl.bindBuffer( _gl.ARRAY_BUFFER, buffer ); _gl.vertexAttribPointer( programAttribute, size, type, normalized, 0, startIndex * size * geometryAttribute.array.BYTES_PER_ELEMENT ); } } else if ( materialDefaultAttributeValues !== undefined ) { var value = materialDefaultAttributeValues[ name ]; if ( value !== undefined ) { switch ( value.length ) { case 2: _gl.vertexAttrib2fv( programAttribute, value ); break; case 3: _gl.vertexAttrib3fv( programAttribute, value ); break; case 4: _gl.vertexAttrib4fv( programAttribute, value ); break; default: _gl.vertexAttrib1fv( programAttribute, value ); } } } } } state.disableUnusedAttributes(); } // Sorting function absNumericalSort( a, b ) { return Math.abs( b[ 0 ] ) - Math.abs( a[ 0 ] ); } function painterSortStable ( a, b ) { if ( a.object.renderOrder !== b.object.renderOrder ) { return a.object.renderOrder - b.object.renderOrder; } else if ( a.material.id !== b.material.id ) { return a.material.id - b.material.id; } else if ( a.z !== b.z ) { return a.z - b.z; } else { return a.id - b.id; } } function reversePainterSortStable ( a, b ) { if ( a.object.renderOrder !== b.object.renderOrder ) { return a.object.renderOrder - b.object.renderOrder; } if ( a.z !== b.z ) { return b.z - a.z; } else { return a.id - b.id; } } // Rendering this.render = function ( scene, camera, renderTarget, forceClear ) { if ( camera instanceof THREE.Camera === false ) { console.error( 'THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.' ); return; } var fog = scene.fog; // reset caching for this frame _currentGeometryProgram = ''; _currentMaterialId = - 1; _currentCamera = null; // update scene graph if ( scene.autoUpdate === true ) scene.updateMatrixWorld(); // update camera matrices and frustum if ( camera.parent === null ) camera.updateMatrixWorld(); camera.matrixWorldInverse.getInverse( camera.matrixWorld ); _projScreenMatrix.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse ); _frustum.setFromMatrix( _projScreenMatrix ); lights.length = 0; opaqueObjectsLastIndex = - 1; transparentObjectsLastIndex = - 1; sprites.length = 0; lensFlares.length = 0; _localClippingEnabled = this.localClippingEnabled; _clippingEnabled = _clipping.init( this.clippingPlanes, _localClippingEnabled, camera ); projectObject( scene, camera ); opaqueObjects.length = opaqueObjectsLastIndex + 1; transparentObjects.length = transparentObjectsLastIndex + 1; if ( _this.sortObjects === true ) { opaqueObjects.sort( painterSortStable ); transparentObjects.sort( reversePainterSortStable ); } // if ( _clippingEnabled ) _clipping.beginShadows(); setupShadows( lights ); shadowMap.render( scene, camera ); setupLights( lights, camera ); if ( _clippingEnabled ) _clipping.endShadows(); // _infoRender.calls = 0; _infoRender.vertices = 0; _infoRender.faces = 0; _infoRender.points = 0; if ( renderTarget === undefined ) { renderTarget = null; } this.setRenderTarget( renderTarget ); // var background = scene.background; if ( background === null ) { glClearColor( _clearColor.r, _clearColor.g, _clearColor.b, _clearAlpha ); } else if ( background instanceof THREE.Color ) { glClearColor( background.r, background.g, background.b, 1 ); } if ( this.autoClear || forceClear ) { this.clear( this.autoClearColor, this.autoClearDepth, this.autoClearStencil ); } if ( background instanceof THREE.CubeTexture ) { backgroundCamera2.projectionMatrix.copy( camera.projectionMatrix ); backgroundCamera2.matrixWorld.extractRotation( camera.matrixWorld ); backgroundCamera2.matrixWorldInverse.getInverse( backgroundCamera2.matrixWorld ); backgroundBoxMesh.material.uniforms[ "tCube" ].value = background; backgroundBoxMesh.modelViewMatrix.multiplyMatrices( backgroundCamera2.matrixWorldInverse, backgroundBoxMesh.matrixWorld ); _this.renderBufferDirect( backgroundCamera2, null, backgroundBoxMesh.geometry, backgroundBoxMesh.material, backgroundBoxMesh, null ); } else if ( background instanceof THREE.Texture ) { backgroundPlaneMesh.material.map = background; _this.renderBufferDirect( backgroundCamera, null, backgroundPlaneMesh.geometry, backgroundPlaneMesh.material, backgroundPlaneMesh, null ); } // if ( scene.overrideMaterial ) { var overrideMaterial = scene.overrideMaterial; renderObjects( opaqueObjects, camera, fog, overrideMaterial ); renderObjects( transparentObjects, camera, fog, overrideMaterial ); } else { // opaque pass (front-to-back order) state.setBlending( THREE.NoBlending ); renderObjects( opaqueObjects, camera, fog ); // transparent pass (back-to-front order) renderObjects( transparentObjects, camera, fog ); } // custom render plugins (post pass) spritePlugin.render( scene, camera ); lensFlarePlugin.render( scene, camera, _currentViewport ); // Generate mipmap if we're using any kind of mipmap filtering if ( renderTarget ) { textures.updateRenderTargetMipmap( renderTarget ); } // Ensure depth buffer writing is enabled so it can be cleared on next render state.setDepthTest( true ); state.setDepthWrite( true ); state.setColorWrite( true ); // _gl.finish(); }; function pushRenderItem( object, geometry, material, z, group ) { var array, index; // allocate the next position in the appropriate array if ( material.transparent ) { array = transparentObjects; index = ++ transparentObjectsLastIndex; } else { array = opaqueObjects; index = ++ opaqueObjectsLastIndex; } // recycle existing render item or grow the array var renderItem = array[ index ]; if ( renderItem !== undefined ) { renderItem.id = object.id; renderItem.object = object; renderItem.geometry = geometry; renderItem.material = material; renderItem.z = _vector3.z; renderItem.group = group; } else { renderItem = { id: object.id, object: object, geometry: geometry, material: material, z: _vector3.z, group: group }; // assert( index === array.length ); array.push( renderItem ); } } // TODO Duplicated code (Frustum) function isObjectViewable( object ) { var geometry = object.geometry; if ( geometry.boundingSphere === null ) geometry.computeBoundingSphere(); _sphere.copy( geometry.boundingSphere ). applyMatrix4( object.matrixWorld ); return isSphereViewable( _sphere ); } function isSpriteViewable( sprite ) { _sphere.center.set( 0, 0, 0 ); _sphere.radius = 0.7071067811865476; _sphere.applyMatrix4( sprite.matrixWorld ); return isSphereViewable( _sphere ); } function isSphereViewable( sphere ) { if ( ! _frustum.intersectsSphere( sphere ) ) return false; var numPlanes = _clipping.numPlanes; if ( numPlanes === 0 ) return true; var planes = _this.clippingPlanes, center = sphere.center, negRad = - sphere.radius, i = 0; do { // out when deeper than radius in the negative halfspace if ( planes[ i ].distanceToPoint( center ) < negRad ) return false; } while ( ++ i !== numPlanes ); return true; } function projectObject( object, camera ) { if ( object.visible === false ) return; if ( object.layers.test( camera.layers ) ) { if ( object instanceof THREE.Light ) { lights.push( object ); } else if ( object instanceof THREE.Sprite ) { if ( object.frustumCulled === false || isSpriteViewable( object ) === true ) { sprites.push( object ); } } else if ( object instanceof THREE.LensFlare ) { lensFlares.push( object ); } else if ( object instanceof THREE.ImmediateRenderObject ) { if ( _this.sortObjects === true ) { _vector3.setFromMatrixPosition( object.matrixWorld ); _vector3.applyProjection( _projScreenMatrix ); } pushRenderItem( object, null, object.material, _vector3.z, null ); } else if ( object instanceof THREE.Mesh || object instanceof THREE.Line || object instanceof THREE.Points ) { if ( object instanceof THREE.SkinnedMesh ) { object.skeleton.update(); } if ( object.frustumCulled === false || isObjectViewable( object ) === true ) { var material = object.material; if ( material.visible === true ) { if ( _this.sortObjects === true ) { _vector3.setFromMatrixPosition( object.matrixWorld ); _vector3.applyProjection( _projScreenMatrix ); } var geometry = objects.update( object ); if ( material instanceof THREE.MultiMaterial ) { var groups = geometry.groups; var materials = material.materials; for ( var i = 0, l = groups.length; i < l; i ++ ) { var group = groups[ i ]; var groupMaterial = materials[ group.materialIndex ]; if ( groupMaterial.visible === true ) { pushRenderItem( object, geometry, groupMaterial, _vector3.z, group ); } } } else { pushRenderItem( object, geometry, material, _vector3.z, null ); } } } } } var children = object.children; for ( var i = 0, l = children.length; i < l; i ++ ) { projectObject( children[ i ], camera ); } } function renderObjects( renderList, camera, fog, overrideMaterial ) { for ( var i = 0, l = renderList.length; i < l; i ++ ) { var renderItem = renderList[ i ]; var object = renderItem.object; var geometry = renderItem.geometry; var material = overrideMaterial === undefined ? renderItem.material : overrideMaterial; var group = renderItem.group; object.modelViewMatrix.multiplyMatrices( camera.matrixWorldInverse, object.matrixWorld ); object.normalMatrix.getNormalMatrix( object.modelViewMatrix ); if ( object instanceof THREE.ImmediateRenderObject ) { setMaterial( material ); var program = setProgram( camera, fog, material, object ); _currentGeometryProgram = ''; object.render( function ( object ) { _this.renderBufferImmediate( object, program, material ); } ); } else { _this.renderBufferDirect( camera, fog, geometry, material, object, group ); } } } function initMaterial( material, fog, object ) { var materialProperties = properties.get( material ); var parameters = programCache.getParameters( material, _lights, fog, _clipping.numPlanes, object ); var code = programCache.getProgramCode( material, parameters ); var program = materialProperties.program; var programChange = true; if ( program === undefined ) { // new material material.addEventListener( 'dispose', onMaterialDispose ); } else if ( program.code !== code ) { // changed glsl or parameters releaseMaterialProgramReference( material ); } else if ( parameters.shaderID !== undefined ) { // same glsl and uniform list return; } else { // only rebuild uniform list programChange = false; } if ( programChange ) { if ( parameters.shaderID ) { var shader = THREE.ShaderLib[ parameters.shaderID ]; materialProperties.__webglShader = { name: material.type, uniforms: THREE.UniformsUtils.clone( shader.uniforms ), vertexShader: shader.vertexShader, fragmentShader: shader.fragmentShader }; } else { materialProperties.__webglShader = { name: material.type, uniforms: material.uniforms, vertexShader: material.vertexShader, fragmentShader: material.fragmentShader }; } material.__webglShader = materialProperties.__webglShader; program = programCache.acquireProgram( material, parameters, code ); materialProperties.program = program; material.program = program; } var attributes = program.getAttributes(); if ( material.morphTargets ) { material.numSupportedMorphTargets = 0; for ( var i = 0; i < _this.maxMorphTargets; i ++ ) { if ( attributes[ 'morphTarget' + i ] >= 0 ) { material.numSupportedMorphTargets ++; } } } if ( material.morphNormals ) { material.numSupportedMorphNormals = 0; for ( var i = 0; i < _this.maxMorphNormals; i ++ ) { if ( attributes[ 'morphNormal' + i ] >= 0 ) { material.numSupportedMorphNormals ++; } } } var uniforms = materialProperties.__webglShader.uniforms; if ( ! ( material instanceof THREE.ShaderMaterial ) && ! ( material instanceof THREE.RawShaderMaterial ) || material.clipping === true ) { materialProperties.numClippingPlanes = _clipping.numPlanes; uniforms.clippingPlanes = _clipping.uniform; } if ( material.lights ) { // store the light setup it was created for materialProperties.lightsHash = _lights.hash; // wire up the material to this renderer's lighting state uniforms.ambientLightColor.value = _lights.ambient; uniforms.directionalLights.value = _lights.directional; uniforms.spotLights.value = _lights.spot; uniforms.pointLights.value = _lights.point; uniforms.hemisphereLights.value = _lights.hemi; uniforms.directionalShadowMap.value = _lights.directionalShadowMap; uniforms.directionalShadowMatrix.value = _lights.directionalShadowMatrix; uniforms.spotShadowMap.value = _lights.spotShadowMap; uniforms.spotShadowMatrix.value = _lights.spotShadowMatrix; uniforms.pointShadowMap.value = _lights.pointShadowMap; uniforms.pointShadowMatrix.value = _lights.pointShadowMatrix; } var progUniforms = materialProperties.program.getUniforms(), uniformsList = THREE.WebGLUniforms.seqWithValue( progUniforms.seq, uniforms ); materialProperties.uniformsList = uniformsList; materialProperties.dynamicUniforms = THREE.WebGLUniforms.splitDynamic( uniformsList, uniforms ); } function setMaterial( material ) { if ( material.side !== THREE.DoubleSide ) state.enable( _gl.CULL_FACE ); else state.disable( _gl.CULL_FACE ); state.setFlipSided( material.side === THREE.BackSide ); if ( material.transparent === true ) { state.setBlending( material.blending, material.blendEquation, material.blendSrc, material.blendDst, material.blendEquationAlpha, material.blendSrcAlpha, material.blendDstAlpha, material.premultipliedAlpha ); } else { state.setBlending( THREE.NoBlending ); } state.setDepthFunc( material.depthFunc ); state.setDepthTest( material.depthTest ); state.setDepthWrite( material.depthWrite ); state.setColorWrite( material.colorWrite ); state.setPolygonOffset( material.polygonOffset, material.polygonOffsetFactor, material.polygonOffsetUnits ); } function setProgram( camera, fog, material, object ) { _usedTextureUnits = 0; var materialProperties = properties.get( material ); if ( _clippingEnabled ) { if ( _localClippingEnabled || camera !== _currentCamera ) { var useCache = camera === _currentCamera && material.id === _currentMaterialId; // we might want to call this function with some ClippingGroup // object instead of the material, once it becomes feasible // (#8465, #8379) _clipping.setState( material.clippingPlanes, material.clipShadows, camera, materialProperties, useCache ); } if ( materialProperties.numClippingPlanes !== undefined && materialProperties.numClippingPlanes !== _clipping.numPlanes ) { material.needsUpdate = true; } } if ( materialProperties.program === undefined ) { material.needsUpdate = true; } if ( materialProperties.lightsHash !== undefined && materialProperties.lightsHash !== _lights.hash ) { material.needsUpdate = true; } if ( material.needsUpdate ) { initMaterial( material, fog, object ); material.needsUpdate = false; } var refreshProgram = false; var refreshMaterial = false; var refreshLights = false; var program = materialProperties.program, p_uniforms = program.getUniforms(), m_uniforms = materialProperties.__webglShader.uniforms; if ( program.id !== _currentProgram ) { _gl.useProgram( program.program ); _currentProgram = program.id; refreshProgram = true; refreshMaterial = true; refreshLights = true; } if ( material.id !== _currentMaterialId ) { _currentMaterialId = material.id; refreshMaterial = true; } if ( refreshProgram || camera !== _currentCamera ) { p_uniforms.set( _gl, camera, 'projectionMatrix' ); if ( capabilities.logarithmicDepthBuffer ) { p_uniforms.setValue( _gl, 'logDepthBufFC', 2.0 / ( Math.log( camera.far + 1.0 ) / Math.LN2 ) ); } if ( camera !== _currentCamera ) { _currentCamera = camera; // lighting uniforms depend on the camera so enforce an update // now, in case this material supports lights - or later, when // the next material that does gets activated: refreshMaterial = true; // set to true on material change refreshLights = true; // remains set until update done } // load material specific uniforms // (shader material also gets them for the sake of genericity) if ( material instanceof THREE.ShaderMaterial || material instanceof THREE.MeshPhongMaterial || material instanceof THREE.MeshStandardMaterial || material.envMap ) { var uCamPos = p_uniforms.map.cameraPosition; if ( uCamPos !== undefined ) { uCamPos.setValue( _gl, _vector3.setFromMatrixPosition( camera.matrixWorld ) ); } } if ( material instanceof THREE.MeshPhongMaterial || material instanceof THREE.MeshLambertMaterial || material instanceof THREE.MeshBasicMaterial || material instanceof THREE.MeshStandardMaterial || material instanceof THREE.ShaderMaterial || material.skinning ) { p_uniforms.setValue( _gl, 'viewMatrix', camera.matrixWorldInverse ); } p_uniforms.set( _gl, _this, 'toneMappingExposure' ); p_uniforms.set( _gl, _this, 'toneMappingWhitePoint' ); } // skinning uniforms must be set even if material didn't change // auto-setting of texture unit for bone texture must go before other textures // not sure why, but otherwise weird things happen if ( material.skinning ) { p_uniforms.setOptional( _gl, object, 'bindMatrix' ); p_uniforms.setOptional( _gl, object, 'bindMatrixInverse' ); var skeleton = object.skeleton; if ( skeleton ) { if ( capabilities.floatVertexTextures && skeleton.useVertexTexture ) { p_uniforms.set( _gl, skeleton, 'boneTexture' ); p_uniforms.set( _gl, skeleton, 'boneTextureWidth' ); p_uniforms.set( _gl, skeleton, 'boneTextureHeight' ); } else { p_uniforms.setOptional( _gl, skeleton, 'boneMatrices' ); } } } if ( refreshMaterial ) { if ( material.lights ) { // the current material requires lighting info // note: all lighting uniforms are always set correctly // they simply reference the renderer's state for their // values // // use the current material's .needsUpdate flags to set // the GL state when required markUniformsLightsNeedsUpdate( m_uniforms, refreshLights ); } // refresh uniforms common to several materials if ( fog && material.fog ) { refreshUniformsFog( m_uniforms, fog ); } if ( material instanceof THREE.MeshBasicMaterial || material instanceof THREE.MeshLambertMaterial || material instanceof THREE.MeshPhongMaterial || material instanceof THREE.MeshStandardMaterial || material instanceof THREE.MeshDepthMaterial ) { refreshUniformsCommon( m_uniforms, material ); } // refresh single material specific uniforms if ( material instanceof THREE.LineBasicMaterial ) { refreshUniformsLine( m_uniforms, material ); } else if ( material instanceof THREE.LineDashedMaterial ) { refreshUniformsLine( m_uniforms, material ); refreshUniformsDash( m_uniforms, material ); } else if ( material instanceof THREE.PointsMaterial ) { refreshUniformsPoints( m_uniforms, material ); } else if ( material instanceof THREE.MeshLambertMaterial ) { refreshUniformsLambert( m_uniforms, material ); } else if ( material instanceof THREE.MeshPhongMaterial ) { refreshUniformsPhong( m_uniforms, material ); } else if ( material instanceof THREE.MeshPhysicalMaterial ) { refreshUniformsPhysical( m_uniforms, material ); } else if ( material instanceof THREE.MeshStandardMaterial ) { refreshUniformsStandard( m_uniforms, material ); } else if ( material instanceof THREE.MeshDepthMaterial ) { if ( material.displacementMap ) { m_uniforms.displacementMap.value = material.displacementMap; m_uniforms.displacementScale.value = material.displacementScale; m_uniforms.displacementBias.value = material.displacementBias; } } else if ( material instanceof THREE.MeshNormalMaterial ) { m_uniforms.opacity.value = material.opacity; } THREE.WebGLUniforms.upload( _gl, materialProperties.uniformsList, m_uniforms, _this ); } // common matrices p_uniforms.set( _gl, object, 'modelViewMatrix' ); p_uniforms.set( _gl, object, 'normalMatrix' ); p_uniforms.setValue( _gl, 'modelMatrix', object.matrixWorld ); // dynamic uniforms var dynUniforms = materialProperties.dynamicUniforms; if ( dynUniforms !== null ) { THREE.WebGLUniforms.evalDynamic( dynUniforms, m_uniforms, object, camera ); THREE.WebGLUniforms.upload( _gl, dynUniforms, m_uniforms, _this ); } return program; } // Uniforms (refresh uniforms objects) function refreshUniformsCommon ( uniforms, material ) { uniforms.opacity.value = material.opacity; uniforms.diffuse.value = material.color; if ( material.emissive ) { uniforms.emissive.value.copy( material.emissive ).multiplyScalar( material.emissiveIntensity ); } uniforms.map.value = material.map; uniforms.specularMap.value = material.specularMap; uniforms.alphaMap.value = material.alphaMap; if ( material.aoMap ) { uniforms.aoMap.value = material.aoMap; uniforms.aoMapIntensity.value = material.aoMapIntensity; } // uv repeat and offset setting priorities // 1. color map // 2. specular map // 3. normal map // 4. bump map // 5. alpha map // 6. emissive map var uvScaleMap; if ( material.map ) { uvScaleMap = material.map; } else if ( material.specularMap ) { uvScaleMap = material.specularMap; } else if ( material.displacementMap ) { uvScaleMap = material.displacementMap; } else if ( material.normalMap ) { uvScaleMap = material.normalMap; } else if ( material.bumpMap ) { uvScaleMap = material.bumpMap; } else if ( material.roughnessMap ) { uvScaleMap = material.roughnessMap; } else if ( material.metalnessMap ) { uvScaleMap = material.metalnessMap; } else if ( material.alphaMap ) { uvScaleMap = material.alphaMap; } else if ( material.emissiveMap ) { uvScaleMap = material.emissiveMap; } if ( uvScaleMap !== undefined ) { // backwards compatibility if ( uvScaleMap instanceof THREE.WebGLRenderTarget ) { uvScaleMap = uvScaleMap.texture; } var offset = uvScaleMap.offset; var repeat = uvScaleMap.repeat; uniforms.offsetRepeat.value.set( offset.x, offset.y, repeat.x, repeat.y ); } uniforms.envMap.value = material.envMap; // don't flip CubeTexture envMaps, flip everything else: // WebGLRenderTargetCube will be flipped for backwards compatibility // WebGLRenderTargetCube.texture will be flipped because it's a Texture and NOT a CubeTexture // this check must be handled differently, or removed entirely, if WebGLRenderTargetCube uses a CubeTexture in the future uniforms.flipEnvMap.value = ( ! ( material.envMap instanceof THREE.CubeTexture ) ) ? 1 : - 1; uniforms.reflectivity.value = material.reflectivity; uniforms.refractionRatio.value = material.refractionRatio; } function refreshUniformsLine ( uniforms, material ) { uniforms.diffuse.value = material.color; uniforms.opacity.value = material.opacity; } function refreshUniformsDash ( uniforms, material ) { uniforms.dashSize.value = material.dashSize; uniforms.totalSize.value = material.dashSize + material.gapSize; uniforms.scale.value = material.scale; } function refreshUniformsPoints ( uniforms, material ) { uniforms.diffuse.value = material.color; uniforms.opacity.value = material.opacity; uniforms.size.value = material.size * _pixelRatio; uniforms.scale.value = _canvas.clientHeight * 0.5; uniforms.map.value = material.map; if ( material.map !== null ) { var offset = material.map.offset; var repeat = material.map.repeat; uniforms.offsetRepeat.value.set( offset.x, offset.y, repeat.x, repeat.y ); } } function refreshUniformsFog ( uniforms, fog ) { uniforms.fogColor.value = fog.color; if ( fog instanceof THREE.Fog ) { uniforms.fogNear.value = fog.near; uniforms.fogFar.value = fog.far; } else if ( fog instanceof THREE.FogExp2 ) { uniforms.fogDensity.value = fog.density; } } function refreshUniformsLambert ( uniforms, material ) { if ( material.lightMap ) { uniforms.lightMap.value = material.lightMap; uniforms.lightMapIntensity.value = material.lightMapIntensity; } if ( material.emissiveMap ) { uniforms.emissiveMap.value = material.emissiveMap; } } function refreshUniformsPhong ( uniforms, material ) { uniforms.specular.value = material.specular; uniforms.shininess.value = Math.max( material.shininess, 1e-4 ); // to prevent pow( 0.0, 0.0 ) if ( material.lightMap ) { uniforms.lightMap.value = material.lightMap; uniforms.lightMapIntensity.value = material.lightMapIntensity; } if ( material.emissiveMap ) { uniforms.emissiveMap.value = material.emissiveMap; } if ( material.bumpMap ) { uniforms.bumpMap.value = material.bumpMap; uniforms.bumpScale.value = material.bumpScale; } if ( material.normalMap ) { uniforms.normalMap.value = material.normalMap; uniforms.normalScale.value.copy( material.normalScale ); } if ( material.displacementMap ) { uniforms.displacementMap.value = material.displacementMap; uniforms.displacementScale.value = material.displacementScale; uniforms.displacementBias.value = material.displacementBias; } } function refreshUniformsStandard ( uniforms, material ) { uniforms.roughness.value = material.roughness; uniforms.metalness.value = material.metalness; if ( material.roughnessMap ) { uniforms.roughnessMap.value = material.roughnessMap; } if ( material.metalnessMap ) { uniforms.metalnessMap.value = material.metalnessMap; } if ( material.lightMap ) { uniforms.lightMap.value = material.lightMap; uniforms.lightMapIntensity.value = material.lightMapIntensity; } if ( material.emissiveMap ) { uniforms.emissiveMap.value = material.emissiveMap; } if ( material.bumpMap ) { uniforms.bumpMap.value = material.bumpMap; uniforms.bumpScale.value = material.bumpScale; } if ( material.normalMap ) { uniforms.normalMap.value = material.normalMap; uniforms.normalScale.value.copy( material.normalScale ); } if ( material.displacementMap ) { uniforms.displacementMap.value = material.displacementMap; uniforms.displacementScale.value = material.displacementScale; uniforms.displacementBias.value = material.displacementBias; } if ( material.envMap ) { //uniforms.envMap.value = material.envMap; // part of uniforms common uniforms.envMapIntensity.value = material.envMapIntensity; } } function refreshUniformsPhysical ( uniforms, material ) { uniforms.clearCoat.value = material.clearCoat; uniforms.clearCoatRoughness.value = material.clearCoatRoughness; refreshUniformsStandard( uniforms, material ); } // If uniforms are marked as clean, they don't need to be loaded to the GPU. function markUniformsLightsNeedsUpdate ( uniforms, value ) { uniforms.ambientLightColor.needsUpdate = value; uniforms.directionalLights.needsUpdate = value; uniforms.pointLights.needsUpdate = value; uniforms.spotLights.needsUpdate = value; uniforms.hemisphereLights.needsUpdate = value; } // Lighting function setupShadows ( lights ) { var lightShadowsLength = 0; for ( var i = 0, l = lights.length; i < l; i ++ ) { var light = lights[ i ]; if ( light.castShadow ) { _lights.shadows[ lightShadowsLength ++ ] = light; } } _lights.shadows.length = lightShadowsLength; } function setupLights ( lights, camera ) { var l, ll, light, r = 0, g = 0, b = 0, color, intensity, distance, shadowMap, viewMatrix = camera.matrixWorldInverse, directionalLength = 0, pointLength = 0, spotLength = 0, hemiLength = 0; for ( l = 0, ll = lights.length; l < ll; l ++ ) { light = lights[ l ]; color = light.color; intensity = light.intensity; distance = light.distance; shadowMap = ( light.shadow && light.shadow.map ) ? light.shadow.map.texture : null; if ( light instanceof THREE.AmbientLight ) { r += color.r * intensity; g += color.g * intensity; b += color.b * intensity; } else if ( light instanceof THREE.DirectionalLight ) { var uniforms = lightCache.get( light ); uniforms.color.copy( light.color ).multiplyScalar( light.intensity ); uniforms.direction.setFromMatrixPosition( light.matrixWorld ); _vector3.setFromMatrixPosition( light.target.matrixWorld ); uniforms.direction.sub( _vector3 ); uniforms.direction.transformDirection( viewMatrix ); uniforms.shadow = light.castShadow; if ( light.castShadow ) { uniforms.shadowBias = light.shadow.bias; uniforms.shadowRadius = light.shadow.radius; uniforms.shadowMapSize = light.shadow.mapSize; } _lights.directionalShadowMap[ directionalLength ] = shadowMap; _lights.directionalShadowMatrix[ directionalLength ] = light.shadow.matrix; _lights.directional[ directionalLength ++ ] = uniforms; } else if ( light instanceof THREE.SpotLight ) { var uniforms = lightCache.get( light ); uniforms.position.setFromMatrixPosition( light.matrixWorld ); uniforms.position.applyMatrix4( viewMatrix ); uniforms.color.copy( color ).multiplyScalar( intensity ); uniforms.distance = distance; uniforms.direction.setFromMatrixPosition( light.matrixWorld ); _vector3.setFromMatrixPosition( light.target.matrixWorld ); uniforms.direction.sub( _vector3 ); uniforms.direction.transformDirection( viewMatrix ); uniforms.coneCos = Math.cos( light.angle ); uniforms.penumbraCos = Math.cos( light.angle * ( 1 - light.penumbra ) ); uniforms.decay = ( light.distance === 0 ) ? 0.0 : light.decay; uniforms.shadow = light.castShadow; if ( light.castShadow ) { uniforms.shadowBias = light.shadow.bias; uniforms.shadowRadius = light.shadow.radius; uniforms.shadowMapSize = light.shadow.mapSize; } _lights.spotShadowMap[ spotLength ] = shadowMap; _lights.spotShadowMatrix[ spotLength ] = light.shadow.matrix; _lights.spot[ spotLength ++ ] = uniforms; } else if ( light instanceof THREE.PointLight ) { var uniforms = lightCache.get( light ); uniforms.position.setFromMatrixPosition( light.matrixWorld ); uniforms.position.applyMatrix4( viewMatrix ); uniforms.color.copy( light.color ).multiplyScalar( light.intensity ); uniforms.distance = light.distance; uniforms.decay = ( light.distance === 0 ) ? 0.0 : light.decay; uniforms.shadow = light.castShadow; if ( light.castShadow ) { uniforms.shadowBias = light.shadow.bias; uniforms.shadowRadius = light.shadow.radius; uniforms.shadowMapSize = light.shadow.mapSize; } _lights.pointShadowMap[ pointLength ] = shadowMap; if ( _lights.pointShadowMatrix[ pointLength ] === undefined ) { _lights.pointShadowMatrix[ pointLength ] = new THREE.Matrix4(); } // for point lights we set the shadow matrix to be a translation-only matrix // equal to inverse of the light's position _vector3.setFromMatrixPosition( light.matrixWorld ).negate(); _lights.pointShadowMatrix[ pointLength ].identity().setPosition( _vector3 ); _lights.point[ pointLength ++ ] = uniforms; } else if ( light instanceof THREE.HemisphereLight ) { var uniforms = lightCache.get( light ); uniforms.direction.setFromMatrixPosition( light.matrixWorld ); uniforms.direction.transformDirection( viewMatrix ); uniforms.direction.normalize(); uniforms.skyColor.copy( light.color ).multiplyScalar( intensity ); uniforms.groundColor.copy( light.groundColor ).multiplyScalar( intensity ); _lights.hemi[ hemiLength ++ ] = uniforms; } } _lights.ambient[ 0 ] = r; _lights.ambient[ 1 ] = g; _lights.ambient[ 2 ] = b; _lights.directional.length = directionalLength; _lights.spot.length = spotLength; _lights.point.length = pointLength; _lights.hemi.length = hemiLength; _lights.hash = directionalLength + ',' + pointLength + ',' + spotLength + ',' + hemiLength + ',' + _lights.shadows.length; } // GL state setting this.setFaceCulling = function ( cullFace, frontFaceDirection ) { state.setCullFace( cullFace ); state.setFlipSided( frontFaceDirection === THREE.FrontFaceDirectionCW ); }; // Textures function allocTextureUnit() { var textureUnit = _usedTextureUnits; if ( textureUnit >= capabilities.maxTextures ) { console.warn( 'WebGLRenderer: trying to use ' + textureUnit + ' texture units while this GPU supports only ' + capabilities.maxTextures ); } _usedTextureUnits += 1; return textureUnit; } this.allocTextureUnit = allocTextureUnit; // this.setTexture2D = setTexture2D; this.setTexture2D = ( function() { var warned = false; // backwards compatibility: peel texture.texture return function setTexture2D( texture, slot ) { if ( texture instanceof THREE.WebGLRenderTarget ) { if ( ! warned ) { console.warn( "THREE.WebGLRenderer.setTexture2D: don't use render targets as textures. Use their .texture property instead." ); warned = true; } texture = texture.texture; } textures.setTexture2D( texture, slot ); }; }() ); this.setTexture = ( function() { var warned = false; return function setTexture( texture, slot ) { if ( ! warned ) { console.warn( "THREE.WebGLRenderer: .setTexture is deprecated, use setTexture2D instead." ); warned = true; } textures.setTexture2D( texture, slot ); }; }() ); this.setTextureCube = ( function() { var warned = false; return function setTextureCube( texture, slot ) { // backwards compatibility: peel texture.texture if ( texture instanceof THREE.WebGLRenderTargetCube ) { if ( ! warned ) { console.warn( "THREE.WebGLRenderer.setTextureCube: don't use cube render targets as textures. Use their .texture property instead." ); warned = true; } texture = texture.texture; } // currently relying on the fact that WebGLRenderTargetCube.texture is a Texture and NOT a CubeTexture // TODO: unify these code paths if ( texture instanceof THREE.CubeTexture || ( Array.isArray( texture.image ) && texture.image.length === 6 ) ) { // CompressedTexture can have Array in image :/ // this function alone should take care of cube textures textures.setTextureCube( texture, slot ); } else { // assumed: texture property of THREE.WebGLRenderTargetCube textures.setTextureCubeDynamic( texture, slot ); } }; }() ); this.getCurrentRenderTarget = function() { return _currentRenderTarget; }; this.setRenderTarget = function ( renderTarget ) { _currentRenderTarget = renderTarget; if ( renderTarget && properties.get( renderTarget ).__webglFramebuffer === undefined ) { textures.setupRenderTarget( renderTarget ); } var isCube = ( renderTarget instanceof THREE.WebGLRenderTargetCube ); var framebuffer; if ( renderTarget ) { var renderTargetProperties = properties.get( renderTarget ); if ( isCube ) { framebuffer = renderTargetProperties.__webglFramebuffer[ renderTarget.activeCubeFace ]; } else { framebuffer = renderTargetProperties.__webglFramebuffer; } _currentScissor.copy( renderTarget.scissor ); _currentScissorTest = renderTarget.scissorTest; _currentViewport.copy( renderTarget.viewport ); } else { framebuffer = null; _currentScissor.copy( _scissor ).multiplyScalar( _pixelRatio ); _currentScissorTest = _scissorTest; _currentViewport.copy( _viewport ).multiplyScalar( _pixelRatio ); } if ( _currentFramebuffer !== framebuffer ) { _gl.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer ); _currentFramebuffer = framebuffer; } state.scissor( _currentScissor ); state.setScissorTest( _currentScissorTest ); state.viewport( _currentViewport ); if ( isCube ) { var textureProperties = properties.get( renderTarget.texture ); _gl.framebufferTexture2D( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_CUBE_MAP_POSITIVE_X + renderTarget.activeCubeFace, textureProperties.__webglTexture, renderTarget.activeMipMapLevel ); } }; this.readRenderTargetPixels = function ( renderTarget, x, y, width, height, buffer ) { if ( renderTarget instanceof THREE.WebGLRenderTarget === false ) { console.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.' ); return; } var framebuffer = properties.get( renderTarget ).__webglFramebuffer; if ( framebuffer ) { var restore = false; if ( framebuffer !== _currentFramebuffer ) { _gl.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer ); restore = true; } try { var texture = renderTarget.texture; if ( texture.format !== THREE.RGBAFormat && paramThreeToGL( texture.format ) !== _gl.getParameter( _gl.IMPLEMENTATION_COLOR_READ_FORMAT ) ) { console.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.' ); return; } if ( texture.type !== THREE.UnsignedByteType && paramThreeToGL( texture.type ) !== _gl.getParameter( _gl.IMPLEMENTATION_COLOR_READ_TYPE ) && ! ( texture.type === THREE.FloatType && extensions.get( 'WEBGL_color_buffer_float' ) ) && ! ( texture.type === THREE.HalfFloatType && extensions.get( 'EXT_color_buffer_half_float' ) ) ) { console.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.' ); return; } if ( _gl.checkFramebufferStatus( _gl.FRAMEBUFFER ) === _gl.FRAMEBUFFER_COMPLETE ) { // the following if statement ensures valid read requests (no out-of-bounds pixels, see #8604) if ( ( x >= 0 && x <= ( renderTarget.width - width ) ) && ( y >= 0 && y <= ( renderTarget.height - height ) ) ) { _gl.readPixels( x, y, width, height, paramThreeToGL( texture.format ), paramThreeToGL( texture.type ), buffer ); } } else { console.error( 'THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete.' ); } } finally { if ( restore ) { _gl.bindFramebuffer( _gl.FRAMEBUFFER, _currentFramebuffer ); } } } }; // Map three.js constants to WebGL constants function paramThreeToGL ( p ) { var extension; if ( p === THREE.RepeatWrapping ) return _gl.REPEAT; if ( p === THREE.ClampToEdgeWrapping ) return _gl.CLAMP_TO_EDGE; if ( p === THREE.MirroredRepeatWrapping ) return _gl.MIRRORED_REPEAT; if ( p === THREE.NearestFilter ) return _gl.NEAREST; if ( p === THREE.NearestMipMapNearestFilter ) return _gl.NEAREST_MIPMAP_NEAREST; if ( p === THREE.NearestMipMapLinearFilter ) return _gl.NEAREST_MIPMAP_LINEAR; if ( p === THREE.LinearFilter ) return _gl.LINEAR; if ( p === THREE.LinearMipMapNearestFilter ) return _gl.LINEAR_MIPMAP_NEAREST; if ( p === THREE.LinearMipMapLinearFilter ) return _gl.LINEAR_MIPMAP_LINEAR; if ( p === THREE.UnsignedByteType ) return _gl.UNSIGNED_BYTE; if ( p === THREE.UnsignedShort4444Type ) return _gl.UNSIGNED_SHORT_4_4_4_4; if ( p === THREE.UnsignedShort5551Type ) return _gl.UNSIGNED_SHORT_5_5_5_1; if ( p === THREE.UnsignedShort565Type ) return _gl.UNSIGNED_SHORT_5_6_5; if ( p === THREE.ByteType ) return _gl.BYTE; if ( p === THREE.ShortType ) return _gl.SHORT; if ( p === THREE.UnsignedShortType ) return _gl.UNSIGNED_SHORT; if ( p === THREE.IntType ) return _gl.INT; if ( p === THREE.UnsignedIntType ) return _gl.UNSIGNED_INT; if ( p === THREE.FloatType ) return _gl.FLOAT; extension = extensions.get( 'OES_texture_half_float' ); if ( extension !== null ) { if ( p === THREE.HalfFloatType ) return extension.HALF_FLOAT_OES; } if ( p === THREE.AlphaFormat ) return _gl.ALPHA; if ( p === THREE.RGBFormat ) return _gl.RGB; if ( p === THREE.RGBAFormat ) return _gl.RGBA; if ( p === THREE.LuminanceFormat ) return _gl.LUMINANCE; if ( p === THREE.LuminanceAlphaFormat ) return _gl.LUMINANCE_ALPHA; if ( p === THREE.DepthFormat ) return _gl.DEPTH_COMPONENT; if ( p === THREE.AddEquation ) return _gl.FUNC_ADD; if ( p === THREE.SubtractEquation ) return _gl.FUNC_SUBTRACT; if ( p === THREE.ReverseSubtractEquation ) return _gl.FUNC_REVERSE_SUBTRACT; if ( p === THREE.ZeroFactor ) return _gl.ZERO; if ( p === THREE.OneFactor ) return _gl.ONE; if ( p === THREE.SrcColorFactor ) return _gl.SRC_COLOR; if ( p === THREE.OneMinusSrcColorFactor ) return _gl.ONE_MINUS_SRC_COLOR; if ( p === THREE.SrcAlphaFactor ) return _gl.SRC_ALPHA; if ( p === THREE.OneMinusSrcAlphaFactor ) return _gl.ONE_MINUS_SRC_ALPHA; if ( p === THREE.DstAlphaFactor ) return _gl.DST_ALPHA; if ( p === THREE.OneMinusDstAlphaFactor ) return _gl.ONE_MINUS_DST_ALPHA; if ( p === THREE.DstColorFactor ) return _gl.DST_COLOR; if ( p === THREE.OneMinusDstColorFactor ) return _gl.ONE_MINUS_DST_COLOR; if ( p === THREE.SrcAlphaSaturateFactor ) return _gl.SRC_ALPHA_SATURATE; extension = extensions.get( 'WEBGL_compressed_texture_s3tc' ); if ( extension !== null ) { if ( p === THREE.RGB_S3TC_DXT1_Format ) return extension.COMPRESSED_RGB_S3TC_DXT1_EXT; if ( p === THREE.RGBA_S3TC_DXT1_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT1_EXT; if ( p === THREE.RGBA_S3TC_DXT3_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT3_EXT; if ( p === THREE.RGBA_S3TC_DXT5_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT5_EXT; } extension = extensions.get( 'WEBGL_compressed_texture_pvrtc' ); if ( extension !== null ) { if ( p === THREE.RGB_PVRTC_4BPPV1_Format ) return extension.COMPRESSED_RGB_PVRTC_4BPPV1_IMG; if ( p === THREE.RGB_PVRTC_2BPPV1_Format ) return extension.COMPRESSED_RGB_PVRTC_2BPPV1_IMG; if ( p === THREE.RGBA_PVRTC_4BPPV1_Format ) return extension.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG; if ( p === THREE.RGBA_PVRTC_2BPPV1_Format ) return extension.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG; } extension = extensions.get( 'WEBGL_compressed_texture_etc1' ); if ( extension !== null ) { if ( p === THREE.RGB_ETC1_Format ) return extension.COMPRESSED_RGB_ETC1_WEBGL; } extension = extensions.get( 'EXT_blend_minmax' ); if ( extension !== null ) { if ( p === THREE.MinEquation ) return extension.MIN_EXT; if ( p === THREE.MaxEquation ) return extension.MAX_EXT; } return 0; } }; // File:src/renderers/WebGLRenderTarget.js /** * @author szimek / https://github.com/szimek/ * @author alteredq / http://alteredqualia.com/ * @author Marius Kintel / https://github.com/kintel */ /* In options, we can specify: * Texture parameters for an auto-generated target texture * depthBuffer/stencilBuffer: Booleans to indicate if we should generate these buffers */ THREE.WebGLRenderTarget = function ( width, height, options ) { this.uuid = THREE.Math.generateUUID(); this.width = width; this.height = height; this.scissor = new THREE.Vector4( 0, 0, width, height ); this.scissorTest = false; this.viewport = new THREE.Vector4( 0, 0, width, height ); options = options || {}; if ( options.minFilter === undefined ) options.minFilter = THREE.LinearFilter; this.texture = new THREE.Texture( undefined, undefined, options.wrapS, options.wrapT, options.magFilter, options.minFilter, options.format, options.type, options.anisotropy, options.encoding ); this.depthBuffer = options.depthBuffer !== undefined ? options.depthBuffer : true; this.stencilBuffer = options.stencilBuffer !== undefined ? options.stencilBuffer : true; this.depthTexture = null; }; Object.assign( THREE.WebGLRenderTarget.prototype, THREE.EventDispatcher.prototype, { setSize: function ( width, height ) { if ( this.width !== width || this.height !== height ) { this.width = width; this.height = height; this.dispose(); } this.viewport.set( 0, 0, width, height ); this.scissor.set( 0, 0, width, height ); }, clone: function () { return new this.constructor().copy( this ); }, copy: function ( source ) { this.width = source.width; this.height = source.height; this.viewport.copy( source.viewport ); this.texture = source.texture.clone(); this.depthBuffer = source.depthBuffer; this.stencilBuffer = source.stencilBuffer; this.depthTexture = source.depthTexture; return this; }, dispose: function () { this.dispatchEvent( { type: 'dispose' } ); } } ); // File:src/renderers/WebGLRenderTargetCube.js /** * @author alteredq / http://alteredqualia.com */ THREE.WebGLRenderTargetCube = function ( width, height, options ) { THREE.WebGLRenderTarget.call( this, width, height, options ); this.activeCubeFace = 0; // PX 0, NX 1, PY 2, NY 3, PZ 4, NZ 5 this.activeMipMapLevel = 0; }; THREE.WebGLRenderTargetCube.prototype = Object.create( THREE.WebGLRenderTarget.prototype ); THREE.WebGLRenderTargetCube.prototype.constructor = THREE.WebGLRenderTargetCube; // File:src/renderers/webgl/WebGLBufferRenderer.js /** * @author mrdoob / http://mrdoob.com/ */ THREE.WebGLBufferRenderer = function ( _gl, extensions, _infoRender ) { var mode; function setMode( value ) { mode = value; } function render( start, count ) { _gl.drawArrays( mode, start, count ); _infoRender.calls ++; _infoRender.vertices += count; if ( mode === _gl.TRIANGLES ) _infoRender.faces += count / 3; } function renderInstances( geometry ) { var extension = extensions.get( 'ANGLE_instanced_arrays' ); if ( extension === null ) { console.error( 'THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.' ); return; } var position = geometry.attributes.position; var count = 0; if ( position instanceof THREE.InterleavedBufferAttribute ) { count = position.data.count; extension.drawArraysInstancedANGLE( mode, 0, count, geometry.maxInstancedCount ); } else { count = position.count; extension.drawArraysInstancedANGLE( mode, 0, count, geometry.maxInstancedCount ); } _infoRender.calls ++; _infoRender.vertices += count * geometry.maxInstancedCount; if ( mode === _gl.TRIANGLES ) _infoRender.faces += geometry.maxInstancedCount * count / 3; } this.setMode = setMode; this.render = render; this.renderInstances = renderInstances; }; // File:src/renderers/webgl/WebGLClipping.js THREE.WebGLClipping = function() { var scope = this, globalState = null, numGlobalPlanes = 0, localClippingEnabled = false, renderingShadows = false, plane = new THREE.Plane(), viewNormalMatrix = new THREE.Matrix3(), uniform = { value: null, needsUpdate: false }; this.uniform = uniform; this.numPlanes = 0; this.init = function( planes, enableLocalClipping, camera ) { var enabled = planes.length !== 0 || enableLocalClipping || // enable state of previous frame - the clipping code has to // run another frame in order to reset the state: numGlobalPlanes !== 0 || localClippingEnabled; localClippingEnabled = enableLocalClipping; globalState = projectPlanes( planes, camera, 0 ); numGlobalPlanes = planes.length; return enabled; }; this.beginShadows = function() { renderingShadows = true; projectPlanes( null ); }; this.endShadows = function() { renderingShadows = false; resetGlobalState(); }; this.setState = function( planes, clipShadows, camera, cache, fromCache ) { if ( ! localClippingEnabled || planes === null || planes.length === 0 || renderingShadows && ! clipShadows ) { // there's no local clipping if ( renderingShadows ) { // there's no global clipping projectPlanes( null ); } else { resetGlobalState(); } } else { var nGlobal = renderingShadows ? 0 : numGlobalPlanes, lGlobal = nGlobal * 4, dstArray = cache.clippingState || null; uniform.value = dstArray; // ensure unique state dstArray = projectPlanes( planes, camera, lGlobal, fromCache ); for ( var i = 0; i !== lGlobal; ++ i ) { dstArray[ i ] = globalState[ i ]; } cache.clippingState = dstArray; this.numPlanes += nGlobal; } }; function resetGlobalState() { if ( uniform.value !== globalState ) { uniform.value = globalState; uniform.needsUpdate = numGlobalPlanes > 0; } scope.numPlanes = numGlobalPlanes; } function projectPlanes( planes, camera, dstOffset, skipTransform ) { var nPlanes = planes !== null ? planes.length : 0, dstArray = null; if ( nPlanes !== 0 ) { dstArray = uniform.value; if ( skipTransform !== true || dstArray === null ) { var flatSize = dstOffset + nPlanes * 4, viewMatrix = camera.matrixWorldInverse; viewNormalMatrix.getNormalMatrix( viewMatrix ); if ( dstArray === null || dstArray.length < flatSize ) { dstArray = new Float32Array( flatSize ); } for ( var i = 0, i4 = dstOffset; i !== nPlanes; ++ i, i4 += 4 ) { plane.copy( planes[ i ] ). applyMatrix4( viewMatrix, viewNormalMatrix ); plane.normal.toArray( dstArray, i4 ); dstArray[ i4 + 3 ] = plane.constant; } } uniform.value = dstArray; uniform.needsUpdate = true; } scope.numPlanes = nPlanes; return dstArray; } }; // File:src/renderers/webgl/WebGLIndexedBufferRenderer.js /** * @author mrdoob / http://mrdoob.com/ */ THREE.WebGLIndexedBufferRenderer = function ( _gl, extensions, _infoRender ) { var mode; function setMode( value ) { mode = value; } var type, size; function setIndex( index ) { if ( index.array instanceof Uint32Array && extensions.get( 'OES_element_index_uint' ) ) { type = _gl.UNSIGNED_INT; size = 4; } else { type = _gl.UNSIGNED_SHORT; size = 2; } } function render( start, count ) { _gl.drawElements( mode, count, type, start * size ); _infoRender.calls ++; _infoRender.vertices += count; if ( mode === _gl.TRIANGLES ) _infoRender.faces += count / 3; } function renderInstances( geometry, start, count ) { var extension = extensions.get( 'ANGLE_instanced_arrays' ); if ( extension === null ) { console.error( 'THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.' ); return; } extension.drawElementsInstancedANGLE( mode, count, type, start * size, geometry.maxInstancedCount ); _infoRender.calls ++; _infoRender.vertices += count * geometry.maxInstancedCount; if ( mode === _gl.TRIANGLES ) _infoRender.faces += geometry.maxInstancedCount * count / 3; } this.setMode = setMode; this.setIndex = setIndex; this.render = render; this.renderInstances = renderInstances; }; // File:src/renderers/webgl/WebGLExtensions.js /** * @author mrdoob / http://mrdoob.com/ */ THREE.WebGLExtensions = function ( gl ) { var extensions = {}; this.get = function ( name ) { if ( extensions[ name ] !== undefined ) { return extensions[ name ]; } var extension; switch ( name ) { case 'WEBGL_depth_texture': extension = gl.getExtension( 'WEBGL_depth_texture' ) || gl.getExtension( 'MOZ_WEBGL_depth_texture' ) || gl.getExtension( 'WEBKIT_WEBGL_depth_texture' ); break; case 'EXT_texture_filter_anisotropic': extension = gl.getExtension( 'EXT_texture_filter_anisotropic' ) || gl.getExtension( 'MOZ_EXT_texture_filter_anisotropic' ) || gl.getExtension( 'WEBKIT_EXT_texture_filter_anisotropic' ); break; case 'WEBGL_compressed_texture_s3tc': extension = gl.getExtension( 'WEBGL_compressed_texture_s3tc' ) || gl.getExtension( 'MOZ_WEBGL_compressed_texture_s3tc' ) || gl.getExtension( 'WEBKIT_WEBGL_compressed_texture_s3tc' ); break; case 'WEBGL_compressed_texture_pvrtc': extension = gl.getExtension( 'WEBGL_compressed_texture_pvrtc' ) || gl.getExtension( 'WEBKIT_WEBGL_compressed_texture_pvrtc' ); break; case 'WEBGL_compressed_texture_etc1': extension = gl.getExtension( 'WEBGL_compressed_texture_etc1' ); break; default: extension = gl.getExtension( name ); } if ( extension === null ) { console.warn( 'THREE.WebGLRenderer: ' + name + ' extension not supported.' ); } extensions[ name ] = extension; return extension; }; }; // File:src/renderers/webgl/WebGLCapabilities.js THREE.WebGLCapabilities = function ( gl, extensions, parameters ) { var maxAnisotropy; function getMaxAnisotropy() { if ( maxAnisotropy !== undefined ) return maxAnisotropy; var extension = extensions.get( 'EXT_texture_filter_anisotropic' ); if ( extension !== null ) { maxAnisotropy = gl.getParameter( extension.MAX_TEXTURE_MAX_ANISOTROPY_EXT ); } else { maxAnisotropy = 0; } return maxAnisotropy; } function getMaxPrecision( precision ) { if ( precision === 'highp' ) { if ( gl.getShaderPrecisionFormat( gl.VERTEX_SHADER, gl.HIGH_FLOAT ).precision > 0 && gl.getShaderPrecisionFormat( gl.FRAGMENT_SHADER, gl.HIGH_FLOAT ).precision > 0 ) { return 'highp'; } precision = 'mediump'; } if ( precision === 'mediump' ) { if ( gl.getShaderPrecisionFormat( gl.VERTEX_SHADER, gl.MEDIUM_FLOAT ).precision > 0 && gl.getShaderPrecisionFormat( gl.FRAGMENT_SHADER, gl.MEDIUM_FLOAT ).precision > 0 ) { return 'mediump'; } } return 'lowp'; } this.getMaxAnisotropy = getMaxAnisotropy; this.getMaxPrecision = getMaxPrecision; this.precision = parameters.precision !== undefined ? parameters.precision : 'highp'; this.logarithmicDepthBuffer = parameters.logarithmicDepthBuffer !== undefined ? parameters.logarithmicDepthBuffer : false; this.maxTextures = gl.getParameter( gl.MAX_TEXTURE_IMAGE_UNITS ); this.maxVertexTextures = gl.getParameter( gl.MAX_VERTEX_TEXTURE_IMAGE_UNITS ); this.maxTextureSize = gl.getParameter( gl.MAX_TEXTURE_SIZE ); this.maxCubemapSize = gl.getParameter( gl.MAX_CUBE_MAP_TEXTURE_SIZE ); this.maxAttributes = gl.getParameter( gl.MAX_VERTEX_ATTRIBS ); this.maxVertexUniforms = gl.getParameter( gl.MAX_VERTEX_UNIFORM_VECTORS ); this.maxVaryings = gl.getParameter( gl.MAX_VARYING_VECTORS ); this.maxFragmentUniforms = gl.getParameter( gl.MAX_FRAGMENT_UNIFORM_VECTORS ); this.vertexTextures = this.maxVertexTextures > 0; this.floatFragmentTextures = !! extensions.get( 'OES_texture_float' ); this.floatVertexTextures = this.vertexTextures && this.floatFragmentTextures; var _maxPrecision = getMaxPrecision( this.precision ); if ( _maxPrecision !== this.precision ) { console.warn( 'THREE.WebGLRenderer:', this.precision, 'not supported, using', _maxPrecision, 'instead.' ); this.precision = _maxPrecision; } if ( this.logarithmicDepthBuffer ) { this.logarithmicDepthBuffer = !! extensions.get( 'EXT_frag_depth' ); } }; // File:src/renderers/webgl/WebGLGeometries.js /** * @author mrdoob / http://mrdoob.com/ */ THREE.WebGLGeometries = function ( gl, properties, info ) { var geometries = {}; function get( object ) { var geometry = object.geometry; if ( geometries[ geometry.id ] !== undefined ) { return geometries[ geometry.id ]; } geometry.addEventListener( 'dispose', onGeometryDispose ); var buffergeometry; if ( geometry instanceof THREE.BufferGeometry ) { buffergeometry = geometry; } else if ( geometry instanceof THREE.Geometry ) { if ( geometry._bufferGeometry === undefined ) { geometry._bufferGeometry = new THREE.BufferGeometry().setFromObject( object ); } buffergeometry = geometry._bufferGeometry; } geometries[ geometry.id ] = buffergeometry; info.memory.geometries ++; return buffergeometry; } function onGeometryDispose( event ) { var geometry = event.target; var buffergeometry = geometries[ geometry.id ]; if ( buffergeometry.index !== null ) { deleteAttribute( buffergeometry.index ); } deleteAttributes( buffergeometry.attributes ); geometry.removeEventListener( 'dispose', onGeometryDispose ); delete geometries[ geometry.id ]; // TODO var property = properties.get( geometry ); if ( property.wireframe ) { deleteAttribute( property.wireframe ); } properties.delete( geometry ); var bufferproperty = properties.get( buffergeometry ); if ( bufferproperty.wireframe ) { deleteAttribute( bufferproperty.wireframe ); } properties.delete( buffergeometry ); // info.memory.geometries --; } function getAttributeBuffer( attribute ) { if ( attribute instanceof THREE.InterleavedBufferAttribute ) { return properties.get( attribute.data ).__webglBuffer; } return properties.get( attribute ).__webglBuffer; } function deleteAttribute( attribute ) { var buffer = getAttributeBuffer( attribute ); if ( buffer !== undefined ) { gl.deleteBuffer( buffer ); removeAttributeBuffer( attribute ); } } function deleteAttributes( attributes ) { for ( var name in attributes ) { deleteAttribute( attributes[ name ] ); } } function removeAttributeBuffer( attribute ) { if ( attribute instanceof THREE.InterleavedBufferAttribute ) { properties.delete( attribute.data ); } else { properties.delete( attribute ); } } this.get = get; }; // File:src/renderers/webgl/WebGLLights.js /** * @author mrdoob / http://mrdoob.com/ */ THREE.WebGLLights = function () { var lights = {}; this.get = function ( light ) { if ( lights[ light.id ] !== undefined ) { return lights[ light.id ]; } var uniforms; switch ( light.type ) { case 'DirectionalLight': uniforms = { direction: new THREE.Vector3(), color: new THREE.Color(), shadow: false, shadowBias: 0, shadowRadius: 1, shadowMapSize: new THREE.Vector2() }; break; case 'SpotLight': uniforms = { position: new THREE.Vector3(), direction: new THREE.Vector3(), color: new THREE.Color(), distance: 0, coneCos: 0, penumbraCos: 0, decay: 0, shadow: false, shadowBias: 0, shadowRadius: 1, shadowMapSize: new THREE.Vector2() }; break; case 'PointLight': uniforms = { position: new THREE.Vector3(), color: new THREE.Color(), distance: 0, decay: 0, shadow: false, shadowBias: 0, shadowRadius: 1, shadowMapSize: new THREE.Vector2() }; break; case 'HemisphereLight': uniforms = { direction: new THREE.Vector3(), skyColor: new THREE.Color(), groundColor: new THREE.Color() }; break; } lights[ light.id ] = uniforms; return uniforms; }; }; // File:src/renderers/webgl/WebGLObjects.js /** * @author mrdoob / http://mrdoob.com/ */ THREE.WebGLObjects = function ( gl, properties, info ) { var geometries = new THREE.WebGLGeometries( gl, properties, info ); // function update( object ) { // TODO: Avoid updating twice (when using shadowMap). Maybe add frame counter. var geometry = geometries.get( object ); if ( object.geometry instanceof THREE.Geometry ) { geometry.updateFromObject( object ); } var index = geometry.index; var attributes = geometry.attributes; if ( index !== null ) { updateAttribute( index, gl.ELEMENT_ARRAY_BUFFER ); } for ( var name in attributes ) { updateAttribute( attributes[ name ], gl.ARRAY_BUFFER ); } // morph targets var morphAttributes = geometry.morphAttributes; for ( var name in morphAttributes ) { var array = morphAttributes[ name ]; for ( var i = 0, l = array.length; i < l; i ++ ) { updateAttribute( array[ i ], gl.ARRAY_BUFFER ); } } return geometry; } function updateAttribute( attribute, bufferType ) { var data = ( attribute instanceof THREE.InterleavedBufferAttribute ) ? attribute.data : attribute; var attributeProperties = properties.get( data ); if ( attributeProperties.__webglBuffer === undefined ) { createBuffer( attributeProperties, data, bufferType ); } else if ( attributeProperties.version !== data.version ) { updateBuffer( attributeProperties, data, bufferType ); } } function createBuffer( attributeProperties, data, bufferType ) { attributeProperties.__webglBuffer = gl.createBuffer(); gl.bindBuffer( bufferType, attributeProperties.__webglBuffer ); var usage = data.dynamic ? gl.DYNAMIC_DRAW : gl.STATIC_DRAW; gl.bufferData( bufferType, data.array, usage ); attributeProperties.version = data.version; } function updateBuffer( attributeProperties, data, bufferType ) { gl.bindBuffer( bufferType, attributeProperties.__webglBuffer ); if ( data.dynamic === false || data.updateRange.count === - 1 ) { // Not using update ranges gl.bufferSubData( bufferType, 0, data.array ); } else if ( data.updateRange.count === 0 ) { console.error( 'THREE.WebGLObjects.updateBuffer: dynamic THREE.BufferAttribute marked as needsUpdate but updateRange.count is 0, ensure you are using set methods or updating manually.' ); } else { gl.bufferSubData( bufferType, data.updateRange.offset * data.array.BYTES_PER_ELEMENT, data.array.subarray( data.updateRange.offset, data.updateRange.offset + data.updateRange.count ) ); data.updateRange.count = 0; // reset range } attributeProperties.version = data.version; } function getAttributeBuffer( attribute ) { if ( attribute instanceof THREE.InterleavedBufferAttribute ) { return properties.get( attribute.data ).__webglBuffer; } return properties.get( attribute ).__webglBuffer; } function getWireframeAttribute( geometry ) { var property = properties.get( geometry ); if ( property.wireframe !== undefined ) { return property.wireframe; } var indices = []; var index = geometry.index; var attributes = geometry.attributes; var position = attributes.position; // console.time( 'wireframe' ); if ( index !== null ) { var edges = {}; var array = index.array; for ( var i = 0, l = array.length; i < l; i += 3 ) { var a = array[ i + 0 ]; var b = array[ i + 1 ]; var c = array[ i + 2 ]; if ( checkEdge( edges, a, b ) ) indices.push( a, b ); if ( checkEdge( edges, b, c ) ) indices.push( b, c ); if ( checkEdge( edges, c, a ) ) indices.push( c, a ); } } else { var array = attributes.position.array; for ( var i = 0, l = ( array.length / 3 ) - 1; i < l; i += 3 ) { var a = i + 0; var b = i + 1; var c = i + 2; indices.push( a, b, b, c, c, a ); } } // console.timeEnd( 'wireframe' ); var TypeArray = position.count > 65535 ? Uint32Array : Uint16Array; var attribute = new THREE.BufferAttribute( new TypeArray( indices ), 1 ); updateAttribute( attribute, gl.ELEMENT_ARRAY_BUFFER ); property.wireframe = attribute; return attribute; } function checkEdge( edges, a, b ) { if ( a > b ) { var tmp = a; a = b; b = tmp; } var list = edges[ a ]; if ( list === undefined ) { edges[ a ] = [ b ]; return true; } else if ( list.indexOf( b ) === -1 ) { list.push( b ); return true; } return false; } this.getAttributeBuffer = getAttributeBuffer; this.getWireframeAttribute = getWireframeAttribute; this.update = update; }; // File:src/renderers/webgl/WebGLProgram.js THREE.WebGLProgram = ( function () { var programIdCount = 0; function getEncodingComponents( encoding ) { switch ( encoding ) { case THREE.LinearEncoding: return [ 'Linear','( value )' ]; case THREE.sRGBEncoding: return [ 'sRGB','( value )' ]; case THREE.RGBEEncoding: return [ 'RGBE','( value )' ]; case THREE.RGBM7Encoding: return [ 'RGBM','( value, 7.0 )' ]; case THREE.RGBM16Encoding: return [ 'RGBM','( value, 16.0 )' ]; case THREE.RGBDEncoding: return [ 'RGBD','( value, 256.0 )' ]; case THREE.GammaEncoding: return [ 'Gamma','( value, float( GAMMA_FACTOR ) )' ]; default: throw new Error( 'unsupported encoding: ' + encoding ); } } function getTexelDecodingFunction( functionName, encoding ) { var components = getEncodingComponents( encoding ); return "vec4 " + functionName + "( vec4 value ) { return " + components[ 0 ] + "ToLinear" + components[ 1 ] + "; }"; } function getTexelEncodingFunction( functionName, encoding ) { var components = getEncodingComponents( encoding ); return "vec4 " + functionName + "( vec4 value ) { return LinearTo" + components[ 0 ] + components[ 1 ] + "; }"; } function getToneMappingFunction( functionName, toneMapping ) { var toneMappingName; switch ( toneMapping ) { case THREE.LinearToneMapping: toneMappingName = "Linear"; break; case THREE.ReinhardToneMapping: toneMappingName = "Reinhard"; break; case THREE.Uncharted2ToneMapping: toneMappingName = "Uncharted2"; break; case THREE.CineonToneMapping: toneMappingName = "OptimizedCineon"; break; default: throw new Error( 'unsupported toneMapping: ' + toneMapping ); } return "vec3 " + functionName + "( vec3 color ) { return " + toneMappingName + "ToneMapping( color ); }"; } function generateExtensions( extensions, parameters, rendererExtensions ) { extensions = extensions || {}; var chunks = [ ( extensions.derivatives || parameters.envMapCubeUV || parameters.bumpMap || parameters.normalMap || parameters.flatShading ) ? '#extension GL_OES_standard_derivatives : enable' : '', ( extensions.fragDepth || parameters.logarithmicDepthBuffer ) && rendererExtensions.get( 'EXT_frag_depth' ) ? '#extension GL_EXT_frag_depth : enable' : '', ( extensions.drawBuffers ) && rendererExtensions.get( 'WEBGL_draw_buffers' ) ? '#extension GL_EXT_draw_buffers : require' : '', ( extensions.shaderTextureLOD || parameters.envMap ) && rendererExtensions.get( 'EXT_shader_texture_lod' ) ? '#extension GL_EXT_shader_texture_lod : enable' : '', ]; return chunks.filter( filterEmptyLine ).join( '\n' ); } function generateDefines( defines ) { var chunks = []; for ( var name in defines ) { var value = defines[ name ]; if ( value === false ) continue; chunks.push( '#define ' + name + ' ' + value ); } return chunks.join( '\n' ); } function fetchAttributeLocations( gl, program, identifiers ) { var attributes = {}; var n = gl.getProgramParameter( program, gl.ACTIVE_ATTRIBUTES ); for ( var i = 0; i < n; i ++ ) { var info = gl.getActiveAttrib( program, i ); var name = info.name; // console.log("THREE.WebGLProgram: ACTIVE VERTEX ATTRIBUTE:", name, i ); attributes[ name ] = gl.getAttribLocation( program, name ); } return attributes; } function filterEmptyLine( string ) { return string !== ''; } function replaceLightNums( string, parameters ) { return string .replace( /NUM_DIR_LIGHTS/g, parameters.numDirLights ) .replace( /NUM_SPOT_LIGHTS/g, parameters.numSpotLights ) .replace( /NUM_POINT_LIGHTS/g, parameters.numPointLights ) .replace( /NUM_HEMI_LIGHTS/g, parameters.numHemiLights ); } function parseIncludes( string ) { var pattern = /#include +<([\w\d.]+)>/g; function replace( match, include ) { var replace = THREE.ShaderChunk[ include ]; if ( replace === undefined ) { throw new Error( 'Can not resolve #include <' + include + '>' ); } return parseIncludes( replace ); } return string.replace( pattern, replace ); } function unrollLoops( string ) { var pattern = /for \( int i \= (\d+)\; i < (\d+)\; i \+\+ \) \{([\s\S]+?)(?=\})\}/g; function replace( match, start, end, snippet ) { var unroll = ''; for ( var i = parseInt( start ); i < parseInt( end ); i ++ ) { unroll += snippet.replace( /\[ i \]/g, '[ ' + i + ' ]' ); } return unroll; } return string.replace( pattern, replace ); } return function WebGLProgram( renderer, code, material, parameters ) { var gl = renderer.context; var extensions = material.extensions; var defines = material.defines; var vertexShader = material.__webglShader.vertexShader; var fragmentShader = material.__webglShader.fragmentShader; var shadowMapTypeDefine = 'SHADOWMAP_TYPE_BASIC'; if ( parameters.shadowMapType === THREE.PCFShadowMap ) { shadowMapTypeDefine = 'SHADOWMAP_TYPE_PCF'; } else if ( parameters.shadowMapType === THREE.PCFSoftShadowMap ) { shadowMapTypeDefine = 'SHADOWMAP_TYPE_PCF_SOFT'; } var envMapTypeDefine = 'ENVMAP_TYPE_CUBE'; var envMapModeDefine = 'ENVMAP_MODE_REFLECTION'; var envMapBlendingDefine = 'ENVMAP_BLENDING_MULTIPLY'; if ( parameters.envMap ) { switch ( material.envMap.mapping ) { case THREE.CubeReflectionMapping: case THREE.CubeRefractionMapping: envMapTypeDefine = 'ENVMAP_TYPE_CUBE'; break; case THREE.CubeUVReflectionMapping: case THREE.CubeUVRefractionMapping: envMapTypeDefine = 'ENVMAP_TYPE_CUBE_UV'; break; case THREE.EquirectangularReflectionMapping: case THREE.EquirectangularRefractionMapping: envMapTypeDefine = 'ENVMAP_TYPE_EQUIREC'; break; case THREE.SphericalReflectionMapping: envMapTypeDefine = 'ENVMAP_TYPE_SPHERE'; break; } switch ( material.envMap.mapping ) { case THREE.CubeRefractionMapping: case THREE.EquirectangularRefractionMapping: envMapModeDefine = 'ENVMAP_MODE_REFRACTION'; break; } switch ( material.combine ) { case THREE.MultiplyOperation: envMapBlendingDefine = 'ENVMAP_BLENDING_MULTIPLY'; break; case THREE.MixOperation: envMapBlendingDefine = 'ENVMAP_BLENDING_MIX'; break; case THREE.AddOperation: envMapBlendingDefine = 'ENVMAP_BLENDING_ADD'; break; } } var gammaFactorDefine = ( renderer.gammaFactor > 0 ) ? renderer.gammaFactor : 1.0; // console.log( 'building new program ' ); // var customExtensions = generateExtensions( extensions, parameters, renderer.extensions ); var customDefines = generateDefines( defines ); // var program = gl.createProgram(); var prefixVertex, prefixFragment; if ( material instanceof THREE.RawShaderMaterial ) { prefixVertex = [ customDefines ].filter( filterEmptyLine ).join( '\n' ); prefixFragment = [ customDefines ].filter( filterEmptyLine ).join( '\n' ); } else { prefixVertex = [ 'precision ' + parameters.precision + ' float;', 'precision ' + parameters.precision + ' int;', '#define SHADER_NAME ' + material.__webglShader.name, customDefines, parameters.supportsVertexTextures ? '#define VERTEX_TEXTURES' : '', '#define GAMMA_FACTOR ' + gammaFactorDefine, '#define MAX_BONES ' + parameters.maxBones, parameters.map ? '#define USE_MAP' : '', parameters.envMap ? '#define USE_ENVMAP' : '', parameters.envMap ? '#define ' + envMapModeDefine : '', parameters.lightMap ? '#define USE_LIGHTMAP' : '', parameters.aoMap ? '#define USE_AOMAP' : '', parameters.emissiveMap ? '#define USE_EMISSIVEMAP' : '', parameters.bumpMap ? '#define USE_BUMPMAP' : '', parameters.normalMap ? '#define USE_NORMALMAP' : '', parameters.displacementMap && parameters.supportsVertexTextures ? '#define USE_DISPLACEMENTMAP' : '', parameters.specularMap ? '#define USE_SPECULARMAP' : '', parameters.roughnessMap ? '#define USE_ROUGHNESSMAP' : '', parameters.metalnessMap ? '#define USE_METALNESSMAP' : '', parameters.alphaMap ? '#define USE_ALPHAMAP' : '', parameters.vertexColors ? '#define USE_COLOR' : '', parameters.flatShading ? '#define FLAT_SHADED' : '', parameters.skinning ? '#define USE_SKINNING' : '', parameters.useVertexTexture ? '#define BONE_TEXTURE' : '', parameters.morphTargets ? '#define USE_MORPHTARGETS' : '', parameters.morphNormals && parameters.flatShading === false ? '#define USE_MORPHNORMALS' : '', parameters.doubleSided ? '#define DOUBLE_SIDED' : '', parameters.flipSided ? '#define FLIP_SIDED' : '', '#define NUM_CLIPPING_PLANES ' + parameters.numClippingPlanes, parameters.shadowMapEnabled ? '#define USE_SHADOWMAP' : '', parameters.shadowMapEnabled ? '#define ' + shadowMapTypeDefine : '', parameters.sizeAttenuation ? '#define USE_SIZEATTENUATION' : '', parameters.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '', parameters.logarithmicDepthBuffer && renderer.extensions.get( 'EXT_frag_depth' ) ? '#define USE_LOGDEPTHBUF_EXT' : '', 'uniform mat4 modelMatrix;', 'uniform mat4 modelViewMatrix;', 'uniform mat4 projectionMatrix;', 'uniform mat4 viewMatrix;', 'uniform mat3 normalMatrix;', 'uniform vec3 cameraPosition;', 'attribute vec3 position;', 'attribute vec3 normal;', 'attribute vec2 uv;', '#ifdef USE_COLOR', ' attribute vec3 color;', '#endif', '#ifdef USE_MORPHTARGETS', ' attribute vec3 morphTarget0;', ' attribute vec3 morphTarget1;', ' attribute vec3 morphTarget2;', ' attribute vec3 morphTarget3;', ' #ifdef USE_MORPHNORMALS', ' attribute vec3 morphNormal0;', ' attribute vec3 morphNormal1;', ' attribute vec3 morphNormal2;', ' attribute vec3 morphNormal3;', ' #else', ' attribute vec3 morphTarget4;', ' attribute vec3 morphTarget5;', ' attribute vec3 morphTarget6;', ' attribute vec3 morphTarget7;', ' #endif', '#endif', '#ifdef USE_SKINNING', ' attribute vec4 skinIndex;', ' attribute vec4 skinWeight;', '#endif', '\n' ].filter( filterEmptyLine ).join( '\n' ); prefixFragment = [ customExtensions, 'precision ' + parameters.precision + ' float;', 'precision ' + parameters.precision + ' int;', '#define SHADER_NAME ' + material.__webglShader.name, customDefines, parameters.alphaTest ? '#define ALPHATEST ' + parameters.alphaTest : '', '#define GAMMA_FACTOR ' + gammaFactorDefine, ( parameters.useFog && parameters.fog ) ? '#define USE_FOG' : '', ( parameters.useFog && parameters.fogExp ) ? '#define FOG_EXP2' : '', parameters.map ? '#define USE_MAP' : '', parameters.envMap ? '#define USE_ENVMAP' : '', parameters.envMap ? '#define ' + envMapTypeDefine : '', parameters.envMap ? '#define ' + envMapModeDefine : '', parameters.envMap ? '#define ' + envMapBlendingDefine : '', parameters.lightMap ? '#define USE_LIGHTMAP' : '', parameters.aoMap ? '#define USE_AOMAP' : '', parameters.emissiveMap ? '#define USE_EMISSIVEMAP' : '', parameters.bumpMap ? '#define USE_BUMPMAP' : '', parameters.normalMap ? '#define USE_NORMALMAP' : '', parameters.specularMap ? '#define USE_SPECULARMAP' : '', parameters.roughnessMap ? '#define USE_ROUGHNESSMAP' : '', parameters.metalnessMap ? '#define USE_METALNESSMAP' : '', parameters.alphaMap ? '#define USE_ALPHAMAP' : '', parameters.vertexColors ? '#define USE_COLOR' : '', parameters.flatShading ? '#define FLAT_SHADED' : '', parameters.doubleSided ? '#define DOUBLE_SIDED' : '', parameters.flipSided ? '#define FLIP_SIDED' : '', '#define NUM_CLIPPING_PLANES ' + parameters.numClippingPlanes, parameters.shadowMapEnabled ? '#define USE_SHADOWMAP' : '', parameters.shadowMapEnabled ? '#define ' + shadowMapTypeDefine : '', parameters.premultipliedAlpha ? "#define PREMULTIPLIED_ALPHA" : '', parameters.physicallyCorrectLights ? "#define PHYSICALLY_CORRECT_LIGHTS" : '', parameters.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '', parameters.logarithmicDepthBuffer && renderer.extensions.get( 'EXT_frag_depth' ) ? '#define USE_LOGDEPTHBUF_EXT' : '', parameters.envMap && renderer.extensions.get( 'EXT_shader_texture_lod' ) ? '#define TEXTURE_LOD_EXT' : '', 'uniform mat4 viewMatrix;', 'uniform vec3 cameraPosition;', ( parameters.toneMapping !== THREE.NoToneMapping ) ? "#define TONE_MAPPING" : '', ( parameters.toneMapping !== THREE.NoToneMapping ) ? THREE.ShaderChunk[ 'tonemapping_pars_fragment' ] : '', // this code is required here because it is used by the toneMapping() function defined below ( parameters.toneMapping !== THREE.NoToneMapping ) ? getToneMappingFunction( "toneMapping", parameters.toneMapping ) : '', ( parameters.outputEncoding || parameters.mapEncoding || parameters.envMapEncoding || parameters.emissiveMapEncoding ) ? THREE.ShaderChunk[ 'encodings_pars_fragment' ] : '', // this code is required here because it is used by the various encoding/decoding function defined below parameters.mapEncoding ? getTexelDecodingFunction( 'mapTexelToLinear', parameters.mapEncoding ) : '', parameters.envMapEncoding ? getTexelDecodingFunction( 'envMapTexelToLinear', parameters.envMapEncoding ) : '', parameters.emissiveMapEncoding ? getTexelDecodingFunction( 'emissiveMapTexelToLinear', parameters.emissiveMapEncoding ) : '', parameters.outputEncoding ? getTexelEncodingFunction( "linearToOutputTexel", parameters.outputEncoding ) : '', parameters.depthPacking ? "#define DEPTH_PACKING " + material.depthPacking : '', '\n' ].filter( filterEmptyLine ).join( '\n' ); } vertexShader = parseIncludes( vertexShader, parameters ); vertexShader = replaceLightNums( vertexShader, parameters ); fragmentShader = parseIncludes( fragmentShader, parameters ); fragmentShader = replaceLightNums( fragmentShader, parameters ); if ( material instanceof THREE.ShaderMaterial === false ) { vertexShader = unrollLoops( vertexShader ); fragmentShader = unrollLoops( fragmentShader ); } var vertexGlsl = prefixVertex + vertexShader; var fragmentGlsl = prefixFragment + fragmentShader; // console.log( '*VERTEX*', vertexGlsl ); // console.log( '*FRAGMENT*', fragmentGlsl ); var glVertexShader = THREE.WebGLShader( gl, gl.VERTEX_SHADER, vertexGlsl ); var glFragmentShader = THREE.WebGLShader( gl, gl.FRAGMENT_SHADER, fragmentGlsl ); gl.attachShader( program, glVertexShader ); gl.attachShader( program, glFragmentShader ); // Force a particular attribute to index 0. if ( material.index0AttributeName !== undefined ) { gl.bindAttribLocation( program, 0, material.index0AttributeName ); } else if ( parameters.morphTargets === true ) { // programs with morphTargets displace position out of attribute 0 gl.bindAttribLocation( program, 0, 'position' ); } gl.linkProgram( program ); var programLog = gl.getProgramInfoLog( program ); var vertexLog = gl.getShaderInfoLog( glVertexShader ); var fragmentLog = gl.getShaderInfoLog( glFragmentShader ); var runnable = true; var haveDiagnostics = true; // console.log( '**VERTEX**', gl.getExtension( 'WEBGL_debug_shaders' ).getTranslatedShaderSource( glVertexShader ) ); // console.log( '**FRAGMENT**', gl.getExtension( 'WEBGL_debug_shaders' ).getTranslatedShaderSource( glFragmentShader ) ); if ( gl.getProgramParameter( program, gl.LINK_STATUS ) === false ) { runnable = false; console.error( 'THREE.WebGLProgram: shader error: ', gl.getError(), 'gl.VALIDATE_STATUS', gl.getProgramParameter( program, gl.VALIDATE_STATUS ), 'gl.getProgramInfoLog', programLog, vertexLog, fragmentLog ); } else if ( programLog !== '' ) { console.warn( 'THREE.WebGLProgram: gl.getProgramInfoLog()', programLog ); } else if ( vertexLog === '' || fragmentLog === '' ) { haveDiagnostics = false; } if ( haveDiagnostics ) { this.diagnostics = { runnable: runnable, material: material, programLog: programLog, vertexShader: { log: vertexLog, prefix: prefixVertex }, fragmentShader: { log: fragmentLog, prefix: prefixFragment } }; } // clean up gl.deleteShader( glVertexShader ); gl.deleteShader( glFragmentShader ); // set up caching for uniform locations var cachedUniforms; this.getUniforms = function() { if ( cachedUniforms === undefined ) { cachedUniforms = new THREE.WebGLUniforms( gl, program, renderer ); } return cachedUniforms; }; // set up caching for attribute locations var cachedAttributes; this.getAttributes = function() { if ( cachedAttributes === undefined ) { cachedAttributes = fetchAttributeLocations( gl, program ); } return cachedAttributes; }; // free resource this.destroy = function() { gl.deleteProgram( program ); this.program = undefined; }; // DEPRECATED Object.defineProperties( this, { uniforms: { get: function() { console.warn( 'THREE.WebGLProgram: .uniforms is now .getUniforms().' ); return this.getUniforms(); } }, attributes: { get: function() { console.warn( 'THREE.WebGLProgram: .attributes is now .getAttributes().' ); return this.getAttributes(); } } } ); // this.id = programIdCount ++; this.code = code; this.usedTimes = 1; this.program = program; this.vertexShader = glVertexShader; this.fragmentShader = glFragmentShader; return this; }; } )(); // File:src/renderers/webgl/WebGLPrograms.js THREE.WebGLPrograms = function ( renderer, capabilities ) { var programs = []; var shaderIDs = { MeshDepthMaterial: 'depth', MeshNormalMaterial: 'normal', MeshBasicMaterial: 'basic', MeshLambertMaterial: 'lambert', MeshPhongMaterial: 'phong', MeshStandardMaterial: 'physical', MeshPhysicalMaterial: 'physical', LineBasicMaterial: 'basic', LineDashedMaterial: 'dashed', PointsMaterial: 'points' }; var parameterNames = [ "precision", "supportsVertexTextures", "map", "mapEncoding", "envMap", "envMapMode", "envMapEncoding", "lightMap", "aoMap", "emissiveMap", "emissiveMapEncoding", "bumpMap", "normalMap", "displacementMap", "specularMap", "roughnessMap", "metalnessMap", "alphaMap", "combine", "vertexColors", "fog", "useFog", "fogExp", "flatShading", "sizeAttenuation", "logarithmicDepthBuffer", "skinning", "maxBones", "useVertexTexture", "morphTargets", "morphNormals", "maxMorphTargets", "maxMorphNormals", "premultipliedAlpha", "numDirLights", "numPointLights", "numSpotLights", "numHemiLights", "shadowMapEnabled", "shadowMapType", "toneMapping", 'physicallyCorrectLights', "alphaTest", "doubleSided", "flipSided", "numClippingPlanes", "depthPacking" ]; function allocateBones ( object ) { if ( capabilities.floatVertexTextures && object && object.skeleton && object.skeleton.useVertexTexture ) { return 1024; } else { // default for when object is not specified // ( for example when prebuilding shader to be used with multiple objects ) // // - leave some extra space for other uniforms // - limit here is ANGLE's 254 max uniform vectors // (up to 54 should be safe) var nVertexUniforms = capabilities.maxVertexUniforms; var nVertexMatrices = Math.floor( ( nVertexUniforms - 20 ) / 4 ); var maxBones = nVertexMatrices; if ( object !== undefined && object instanceof THREE.SkinnedMesh ) { maxBones = Math.min( object.skeleton.bones.length, maxBones ); if ( maxBones < object.skeleton.bones.length ) { console.warn( 'WebGLRenderer: too many bones - ' + object.skeleton.bones.length + ', this GPU supports just ' + maxBones + ' (try OpenGL instead of ANGLE)' ); } } return maxBones; } } function getTextureEncodingFromMap( map, gammaOverrideLinear ) { var encoding; if ( ! map ) { encoding = THREE.LinearEncoding; } else if ( map instanceof THREE.Texture ) { encoding = map.encoding; } else if ( map instanceof THREE.WebGLRenderTarget ) { console.warn( "THREE.WebGLPrograms.getTextureEncodingFromMap: don't use render targets as textures. Use their .texture property instead." ); encoding = map.texture.encoding; } // add backwards compatibility for WebGLRenderer.gammaInput/gammaOutput parameter, should probably be removed at some point. if ( encoding === THREE.LinearEncoding && gammaOverrideLinear ) { encoding = THREE.GammaEncoding; } return encoding; } this.getParameters = function ( material, lights, fog, nClipPlanes, object ) { var shaderID = shaderIDs[ material.type ]; // heuristics to create shader parameters according to lights in the scene // (not to blow over maxLights budget) var maxBones = allocateBones( object ); var precision = renderer.getPrecision(); if ( material.precision !== null ) { precision = capabilities.getMaxPrecision( material.precision ); if ( precision !== material.precision ) { console.warn( 'THREE.WebGLProgram.getParameters:', material.precision, 'not supported, using', precision, 'instead.' ); } } var currentRenderTarget = renderer.getCurrentRenderTarget(); var parameters = { shaderID: shaderID, precision: precision, supportsVertexTextures: capabilities.vertexTextures, outputEncoding: getTextureEncodingFromMap( ( ! currentRenderTarget ) ? null : currentRenderTarget.texture, renderer.gammaOutput ), map: !! material.map, mapEncoding: getTextureEncodingFromMap( material.map, renderer.gammaInput ), envMap: !! material.envMap, envMapMode: material.envMap && material.envMap.mapping, envMapEncoding: getTextureEncodingFromMap( material.envMap, renderer.gammaInput ), envMapCubeUV: ( !! material.envMap ) && ( ( material.envMap.mapping === THREE.CubeUVReflectionMapping ) || ( material.envMap.mapping === THREE.CubeUVRefractionMapping ) ), lightMap: !! material.lightMap, aoMap: !! material.aoMap, emissiveMap: !! material.emissiveMap, emissiveMapEncoding: getTextureEncodingFromMap( material.emissiveMap, renderer.gammaInput ), bumpMap: !! material.bumpMap, normalMap: !! material.normalMap, displacementMap: !! material.displacementMap, roughnessMap: !! material.roughnessMap, metalnessMap: !! material.metalnessMap, specularMap: !! material.specularMap, alphaMap: !! material.alphaMap, combine: material.combine, vertexColors: material.vertexColors, fog: fog, useFog: material.fog, fogExp: fog instanceof THREE.FogExp2, flatShading: material.shading === THREE.FlatShading, sizeAttenuation: material.sizeAttenuation, logarithmicDepthBuffer: capabilities.logarithmicDepthBuffer, skinning: material.skinning, maxBones: maxBones, useVertexTexture: capabilities.floatVertexTextures && object && object.skeleton && object.skeleton.useVertexTexture, morphTargets: material.morphTargets, morphNormals: material.morphNormals, maxMorphTargets: renderer.maxMorphTargets, maxMorphNormals: renderer.maxMorphNormals, numDirLights: lights.directional.length, numPointLights: lights.point.length, numSpotLights: lights.spot.length, numHemiLights: lights.hemi.length, numClippingPlanes: nClipPlanes, shadowMapEnabled: renderer.shadowMap.enabled && object.receiveShadow && lights.shadows.length > 0, shadowMapType: renderer.shadowMap.type, toneMapping: renderer.toneMapping, physicallyCorrectLights: renderer.physicallyCorrectLights, premultipliedAlpha: material.premultipliedAlpha, alphaTest: material.alphaTest, doubleSided: material.side === THREE.DoubleSide, flipSided: material.side === THREE.BackSide, depthPacking: ( material.depthPacking !== undefined ) ? material.depthPacking : false }; return parameters; }; this.getProgramCode = function ( material, parameters ) { var array = []; if ( parameters.shaderID ) { array.push( parameters.shaderID ); } else { array.push( material.fragmentShader ); array.push( material.vertexShader ); } if ( material.defines !== undefined ) { for ( var name in material.defines ) { array.push( name ); array.push( material.defines[ name ] ); } } for ( var i = 0; i < parameterNames.length; i ++ ) { array.push( parameters[ parameterNames[ i ] ] ); } return array.join(); }; this.acquireProgram = function ( material, parameters, code ) { var program; // Check if code has been already compiled for ( var p = 0, pl = programs.length; p < pl; p ++ ) { var programInfo = programs[ p ]; if ( programInfo.code === code ) { program = programInfo; ++ program.usedTimes; break; } } if ( program === undefined ) { program = new THREE.WebGLProgram( renderer, code, material, parameters ); programs.push( program ); } return program; }; this.releaseProgram = function( program ) { if ( -- program.usedTimes === 0 ) { // Remove from unordered set var i = programs.indexOf( program ); programs[ i ] = programs[ programs.length - 1 ]; programs.pop(); // Free WebGL resources program.destroy(); } }; // Exposed for resource monitoring & error feedback via renderer.info: this.programs = programs; }; // File:src/renderers/webgl/WebGLProperties.js /** * @author fordacious / fordacious.github.io */ THREE.WebGLProperties = function () { var properties = {}; this.get = function ( object ) { var uuid = object.uuid; var map = properties[ uuid ]; if ( map === undefined ) { map = {}; properties[ uuid ] = map; } return map; }; this.delete = function ( object ) { delete properties[ object.uuid ]; }; this.clear = function () { properties = {}; }; }; // File:src/renderers/webgl/WebGLShader.js THREE.WebGLShader = ( function () { function addLineNumbers( string ) { var lines = string.split( '\n' ); for ( var i = 0; i < lines.length; i ++ ) { lines[ i ] = ( i + 1 ) + ': ' + lines[ i ]; } return lines.join( '\n' ); } return function WebGLShader( gl, type, string ) { var shader = gl.createShader( type ); gl.shaderSource( shader, string ); gl.compileShader( shader ); if ( gl.getShaderParameter( shader, gl.COMPILE_STATUS ) === false ) { console.error( 'THREE.WebGLShader: Shader couldn\'t compile.' ); } if ( gl.getShaderInfoLog( shader ) !== '' ) { console.warn( 'THREE.WebGLShader: gl.getShaderInfoLog()', type === gl.VERTEX_SHADER ? 'vertex' : 'fragment', gl.getShaderInfoLog( shader ), addLineNumbers( string ) ); } // --enable-privileged-webgl-extension // console.log( type, gl.getExtension( 'WEBGL_debug_shaders' ).getTranslatedShaderSource( shader ) ); return shader; }; } )(); // File:src/renderers/webgl/WebGLShadowMap.js /** * @author alteredq / http://alteredqualia.com/ * @author mrdoob / http://mrdoob.com/ */ THREE.WebGLShadowMap = function ( _renderer, _lights, _objects ) { var _gl = _renderer.context, _state = _renderer.state, _frustum = new THREE.Frustum(), _projScreenMatrix = new THREE.Matrix4(), _lightShadows = _lights.shadows, _shadowMapSize = new THREE.Vector2(), _lookTarget = new THREE.Vector3(), _lightPositionWorld = new THREE.Vector3(), _renderList = [], _MorphingFlag = 1, _SkinningFlag = 2, _NumberOfMaterialVariants = ( _MorphingFlag | _SkinningFlag ) + 1, _depthMaterials = new Array( _NumberOfMaterialVariants ), _distanceMaterials = new Array( _NumberOfMaterialVariants ), _materialCache = {}; var cubeDirections = [ new THREE.Vector3( 1, 0, 0 ), new THREE.Vector3( - 1, 0, 0 ), new THREE.Vector3( 0, 0, 1 ), new THREE.Vector3( 0, 0, - 1 ), new THREE.Vector3( 0, 1, 0 ), new THREE.Vector3( 0, - 1, 0 ) ]; var cubeUps = [ new THREE.Vector3( 0, 1, 0 ), new THREE.Vector3( 0, 1, 0 ), new THREE.Vector3( 0, 1, 0 ), new THREE.Vector3( 0, 1, 0 ), new THREE.Vector3( 0, 0, 1 ), new THREE.Vector3( 0, 0, - 1 ) ]; var cube2DViewPorts = [ new THREE.Vector4(), new THREE.Vector4(), new THREE.Vector4(), new THREE.Vector4(), new THREE.Vector4(), new THREE.Vector4() ]; // init var depthMaterialTemplate = new THREE.MeshDepthMaterial(); depthMaterialTemplate.depthPacking = THREE.RGBADepthPacking; depthMaterialTemplate.clipping = true; var distanceShader = THREE.ShaderLib[ "distanceRGBA" ]; var distanceUniforms = THREE.UniformsUtils.clone( distanceShader.uniforms ); for ( var i = 0; i !== _NumberOfMaterialVariants; ++ i ) { var useMorphing = ( i & _MorphingFlag ) !== 0; var useSkinning = ( i & _SkinningFlag ) !== 0; var depthMaterial = depthMaterialTemplate.clone(); depthMaterial.morphTargets = useMorphing; depthMaterial.skinning = useSkinning; _depthMaterials[ i ] = depthMaterial; var distanceMaterial = new THREE.ShaderMaterial( { defines: { 'USE_SHADOWMAP': '' }, uniforms: distanceUniforms, vertexShader: distanceShader.vertexShader, fragmentShader: distanceShader.fragmentShader, morphTargets: useMorphing, skinning: useSkinning, clipping: true } ); _distanceMaterials[ i ] = distanceMaterial; } // var scope = this; this.enabled = false; this.autoUpdate = true; this.needsUpdate = false; this.type = THREE.PCFShadowMap; this.renderReverseSided = true; this.renderSingleSided = true; this.render = function ( scene, camera ) { if ( scope.enabled === false ) return; if ( scope.autoUpdate === false && scope.needsUpdate === false ) return; if ( _lightShadows.length === 0 ) return; // Set GL state for depth map. _state.clearColor( 1, 1, 1, 1 ); _state.disable( _gl.BLEND ); _state.setDepthTest( true ); _state.setScissorTest( false ); // render depth map var faceCount, isPointLight; for ( var i = 0, il = _lightShadows.length; i < il; i ++ ) { var light = _lightShadows[ i ]; var shadow = light.shadow; if ( shadow === undefined ) { console.warn( 'THREE.WebGLShadowMap:', light, 'has no shadow.' ); continue; } var shadowCamera = shadow.camera; _shadowMapSize.copy( shadow.mapSize ); if ( light instanceof THREE.PointLight ) { faceCount = 6; isPointLight = true; var vpWidth = _shadowMapSize.x; var vpHeight = _shadowMapSize.y; // These viewports map a cube-map onto a 2D texture with the // following orientation: // // xzXZ // y Y // // X - Positive x direction // x - Negative x direction // Y - Positive y direction // y - Negative y direction // Z - Positive z direction // z - Negative z direction // positive X cube2DViewPorts[ 0 ].set( vpWidth * 2, vpHeight, vpWidth, vpHeight ); // negative X cube2DViewPorts[ 1 ].set( 0, vpHeight, vpWidth, vpHeight ); // positive Z cube2DViewPorts[ 2 ].set( vpWidth * 3, vpHeight, vpWidth, vpHeight ); // negative Z cube2DViewPorts[ 3 ].set( vpWidth, vpHeight, vpWidth, vpHeight ); // positive Y cube2DViewPorts[ 4 ].set( vpWidth * 3, 0, vpWidth, vpHeight ); // negative Y cube2DViewPorts[ 5 ].set( vpWidth, 0, vpWidth, vpHeight ); _shadowMapSize.x *= 4.0; _shadowMapSize.y *= 2.0; } else { faceCount = 1; isPointLight = false; } if ( shadow.map === null ) { var pars = { minFilter: THREE.NearestFilter, magFilter: THREE.NearestFilter, format: THREE.RGBAFormat }; shadow.map = new THREE.WebGLRenderTarget( _shadowMapSize.x, _shadowMapSize.y, pars ); shadowCamera.updateProjectionMatrix(); } if ( shadow instanceof THREE.SpotLightShadow ) { shadow.update( light ); } var shadowMap = shadow.map; var shadowMatrix = shadow.matrix; _lightPositionWorld.setFromMatrixPosition( light.matrixWorld ); shadowCamera.position.copy( _lightPositionWorld ); _renderer.setRenderTarget( shadowMap ); _renderer.clear(); // render shadow map for each cube face (if omni-directional) or // run a single pass if not for ( var face = 0; face < faceCount; face ++ ) { if ( isPointLight ) { _lookTarget.copy( shadowCamera.position ); _lookTarget.add( cubeDirections[ face ] ); shadowCamera.up.copy( cubeUps[ face ] ); shadowCamera.lookAt( _lookTarget ); var vpDimensions = cube2DViewPorts[ face ]; _state.viewport( vpDimensions ); } else { _lookTarget.setFromMatrixPosition( light.target.matrixWorld ); shadowCamera.lookAt( _lookTarget ); } shadowCamera.updateMatrixWorld(); shadowCamera.matrixWorldInverse.getInverse( shadowCamera.matrixWorld ); // compute shadow matrix shadowMatrix.set( 0.5, 0.0, 0.0, 0.5, 0.0, 0.5, 0.0, 0.5, 0.0, 0.0, 0.5, 0.5, 0.0, 0.0, 0.0, 1.0 ); shadowMatrix.multiply( shadowCamera.projectionMatrix ); shadowMatrix.multiply( shadowCamera.matrixWorldInverse ); // update camera matrices and frustum _projScreenMatrix.multiplyMatrices( shadowCamera.projectionMatrix, shadowCamera.matrixWorldInverse ); _frustum.setFromMatrix( _projScreenMatrix ); // set object matrices & frustum culling _renderList.length = 0; projectObject( scene, camera, shadowCamera ); // render shadow map // render regular objects for ( var j = 0, jl = _renderList.length; j < jl; j ++ ) { var object = _renderList[ j ]; var geometry = _objects.update( object ); var material = object.material; if ( material instanceof THREE.MultiMaterial ) { var groups = geometry.groups; var materials = material.materials; for ( var k = 0, kl = groups.length; k < kl; k ++ ) { var group = groups[ k ]; var groupMaterial = materials[ group.materialIndex ]; if ( groupMaterial.visible === true ) { var depthMaterial = getDepthMaterial( object, groupMaterial, isPointLight, _lightPositionWorld ); _renderer.renderBufferDirect( shadowCamera, null, geometry, depthMaterial, object, group ); } } } else { var depthMaterial = getDepthMaterial( object, material, isPointLight, _lightPositionWorld ); _renderer.renderBufferDirect( shadowCamera, null, geometry, depthMaterial, object, null ); } } } } // Restore GL state. var clearColor = _renderer.getClearColor(), clearAlpha = _renderer.getClearAlpha(); _renderer.setClearColor( clearColor, clearAlpha ); scope.needsUpdate = false; }; function getDepthMaterial( object, material, isPointLight, lightPositionWorld ) { var geometry = object.geometry; var result = null; var materialVariants = _depthMaterials; var customMaterial = object.customDepthMaterial; if ( isPointLight ) { materialVariants = _distanceMaterials; customMaterial = object.customDistanceMaterial; } if ( ! customMaterial ) { var useMorphing = geometry.morphTargets !== undefined && geometry.morphTargets.length > 0 && material.morphTargets; var useSkinning = object instanceof THREE.SkinnedMesh && material.skinning; var variantIndex = 0; if ( useMorphing ) variantIndex |= _MorphingFlag; if ( useSkinning ) variantIndex |= _SkinningFlag; result = materialVariants[ variantIndex ]; } else { result = customMaterial; } if ( _renderer.localClippingEnabled && material.clipShadows === true && material.clippingPlanes.length !== 0 ) { // in this case we need a unique material instance reflecting the // appropriate state var keyA = result.uuid, keyB = material.uuid; var materialsForVariant = _materialCache[ keyA ]; if ( materialsForVariant === undefined ) { materialsForVariant = {}; _materialCache[ keyA ] = materialsForVariant; } var cachedMaterial = materialsForVariant[ keyB ]; if ( cachedMaterial === undefined ) { cachedMaterial = result.clone(); materialsForVariant[ keyB ] = cachedMaterial; } result = cachedMaterial; } result.visible = material.visible; result.wireframe = material.wireframe; var side = material.side; if ( scope.renderSingleSided && side == THREE.DoubleSide ) { side = THREE.FrontSide; } if ( scope.renderReverseSided ) { if ( side === THREE.FrontSide ) side = THREE.BackSide; else if ( side === THREE.BackSide ) side = THREE.FrontSide; } result.side = side; result.clipShadows = material.clipShadows; result.clippingPlanes = material.clippingPlanes; result.wireframeLinewidth = material.wireframeLinewidth; result.linewidth = material.linewidth; if ( isPointLight && result.uniforms.lightPos !== undefined ) { result.uniforms.lightPos.value.copy( lightPositionWorld ); } return result; } function projectObject( object, camera, shadowCamera ) { if ( object.visible === false ) return; if ( object.layers.test( camera.layers ) && ( object instanceof THREE.Mesh || object instanceof THREE.Line || object instanceof THREE.Points ) ) { if ( object.castShadow && ( object.frustumCulled === false || _frustum.intersectsObject( object ) === true ) ) { var material = object.material; if ( material.visible === true ) { object.modelViewMatrix.multiplyMatrices( shadowCamera.matrixWorldInverse, object.matrixWorld ); _renderList.push( object ); } } } var children = object.children; for ( var i = 0, l = children.length; i < l; i ++ ) { projectObject( children[ i ], camera, shadowCamera ); } } }; // File:src/renderers/webgl/WebGLState.js /** * @author mrdoob / http://mrdoob.com/ */ THREE.WebGLState = function ( gl, extensions, paramThreeToGL ) { var _this = this; this.buffers = { color: new THREE.WebGLColorBuffer( gl, this ), depth: new THREE.WebGLDepthBuffer( gl, this ), stencil: new THREE.WebGLStencilBuffer( gl, this ) }; var maxVertexAttributes = gl.getParameter( gl.MAX_VERTEX_ATTRIBS ); var newAttributes = new Uint8Array( maxVertexAttributes ); var enabledAttributes = new Uint8Array( maxVertexAttributes ); var attributeDivisors = new Uint8Array( maxVertexAttributes ); var capabilities = {}; var compressedTextureFormats = null; var currentBlending = null; var currentBlendEquation = null; var currentBlendSrc = null; var currentBlendDst = null; var currentBlendEquationAlpha = null; var currentBlendSrcAlpha = null; var currentBlendDstAlpha = null; var currentPremultipledAlpha = false; var currentFlipSided = null; var currentCullFace = null; var currentLineWidth = null; var currentPolygonOffsetFactor = null; var currentPolygonOffsetUnits = null; var currentScissorTest = null; var maxTextures = gl.getParameter( gl.MAX_TEXTURE_IMAGE_UNITS ); var currentTextureSlot = null; var currentBoundTextures = {}; var currentScissor = new THREE.Vector4(); var currentViewport = new THREE.Vector4(); function createTexture( type, target, count ) { var data = new Uint8Array( 4 ); // 4 is required to match default unpack alignment of 4. var texture = gl.createTexture(); gl.bindTexture( type, texture ); gl.texParameteri( type, gl.TEXTURE_MIN_FILTER, gl.NEAREST ); gl.texParameteri( type, gl.TEXTURE_MAG_FILTER, gl.NEAREST ); for ( var i = 0; i < count; i ++ ) { gl.texImage2D( target + i, 0, gl.RGBA, 1, 1, 0, gl.RGBA, gl.UNSIGNED_BYTE, data ); } return texture; } var emptyTextures = {}; emptyTextures[ gl.TEXTURE_2D ] = createTexture( gl.TEXTURE_2D, gl.TEXTURE_2D, 1 ); emptyTextures[ gl.TEXTURE_CUBE_MAP ] = createTexture( gl.TEXTURE_CUBE_MAP, gl.TEXTURE_CUBE_MAP_POSITIVE_X, 6 ); // this.init = function () { this.clearColor( 0, 0, 0, 1 ); this.clearDepth( 1 ); this.clearStencil( 0 ); this.enable( gl.DEPTH_TEST ); this.setDepthFunc( THREE.LessEqualDepth ); this.setFlipSided( false ); this.setCullFace( THREE.CullFaceBack ); this.enable( gl.CULL_FACE ); this.enable( gl.BLEND ); this.setBlending( THREE.NormalBlending ); }; this.initAttributes = function () { for ( var i = 0, l = newAttributes.length; i < l; i ++ ) { newAttributes[ i ] = 0; } }; this.enableAttribute = function ( attribute ) { newAttributes[ attribute ] = 1; if ( enabledAttributes[ attribute ] === 0 ) { gl.enableVertexAttribArray( attribute ); enabledAttributes[ attribute ] = 1; } if ( attributeDivisors[ attribute ] !== 0 ) { var extension = extensions.get( 'ANGLE_instanced_arrays' ); extension.vertexAttribDivisorANGLE( attribute, 0 ); attributeDivisors[ attribute ] = 0; } }; this.enableAttributeAndDivisor = function ( attribute, meshPerAttribute, extension ) { newAttributes[ attribute ] = 1; if ( enabledAttributes[ attribute ] === 0 ) { gl.enableVertexAttribArray( attribute ); enabledAttributes[ attribute ] = 1; } if ( attributeDivisors[ attribute ] !== meshPerAttribute ) { extension.vertexAttribDivisorANGLE( attribute, meshPerAttribute ); attributeDivisors[ attribute ] = meshPerAttribute; } }; this.disableUnusedAttributes = function () { for ( var i = 0, l = enabledAttributes.length; i !== l; ++ i ) { if ( enabledAttributes[ i ] !== newAttributes[ i ] ) { gl.disableVertexAttribArray( i ); enabledAttributes[ i ] = 0; } } }; this.enable = function ( id ) { if ( capabilities[ id ] !== true ) { gl.enable( id ); capabilities[ id ] = true; } }; this.disable = function ( id ) { if ( capabilities[ id ] !== false ) { gl.disable( id ); capabilities[ id ] = false; } }; this.getCompressedTextureFormats = function () { if ( compressedTextureFormats === null ) { compressedTextureFormats = []; if ( extensions.get( 'WEBGL_compressed_texture_pvrtc' ) || extensions.get( 'WEBGL_compressed_texture_s3tc' ) || extensions.get( 'WEBGL_compressed_texture_etc1' ) ) { var formats = gl.getParameter( gl.COMPRESSED_TEXTURE_FORMATS ); for ( var i = 0; i < formats.length; i ++ ) { compressedTextureFormats.push( formats[ i ] ); } } } return compressedTextureFormats; }; this.setBlending = function ( blending, blendEquation, blendSrc, blendDst, blendEquationAlpha, blendSrcAlpha, blendDstAlpha, premultipliedAlpha ) { if ( blending !== THREE.NoBlending ) { this.enable( gl.BLEND ); } else { this.disable( gl.BLEND ); currentBlending = blending; // no blending, that is return; } if ( blending !== currentBlending || premultipliedAlpha !== currentPremultipledAlpha ) { if ( blending === THREE.AdditiveBlending ) { if ( premultipliedAlpha ) { gl.blendEquationSeparate( gl.FUNC_ADD, gl.FUNC_ADD ); gl.blendFuncSeparate( gl.ONE, gl.ONE, gl.ONE, gl.ONE ); } else { gl.blendEquation( gl.FUNC_ADD ); gl.blendFunc( gl.SRC_ALPHA, gl.ONE ); } } else if ( blending === THREE.SubtractiveBlending ) { if ( premultipliedAlpha ) { gl.blendEquationSeparate( gl.FUNC_ADD, gl.FUNC_ADD ); gl.blendFuncSeparate( gl.ZERO, gl.ZERO, gl.ONE_MINUS_SRC_COLOR, gl.ONE_MINUS_SRC_ALPHA ); } else { gl.blendEquation( gl.FUNC_ADD ); gl.blendFunc( gl.ZERO, gl.ONE_MINUS_SRC_COLOR ); } } else if ( blending === THREE.MultiplyBlending ) { if ( premultipliedAlpha ) { gl.blendEquationSeparate( gl.FUNC_ADD, gl.FUNC_ADD ); gl.blendFuncSeparate( gl.ZERO, gl.SRC_COLOR, gl.ZERO, gl.SRC_ALPHA ); } else { gl.blendEquation( gl.FUNC_ADD ); gl.blendFunc( gl.ZERO, gl.SRC_COLOR ); } } else { if ( premultipliedAlpha ) { gl.blendEquationSeparate( gl.FUNC_ADD, gl.FUNC_ADD ); gl.blendFuncSeparate( gl.ONE, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA ); } else { gl.blendEquationSeparate( gl.FUNC_ADD, gl.FUNC_ADD ); gl.blendFuncSeparate( gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA ); } } currentBlending = blending; currentPremultipledAlpha = premultipliedAlpha; } if ( blending === THREE.CustomBlending ) { blendEquationAlpha = blendEquationAlpha || blendEquation; blendSrcAlpha = blendSrcAlpha || blendSrc; blendDstAlpha = blendDstAlpha || blendDst; if ( blendEquation !== currentBlendEquation || blendEquationAlpha !== currentBlendEquationAlpha ) { gl.blendEquationSeparate( paramThreeToGL( blendEquation ), paramThreeToGL( blendEquationAlpha ) ); currentBlendEquation = blendEquation; currentBlendEquationAlpha = blendEquationAlpha; } if ( blendSrc !== currentBlendSrc || blendDst !== currentBlendDst || blendSrcAlpha !== currentBlendSrcAlpha || blendDstAlpha !== currentBlendDstAlpha ) { gl.blendFuncSeparate( paramThreeToGL( blendSrc ), paramThreeToGL( blendDst ), paramThreeToGL( blendSrcAlpha ), paramThreeToGL( blendDstAlpha ) ); currentBlendSrc = blendSrc; currentBlendDst = blendDst; currentBlendSrcAlpha = blendSrcAlpha; currentBlendDstAlpha = blendDstAlpha; } } else { currentBlendEquation = null; currentBlendSrc = null; currentBlendDst = null; currentBlendEquationAlpha = null; currentBlendSrcAlpha = null; currentBlendDstAlpha = null; } }; // TODO Deprecate this.setColorWrite = function ( colorWrite ) { this.buffers.color.setMask( colorWrite ); }; this.setDepthTest = function ( depthTest ) { this.buffers.depth.setTest( depthTest ); }; this.setDepthWrite = function ( depthWrite ) { this.buffers.depth.setMask( depthWrite ); }; this.setDepthFunc = function ( depthFunc ) { this.buffers.depth.setFunc( depthFunc ); }; this.setStencilTest = function ( stencilTest ) { this.buffers.stencil.setTest( stencilTest ); }; this.setStencilWrite = function ( stencilWrite ) { this.buffers.stencil.setMask( stencilWrite ); }; this.setStencilFunc = function ( stencilFunc, stencilRef, stencilMask ) { this.buffers.stencil.setFunc( stencilFunc, stencilRef, stencilMask ); }; this.setStencilOp = function ( stencilFail, stencilZFail, stencilZPass ) { this.buffers.stencil.setOp( stencilFail, stencilZFail, stencilZPass ); }; // this.setFlipSided = function ( flipSided ) { if ( currentFlipSided !== flipSided ) { if ( flipSided ) { gl.frontFace( gl.CW ); } else { gl.frontFace( gl.CCW ); } currentFlipSided = flipSided; } }; this.setCullFace = function ( cullFace ) { if ( cullFace !== THREE.CullFaceNone ) { this.enable( gl.CULL_FACE ); if ( cullFace !== currentCullFace ) { if ( cullFace === THREE.CullFaceBack ) { gl.cullFace( gl.BACK ); } else if ( cullFace === THREE.CullFaceFront ) { gl.cullFace( gl.FRONT ); } else { gl.cullFace( gl.FRONT_AND_BACK ); } } } else { this.disable( gl.CULL_FACE ); } currentCullFace = cullFace; }; this.setLineWidth = function ( width ) { if ( width !== currentLineWidth ) { gl.lineWidth( width ); currentLineWidth = width; } }; this.setPolygonOffset = function ( polygonOffset, factor, units ) { if ( polygonOffset ) { this.enable( gl.POLYGON_OFFSET_FILL ); if ( currentPolygonOffsetFactor !== factor || currentPolygonOffsetUnits !== units ) { gl.polygonOffset( factor, units ); currentPolygonOffsetFactor = factor; currentPolygonOffsetUnits = units; } } else { this.disable( gl.POLYGON_OFFSET_FILL ); } }; this.getScissorTest = function () { return currentScissorTest; }; this.setScissorTest = function ( scissorTest ) { currentScissorTest = scissorTest; if ( scissorTest ) { this.enable( gl.SCISSOR_TEST ); } else { this.disable( gl.SCISSOR_TEST ); } }; // texture this.activeTexture = function ( webglSlot ) { if ( webglSlot === undefined ) webglSlot = gl.TEXTURE0 + maxTextures - 1; if ( currentTextureSlot !== webglSlot ) { gl.activeTexture( webglSlot ); currentTextureSlot = webglSlot; } }; this.bindTexture = function ( webglType, webglTexture ) { if ( currentTextureSlot === null ) { _this.activeTexture(); } var boundTexture = currentBoundTextures[ currentTextureSlot ]; if ( boundTexture === undefined ) { boundTexture = { type: undefined, texture: undefined }; currentBoundTextures[ currentTextureSlot ] = boundTexture; } if ( boundTexture.type !== webglType || boundTexture.texture !== webglTexture ) { gl.bindTexture( webglType, webglTexture || emptyTextures[ webglType ] ); boundTexture.type = webglType; boundTexture.texture = webglTexture; } }; this.compressedTexImage2D = function () { try { gl.compressedTexImage2D.apply( gl, arguments ); } catch ( error ) { console.error( error ); } }; this.texImage2D = function () { try { gl.texImage2D.apply( gl, arguments ); } catch ( error ) { console.error( error ); } }; // TODO Deprecate this.clearColor = function ( r, g, b, a ) { this.buffers.color.setClear( r, g, b, a ); }; this.clearDepth = function ( depth ) { this.buffers.depth.setClear( depth ); }; this.clearStencil = function ( stencil ) { this.buffers.stencil.setClear( stencil ); }; // this.scissor = function ( scissor ) { if ( currentScissor.equals( scissor ) === false ) { gl.scissor( scissor.x, scissor.y, scissor.z, scissor.w ); currentScissor.copy( scissor ); } }; this.viewport = function ( viewport ) { if ( currentViewport.equals( viewport ) === false ) { gl.viewport( viewport.x, viewport.y, viewport.z, viewport.w ); currentViewport.copy( viewport ); } }; // this.reset = function () { for ( var i = 0; i < enabledAttributes.length; i ++ ) { if ( enabledAttributes[ i ] === 1 ) { gl.disableVertexAttribArray( i ); enabledAttributes[ i ] = 0; } } capabilities = {}; compressedTextureFormats = null; currentTextureSlot = null; currentBoundTextures = {}; currentBlending = null; currentFlipSided = null; currentCullFace = null; this.buffers.color.reset(); this.buffers.depth.reset(); this.buffers.stencil.reset(); }; }; THREE.WebGLColorBuffer = function ( gl, state ) { var locked = false; var color = new THREE.Vector4(); var currentColorMask = null; var currentColorClear = new THREE.Vector4(); this.setMask = function ( colorMask ) { if ( currentColorMask !== colorMask && ! locked ) { gl.colorMask( colorMask, colorMask, colorMask, colorMask ); currentColorMask = colorMask; } }; this.setLocked = function ( lock ) { locked = lock; }; this.setClear = function ( r, g, b, a ) { color.set( r, g, b, a ); if ( currentColorClear.equals( color ) === false ) { gl.clearColor( r, g, b, a ); currentColorClear.copy( color ); } }; this.reset = function () { locked = false; currentColorMask = null; currentColorClear = new THREE.Vector4(); }; }; THREE.WebGLDepthBuffer = function( gl, state ) { var locked = false; var currentDepthMask = null; var currentDepthFunc = null; var currentDepthClear = null; this.setTest = function ( depthTest ) { if ( depthTest ) { state.enable( gl.DEPTH_TEST ); } else { state.disable( gl.DEPTH_TEST ); } }; this.setMask = function( depthMask ){ if ( currentDepthMask !== depthMask && ! locked ) { gl.depthMask( depthMask ); currentDepthMask = depthMask; } }; this.setFunc = function ( depthFunc ) { if ( currentDepthFunc !== depthFunc ) { if ( depthFunc ) { switch ( depthFunc ) { case THREE.NeverDepth: gl.depthFunc( gl.NEVER ); break; case THREE.AlwaysDepth: gl.depthFunc( gl.ALWAYS ); break; case THREE.LessDepth: gl.depthFunc( gl.LESS ); break; case THREE.LessEqualDepth: gl.depthFunc( gl.LEQUAL ); break; case THREE.EqualDepth: gl.depthFunc( gl.EQUAL ); break; case THREE.GreaterEqualDepth: gl.depthFunc( gl.GEQUAL ); break; case THREE.GreaterDepth: gl.depthFunc( gl.GREATER ); break; case THREE.NotEqualDepth: gl.depthFunc( gl.NOTEQUAL ); break; default: gl.depthFunc( gl.LEQUAL ); } } else { gl.depthFunc( gl.LEQUAL ); } currentDepthFunc = depthFunc; } }; this.setLocked = function ( lock ) { locked = lock; }; this.setClear = function ( depth ) { if ( currentDepthClear !== depth ) { gl.clearDepth( depth ); currentDepthClear = depth; } }; this.reset = function () { locked = false; currentDepthMask = null; currentDepthFunc = null; currentDepthClear = null; }; }; THREE.WebGLStencilBuffer = function ( gl, state ) { var locked = false; var currentStencilMask = null; var currentStencilFunc = null; var currentStencilRef = null; var currentStencilFuncMask = null; var currentStencilFail = null; var currentStencilZFail = null; var currentStencilZPass = null; var currentStencilClear = null; this.setTest = function ( stencilTest ) { if ( stencilTest ) { state.enable( gl.STENCIL_TEST ); } else { state.disable( gl.STENCIL_TEST ); } }; this.setMask = function ( stencilMask ) { if ( currentStencilMask !== stencilMask && ! locked ) { gl.stencilMask( stencilMask ); currentStencilMask = stencilMask; } }; this.setFunc = function ( stencilFunc, stencilRef, stencilMask ) { if ( currentStencilFunc !== stencilFunc || currentStencilRef !== stencilRef || currentStencilFuncMask !== stencilMask ) { gl.stencilFunc( stencilFunc, stencilRef, stencilMask ); currentStencilFunc = stencilFunc; currentStencilRef = stencilRef; currentStencilFuncMask = stencilMask; } }; this.setOp = function ( stencilFail, stencilZFail, stencilZPass ) { if ( currentStencilFail !== stencilFail || currentStencilZFail !== stencilZFail || currentStencilZPass !== stencilZPass ) { gl.stencilOp( stencilFail, stencilZFail, stencilZPass ); currentStencilFail = stencilFail; currentStencilZFail = stencilZFail; currentStencilZPass = stencilZPass; } }; this.setLocked = function ( lock ) { locked = lock; }; this.setClear = function ( stencil ) { if ( currentStencilClear !== stencil ) { gl.clearStencil( stencil ); currentStencilClear = stencil; } }; this.reset = function () { locked = false; currentStencilMask = null; currentStencilFunc = null; currentStencilRef = null; currentStencilFuncMask = null; currentStencilFail = null; currentStencilZFail = null; currentStencilZPass = null; currentStencilClear = null; }; }; // File:src/renderers/webgl/WebGLTextures.js /** * @author mrdoob / http://mrdoob.com/ */ THREE.WebGLTextures = function ( _gl, extensions, state, properties, capabilities, paramThreeToGL, info ) { var _infoMemory = info.memory; var _isWebGL2 = ( typeof WebGL2RenderingContext !== 'undefined' && _gl instanceof WebGL2RenderingContext ); // function clampToMaxSize ( image, maxSize ) { if ( image.width > maxSize || image.height > maxSize ) { // Warning: Scaling through the canvas will only work with images that use // premultiplied alpha. var scale = maxSize / Math.max( image.width, image.height ); var canvas = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' ); canvas.width = Math.floor( image.width * scale ); canvas.height = Math.floor( image.height * scale ); var context = canvas.getContext( '2d' ); context.drawImage( image, 0, 0, image.width, image.height, 0, 0, canvas.width, canvas.height ); console.warn( 'THREE.WebGLRenderer: image is too big (' + image.width + 'x' + image.height + '). Resized to ' + canvas.width + 'x' + canvas.height, image ); return canvas; } return image; } function isPowerOfTwo( image ) { return THREE.Math.isPowerOfTwo( image.width ) && THREE.Math.isPowerOfTwo( image.height ); } function makePowerOfTwo( image ) { if ( image instanceof HTMLImageElement || image instanceof HTMLCanvasElement ) { var canvas = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' ); canvas.width = THREE.Math.nearestPowerOfTwo( image.width ); canvas.height = THREE.Math.nearestPowerOfTwo( image.height ); var context = canvas.getContext( '2d' ); context.drawImage( image, 0, 0, canvas.width, canvas.height ); console.warn( 'THREE.WebGLRenderer: image is not power of two (' + image.width + 'x' + image.height + '). Resized to ' + canvas.width + 'x' + canvas.height, image ); return canvas; } return image; } function textureNeedsPowerOfTwo( texture ) { if ( texture.wrapS !== THREE.ClampToEdgeWrapping || texture.wrapT !== THREE.ClampToEdgeWrapping ) return true; if ( texture.minFilter !== THREE.NearestFilter && texture.minFilter !== THREE.LinearFilter ) return true; return false; } // Fallback filters for non-power-of-2 textures function filterFallback ( f ) { if ( f === THREE.NearestFilter || f === THREE.NearestMipMapNearestFilter || f === THREE.NearestMipMapLinearFilter ) { return _gl.NEAREST; } return _gl.LINEAR; } // function onTextureDispose( event ) { var texture = event.target; texture.removeEventListener( 'dispose', onTextureDispose ); deallocateTexture( texture ); _infoMemory.textures --; } function onRenderTargetDispose( event ) { var renderTarget = event.target; renderTarget.removeEventListener( 'dispose', onRenderTargetDispose ); deallocateRenderTarget( renderTarget ); _infoMemory.textures --; } // function deallocateTexture( texture ) { var textureProperties = properties.get( texture ); if ( texture.image && textureProperties.__image__webglTextureCube ) { // cube texture _gl.deleteTexture( textureProperties.__image__webglTextureCube ); } else { // 2D texture if ( textureProperties.__webglInit === undefined ) return; _gl.deleteTexture( textureProperties.__webglTexture ); } // remove all webgl properties properties.delete( texture ); } function deallocateRenderTarget( renderTarget ) { var renderTargetProperties = properties.get( renderTarget ); var textureProperties = properties.get( renderTarget.texture ); if ( ! renderTarget ) return; if ( textureProperties.__webglTexture !== undefined ) { _gl.deleteTexture( textureProperties.__webglTexture ); } if ( renderTarget.depthTexture ) { renderTarget.depthTexture.dispose(); } if ( renderTarget instanceof THREE.WebGLRenderTargetCube ) { for ( var i = 0; i < 6; i ++ ) { _gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer[ i ] ); if ( renderTargetProperties.__webglDepthbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthbuffer[ i ] ); } } else { _gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer ); if ( renderTargetProperties.__webglDepthbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthbuffer ); } properties.delete( renderTarget.texture ); properties.delete( renderTarget ); } // function setTexture2D( texture, slot ) { var textureProperties = properties.get( texture ); if ( texture.version > 0 && textureProperties.__version !== texture.version ) { var image = texture.image; if ( image === undefined ) { console.warn( 'THREE.WebGLRenderer: Texture marked for update but image is undefined', texture ); } else if ( image.complete === false ) { console.warn( 'THREE.WebGLRenderer: Texture marked for update but image is incomplete', texture ); } else { uploadTexture( textureProperties, texture, slot ); return; } } state.activeTexture( _gl.TEXTURE0 + slot ); state.bindTexture( _gl.TEXTURE_2D, textureProperties.__webglTexture ); } function setTextureCube ( texture, slot ) { var textureProperties = properties.get( texture ); if ( texture.image.length === 6 ) { if ( texture.version > 0 && textureProperties.__version !== texture.version ) { if ( ! textureProperties.__image__webglTextureCube ) { texture.addEventListener( 'dispose', onTextureDispose ); textureProperties.__image__webglTextureCube = _gl.createTexture(); _infoMemory.textures ++; } state.activeTexture( _gl.TEXTURE0 + slot ); state.bindTexture( _gl.TEXTURE_CUBE_MAP, textureProperties.__image__webglTextureCube ); _gl.pixelStorei( _gl.UNPACK_FLIP_Y_WEBGL, texture.flipY ); var isCompressed = texture instanceof THREE.CompressedTexture; var isDataTexture = texture.image[ 0 ] instanceof THREE.DataTexture; var cubeImage = []; for ( var i = 0; i < 6; i ++ ) { if ( ! isCompressed && ! isDataTexture ) { cubeImage[ i ] = clampToMaxSize( texture.image[ i ], capabilities.maxCubemapSize ); } else { cubeImage[ i ] = isDataTexture ? texture.image[ i ].image : texture.image[ i ]; } } var image = cubeImage[ 0 ], isPowerOfTwoImage = isPowerOfTwo( image ), glFormat = paramThreeToGL( texture.format ), glType = paramThreeToGL( texture.type ); setTextureParameters( _gl.TEXTURE_CUBE_MAP, texture, isPowerOfTwoImage ); for ( var i = 0; i < 6; i ++ ) { if ( ! isCompressed ) { if ( isDataTexture ) { state.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, glFormat, cubeImage[ i ].width, cubeImage[ i ].height, 0, glFormat, glType, cubeImage[ i ].data ); } else { state.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, glFormat, glFormat, glType, cubeImage[ i ] ); } } else { var mipmap, mipmaps = cubeImage[ i ].mipmaps; for ( var j = 0, jl = mipmaps.length; j < jl; j ++ ) { mipmap = mipmaps[ j ]; if ( texture.format !== THREE.RGBAFormat && texture.format !== THREE.RGBFormat ) { if ( state.getCompressedTextureFormats().indexOf( glFormat ) > - 1 ) { state.compressedTexImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j, glFormat, mipmap.width, mipmap.height, 0, mipmap.data ); } else { console.warn( "THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setTextureCube()" ); } } else { state.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j, glFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data ); } } } } if ( texture.generateMipmaps && isPowerOfTwoImage ) { _gl.generateMipmap( _gl.TEXTURE_CUBE_MAP ); } textureProperties.__version = texture.version; if ( texture.onUpdate ) texture.onUpdate( texture ); } else { state.activeTexture( _gl.TEXTURE0 + slot ); state.bindTexture( _gl.TEXTURE_CUBE_MAP, textureProperties.__image__webglTextureCube ); } } } function setTextureCubeDynamic ( texture, slot ) { state.activeTexture( _gl.TEXTURE0 + slot ); state.bindTexture( _gl.TEXTURE_CUBE_MAP, properties.get( texture ).__webglTexture ); } function setTextureParameters ( textureType, texture, isPowerOfTwoImage ) { var extension; if ( isPowerOfTwoImage ) { _gl.texParameteri( textureType, _gl.TEXTURE_WRAP_S, paramThreeToGL( texture.wrapS ) ); _gl.texParameteri( textureType, _gl.TEXTURE_WRAP_T, paramThreeToGL( texture.wrapT ) ); _gl.texParameteri( textureType, _gl.TEXTURE_MAG_FILTER, paramThreeToGL( texture.magFilter ) ); _gl.texParameteri( textureType, _gl.TEXTURE_MIN_FILTER, paramThreeToGL( texture.minFilter ) ); } else { _gl.texParameteri( textureType, _gl.TEXTURE_WRAP_S, _gl.CLAMP_TO_EDGE ); _gl.texParameteri( textureType, _gl.TEXTURE_WRAP_T, _gl.CLAMP_TO_EDGE ); if ( texture.wrapS !== THREE.ClampToEdgeWrapping || texture.wrapT !== THREE.ClampToEdgeWrapping ) { console.warn( 'THREE.WebGLRenderer: Texture is not power of two. Texture.wrapS and Texture.wrapT should be set to THREE.ClampToEdgeWrapping.', texture ); } _gl.texParameteri( textureType, _gl.TEXTURE_MAG_FILTER, filterFallback( texture.magFilter ) ); _gl.texParameteri( textureType, _gl.TEXTURE_MIN_FILTER, filterFallback( texture.minFilter ) ); if ( texture.minFilter !== THREE.NearestFilter && texture.minFilter !== THREE.LinearFilter ) { console.warn( 'THREE.WebGLRenderer: Texture is not power of two. Texture.minFilter should be set to THREE.NearestFilter or THREE.LinearFilter.', texture ); } } extension = extensions.get( 'EXT_texture_filter_anisotropic' ); if ( extension ) { if ( texture.type === THREE.FloatType && extensions.get( 'OES_texture_float_linear' ) === null ) return; if ( texture.type === THREE.HalfFloatType && extensions.get( 'OES_texture_half_float_linear' ) === null ) return; if ( texture.anisotropy > 1 || properties.get( texture ).__currentAnisotropy ) { _gl.texParameterf( textureType, extension.TEXTURE_MAX_ANISOTROPY_EXT, Math.min( texture.anisotropy, capabilities.getMaxAnisotropy() ) ); properties.get( texture ).__currentAnisotropy = texture.anisotropy; } } } function uploadTexture( textureProperties, texture, slot ) { if ( textureProperties.__webglInit === undefined ) { textureProperties.__webglInit = true; texture.addEventListener( 'dispose', onTextureDispose ); textureProperties.__webglTexture = _gl.createTexture(); _infoMemory.textures ++; } state.activeTexture( _gl.TEXTURE0 + slot ); state.bindTexture( _gl.TEXTURE_2D, textureProperties.__webglTexture ); _gl.pixelStorei( _gl.UNPACK_FLIP_Y_WEBGL, texture.flipY ); _gl.pixelStorei( _gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, texture.premultiplyAlpha ); _gl.pixelStorei( _gl.UNPACK_ALIGNMENT, texture.unpackAlignment ); var image = clampToMaxSize( texture.image, capabilities.maxTextureSize ); if ( textureNeedsPowerOfTwo( texture ) && isPowerOfTwo( image ) === false ) { image = makePowerOfTwo( image ); } var isPowerOfTwoImage = isPowerOfTwo( image ), glFormat = paramThreeToGL( texture.format ), glType = paramThreeToGL( texture.type ); setTextureParameters( _gl.TEXTURE_2D, texture, isPowerOfTwoImage ); var mipmap, mipmaps = texture.mipmaps; if ( texture instanceof THREE.DepthTexture ) { // populate depth texture with dummy data var internalFormat = _gl.DEPTH_COMPONENT; if ( texture.type === THREE.FloatType ) { if ( !_isWebGL2 ) throw new Error('Float Depth Texture only supported in WebGL2.0'); internalFormat = _gl.DEPTH_COMPONENT32F; } else if ( _isWebGL2 ) { // WebGL 2.0 requires signed internalformat for glTexImage2D internalFormat = _gl.DEPTH_COMPONENT16; } state.texImage2D( _gl.TEXTURE_2D, 0, internalFormat, image.width, image.height, 0, glFormat, glType, null ); } else if ( texture instanceof THREE.DataTexture ) { // use manually created mipmaps if available // if there are no manual mipmaps // set 0 level mipmap and then use GL to generate other mipmap levels if ( mipmaps.length > 0 && isPowerOfTwoImage ) { for ( var i = 0, il = mipmaps.length; i < il; i ++ ) { mipmap = mipmaps[ i ]; state.texImage2D( _gl.TEXTURE_2D, i, glFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data ); } texture.generateMipmaps = false; } else { state.texImage2D( _gl.TEXTURE_2D, 0, glFormat, image.width, image.height, 0, glFormat, glType, image.data ); } } else if ( texture instanceof THREE.CompressedTexture ) { for ( var i = 0, il = mipmaps.length; i < il; i ++ ) { mipmap = mipmaps[ i ]; if ( texture.format !== THREE.RGBAFormat && texture.format !== THREE.RGBFormat ) { if ( state.getCompressedTextureFormats().indexOf( glFormat ) > - 1 ) { state.compressedTexImage2D( _gl.TEXTURE_2D, i, glFormat, mipmap.width, mipmap.height, 0, mipmap.data ); } else { console.warn( "THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()" ); } } else { state.texImage2D( _gl.TEXTURE_2D, i, glFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data ); } } } else { // regular Texture (image, video, canvas) // use manually created mipmaps if available // if there are no manual mipmaps // set 0 level mipmap and then use GL to generate other mipmap levels if ( mipmaps.length > 0 && isPowerOfTwoImage ) { for ( var i = 0, il = mipmaps.length; i < il; i ++ ) { mipmap = mipmaps[ i ]; state.texImage2D( _gl.TEXTURE_2D, i, glFormat, glFormat, glType, mipmap ); } texture.generateMipmaps = false; } else { state.texImage2D( _gl.TEXTURE_2D, 0, glFormat, glFormat, glType, image ); } } if ( texture.generateMipmaps && isPowerOfTwoImage ) _gl.generateMipmap( _gl.TEXTURE_2D ); textureProperties.__version = texture.version; if ( texture.onUpdate ) texture.onUpdate( texture ); } // Render targets // Setup storage for target texture and bind it to correct framebuffer function setupFrameBufferTexture ( framebuffer, renderTarget, attachment, textureTarget ) { var glFormat = paramThreeToGL( renderTarget.texture.format ); var glType = paramThreeToGL( renderTarget.texture.type ); state.texImage2D( textureTarget, 0, glFormat, renderTarget.width, renderTarget.height, 0, glFormat, glType, null ); _gl.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer ); _gl.framebufferTexture2D( _gl.FRAMEBUFFER, attachment, textureTarget, properties.get( renderTarget.texture ).__webglTexture, 0 ); _gl.bindFramebuffer( _gl.FRAMEBUFFER, null ); } // Setup storage for internal depth/stencil buffers and bind to correct framebuffer function setupRenderBufferStorage ( renderbuffer, renderTarget ) { _gl.bindRenderbuffer( _gl.RENDERBUFFER, renderbuffer ); if ( renderTarget.depthBuffer && ! renderTarget.stencilBuffer ) { _gl.renderbufferStorage( _gl.RENDERBUFFER, _gl.DEPTH_COMPONENT16, renderTarget.width, renderTarget.height ); _gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, _gl.DEPTH_ATTACHMENT, _gl.RENDERBUFFER, renderbuffer ); } else if ( renderTarget.depthBuffer && renderTarget.stencilBuffer ) { _gl.renderbufferStorage( _gl.RENDERBUFFER, _gl.DEPTH_STENCIL, renderTarget.width, renderTarget.height ); _gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, _gl.DEPTH_STENCIL_ATTACHMENT, _gl.RENDERBUFFER, renderbuffer ); } else { // FIXME: We don't support !depth !stencil _gl.renderbufferStorage( _gl.RENDERBUFFER, _gl.RGBA4, renderTarget.width, renderTarget.height ); } _gl.bindRenderbuffer( _gl.RENDERBUFFER, null ); } // Setup resources for a Depth Texture for a FBO (needs an extension) function setupDepthTexture ( framebuffer, renderTarget ) { var isCube = ( renderTarget instanceof THREE.WebGLRenderTargetCube ); if ( isCube ) throw new Error('Depth Texture with cube render targets is not supported!'); _gl.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer ); if ( !( renderTarget.depthTexture instanceof THREE.DepthTexture ) ) { throw new Error('renderTarget.depthTexture must be an instance of THREE.DepthTexture'); } // upload an empty depth texture with framebuffer size if ( !properties.get( renderTarget.depthTexture ).__webglTexture || renderTarget.depthTexture.image.width !== renderTarget.width || renderTarget.depthTexture.image.height !== renderTarget.height ) { renderTarget.depthTexture.image.width = renderTarget.width; renderTarget.depthTexture.image.height = renderTarget.height; renderTarget.depthTexture.needsUpdate = true; } setTexture2D( renderTarget.depthTexture, 0 ); var webglDepthTexture = properties.get( renderTarget.depthTexture ).__webglTexture; _gl.framebufferTexture2D( _gl.FRAMEBUFFER, _gl.DEPTH_ATTACHMENT, _gl.TEXTURE_2D, webglDepthTexture, 0 ); } // Setup GL resources for a non-texture depth buffer function setupDepthRenderbuffer( renderTarget ) { var renderTargetProperties = properties.get( renderTarget ); var isCube = ( renderTarget instanceof THREE.WebGLRenderTargetCube ); if ( renderTarget.depthTexture ) { if ( isCube ) throw new Error('target.depthTexture not supported in Cube render targets'); setupDepthTexture( renderTargetProperties.__webglFramebuffer, renderTarget ); } else { if ( isCube ) { renderTargetProperties.__webglDepthbuffer = []; for ( var i = 0; i < 6; i ++ ) { _gl.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer[ i ] ); renderTargetProperties.__webglDepthbuffer[ i ] = _gl.createRenderbuffer(); setupRenderBufferStorage( renderTargetProperties.__webglDepthbuffer[ i ], renderTarget ); } } else { _gl.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer ); renderTargetProperties.__webglDepthbuffer = _gl.createRenderbuffer(); setupRenderBufferStorage( renderTargetProperties.__webglDepthbuffer, renderTarget ); } } _gl.bindFramebuffer( _gl.FRAMEBUFFER, null ); } // Set up GL resources for the render target function setupRenderTarget( renderTarget ) { var renderTargetProperties = properties.get( renderTarget ); var textureProperties = properties.get( renderTarget.texture ); renderTarget.addEventListener( 'dispose', onRenderTargetDispose ); textureProperties.__webglTexture = _gl.createTexture(); _infoMemory.textures ++; var isCube = ( renderTarget instanceof THREE.WebGLRenderTargetCube ); var isTargetPowerOfTwo = isPowerOfTwo( renderTarget ); // Setup framebuffer if ( isCube ) { renderTargetProperties.__webglFramebuffer = []; for ( var i = 0; i < 6; i ++ ) { renderTargetProperties.__webglFramebuffer[ i ] = _gl.createFramebuffer(); } } else { renderTargetProperties.__webglFramebuffer = _gl.createFramebuffer(); } // Setup color buffer if ( isCube ) { state.bindTexture( _gl.TEXTURE_CUBE_MAP, textureProperties.__webglTexture ); setTextureParameters( _gl.TEXTURE_CUBE_MAP, renderTarget.texture, isTargetPowerOfTwo ); for ( var i = 0; i < 6; i ++ ) { setupFrameBufferTexture( renderTargetProperties.__webglFramebuffer[ i ], renderTarget, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i ); } if ( renderTarget.texture.generateMipmaps && isTargetPowerOfTwo ) _gl.generateMipmap( _gl.TEXTURE_CUBE_MAP ); state.bindTexture( _gl.TEXTURE_CUBE_MAP, null ); } else { state.bindTexture( _gl.TEXTURE_2D, textureProperties.__webglTexture ); setTextureParameters( _gl.TEXTURE_2D, renderTarget.texture, isTargetPowerOfTwo ); setupFrameBufferTexture( renderTargetProperties.__webglFramebuffer, renderTarget, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_2D ); if ( renderTarget.texture.generateMipmaps && isTargetPowerOfTwo ) _gl.generateMipmap( _gl.TEXTURE_2D ); state.bindTexture( _gl.TEXTURE_2D, null ); } // Setup depth and stencil buffers if ( renderTarget.depthBuffer ) { setupDepthRenderbuffer( renderTarget ); } } function updateRenderTargetMipmap( renderTarget ) { var texture = renderTarget.texture; if ( texture.generateMipmaps && isPowerOfTwo( renderTarget ) && texture.minFilter !== THREE.NearestFilter && texture.minFilter !== THREE.LinearFilter ) { var target = renderTarget instanceof THREE.WebGLRenderTargetCube ? _gl.TEXTURE_CUBE_MAP : _gl.TEXTURE_2D; var webglTexture = properties.get( texture ).__webglTexture; state.bindTexture( target, webglTexture ); _gl.generateMipmap( target ); state.bindTexture( target, null ); } } this.setTexture2D = setTexture2D; this.setTextureCube = setTextureCube; this.setTextureCubeDynamic = setTextureCubeDynamic; this.setupRenderTarget = setupRenderTarget; this.updateRenderTargetMipmap = updateRenderTargetMipmap; }; // File:src/renderers/webgl/WebGLUniforms.js /** * * Uniforms of a program. * Those form a tree structure with a special top-level container for the root, * which you get by calling 'new WebGLUniforms( gl, program, renderer )'. * * * Properties of inner nodes including the top-level container: * * .seq - array of nested uniforms * .map - nested uniforms by name * * * Methods of all nodes except the top-level container: * * .setValue( gl, value, [renderer] ) * * uploads a uniform value(s) * the 'renderer' parameter is needed for sampler uniforms * * * Static methods of the top-level container (renderer factorizations): * * .upload( gl, seq, values, renderer ) * * sets uniforms in 'seq' to 'values[id].value' * * .seqWithValue( seq, values ) : filteredSeq * * filters 'seq' entries with corresponding entry in values * * .splitDynamic( seq, values ) : filteredSeq * * filters 'seq' entries with dynamic entry and removes them from 'seq' * * * Methods of the top-level container (renderer factorizations): * * .setValue( gl, name, value ) * * sets uniform with name 'name' to 'value' * * .set( gl, obj, prop ) * * sets uniform from object and property with same name than uniform * * .setOptional( gl, obj, prop ) * * like .set for an optional property of the object * * * @author tschw * */ THREE.WebGLUniforms = ( function() { // scope var emptyTexture = new THREE.Texture(); var emptyCubeTexture = new THREE.CubeTexture(); // --- Base for inner nodes (including the root) --- var UniformContainer = function() { this.seq = []; this.map = {}; }, // --- Utilities --- // Array Caches (provide typed arrays for temporary by size) arrayCacheF32 = [], arrayCacheI32 = [], uncacheTemporaryArrays = function() { arrayCacheF32.length = 0; arrayCacheI32.length = 0; }, // Flattening for arrays of vectors and matrices flatten = function( array, nBlocks, blockSize ) { var firstElem = array[ 0 ]; if ( firstElem <= 0 || firstElem > 0 ) return array; // unoptimized: ! isNaN( firstElem ) // see http://jacksondunstan.com/articles/983 var n = nBlocks * blockSize, r = arrayCacheF32[ n ]; if ( r === undefined ) { r = new Float32Array( n ); arrayCacheF32[ n ] = r; } if ( nBlocks !== 0 ) { firstElem.toArray( r, 0 ); for ( var i = 1, offset = 0; i !== nBlocks; ++ i ) { offset += blockSize; array[ i ].toArray( r, offset ); } } return r; }, // Texture unit allocation allocTexUnits = function( renderer, n ) { var r = arrayCacheI32[ n ]; if ( r === undefined ) { r = new Int32Array( n ); arrayCacheI32[ n ] = r; } for ( var i = 0; i !== n; ++ i ) r[ i ] = renderer.allocTextureUnit(); return r; }, // --- Setters --- // Note: Defining these methods externally, because they come in a bunch // and this way their names minify. // Single scalar setValue1f = function( gl, v ) { gl.uniform1f( this.addr, v ); }, setValue1i = function( gl, v ) { gl.uniform1i( this.addr, v ); }, // Single float vector (from flat array or THREE.VectorN) setValue2fv = function( gl, v ) { if ( v.x === undefined ) gl.uniform2fv( this.addr, v ); else gl.uniform2f( this.addr, v.x, v.y ); }, setValue3fv = function( gl, v ) { if ( v.x !== undefined ) gl.uniform3f( this.addr, v.x, v.y, v.z ); else if ( v.r !== undefined ) gl.uniform3f( this.addr, v.r, v.g, v.b ); else gl.uniform3fv( this.addr, v ); }, setValue4fv = function( gl, v ) { if ( v.x === undefined ) gl.uniform4fv( this.addr, v ); else gl.uniform4f( this.addr, v.x, v.y, v.z, v.w ); }, // Single matrix (from flat array or MatrixN) setValue2fm = function( gl, v ) { gl.uniformMatrix2fv( this.addr, false, v.elements || v ); }, setValue3fm = function( gl, v ) { gl.uniformMatrix3fv( this.addr, false, v.elements || v ); }, setValue4fm = function( gl, v ) { gl.uniformMatrix4fv( this.addr, false, v.elements || v ); }, // Single texture (2D / Cube) setValueT1 = function( gl, v, renderer ) { var unit = renderer.allocTextureUnit(); gl.uniform1i( this.addr, unit ); renderer.setTexture2D( v || emptyTexture, unit ); }, setValueT6 = function( gl, v, renderer ) { var unit = renderer.allocTextureUnit(); gl.uniform1i( this.addr, unit ); renderer.setTextureCube( v || emptyCubeTexture, unit ); }, // Integer / Boolean vectors or arrays thereof (always flat arrays) setValue2iv = function( gl, v ) { gl.uniform2iv( this.addr, v ); }, setValue3iv = function( gl, v ) { gl.uniform3iv( this.addr, v ); }, setValue4iv = function( gl, v ) { gl.uniform4iv( this.addr, v ); }, // Helper to pick the right setter for the singular case getSingularSetter = function( type ) { switch ( type ) { case 0x1406: return setValue1f; // FLOAT case 0x8b50: return setValue2fv; // _VEC2 case 0x8b51: return setValue3fv; // _VEC3 case 0x8b52: return setValue4fv; // _VEC4 case 0x8b5a: return setValue2fm; // _MAT2 case 0x8b5b: return setValue3fm; // _MAT3 case 0x8b5c: return setValue4fm; // _MAT4 case 0x8b5e: return setValueT1; // SAMPLER_2D case 0x8b60: return setValueT6; // SAMPLER_CUBE case 0x1404: case 0x8b56: return setValue1i; // INT, BOOL case 0x8b53: case 0x8b57: return setValue2iv; // _VEC2 case 0x8b54: case 0x8b58: return setValue3iv; // _VEC3 case 0x8b55: case 0x8b59: return setValue4iv; // _VEC4 } }, // Array of scalars setValue1fv = function( gl, v ) { gl.uniform1fv( this.addr, v ); }, setValue1iv = function( gl, v ) { gl.uniform1iv( this.addr, v ); }, // Array of vectors (flat or from THREE classes) setValueV2a = function( gl, v ) { gl.uniform2fv( this.addr, flatten( v, this.size, 2 ) ); }, setValueV3a = function( gl, v ) { gl.uniform3fv( this.addr, flatten( v, this.size, 3 ) ); }, setValueV4a = function( gl, v ) { gl.uniform4fv( this.addr, flatten( v, this.size, 4 ) ); }, // Array of matrices (flat or from THREE clases) setValueM2a = function( gl, v ) { gl.uniformMatrix2fv( this.addr, false, flatten( v, this.size, 4 ) ); }, setValueM3a = function( gl, v ) { gl.uniformMatrix3fv( this.addr, false, flatten( v, this.size, 9 ) ); }, setValueM4a = function( gl, v ) { gl.uniformMatrix4fv( this.addr, false, flatten( v, this.size, 16 ) ); }, // Array of textures (2D / Cube) setValueT1a = function( gl, v, renderer ) { var n = v.length, units = allocTexUnits( renderer, n ); gl.uniform1iv( this.addr, units ); for ( var i = 0; i !== n; ++ i ) { renderer.setTexture2D( v[ i ] || emptyTexture, units[ i ] ); } }, setValueT6a = function( gl, v, renderer ) { var n = v.length, units = allocTexUnits( renderer, n ); gl.uniform1iv( this.addr, units ); for ( var i = 0; i !== n; ++ i ) { renderer.setTextureCube( v[ i ] || emptyCubeTexture, units[ i ] ); } }, // Helper to pick the right setter for a pure (bottom-level) array getPureArraySetter = function( type ) { switch ( type ) { case 0x1406: return setValue1fv; // FLOAT case 0x8b50: return setValueV2a; // _VEC2 case 0x8b51: return setValueV3a; // _VEC3 case 0x8b52: return setValueV4a; // _VEC4 case 0x8b5a: return setValueM2a; // _MAT2 case 0x8b5b: return setValueM3a; // _MAT3 case 0x8b5c: return setValueM4a; // _MAT4 case 0x8b5e: return setValueT1a; // SAMPLER_2D case 0x8b60: return setValueT6a; // SAMPLER_CUBE case 0x1404: case 0x8b56: return setValue1iv; // INT, BOOL case 0x8b53: case 0x8b57: return setValue2iv; // _VEC2 case 0x8b54: case 0x8b58: return setValue3iv; // _VEC3 case 0x8b55: case 0x8b59: return setValue4iv; // _VEC4 } }, // --- Uniform Classes --- SingleUniform = function SingleUniform( id, activeInfo, addr ) { this.id = id; this.addr = addr; this.setValue = getSingularSetter( activeInfo.type ); // this.path = activeInfo.name; // DEBUG }, PureArrayUniform = function( id, activeInfo, addr ) { this.id = id; this.addr = addr; this.size = activeInfo.size; this.setValue = getPureArraySetter( activeInfo.type ); // this.path = activeInfo.name; // DEBUG }, StructuredUniform = function( id ) { this.id = id; UniformContainer.call( this ); // mix-in }; StructuredUniform.prototype.setValue = function( gl, value ) { // Note: Don't need an extra 'renderer' parameter, since samplers // are not allowed in structured uniforms. var seq = this.seq; for ( var i = 0, n = seq.length; i !== n; ++ i ) { var u = seq[ i ]; u.setValue( gl, value[ u.id ] ); } }; // --- Top-level --- // Parser - builds up the property tree from the path strings var RePathPart = /([\w\d_]+)(\])?(\[|\.)?/g, // extracts // - the identifier (member name or array index) // - followed by an optional right bracket (found when array index) // - followed by an optional left bracket or dot (type of subscript) // // Note: These portions can be read in a non-overlapping fashion and // allow straightforward parsing of the hierarchy that WebGL encodes // in the uniform names. addUniform = function( container, uniformObject ) { container.seq.push( uniformObject ); container.map[ uniformObject.id ] = uniformObject; }, parseUniform = function( activeInfo, addr, container ) { var path = activeInfo.name, pathLength = path.length; // reset RegExp object, because of the early exit of a previous run RePathPart.lastIndex = 0; for (; ;) { var match = RePathPart.exec( path ), matchEnd = RePathPart.lastIndex, id = match[ 1 ], idIsIndex = match[ 2 ] === ']', subscript = match[ 3 ]; if ( idIsIndex ) id = id | 0; // convert to integer if ( subscript === undefined || subscript === '[' && matchEnd + 2 === pathLength ) { // bare name or "pure" bottom-level array "[0]" suffix addUniform( container, subscript === undefined ? new SingleUniform( id, activeInfo, addr ) : new PureArrayUniform( id, activeInfo, addr ) ); break; } else { // step into inner node / create it in case it doesn't exist var map = container.map, next = map[ id ]; if ( next === undefined ) { next = new StructuredUniform( id ); addUniform( container, next ); } container = next; } } }, // Root Container WebGLUniforms = function WebGLUniforms( gl, program, renderer ) { UniformContainer.call( this ); this.renderer = renderer; var n = gl.getProgramParameter( program, gl.ACTIVE_UNIFORMS ); for ( var i = 0; i !== n; ++ i ) { var info = gl.getActiveUniform( program, i ), path = info.name, addr = gl.getUniformLocation( program, path ); parseUniform( info, addr, this ); } }; WebGLUniforms.prototype.setValue = function( gl, name, value ) { var u = this.map[ name ]; if ( u !== undefined ) u.setValue( gl, value, this.renderer ); }; WebGLUniforms.prototype.set = function( gl, object, name ) { var u = this.map[ name ]; if ( u !== undefined ) u.setValue( gl, object[ name ], this.renderer ); }; WebGLUniforms.prototype.setOptional = function( gl, object, name ) { var v = object[ name ]; if ( v !== undefined ) this.setValue( gl, name, v ); }; // Static interface WebGLUniforms.upload = function( gl, seq, values, renderer ) { for ( var i = 0, n = seq.length; i !== n; ++ i ) { var u = seq[ i ], v = values[ u.id ]; if ( v.needsUpdate !== false ) { // note: always updating when .needsUpdate is undefined u.setValue( gl, v.value, renderer ); } } }; WebGLUniforms.seqWithValue = function( seq, values ) { var r = []; for ( var i = 0, n = seq.length; i !== n; ++ i ) { var u = seq[ i ]; if ( u.id in values ) r.push( u ); } return r; }; WebGLUniforms.splitDynamic = function( seq, values ) { var r = null, n = seq.length, w = 0; for ( var i = 0; i !== n; ++ i ) { var u = seq[ i ], v = values[ u.id ]; if ( v && v.dynamic === true ) { if ( r === null ) r = []; r.push( u ); } else { // in-place compact 'seq', removing the matches if ( w < i ) seq[ w ] = u; ++ w; } } if ( w < n ) seq.length = w; return r; }; WebGLUniforms.evalDynamic = function( seq, values, object, camera ) { for ( var i = 0, n = seq.length; i !== n; ++ i ) { var v = values[ seq[ i ].id ], f = v.onUpdateCallback; if ( f !== undefined ) f.call( v, object, camera ); } }; return WebGLUniforms; } )(); // File:src/renderers/webgl/plugins/LensFlarePlugin.js /** * @author mikael emtinger / http://gomo.se/ * @author alteredq / http://alteredqualia.com/ */ THREE.LensFlarePlugin = function ( renderer, flares ) { var gl = renderer.context; var state = renderer.state; var vertexBuffer, elementBuffer; var shader, program, attributes, uniforms; var tempTexture, occlusionTexture; function init() { var vertices = new Float32Array( [ - 1, - 1, 0, 0, 1, - 1, 1, 0, 1, 1, 1, 1, - 1, 1, 0, 1 ] ); var faces = new Uint16Array( [ 0, 1, 2, 0, 2, 3 ] ); // buffers vertexBuffer = gl.createBuffer(); elementBuffer = gl.createBuffer(); gl.bindBuffer( gl.ARRAY_BUFFER, vertexBuffer ); gl.bufferData( gl.ARRAY_BUFFER, vertices, gl.STATIC_DRAW ); gl.bindBuffer( gl.ELEMENT_ARRAY_BUFFER, elementBuffer ); gl.bufferData( gl.ELEMENT_ARRAY_BUFFER, faces, gl.STATIC_DRAW ); // textures tempTexture = gl.createTexture(); occlusionTexture = gl.createTexture(); state.bindTexture( gl.TEXTURE_2D, tempTexture ); gl.texImage2D( gl.TEXTURE_2D, 0, gl.RGB, 16, 16, 0, gl.RGB, gl.UNSIGNED_BYTE, null ); gl.texParameteri( gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE ); gl.texParameteri( gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE ); gl.texParameteri( gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST ); gl.texParameteri( gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST ); state.bindTexture( gl.TEXTURE_2D, occlusionTexture ); gl.texImage2D( gl.TEXTURE_2D, 0, gl.RGBA, 16, 16, 0, gl.RGBA, gl.UNSIGNED_BYTE, null ); gl.texParameteri( gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE ); gl.texParameteri( gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE ); gl.texParameteri( gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST ); gl.texParameteri( gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST ); shader = { vertexShader: [ "uniform lowp int renderType;", "uniform vec3 screenPosition;", "uniform vec2 scale;", "uniform float rotation;", "uniform sampler2D occlusionMap;", "attribute vec2 position;", "attribute vec2 uv;", "varying vec2 vUV;", "varying float vVisibility;", "void main() {", "vUV = uv;", "vec2 pos = position;", "if ( renderType == 2 ) {", "vec4 visibility = texture2D( occlusionMap, vec2( 0.1, 0.1 ) );", "visibility += texture2D( occlusionMap, vec2( 0.5, 0.1 ) );", "visibility += texture2D( occlusionMap, vec2( 0.9, 0.1 ) );", "visibility += texture2D( occlusionMap, vec2( 0.9, 0.5 ) );", "visibility += texture2D( occlusionMap, vec2( 0.9, 0.9 ) );", "visibility += texture2D( occlusionMap, vec2( 0.5, 0.9 ) );", "visibility += texture2D( occlusionMap, vec2( 0.1, 0.9 ) );", "visibility += texture2D( occlusionMap, vec2( 0.1, 0.5 ) );", "visibility += texture2D( occlusionMap, vec2( 0.5, 0.5 ) );", "vVisibility = visibility.r / 9.0;", "vVisibility *= 1.0 - visibility.g / 9.0;", "vVisibility *= visibility.b / 9.0;", "vVisibility *= 1.0 - visibility.a / 9.0;", "pos.x = cos( rotation ) * position.x - sin( rotation ) * position.y;", "pos.y = sin( rotation ) * position.x + cos( rotation ) * position.y;", "}", "gl_Position = vec4( ( pos * scale + screenPosition.xy ).xy, screenPosition.z, 1.0 );", "}" ].join( "\n" ), fragmentShader: [ "uniform lowp int renderType;", "uniform sampler2D map;", "uniform float opacity;", "uniform vec3 color;", "varying vec2 vUV;", "varying float vVisibility;", "void main() {", // pink square "if ( renderType == 0 ) {", "gl_FragColor = vec4( 1.0, 0.0, 1.0, 0.0 );", // restore "} else if ( renderType == 1 ) {", "gl_FragColor = texture2D( map, vUV );", // flare "} else {", "vec4 texture = texture2D( map, vUV );", "texture.a *= opacity * vVisibility;", "gl_FragColor = texture;", "gl_FragColor.rgb *= color;", "}", "}" ].join( "\n" ) }; program = createProgram( shader ); attributes = { vertex: gl.getAttribLocation ( program, "position" ), uv: gl.getAttribLocation ( program, "uv" ) }; uniforms = { renderType: gl.getUniformLocation( program, "renderType" ), map: gl.getUniformLocation( program, "map" ), occlusionMap: gl.getUniformLocation( program, "occlusionMap" ), opacity: gl.getUniformLocation( program, "opacity" ), color: gl.getUniformLocation( program, "color" ), scale: gl.getUniformLocation( program, "scale" ), rotation: gl.getUniformLocation( program, "rotation" ), screenPosition: gl.getUniformLocation( program, "screenPosition" ) }; } /* * Render lens flares * Method: renders 16x16 0xff00ff-colored points scattered over the light source area, * reads these back and calculates occlusion. */ this.render = function ( scene, camera, viewport ) { if ( flares.length === 0 ) return; var tempPosition = new THREE.Vector3(); var invAspect = viewport.w / viewport.z, halfViewportWidth = viewport.z * 0.5, halfViewportHeight = viewport.w * 0.5; var size = 16 / viewport.w, scale = new THREE.Vector2( size * invAspect, size ); var screenPosition = new THREE.Vector3( 1, 1, 0 ), screenPositionPixels = new THREE.Vector2( 1, 1 ); var validArea = new THREE.Box2(); validArea.min.set( 0, 0 ); validArea.max.set( viewport.z - 16, viewport.w - 16 ); if ( program === undefined ) { init(); } gl.useProgram( program ); state.initAttributes(); state.enableAttribute( attributes.vertex ); state.enableAttribute( attributes.uv ); state.disableUnusedAttributes(); // loop through all lens flares to update their occlusion and positions // setup gl and common used attribs/uniforms gl.uniform1i( uniforms.occlusionMap, 0 ); gl.uniform1i( uniforms.map, 1 ); gl.bindBuffer( gl.ARRAY_BUFFER, vertexBuffer ); gl.vertexAttribPointer( attributes.vertex, 2, gl.FLOAT, false, 2 * 8, 0 ); gl.vertexAttribPointer( attributes.uv, 2, gl.FLOAT, false, 2 * 8, 8 ); gl.bindBuffer( gl.ELEMENT_ARRAY_BUFFER, elementBuffer ); state.disable( gl.CULL_FACE ); state.setDepthWrite( false ); for ( var i = 0, l = flares.length; i < l; i ++ ) { size = 16 / viewport.w; scale.set( size * invAspect, size ); // calc object screen position var flare = flares[ i ]; tempPosition.set( flare.matrixWorld.elements[ 12 ], flare.matrixWorld.elements[ 13 ], flare.matrixWorld.elements[ 14 ] ); tempPosition.applyMatrix4( camera.matrixWorldInverse ); tempPosition.applyProjection( camera.projectionMatrix ); // setup arrays for gl programs screenPosition.copy( tempPosition ); // horizontal and vertical coordinate of the lower left corner of the pixels to copy screenPositionPixels.x = viewport.x + ( screenPosition.x * halfViewportWidth ) + halfViewportWidth - 8; screenPositionPixels.y = viewport.y + ( screenPosition.y * halfViewportHeight ) + halfViewportHeight - 8; // screen cull if ( validArea.containsPoint( screenPositionPixels ) === true ) { // save current RGB to temp texture state.activeTexture( gl.TEXTURE0 ); state.bindTexture( gl.TEXTURE_2D, null ); state.activeTexture( gl.TEXTURE1 ); state.bindTexture( gl.TEXTURE_2D, tempTexture ); gl.copyTexImage2D( gl.TEXTURE_2D, 0, gl.RGB, screenPositionPixels.x, screenPositionPixels.y, 16, 16, 0 ); // render pink quad gl.uniform1i( uniforms.renderType, 0 ); gl.uniform2f( uniforms.scale, scale.x, scale.y ); gl.uniform3f( uniforms.screenPosition, screenPosition.x, screenPosition.y, screenPosition.z ); state.disable( gl.BLEND ); state.enable( gl.DEPTH_TEST ); gl.drawElements( gl.TRIANGLES, 6, gl.UNSIGNED_SHORT, 0 ); // copy result to occlusionMap state.activeTexture( gl.TEXTURE0 ); state.bindTexture( gl.TEXTURE_2D, occlusionTexture ); gl.copyTexImage2D( gl.TEXTURE_2D, 0, gl.RGBA, screenPositionPixels.x, screenPositionPixels.y, 16, 16, 0 ); // restore graphics gl.uniform1i( uniforms.renderType, 1 ); state.disable( gl.DEPTH_TEST ); state.activeTexture( gl.TEXTURE1 ); state.bindTexture( gl.TEXTURE_2D, tempTexture ); gl.drawElements( gl.TRIANGLES, 6, gl.UNSIGNED_SHORT, 0 ); // update object positions flare.positionScreen.copy( screenPosition ); if ( flare.customUpdateCallback ) { flare.customUpdateCallback( flare ); } else { flare.updateLensFlares(); } // render flares gl.uniform1i( uniforms.renderType, 2 ); state.enable( gl.BLEND ); for ( var j = 0, jl = flare.lensFlares.length; j < jl; j ++ ) { var sprite = flare.lensFlares[ j ]; if ( sprite.opacity > 0.001 && sprite.scale > 0.001 ) { screenPosition.x = sprite.x; screenPosition.y = sprite.y; screenPosition.z = sprite.z; size = sprite.size * sprite.scale / viewport.w; scale.x = size * invAspect; scale.y = size; gl.uniform3f( uniforms.screenPosition, screenPosition.x, screenPosition.y, screenPosition.z ); gl.uniform2f( uniforms.scale, scale.x, scale.y ); gl.uniform1f( uniforms.rotation, sprite.rotation ); gl.uniform1f( uniforms.opacity, sprite.opacity ); gl.uniform3f( uniforms.color, sprite.color.r, sprite.color.g, sprite.color.b ); state.setBlending( sprite.blending, sprite.blendEquation, sprite.blendSrc, sprite.blendDst ); renderer.setTexture2D( sprite.texture, 1 ); gl.drawElements( gl.TRIANGLES, 6, gl.UNSIGNED_SHORT, 0 ); } } } } // restore gl state.enable( gl.CULL_FACE ); state.enable( gl.DEPTH_TEST ); state.setDepthWrite( true ); renderer.resetGLState(); }; function createProgram ( shader ) { var program = gl.createProgram(); var fragmentShader = gl.createShader( gl.FRAGMENT_SHADER ); var vertexShader = gl.createShader( gl.VERTEX_SHADER ); var prefix = "precision " + renderer.getPrecision() + " float;\n"; gl.shaderSource( fragmentShader, prefix + shader.fragmentShader ); gl.shaderSource( vertexShader, prefix + shader.vertexShader ); gl.compileShader( fragmentShader ); gl.compileShader( vertexShader ); gl.attachShader( program, fragmentShader ); gl.attachShader( program, vertexShader ); gl.linkProgram( program ); return program; } }; // File:src/renderers/webgl/plugins/SpritePlugin.js /** * @author mikael emtinger / http://gomo.se/ * @author alteredq / http://alteredqualia.com/ */ THREE.SpritePlugin = function ( renderer, sprites ) { var gl = renderer.context; var state = renderer.state; var vertexBuffer, elementBuffer; var program, attributes, uniforms; var texture; // decompose matrixWorld var spritePosition = new THREE.Vector3(); var spriteRotation = new THREE.Quaternion(); var spriteScale = new THREE.Vector3(); function init() { var vertices = new Float32Array( [ - 0.5, - 0.5, 0, 0, 0.5, - 0.5, 1, 0, 0.5, 0.5, 1, 1, - 0.5, 0.5, 0, 1 ] ); var faces = new Uint16Array( [ 0, 1, 2, 0, 2, 3 ] ); vertexBuffer = gl.createBuffer(); elementBuffer = gl.createBuffer(); gl.bindBuffer( gl.ARRAY_BUFFER, vertexBuffer ); gl.bufferData( gl.ARRAY_BUFFER, vertices, gl.STATIC_DRAW ); gl.bindBuffer( gl.ELEMENT_ARRAY_BUFFER, elementBuffer ); gl.bufferData( gl.ELEMENT_ARRAY_BUFFER, faces, gl.STATIC_DRAW ); program = createProgram(); attributes = { position: gl.getAttribLocation ( program, 'position' ), uv: gl.getAttribLocation ( program, 'uv' ) }; uniforms = { uvOffset: gl.getUniformLocation( program, 'uvOffset' ), uvScale: gl.getUniformLocation( program, 'uvScale' ), rotation: gl.getUniformLocation( program, 'rotation' ), scale: gl.getUniformLocation( program, 'scale' ), color: gl.getUniformLocation( program, 'color' ), map: gl.getUniformLocation( program, 'map' ), opacity: gl.getUniformLocation( program, 'opacity' ), modelViewMatrix: gl.getUniformLocation( program, 'modelViewMatrix' ), projectionMatrix: gl.getUniformLocation( program, 'projectionMatrix' ), fogType: gl.getUniformLocation( program, 'fogType' ), fogDensity: gl.getUniformLocation( program, 'fogDensity' ), fogNear: gl.getUniformLocation( program, 'fogNear' ), fogFar: gl.getUniformLocation( program, 'fogFar' ), fogColor: gl.getUniformLocation( program, 'fogColor' ), alphaTest: gl.getUniformLocation( program, 'alphaTest' ) }; var canvas = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' ); canvas.width = 8; canvas.height = 8; var context = canvas.getContext( '2d' ); context.fillStyle = 'white'; context.fillRect( 0, 0, 8, 8 ); texture = new THREE.Texture( canvas ); texture.needsUpdate = true; } this.render = function ( scene, camera ) { if ( sprites.length === 0 ) return; // setup gl if ( program === undefined ) { init(); } gl.useProgram( program ); state.initAttributes(); state.enableAttribute( attributes.position ); state.enableAttribute( attributes.uv ); state.disableUnusedAttributes(); state.disable( gl.CULL_FACE ); state.enable( gl.BLEND ); gl.bindBuffer( gl.ARRAY_BUFFER, vertexBuffer ); gl.vertexAttribPointer( attributes.position, 2, gl.FLOAT, false, 2 * 8, 0 ); gl.vertexAttribPointer( attributes.uv, 2, gl.FLOAT, false, 2 * 8, 8 ); gl.bindBuffer( gl.ELEMENT_ARRAY_BUFFER, elementBuffer ); gl.uniformMatrix4fv( uniforms.projectionMatrix, false, camera.projectionMatrix.elements ); state.activeTexture( gl.TEXTURE0 ); gl.uniform1i( uniforms.map, 0 ); var oldFogType = 0; var sceneFogType = 0; var fog = scene.fog; if ( fog ) { gl.uniform3f( uniforms.fogColor, fog.color.r, fog.color.g, fog.color.b ); if ( fog instanceof THREE.Fog ) { gl.uniform1f( uniforms.fogNear, fog.near ); gl.uniform1f( uniforms.fogFar, fog.far ); gl.uniform1i( uniforms.fogType, 1 ); oldFogType = 1; sceneFogType = 1; } else if ( fog instanceof THREE.FogExp2 ) { gl.uniform1f( uniforms.fogDensity, fog.density ); gl.uniform1i( uniforms.fogType, 2 ); oldFogType = 2; sceneFogType = 2; } } else { gl.uniform1i( uniforms.fogType, 0 ); oldFogType = 0; sceneFogType = 0; } // update positions and sort for ( var i = 0, l = sprites.length; i < l; i ++ ) { var sprite = sprites[ i ]; sprite.modelViewMatrix.multiplyMatrices( camera.matrixWorldInverse, sprite.matrixWorld ); sprite.z = - sprite.modelViewMatrix.elements[ 14 ]; } sprites.sort( painterSortStable ); // render all sprites var scale = []; for ( var i = 0, l = sprites.length; i < l; i ++ ) { var sprite = sprites[ i ]; var material = sprite.material; gl.uniform1f( uniforms.alphaTest, material.alphaTest ); gl.uniformMatrix4fv( uniforms.modelViewMatrix, false, sprite.modelViewMatrix.elements ); sprite.matrixWorld.decompose( spritePosition, spriteRotation, spriteScale ); scale[ 0 ] = spriteScale.x; scale[ 1 ] = spriteScale.y; var fogType = 0; if ( scene.fog && material.fog ) { fogType = sceneFogType; } if ( oldFogType !== fogType ) { gl.uniform1i( uniforms.fogType, fogType ); oldFogType = fogType; } if ( material.map !== null ) { gl.uniform2f( uniforms.uvOffset, material.map.offset.x, material.map.offset.y ); gl.uniform2f( uniforms.uvScale, material.map.repeat.x, material.map.repeat.y ); } else { gl.uniform2f( uniforms.uvOffset, 0, 0 ); gl.uniform2f( uniforms.uvScale, 1, 1 ); } gl.uniform1f( uniforms.opacity, material.opacity ); gl.uniform3f( uniforms.color, material.color.r, material.color.g, material.color.b ); gl.uniform1f( uniforms.rotation, material.rotation ); gl.uniform2fv( uniforms.scale, scale ); state.setBlending( material.blending, material.blendEquation, material.blendSrc, material.blendDst ); state.setDepthTest( material.depthTest ); state.setDepthWrite( material.depthWrite ); if ( material.map ) { renderer.setTexture2D( material.map, 0 ); } else { renderer.setTexture2D( texture, 0 ); } gl.drawElements( gl.TRIANGLES, 6, gl.UNSIGNED_SHORT, 0 ); } // restore gl state.enable( gl.CULL_FACE ); renderer.resetGLState(); }; function createProgram () { var program = gl.createProgram(); var vertexShader = gl.createShader( gl.VERTEX_SHADER ); var fragmentShader = gl.createShader( gl.FRAGMENT_SHADER ); gl.shaderSource( vertexShader, [ 'precision ' + renderer.getPrecision() + ' float;', 'uniform mat4 modelViewMatrix;', 'uniform mat4 projectionMatrix;', 'uniform float rotation;', 'uniform vec2 scale;', 'uniform vec2 uvOffset;', 'uniform vec2 uvScale;', 'attribute vec2 position;', 'attribute vec2 uv;', 'varying vec2 vUV;', 'void main() {', 'vUV = uvOffset + uv * uvScale;', 'vec2 alignedPosition = position * scale;', 'vec2 rotatedPosition;', 'rotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;', 'rotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;', 'vec4 finalPosition;', 'finalPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );', 'finalPosition.xy += rotatedPosition;', 'finalPosition = projectionMatrix * finalPosition;', 'gl_Position = finalPosition;', '}' ].join( '\n' ) ); gl.shaderSource( fragmentShader, [ 'precision ' + renderer.getPrecision() + ' float;', 'uniform vec3 color;', 'uniform sampler2D map;', 'uniform float opacity;', 'uniform int fogType;', 'uniform vec3 fogColor;', 'uniform float fogDensity;', 'uniform float fogNear;', 'uniform float fogFar;', 'uniform float alphaTest;', 'varying vec2 vUV;', 'void main() {', 'vec4 texture = texture2D( map, vUV );', 'if ( texture.a < alphaTest ) discard;', 'gl_FragColor = vec4( color * texture.xyz, texture.a * opacity );', 'if ( fogType > 0 ) {', 'float depth = gl_FragCoord.z / gl_FragCoord.w;', 'float fogFactor = 0.0;', 'if ( fogType == 1 ) {', 'fogFactor = smoothstep( fogNear, fogFar, depth );', '} else {', 'const float LOG2 = 1.442695;', 'fogFactor = exp2( - fogDensity * fogDensity * depth * depth * LOG2 );', 'fogFactor = 1.0 - clamp( fogFactor, 0.0, 1.0 );', '}', 'gl_FragColor = mix( gl_FragColor, vec4( fogColor, gl_FragColor.w ), fogFactor );', '}', '}' ].join( '\n' ) ); gl.compileShader( vertexShader ); gl.compileShader( fragmentShader ); gl.attachShader( program, vertexShader ); gl.attachShader( program, fragmentShader ); gl.linkProgram( program ); return program; } function painterSortStable ( a, b ) { if ( a.renderOrder !== b.renderOrder ) { return a.renderOrder - b.renderOrder; } else if ( a.z !== b.z ) { return b.z - a.z; } else { return b.id - a.id; } } }; // File:src/Three.Legacy.js /** * @author mrdoob / http://mrdoob.com/ */ Object.assign( THREE, { Face4: function ( a, b, c, d, normal, color, materialIndex ) { console.warn( 'THREE.Face4 has been removed. A THREE.Face3 will be created instead.' ); return new THREE.Face3( a, b, c, normal, color, materialIndex ); }, LineStrip: 0, LinePieces: 1, MeshFaceMaterial: THREE.MultiMaterial, PointCloud: function ( geometry, material ) { console.warn( 'THREE.PointCloud has been renamed to THREE.Points.' ); return new THREE.Points( geometry, material ); }, Particle: THREE.Sprite, ParticleSystem: function ( geometry, material ) { console.warn( 'THREE.ParticleSystem has been renamed to THREE.Points.' ); return new THREE.Points( geometry, material ); }, PointCloudMaterial: function ( parameters ) { console.warn( 'THREE.PointCloudMaterial has been renamed to THREE.PointsMaterial.' ); return new THREE.PointsMaterial( parameters ); }, ParticleBasicMaterial: function ( parameters ) { console.warn( 'THREE.ParticleBasicMaterial has been renamed to THREE.PointsMaterial.' ); return new THREE.PointsMaterial( parameters ); }, ParticleSystemMaterial: function ( parameters ) { console.warn( 'THREE.ParticleSystemMaterial has been renamed to THREE.PointsMaterial.' ); return new THREE.PointsMaterial( parameters ); }, Vertex: function ( x, y, z ) { console.warn( 'THREE.Vertex has been removed. Use THREE.Vector3 instead.' ); return new THREE.Vector3( x, y, z ); } } ); // Object.assign( THREE.Box2.prototype, { empty: function () { console.warn( 'THREE.Box2: .empty() has been renamed to .isEmpty().' ); return this.isEmpty(); }, isIntersectionBox: function ( box ) { console.warn( 'THREE.Box2: .isIntersectionBox() has been renamed to .intersectsBox().' ); return this.intersectsBox( box ); } } ); Object.assign( THREE.Box3.prototype, { empty: function () { console.warn( 'THREE.Box3: .empty() has been renamed to .isEmpty().' ); return this.isEmpty(); }, isIntersectionBox: function ( box ) { console.warn( 'THREE.Box3: .isIntersectionBox() has been renamed to .intersectsBox().' ); return this.intersectsBox( box ); }, isIntersectionSphere: function ( sphere ) { console.warn( 'THREE.Box3: .isIntersectionSphere() has been renamed to .intersectsSphere().' ); return this.intersectsSphere( sphere ); } } ); Object.assign( THREE.Matrix3.prototype, { multiplyVector3: function ( vector ) { console.warn( 'THREE.Matrix3: .multiplyVector3() has been removed. Use vector.applyMatrix3( matrix ) instead.' ); return vector.applyMatrix3( this ); }, multiplyVector3Array: function ( a ) { console.warn( 'THREE.Matrix3: .multiplyVector3Array() has been renamed. Use matrix.applyToVector3Array( array ) instead.' ); return this.applyToVector3Array( a ); } } ); Object.assign( THREE.Matrix4.prototype, { extractPosition: function ( m ) { console.warn( 'THREE.Matrix4: .extractPosition() has been renamed to .copyPosition().' ); return this.copyPosition( m ); }, setRotationFromQuaternion: function ( q ) { console.warn( 'THREE.Matrix4: .setRotationFromQuaternion() has been renamed to .makeRotationFromQuaternion().' ); return this.makeRotationFromQuaternion( q ); }, multiplyVector3: function ( vector ) { console.warn( 'THREE.Matrix4: .multiplyVector3() has been removed. Use vector.applyMatrix4( matrix ) or vector.applyProjection( matrix ) instead.' ); return vector.applyProjection( this ); }, multiplyVector4: function ( vector ) { console.warn( 'THREE.Matrix4: .multiplyVector4() has been removed. Use vector.applyMatrix4( matrix ) instead.' ); return vector.applyMatrix4( this ); }, multiplyVector3Array: function ( a ) { console.warn( 'THREE.Matrix4: .multiplyVector3Array() has been renamed. Use matrix.applyToVector3Array( array ) instead.' ); return this.applyToVector3Array( a ); }, rotateAxis: function ( v ) { console.warn( 'THREE.Matrix4: .rotateAxis() has been removed. Use Vector3.transformDirection( matrix ) instead.' ); v.transformDirection( this ); }, crossVector: function ( vector ) { console.warn( 'THREE.Matrix4: .crossVector() has been removed. Use vector.applyMatrix4( matrix ) instead.' ); return vector.applyMatrix4( this ); }, translate: function ( v ) { console.error( 'THREE.Matrix4: .translate() has been removed.' ); }, rotateX: function ( angle ) { console.error( 'THREE.Matrix4: .rotateX() has been removed.' ); }, rotateY: function ( angle ) { console.error( 'THREE.Matrix4: .rotateY() has been removed.' ); }, rotateZ: function ( angle ) { console.error( 'THREE.Matrix4: .rotateZ() has been removed.' ); }, rotateByAxis: function ( axis, angle ) { console.error( 'THREE.Matrix4: .rotateByAxis() has been removed.' ); } } ); Object.assign( THREE.Plane.prototype, { isIntersectionLine: function ( line ) { console.warn( 'THREE.Plane: .isIntersectionLine() has been renamed to .intersectsLine().' ); return this.intersectsLine( line ); } } ); Object.assign( THREE.Quaternion.prototype, { multiplyVector3: function ( vector ) { console.warn( 'THREE.Quaternion: .multiplyVector3() has been removed. Use is now vector.applyQuaternion( quaternion ) instead.' ); return vector.applyQuaternion( this ); } } ); Object.assign( THREE.Ray.prototype, { isIntersectionBox: function ( box ) { console.warn( 'THREE.Ray: .isIntersectionBox() has been renamed to .intersectsBox().' ); return this.intersectsBox( box ); }, isIntersectionPlane: function ( plane ) { console.warn( 'THREE.Ray: .isIntersectionPlane() has been renamed to .intersectsPlane().' ); return this.intersectsPlane( plane ); }, isIntersectionSphere: function ( sphere ) { console.warn( 'THREE.Ray: .isIntersectionSphere() has been renamed to .intersectsSphere().' ); return this.intersectsSphere( sphere ); } } ); Object.assign( THREE.Vector3.prototype, { setEulerFromRotationMatrix: function () { console.error( 'THREE.Vector3: .setEulerFromRotationMatrix() has been removed. Use Euler.setFromRotationMatrix() instead.' ); }, setEulerFromQuaternion: function () { console.error( 'THREE.Vector3: .setEulerFromQuaternion() has been removed. Use Euler.setFromQuaternion() instead.' ); }, getPositionFromMatrix: function ( m ) { console.warn( 'THREE.Vector3: .getPositionFromMatrix() has been renamed to .setFromMatrixPosition().' ); return this.setFromMatrixPosition( m ); }, getScaleFromMatrix: function ( m ) { console.warn( 'THREE.Vector3: .getScaleFromMatrix() has been renamed to .setFromMatrixScale().' ); return this.setFromMatrixScale( m ); }, getColumnFromMatrix: function ( index, matrix ) { console.warn( 'THREE.Vector3: .getColumnFromMatrix() has been renamed to .setFromMatrixColumn().' ); return this.setFromMatrixColumn( matrix, index ); } } ); // Object.assign( THREE.Object3D.prototype, { getChildByName: function ( name ) { console.warn( 'THREE.Object3D: .getChildByName() has been renamed to .getObjectByName().' ); return this.getObjectByName( name ); }, renderDepth: function ( value ) { console.warn( 'THREE.Object3D: .renderDepth has been removed. Use .renderOrder, instead.' ); }, translate: function ( distance, axis ) { console.warn( 'THREE.Object3D: .translate() has been removed. Use .translateOnAxis( axis, distance ) instead.' ); return this.translateOnAxis( axis, distance ); } } ); Object.defineProperties( THREE.Object3D.prototype, { eulerOrder: { get: function () { console.warn( 'THREE.Object3D: .eulerOrder is now .rotation.order.' ); return this.rotation.order; }, set: function ( value ) { console.warn( 'THREE.Object3D: .eulerOrder is now .rotation.order.' ); this.rotation.order = value; } }, useQuaternion: { get: function () { console.warn( 'THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.' ); }, set: function ( value ) { console.warn( 'THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.' ); } } } ); Object.defineProperties( THREE.LOD.prototype, { objects: { get: function () { console.warn( 'THREE.LOD: .objects has been renamed to .levels.' ); return this.levels; } } } ); // THREE.PerspectiveCamera.prototype.setLens = function ( focalLength, filmGauge ) { console.warn( "THREE.PerspectiveCamera.setLens is deprecated. " + "Use .setFocalLength and .filmGauge for a photographic setup." ); if ( filmGauge !== undefined ) this.filmGauge = filmGauge; this.setFocalLength( focalLength ); }; // Object.defineProperties( THREE.Light.prototype, { onlyShadow: { set: function ( value ) { console.warn( 'THREE.Light: .onlyShadow has been removed.' ); } }, shadowCameraFov: { set: function ( value ) { console.warn( 'THREE.Light: .shadowCameraFov is now .shadow.camera.fov.' ); this.shadow.camera.fov = value; } }, shadowCameraLeft: { set: function ( value ) { console.warn( 'THREE.Light: .shadowCameraLeft is now .shadow.camera.left.' ); this.shadow.camera.left = value; } }, shadowCameraRight: { set: function ( value ) { console.warn( 'THREE.Light: .shadowCameraRight is now .shadow.camera.right.' ); this.shadow.camera.right = value; } }, shadowCameraTop: { set: function ( value ) { console.warn( 'THREE.Light: .shadowCameraTop is now .shadow.camera.top.' ); this.shadow.camera.top = value; } }, shadowCameraBottom: { set: function ( value ) { console.warn( 'THREE.Light: .shadowCameraBottom is now .shadow.camera.bottom.' ); this.shadow.camera.bottom = value; } }, shadowCameraNear: { set: function ( value ) { console.warn( 'THREE.Light: .shadowCameraNear is now .shadow.camera.near.' ); this.shadow.camera.near = value; } }, shadowCameraFar: { set: function ( value ) { console.warn( 'THREE.Light: .shadowCameraFar is now .shadow.camera.far.' ); this.shadow.camera.far = value; } }, shadowCameraVisible: { set: function ( value ) { console.warn( 'THREE.Light: .shadowCameraVisible has been removed. Use new THREE.CameraHelper( light.shadow.camera ) instead.' ); } }, shadowBias: { set: function ( value ) { console.warn( 'THREE.Light: .shadowBias is now .shadow.bias.' ); this.shadow.bias = value; } }, shadowDarkness: { set: function ( value ) { console.warn( 'THREE.Light: .shadowDarkness has been removed.' ); } }, shadowMapWidth: { set: function ( value ) { console.warn( 'THREE.Light: .shadowMapWidth is now .shadow.mapSize.width.' ); this.shadow.mapSize.width = value; } }, shadowMapHeight: { set: function ( value ) { console.warn( 'THREE.Light: .shadowMapHeight is now .shadow.mapSize.height.' ); this.shadow.mapSize.height = value; } } } ); // Object.defineProperties( THREE.BufferAttribute.prototype, { length: { get: function () { console.warn( 'THREE.BufferAttribute: .length has been deprecated. Please use .count.' ); return this.array.length; } } } ); Object.assign( THREE.BufferGeometry.prototype, { addIndex: function ( index ) { console.warn( 'THREE.BufferGeometry: .addIndex() has been renamed to .setIndex().' ); this.setIndex( index ); }, addDrawCall: function ( start, count, indexOffset ) { if ( indexOffset !== undefined ) { console.warn( 'THREE.BufferGeometry: .addDrawCall() no longer supports indexOffset.' ); } console.warn( 'THREE.BufferGeometry: .addDrawCall() is now .addGroup().' ); this.addGroup( start, count ); }, clearDrawCalls: function () { console.warn( 'THREE.BufferGeometry: .clearDrawCalls() is now .clearGroups().' ); this.clearGroups(); }, computeTangents: function () { console.warn( 'THREE.BufferGeometry: .computeTangents() has been removed.' ); }, computeOffsets: function () { console.warn( 'THREE.BufferGeometry: .computeOffsets() has been removed.' ); } } ); Object.defineProperties( THREE.BufferGeometry.prototype, { drawcalls: { get: function () { console.error( 'THREE.BufferGeometry: .drawcalls has been renamed to .groups.' ); return this.groups; } }, offsets: { get: function () { console.warn( 'THREE.BufferGeometry: .offsets has been renamed to .groups.' ); return this.groups; } } } ); // Object.defineProperties( THREE.Material.prototype, { wrapAround: { get: function () { console.warn( 'THREE.' + this.type + ': .wrapAround has been removed.' ); }, set: function ( value ) { console.warn( 'THREE.' + this.type + ': .wrapAround has been removed.' ); } }, wrapRGB: { get: function () { console.warn( 'THREE.' + this.type + ': .wrapRGB has been removed.' ); return new THREE.Color(); } } } ); Object.defineProperties( THREE.MeshPhongMaterial.prototype, { metal: { get: function () { console.warn( 'THREE.MeshPhongMaterial: .metal has been removed. Use THREE.MeshStandardMaterial instead.' ); return false; }, set: function ( value ) { console.warn( 'THREE.MeshPhongMaterial: .metal has been removed. Use THREE.MeshStandardMaterial instead' ); } } } ); Object.defineProperties( THREE.ShaderMaterial.prototype, { derivatives: { get: function () { console.warn( 'THREE.ShaderMaterial: .derivatives has been moved to .extensions.derivatives.' ); return this.extensions.derivatives; }, set: function ( value ) { console.warn( 'THREE. ShaderMaterial: .derivatives has been moved to .extensions.derivatives.' ); this.extensions.derivatives = value; } } } ); // THREE.EventDispatcher.prototype = Object.assign( Object.create( { // Note: Extra base ensures these properties are not 'assign'ed. constructor: THREE.EventDispatcher, apply: function ( target ) { console.warn( "THREE.EventDispatcher: .apply is deprecated, " + "just inherit or Object.assign the prototype to mix-in." ); Object.assign( target, this ); } } ), THREE.EventDispatcher.prototype ); // Object.assign( THREE.WebGLRenderer.prototype, { supportsFloatTextures: function () { console.warn( 'THREE.WebGLRenderer: .supportsFloatTextures() is now .extensions.get( \'OES_texture_float\' ).' ); return this.extensions.get( 'OES_texture_float' ); }, supportsHalfFloatTextures: function () { console.warn( 'THREE.WebGLRenderer: .supportsHalfFloatTextures() is now .extensions.get( \'OES_texture_half_float\' ).' ); return this.extensions.get( 'OES_texture_half_float' ); }, supportsStandardDerivatives: function () { console.warn( 'THREE.WebGLRenderer: .supportsStandardDerivatives() is now .extensions.get( \'OES_standard_derivatives\' ).' ); return this.extensions.get( 'OES_standard_derivatives' ); }, supportsCompressedTextureS3TC: function () { console.warn( 'THREE.WebGLRenderer: .supportsCompressedTextureS3TC() is now .extensions.get( \'WEBGL_compressed_texture_s3tc\' ).' ); return this.extensions.get( 'WEBGL_compressed_texture_s3tc' ); }, supportsCompressedTexturePVRTC: function () { console.warn( 'THREE.WebGLRenderer: .supportsCompressedTexturePVRTC() is now .extensions.get( \'WEBGL_compressed_texture_pvrtc\' ).' ); return this.extensions.get( 'WEBGL_compressed_texture_pvrtc' ); }, supportsBlendMinMax: function () { console.warn( 'THREE.WebGLRenderer: .supportsBlendMinMax() is now .extensions.get( \'EXT_blend_minmax\' ).' ); return this.extensions.get( 'EXT_blend_minmax' ); }, supportsVertexTextures: function () { return this.capabilities.vertexTextures; }, supportsInstancedArrays: function () { console.warn( 'THREE.WebGLRenderer: .supportsInstancedArrays() is now .extensions.get( \'ANGLE_instanced_arrays\' ).' ); return this.extensions.get( 'ANGLE_instanced_arrays' ); }, enableScissorTest: function ( boolean ) { console.warn( 'THREE.WebGLRenderer: .enableScissorTest() is now .setScissorTest().' ); this.setScissorTest( boolean ); }, initMaterial: function () { console.warn( 'THREE.WebGLRenderer: .initMaterial() has been removed.' ); }, addPrePlugin: function () { console.warn( 'THREE.WebGLRenderer: .addPrePlugin() has been removed.' ); }, addPostPlugin: function () { console.warn( 'THREE.WebGLRenderer: .addPostPlugin() has been removed.' ); }, updateShadowMap: function () { console.warn( 'THREE.WebGLRenderer: .updateShadowMap() has been removed.' ); } } ); Object.defineProperties( THREE.WebGLRenderer.prototype, { shadowMapEnabled: { get: function () { return this.shadowMap.enabled; }, set: function ( value ) { console.warn( 'THREE.WebGLRenderer: .shadowMapEnabled is now .shadowMap.enabled.' ); this.shadowMap.enabled = value; } }, shadowMapType: { get: function () { return this.shadowMap.type; }, set: function ( value ) { console.warn( 'THREE.WebGLRenderer: .shadowMapType is now .shadowMap.type.' ); this.shadowMap.type = value; } }, shadowMapCullFace: { get: function () { return this.shadowMap.cullFace; }, set: function ( value ) { console.warn( 'THREE.WebGLRenderer: .shadowMapCullFace is now .shadowMap.cullFace.' ); this.shadowMap.cullFace = value; } } } ); Object.defineProperties( THREE.WebGLShadowMap.prototype, { cullFace: { get: function () { return this.renderReverseSided ? THREE.CullFaceFront : THREE.CullFaceBack; }, set: function ( cullFace ) { var value = ( cullFace !== THREE.CullFaceBack ); console.warn( "WebGLRenderer: .shadowMap.cullFace is deprecated. Set .shadowMap.renderReverseSided to " + value + "." ); this.renderReverseSided = value; } } } ); // Object.defineProperties( THREE.WebGLRenderTarget.prototype, { wrapS: { get: function () { console.warn( 'THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS.' ); return this.texture.wrapS; }, set: function ( value ) { console.warn( 'THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS.' ); this.texture.wrapS = value; } }, wrapT: { get: function () { console.warn( 'THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT.' ); return this.texture.wrapT; }, set: function ( value ) { console.warn( 'THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT.' ); this.texture.wrapT = value; } }, magFilter: { get: function () { console.warn( 'THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter.' ); return this.texture.magFilter; }, set: function ( value ) { console.warn( 'THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter.' ); this.texture.magFilter = value; } }, minFilter: { get: function () { console.warn( 'THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter.' ); return this.texture.minFilter; }, set: function ( value ) { console.warn( 'THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter.' ); this.texture.minFilter = value; } }, anisotropy: { get: function () { console.warn( 'THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy.' ); return this.texture.anisotropy; }, set: function ( value ) { console.warn( 'THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy.' ); this.texture.anisotropy = value; } }, offset: { get: function () { console.warn( 'THREE.WebGLRenderTarget: .offset is now .texture.offset.' ); return this.texture.offset; }, set: function ( value ) { console.warn( 'THREE.WebGLRenderTarget: .offset is now .texture.offset.' ); this.texture.offset = value; } }, repeat: { get: function () { console.warn( 'THREE.WebGLRenderTarget: .repeat is now .texture.repeat.' ); return this.texture.repeat; }, set: function ( value ) { console.warn( 'THREE.WebGLRenderTarget: .repeat is now .texture.repeat.' ); this.texture.repeat = value; } }, format: { get: function () { console.warn( 'THREE.WebGLRenderTarget: .format is now .texture.format.' ); return this.texture.format; }, set: function ( value ) { console.warn( 'THREE.WebGLRenderTarget: .format is now .texture.format.' ); this.texture.format = value; } }, type: { get: function () { console.warn( 'THREE.WebGLRenderTarget: .type is now .texture.type.' ); return this.texture.type; }, set: function ( value ) { console.warn( 'THREE.WebGLRenderTarget: .type is now .texture.type.' ); this.texture.type = value; } }, generateMipmaps: { get: function () { console.warn( 'THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps.' ); return this.texture.generateMipmaps; }, set: function ( value ) { console.warn( 'THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps.' ); this.texture.generateMipmaps = value; } } } ); // Object.assign( THREE.Audio.prototype, { load: function ( file ) { console.warn( 'THREE.Audio: .load has been deprecated. Please use THREE.AudioLoader.' ); var scope = this; var audioLoader = new THREE.AudioLoader(); audioLoader.load( file, function ( buffer ) { scope.setBuffer( buffer ); } ); return this; } } ); Object.assign( THREE.AudioAnalyser.prototype, { getData: function ( file ) { console.warn( 'THREE.AudioAnalyser: .getData() is now .getFrequencyData().' ); return this.getFrequencyData(); } } ); // THREE.GeometryUtils = { merge: function ( geometry1, geometry2, materialIndexOffset ) { console.warn( 'THREE.GeometryUtils: .merge() has been moved to Geometry. Use geometry.merge( geometry2, matrix, materialIndexOffset ) instead.' ); var matrix; if ( geometry2 instanceof THREE.Mesh ) { geometry2.matrixAutoUpdate && geometry2.updateMatrix(); matrix = geometry2.matrix; geometry2 = geometry2.geometry; } geometry1.merge( geometry2, matrix, materialIndexOffset ); }, center: function ( geometry ) { console.warn( 'THREE.GeometryUtils: .center() has been moved to Geometry. Use geometry.center() instead.' ); return geometry.center(); } }; THREE.ImageUtils = { crossOrigin: undefined, loadTexture: function ( url, mapping, onLoad, onError ) { console.warn( 'THREE.ImageUtils.loadTexture has been deprecated. Use THREE.TextureLoader() instead.' ); var loader = new THREE.TextureLoader(); loader.setCrossOrigin( this.crossOrigin ); var texture = loader.load( url, onLoad, undefined, onError ); if ( mapping ) texture.mapping = mapping; return texture; }, loadTextureCube: function ( urls, mapping, onLoad, onError ) { console.warn( 'THREE.ImageUtils.loadTextureCube has been deprecated. Use THREE.CubeTextureLoader() instead.' ); var loader = new THREE.CubeTextureLoader(); loader.setCrossOrigin( this.crossOrigin ); var texture = loader.load( urls, onLoad, undefined, onError ); if ( mapping ) texture.mapping = mapping; return texture; }, loadCompressedTexture: function () { console.error( 'THREE.ImageUtils.loadCompressedTexture has been removed. Use THREE.DDSLoader instead.' ); }, loadCompressedTextureCube: function () { console.error( 'THREE.ImageUtils.loadCompressedTextureCube has been removed. Use THREE.DDSLoader instead.' ); } }; // THREE.Projector = function () { console.error( 'THREE.Projector has been moved to /examples/js/renderers/Projector.js.' ); this.projectVector = function ( vector, camera ) { console.warn( 'THREE.Projector: .projectVector() is now vector.project().' ); vector.project( camera ); }; this.unprojectVector = function ( vector, camera ) { console.warn( 'THREE.Projector: .unprojectVector() is now vector.unproject().' ); vector.unproject( camera ); }; this.pickingRay = function ( vector, camera ) { console.error( 'THREE.Projector: .pickingRay() is now raycaster.setFromCamera().' ); }; }; // THREE.CanvasRenderer = function () { console.error( 'THREE.CanvasRenderer has been moved to /examples/js/renderers/CanvasRenderer.js' ); this.domElement = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' ); this.clear = function () {}; this.render = function () {}; this.setClearColor = function () {}; this.setSize = function () {}; }; // File:src/extras/CurveUtils.js /** * @author zz85 / http://www.lab4games.net/zz85/blog */ THREE.CurveUtils = { tangentQuadraticBezier: function ( t, p0, p1, p2 ) { return 2 * ( 1 - t ) * ( p1 - p0 ) + 2 * t * ( p2 - p1 ); }, // Puay Bing, thanks for helping with this derivative! tangentCubicBezier: function ( t, p0, p1, p2, p3 ) { return - 3 * p0 * ( 1 - t ) * ( 1 - t ) + 3 * p1 * ( 1 - t ) * ( 1 - t ) - 6 * t * p1 * ( 1 - t ) + 6 * t * p2 * ( 1 - t ) - 3 * t * t * p2 + 3 * t * t * p3; }, tangentSpline: function ( t, p0, p1, p2, p3 ) { // To check if my formulas are correct var h00 = 6 * t * t - 6 * t; // derived from 2t^3 − 3t^2 + 1 var h10 = 3 * t * t - 4 * t + 1; // t^3 − 2t^2 + t var h01 = - 6 * t * t + 6 * t; // − 2t3 + 3t2 var h11 = 3 * t * t - 2 * t; // t3 − t2 return h00 + h10 + h01 + h11; }, // Catmull-Rom interpolate: function( p0, p1, p2, p3, t ) { var v0 = ( p2 - p0 ) * 0.5; var v1 = ( p3 - p1 ) * 0.5; var t2 = t * t; var t3 = t * t2; return ( 2 * p1 - 2 * p2 + v0 + v1 ) * t3 + ( - 3 * p1 + 3 * p2 - 2 * v0 - v1 ) * t2 + v0 * t + p1; } }; // File:src/extras/SceneUtils.js /** * @author alteredq / http://alteredqualia.com/ */ THREE.SceneUtils = { createMultiMaterialObject: function ( geometry, materials ) { var group = new THREE.Group(); for ( var i = 0, l = materials.length; i < l; i ++ ) { group.add( new THREE.Mesh( geometry, materials[ i ] ) ); } return group; }, detach: function ( child, parent, scene ) { child.applyMatrix( parent.matrixWorld ); parent.remove( child ); scene.add( child ); }, attach: function ( child, scene, parent ) { var matrixWorldInverse = new THREE.Matrix4(); matrixWorldInverse.getInverse( parent.matrixWorld ); child.applyMatrix( matrixWorldInverse ); scene.remove( child ); parent.add( child ); } }; // File:src/extras/ShapeUtils.js /** * @author zz85 / http://www.lab4games.net/zz85/blog */ THREE.ShapeUtils = { // calculate area of the contour polygon area: function ( contour ) { var n = contour.length; var a = 0.0; for ( var p = n - 1, q = 0; q < n; p = q ++ ) { a += contour[ p ].x * contour[ q ].y - contour[ q ].x * contour[ p ].y; } return a * 0.5; }, triangulate: ( function () { /** * This code is a quick port of code written in C++ which was submitted to * flipcode.com by John W. Ratcliff // July 22, 2000 * See original code and more information here: * http://www.flipcode.com/archives/Efficient_Polygon_Triangulation.shtml * * ported to actionscript by Zevan Rosser * www.actionsnippet.com * * ported to javascript by Joshua Koo * http://www.lab4games.net/zz85/blog * */ function snip( contour, u, v, w, n, verts ) { var p; var ax, ay, bx, by; var cx, cy, px, py; ax = contour[ verts[ u ] ].x; ay = contour[ verts[ u ] ].y; bx = contour[ verts[ v ] ].x; by = contour[ verts[ v ] ].y; cx = contour[ verts[ w ] ].x; cy = contour[ verts[ w ] ].y; if ( Number.EPSILON > ( ( ( bx - ax ) * ( cy - ay ) ) - ( ( by - ay ) * ( cx - ax ) ) ) ) return false; var aX, aY, bX, bY, cX, cY; var apx, apy, bpx, bpy, cpx, cpy; var cCROSSap, bCROSScp, aCROSSbp; aX = cx - bx; aY = cy - by; bX = ax - cx; bY = ay - cy; cX = bx - ax; cY = by - ay; for ( p = 0; p < n; p ++ ) { px = contour[ verts[ p ] ].x; py = contour[ verts[ p ] ].y; if ( ( ( px === ax ) && ( py === ay ) ) || ( ( px === bx ) && ( py === by ) ) || ( ( px === cx ) && ( py === cy ) ) ) continue; apx = px - ax; apy = py - ay; bpx = px - bx; bpy = py - by; cpx = px - cx; cpy = py - cy; // see if p is inside triangle abc aCROSSbp = aX * bpy - aY * bpx; cCROSSap = cX * apy - cY * apx; bCROSScp = bX * cpy - bY * cpx; if ( ( aCROSSbp >= - Number.EPSILON ) && ( bCROSScp >= - Number.EPSILON ) && ( cCROSSap >= - Number.EPSILON ) ) return false; } return true; } // takes in an contour array and returns return function triangulate( contour, indices ) { var n = contour.length; if ( n < 3 ) return null; var result = [], verts = [], vertIndices = []; /* we want a counter-clockwise polygon in verts */ var u, v, w; if ( THREE.ShapeUtils.area( contour ) > 0.0 ) { for ( v = 0; v < n; v ++ ) verts[ v ] = v; } else { for ( v = 0; v < n; v ++ ) verts[ v ] = ( n - 1 ) - v; } var nv = n; /* remove nv - 2 vertices, creating 1 triangle every time */ var count = 2 * nv; /* error detection */ for ( v = nv - 1; nv > 2; ) { /* if we loop, it is probably a non-simple polygon */ if ( ( count -- ) <= 0 ) { //** Triangulate: ERROR - probable bad polygon! //throw ( "Warning, unable to triangulate polygon!" ); //return null; // Sometimes warning is fine, especially polygons are triangulated in reverse. console.warn( 'THREE.ShapeUtils: Unable to triangulate polygon! in triangulate()' ); if ( indices ) return vertIndices; return result; } /* three consecutive vertices in current polygon, */ u = v; if ( nv <= u ) u = 0; /* previous */ v = u + 1; if ( nv <= v ) v = 0; /* new v */ w = v + 1; if ( nv <= w ) w = 0; /* next */ if ( snip( contour, u, v, w, nv, verts ) ) { var a, b, c, s, t; /* true names of the vertices */ a = verts[ u ]; b = verts[ v ]; c = verts[ w ]; /* output Triangle */ result.push( [ contour[ a ], contour[ b ], contour[ c ] ] ); vertIndices.push( [ verts[ u ], verts[ v ], verts[ w ] ] ); /* remove v from the remaining polygon */ for ( s = v, t = v + 1; t < nv; s ++, t ++ ) { verts[ s ] = verts[ t ]; } nv --; /* reset error detection counter */ count = 2 * nv; } } if ( indices ) return vertIndices; return result; } } )(), triangulateShape: function ( contour, holes ) { function point_in_segment_2D_colin( inSegPt1, inSegPt2, inOtherPt ) { // inOtherPt needs to be collinear to the inSegment if ( inSegPt1.x !== inSegPt2.x ) { if ( inSegPt1.x < inSegPt2.x ) { return ( ( inSegPt1.x <= inOtherPt.x ) && ( inOtherPt.x <= inSegPt2.x ) ); } else { return ( ( inSegPt2.x <= inOtherPt.x ) && ( inOtherPt.x <= inSegPt1.x ) ); } } else { if ( inSegPt1.y < inSegPt2.y ) { return ( ( inSegPt1.y <= inOtherPt.y ) && ( inOtherPt.y <= inSegPt2.y ) ); } else { return ( ( inSegPt2.y <= inOtherPt.y ) && ( inOtherPt.y <= inSegPt1.y ) ); } } } function intersect_segments_2D( inSeg1Pt1, inSeg1Pt2, inSeg2Pt1, inSeg2Pt2, inExcludeAdjacentSegs ) { var seg1dx = inSeg1Pt2.x - inSeg1Pt1.x, seg1dy = inSeg1Pt2.y - inSeg1Pt1.y; var seg2dx = inSeg2Pt2.x - inSeg2Pt1.x, seg2dy = inSeg2Pt2.y - inSeg2Pt1.y; var seg1seg2dx = inSeg1Pt1.x - inSeg2Pt1.x; var seg1seg2dy = inSeg1Pt1.y - inSeg2Pt1.y; var limit = seg1dy * seg2dx - seg1dx * seg2dy; var perpSeg1 = seg1dy * seg1seg2dx - seg1dx * seg1seg2dy; if ( Math.abs( limit ) > Number.EPSILON ) { // not parallel var perpSeg2; if ( limit > 0 ) { if ( ( perpSeg1 < 0 ) || ( perpSeg1 > limit ) ) return []; perpSeg2 = seg2dy * seg1seg2dx - seg2dx * seg1seg2dy; if ( ( perpSeg2 < 0 ) || ( perpSeg2 > limit ) ) return []; } else { if ( ( perpSeg1 > 0 ) || ( perpSeg1 < limit ) ) return []; perpSeg2 = seg2dy * seg1seg2dx - seg2dx * seg1seg2dy; if ( ( perpSeg2 > 0 ) || ( perpSeg2 < limit ) ) return []; } // i.e. to reduce rounding errors // intersection at endpoint of segment#1? if ( perpSeg2 === 0 ) { if ( ( inExcludeAdjacentSegs ) && ( ( perpSeg1 === 0 ) || ( perpSeg1 === limit ) ) ) return []; return [ inSeg1Pt1 ]; } if ( perpSeg2 === limit ) { if ( ( inExcludeAdjacentSegs ) && ( ( perpSeg1 === 0 ) || ( perpSeg1 === limit ) ) ) return []; return [ inSeg1Pt2 ]; } // intersection at endpoint of segment#2? if ( perpSeg1 === 0 ) return [ inSeg2Pt1 ]; if ( perpSeg1 === limit ) return [ inSeg2Pt2 ]; // return real intersection point var factorSeg1 = perpSeg2 / limit; return [ { x: inSeg1Pt1.x + factorSeg1 * seg1dx, y: inSeg1Pt1.y + factorSeg1 * seg1dy } ]; } else { // parallel or collinear if ( ( perpSeg1 !== 0 ) || ( seg2dy * seg1seg2dx !== seg2dx * seg1seg2dy ) ) return []; // they are collinear or degenerate var seg1Pt = ( ( seg1dx === 0 ) && ( seg1dy === 0 ) ); // segment1 is just a point? var seg2Pt = ( ( seg2dx === 0 ) && ( seg2dy === 0 ) ); // segment2 is just a point? // both segments are points if ( seg1Pt && seg2Pt ) { if ( ( inSeg1Pt1.x !== inSeg2Pt1.x ) || ( inSeg1Pt1.y !== inSeg2Pt1.y ) ) return []; // they are distinct points return [ inSeg1Pt1 ]; // they are the same point } // segment#1 is a single point if ( seg1Pt ) { if ( ! point_in_segment_2D_colin( inSeg2Pt1, inSeg2Pt2, inSeg1Pt1 ) ) return []; // but not in segment#2 return [ inSeg1Pt1 ]; } // segment#2 is a single point if ( seg2Pt ) { if ( ! point_in_segment_2D_colin( inSeg1Pt1, inSeg1Pt2, inSeg2Pt1 ) ) return []; // but not in segment#1 return [ inSeg2Pt1 ]; } // they are collinear segments, which might overlap var seg1min, seg1max, seg1minVal, seg1maxVal; var seg2min, seg2max, seg2minVal, seg2maxVal; if ( seg1dx !== 0 ) { // the segments are NOT on a vertical line if ( inSeg1Pt1.x < inSeg1Pt2.x ) { seg1min = inSeg1Pt1; seg1minVal = inSeg1Pt1.x; seg1max = inSeg1Pt2; seg1maxVal = inSeg1Pt2.x; } else { seg1min = inSeg1Pt2; seg1minVal = inSeg1Pt2.x; seg1max = inSeg1Pt1; seg1maxVal = inSeg1Pt1.x; } if ( inSeg2Pt1.x < inSeg2Pt2.x ) { seg2min = inSeg2Pt1; seg2minVal = inSeg2Pt1.x; seg2max = inSeg2Pt2; seg2maxVal = inSeg2Pt2.x; } else { seg2min = inSeg2Pt2; seg2minVal = inSeg2Pt2.x; seg2max = inSeg2Pt1; seg2maxVal = inSeg2Pt1.x; } } else { // the segments are on a vertical line if ( inSeg1Pt1.y < inSeg1Pt2.y ) { seg1min = inSeg1Pt1; seg1minVal = inSeg1Pt1.y; seg1max = inSeg1Pt2; seg1maxVal = inSeg1Pt2.y; } else { seg1min = inSeg1Pt2; seg1minVal = inSeg1Pt2.y; seg1max = inSeg1Pt1; seg1maxVal = inSeg1Pt1.y; } if ( inSeg2Pt1.y < inSeg2Pt2.y ) { seg2min = inSeg2Pt1; seg2minVal = inSeg2Pt1.y; seg2max = inSeg2Pt2; seg2maxVal = inSeg2Pt2.y; } else { seg2min = inSeg2Pt2; seg2minVal = inSeg2Pt2.y; seg2max = inSeg2Pt1; seg2maxVal = inSeg2Pt1.y; } } if ( seg1minVal <= seg2minVal ) { if ( seg1maxVal < seg2minVal ) return []; if ( seg1maxVal === seg2minVal ) { if ( inExcludeAdjacentSegs ) return []; return [ seg2min ]; } if ( seg1maxVal <= seg2maxVal ) return [ seg2min, seg1max ]; return [ seg2min, seg2max ]; } else { if ( seg1minVal > seg2maxVal ) return []; if ( seg1minVal === seg2maxVal ) { if ( inExcludeAdjacentSegs ) return []; return [ seg1min ]; } if ( seg1maxVal <= seg2maxVal ) return [ seg1min, seg1max ]; return [ seg1min, seg2max ]; } } } function isPointInsideAngle( inVertex, inLegFromPt, inLegToPt, inOtherPt ) { // The order of legs is important // translation of all points, so that Vertex is at (0,0) var legFromPtX = inLegFromPt.x - inVertex.x, legFromPtY = inLegFromPt.y - inVertex.y; var legToPtX = inLegToPt.x - inVertex.x, legToPtY = inLegToPt.y - inVertex.y; var otherPtX = inOtherPt.x - inVertex.x, otherPtY = inOtherPt.y - inVertex.y; // main angle >0: < 180 deg.; 0: 180 deg.; <0: > 180 deg. var from2toAngle = legFromPtX * legToPtY - legFromPtY * legToPtX; var from2otherAngle = legFromPtX * otherPtY - legFromPtY * otherPtX; if ( Math.abs( from2toAngle ) > Number.EPSILON ) { // angle != 180 deg. var other2toAngle = otherPtX * legToPtY - otherPtY * legToPtX; // console.log( "from2to: " + from2toAngle + ", from2other: " + from2otherAngle + ", other2to: " + other2toAngle ); if ( from2toAngle > 0 ) { // main angle < 180 deg. return ( ( from2otherAngle >= 0 ) && ( other2toAngle >= 0 ) ); } else { // main angle > 180 deg. return ( ( from2otherAngle >= 0 ) || ( other2toAngle >= 0 ) ); } } else { // angle == 180 deg. // console.log( "from2to: 180 deg., from2other: " + from2otherAngle ); return ( from2otherAngle > 0 ); } } function removeHoles( contour, holes ) { var shape = contour.concat(); // work on this shape var hole; function isCutLineInsideAngles( inShapeIdx, inHoleIdx ) { // Check if hole point lies within angle around shape point var lastShapeIdx = shape.length - 1; var prevShapeIdx = inShapeIdx - 1; if ( prevShapeIdx < 0 ) prevShapeIdx = lastShapeIdx; var nextShapeIdx = inShapeIdx + 1; if ( nextShapeIdx > lastShapeIdx ) nextShapeIdx = 0; var insideAngle = isPointInsideAngle( shape[ inShapeIdx ], shape[ prevShapeIdx ], shape[ nextShapeIdx ], hole[ inHoleIdx ] ); if ( ! insideAngle ) { // console.log( "Vertex (Shape): " + inShapeIdx + ", Point: " + hole[inHoleIdx].x + "/" + hole[inHoleIdx].y ); return false; } // Check if shape point lies within angle around hole point var lastHoleIdx = hole.length - 1; var prevHoleIdx = inHoleIdx - 1; if ( prevHoleIdx < 0 ) prevHoleIdx = lastHoleIdx; var nextHoleIdx = inHoleIdx + 1; if ( nextHoleIdx > lastHoleIdx ) nextHoleIdx = 0; insideAngle = isPointInsideAngle( hole[ inHoleIdx ], hole[ prevHoleIdx ], hole[ nextHoleIdx ], shape[ inShapeIdx ] ); if ( ! insideAngle ) { // console.log( "Vertex (Hole): " + inHoleIdx + ", Point: " + shape[inShapeIdx].x + "/" + shape[inShapeIdx].y ); return false; } return true; } function intersectsShapeEdge( inShapePt, inHolePt ) { // checks for intersections with shape edges var sIdx, nextIdx, intersection; for ( sIdx = 0; sIdx < shape.length; sIdx ++ ) { nextIdx = sIdx + 1; nextIdx %= shape.length; intersection = intersect_segments_2D( inShapePt, inHolePt, shape[ sIdx ], shape[ nextIdx ], true ); if ( intersection.length > 0 ) return true; } return false; } var indepHoles = []; function intersectsHoleEdge( inShapePt, inHolePt ) { // checks for intersections with hole edges var ihIdx, chkHole, hIdx, nextIdx, intersection; for ( ihIdx = 0; ihIdx < indepHoles.length; ihIdx ++ ) { chkHole = holes[ indepHoles[ ihIdx ]]; for ( hIdx = 0; hIdx < chkHole.length; hIdx ++ ) { nextIdx = hIdx + 1; nextIdx %= chkHole.length; intersection = intersect_segments_2D( inShapePt, inHolePt, chkHole[ hIdx ], chkHole[ nextIdx ], true ); if ( intersection.length > 0 ) return true; } } return false; } var holeIndex, shapeIndex, shapePt, holePt, holeIdx, cutKey, failedCuts = [], tmpShape1, tmpShape2, tmpHole1, tmpHole2; for ( var h = 0, hl = holes.length; h < hl; h ++ ) { indepHoles.push( h ); } var minShapeIndex = 0; var counter = indepHoles.length * 2; while ( indepHoles.length > 0 ) { counter --; if ( counter < 0 ) { console.log( "Infinite Loop! Holes left:" + indepHoles.length + ", Probably Hole outside Shape!" ); break; } // search for shape-vertex and hole-vertex, // which can be connected without intersections for ( shapeIndex = minShapeIndex; shapeIndex < shape.length; shapeIndex ++ ) { shapePt = shape[ shapeIndex ]; holeIndex = - 1; // search for hole which can be reached without intersections for ( var h = 0; h < indepHoles.length; h ++ ) { holeIdx = indepHoles[ h ]; // prevent multiple checks cutKey = shapePt.x + ":" + shapePt.y + ":" + holeIdx; if ( failedCuts[ cutKey ] !== undefined ) continue; hole = holes[ holeIdx ]; for ( var h2 = 0; h2 < hole.length; h2 ++ ) { holePt = hole[ h2 ]; if ( ! isCutLineInsideAngles( shapeIndex, h2 ) ) continue; if ( intersectsShapeEdge( shapePt, holePt ) ) continue; if ( intersectsHoleEdge( shapePt, holePt ) ) continue; holeIndex = h2; indepHoles.splice( h, 1 ); tmpShape1 = shape.slice( 0, shapeIndex + 1 ); tmpShape2 = shape.slice( shapeIndex ); tmpHole1 = hole.slice( holeIndex ); tmpHole2 = hole.slice( 0, holeIndex + 1 ); shape = tmpShape1.concat( tmpHole1 ).concat( tmpHole2 ).concat( tmpShape2 ); minShapeIndex = shapeIndex; // Debug only, to show the selected cuts // glob_CutLines.push( [ shapePt, holePt ] ); break; } if ( holeIndex >= 0 ) break; // hole-vertex found failedCuts[ cutKey ] = true; // remember failure } if ( holeIndex >= 0 ) break; // hole-vertex found } } return shape; /* shape with no holes */ } var i, il, f, face, key, index, allPointsMap = {}; // To maintain reference to old shape, one must match coordinates, or offset the indices from original arrays. It's probably easier to do the first. var allpoints = contour.concat(); for ( var h = 0, hl = holes.length; h < hl; h ++ ) { Array.prototype.push.apply( allpoints, holes[ h ] ); } //console.log( "allpoints",allpoints, allpoints.length ); // prepare all points map for ( i = 0, il = allpoints.length; i < il; i ++ ) { key = allpoints[ i ].x + ":" + allpoints[ i ].y; if ( allPointsMap[ key ] !== undefined ) { console.warn( "THREE.Shape: Duplicate point", key ); } allPointsMap[ key ] = i; } // remove holes by cutting paths to holes and adding them to the shape var shapeWithoutHoles = removeHoles( contour, holes ); var triangles = THREE.ShapeUtils.triangulate( shapeWithoutHoles, false ); // True returns indices for points of spooled shape //console.log( "triangles",triangles, triangles.length ); // check all face vertices against all points map for ( i = 0, il = triangles.length; i < il; i ++ ) { face = triangles[ i ]; for ( f = 0; f < 3; f ++ ) { key = face[ f ].x + ":" + face[ f ].y; index = allPointsMap[ key ]; if ( index !== undefined ) { face[ f ] = index; } } } return triangles.concat(); }, isClockWise: function ( pts ) { return THREE.ShapeUtils.area( pts ) < 0; }, // Bezier Curves formulas obtained from // http://en.wikipedia.org/wiki/B%C3%A9zier_curve // Quad Bezier Functions b2: ( function () { function b2p0( t, p ) { var k = 1 - t; return k * k * p; } function b2p1( t, p ) { return 2 * ( 1 - t ) * t * p; } function b2p2( t, p ) { return t * t * p; } return function b2( t, p0, p1, p2 ) { return b2p0( t, p0 ) + b2p1( t, p1 ) + b2p2( t, p2 ); }; } )(), // Cubic Bezier Functions b3: ( function () { function b3p0( t, p ) { var k = 1 - t; return k * k * k * p; } function b3p1( t, p ) { var k = 1 - t; return 3 * k * k * t * p; } function b3p2( t, p ) { var k = 1 - t; return 3 * k * t * t * p; } function b3p3( t, p ) { return t * t * t * p; } return function b3( t, p0, p1, p2, p3 ) { return b3p0( t, p0 ) + b3p1( t, p1 ) + b3p2( t, p2 ) + b3p3( t, p3 ); }; } )() }; // File:src/extras/core/Curve.js /** * @author zz85 / http://www.lab4games.net/zz85/blog * Extensible curve object * * Some common of Curve methods * .getPoint(t), getTangent(t) * .getPointAt(u), getTagentAt(u) * .getPoints(), .getSpacedPoints() * .getLength() * .updateArcLengths() * * This following classes subclasses THREE.Curve: * * -- 2d classes -- * THREE.LineCurve * THREE.QuadraticBezierCurve * THREE.CubicBezierCurve * THREE.SplineCurve * THREE.ArcCurve * THREE.EllipseCurve * * -- 3d classes -- * THREE.LineCurve3 * THREE.QuadraticBezierCurve3 * THREE.CubicBezierCurve3 * THREE.SplineCurve3 * * A series of curves can be represented as a THREE.CurvePath * **/ /************************************************************** * Abstract Curve base class **************************************************************/ THREE.Curve = function () { }; THREE.Curve.prototype = { constructor: THREE.Curve, // Virtual base class method to overwrite and implement in subclasses // - t [0 .. 1] getPoint: function ( t ) { console.warn( "THREE.Curve: Warning, getPoint() not implemented!" ); return null; }, // Get point at relative position in curve according to arc length // - u [0 .. 1] getPointAt: function ( u ) { var t = this.getUtoTmapping( u ); return this.getPoint( t ); }, // Get sequence of points using getPoint( t ) getPoints: function ( divisions ) { if ( ! divisions ) divisions = 5; var d, pts = []; for ( d = 0; d <= divisions; d ++ ) { pts.push( this.getPoint( d / divisions ) ); } return pts; }, // Get sequence of points using getPointAt( u ) getSpacedPoints: function ( divisions ) { if ( ! divisions ) divisions = 5; var d, pts = []; for ( d = 0; d <= divisions; d ++ ) { pts.push( this.getPointAt( d / divisions ) ); } return pts; }, // Get total curve arc length getLength: function () { var lengths = this.getLengths(); return lengths[ lengths.length - 1 ]; }, // Get list of cumulative segment lengths getLengths: function ( divisions ) { if ( ! divisions ) divisions = ( this.__arcLengthDivisions ) ? ( this.__arcLengthDivisions ) : 200; if ( this.cacheArcLengths && ( this.cacheArcLengths.length === divisions + 1 ) && ! this.needsUpdate ) { //console.log( "cached", this.cacheArcLengths ); return this.cacheArcLengths; } this.needsUpdate = false; var cache = []; var current, last = this.getPoint( 0 ); var p, sum = 0; cache.push( 0 ); for ( p = 1; p <= divisions; p ++ ) { current = this.getPoint ( p / divisions ); sum += current.distanceTo( last ); cache.push( sum ); last = current; } this.cacheArcLengths = cache; return cache; // { sums: cache, sum:sum }; Sum is in the last element. }, updateArcLengths: function() { this.needsUpdate = true; this.getLengths(); }, // Given u ( 0 .. 1 ), get a t to find p. This gives you points which are equidistant getUtoTmapping: function ( u, distance ) { var arcLengths = this.getLengths(); var i = 0, il = arcLengths.length; var targetArcLength; // The targeted u distance value to get if ( distance ) { targetArcLength = distance; } else { targetArcLength = u * arcLengths[ il - 1 ]; } //var time = Date.now(); // binary search for the index with largest value smaller than target u distance var low = 0, high = il - 1, comparison; while ( low <= high ) { i = Math.floor( low + ( high - low ) / 2 ); // less likely to overflow, though probably not issue here, JS doesn't really have integers, all numbers are floats comparison = arcLengths[ i ] - targetArcLength; if ( comparison < 0 ) { low = i + 1; } else if ( comparison > 0 ) { high = i - 1; } else { high = i; break; // DONE } } i = high; //console.log('b' , i, low, high, Date.now()- time); if ( arcLengths[ i ] === targetArcLength ) { var t = i / ( il - 1 ); return t; } // we could get finer grain at lengths, or use simple interpolation between two points var lengthBefore = arcLengths[ i ]; var lengthAfter = arcLengths[ i + 1 ]; var segmentLength = lengthAfter - lengthBefore; // determine where we are between the 'before' and 'after' points var segmentFraction = ( targetArcLength - lengthBefore ) / segmentLength; // add that fractional amount to t var t = ( i + segmentFraction ) / ( il - 1 ); return t; }, // Returns a unit vector tangent at t // In case any sub curve does not implement its tangent derivation, // 2 points a small delta apart will be used to find its gradient // which seems to give a reasonable approximation getTangent: function( t ) { var delta = 0.0001; var t1 = t - delta; var t2 = t + delta; // Capping in case of danger if ( t1 < 0 ) t1 = 0; if ( t2 > 1 ) t2 = 1; var pt1 = this.getPoint( t1 ); var pt2 = this.getPoint( t2 ); var vec = pt2.clone().sub( pt1 ); return vec.normalize(); }, getTangentAt: function ( u ) { var t = this.getUtoTmapping( u ); return this.getTangent( t ); } }; // TODO: Transformation for Curves? /************************************************************** * 3D Curves **************************************************************/ // A Factory method for creating new curve subclasses THREE.Curve.create = function ( constructor, getPointFunc ) { constructor.prototype = Object.create( THREE.Curve.prototype ); constructor.prototype.constructor = constructor; constructor.prototype.getPoint = getPointFunc; return constructor; }; // File:src/extras/core/CurvePath.js /** * @author zz85 / http://www.lab4games.net/zz85/blog * **/ /************************************************************** * Curved Path - a curve path is simply a array of connected * curves, but retains the api of a curve **************************************************************/ THREE.CurvePath = function () { this.curves = []; this.autoClose = false; // Automatically closes the path }; THREE.CurvePath.prototype = Object.assign( Object.create( THREE.Curve.prototype ), { constructor: THREE.CurvePath, add: function ( curve ) { this.curves.push( curve ); }, closePath: function () { // TODO Test // and verify for vector3 (needs to implement equals) // Add a line curve if start and end of lines are not connected var startPoint = this.curves[ 0 ].getPoint( 0 ); var endPoint = this.curves[ this.curves.length - 1 ].getPoint( 1 ); if ( ! startPoint.equals( endPoint ) ) { this.curves.push( new THREE.LineCurve( endPoint, startPoint ) ); } }, // To get accurate point with reference to // entire path distance at time t, // following has to be done: // 1. Length of each sub path have to be known // 2. Locate and identify type of curve // 3. Get t for the curve // 4. Return curve.getPointAt(t') getPoint: function ( t ) { var d = t * this.getLength(); var curveLengths = this.getCurveLengths(); var i = 0; // To think about boundaries points. while ( i < curveLengths.length ) { if ( curveLengths[ i ] >= d ) { var diff = curveLengths[ i ] - d; var curve = this.curves[ i ]; var u = 1 - diff / curve.getLength(); return curve.getPointAt( u ); } i ++; } return null; // loop where sum != 0, sum > d , sum+1 0 ) { laste = points[ points.length - 1 ]; cpx0 = laste.x; cpy0 = laste.y; } else { laste = this.actions[ i - 1 ].args; cpx0 = laste[ laste.length - 2 ]; cpy0 = laste[ laste.length - 1 ]; } for ( var j = 1; j <= divisions; j ++ ) { var t = j / divisions; tx = b2( t, cpx0, cpx1, cpx ); ty = b2( t, cpy0, cpy1, cpy ); points.push( new THREE.Vector2( tx, ty ) ); } break; case 'bezierCurveTo': cpx = args[ 4 ]; cpy = args[ 5 ]; cpx1 = args[ 0 ]; cpy1 = args[ 1 ]; cpx2 = args[ 2 ]; cpy2 = args[ 3 ]; if ( points.length > 0 ) { laste = points[ points.length - 1 ]; cpx0 = laste.x; cpy0 = laste.y; } else { laste = this.actions[ i - 1 ].args; cpx0 = laste[ laste.length - 2 ]; cpy0 = laste[ laste.length - 1 ]; } for ( var j = 1; j <= divisions; j ++ ) { var t = j / divisions; tx = b3( t, cpx0, cpx1, cpx2, cpx ); ty = b3( t, cpy0, cpy1, cpy2, cpy ); points.push( new THREE.Vector2( tx, ty ) ); } break; case 'splineThru': laste = this.actions[ i - 1 ].args; var last = new THREE.Vector2( laste[ laste.length - 2 ], laste[ laste.length - 1 ] ); var spts = [ last ]; var n = divisions * args[ 0 ].length; spts = spts.concat( args[ 0 ] ); var spline = new THREE.SplineCurve( spts ); for ( var j = 1; j <= n; j ++ ) { points.push( spline.getPointAt( j / n ) ); } break; case 'arc': var aX = args[ 0 ], aY = args[ 1 ], aRadius = args[ 2 ], aStartAngle = args[ 3 ], aEndAngle = args[ 4 ], aClockwise = !! args[ 5 ]; var deltaAngle = aEndAngle - aStartAngle; var angle; var tdivisions = divisions * 2; for ( var j = 1; j <= tdivisions; j ++ ) { var t = j / tdivisions; if ( ! aClockwise ) { t = 1 - t; } angle = aStartAngle + t * deltaAngle; tx = aX + aRadius * Math.cos( angle ); ty = aY + aRadius * Math.sin( angle ); //console.log('t', t, 'angle', angle, 'tx', tx, 'ty', ty); points.push( new THREE.Vector2( tx, ty ) ); } //console.log(points); break; case 'ellipse': var aX = args[ 0 ], aY = args[ 1 ], xRadius = args[ 2 ], yRadius = args[ 3 ], aStartAngle = args[ 4 ], aEndAngle = args[ 5 ], aClockwise = !! args[ 6 ], aRotation = args[ 7 ]; var deltaAngle = aEndAngle - aStartAngle; var angle; var tdivisions = divisions * 2; var cos, sin; if ( aRotation !== 0 ) { cos = Math.cos( aRotation ); sin = Math.sin( aRotation ); } for ( var j = 1; j <= tdivisions; j ++ ) { var t = j / tdivisions; if ( ! aClockwise ) { t = 1 - t; } angle = aStartAngle + t * deltaAngle; tx = aX + xRadius * Math.cos( angle ); ty = aY + yRadius * Math.sin( angle ); if ( aRotation !== 0 ) { var x = tx, y = ty; // Rotate the point about the center of the ellipse. tx = ( x - aX ) * cos - ( y - aY ) * sin + aX; ty = ( x - aX ) * sin + ( y - aY ) * cos + aY; } //console.log('t', t, 'angle', angle, 'tx', tx, 'ty', ty); points.push( new THREE.Vector2( tx, ty ) ); } //console.log(points); break; } // end switch } // Normalize to remove the closing point by default. var lastPoint = points[ points.length - 1 ]; if ( Math.abs( lastPoint.x - points[ 0 ].x ) < Number.EPSILON && Math.abs( lastPoint.y - points[ 0 ].y ) < Number.EPSILON ) points.splice( points.length - 1, 1 ); if ( this.autoClose ) { points.push( points[ 0 ] ); } return points; }, toShapes: function ( isCCW, noHoles ) { function extractSubpaths( inActions ) { var subPaths = [], lastPath = new THREE.Path(); for ( var i = 0, l = inActions.length; i < l; i ++ ) { var item = inActions[ i ]; var args = item.args; var action = item.action; if ( action === 'moveTo' ) { if ( lastPath.actions.length !== 0 ) { subPaths.push( lastPath ); lastPath = new THREE.Path(); } } lastPath[ action ].apply( lastPath, args ); } if ( lastPath.actions.length !== 0 ) { subPaths.push( lastPath ); } // console.log(subPaths); return subPaths; } function toShapesNoHoles( inSubpaths ) { var shapes = []; for ( var i = 0, l = inSubpaths.length; i < l; i ++ ) { var tmpPath = inSubpaths[ i ]; var tmpShape = new THREE.Shape(); tmpShape.actions = tmpPath.actions; tmpShape.curves = tmpPath.curves; shapes.push( tmpShape ); } //console.log("shape", shapes); return shapes; } function isPointInsidePolygon( inPt, inPolygon ) { var polyLen = inPolygon.length; // inPt on polygon contour => immediate success or // toggling of inside/outside at every single! intersection point of an edge // with the horizontal line through inPt, left of inPt // not counting lowerY endpoints of edges and whole edges on that line var inside = false; for ( var p = polyLen - 1, q = 0; q < polyLen; p = q ++ ) { var edgeLowPt = inPolygon[ p ]; var edgeHighPt = inPolygon[ q ]; var edgeDx = edgeHighPt.x - edgeLowPt.x; var edgeDy = edgeHighPt.y - edgeLowPt.y; if ( Math.abs( edgeDy ) > Number.EPSILON ) { // not parallel if ( edgeDy < 0 ) { edgeLowPt = inPolygon[ q ]; edgeDx = - edgeDx; edgeHighPt = inPolygon[ p ]; edgeDy = - edgeDy; } if ( ( inPt.y < edgeLowPt.y ) || ( inPt.y > edgeHighPt.y ) ) continue; if ( inPt.y === edgeLowPt.y ) { if ( inPt.x === edgeLowPt.x ) return true; // inPt is on contour ? // continue; // no intersection or edgeLowPt => doesn't count !!! } else { var perpEdge = edgeDy * ( inPt.x - edgeLowPt.x ) - edgeDx * ( inPt.y - edgeLowPt.y ); if ( perpEdge === 0 ) return true; // inPt is on contour ? if ( perpEdge < 0 ) continue; inside = ! inside; // true intersection left of inPt } } else { // parallel or collinear if ( inPt.y !== edgeLowPt.y ) continue; // parallel // edge lies on the same horizontal line as inPt if ( ( ( edgeHighPt.x <= inPt.x ) && ( inPt.x <= edgeLowPt.x ) ) || ( ( edgeLowPt.x <= inPt.x ) && ( inPt.x <= edgeHighPt.x ) ) ) return true; // inPt: Point on contour ! // continue; } } return inside; } var isClockWise = THREE.ShapeUtils.isClockWise; var subPaths = extractSubpaths( this.actions ); if ( subPaths.length === 0 ) return []; if ( noHoles === true ) return toShapesNoHoles( subPaths ); var solid, tmpPath, tmpShape, shapes = []; if ( subPaths.length === 1 ) { tmpPath = subPaths[ 0 ]; tmpShape = new THREE.Shape(); tmpShape.actions = tmpPath.actions; tmpShape.curves = tmpPath.curves; shapes.push( tmpShape ); return shapes; } var holesFirst = ! isClockWise( subPaths[ 0 ].getPoints() ); holesFirst = isCCW ? ! holesFirst : holesFirst; // console.log("Holes first", holesFirst); var betterShapeHoles = []; var newShapes = []; var newShapeHoles = []; var mainIdx = 0; var tmpPoints; newShapes[ mainIdx ] = undefined; newShapeHoles[ mainIdx ] = []; for ( var i = 0, l = subPaths.length; i < l; i ++ ) { tmpPath = subPaths[ i ]; tmpPoints = tmpPath.getPoints(); solid = isClockWise( tmpPoints ); solid = isCCW ? ! solid : solid; if ( solid ) { if ( ( ! holesFirst ) && ( newShapes[ mainIdx ] ) ) mainIdx ++; newShapes[ mainIdx ] = { s: new THREE.Shape(), p: tmpPoints }; newShapes[ mainIdx ].s.actions = tmpPath.actions; newShapes[ mainIdx ].s.curves = tmpPath.curves; if ( holesFirst ) mainIdx ++; newShapeHoles[ mainIdx ] = []; //console.log('cw', i); } else { newShapeHoles[ mainIdx ].push( { h: tmpPath, p: tmpPoints[ 0 ] } ); //console.log('ccw', i); } } // only Holes? -> probably all Shapes with wrong orientation if ( ! newShapes[ 0 ] ) return toShapesNoHoles( subPaths ); if ( newShapes.length > 1 ) { var ambiguous = false; var toChange = []; for ( var sIdx = 0, sLen = newShapes.length; sIdx < sLen; sIdx ++ ) { betterShapeHoles[ sIdx ] = []; } for ( var sIdx = 0, sLen = newShapes.length; sIdx < sLen; sIdx ++ ) { var sho = newShapeHoles[ sIdx ]; for ( var hIdx = 0; hIdx < sho.length; hIdx ++ ) { var ho = sho[ hIdx ]; var hole_unassigned = true; for ( var s2Idx = 0; s2Idx < newShapes.length; s2Idx ++ ) { if ( isPointInsidePolygon( ho.p, newShapes[ s2Idx ].p ) ) { if ( sIdx !== s2Idx ) toChange.push( { froms: sIdx, tos: s2Idx, hole: hIdx } ); if ( hole_unassigned ) { hole_unassigned = false; betterShapeHoles[ s2Idx ].push( ho ); } else { ambiguous = true; } } } if ( hole_unassigned ) { betterShapeHoles[ sIdx ].push( ho ); } } } // console.log("ambiguous: ", ambiguous); if ( toChange.length > 0 ) { // console.log("to change: ", toChange); if ( ! ambiguous ) newShapeHoles = betterShapeHoles; } } var tmpHoles; for ( var i = 0, il = newShapes.length; i < il; i ++ ) { tmpShape = newShapes[ i ].s; shapes.push( tmpShape ); tmpHoles = newShapeHoles[ i ]; for ( var j = 0, jl = tmpHoles.length; j < jl; j ++ ) { tmpShape.holes.push( tmpHoles[ j ].h ); } } //console.log("shape", shapes); return shapes; } } ); // File:src/extras/core/Shape.js /** * @author zz85 / http://www.lab4games.net/zz85/blog * Defines a 2d shape plane using paths. **/ // STEP 1 Create a path. // STEP 2 Turn path into shape. // STEP 3 ExtrudeGeometry takes in Shape/Shapes // STEP 3a - Extract points from each shape, turn to vertices // STEP 3b - Triangulate each shape, add faces. THREE.Shape = function () { THREE.Path.apply( this, arguments ); this.holes = []; }; THREE.Shape.prototype = Object.assign( Object.create( THREE.Path.prototype ), { constructor: THREE.Shape, // Convenience method to return ExtrudeGeometry extrude: function ( options ) { return new THREE.ExtrudeGeometry( this, options ); }, // Convenience method to return ShapeGeometry makeGeometry: function ( options ) { return new THREE.ShapeGeometry( this, options ); }, getPointsHoles: function ( divisions ) { var holesPts = []; for ( var i = 0, l = this.holes.length; i < l; i ++ ) { holesPts[ i ] = this.holes[ i ].getPoints( divisions ); } return holesPts; }, // Get points of shape and holes (keypoints based on segments parameter) extractAllPoints: function ( divisions ) { return { shape: this.getPoints( divisions ), holes: this.getPointsHoles( divisions ) }; }, extractPoints: function ( divisions ) { return this.extractAllPoints( divisions ); } } ); // File:src/extras/curves/LineCurve.js /************************************************************** * Line **************************************************************/ THREE.LineCurve = function ( v1, v2 ) { this.v1 = v1; this.v2 = v2; }; THREE.LineCurve.prototype = Object.create( THREE.Curve.prototype ); THREE.LineCurve.prototype.constructor = THREE.LineCurve; THREE.LineCurve.prototype.getPoint = function ( t ) { var point = this.v2.clone().sub( this.v1 ); point.multiplyScalar( t ).add( this.v1 ); return point; }; // Line curve is linear, so we can overwrite default getPointAt THREE.LineCurve.prototype.getPointAt = function ( u ) { return this.getPoint( u ); }; THREE.LineCurve.prototype.getTangent = function( t ) { var tangent = this.v2.clone().sub( this.v1 ); return tangent.normalize(); }; // File:src/extras/curves/QuadraticBezierCurve.js /************************************************************** * Quadratic Bezier curve **************************************************************/ THREE.QuadraticBezierCurve = function ( v0, v1, v2 ) { this.v0 = v0; this.v1 = v1; this.v2 = v2; }; THREE.QuadraticBezierCurve.prototype = Object.create( THREE.Curve.prototype ); THREE.QuadraticBezierCurve.prototype.constructor = THREE.QuadraticBezierCurve; THREE.QuadraticBezierCurve.prototype.getPoint = function ( t ) { var b2 = THREE.ShapeUtils.b2; return new THREE.Vector2( b2( t, this.v0.x, this.v1.x, this.v2.x ), b2( t, this.v0.y, this.v1.y, this.v2.y ) ); }; THREE.QuadraticBezierCurve.prototype.getTangent = function( t ) { var tangentQuadraticBezier = THREE.CurveUtils.tangentQuadraticBezier; return new THREE.Vector2( tangentQuadraticBezier( t, this.v0.x, this.v1.x, this.v2.x ), tangentQuadraticBezier( t, this.v0.y, this.v1.y, this.v2.y ) ).normalize(); }; // File:src/extras/curves/CubicBezierCurve.js /************************************************************** * Cubic Bezier curve **************************************************************/ THREE.CubicBezierCurve = function ( v0, v1, v2, v3 ) { this.v0 = v0; this.v1 = v1; this.v2 = v2; this.v3 = v3; }; THREE.CubicBezierCurve.prototype = Object.create( THREE.Curve.prototype ); THREE.CubicBezierCurve.prototype.constructor = THREE.CubicBezierCurve; THREE.CubicBezierCurve.prototype.getPoint = function ( t ) { var b3 = THREE.ShapeUtils.b3; return new THREE.Vector2( b3( t, this.v0.x, this.v1.x, this.v2.x, this.v3.x ), b3( t, this.v0.y, this.v1.y, this.v2.y, this.v3.y ) ); }; THREE.CubicBezierCurve.prototype.getTangent = function( t ) { var tangentCubicBezier = THREE.CurveUtils.tangentCubicBezier; return new THREE.Vector2( tangentCubicBezier( t, this.v0.x, this.v1.x, this.v2.x, this.v3.x ), tangentCubicBezier( t, this.v0.y, this.v1.y, this.v2.y, this.v3.y ) ).normalize(); }; // File:src/extras/curves/SplineCurve.js /************************************************************** * Spline curve **************************************************************/ THREE.SplineCurve = function ( points /* array of Vector2 */ ) { this.points = ( points == undefined ) ? [] : points; }; THREE.SplineCurve.prototype = Object.create( THREE.Curve.prototype ); THREE.SplineCurve.prototype.constructor = THREE.SplineCurve; THREE.SplineCurve.prototype.getPoint = function ( t ) { var points = this.points; var point = ( points.length - 1 ) * t; var intPoint = Math.floor( point ); var weight = point - intPoint; var point0 = points[ intPoint === 0 ? intPoint : intPoint - 1 ]; var point1 = points[ intPoint ]; var point2 = points[ intPoint > points.length - 2 ? points.length - 1 : intPoint + 1 ]; var point3 = points[ intPoint > points.length - 3 ? points.length - 1 : intPoint + 2 ]; var interpolate = THREE.CurveUtils.interpolate; return new THREE.Vector2( interpolate( point0.x, point1.x, point2.x, point3.x, weight ), interpolate( point0.y, point1.y, point2.y, point3.y, weight ) ); }; // File:src/extras/curves/EllipseCurve.js /************************************************************** * Ellipse curve **************************************************************/ THREE.EllipseCurve = function ( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ) { this.aX = aX; this.aY = aY; this.xRadius = xRadius; this.yRadius = yRadius; this.aStartAngle = aStartAngle; this.aEndAngle = aEndAngle; this.aClockwise = aClockwise; this.aRotation = aRotation || 0; }; THREE.EllipseCurve.prototype = Object.create( THREE.Curve.prototype ); THREE.EllipseCurve.prototype.constructor = THREE.EllipseCurve; THREE.EllipseCurve.prototype.getPoint = function ( t ) { var deltaAngle = this.aEndAngle - this.aStartAngle; if ( deltaAngle < 0 ) deltaAngle += Math.PI * 2; if ( deltaAngle > Math.PI * 2 ) deltaAngle -= Math.PI * 2; var angle; if ( this.aClockwise === true ) { angle = this.aEndAngle + ( 1 - t ) * ( Math.PI * 2 - deltaAngle ); } else { angle = this.aStartAngle + t * deltaAngle; } var x = this.aX + this.xRadius * Math.cos( angle ); var y = this.aY + this.yRadius * Math.sin( angle ); if ( this.aRotation !== 0 ) { var cos = Math.cos( this.aRotation ); var sin = Math.sin( this.aRotation ); var tx = x, ty = y; // Rotate the point about the center of the ellipse. x = ( tx - this.aX ) * cos - ( ty - this.aY ) * sin + this.aX; y = ( tx - this.aX ) * sin + ( ty - this.aY ) * cos + this.aY; } return new THREE.Vector2( x, y ); }; // File:src/extras/curves/ArcCurve.js /************************************************************** * Arc curve **************************************************************/ THREE.ArcCurve = function ( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) { THREE.EllipseCurve.call( this, aX, aY, aRadius, aRadius, aStartAngle, aEndAngle, aClockwise ); }; THREE.ArcCurve.prototype = Object.create( THREE.EllipseCurve.prototype ); THREE.ArcCurve.prototype.constructor = THREE.ArcCurve; // File:src/extras/curves/LineCurve3.js /************************************************************** * Line3D **************************************************************/ THREE.LineCurve3 = THREE.Curve.create( function ( v1, v2 ) { this.v1 = v1; this.v2 = v2; }, function ( t ) { var vector = new THREE.Vector3(); vector.subVectors( this.v2, this.v1 ); // diff vector.multiplyScalar( t ); vector.add( this.v1 ); return vector; } ); // File:src/extras/curves/QuadraticBezierCurve3.js /************************************************************** * Quadratic Bezier 3D curve **************************************************************/ THREE.QuadraticBezierCurve3 = THREE.Curve.create( function ( v0, v1, v2 ) { this.v0 = v0; this.v1 = v1; this.v2 = v2; }, function ( t ) { var b2 = THREE.ShapeUtils.b2; return new THREE.Vector3( b2( t, this.v0.x, this.v1.x, this.v2.x ), b2( t, this.v0.y, this.v1.y, this.v2.y ), b2( t, this.v0.z, this.v1.z, this.v2.z ) ); } ); // File:src/extras/curves/CubicBezierCurve3.js /************************************************************** * Cubic Bezier 3D curve **************************************************************/ THREE.CubicBezierCurve3 = THREE.Curve.create( function ( v0, v1, v2, v3 ) { this.v0 = v0; this.v1 = v1; this.v2 = v2; this.v3 = v3; }, function ( t ) { var b3 = THREE.ShapeUtils.b3; return new THREE.Vector3( b3( t, this.v0.x, this.v1.x, this.v2.x, this.v3.x ), b3( t, this.v0.y, this.v1.y, this.v2.y, this.v3.y ), b3( t, this.v0.z, this.v1.z, this.v2.z, this.v3.z ) ); } ); // File:src/extras/curves/SplineCurve3.js /************************************************************** * Spline 3D curve **************************************************************/ THREE.SplineCurve3 = THREE.Curve.create( function ( points /* array of Vector3 */ ) { console.warn( 'THREE.SplineCurve3 will be deprecated. Please use THREE.CatmullRomCurve3' ); this.points = ( points == undefined ) ? [] : points; }, function ( t ) { var points = this.points; var point = ( points.length - 1 ) * t; var intPoint = Math.floor( point ); var weight = point - intPoint; var point0 = points[ intPoint == 0 ? intPoint : intPoint - 1 ]; var point1 = points[ intPoint ]; var point2 = points[ intPoint > points.length - 2 ? points.length - 1 : intPoint + 1 ]; var point3 = points[ intPoint > points.length - 3 ? points.length - 1 : intPoint + 2 ]; var interpolate = THREE.CurveUtils.interpolate; return new THREE.Vector3( interpolate( point0.x, point1.x, point2.x, point3.x, weight ), interpolate( point0.y, point1.y, point2.y, point3.y, weight ), interpolate( point0.z, point1.z, point2.z, point3.z, weight ) ); } ); // File:src/extras/curves/CatmullRomCurve3.js /** * @author zz85 https://github.com/zz85 * * Centripetal CatmullRom Curve - which is useful for avoiding * cusps and self-intersections in non-uniform catmull rom curves. * http://www.cemyuksel.com/research/catmullrom_param/catmullrom.pdf * * curve.type accepts centripetal(default), chordal and catmullrom * curve.tension is used for catmullrom which defaults to 0.5 */ THREE.CatmullRomCurve3 = ( function() { var tmp = new THREE.Vector3(), px = new CubicPoly(), py = new CubicPoly(), pz = new CubicPoly(); /* Based on an optimized c++ solution in - http://stackoverflow.com/questions/9489736/catmull-rom-curve-with-no-cusps-and-no-self-intersections/ - http://ideone.com/NoEbVM This CubicPoly class could be used for reusing some variables and calculations, but for three.js curve use, it could be possible inlined and flatten into a single function call which can be placed in CurveUtils. */ function CubicPoly() { } /* * Compute coefficients for a cubic polynomial * p(s) = c0 + c1*s + c2*s^2 + c3*s^3 * such that * p(0) = x0, p(1) = x1 * and * p'(0) = t0, p'(1) = t1. */ CubicPoly.prototype.init = function( x0, x1, t0, t1 ) { this.c0 = x0; this.c1 = t0; this.c2 = - 3 * x0 + 3 * x1 - 2 * t0 - t1; this.c3 = 2 * x0 - 2 * x1 + t0 + t1; }; CubicPoly.prototype.initNonuniformCatmullRom = function( x0, x1, x2, x3, dt0, dt1, dt2 ) { // compute tangents when parameterized in [t1,t2] var t1 = ( x1 - x0 ) / dt0 - ( x2 - x0 ) / ( dt0 + dt1 ) + ( x2 - x1 ) / dt1; var t2 = ( x2 - x1 ) / dt1 - ( x3 - x1 ) / ( dt1 + dt2 ) + ( x3 - x2 ) / dt2; // rescale tangents for parametrization in [0,1] t1 *= dt1; t2 *= dt1; // initCubicPoly this.init( x1, x2, t1, t2 ); }; // standard Catmull-Rom spline: interpolate between x1 and x2 with previous/following points x1/x4 CubicPoly.prototype.initCatmullRom = function( x0, x1, x2, x3, tension ) { this.init( x1, x2, tension * ( x2 - x0 ), tension * ( x3 - x1 ) ); }; CubicPoly.prototype.calc = function( t ) { var t2 = t * t; var t3 = t2 * t; return this.c0 + this.c1 * t + this.c2 * t2 + this.c3 * t3; }; // Subclass Three.js curve return THREE.Curve.create( function ( p /* array of Vector3 */ ) { this.points = p || []; this.closed = false; }, function ( t ) { var points = this.points, point, intPoint, weight, l; l = points.length; if ( l < 2 ) console.log( 'duh, you need at least 2 points' ); point = ( l - ( this.closed ? 0 : 1 ) ) * t; intPoint = Math.floor( point ); weight = point - intPoint; if ( this.closed ) { intPoint += intPoint > 0 ? 0 : ( Math.floor( Math.abs( intPoint ) / points.length ) + 1 ) * points.length; } else if ( weight === 0 && intPoint === l - 1 ) { intPoint = l - 2; weight = 1; } var p0, p1, p2, p3; // 4 points if ( this.closed || intPoint > 0 ) { p0 = points[ ( intPoint - 1 ) % l ]; } else { // extrapolate first point tmp.subVectors( points[ 0 ], points[ 1 ] ).add( points[ 0 ] ); p0 = tmp; } p1 = points[ intPoint % l ]; p2 = points[ ( intPoint + 1 ) % l ]; if ( this.closed || intPoint + 2 < l ) { p3 = points[ ( intPoint + 2 ) % l ]; } else { // extrapolate last point tmp.subVectors( points[ l - 1 ], points[ l - 2 ] ).add( points[ l - 1 ] ); p3 = tmp; } if ( this.type === undefined || this.type === 'centripetal' || this.type === 'chordal' ) { // init Centripetal / Chordal Catmull-Rom var pow = this.type === 'chordal' ? 0.5 : 0.25; var dt0 = Math.pow( p0.distanceToSquared( p1 ), pow ); var dt1 = Math.pow( p1.distanceToSquared( p2 ), pow ); var dt2 = Math.pow( p2.distanceToSquared( p3 ), pow ); // safety check for repeated points if ( dt1 < 1e-4 ) dt1 = 1.0; if ( dt0 < 1e-4 ) dt0 = dt1; if ( dt2 < 1e-4 ) dt2 = dt1; px.initNonuniformCatmullRom( p0.x, p1.x, p2.x, p3.x, dt0, dt1, dt2 ); py.initNonuniformCatmullRom( p0.y, p1.y, p2.y, p3.y, dt0, dt1, dt2 ); pz.initNonuniformCatmullRom( p0.z, p1.z, p2.z, p3.z, dt0, dt1, dt2 ); } else if ( this.type === 'catmullrom' ) { var tension = this.tension !== undefined ? this.tension : 0.5; px.initCatmullRom( p0.x, p1.x, p2.x, p3.x, tension ); py.initCatmullRom( p0.y, p1.y, p2.y, p3.y, tension ); pz.initCatmullRom( p0.z, p1.z, p2.z, p3.z, tension ); } var v = new THREE.Vector3( px.calc( weight ), py.calc( weight ), pz.calc( weight ) ); return v; } ); } )(); // File:src/extras/curves/ClosedSplineCurve3.js /************************************************************** * Closed Spline 3D curve **************************************************************/ THREE.ClosedSplineCurve3 = function ( points ) { console.warn( 'THREE.ClosedSplineCurve3 has been deprecated. Please use THREE.CatmullRomCurve3.' ); THREE.CatmullRomCurve3.call( this, points ); this.type = 'catmullrom'; this.closed = true; }; THREE.ClosedSplineCurve3.prototype = Object.create( THREE.CatmullRomCurve3.prototype ); // File:src/extras/geometries/BoxGeometry.js /** * @author mrdoob / http://mrdoob.com/ * based on http://papervision3d.googlecode.com/svn/trunk/as3/trunk/src/org/papervision3d/objects/primitives/Cube.as */ THREE.BoxGeometry = function ( width, height, depth, widthSegments, heightSegments, depthSegments ) { THREE.Geometry.call( this ); this.type = 'BoxGeometry'; this.parameters = { width: width, height: height, depth: depth, widthSegments: widthSegments, heightSegments: heightSegments, depthSegments: depthSegments }; this.fromBufferGeometry( new THREE.BoxBufferGeometry( width, height, depth, widthSegments, heightSegments, depthSegments ) ); this.mergeVertices(); }; THREE.BoxGeometry.prototype = Object.create( THREE.Geometry.prototype ); THREE.BoxGeometry.prototype.constructor = THREE.BoxGeometry; THREE.CubeGeometry = THREE.BoxGeometry; // File:src/extras/geometries/BoxBufferGeometry.js /** * @author Mugen87 / https://github.com/Mugen87 */ THREE.BoxBufferGeometry = function ( width, height, depth, widthSegments, heightSegments, depthSegments ) { THREE.BufferGeometry.call( this ); this.type = 'BoxBufferGeometry'; this.parameters = { width: width, height: height, depth: depth, widthSegments: widthSegments, heightSegments: heightSegments, depthSegments: depthSegments }; var scope = this; // segments widthSegments = Math.floor( widthSegments ) || 1; heightSegments = Math.floor( heightSegments ) || 1; depthSegments = Math.floor( depthSegments ) || 1; // these are used to calculate buffer length var vertexCount = calculateVertexCount( widthSegments, heightSegments, depthSegments ); var indexCount = calculateIndexCount( widthSegments, heightSegments, depthSegments ); // buffers var indices = new ( indexCount > 65535 ? Uint32Array : Uint16Array )( indexCount ); var vertices = new Float32Array( vertexCount * 3 ); var normals = new Float32Array( vertexCount * 3 ); var uvs = new Float32Array( vertexCount * 2 ); // offset variables var vertexBufferOffset = 0; var uvBufferOffset = 0; var indexBufferOffset = 0; var numberOfVertices = 0; // group variables var groupStart = 0; // build each side of the box geometry buildPlane( 'z', 'y', 'x', - 1, - 1, depth, height, width, depthSegments, heightSegments, 0 ); // px buildPlane( 'z', 'y', 'x', 1, - 1, depth, height, - width, depthSegments, heightSegments, 1 ); // nx buildPlane( 'x', 'z', 'y', 1, 1, width, depth, height, widthSegments, depthSegments, 2 ); // py buildPlane( 'x', 'z', 'y', 1, - 1, width, depth, - height, widthSegments, depthSegments, 3 ); // ny buildPlane( 'x', 'y', 'z', 1, - 1, width, height, depth, widthSegments, heightSegments, 4 ); // pz buildPlane( 'x', 'y', 'z', - 1, - 1, width, height, - depth, widthSegments, heightSegments, 5 ); // nz // build geometry this.setIndex( new THREE.BufferAttribute( indices, 1 ) ); this.addAttribute( 'position', new THREE.BufferAttribute( vertices, 3 ) ); this.addAttribute( 'normal', new THREE.BufferAttribute( normals, 3 ) ); this.addAttribute( 'uv', new THREE.BufferAttribute( uvs, 2 ) ); // helper functions function calculateVertexCount ( w, h, d ) { var vertices = 0; // calculate the amount of vertices for each side (plane) vertices += (w + 1) * (h + 1) * 2; // xy vertices += (w + 1) * (d + 1) * 2; // xz vertices += (d + 1) * (h + 1) * 2; // zy return vertices; } function calculateIndexCount ( w, h, d ) { var index = 0; // calculate the amount of squares for each side index += w * h * 2; // xy index += w * d * 2; // xz index += d * h * 2; // zy return index * 6; // two triangles per square => six vertices per square } function buildPlane ( u, v, w, udir, vdir, width, height, depth, gridX, gridY, materialIndex ) { var segmentWidth = width / gridX; var segmentHeight = height / gridY; var widthHalf = width / 2; var heightHalf = height / 2; var depthHalf = depth / 2; var gridX1 = gridX + 1; var gridY1 = gridY + 1; var vertexCounter = 0; var groupCount = 0; var vector = new THREE.Vector3(); // generate vertices, normals and uvs for ( var iy = 0; iy < gridY1; iy ++ ) { var y = iy * segmentHeight - heightHalf; for ( var ix = 0; ix < gridX1; ix ++ ) { var x = ix * segmentWidth - widthHalf; // set values to correct vector component vector[ u ] = x * udir; vector[ v ] = y * vdir; vector[ w ] = depthHalf; // now apply vector to vertex buffer vertices[ vertexBufferOffset ] = vector.x; vertices[ vertexBufferOffset + 1 ] = vector.y; vertices[ vertexBufferOffset + 2 ] = vector.z; // set values to correct vector component vector[ u ] = 0; vector[ v ] = 0; vector[ w ] = depth > 0 ? 1 : - 1; // now apply vector to normal buffer normals[ vertexBufferOffset ] = vector.x; normals[ vertexBufferOffset + 1 ] = vector.y; normals[ vertexBufferOffset + 2 ] = vector.z; // uvs uvs[ uvBufferOffset ] = ix / gridX; uvs[ uvBufferOffset + 1 ] = 1 - ( iy / gridY ); // update offsets and counters vertexBufferOffset += 3; uvBufferOffset += 2; vertexCounter += 1; } } // 1. you need three indices to draw a single face // 2. a single segment consists of two faces // 3. so we need to generate six (2*3) indices per segment for ( iy = 0; iy < gridY; iy ++ ) { for ( ix = 0; ix < gridX; ix ++ ) { // indices var a = numberOfVertices + ix + gridX1 * iy; var b = numberOfVertices + ix + gridX1 * ( iy + 1 ); var c = numberOfVertices + ( ix + 1 ) + gridX1 * ( iy + 1 ); var d = numberOfVertices + ( ix + 1 ) + gridX1 * iy; // face one indices[ indexBufferOffset ] = a; indices[ indexBufferOffset + 1 ] = b; indices[ indexBufferOffset + 2 ] = d; // face two indices[ indexBufferOffset + 3 ] = b; indices[ indexBufferOffset + 4 ] = c; indices[ indexBufferOffset + 5 ] = d; // update offsets and counters indexBufferOffset += 6; groupCount += 6; } } // add a group to the geometry. this will ensure multi material support scope.addGroup( groupStart, groupCount, materialIndex ); // calculate new start value for groups groupStart += groupCount; // update total number of vertices numberOfVertices += vertexCounter; } }; THREE.BoxBufferGeometry.prototype = Object.create( THREE.BufferGeometry.prototype ); THREE.BoxBufferGeometry.prototype.constructor = THREE.BoxBufferGeometry; // File:src/extras/geometries/CircleGeometry.js /** * @author hughes */ THREE.CircleGeometry = function ( radius, segments, thetaStart, thetaLength ) { THREE.Geometry.call( this ); this.type = 'CircleGeometry'; this.parameters = { radius: radius, segments: segments, thetaStart: thetaStart, thetaLength: thetaLength }; this.fromBufferGeometry( new THREE.CircleBufferGeometry( radius, segments, thetaStart, thetaLength ) ); }; THREE.CircleGeometry.prototype = Object.create( THREE.Geometry.prototype ); THREE.CircleGeometry.prototype.constructor = THREE.CircleGeometry; // File:src/extras/geometries/CircleBufferGeometry.js /** * @author benaadams / https://twitter.com/ben_a_adams */ THREE.CircleBufferGeometry = function ( radius, segments, thetaStart, thetaLength ) { THREE.BufferGeometry.call( this ); this.type = 'CircleBufferGeometry'; this.parameters = { radius: radius, segments: segments, thetaStart: thetaStart, thetaLength: thetaLength }; radius = radius || 50; segments = segments !== undefined ? Math.max( 3, segments ) : 8; thetaStart = thetaStart !== undefined ? thetaStart : 0; thetaLength = thetaLength !== undefined ? thetaLength : Math.PI * 2; var vertices = segments + 2; var positions = new Float32Array( vertices * 3 ); var normals = new Float32Array( vertices * 3 ); var uvs = new Float32Array( vertices * 2 ); // center data is already zero, but need to set a few extras normals[ 2 ] = 1.0; uvs[ 0 ] = 0.5; uvs[ 1 ] = 0.5; for ( var s = 0, i = 3, ii = 2 ; s <= segments; s ++, i += 3, ii += 2 ) { var segment = thetaStart + s / segments * thetaLength; positions[ i ] = radius * Math.cos( segment ); positions[ i + 1 ] = radius * Math.sin( segment ); normals[ i + 2 ] = 1; // normal z uvs[ ii ] = ( positions[ i ] / radius + 1 ) / 2; uvs[ ii + 1 ] = ( positions[ i + 1 ] / radius + 1 ) / 2; } var indices = []; for ( var i = 1; i <= segments; i ++ ) { indices.push( i, i + 1, 0 ); } this.setIndex( new THREE.BufferAttribute( new Uint16Array( indices ), 1 ) ); this.addAttribute( 'position', new THREE.BufferAttribute( positions, 3 ) ); this.addAttribute( 'normal', new THREE.BufferAttribute( normals, 3 ) ); this.addAttribute( 'uv', new THREE.BufferAttribute( uvs, 2 ) ); this.boundingSphere = new THREE.Sphere( new THREE.Vector3(), radius ); }; THREE.CircleBufferGeometry.prototype = Object.create( THREE.BufferGeometry.prototype ); THREE.CircleBufferGeometry.prototype.constructor = THREE.CircleBufferGeometry; // File:src/extras/geometries/CylinderBufferGeometry.js /** * @author Mugen87 / https://github.com/Mugen87 */ THREE.CylinderBufferGeometry = function( radiusTop, radiusBottom, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ) { THREE.BufferGeometry.call( this ); this.type = 'CylinderBufferGeometry'; this.parameters = { radiusTop: radiusTop, radiusBottom: radiusBottom, height: height, radialSegments: radialSegments, heightSegments: heightSegments, openEnded: openEnded, thetaStart: thetaStart, thetaLength: thetaLength }; var scope = this; radiusTop = radiusTop !== undefined ? radiusTop : 20; radiusBottom = radiusBottom !== undefined ? radiusBottom : 20; height = height !== undefined ? height : 100; radialSegments = Math.floor( radialSegments ) || 8; heightSegments = Math.floor( heightSegments ) || 1; openEnded = openEnded !== undefined ? openEnded : false; thetaStart = thetaStart !== undefined ? thetaStart : 0.0; thetaLength = thetaLength !== undefined ? thetaLength : 2.0 * Math.PI; // used to calculate buffer length var nbCap = 0; if ( openEnded === false ) { if ( radiusTop > 0 ) nbCap ++; if ( radiusBottom > 0 ) nbCap ++; } var vertexCount = calculateVertexCount(); var indexCount = calculateIndexCount(); // buffers var indices = new THREE.BufferAttribute( new ( indexCount > 65535 ? Uint32Array : Uint16Array )( indexCount ), 1 ); var vertices = new THREE.BufferAttribute( new Float32Array( vertexCount * 3 ), 3 ); var normals = new THREE.BufferAttribute( new Float32Array( vertexCount * 3 ), 3 ); var uvs = new THREE.BufferAttribute( new Float32Array( vertexCount * 2 ), 2 ); // helper variables var index = 0, indexOffset = 0, indexArray = [], halfHeight = height / 2; // group variables var groupStart = 0; // generate geometry generateTorso(); if ( openEnded === false ) { if ( radiusTop > 0 ) generateCap( true ); if ( radiusBottom > 0 ) generateCap( false ); } // build geometry this.setIndex( indices ); this.addAttribute( 'position', vertices ); this.addAttribute( 'normal', normals ); this.addAttribute( 'uv', uvs ); // helper functions function calculateVertexCount() { var count = ( radialSegments + 1 ) * ( heightSegments + 1 ); if ( openEnded === false ) { count += ( ( radialSegments + 1 ) * nbCap ) + ( radialSegments * nbCap ); } return count; } function calculateIndexCount() { var count = radialSegments * heightSegments * 2 * 3; if ( openEnded === false ) { count += radialSegments * nbCap * 3; } return count; } function generateTorso() { var x, y; var normal = new THREE.Vector3(); var vertex = new THREE.Vector3(); var groupCount = 0; // this will be used to calculate the normal var tanTheta = ( radiusBottom - radiusTop ) / height; // generate vertices, normals and uvs for ( y = 0; y <= heightSegments; y ++ ) { var indexRow = []; var v = y / heightSegments; // calculate the radius of the current row var radius = v * ( radiusBottom - radiusTop ) + radiusTop; for ( x = 0; x <= radialSegments; x ++ ) { var u = x / radialSegments; // vertex vertex.x = radius * Math.sin( u * thetaLength + thetaStart ); vertex.y = - v * height + halfHeight; vertex.z = radius * Math.cos( u * thetaLength + thetaStart ); vertices.setXYZ( index, vertex.x, vertex.y, vertex.z ); // normal normal.copy( vertex ); // handle special case if radiusTop/radiusBottom is zero if ( ( radiusTop === 0 && y === 0 ) || ( radiusBottom === 0 && y === heightSegments ) ) { normal.x = Math.sin( u * thetaLength + thetaStart ); normal.z = Math.cos( u * thetaLength + thetaStart ); } normal.setY( Math.sqrt( normal.x * normal.x + normal.z * normal.z ) * tanTheta ).normalize(); normals.setXYZ( index, normal.x, normal.y, normal.z ); // uv uvs.setXY( index, u, 1 - v ); // save index of vertex in respective row indexRow.push( index ); // increase index index ++; } // now save vertices of the row in our index array indexArray.push( indexRow ); } // generate indices for ( x = 0; x < radialSegments; x ++ ) { for ( y = 0; y < heightSegments; y ++ ) { // we use the index array to access the correct indices var i1 = indexArray[ y ][ x ]; var i2 = indexArray[ y + 1 ][ x ]; var i3 = indexArray[ y + 1 ][ x + 1 ]; var i4 = indexArray[ y ][ x + 1 ]; // face one indices.setX( indexOffset, i1 ); indexOffset ++; indices.setX( indexOffset, i2 ); indexOffset ++; indices.setX( indexOffset, i4 ); indexOffset ++; // face two indices.setX( indexOffset, i2 ); indexOffset ++; indices.setX( indexOffset, i3 ); indexOffset ++; indices.setX( indexOffset, i4 ); indexOffset ++; // update counters groupCount += 6; } } // add a group to the geometry. this will ensure multi material support scope.addGroup( groupStart, groupCount, 0 ); // calculate new start value for groups groupStart += groupCount; } function generateCap( top ) { var x, centerIndexStart, centerIndexEnd; var uv = new THREE.Vector2(); var vertex = new THREE.Vector3(); var groupCount = 0; var radius = ( top === true ) ? radiusTop : radiusBottom; var sign = ( top === true ) ? 1 : - 1; // save the index of the first center vertex centerIndexStart = index; // first we generate the center vertex data of the cap. // because the geometry needs one set of uvs per face, // we must generate a center vertex per face/segment for ( x = 1; x <= radialSegments; x ++ ) { // vertex vertices.setXYZ( index, 0, halfHeight * sign, 0 ); // normal normals.setXYZ( index, 0, sign, 0 ); // uv uv.x = 0.5; uv.y = 0.5; uvs.setXY( index, uv.x, uv.y ); // increase index index ++; } // save the index of the last center vertex centerIndexEnd = index; // now we generate the surrounding vertices, normals and uvs for ( x = 0; x <= radialSegments; x ++ ) { var u = x / radialSegments; var theta = u * thetaLength + thetaStart; var cosTheta = Math.cos( theta ); var sinTheta = Math.sin( theta ); // vertex vertex.x = radius * sinTheta; vertex.y = halfHeight * sign; vertex.z = radius * cosTheta; vertices.setXYZ( index, vertex.x, vertex.y, vertex.z ); // normal normals.setXYZ( index, 0, sign, 0 ); // uv uv.x = ( cosTheta * 0.5 ) + 0.5; uv.y = ( sinTheta * 0.5 * sign ) + 0.5; uvs.setXY( index, uv.x, uv.y ); // increase index index ++; } // generate indices for ( x = 0; x < radialSegments; x ++ ) { var c = centerIndexStart + x; var i = centerIndexEnd + x; if ( top === true ) { // face top indices.setX( indexOffset, i ); indexOffset ++; indices.setX( indexOffset, i + 1 ); indexOffset ++; indices.setX( indexOffset, c ); indexOffset ++; } else { // face bottom indices.setX( indexOffset, i + 1 ); indexOffset ++; indices.setX( indexOffset, i ); indexOffset ++; indices.setX( indexOffset, c ); indexOffset ++; } // update counters groupCount += 3; } // add a group to the geometry. this will ensure multi material support scope.addGroup( groupStart, groupCount, top === true ? 1 : 2 ); // calculate new start value for groups groupStart += groupCount; } }; THREE.CylinderBufferGeometry.prototype = Object.create( THREE.BufferGeometry.prototype ); THREE.CylinderBufferGeometry.prototype.constructor = THREE.CylinderBufferGeometry; // File:src/extras/geometries/CylinderGeometry.js /** * @author mrdoob / http://mrdoob.com/ */ THREE.CylinderGeometry = function ( radiusTop, radiusBottom, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ) { THREE.Geometry.call( this ); this.type = 'CylinderGeometry'; this.parameters = { radiusTop: radiusTop, radiusBottom: radiusBottom, height: height, radialSegments: radialSegments, heightSegments: heightSegments, openEnded: openEnded, thetaStart: thetaStart, thetaLength: thetaLength }; this.fromBufferGeometry( new THREE.CylinderBufferGeometry( radiusTop, radiusBottom, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ) ); this.mergeVertices(); }; THREE.CylinderGeometry.prototype = Object.create( THREE.Geometry.prototype ); THREE.CylinderGeometry.prototype.constructor = THREE.CylinderGeometry; // File:src/extras/geometries/ConeBufferGeometry.js /* * @author: abelnation / http://github.com/abelnation */ THREE.ConeBufferGeometry = function ( radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ) { THREE.CylinderBufferGeometry.call( this, 0, radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ); this.type = 'ConeBufferGeometry'; this.parameters = { radius: radius, height: height, radialSegments: radialSegments, heightSegments: heightSegments, thetaStart: thetaStart, thetaLength: thetaLength }; }; THREE.ConeBufferGeometry.prototype = Object.create( THREE.BufferGeometry.prototype ); THREE.ConeBufferGeometry.prototype.constructor = THREE.ConeBufferGeometry; // File:src/extras/geometries/ConeGeometry.js /** * @author abelnation / http://github.com/abelnation */ THREE.ConeGeometry = function ( radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ) { THREE.CylinderGeometry.call( this, 0, radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ); this.type = 'ConeGeometry'; this.parameters = { radius: radius, height: height, radialSegments: radialSegments, heightSegments: heightSegments, openEnded: openEnded, thetaStart: thetaStart, thetaLength: thetaLength }; }; THREE.ConeGeometry.prototype = Object.create( THREE.CylinderGeometry.prototype ); THREE.ConeGeometry.prototype.constructor = THREE.ConeGeometry; // File:src/extras/geometries/EdgesGeometry.js /** * @author WestLangley / http://github.com/WestLangley */ THREE.EdgesGeometry = function ( geometry, thresholdAngle ) { THREE.BufferGeometry.call( this ); thresholdAngle = ( thresholdAngle !== undefined ) ? thresholdAngle : 1; var thresholdDot = Math.cos( THREE.Math.DEG2RAD * thresholdAngle ); var edge = [ 0, 0 ], hash = {}; function sortFunction( a, b ) { return a - b; } var keys = [ 'a', 'b', 'c' ]; var geometry2; if ( geometry instanceof THREE.BufferGeometry ) { geometry2 = new THREE.Geometry(); geometry2.fromBufferGeometry( geometry ); } else { geometry2 = geometry.clone(); } geometry2.mergeVertices(); geometry2.computeFaceNormals(); var vertices = geometry2.vertices; var faces = geometry2.faces; for ( var i = 0, l = faces.length; i < l; i ++ ) { var face = faces[ i ]; for ( var j = 0; j < 3; j ++ ) { edge[ 0 ] = face[ keys[ j ] ]; edge[ 1 ] = face[ keys[ ( j + 1 ) % 3 ] ]; edge.sort( sortFunction ); var key = edge.toString(); if ( hash[ key ] === undefined ) { hash[ key ] = { vert1: edge[ 0 ], vert2: edge[ 1 ], face1: i, face2: undefined }; } else { hash[ key ].face2 = i; } } } var coords = []; for ( var key in hash ) { var h = hash[ key ]; if ( h.face2 === undefined || faces[ h.face1 ].normal.dot( faces[ h.face2 ].normal ) <= thresholdDot ) { var vertex = vertices[ h.vert1 ]; coords.push( vertex.x ); coords.push( vertex.y ); coords.push( vertex.z ); vertex = vertices[ h.vert2 ]; coords.push( vertex.x ); coords.push( vertex.y ); coords.push( vertex.z ); } } this.addAttribute( 'position', new THREE.BufferAttribute( new Float32Array( coords ), 3 ) ); }; THREE.EdgesGeometry.prototype = Object.create( THREE.BufferGeometry.prototype ); THREE.EdgesGeometry.prototype.constructor = THREE.EdgesGeometry; // File:src/extras/geometries/ExtrudeGeometry.js /** * @author zz85 / http://www.lab4games.net/zz85/blog * * Creates extruded geometry from a path shape. * * parameters = { * * curveSegments: , // number of points on the curves * steps: , // number of points for z-side extrusions / used for subdividing segments of extrude spline too * amount: , // Depth to extrude the shape * * bevelEnabled: , // turn on bevel * bevelThickness: , // how deep into the original shape bevel goes * bevelSize: , // how far from shape outline is bevel * bevelSegments: , // number of bevel layers * * extrudePath: // 3d spline path to extrude shape along. (creates Frames if .frames aren't defined) * frames: // containing arrays of tangents, normals, binormals * * uvGenerator: // object that provides UV generator functions * * } **/ THREE.ExtrudeGeometry = function ( shapes, options ) { if ( typeof( shapes ) === "undefined" ) { shapes = []; return; } THREE.Geometry.call( this ); this.type = 'ExtrudeGeometry'; shapes = Array.isArray( shapes ) ? shapes : [ shapes ]; this.addShapeList( shapes, options ); this.computeFaceNormals(); // can't really use automatic vertex normals // as then front and back sides get smoothed too // should do separate smoothing just for sides //this.computeVertexNormals(); //console.log( "took", ( Date.now() - startTime ) ); }; THREE.ExtrudeGeometry.prototype = Object.create( THREE.Geometry.prototype ); THREE.ExtrudeGeometry.prototype.constructor = THREE.ExtrudeGeometry; THREE.ExtrudeGeometry.prototype.addShapeList = function ( shapes, options ) { var sl = shapes.length; for ( var s = 0; s < sl; s ++ ) { var shape = shapes[ s ]; this.addShape( shape, options ); } }; THREE.ExtrudeGeometry.prototype.addShape = function ( shape, options ) { var amount = options.amount !== undefined ? options.amount : 100; var bevelThickness = options.bevelThickness !== undefined ? options.bevelThickness : 6; // 10 var bevelSize = options.bevelSize !== undefined ? options.bevelSize : bevelThickness - 2; // 8 var bevelSegments = options.bevelSegments !== undefined ? options.bevelSegments : 3; var bevelEnabled = options.bevelEnabled !== undefined ? options.bevelEnabled : true; // false var curveSegments = options.curveSegments !== undefined ? options.curveSegments : 12; var steps = options.steps !== undefined ? options.steps : 1; var extrudePath = options.extrudePath; var extrudePts, extrudeByPath = false; // Use default WorldUVGenerator if no UV generators are specified. var uvgen = options.UVGenerator !== undefined ? options.UVGenerator : THREE.ExtrudeGeometry.WorldUVGenerator; var splineTube, binormal, normal, position2; if ( extrudePath ) { extrudePts = extrudePath.getSpacedPoints( steps ); extrudeByPath = true; bevelEnabled = false; // bevels not supported for path extrusion // SETUP TNB variables // Reuse TNB from TubeGeomtry for now. // TODO1 - have a .isClosed in spline? splineTube = options.frames !== undefined ? options.frames : new THREE.TubeGeometry.FrenetFrames( extrudePath, steps, false ); // console.log(splineTube, 'splineTube', splineTube.normals.length, 'steps', steps, 'extrudePts', extrudePts.length); binormal = new THREE.Vector3(); normal = new THREE.Vector3(); position2 = new THREE.Vector3(); } // Safeguards if bevels are not enabled if ( ! bevelEnabled ) { bevelSegments = 0; bevelThickness = 0; bevelSize = 0; } // Variables initialization var ahole, h, hl; // looping of holes var scope = this; var shapesOffset = this.vertices.length; var shapePoints = shape.extractPoints( curveSegments ); var vertices = shapePoints.shape; var holes = shapePoints.holes; var reverse = ! THREE.ShapeUtils.isClockWise( vertices ); if ( reverse ) { vertices = vertices.reverse(); // Maybe we should also check if holes are in the opposite direction, just to be safe ... for ( h = 0, hl = holes.length; h < hl; h ++ ) { ahole = holes[ h ]; if ( THREE.ShapeUtils.isClockWise( ahole ) ) { holes[ h ] = ahole.reverse(); } } reverse = false; // If vertices are in order now, we shouldn't need to worry about them again (hopefully)! } var faces = THREE.ShapeUtils.triangulateShape( vertices, holes ); /* Vertices */ var contour = vertices; // vertices has all points but contour has only points of circumference for ( h = 0, hl = holes.length; h < hl; h ++ ) { ahole = holes[ h ]; vertices = vertices.concat( ahole ); } function scalePt2 ( pt, vec, size ) { if ( ! vec ) console.error( "THREE.ExtrudeGeometry: vec does not exist" ); return vec.clone().multiplyScalar( size ).add( pt ); } var b, bs, t, z, vert, vlen = vertices.length, face, flen = faces.length; // Find directions for point movement function getBevelVec( inPt, inPrev, inNext ) { // computes for inPt the corresponding point inPt' on a new contour // shifted by 1 unit (length of normalized vector) to the left // if we walk along contour clockwise, this new contour is outside the old one // // inPt' is the intersection of the two lines parallel to the two // adjacent edges of inPt at a distance of 1 unit on the left side. var v_trans_x, v_trans_y, shrink_by = 1; // resulting translation vector for inPt // good reading for geometry algorithms (here: line-line intersection) // http://geomalgorithms.com/a05-_intersect-1.html var v_prev_x = inPt.x - inPrev.x, v_prev_y = inPt.y - inPrev.y; var v_next_x = inNext.x - inPt.x, v_next_y = inNext.y - inPt.y; var v_prev_lensq = ( v_prev_x * v_prev_x + v_prev_y * v_prev_y ); // check for collinear edges var collinear0 = ( v_prev_x * v_next_y - v_prev_y * v_next_x ); if ( Math.abs( collinear0 ) > Number.EPSILON ) { // not collinear // length of vectors for normalizing var v_prev_len = Math.sqrt( v_prev_lensq ); var v_next_len = Math.sqrt( v_next_x * v_next_x + v_next_y * v_next_y ); // shift adjacent points by unit vectors to the left var ptPrevShift_x = ( inPrev.x - v_prev_y / v_prev_len ); var ptPrevShift_y = ( inPrev.y + v_prev_x / v_prev_len ); var ptNextShift_x = ( inNext.x - v_next_y / v_next_len ); var ptNextShift_y = ( inNext.y + v_next_x / v_next_len ); // scaling factor for v_prev to intersection point var sf = ( ( ptNextShift_x - ptPrevShift_x ) * v_next_y - ( ptNextShift_y - ptPrevShift_y ) * v_next_x ) / ( v_prev_x * v_next_y - v_prev_y * v_next_x ); // vector from inPt to intersection point v_trans_x = ( ptPrevShift_x + v_prev_x * sf - inPt.x ); v_trans_y = ( ptPrevShift_y + v_prev_y * sf - inPt.y ); // Don't normalize!, otherwise sharp corners become ugly // but prevent crazy spikes var v_trans_lensq = ( v_trans_x * v_trans_x + v_trans_y * v_trans_y ); if ( v_trans_lensq <= 2 ) { return new THREE.Vector2( v_trans_x, v_trans_y ); } else { shrink_by = Math.sqrt( v_trans_lensq / 2 ); } } else { // handle special case of collinear edges var direction_eq = false; // assumes: opposite if ( v_prev_x > Number.EPSILON ) { if ( v_next_x > Number.EPSILON ) { direction_eq = true; } } else { if ( v_prev_x < - Number.EPSILON ) { if ( v_next_x < - Number.EPSILON ) { direction_eq = true; } } else { if ( Math.sign( v_prev_y ) === Math.sign( v_next_y ) ) { direction_eq = true; } } } if ( direction_eq ) { // console.log("Warning: lines are a straight sequence"); v_trans_x = - v_prev_y; v_trans_y = v_prev_x; shrink_by = Math.sqrt( v_prev_lensq ); } else { // console.log("Warning: lines are a straight spike"); v_trans_x = v_prev_x; v_trans_y = v_prev_y; shrink_by = Math.sqrt( v_prev_lensq / 2 ); } } return new THREE.Vector2( v_trans_x / shrink_by, v_trans_y / shrink_by ); } var contourMovements = []; for ( var i = 0, il = contour.length, j = il - 1, k = i + 1; i < il; i ++, j ++, k ++ ) { if ( j === il ) j = 0; if ( k === il ) k = 0; // (j)---(i)---(k) // console.log('i,j,k', i, j , k) contourMovements[ i ] = getBevelVec( contour[ i ], contour[ j ], contour[ k ] ); } var holesMovements = [], oneHoleMovements, verticesMovements = contourMovements.concat(); for ( h = 0, hl = holes.length; h < hl; h ++ ) { ahole = holes[ h ]; oneHoleMovements = []; for ( i = 0, il = ahole.length, j = il - 1, k = i + 1; i < il; i ++, j ++, k ++ ) { if ( j === il ) j = 0; if ( k === il ) k = 0; // (j)---(i)---(k) oneHoleMovements[ i ] = getBevelVec( ahole[ i ], ahole[ j ], ahole[ k ] ); } holesMovements.push( oneHoleMovements ); verticesMovements = verticesMovements.concat( oneHoleMovements ); } // Loop bevelSegments, 1 for the front, 1 for the back for ( b = 0; b < bevelSegments; b ++ ) { //for ( b = bevelSegments; b > 0; b -- ) { t = b / bevelSegments; z = bevelThickness * ( 1 - t ); //z = bevelThickness * t; bs = bevelSize * ( Math.sin ( t * Math.PI / 2 ) ); // curved //bs = bevelSize * t; // linear // contract shape for ( i = 0, il = contour.length; i < il; i ++ ) { vert = scalePt2( contour[ i ], contourMovements[ i ], bs ); v( vert.x, vert.y, - z ); } // expand holes for ( h = 0, hl = holes.length; h < hl; h ++ ) { ahole = holes[ h ]; oneHoleMovements = holesMovements[ h ]; for ( i = 0, il = ahole.length; i < il; i ++ ) { vert = scalePt2( ahole[ i ], oneHoleMovements[ i ], bs ); v( vert.x, vert.y, - z ); } } } bs = bevelSize; // Back facing vertices for ( i = 0; i < vlen; i ++ ) { vert = bevelEnabled ? scalePt2( vertices[ i ], verticesMovements[ i ], bs ) : vertices[ i ]; if ( ! extrudeByPath ) { v( vert.x, vert.y, 0 ); } else { // v( vert.x, vert.y + extrudePts[ 0 ].y, extrudePts[ 0 ].x ); normal.copy( splineTube.normals[ 0 ] ).multiplyScalar( vert.x ); binormal.copy( splineTube.binormals[ 0 ] ).multiplyScalar( vert.y ); position2.copy( extrudePts[ 0 ] ).add( normal ).add( binormal ); v( position2.x, position2.y, position2.z ); } } // Add stepped vertices... // Including front facing vertices var s; for ( s = 1; s <= steps; s ++ ) { for ( i = 0; i < vlen; i ++ ) { vert = bevelEnabled ? scalePt2( vertices[ i ], verticesMovements[ i ], bs ) : vertices[ i ]; if ( ! extrudeByPath ) { v( vert.x, vert.y, amount / steps * s ); } else { // v( vert.x, vert.y + extrudePts[ s - 1 ].y, extrudePts[ s - 1 ].x ); normal.copy( splineTube.normals[ s ] ).multiplyScalar( vert.x ); binormal.copy( splineTube.binormals[ s ] ).multiplyScalar( vert.y ); position2.copy( extrudePts[ s ] ).add( normal ).add( binormal ); v( position2.x, position2.y, position2.z ); } } } // Add bevel segments planes //for ( b = 1; b <= bevelSegments; b ++ ) { for ( b = bevelSegments - 1; b >= 0; b -- ) { t = b / bevelSegments; z = bevelThickness * ( 1 - t ); //bs = bevelSize * ( 1-Math.sin ( ( 1 - t ) * Math.PI/2 ) ); bs = bevelSize * Math.sin ( t * Math.PI / 2 ); // contract shape for ( i = 0, il = contour.length; i < il; i ++ ) { vert = scalePt2( contour[ i ], contourMovements[ i ], bs ); v( vert.x, vert.y, amount + z ); } // expand holes for ( h = 0, hl = holes.length; h < hl; h ++ ) { ahole = holes[ h ]; oneHoleMovements = holesMovements[ h ]; for ( i = 0, il = ahole.length; i < il; i ++ ) { vert = scalePt2( ahole[ i ], oneHoleMovements[ i ], bs ); if ( ! extrudeByPath ) { v( vert.x, vert.y, amount + z ); } else { v( vert.x, vert.y + extrudePts[ steps - 1 ].y, extrudePts[ steps - 1 ].x + z ); } } } } /* Faces */ // Top and bottom faces buildLidFaces(); // Sides faces buildSideFaces(); ///// Internal functions function buildLidFaces() { if ( bevelEnabled ) { var layer = 0; // steps + 1 var offset = vlen * layer; // Bottom faces for ( i = 0; i < flen; i ++ ) { face = faces[ i ]; f3( face[ 2 ] + offset, face[ 1 ] + offset, face[ 0 ] + offset ); } layer = steps + bevelSegments * 2; offset = vlen * layer; // Top faces for ( i = 0; i < flen; i ++ ) { face = faces[ i ]; f3( face[ 0 ] + offset, face[ 1 ] + offset, face[ 2 ] + offset ); } } else { // Bottom faces for ( i = 0; i < flen; i ++ ) { face = faces[ i ]; f3( face[ 2 ], face[ 1 ], face[ 0 ] ); } // Top faces for ( i = 0; i < flen; i ++ ) { face = faces[ i ]; f3( face[ 0 ] + vlen * steps, face[ 1 ] + vlen * steps, face[ 2 ] + vlen * steps ); } } } // Create faces for the z-sides of the shape function buildSideFaces() { var layeroffset = 0; sidewalls( contour, layeroffset ); layeroffset += contour.length; for ( h = 0, hl = holes.length; h < hl; h ++ ) { ahole = holes[ h ]; sidewalls( ahole, layeroffset ); //, true layeroffset += ahole.length; } } function sidewalls( contour, layeroffset ) { var j, k; i = contour.length; while ( -- i >= 0 ) { j = i; k = i - 1; if ( k < 0 ) k = contour.length - 1; //console.log('b', i,j, i-1, k,vertices.length); var s = 0, sl = steps + bevelSegments * 2; for ( s = 0; s < sl; s ++ ) { var slen1 = vlen * s; var slen2 = vlen * ( s + 1 ); var a = layeroffset + j + slen1, b = layeroffset + k + slen1, c = layeroffset + k + slen2, d = layeroffset + j + slen2; f4( a, b, c, d, contour, s, sl, j, k ); } } } function v( x, y, z ) { scope.vertices.push( new THREE.Vector3( x, y, z ) ); } function f3( a, b, c ) { a += shapesOffset; b += shapesOffset; c += shapesOffset; scope.faces.push( new THREE.Face3( a, b, c, null, null, 0 ) ); var uvs = uvgen.generateTopUV( scope, a, b, c ); scope.faceVertexUvs[ 0 ].push( uvs ); } function f4( a, b, c, d, wallContour, stepIndex, stepsLength, contourIndex1, contourIndex2 ) { a += shapesOffset; b += shapesOffset; c += shapesOffset; d += shapesOffset; scope.faces.push( new THREE.Face3( a, b, d, null, null, 1 ) ); scope.faces.push( new THREE.Face3( b, c, d, null, null, 1 ) ); var uvs = uvgen.generateSideWallUV( scope, a, b, c, d ); scope.faceVertexUvs[ 0 ].push( [ uvs[ 0 ], uvs[ 1 ], uvs[ 3 ] ] ); scope.faceVertexUvs[ 0 ].push( [ uvs[ 1 ], uvs[ 2 ], uvs[ 3 ] ] ); } }; THREE.ExtrudeGeometry.WorldUVGenerator = { generateTopUV: function ( geometry, indexA, indexB, indexC ) { var vertices = geometry.vertices; var a = vertices[ indexA ]; var b = vertices[ indexB ]; var c = vertices[ indexC ]; return [ new THREE.Vector2( a.x, a.y ), new THREE.Vector2( b.x, b.y ), new THREE.Vector2( c.x, c.y ) ]; }, generateSideWallUV: function ( geometry, indexA, indexB, indexC, indexD ) { var vertices = geometry.vertices; var a = vertices[ indexA ]; var b = vertices[ indexB ]; var c = vertices[ indexC ]; var d = vertices[ indexD ]; if ( Math.abs( a.y - b.y ) < 0.01 ) { return [ new THREE.Vector2( a.x, 1 - a.z ), new THREE.Vector2( b.x, 1 - b.z ), new THREE.Vector2( c.x, 1 - c.z ), new THREE.Vector2( d.x, 1 - d.z ) ]; } else { return [ new THREE.Vector2( a.y, 1 - a.z ), new THREE.Vector2( b.y, 1 - b.z ), new THREE.Vector2( c.y, 1 - c.z ), new THREE.Vector2( d.y, 1 - d.z ) ]; } } }; // File:src/extras/geometries/ShapeGeometry.js /** * @author jonobr1 / http://jonobr1.com * * Creates a one-sided polygonal geometry from a path shape. Similar to * ExtrudeGeometry. * * parameters = { * * curveSegments: , // number of points on the curves. NOT USED AT THE MOMENT. * * material: // material index for front and back faces * uvGenerator: // object that provides UV generator functions * * } **/ THREE.ShapeGeometry = function ( shapes, options ) { THREE.Geometry.call( this ); this.type = 'ShapeGeometry'; if ( Array.isArray( shapes ) === false ) shapes = [ shapes ]; this.addShapeList( shapes, options ); this.computeFaceNormals(); }; THREE.ShapeGeometry.prototype = Object.create( THREE.Geometry.prototype ); THREE.ShapeGeometry.prototype.constructor = THREE.ShapeGeometry; /** * Add an array of shapes to THREE.ShapeGeometry. */ THREE.ShapeGeometry.prototype.addShapeList = function ( shapes, options ) { for ( var i = 0, l = shapes.length; i < l; i ++ ) { this.addShape( shapes[ i ], options ); } return this; }; /** * Adds a shape to THREE.ShapeGeometry, based on THREE.ExtrudeGeometry. */ THREE.ShapeGeometry.prototype.addShape = function ( shape, options ) { if ( options === undefined ) options = {}; var curveSegments = options.curveSegments !== undefined ? options.curveSegments : 12; var material = options.material; var uvgen = options.UVGenerator === undefined ? THREE.ExtrudeGeometry.WorldUVGenerator : options.UVGenerator; // var i, l, hole; var shapesOffset = this.vertices.length; var shapePoints = shape.extractPoints( curveSegments ); var vertices = shapePoints.shape; var holes = shapePoints.holes; var reverse = ! THREE.ShapeUtils.isClockWise( vertices ); if ( reverse ) { vertices = vertices.reverse(); // Maybe we should also check if holes are in the opposite direction, just to be safe... for ( i = 0, l = holes.length; i < l; i ++ ) { hole = holes[ i ]; if ( THREE.ShapeUtils.isClockWise( hole ) ) { holes[ i ] = hole.reverse(); } } reverse = false; } var faces = THREE.ShapeUtils.triangulateShape( vertices, holes ); // Vertices for ( i = 0, l = holes.length; i < l; i ++ ) { hole = holes[ i ]; vertices = vertices.concat( hole ); } // var vert, vlen = vertices.length; var face, flen = faces.length; for ( i = 0; i < vlen; i ++ ) { vert = vertices[ i ]; this.vertices.push( new THREE.Vector3( vert.x, vert.y, 0 ) ); } for ( i = 0; i < flen; i ++ ) { face = faces[ i ]; var a = face[ 0 ] + shapesOffset; var b = face[ 1 ] + shapesOffset; var c = face[ 2 ] + shapesOffset; this.faces.push( new THREE.Face3( a, b, c, null, null, material ) ); this.faceVertexUvs[ 0 ].push( uvgen.generateTopUV( this, a, b, c ) ); } }; // File:src/extras/geometries/LatheBufferGeometry.js /** * @author Mugen87 / https://github.com/Mugen87 */ // points - to create a closed torus, one must use a set of points // like so: [ a, b, c, d, a ], see first is the same as last. // segments - the number of circumference segments to create // phiStart - the starting radian // phiLength - the radian (0 to 2PI) range of the lathed section // 2PI is a closed lathe, less than 2PI is a portion. THREE.LatheBufferGeometry = function ( points, segments, phiStart, phiLength ) { THREE.BufferGeometry.call( this ); this.type = 'LatheBufferGeometry'; this.parameters = { points: points, segments: segments, phiStart: phiStart, phiLength: phiLength }; segments = Math.floor( segments ) || 12; phiStart = phiStart || 0; phiLength = phiLength || Math.PI * 2; // clamp phiLength so it's in range of [ 0, 2PI ] phiLength = THREE.Math.clamp( phiLength, 0, Math.PI * 2 ); // these are used to calculate buffer length var vertexCount = ( segments + 1 ) * points.length; var indexCount = segments * points.length * 2 * 3; // buffers var indices = new THREE.BufferAttribute( new ( indexCount > 65535 ? Uint32Array : Uint16Array )( indexCount ) , 1 ); var vertices = new THREE.BufferAttribute( new Float32Array( vertexCount * 3 ), 3 ); var uvs = new THREE.BufferAttribute( new Float32Array( vertexCount * 2 ), 2 ); // helper variables var index = 0, indexOffset = 0, base; var inversePointLength = 1.0 / ( points.length - 1 ); var inverseSegments = 1.0 / segments; var vertex = new THREE.Vector3(); var uv = new THREE.Vector2(); var i, j; // generate vertices and uvs for ( i = 0; i <= segments; i ++ ) { var phi = phiStart + i * inverseSegments * phiLength; var sin = Math.sin( phi ); var cos = Math.cos( phi ); for ( j = 0; j <= ( points.length - 1 ); j ++ ) { // vertex vertex.x = points[ j ].x * sin; vertex.y = points[ j ].y; vertex.z = points[ j ].x * cos; vertices.setXYZ( index, vertex.x, vertex.y, vertex.z ); // uv uv.x = i / segments; uv.y = j / ( points.length - 1 ); uvs.setXY( index, uv.x, uv.y ); // increase index index ++; } } // generate indices for ( i = 0; i < segments; i ++ ) { for ( j = 0; j < ( points.length - 1 ); j ++ ) { base = j + i * points.length; // indices var a = base; var b = base + points.length; var c = base + points.length + 1; var d = base + 1; // face one indices.setX( indexOffset, a ); indexOffset++; indices.setX( indexOffset, b ); indexOffset++; indices.setX( indexOffset, d ); indexOffset++; // face two indices.setX( indexOffset, b ); indexOffset++; indices.setX( indexOffset, c ); indexOffset++; indices.setX( indexOffset, d ); indexOffset++; } } // build geometry this.setIndex( indices ); this.addAttribute( 'position', vertices ); this.addAttribute( 'uv', uvs ); // generate normals this.computeVertexNormals(); // if the geometry is closed, we need to average the normals along the seam. // because the corresponding vertices are identical (but still have different UVs). if( phiLength === Math.PI * 2 ) { var normals = this.attributes.normal.array; var n1 = new THREE.Vector3(); var n2 = new THREE.Vector3(); var n = new THREE.Vector3(); // this is the buffer offset for the last line of vertices base = segments * points.length * 3; for( i = 0, j = 0; i < points.length; i ++, j += 3 ) { // select the normal of the vertex in the first line n1.x = normals[ j + 0 ]; n1.y = normals[ j + 1 ]; n1.z = normals[ j + 2 ]; // select the normal of the vertex in the last line n2.x = normals[ base + j + 0 ]; n2.y = normals[ base + j + 1 ]; n2.z = normals[ base + j + 2 ]; // average normals n.addVectors( n1, n2 ).normalize(); // assign the new values to both normals normals[ j + 0 ] = normals[ base + j + 0 ] = n.x; normals[ j + 1 ] = normals[ base + j + 1 ] = n.y; normals[ j + 2 ] = normals[ base + j + 2 ] = n.z; } // next row } }; THREE.LatheBufferGeometry.prototype = Object.create( THREE.BufferGeometry.prototype ); THREE.LatheBufferGeometry.prototype.constructor = THREE.LatheBufferGeometry; // File:src/extras/geometries/LatheGeometry.js /** * @author astrodud / http://astrodud.isgreat.org/ * @author zz85 / https://github.com/zz85 * @author bhouston / http://clara.io */ // points - to create a closed torus, one must use a set of points // like so: [ a, b, c, d, a ], see first is the same as last. // segments - the number of circumference segments to create // phiStart - the starting radian // phiLength - the radian (0 to 2PI) range of the lathed section // 2PI is a closed lathe, less than 2PI is a portion. THREE.LatheGeometry = function ( points, segments, phiStart, phiLength ) { THREE.Geometry.call( this ); this.type = 'LatheGeometry'; this.parameters = { points: points, segments: segments, phiStart: phiStart, phiLength: phiLength }; this.fromBufferGeometry( new THREE.LatheBufferGeometry( points, segments, phiStart, phiLength ) ); this.mergeVertices(); }; THREE.LatheGeometry.prototype = Object.create( THREE.Geometry.prototype ); THREE.LatheGeometry.prototype.constructor = THREE.LatheGeometry; // File:src/extras/geometries/PlaneGeometry.js /** * @author mrdoob / http://mrdoob.com/ * based on http://papervision3d.googlecode.com/svn/trunk/as3/trunk/src/org/papervision3d/objects/primitives/Plane.as */ THREE.PlaneGeometry = function ( width, height, widthSegments, heightSegments ) { THREE.Geometry.call( this ); this.type = 'PlaneGeometry'; this.parameters = { width: width, height: height, widthSegments: widthSegments, heightSegments: heightSegments }; this.fromBufferGeometry( new THREE.PlaneBufferGeometry( width, height, widthSegments, heightSegments ) ); }; THREE.PlaneGeometry.prototype = Object.create( THREE.Geometry.prototype ); THREE.PlaneGeometry.prototype.constructor = THREE.PlaneGeometry; // File:src/extras/geometries/PlaneBufferGeometry.js /** * @author mrdoob / http://mrdoob.com/ * based on http://papervision3d.googlecode.com/svn/trunk/as3/trunk/src/org/papervision3d/objects/primitives/Plane.as */ THREE.PlaneBufferGeometry = function ( width, height, widthSegments, heightSegments ) { THREE.BufferGeometry.call( this ); this.type = 'PlaneBufferGeometry'; this.parameters = { width: width, height: height, widthSegments: widthSegments, heightSegments: heightSegments }; var width_half = width / 2; var height_half = height / 2; var gridX = Math.floor( widthSegments ) || 1; var gridY = Math.floor( heightSegments ) || 1; var gridX1 = gridX + 1; var gridY1 = gridY + 1; var segment_width = width / gridX; var segment_height = height / gridY; var vertices = new Float32Array( gridX1 * gridY1 * 3 ); var normals = new Float32Array( gridX1 * gridY1 * 3 ); var uvs = new Float32Array( gridX1 * gridY1 * 2 ); var offset = 0; var offset2 = 0; for ( var iy = 0; iy < gridY1; iy ++ ) { var y = iy * segment_height - height_half; for ( var ix = 0; ix < gridX1; ix ++ ) { var x = ix * segment_width - width_half; vertices[ offset ] = x; vertices[ offset + 1 ] = - y; normals[ offset + 2 ] = 1; uvs[ offset2 ] = ix / gridX; uvs[ offset2 + 1 ] = 1 - ( iy / gridY ); offset += 3; offset2 += 2; } } offset = 0; var indices = new ( ( vertices.length / 3 ) > 65535 ? Uint32Array : Uint16Array )( gridX * gridY * 6 ); for ( var iy = 0; iy < gridY; iy ++ ) { for ( var ix = 0; ix < gridX; ix ++ ) { var a = ix + gridX1 * iy; var b = ix + gridX1 * ( iy + 1 ); var c = ( ix + 1 ) + gridX1 * ( iy + 1 ); var d = ( ix + 1 ) + gridX1 * iy; indices[ offset ] = a; indices[ offset + 1 ] = b; indices[ offset + 2 ] = d; indices[ offset + 3 ] = b; indices[ offset + 4 ] = c; indices[ offset + 5 ] = d; offset += 6; } } this.setIndex( new THREE.BufferAttribute( indices, 1 ) ); this.addAttribute( 'position', new THREE.BufferAttribute( vertices, 3 ) ); this.addAttribute( 'normal', new THREE.BufferAttribute( normals, 3 ) ); this.addAttribute( 'uv', new THREE.BufferAttribute( uvs, 2 ) ); }; THREE.PlaneBufferGeometry.prototype = Object.create( THREE.BufferGeometry.prototype ); THREE.PlaneBufferGeometry.prototype.constructor = THREE.PlaneBufferGeometry; // File:src/extras/geometries/RingBufferGeometry.js /** * @author Mugen87 / https://github.com/Mugen87 */ THREE.RingBufferGeometry = function ( innerRadius, outerRadius, thetaSegments, phiSegments, thetaStart, thetaLength ) { THREE.BufferGeometry.call( this ); this.type = 'RingBufferGeometry'; this.parameters = { innerRadius: innerRadius, outerRadius: outerRadius, thetaSegments: thetaSegments, phiSegments: phiSegments, thetaStart: thetaStart, thetaLength: thetaLength }; innerRadius = innerRadius || 20; outerRadius = outerRadius || 50; thetaStart = thetaStart !== undefined ? thetaStart : 0; thetaLength = thetaLength !== undefined ? thetaLength : Math.PI * 2; thetaSegments = thetaSegments !== undefined ? Math.max( 3, thetaSegments ) : 8; phiSegments = phiSegments !== undefined ? Math.max( 1, phiSegments ) : 1; // these are used to calculate buffer length var vertexCount = ( thetaSegments + 1 ) * ( phiSegments + 1 ); var indexCount = thetaSegments * phiSegments * 2 * 3; // buffers var indices = new THREE.BufferAttribute( new ( indexCount > 65535 ? Uint32Array : Uint16Array )( indexCount ) , 1 ); var vertices = new THREE.BufferAttribute( new Float32Array( vertexCount * 3 ), 3 ); var normals = new THREE.BufferAttribute( new Float32Array( vertexCount * 3 ), 3 ); var uvs = new THREE.BufferAttribute( new Float32Array( vertexCount * 2 ), 2 ); // some helper variables var index = 0, indexOffset = 0, segment; var radius = innerRadius; var radiusStep = ( ( outerRadius - innerRadius ) / phiSegments ); var vertex = new THREE.Vector3(); var uv = new THREE.Vector2(); var j, i; // generate vertices, normals and uvs // values are generate from the inside of the ring to the outside for ( j = 0; j <= phiSegments; j ++ ) { for ( i = 0; i <= thetaSegments; i ++ ) { segment = thetaStart + i / thetaSegments * thetaLength; // vertex vertex.x = radius * Math.cos( segment ); vertex.y = radius * Math.sin( segment ); vertices.setXYZ( index, vertex.x, vertex.y, vertex.z ); // normal normals.setXYZ( index, 0, 0, 1 ); // uv uv.x = ( vertex.x / outerRadius + 1 ) / 2; uv.y = ( vertex.y / outerRadius + 1 ) / 2; uvs.setXY( index, uv.x, uv.y ); // increase index index++; } // increase the radius for next row of vertices radius += radiusStep; } // generate indices for ( j = 0; j < phiSegments; j ++ ) { var thetaSegmentLevel = j * ( thetaSegments + 1 ); for ( i = 0; i < thetaSegments; i ++ ) { segment = i + thetaSegmentLevel; // indices var a = segment; var b = segment + thetaSegments + 1; var c = segment + thetaSegments + 2; var d = segment + 1; // face one indices.setX( indexOffset, a ); indexOffset++; indices.setX( indexOffset, b ); indexOffset++; indices.setX( indexOffset, c ); indexOffset++; // face two indices.setX( indexOffset, a ); indexOffset++; indices.setX( indexOffset, c ); indexOffset++; indices.setX( indexOffset, d ); indexOffset++; } } // build geometry this.setIndex( indices ); this.addAttribute( 'position', vertices ); this.addAttribute( 'normal', normals ); this.addAttribute( 'uv', uvs ); }; THREE.RingBufferGeometry.prototype = Object.create( THREE.BufferGeometry.prototype ); THREE.RingBufferGeometry.prototype.constructor = THREE.RingBufferGeometry; // File:src/extras/geometries/RingGeometry.js /** * @author Kaleb Murphy */ THREE.RingGeometry = function ( innerRadius, outerRadius, thetaSegments, phiSegments, thetaStart, thetaLength ) { THREE.Geometry.call( this ); this.type = 'RingGeometry'; this.parameters = { innerRadius: innerRadius, outerRadius: outerRadius, thetaSegments: thetaSegments, phiSegments: phiSegments, thetaStart: thetaStart, thetaLength: thetaLength }; this.fromBufferGeometry( new THREE.RingBufferGeometry( innerRadius, outerRadius, thetaSegments, phiSegments, thetaStart, thetaLength ) ); }; THREE.RingGeometry.prototype = Object.create( THREE.Geometry.prototype ); THREE.RingGeometry.prototype.constructor = THREE.RingGeometry; // File:src/extras/geometries/SphereGeometry.js /** * @author mrdoob / http://mrdoob.com/ */ THREE.SphereGeometry = function ( radius, widthSegments, heightSegments, phiStart, phiLength, thetaStart, thetaLength ) { THREE.Geometry.call( this ); this.type = 'SphereGeometry'; this.parameters = { radius: radius, widthSegments: widthSegments, heightSegments: heightSegments, phiStart: phiStart, phiLength: phiLength, thetaStart: thetaStart, thetaLength: thetaLength }; this.fromBufferGeometry( new THREE.SphereBufferGeometry( radius, widthSegments, heightSegments, phiStart, phiLength, thetaStart, thetaLength ) ); }; THREE.SphereGeometry.prototype = Object.create( THREE.Geometry.prototype ); THREE.SphereGeometry.prototype.constructor = THREE.SphereGeometry; // File:src/extras/geometries/SphereBufferGeometry.js /** * @author benaadams / https://twitter.com/ben_a_adams * based on THREE.SphereGeometry */ THREE.SphereBufferGeometry = function ( radius, widthSegments, heightSegments, phiStart, phiLength, thetaStart, thetaLength ) { THREE.BufferGeometry.call( this ); this.type = 'SphereBufferGeometry'; this.parameters = { radius: radius, widthSegments: widthSegments, heightSegments: heightSegments, phiStart: phiStart, phiLength: phiLength, thetaStart: thetaStart, thetaLength: thetaLength }; radius = radius || 50; widthSegments = Math.max( 3, Math.floor( widthSegments ) || 8 ); heightSegments = Math.max( 2, Math.floor( heightSegments ) || 6 ); phiStart = phiStart !== undefined ? phiStart : 0; phiLength = phiLength !== undefined ? phiLength : Math.PI * 2; thetaStart = thetaStart !== undefined ? thetaStart : 0; thetaLength = thetaLength !== undefined ? thetaLength : Math.PI; var thetaEnd = thetaStart + thetaLength; var vertexCount = ( ( widthSegments + 1 ) * ( heightSegments + 1 ) ); var positions = new THREE.BufferAttribute( new Float32Array( vertexCount * 3 ), 3 ); var normals = new THREE.BufferAttribute( new Float32Array( vertexCount * 3 ), 3 ); var uvs = new THREE.BufferAttribute( new Float32Array( vertexCount * 2 ), 2 ); var index = 0, vertices = [], normal = new THREE.Vector3(); for ( var y = 0; y <= heightSegments; y ++ ) { var verticesRow = []; var v = y / heightSegments; for ( var x = 0; x <= widthSegments; x ++ ) { var u = x / widthSegments; var px = - radius * Math.cos( phiStart + u * phiLength ) * Math.sin( thetaStart + v * thetaLength ); var py = radius * Math.cos( thetaStart + v * thetaLength ); var pz = radius * Math.sin( phiStart + u * phiLength ) * Math.sin( thetaStart + v * thetaLength ); normal.set( px, py, pz ).normalize(); positions.setXYZ( index, px, py, pz ); normals.setXYZ( index, normal.x, normal.y, normal.z ); uvs.setXY( index, u, 1 - v ); verticesRow.push( index ); index ++; } vertices.push( verticesRow ); } var indices = []; for ( var y = 0; y < heightSegments; y ++ ) { for ( var x = 0; x < widthSegments; x ++ ) { var v1 = vertices[ y ][ x + 1 ]; var v2 = vertices[ y ][ x ]; var v3 = vertices[ y + 1 ][ x ]; var v4 = vertices[ y + 1 ][ x + 1 ]; if ( y !== 0 || thetaStart > 0 ) indices.push( v1, v2, v4 ); if ( y !== heightSegments - 1 || thetaEnd < Math.PI ) indices.push( v2, v3, v4 ); } } this.setIndex( new ( positions.count > 65535 ? THREE.Uint32Attribute : THREE.Uint16Attribute )( indices, 1 ) ); this.addAttribute( 'position', positions ); this.addAttribute( 'normal', normals ); this.addAttribute( 'uv', uvs ); this.boundingSphere = new THREE.Sphere( new THREE.Vector3(), radius ); }; THREE.SphereBufferGeometry.prototype = Object.create( THREE.BufferGeometry.prototype ); THREE.SphereBufferGeometry.prototype.constructor = THREE.SphereBufferGeometry; // File:src/extras/geometries/TextGeometry.js /** * @author zz85 / http://www.lab4games.net/zz85/blog * @author alteredq / http://alteredqualia.com/ * * Text = 3D Text * * parameters = { * font: , // font * * size: , // size of the text * height: , // thickness to extrude text * curveSegments: , // number of points on the curves * * bevelEnabled: , // turn on bevel * bevelThickness: , // how deep into text bevel goes * bevelSize: // how far from text outline is bevel * } */ THREE.TextGeometry = function ( text, parameters ) { parameters = parameters || {}; var font = parameters.font; if ( font instanceof THREE.Font === false ) { console.error( 'THREE.TextGeometry: font parameter is not an instance of THREE.Font.' ); return new THREE.Geometry(); } var shapes = font.generateShapes( text, parameters.size, parameters.curveSegments ); // translate parameters to ExtrudeGeometry API parameters.amount = parameters.height !== undefined ? parameters.height : 50; // defaults if ( parameters.bevelThickness === undefined ) parameters.bevelThickness = 10; if ( parameters.bevelSize === undefined ) parameters.bevelSize = 8; if ( parameters.bevelEnabled === undefined ) parameters.bevelEnabled = false; THREE.ExtrudeGeometry.call( this, shapes, parameters ); this.type = 'TextGeometry'; }; THREE.TextGeometry.prototype = Object.create( THREE.ExtrudeGeometry.prototype ); THREE.TextGeometry.prototype.constructor = THREE.TextGeometry; // File:src/extras/geometries/TorusBufferGeometry.js /** * @author Mugen87 / https://github.com/Mugen87 */ THREE.TorusBufferGeometry = function ( radius, tube, radialSegments, tubularSegments, arc ) { THREE.BufferGeometry.call( this ); this.type = 'TorusBufferGeometry'; this.parameters = { radius: radius, tube: tube, radialSegments: radialSegments, tubularSegments: tubularSegments, arc: arc }; radius = radius || 100; tube = tube || 40; radialSegments = Math.floor( radialSegments ) || 8; tubularSegments = Math.floor( tubularSegments ) || 6; arc = arc || Math.PI * 2; // used to calculate buffer length var vertexCount = ( ( radialSegments + 1 ) * ( tubularSegments + 1 ) ); var indexCount = radialSegments * tubularSegments * 2 * 3; // buffers var indices = new ( indexCount > 65535 ? Uint32Array : Uint16Array )( indexCount ); var vertices = new Float32Array( vertexCount * 3 ); var normals = new Float32Array( vertexCount * 3 ); var uvs = new Float32Array( vertexCount * 2 ); // offset variables var vertexBufferOffset = 0; var uvBufferOffset = 0; var indexBufferOffset = 0; // helper variables var center = new THREE.Vector3(); var vertex = new THREE.Vector3(); var normal = new THREE.Vector3(); var j, i; // generate vertices, normals and uvs for ( j = 0; j <= radialSegments; j ++ ) { for ( i = 0; i <= tubularSegments; i ++ ) { var u = i / tubularSegments * arc; var v = j / radialSegments * Math.PI * 2; // vertex vertex.x = ( radius + tube * Math.cos( v ) ) * Math.cos( u ); vertex.y = ( radius + tube * Math.cos( v ) ) * Math.sin( u ); vertex.z = tube * Math.sin( v ); vertices[ vertexBufferOffset ] = vertex.x; vertices[ vertexBufferOffset + 1 ] = vertex.y; vertices[ vertexBufferOffset + 2 ] = vertex.z; // this vector is used to calculate the normal center.x = radius * Math.cos( u ); center.y = radius * Math.sin( u ); // normal normal.subVectors( vertex, center ).normalize(); normals[ vertexBufferOffset ] = normal.x; normals[ vertexBufferOffset + 1 ] = normal.y; normals[ vertexBufferOffset + 2 ] = normal.z; // uv uvs[ uvBufferOffset ] = i / tubularSegments; uvs[ uvBufferOffset + 1 ] = j / radialSegments; // update offsets vertexBufferOffset += 3; uvBufferOffset += 2; } } // generate indices for ( j = 1; j <= radialSegments; j ++ ) { for ( i = 1; i <= tubularSegments; i ++ ) { // indices var a = ( tubularSegments + 1 ) * j + i - 1; var b = ( tubularSegments + 1 ) * ( j - 1 ) + i - 1; var c = ( tubularSegments + 1 ) * ( j - 1 ) + i; var d = ( tubularSegments + 1 ) * j + i; // face one indices[ indexBufferOffset ] = a; indices[ indexBufferOffset + 1 ] = b; indices[ indexBufferOffset + 2 ] = d; // face two indices[ indexBufferOffset + 3 ] = b; indices[ indexBufferOffset + 4 ] = c; indices[ indexBufferOffset + 5 ] = d; // update offset indexBufferOffset += 6; } } // build geometry this.setIndex( new THREE.BufferAttribute( indices, 1 ) ); this.addAttribute( 'position', new THREE.BufferAttribute( vertices, 3 ) ); this.addAttribute( 'normal', new THREE.BufferAttribute( normals, 3 ) ); this.addAttribute( 'uv', new THREE.BufferAttribute( uvs, 2 ) ); }; THREE.TorusBufferGeometry.prototype = Object.create( THREE.BufferGeometry.prototype ); THREE.TorusBufferGeometry.prototype.constructor = THREE.TorusBufferGeometry; // File:src/extras/geometries/TorusGeometry.js /** * @author oosmoxiecode * @author mrdoob / http://mrdoob.com/ * based on http://code.google.com/p/away3d/source/browse/trunk/fp10/Away3DLite/src/away3dlite/primitives/Torus.as?r=2888 */ THREE.TorusGeometry = function ( radius, tube, radialSegments, tubularSegments, arc ) { THREE.Geometry.call( this ); this.type = 'TorusGeometry'; this.parameters = { radius: radius, tube: tube, radialSegments: radialSegments, tubularSegments: tubularSegments, arc: arc }; this.fromBufferGeometry( new THREE.TorusBufferGeometry( radius, tube, radialSegments, tubularSegments, arc ) ); }; THREE.TorusGeometry.prototype = Object.create( THREE.Geometry.prototype ); THREE.TorusGeometry.prototype.constructor = THREE.TorusGeometry; // File:src/extras/geometries/TorusKnotBufferGeometry.js /** * @author Mugen87 / https://github.com/Mugen87 * * see: http://www.blackpawn.com/texts/pqtorus/ */ THREE.TorusKnotBufferGeometry = function ( radius, tube, tubularSegments, radialSegments, p, q ) { THREE.BufferGeometry.call( this ); this.type = 'TorusKnotBufferGeometry'; this.parameters = { radius: radius, tube: tube, tubularSegments: tubularSegments, radialSegments: radialSegments, p: p, q: q }; radius = radius || 100; tube = tube || 40; tubularSegments = Math.floor( tubularSegments ) || 64; radialSegments = Math.floor( radialSegments ) || 8; p = p || 2; q = q || 3; // used to calculate buffer length var vertexCount = ( ( radialSegments + 1 ) * ( tubularSegments + 1 ) ); var indexCount = radialSegments * tubularSegments * 2 * 3; // buffers var indices = new THREE.BufferAttribute( new ( indexCount > 65535 ? Uint32Array : Uint16Array )( indexCount ) , 1 ); var vertices = new THREE.BufferAttribute( new Float32Array( vertexCount * 3 ), 3 ); var normals = new THREE.BufferAttribute( new Float32Array( vertexCount * 3 ), 3 ); var uvs = new THREE.BufferAttribute( new Float32Array( vertexCount * 2 ), 2 ); // helper variables var i, j, index = 0, indexOffset = 0; var vertex = new THREE.Vector3(); var normal = new THREE.Vector3(); var uv = new THREE.Vector2(); var P1 = new THREE.Vector3(); var P2 = new THREE.Vector3(); var B = new THREE.Vector3(); var T = new THREE.Vector3(); var N = new THREE.Vector3(); // generate vertices, normals and uvs for ( i = 0; i <= tubularSegments; ++ i ) { // the radian "u" is used to calculate the position on the torus curve of the current tubular segement var u = i / tubularSegments * p * Math.PI * 2; // now we calculate two points. P1 is our current position on the curve, P2 is a little farther ahead. // these points are used to create a special "coordinate space", which is necessary to calculate the correct vertex positions calculatePositionOnCurve( u, p, q, radius, P1 ); calculatePositionOnCurve( u + 0.01, p, q, radius, P2 ); // calculate orthonormal basis T.subVectors( P2, P1 ); N.addVectors( P2, P1 ); B.crossVectors( T, N ); N.crossVectors( B, T ); // normalize B, N. T can be ignored, we don't use it B.normalize(); N.normalize(); for ( j = 0; j <= radialSegments; ++ j ) { // now calculate the vertices. they are nothing more than an extrusion of the torus curve. // because we extrude a shape in the xy-plane, there is no need to calculate a z-value. var v = j / radialSegments * Math.PI * 2; var cx = - tube * Math.cos( v ); var cy = tube * Math.sin( v ); // now calculate the final vertex position. // first we orient the extrusion with our basis vectos, then we add it to the current position on the curve vertex.x = P1.x + ( cx * N.x + cy * B.x ); vertex.y = P1.y + ( cx * N.y + cy * B.y ); vertex.z = P1.z + ( cx * N.z + cy * B.z ); // vertex vertices.setXYZ( index, vertex.x, vertex.y, vertex.z ); // normal (P1 is always the center/origin of the extrusion, thus we can use it to calculate the normal) normal.subVectors( vertex, P1 ).normalize(); normals.setXYZ( index, normal.x, normal.y, normal.z ); // uv uv.x = i / tubularSegments; uv.y = j / radialSegments; uvs.setXY( index, uv.x, uv.y ); // increase index index ++; } } // generate indices for ( j = 1; j <= tubularSegments; j ++ ) { for ( i = 1; i <= radialSegments; i ++ ) { // indices var a = ( radialSegments + 1 ) * ( j - 1 ) + ( i - 1 ); var b = ( radialSegments + 1 ) * j + ( i - 1 ); var c = ( radialSegments + 1 ) * j + i; var d = ( radialSegments + 1 ) * ( j - 1 ) + i; // face one indices.setX( indexOffset, a ); indexOffset++; indices.setX( indexOffset, b ); indexOffset++; indices.setX( indexOffset, d ); indexOffset++; // face two indices.setX( indexOffset, b ); indexOffset++; indices.setX( indexOffset, c ); indexOffset++; indices.setX( indexOffset, d ); indexOffset++; } } // build geometry this.setIndex( indices ); this.addAttribute( 'position', vertices ); this.addAttribute( 'normal', normals ); this.addAttribute( 'uv', uvs ); // this function calculates the current position on the torus curve function calculatePositionOnCurve( u, p, q, radius, position ) { var cu = Math.cos( u ); var su = Math.sin( u ); var quOverP = q / p * u; var cs = Math.cos( quOverP ); position.x = radius * ( 2 + cs ) * 0.5 * cu; position.y = radius * ( 2 + cs ) * su * 0.5; position.z = radius * Math.sin( quOverP ) * 0.5; } }; THREE.TorusKnotBufferGeometry.prototype = Object.create( THREE.BufferGeometry.prototype ); THREE.TorusKnotBufferGeometry.prototype.constructor = THREE.TorusKnotBufferGeometry; // File:src/extras/geometries/TorusKnotGeometry.js /** * @author oosmoxiecode */ THREE.TorusKnotGeometry = function ( radius, tube, tubularSegments, radialSegments, p, q, heightScale ) { THREE.Geometry.call( this ); this.type = 'TorusKnotGeometry'; this.parameters = { radius: radius, tube: tube, tubularSegments: tubularSegments, radialSegments: radialSegments, p: p, q: q }; if( heightScale !== undefined ) console.warn( 'THREE.TorusKnotGeometry: heightScale has been deprecated. Use .scale( x, y, z ) instead.' ); this.fromBufferGeometry( new THREE.TorusKnotBufferGeometry( radius, tube, tubularSegments, radialSegments, p, q ) ); this.mergeVertices(); }; THREE.TorusKnotGeometry.prototype = Object.create( THREE.Geometry.prototype ); THREE.TorusKnotGeometry.prototype.constructor = THREE.TorusKnotGeometry; // File:src/extras/geometries/TubeGeometry.js /** * @author WestLangley / https://github.com/WestLangley * @author zz85 / https://github.com/zz85 * @author miningold / https://github.com/miningold * @author jonobr1 / https://github.com/jonobr1 * * Modified from the TorusKnotGeometry by @oosmoxiecode * * Creates a tube which extrudes along a 3d spline * * Uses parallel transport frames as described in * http://www.cs.indiana.edu/pub/techreports/TR425.pdf */ THREE.TubeGeometry = function ( path, segments, radius, radialSegments, closed, taper ) { THREE.Geometry.call( this ); this.type = 'TubeGeometry'; this.parameters = { path: path, segments: segments, radius: radius, radialSegments: radialSegments, closed: closed, taper: taper }; segments = segments || 64; radius = radius || 1; radialSegments = radialSegments || 8; closed = closed || false; taper = taper || THREE.TubeGeometry.NoTaper; var grid = []; var scope = this, tangent, normal, binormal, numpoints = segments + 1, u, v, r, cx, cy, pos, pos2 = new THREE.Vector3(), i, j, ip, jp, a, b, c, d, uva, uvb, uvc, uvd; var frames = new THREE.TubeGeometry.FrenetFrames( path, segments, closed ), tangents = frames.tangents, normals = frames.normals, binormals = frames.binormals; // proxy internals this.tangents = tangents; this.normals = normals; this.binormals = binormals; function vert( x, y, z ) { return scope.vertices.push( new THREE.Vector3( x, y, z ) ) - 1; } // construct the grid for ( i = 0; i < numpoints; i ++ ) { grid[ i ] = []; u = i / ( numpoints - 1 ); pos = path.getPointAt( u ); tangent = tangents[ i ]; normal = normals[ i ]; binormal = binormals[ i ]; r = radius * taper( u ); for ( j = 0; j < radialSegments; j ++ ) { v = j / radialSegments * 2 * Math.PI; cx = - r * Math.cos( v ); // TODO: Hack: Negating it so it faces outside. cy = r * Math.sin( v ); pos2.copy( pos ); pos2.x += cx * normal.x + cy * binormal.x; pos2.y += cx * normal.y + cy * binormal.y; pos2.z += cx * normal.z + cy * binormal.z; grid[ i ][ j ] = vert( pos2.x, pos2.y, pos2.z ); } } // construct the mesh for ( i = 0; i < segments; i ++ ) { for ( j = 0; j < radialSegments; j ++ ) { ip = ( closed ) ? ( i + 1 ) % segments : i + 1; jp = ( j + 1 ) % radialSegments; a = grid[ i ][ j ]; // *** NOT NECESSARILY PLANAR ! *** b = grid[ ip ][ j ]; c = grid[ ip ][ jp ]; d = grid[ i ][ jp ]; uva = new THREE.Vector2( i / segments, j / radialSegments ); uvb = new THREE.Vector2( ( i + 1 ) / segments, j / radialSegments ); uvc = new THREE.Vector2( ( i + 1 ) / segments, ( j + 1 ) / radialSegments ); uvd = new THREE.Vector2( i / segments, ( j + 1 ) / radialSegments ); this.faces.push( new THREE.Face3( a, b, d ) ); this.faceVertexUvs[ 0 ].push( [ uva, uvb, uvd ] ); this.faces.push( new THREE.Face3( b, c, d ) ); this.faceVertexUvs[ 0 ].push( [ uvb.clone(), uvc, uvd.clone() ] ); } } this.computeFaceNormals(); this.computeVertexNormals(); }; THREE.TubeGeometry.prototype = Object.create( THREE.Geometry.prototype ); THREE.TubeGeometry.prototype.constructor = THREE.TubeGeometry; THREE.TubeGeometry.NoTaper = function ( u ) { return 1; }; THREE.TubeGeometry.SinusoidalTaper = function ( u ) { return Math.sin( Math.PI * u ); }; // For computing of Frenet frames, exposing the tangents, normals and binormals the spline THREE.TubeGeometry.FrenetFrames = function ( path, segments, closed ) { var normal = new THREE.Vector3(), tangents = [], normals = [], binormals = [], vec = new THREE.Vector3(), mat = new THREE.Matrix4(), numpoints = segments + 1, theta, smallest, tx, ty, tz, i, u; // expose internals this.tangents = tangents; this.normals = normals; this.binormals = binormals; // compute the tangent vectors for each segment on the path for ( i = 0; i < numpoints; i ++ ) { u = i / ( numpoints - 1 ); tangents[ i ] = path.getTangentAt( u ); tangents[ i ].normalize(); } initialNormal3(); /* function initialNormal1(lastBinormal) { // fixed start binormal. Has dangers of 0 vectors normals[ 0 ] = new THREE.Vector3(); binormals[ 0 ] = new THREE.Vector3(); if (lastBinormal===undefined) lastBinormal = new THREE.Vector3( 0, 0, 1 ); normals[ 0 ].crossVectors( lastBinormal, tangents[ 0 ] ).normalize(); binormals[ 0 ].crossVectors( tangents[ 0 ], normals[ 0 ] ).normalize(); } function initialNormal2() { // This uses the Frenet-Serret formula for deriving binormal var t2 = path.getTangentAt( epsilon ); normals[ 0 ] = new THREE.Vector3().subVectors( t2, tangents[ 0 ] ).normalize(); binormals[ 0 ] = new THREE.Vector3().crossVectors( tangents[ 0 ], normals[ 0 ] ); normals[ 0 ].crossVectors( binormals[ 0 ], tangents[ 0 ] ).normalize(); // last binormal x tangent binormals[ 0 ].crossVectors( tangents[ 0 ], normals[ 0 ] ).normalize(); } */ function initialNormal3() { // select an initial normal vector perpendicular to the first tangent vector, // and in the direction of the smallest tangent xyz component normals[ 0 ] = new THREE.Vector3(); binormals[ 0 ] = new THREE.Vector3(); smallest = Number.MAX_VALUE; tx = Math.abs( tangents[ 0 ].x ); ty = Math.abs( tangents[ 0 ].y ); tz = Math.abs( tangents[ 0 ].z ); if ( tx <= smallest ) { smallest = tx; normal.set( 1, 0, 0 ); } if ( ty <= smallest ) { smallest = ty; normal.set( 0, 1, 0 ); } if ( tz <= smallest ) { normal.set( 0, 0, 1 ); } vec.crossVectors( tangents[ 0 ], normal ).normalize(); normals[ 0 ].crossVectors( tangents[ 0 ], vec ); binormals[ 0 ].crossVectors( tangents[ 0 ], normals[ 0 ] ); } // compute the slowly-varying normal and binormal vectors for each segment on the path for ( i = 1; i < numpoints; i ++ ) { normals[ i ] = normals[ i - 1 ].clone(); binormals[ i ] = binormals[ i - 1 ].clone(); vec.crossVectors( tangents[ i - 1 ], tangents[ i ] ); if ( vec.length() > Number.EPSILON ) { vec.normalize(); theta = Math.acos( THREE.Math.clamp( tangents[ i - 1 ].dot( tangents[ i ] ), - 1, 1 ) ); // clamp for floating pt errors normals[ i ].applyMatrix4( mat.makeRotationAxis( vec, theta ) ); } binormals[ i ].crossVectors( tangents[ i ], normals[ i ] ); } // if the curve is closed, postprocess the vectors so the first and last normal vectors are the same if ( closed ) { theta = Math.acos( THREE.Math.clamp( normals[ 0 ].dot( normals[ numpoints - 1 ] ), - 1, 1 ) ); theta /= ( numpoints - 1 ); if ( tangents[ 0 ].dot( vec.crossVectors( normals[ 0 ], normals[ numpoints - 1 ] ) ) > 0 ) { theta = - theta; } for ( i = 1; i < numpoints; i ++ ) { // twist a little... normals[ i ].applyMatrix4( mat.makeRotationAxis( tangents[ i ], theta * i ) ); binormals[ i ].crossVectors( tangents[ i ], normals[ i ] ); } } }; // File:src/extras/geometries/PolyhedronGeometry.js /** * @author clockworkgeek / https://github.com/clockworkgeek * @author timothypratley / https://github.com/timothypratley * @author WestLangley / http://github.com/WestLangley */ THREE.PolyhedronGeometry = function ( vertices, indices, radius, detail ) { THREE.Geometry.call( this ); this.type = 'PolyhedronGeometry'; this.parameters = { vertices: vertices, indices: indices, radius: radius, detail: detail }; radius = radius || 1; detail = detail || 0; var that = this; for ( var i = 0, l = vertices.length; i < l; i += 3 ) { prepare( new THREE.Vector3( vertices[ i ], vertices[ i + 1 ], vertices[ i + 2 ] ) ); } var p = this.vertices; var faces = []; for ( var i = 0, j = 0, l = indices.length; i < l; i += 3, j ++ ) { var v1 = p[ indices[ i ] ]; var v2 = p[ indices[ i + 1 ] ]; var v3 = p[ indices[ i + 2 ] ]; faces[ j ] = new THREE.Face3( v1.index, v2.index, v3.index, [ v1.clone(), v2.clone(), v3.clone() ] ); } var centroid = new THREE.Vector3(); for ( var i = 0, l = faces.length; i < l; i ++ ) { subdivide( faces[ i ], detail ); } // Handle case when face straddles the seam for ( var i = 0, l = this.faceVertexUvs[ 0 ].length; i < l; i ++ ) { var uvs = this.faceVertexUvs[ 0 ][ i ]; var x0 = uvs[ 0 ].x; var x1 = uvs[ 1 ].x; var x2 = uvs[ 2 ].x; var max = Math.max( x0, x1, x2 ); var min = Math.min( x0, x1, x2 ); if ( max > 0.9 && min < 0.1 ) { // 0.9 is somewhat arbitrary if ( x0 < 0.2 ) uvs[ 0 ].x += 1; if ( x1 < 0.2 ) uvs[ 1 ].x += 1; if ( x2 < 0.2 ) uvs[ 2 ].x += 1; } } // Apply radius for ( var i = 0, l = this.vertices.length; i < l; i ++ ) { this.vertices[ i ].multiplyScalar( radius ); } // Merge vertices this.mergeVertices(); this.computeFaceNormals(); this.boundingSphere = new THREE.Sphere( new THREE.Vector3(), radius ); // Project vector onto sphere's surface function prepare( vector ) { var vertex = vector.normalize().clone(); vertex.index = that.vertices.push( vertex ) - 1; // Texture coords are equivalent to map coords, calculate angle and convert to fraction of a circle. var u = azimuth( vector ) / 2 / Math.PI + 0.5; var v = inclination( vector ) / Math.PI + 0.5; vertex.uv = new THREE.Vector2( u, 1 - v ); return vertex; } // Approximate a curved face with recursively sub-divided triangles. function make( v1, v2, v3 ) { var face = new THREE.Face3( v1.index, v2.index, v3.index, [ v1.clone(), v2.clone(), v3.clone() ] ); that.faces.push( face ); centroid.copy( v1 ).add( v2 ).add( v3 ).divideScalar( 3 ); var azi = azimuth( centroid ); that.faceVertexUvs[ 0 ].push( [ correctUV( v1.uv, v1, azi ), correctUV( v2.uv, v2, azi ), correctUV( v3.uv, v3, azi ) ] ); } // Analytically subdivide a face to the required detail level. function subdivide( face, detail ) { var cols = Math.pow( 2, detail ); var a = prepare( that.vertices[ face.a ] ); var b = prepare( that.vertices[ face.b ] ); var c = prepare( that.vertices[ face.c ] ); var v = []; // Construct all of the vertices for this subdivision. for ( var i = 0 ; i <= cols; i ++ ) { v[ i ] = []; var aj = prepare( a.clone().lerp( c, i / cols ) ); var bj = prepare( b.clone().lerp( c, i / cols ) ); var rows = cols - i; for ( var j = 0; j <= rows; j ++ ) { if ( j === 0 && i === cols ) { v[ i ][ j ] = aj; } else { v[ i ][ j ] = prepare( aj.clone().lerp( bj, j / rows ) ); } } } // Construct all of the faces. for ( var i = 0; i < cols ; i ++ ) { for ( var j = 0; j < 2 * ( cols - i ) - 1; j ++ ) { var k = Math.floor( j / 2 ); if ( j % 2 === 0 ) { make( v[ i ][ k + 1 ], v[ i + 1 ][ k ], v[ i ][ k ] ); } else { make( v[ i ][ k + 1 ], v[ i + 1 ][ k + 1 ], v[ i + 1 ][ k ] ); } } } } // Angle around the Y axis, counter-clockwise when looking from above. function azimuth( vector ) { return Math.atan2( vector.z, - vector.x ); } // Angle above the XZ plane. function inclination( vector ) { return Math.atan2( - vector.y, Math.sqrt( ( vector.x * vector.x ) + ( vector.z * vector.z ) ) ); } // Texture fixing helper. Spheres have some odd behaviours. function correctUV( uv, vector, azimuth ) { if ( ( azimuth < 0 ) && ( uv.x === 1 ) ) uv = new THREE.Vector2( uv.x - 1, uv.y ); if ( ( vector.x === 0 ) && ( vector.z === 0 ) ) uv = new THREE.Vector2( azimuth / 2 / Math.PI + 0.5, uv.y ); return uv.clone(); } }; THREE.PolyhedronGeometry.prototype = Object.create( THREE.Geometry.prototype ); THREE.PolyhedronGeometry.prototype.constructor = THREE.PolyhedronGeometry; // File:src/extras/geometries/DodecahedronGeometry.js /** * @author Abe Pazos / https://hamoid.com */ THREE.DodecahedronGeometry = function ( radius, detail ) { var t = ( 1 + Math.sqrt( 5 ) ) / 2; var r = 1 / t; var vertices = [ // (±1, ±1, ±1) - 1, - 1, - 1, - 1, - 1, 1, - 1, 1, - 1, - 1, 1, 1, 1, - 1, - 1, 1, - 1, 1, 1, 1, - 1, 1, 1, 1, // (0, ±1/φ, ±φ) 0, - r, - t, 0, - r, t, 0, r, - t, 0, r, t, // (±1/φ, ±φ, 0) - r, - t, 0, - r, t, 0, r, - t, 0, r, t, 0, // (±φ, 0, ±1/φ) - t, 0, - r, t, 0, - r, - t, 0, r, t, 0, r ]; var indices = [ 3, 11, 7, 3, 7, 15, 3, 15, 13, 7, 19, 17, 7, 17, 6, 7, 6, 15, 17, 4, 8, 17, 8, 10, 17, 10, 6, 8, 0, 16, 8, 16, 2, 8, 2, 10, 0, 12, 1, 0, 1, 18, 0, 18, 16, 6, 10, 2, 6, 2, 13, 6, 13, 15, 2, 16, 18, 2, 18, 3, 2, 3, 13, 18, 1, 9, 18, 9, 11, 18, 11, 3, 4, 14, 12, 4, 12, 0, 4, 0, 8, 11, 9, 5, 11, 5, 19, 11, 19, 7, 19, 5, 14, 19, 14, 4, 19, 4, 17, 1, 12, 14, 1, 14, 5, 1, 5, 9 ]; THREE.PolyhedronGeometry.call( this, vertices, indices, radius, detail ); this.type = 'DodecahedronGeometry'; this.parameters = { radius: radius, detail: detail }; }; THREE.DodecahedronGeometry.prototype = Object.create( THREE.PolyhedronGeometry.prototype ); THREE.DodecahedronGeometry.prototype.constructor = THREE.DodecahedronGeometry; // File:src/extras/geometries/IcosahedronGeometry.js /** * @author timothypratley / https://github.com/timothypratley */ THREE.IcosahedronGeometry = function ( radius, detail ) { var t = ( 1 + Math.sqrt( 5 ) ) / 2; var vertices = [ - 1, t, 0, 1, t, 0, - 1, - t, 0, 1, - t, 0, 0, - 1, t, 0, 1, t, 0, - 1, - t, 0, 1, - t, t, 0, - 1, t, 0, 1, - t, 0, - 1, - t, 0, 1 ]; var indices = [ 0, 11, 5, 0, 5, 1, 0, 1, 7, 0, 7, 10, 0, 10, 11, 1, 5, 9, 5, 11, 4, 11, 10, 2, 10, 7, 6, 7, 1, 8, 3, 9, 4, 3, 4, 2, 3, 2, 6, 3, 6, 8, 3, 8, 9, 4, 9, 5, 2, 4, 11, 6, 2, 10, 8, 6, 7, 9, 8, 1 ]; THREE.PolyhedronGeometry.call( this, vertices, indices, radius, detail ); this.type = 'IcosahedronGeometry'; this.parameters = { radius: radius, detail: detail }; }; THREE.IcosahedronGeometry.prototype = Object.create( THREE.PolyhedronGeometry.prototype ); THREE.IcosahedronGeometry.prototype.constructor = THREE.IcosahedronGeometry; // File:src/extras/geometries/OctahedronGeometry.js /** * @author timothypratley / https://github.com/timothypratley */ THREE.OctahedronGeometry = function ( radius, detail ) { var vertices = [ 1, 0, 0, - 1, 0, 0, 0, 1, 0, 0, - 1, 0, 0, 0, 1, 0, 0, - 1 ]; var indices = [ 0, 2, 4, 0, 4, 3, 0, 3, 5, 0, 5, 2, 1, 2, 5, 1, 5, 3, 1, 3, 4, 1, 4, 2 ]; THREE.PolyhedronGeometry.call( this, vertices, indices, radius, detail ); this.type = 'OctahedronGeometry'; this.parameters = { radius: radius, detail: detail }; }; THREE.OctahedronGeometry.prototype = Object.create( THREE.PolyhedronGeometry.prototype ); THREE.OctahedronGeometry.prototype.constructor = THREE.OctahedronGeometry; // File:src/extras/geometries/TetrahedronGeometry.js /** * @author timothypratley / https://github.com/timothypratley */ THREE.TetrahedronGeometry = function ( radius, detail ) { var vertices = [ 1, 1, 1, - 1, - 1, 1, - 1, 1, - 1, 1, - 1, - 1 ]; var indices = [ 2, 1, 0, 0, 3, 2, 1, 3, 0, 2, 3, 1 ]; THREE.PolyhedronGeometry.call( this, vertices, indices, radius, detail ); this.type = 'TetrahedronGeometry'; this.parameters = { radius: radius, detail: detail }; }; THREE.TetrahedronGeometry.prototype = Object.create( THREE.PolyhedronGeometry.prototype ); THREE.TetrahedronGeometry.prototype.constructor = THREE.TetrahedronGeometry; // File:src/extras/geometries/ParametricGeometry.js /** * @author zz85 / https://github.com/zz85 * Parametric Surfaces Geometry * based on the brilliant article by @prideout http://prideout.net/blog/?p=44 * * new THREE.ParametricGeometry( parametricFunction, uSegments, ySegements ); * */ THREE.ParametricGeometry = function ( func, slices, stacks ) { THREE.Geometry.call( this ); this.type = 'ParametricGeometry'; this.parameters = { func: func, slices: slices, stacks: stacks }; var verts = this.vertices; var faces = this.faces; var uvs = this.faceVertexUvs[ 0 ]; var i, j, p; var u, v; var sliceCount = slices + 1; for ( i = 0; i <= stacks; i ++ ) { v = i / stacks; for ( j = 0; j <= slices; j ++ ) { u = j / slices; p = func( u, v ); verts.push( p ); } } var a, b, c, d; var uva, uvb, uvc, uvd; for ( i = 0; i < stacks; i ++ ) { for ( j = 0; j < slices; j ++ ) { a = i * sliceCount + j; b = i * sliceCount + j + 1; c = ( i + 1 ) * sliceCount + j + 1; d = ( i + 1 ) * sliceCount + j; uva = new THREE.Vector2( j / slices, i / stacks ); uvb = new THREE.Vector2( ( j + 1 ) / slices, i / stacks ); uvc = new THREE.Vector2( ( j + 1 ) / slices, ( i + 1 ) / stacks ); uvd = new THREE.Vector2( j / slices, ( i + 1 ) / stacks ); faces.push( new THREE.Face3( a, b, d ) ); uvs.push( [ uva, uvb, uvd ] ); faces.push( new THREE.Face3( b, c, d ) ); uvs.push( [ uvb.clone(), uvc, uvd.clone() ] ); } } // console.log(this); // magic bullet // var diff = this.mergeVertices(); // console.log('removed ', diff, ' vertices by merging'); this.computeFaceNormals(); this.computeVertexNormals(); }; THREE.ParametricGeometry.prototype = Object.create( THREE.Geometry.prototype ); THREE.ParametricGeometry.prototype.constructor = THREE.ParametricGeometry; // File:src/extras/geometries/WireframeGeometry.js /** * @author mrdoob / http://mrdoob.com/ */ THREE.WireframeGeometry = function ( geometry ) { THREE.BufferGeometry.call( this ); var edge = [ 0, 0 ], hash = {}; function sortFunction( a, b ) { return a - b; } var keys = [ 'a', 'b', 'c' ]; if ( geometry instanceof THREE.Geometry ) { var vertices = geometry.vertices; var faces = geometry.faces; var numEdges = 0; // allocate maximal size var edges = new Uint32Array( 6 * faces.length ); for ( var i = 0, l = faces.length; i < l; i ++ ) { var face = faces[ i ]; for ( var j = 0; j < 3; j ++ ) { edge[ 0 ] = face[ keys[ j ] ]; edge[ 1 ] = face[ keys[ ( j + 1 ) % 3 ] ]; edge.sort( sortFunction ); var key = edge.toString(); if ( hash[ key ] === undefined ) { edges[ 2 * numEdges ] = edge[ 0 ]; edges[ 2 * numEdges + 1 ] = edge[ 1 ]; hash[ key ] = true; numEdges ++; } } } var coords = new Float32Array( numEdges * 2 * 3 ); for ( var i = 0, l = numEdges; i < l; i ++ ) { for ( var j = 0; j < 2; j ++ ) { var vertex = vertices[ edges [ 2 * i + j ] ]; var index = 6 * i + 3 * j; coords[ index + 0 ] = vertex.x; coords[ index + 1 ] = vertex.y; coords[ index + 2 ] = vertex.z; } } this.addAttribute( 'position', new THREE.BufferAttribute( coords, 3 ) ); } else if ( geometry instanceof THREE.BufferGeometry ) { if ( geometry.index !== null ) { // Indexed BufferGeometry var indices = geometry.index.array; var vertices = geometry.attributes.position; var groups = geometry.groups; var numEdges = 0; if ( groups.length === 0 ) { geometry.addGroup( 0, indices.length ); } // allocate maximal size var edges = new Uint32Array( 2 * indices.length ); for ( var o = 0, ol = groups.length; o < ol; ++ o ) { var group = groups[ o ]; var start = group.start; var count = group.count; for ( var i = start, il = start + count; i < il; i += 3 ) { for ( var j = 0; j < 3; j ++ ) { edge[ 0 ] = indices[ i + j ]; edge[ 1 ] = indices[ i + ( j + 1 ) % 3 ]; edge.sort( sortFunction ); var key = edge.toString(); if ( hash[ key ] === undefined ) { edges[ 2 * numEdges ] = edge[ 0 ]; edges[ 2 * numEdges + 1 ] = edge[ 1 ]; hash[ key ] = true; numEdges ++; } } } } var coords = new Float32Array( numEdges * 2 * 3 ); for ( var i = 0, l = numEdges; i < l; i ++ ) { for ( var j = 0; j < 2; j ++ ) { var index = 6 * i + 3 * j; var index2 = edges[ 2 * i + j ]; coords[ index + 0 ] = vertices.getX( index2 ); coords[ index + 1 ] = vertices.getY( index2 ); coords[ index + 2 ] = vertices.getZ( index2 ); } } this.addAttribute( 'position', new THREE.BufferAttribute( coords, 3 ) ); } else { // non-indexed BufferGeometry var vertices = geometry.attributes.position.array; var numEdges = vertices.length / 3; var numTris = numEdges / 3; var coords = new Float32Array( numEdges * 2 * 3 ); for ( var i = 0, l = numTris; i < l; i ++ ) { for ( var j = 0; j < 3; j ++ ) { var index = 18 * i + 6 * j; var index1 = 9 * i + 3 * j; coords[ index + 0 ] = vertices[ index1 ]; coords[ index + 1 ] = vertices[ index1 + 1 ]; coords[ index + 2 ] = vertices[ index1 + 2 ]; var index2 = 9 * i + 3 * ( ( j + 1 ) % 3 ); coords[ index + 3 ] = vertices[ index2 ]; coords[ index + 4 ] = vertices[ index2 + 1 ]; coords[ index + 5 ] = vertices[ index2 + 2 ]; } } this.addAttribute( 'position', new THREE.BufferAttribute( coords, 3 ) ); } } }; THREE.WireframeGeometry.prototype = Object.create( THREE.BufferGeometry.prototype ); THREE.WireframeGeometry.prototype.constructor = THREE.WireframeGeometry; // File:src/extras/helpers/AxisHelper.js /** * @author sroucheray / http://sroucheray.org/ * @author mrdoob / http://mrdoob.com/ */ THREE.AxisHelper = function ( size ) { size = size || 1; var vertices = new Float32Array( [ 0, 0, 0, size, 0, 0, 0, 0, 0, 0, size, 0, 0, 0, 0, 0, 0, size ] ); var colors = new Float32Array( [ 1, 0, 0, 1, 0.6, 0, 0, 1, 0, 0.6, 1, 0, 0, 0, 1, 0, 0.6, 1 ] ); var geometry = new THREE.BufferGeometry(); geometry.addAttribute( 'position', new THREE.BufferAttribute( vertices, 3 ) ); geometry.addAttribute( 'color', new THREE.BufferAttribute( colors, 3 ) ); var material = new THREE.LineBasicMaterial( { vertexColors: THREE.VertexColors } ); THREE.LineSegments.call( this, geometry, material ); }; THREE.AxisHelper.prototype = Object.create( THREE.LineSegments.prototype ); THREE.AxisHelper.prototype.constructor = THREE.AxisHelper; // File:src/extras/helpers/ArrowHelper.js /** * @author WestLangley / http://github.com/WestLangley * @author zz85 / http://github.com/zz85 * @author bhouston / http://clara.io * * Creates an arrow for visualizing directions * * Parameters: * dir - Vector3 * origin - Vector3 * length - Number * color - color in hex value * headLength - Number * headWidth - Number */ THREE.ArrowHelper = ( function () { var lineGeometry = new THREE.BufferGeometry(); lineGeometry.addAttribute( 'position', new THREE.Float32Attribute( [ 0, 0, 0, 0, 1, 0 ], 3 ) ); var coneGeometry = new THREE.CylinderBufferGeometry( 0, 0.5, 1, 5, 1 ); coneGeometry.translate( 0, - 0.5, 0 ); return function ArrowHelper( dir, origin, length, color, headLength, headWidth ) { // dir is assumed to be normalized THREE.Object3D.call( this ); if ( color === undefined ) color = 0xffff00; if ( length === undefined ) length = 1; if ( headLength === undefined ) headLength = 0.2 * length; if ( headWidth === undefined ) headWidth = 0.2 * headLength; this.position.copy( origin ); this.line = new THREE.Line( lineGeometry, new THREE.LineBasicMaterial( { color: color } ) ); this.line.matrixAutoUpdate = false; this.add( this.line ); this.cone = new THREE.Mesh( coneGeometry, new THREE.MeshBasicMaterial( { color: color } ) ); this.cone.matrixAutoUpdate = false; this.add( this.cone ); this.setDirection( dir ); this.setLength( length, headLength, headWidth ); }; }() ); THREE.ArrowHelper.prototype = Object.create( THREE.Object3D.prototype ); THREE.ArrowHelper.prototype.constructor = THREE.ArrowHelper; THREE.ArrowHelper.prototype.setDirection = ( function () { var axis = new THREE.Vector3(); var radians; return function setDirection( dir ) { // dir is assumed to be normalized if ( dir.y > 0.99999 ) { this.quaternion.set( 0, 0, 0, 1 ); } else if ( dir.y < - 0.99999 ) { this.quaternion.set( 1, 0, 0, 0 ); } else { axis.set( dir.z, 0, - dir.x ).normalize(); radians = Math.acos( dir.y ); this.quaternion.setFromAxisAngle( axis, radians ); } }; }() ); THREE.ArrowHelper.prototype.setLength = function ( length, headLength, headWidth ) { if ( headLength === undefined ) headLength = 0.2 * length; if ( headWidth === undefined ) headWidth = 0.2 * headLength; this.line.scale.set( 1, Math.max( 0, length - headLength ), 1 ); this.line.updateMatrix(); this.cone.scale.set( headWidth, headLength, headWidth ); this.cone.position.y = length; this.cone.updateMatrix(); }; THREE.ArrowHelper.prototype.setColor = function ( color ) { this.line.material.color.copy( color ); this.cone.material.color.copy( color ); }; // File:src/extras/helpers/BoxHelper.js /** * @author mrdoob / http://mrdoob.com/ */ THREE.BoxHelper = function ( object, color ) { if ( color === undefined ) color = 0xffff00; var indices = new Uint16Array( [ 0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 4, 1, 5, 2, 6, 3, 7 ] ); var positions = new Float32Array( 8 * 3 ); var geometry = new THREE.BufferGeometry(); geometry.setIndex( new THREE.BufferAttribute( indices, 1 ) ); geometry.addAttribute( 'position', new THREE.BufferAttribute( positions, 3 ) ); THREE.LineSegments.call( this, geometry, new THREE.LineBasicMaterial( { color: color } ) ); if ( object !== undefined ) { this.update( object ); } }; THREE.BoxHelper.prototype = Object.create( THREE.LineSegments.prototype ); THREE.BoxHelper.prototype.constructor = THREE.BoxHelper; THREE.BoxHelper.prototype.update = ( function () { var box = new THREE.Box3(); return function update( object ) { if ( object instanceof THREE.Box3 ) { box.copy( object ); } else { box.setFromObject( object ); } if ( box.isEmpty() ) return; var min = box.min; var max = box.max; /* 5____4 1/___0/| | 6__|_7 2/___3/ 0: max.x, max.y, max.z 1: min.x, max.y, max.z 2: min.x, min.y, max.z 3: max.x, min.y, max.z 4: max.x, max.y, min.z 5: min.x, max.y, min.z 6: min.x, min.y, min.z 7: max.x, min.y, min.z */ var position = this.geometry.attributes.position; var array = position.array; array[ 0 ] = max.x; array[ 1 ] = max.y; array[ 2 ] = max.z; array[ 3 ] = min.x; array[ 4 ] = max.y; array[ 5 ] = max.z; array[ 6 ] = min.x; array[ 7 ] = min.y; array[ 8 ] = max.z; array[ 9 ] = max.x; array[ 10 ] = min.y; array[ 11 ] = max.z; array[ 12 ] = max.x; array[ 13 ] = max.y; array[ 14 ] = min.z; array[ 15 ] = min.x; array[ 16 ] = max.y; array[ 17 ] = min.z; array[ 18 ] = min.x; array[ 19 ] = min.y; array[ 20 ] = min.z; array[ 21 ] = max.x; array[ 22 ] = min.y; array[ 23 ] = min.z; position.needsUpdate = true; this.geometry.computeBoundingSphere(); }; } )(); // File:src/extras/helpers/BoundingBoxHelper.js /** * @author WestLangley / http://github.com/WestLangley */ // a helper to show the world-axis-aligned bounding box for an object THREE.BoundingBoxHelper = function ( object, hex ) { var color = ( hex !== undefined ) ? hex : 0x888888; this.object = object; this.box = new THREE.Box3(); THREE.Mesh.call( this, new THREE.BoxGeometry( 1, 1, 1 ), new THREE.MeshBasicMaterial( { color: color, wireframe: true } ) ); }; THREE.BoundingBoxHelper.prototype = Object.create( THREE.Mesh.prototype ); THREE.BoundingBoxHelper.prototype.constructor = THREE.BoundingBoxHelper; THREE.BoundingBoxHelper.prototype.update = function () { this.box.setFromObject( this.object ); this.box.size( this.scale ); this.box.center( this.position ); }; // File:src/extras/helpers/CameraHelper.js /** * @author alteredq / http://alteredqualia.com/ * * - shows frustum, line of sight and up of the camera * - suitable for fast updates * - based on frustum visualization in lightgl.js shadowmap example * http://evanw.github.com/lightgl.js/tests/shadowmap.html */ THREE.CameraHelper = function ( camera ) { var geometry = new THREE.Geometry(); var material = new THREE.LineBasicMaterial( { color: 0xffffff, vertexColors: THREE.FaceColors } ); var pointMap = {}; // colors var hexFrustum = 0xffaa00; var hexCone = 0xff0000; var hexUp = 0x00aaff; var hexTarget = 0xffffff; var hexCross = 0x333333; // near addLine( "n1", "n2", hexFrustum ); addLine( "n2", "n4", hexFrustum ); addLine( "n4", "n3", hexFrustum ); addLine( "n3", "n1", hexFrustum ); // far addLine( "f1", "f2", hexFrustum ); addLine( "f2", "f4", hexFrustum ); addLine( "f4", "f3", hexFrustum ); addLine( "f3", "f1", hexFrustum ); // sides addLine( "n1", "f1", hexFrustum ); addLine( "n2", "f2", hexFrustum ); addLine( "n3", "f3", hexFrustum ); addLine( "n4", "f4", hexFrustum ); // cone addLine( "p", "n1", hexCone ); addLine( "p", "n2", hexCone ); addLine( "p", "n3", hexCone ); addLine( "p", "n4", hexCone ); // up addLine( "u1", "u2", hexUp ); addLine( "u2", "u3", hexUp ); addLine( "u3", "u1", hexUp ); // target addLine( "c", "t", hexTarget ); addLine( "p", "c", hexCross ); // cross addLine( "cn1", "cn2", hexCross ); addLine( "cn3", "cn4", hexCross ); addLine( "cf1", "cf2", hexCross ); addLine( "cf3", "cf4", hexCross ); function addLine( a, b, hex ) { addPoint( a, hex ); addPoint( b, hex ); } function addPoint( id, hex ) { geometry.vertices.push( new THREE.Vector3() ); geometry.colors.push( new THREE.Color( hex ) ); if ( pointMap[ id ] === undefined ) { pointMap[ id ] = []; } pointMap[ id ].push( geometry.vertices.length - 1 ); } THREE.LineSegments.call( this, geometry, material ); this.camera = camera; if( this.camera.updateProjectionMatrix ) this.camera.updateProjectionMatrix(); this.matrix = camera.matrixWorld; this.matrixAutoUpdate = false; this.pointMap = pointMap; this.update(); }; THREE.CameraHelper.prototype = Object.create( THREE.LineSegments.prototype ); THREE.CameraHelper.prototype.constructor = THREE.CameraHelper; THREE.CameraHelper.prototype.update = function () { var geometry, pointMap; var vector = new THREE.Vector3(); var camera = new THREE.Camera(); function setPoint( point, x, y, z ) { vector.set( x, y, z ).unproject( camera ); var points = pointMap[ point ]; if ( points !== undefined ) { for ( var i = 0, il = points.length; i < il; i ++ ) { geometry.vertices[ points[ i ] ].copy( vector ); } } } return function update() { geometry = this.geometry; pointMap = this.pointMap; var w = 1, h = 1; // we need just camera projection matrix // world matrix must be identity camera.projectionMatrix.copy( this.camera.projectionMatrix ); // center / target setPoint( "c", 0, 0, - 1 ); setPoint( "t", 0, 0, 1 ); // near setPoint( "n1", - w, - h, - 1 ); setPoint( "n2", w, - h, - 1 ); setPoint( "n3", - w, h, - 1 ); setPoint( "n4", w, h, - 1 ); // far setPoint( "f1", - w, - h, 1 ); setPoint( "f2", w, - h, 1 ); setPoint( "f3", - w, h, 1 ); setPoint( "f4", w, h, 1 ); // up setPoint( "u1", w * 0.7, h * 1.1, - 1 ); setPoint( "u2", - w * 0.7, h * 1.1, - 1 ); setPoint( "u3", 0, h * 2, - 1 ); // cross setPoint( "cf1", - w, 0, 1 ); setPoint( "cf2", w, 0, 1 ); setPoint( "cf3", 0, - h, 1 ); setPoint( "cf4", 0, h, 1 ); setPoint( "cn1", - w, 0, - 1 ); setPoint( "cn2", w, 0, - 1 ); setPoint( "cn3", 0, - h, - 1 ); setPoint( "cn4", 0, h, - 1 ); geometry.verticesNeedUpdate = true; }; }(); // File:src/extras/helpers/DirectionalLightHelper.js /** * @author alteredq / http://alteredqualia.com/ * @author mrdoob / http://mrdoob.com/ * @author WestLangley / http://github.com/WestLangley */ THREE.DirectionalLightHelper = function ( light, size ) { THREE.Object3D.call( this ); this.light = light; this.light.updateMatrixWorld(); this.matrix = light.matrixWorld; this.matrixAutoUpdate = false; if ( size === undefined ) size = 1; var geometry = new THREE.BufferGeometry(); geometry.addAttribute( 'position', new THREE.Float32Attribute( [ - size, size, 0, size, size, 0, size, - size, 0, - size, - size, 0, - size, size, 0 ], 3 ) ); var material = new THREE.LineBasicMaterial( { fog: false } ); this.add( new THREE.Line( geometry, material ) ); geometry = new THREE.BufferGeometry(); geometry.addAttribute( 'position', new THREE.Float32Attribute( [ 0, 0, 0, 0, 0, 1 ], 3 ) ); this.add( new THREE.Line( geometry, material )); this.update(); }; THREE.DirectionalLightHelper.prototype = Object.create( THREE.Object3D.prototype ); THREE.DirectionalLightHelper.prototype.constructor = THREE.DirectionalLightHelper; THREE.DirectionalLightHelper.prototype.dispose = function () { var lightPlane = this.children[ 0 ]; var targetLine = this.children[ 1 ]; lightPlane.geometry.dispose(); lightPlane.material.dispose(); targetLine.geometry.dispose(); targetLine.material.dispose(); }; THREE.DirectionalLightHelper.prototype.update = function () { var v1 = new THREE.Vector3(); var v2 = new THREE.Vector3(); var v3 = new THREE.Vector3(); return function update() { v1.setFromMatrixPosition( this.light.matrixWorld ); v2.setFromMatrixPosition( this.light.target.matrixWorld ); v3.subVectors( v2, v1 ); var lightPlane = this.children[ 0 ]; var targetLine = this.children[ 1 ]; lightPlane.lookAt( v3 ); lightPlane.material.color.copy( this.light.color ).multiplyScalar( this.light.intensity ); targetLine.lookAt( v3 ); targetLine.scale.z = v3.length(); }; }(); // File:src/extras/helpers/EdgesHelper.js /** * @author WestLangley / http://github.com/WestLangley * @param object THREE.Mesh whose geometry will be used * @param hex line color * @param thresholdAngle the minimum angle (in degrees), * between the face normals of adjacent faces, * that is required to render an edge. A value of 10 means * an edge is only rendered if the angle is at least 10 degrees. */ THREE.EdgesHelper = function ( object, hex, thresholdAngle ) { var color = ( hex !== undefined ) ? hex : 0xffffff; THREE.LineSegments.call( this, new THREE.EdgesGeometry( object.geometry, thresholdAngle ), new THREE.LineBasicMaterial( { color: color } ) ); this.matrix = object.matrixWorld; this.matrixAutoUpdate = false; }; THREE.EdgesHelper.prototype = Object.create( THREE.LineSegments.prototype ); THREE.EdgesHelper.prototype.constructor = THREE.EdgesHelper; // File:src/extras/helpers/FaceNormalsHelper.js /** * @author mrdoob / http://mrdoob.com/ * @author WestLangley / http://github.com/WestLangley */ THREE.FaceNormalsHelper = function ( object, size, hex, linewidth ) { // FaceNormalsHelper only supports THREE.Geometry this.object = object; this.size = ( size !== undefined ) ? size : 1; var color = ( hex !== undefined ) ? hex : 0xffff00; var width = ( linewidth !== undefined ) ? linewidth : 1; // var nNormals = 0; var objGeometry = this.object.geometry; if ( objGeometry instanceof THREE.Geometry ) { nNormals = objGeometry.faces.length; } else { console.warn( 'THREE.FaceNormalsHelper: only THREE.Geometry is supported. Use THREE.VertexNormalsHelper, instead.' ); } // var geometry = new THREE.BufferGeometry(); var positions = new THREE.Float32Attribute( nNormals * 2 * 3, 3 ); geometry.addAttribute( 'position', positions ); THREE.LineSegments.call( this, geometry, new THREE.LineBasicMaterial( { color: color, linewidth: width } ) ); // this.matrixAutoUpdate = false; this.update(); }; THREE.FaceNormalsHelper.prototype = Object.create( THREE.LineSegments.prototype ); THREE.FaceNormalsHelper.prototype.constructor = THREE.FaceNormalsHelper; THREE.FaceNormalsHelper.prototype.update = ( function () { var v1 = new THREE.Vector3(); var v2 = new THREE.Vector3(); var normalMatrix = new THREE.Matrix3(); return function update() { this.object.updateMatrixWorld( true ); normalMatrix.getNormalMatrix( this.object.matrixWorld ); var matrixWorld = this.object.matrixWorld; var position = this.geometry.attributes.position; // var objGeometry = this.object.geometry; var vertices = objGeometry.vertices; var faces = objGeometry.faces; var idx = 0; for ( var i = 0, l = faces.length; i < l; i ++ ) { var face = faces[ i ]; var normal = face.normal; v1.copy( vertices[ face.a ] ) .add( vertices[ face.b ] ) .add( vertices[ face.c ] ) .divideScalar( 3 ) .applyMatrix4( matrixWorld ); v2.copy( normal ).applyMatrix3( normalMatrix ).normalize().multiplyScalar( this.size ).add( v1 ); position.setXYZ( idx, v1.x, v1.y, v1.z ); idx = idx + 1; position.setXYZ( idx, v2.x, v2.y, v2.z ); idx = idx + 1; } position.needsUpdate = true; return this; }; }() ); // File:src/extras/helpers/GridHelper.js /** * @author mrdoob / http://mrdoob.com/ */ THREE.GridHelper = function ( size, step, color1, color2 ) { color1 = new THREE.Color( color1 !== undefined ? color1 : 0x444444 ); color2 = new THREE.Color( color2 !== undefined ? color2 : 0x888888 ); var vertices = []; var colors = []; for ( var i = - size, j = 0; i <= size; i += step ) { vertices.push( - size, 0, i, size, 0, i ); vertices.push( i, 0, - size, i, 0, size ); var color = i === 0 ? color1 : color2; color.toArray( colors, j ); j += 3; color.toArray( colors, j ); j += 3; color.toArray( colors, j ); j += 3; color.toArray( colors, j ); j += 3; } var geometry = new THREE.BufferGeometry(); geometry.addAttribute( 'position', new THREE.Float32Attribute( vertices, 3 ) ); geometry.addAttribute( 'color', new THREE.Float32Attribute( colors, 3 ) ); var material = new THREE.LineBasicMaterial( { vertexColors: THREE.VertexColors } ); THREE.LineSegments.call( this, geometry, material ); }; THREE.GridHelper.prototype = Object.create( THREE.LineSegments.prototype ); THREE.GridHelper.prototype.constructor = THREE.GridHelper; THREE.GridHelper.prototype.setColors = function () { console.error( 'THREE.GridHelper: setColors() has been deprecated, pass them in the constructor instead.' ); }; // File:src/extras/helpers/HemisphereLightHelper.js /** * @author alteredq / http://alteredqualia.com/ * @author mrdoob / http://mrdoob.com/ */ THREE.HemisphereLightHelper = function ( light, sphereSize ) { THREE.Object3D.call( this ); this.light = light; this.light.updateMatrixWorld(); this.matrix = light.matrixWorld; this.matrixAutoUpdate = false; this.colors = [ new THREE.Color(), new THREE.Color() ]; var geometry = new THREE.SphereGeometry( sphereSize, 4, 2 ); geometry.rotateX( - Math.PI / 2 ); for ( var i = 0, il = 8; i < il; i ++ ) { geometry.faces[ i ].color = this.colors[ i < 4 ? 0 : 1 ]; } var material = new THREE.MeshBasicMaterial( { vertexColors: THREE.FaceColors, wireframe: true } ); this.lightSphere = new THREE.Mesh( geometry, material ); this.add( this.lightSphere ); this.update(); }; THREE.HemisphereLightHelper.prototype = Object.create( THREE.Object3D.prototype ); THREE.HemisphereLightHelper.prototype.constructor = THREE.HemisphereLightHelper; THREE.HemisphereLightHelper.prototype.dispose = function () { this.lightSphere.geometry.dispose(); this.lightSphere.material.dispose(); }; THREE.HemisphereLightHelper.prototype.update = function () { var vector = new THREE.Vector3(); return function update() { this.colors[ 0 ].copy( this.light.color ).multiplyScalar( this.light.intensity ); this.colors[ 1 ].copy( this.light.groundColor ).multiplyScalar( this.light.intensity ); this.lightSphere.lookAt( vector.setFromMatrixPosition( this.light.matrixWorld ).negate() ); this.lightSphere.geometry.colorsNeedUpdate = true; }; }(); // File:src/extras/helpers/PointLightHelper.js /** * @author alteredq / http://alteredqualia.com/ * @author mrdoob / http://mrdoob.com/ */ THREE.PointLightHelper = function ( light, sphereSize ) { this.light = light; this.light.updateMatrixWorld(); var geometry = new THREE.SphereBufferGeometry( sphereSize, 4, 2 ); var material = new THREE.MeshBasicMaterial( { wireframe: true, fog: false } ); material.color.copy( this.light.color ).multiplyScalar( this.light.intensity ); THREE.Mesh.call( this, geometry, material ); this.matrix = this.light.matrixWorld; this.matrixAutoUpdate = false; /* var distanceGeometry = new THREE.IcosahedronGeometry( 1, 2 ); var distanceMaterial = new THREE.MeshBasicMaterial( { color: hexColor, fog: false, wireframe: true, opacity: 0.1, transparent: true } ); this.lightSphere = new THREE.Mesh( bulbGeometry, bulbMaterial ); this.lightDistance = new THREE.Mesh( distanceGeometry, distanceMaterial ); var d = light.distance; if ( d === 0.0 ) { this.lightDistance.visible = false; } else { this.lightDistance.scale.set( d, d, d ); } this.add( this.lightDistance ); */ }; THREE.PointLightHelper.prototype = Object.create( THREE.Mesh.prototype ); THREE.PointLightHelper.prototype.constructor = THREE.PointLightHelper; THREE.PointLightHelper.prototype.dispose = function () { this.geometry.dispose(); this.material.dispose(); }; THREE.PointLightHelper.prototype.update = function () { this.material.color.copy( this.light.color ).multiplyScalar( this.light.intensity ); /* var d = this.light.distance; if ( d === 0.0 ) { this.lightDistance.visible = false; } else { this.lightDistance.visible = true; this.lightDistance.scale.set( d, d, d ); } */ }; // File:src/extras/helpers/SkeletonHelper.js /** * @author Sean Griffin / http://twitter.com/sgrif * @author Michael Guerrero / http://realitymeltdown.com * @author mrdoob / http://mrdoob.com/ * @author ikerr / http://verold.com */ THREE.SkeletonHelper = function ( object ) { this.bones = this.getBoneList( object ); var geometry = new THREE.Geometry(); for ( var i = 0; i < this.bones.length; i ++ ) { var bone = this.bones[ i ]; if ( bone.parent instanceof THREE.Bone ) { geometry.vertices.push( new THREE.Vector3() ); geometry.vertices.push( new THREE.Vector3() ); geometry.colors.push( new THREE.Color( 0, 0, 1 ) ); geometry.colors.push( new THREE.Color( 0, 1, 0 ) ); } } geometry.dynamic = true; var material = new THREE.LineBasicMaterial( { vertexColors: THREE.VertexColors, depthTest: false, depthWrite: false, transparent: true } ); THREE.LineSegments.call( this, geometry, material ); this.root = object; this.matrix = object.matrixWorld; this.matrixAutoUpdate = false; this.update(); }; THREE.SkeletonHelper.prototype = Object.create( THREE.LineSegments.prototype ); THREE.SkeletonHelper.prototype.constructor = THREE.SkeletonHelper; THREE.SkeletonHelper.prototype.getBoneList = function( object ) { var boneList = []; if ( object instanceof THREE.Bone ) { boneList.push( object ); } for ( var i = 0; i < object.children.length; i ++ ) { boneList.push.apply( boneList, this.getBoneList( object.children[ i ] ) ); } return boneList; }; THREE.SkeletonHelper.prototype.update = function () { var geometry = this.geometry; var matrixWorldInv = new THREE.Matrix4().getInverse( this.root.matrixWorld ); var boneMatrix = new THREE.Matrix4(); var j = 0; for ( var i = 0; i < this.bones.length; i ++ ) { var bone = this.bones[ i ]; if ( bone.parent instanceof THREE.Bone ) { boneMatrix.multiplyMatrices( matrixWorldInv, bone.matrixWorld ); geometry.vertices[ j ].setFromMatrixPosition( boneMatrix ); boneMatrix.multiplyMatrices( matrixWorldInv, bone.parent.matrixWorld ); geometry.vertices[ j + 1 ].setFromMatrixPosition( boneMatrix ); j += 2; } } geometry.verticesNeedUpdate = true; geometry.computeBoundingSphere(); }; // File:src/extras/helpers/SpotLightHelper.js /** * @author alteredq / http://alteredqualia.com/ * @author mrdoob / http://mrdoob.com/ * @author WestLangley / http://github.com/WestLangley */ THREE.SpotLightHelper = function ( light ) { THREE.Object3D.call( this ); this.light = light; this.light.updateMatrixWorld(); this.matrix = light.matrixWorld; this.matrixAutoUpdate = false; var geometry = new THREE.BufferGeometry(); var positions = [ 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, - 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, - 1, 1 ]; for ( var i = 0, j = 1, l = 32; i < l; i ++, j ++ ) { var p1 = ( i / l ) * Math.PI * 2; var p2 = ( j / l ) * Math.PI * 2; positions.push( Math.cos( p1 ), Math.sin( p1 ), 1, Math.cos( p2 ), Math.sin( p2 ), 1 ); } geometry.addAttribute( 'position', new THREE.Float32Attribute( positions, 3 ) ); var material = new THREE.LineBasicMaterial( { fog: false } ); this.cone = new THREE.LineSegments( geometry, material ); this.add( this.cone ); this.update(); }; THREE.SpotLightHelper.prototype = Object.create( THREE.Object3D.prototype ); THREE.SpotLightHelper.prototype.constructor = THREE.SpotLightHelper; THREE.SpotLightHelper.prototype.dispose = function () { this.cone.geometry.dispose(); this.cone.material.dispose(); }; THREE.SpotLightHelper.prototype.update = function () { var vector = new THREE.Vector3(); var vector2 = new THREE.Vector3(); return function update() { var coneLength = this.light.distance ? this.light.distance : 1000; var coneWidth = coneLength * Math.tan( this.light.angle ); this.cone.scale.set( coneWidth, coneWidth, coneLength ); vector.setFromMatrixPosition( this.light.matrixWorld ); vector2.setFromMatrixPosition( this.light.target.matrixWorld ); this.cone.lookAt( vector2.sub( vector ) ); this.cone.material.color.copy( this.light.color ).multiplyScalar( this.light.intensity ); }; }(); // File:src/extras/helpers/VertexNormalsHelper.js /** * @author mrdoob / http://mrdoob.com/ * @author WestLangley / http://github.com/WestLangley */ THREE.VertexNormalsHelper = function ( object, size, hex, linewidth ) { this.object = object; this.size = ( size !== undefined ) ? size : 1; var color = ( hex !== undefined ) ? hex : 0xff0000; var width = ( linewidth !== undefined ) ? linewidth : 1; // var nNormals = 0; var objGeometry = this.object.geometry; if ( objGeometry instanceof THREE.Geometry ) { nNormals = objGeometry.faces.length * 3; } else if ( objGeometry instanceof THREE.BufferGeometry ) { nNormals = objGeometry.attributes.normal.count; } // var geometry = new THREE.BufferGeometry(); var positions = new THREE.Float32Attribute( nNormals * 2 * 3, 3 ); geometry.addAttribute( 'position', positions ); THREE.LineSegments.call( this, geometry, new THREE.LineBasicMaterial( { color: color, linewidth: width } ) ); // this.matrixAutoUpdate = false; this.update(); }; THREE.VertexNormalsHelper.prototype = Object.create( THREE.LineSegments.prototype ); THREE.VertexNormalsHelper.prototype.constructor = THREE.VertexNormalsHelper; THREE.VertexNormalsHelper.prototype.update = ( function () { var v1 = new THREE.Vector3(); var v2 = new THREE.Vector3(); var normalMatrix = new THREE.Matrix3(); return function update() { var keys = [ 'a', 'b', 'c' ]; this.object.updateMatrixWorld( true ); normalMatrix.getNormalMatrix( this.object.matrixWorld ); var matrixWorld = this.object.matrixWorld; var position = this.geometry.attributes.position; // var objGeometry = this.object.geometry; if ( objGeometry instanceof THREE.Geometry ) { var vertices = objGeometry.vertices; var faces = objGeometry.faces; var idx = 0; for ( var i = 0, l = faces.length; i < l; i ++ ) { var face = faces[ i ]; for ( var j = 0, jl = face.vertexNormals.length; j < jl; j ++ ) { var vertex = vertices[ face[ keys[ j ] ] ]; var normal = face.vertexNormals[ j ]; v1.copy( vertex ).applyMatrix4( matrixWorld ); v2.copy( normal ).applyMatrix3( normalMatrix ).normalize().multiplyScalar( this.size ).add( v1 ); position.setXYZ( idx, v1.x, v1.y, v1.z ); idx = idx + 1; position.setXYZ( idx, v2.x, v2.y, v2.z ); idx = idx + 1; } } } else if ( objGeometry instanceof THREE.BufferGeometry ) { var objPos = objGeometry.attributes.position; var objNorm = objGeometry.attributes.normal; var idx = 0; // for simplicity, ignore index and drawcalls, and render every normal for ( var j = 0, jl = objPos.count; j < jl; j ++ ) { v1.set( objPos.getX( j ), objPos.getY( j ), objPos.getZ( j ) ).applyMatrix4( matrixWorld ); v2.set( objNorm.getX( j ), objNorm.getY( j ), objNorm.getZ( j ) ); v2.applyMatrix3( normalMatrix ).normalize().multiplyScalar( this.size ).add( v1 ); position.setXYZ( idx, v1.x, v1.y, v1.z ); idx = idx + 1; position.setXYZ( idx, v2.x, v2.y, v2.z ); idx = idx + 1; } } position.needsUpdate = true; return this; }; }() ); // File:src/extras/helpers/WireframeHelper.js /** * @author mrdoob / http://mrdoob.com/ */ THREE.WireframeHelper = function ( object, hex ) { var color = ( hex !== undefined ) ? hex : 0xffffff; THREE.LineSegments.call( this, new THREE.WireframeGeometry( object.geometry ), new THREE.LineBasicMaterial( { color: color } ) ); this.matrix = object.matrixWorld; this.matrixAutoUpdate = false; }; THREE.WireframeHelper.prototype = Object.create( THREE.LineSegments.prototype ); THREE.WireframeHelper.prototype.constructor = THREE.WireframeHelper; // File:src/extras/objects/ImmediateRenderObject.js /** * @author alteredq / http://alteredqualia.com/ */ THREE.ImmediateRenderObject = function ( material ) { THREE.Object3D.call( this ); this.material = material; this.render = function ( renderCallback ) {}; }; THREE.ImmediateRenderObject.prototype = Object.create( THREE.Object3D.prototype ); THREE.ImmediateRenderObject.prototype.constructor = THREE.ImmediateRenderObject; // File:src/extras/objects/MorphBlendMesh.js /** * @author alteredq / http://alteredqualia.com/ */ THREE.MorphBlendMesh = function( geometry, material ) { THREE.Mesh.call( this, geometry, material ); this.animationsMap = {}; this.animationsList = []; // prepare default animation // (all frames played together in 1 second) var numFrames = this.geometry.morphTargets.length; var name = "__default"; var startFrame = 0; var endFrame = numFrames - 1; var fps = numFrames / 1; this.createAnimation( name, startFrame, endFrame, fps ); this.setAnimationWeight( name, 1 ); }; THREE.MorphBlendMesh.prototype = Object.create( THREE.Mesh.prototype ); THREE.MorphBlendMesh.prototype.constructor = THREE.MorphBlendMesh; THREE.MorphBlendMesh.prototype.createAnimation = function ( name, start, end, fps ) { var animation = { start: start, end: end, length: end - start + 1, fps: fps, duration: ( end - start ) / fps, lastFrame: 0, currentFrame: 0, active: false, time: 0, direction: 1, weight: 1, directionBackwards: false, mirroredLoop: false }; this.animationsMap[ name ] = animation; this.animationsList.push( animation ); }; THREE.MorphBlendMesh.prototype.autoCreateAnimations = function ( fps ) { var pattern = /([a-z]+)_?(\d+)/i; var firstAnimation, frameRanges = {}; var geometry = this.geometry; for ( var i = 0, il = geometry.morphTargets.length; i < il; i ++ ) { var morph = geometry.morphTargets[ i ]; var chunks = morph.name.match( pattern ); if ( chunks && chunks.length > 1 ) { var name = chunks[ 1 ]; if ( ! frameRanges[ name ] ) frameRanges[ name ] = { start: Infinity, end: - Infinity }; var range = frameRanges[ name ]; if ( i < range.start ) range.start = i; if ( i > range.end ) range.end = i; if ( ! firstAnimation ) firstAnimation = name; } } for ( var name in frameRanges ) { var range = frameRanges[ name ]; this.createAnimation( name, range.start, range.end, fps ); } this.firstAnimation = firstAnimation; }; THREE.MorphBlendMesh.prototype.setAnimationDirectionForward = function ( name ) { var animation = this.animationsMap[ name ]; if ( animation ) { animation.direction = 1; animation.directionBackwards = false; } }; THREE.MorphBlendMesh.prototype.setAnimationDirectionBackward = function ( name ) { var animation = this.animationsMap[ name ]; if ( animation ) { animation.direction = - 1; animation.directionBackwards = true; } }; THREE.MorphBlendMesh.prototype.setAnimationFPS = function ( name, fps ) { var animation = this.animationsMap[ name ]; if ( animation ) { animation.fps = fps; animation.duration = ( animation.end - animation.start ) / animation.fps; } }; THREE.MorphBlendMesh.prototype.setAnimationDuration = function ( name, duration ) { var animation = this.animationsMap[ name ]; if ( animation ) { animation.duration = duration; animation.fps = ( animation.end - animation.start ) / animation.duration; } }; THREE.MorphBlendMesh.prototype.setAnimationWeight = function ( name, weight ) { var animation = this.animationsMap[ name ]; if ( animation ) { animation.weight = weight; } }; THREE.MorphBlendMesh.prototype.setAnimationTime = function ( name, time ) { var animation = this.animationsMap[ name ]; if ( animation ) { animation.time = time; } }; THREE.MorphBlendMesh.prototype.getAnimationTime = function ( name ) { var time = 0; var animation = this.animationsMap[ name ]; if ( animation ) { time = animation.time; } return time; }; THREE.MorphBlendMesh.prototype.getAnimationDuration = function ( name ) { var duration = - 1; var animation = this.animationsMap[ name ]; if ( animation ) { duration = animation.duration; } return duration; }; THREE.MorphBlendMesh.prototype.playAnimation = function ( name ) { var animation = this.animationsMap[ name ]; if ( animation ) { animation.time = 0; animation.active = true; } else { console.warn( "THREE.MorphBlendMesh: animation[" + name + "] undefined in .playAnimation()" ); } }; THREE.MorphBlendMesh.prototype.stopAnimation = function ( name ) { var animation = this.animationsMap[ name ]; if ( animation ) { animation.active = false; } }; THREE.MorphBlendMesh.prototype.update = function ( delta ) { for ( var i = 0, il = this.animationsList.length; i < il; i ++ ) { var animation = this.animationsList[ i ]; if ( ! animation.active ) continue; var frameTime = animation.duration / animation.length; animation.time += animation.direction * delta; if ( animation.mirroredLoop ) { if ( animation.time > animation.duration || animation.time < 0 ) { animation.direction *= - 1; if ( animation.time > animation.duration ) { animation.time = animation.duration; animation.directionBackwards = true; } if ( animation.time < 0 ) { animation.time = 0; animation.directionBackwards = false; } } } else { animation.time = animation.time % animation.duration; if ( animation.time < 0 ) animation.time += animation.duration; } var keyframe = animation.start + THREE.Math.clamp( Math.floor( animation.time / frameTime ), 0, animation.length - 1 ); var weight = animation.weight; if ( keyframe !== animation.currentFrame ) { this.morphTargetInfluences[ animation.lastFrame ] = 0; this.morphTargetInfluences[ animation.currentFrame ] = 1 * weight; this.morphTargetInfluences[ keyframe ] = 0; animation.lastFrame = animation.currentFrame; animation.currentFrame = keyframe; } var mix = ( animation.time % frameTime ) / frameTime; if ( animation.directionBackwards ) mix = 1 - mix; if ( animation.currentFrame !== animation.lastFrame ) { this.morphTargetInfluences[ animation.currentFrame ] = mix * weight; this.morphTargetInfluences[ animation.lastFrame ] = ( 1 - mix ) * weight; } else { this.morphTargetInfluences[ animation.currentFrame ] = weight; } } }; ================================================ FILE: software/chainlink/js/packages/example-webserial-basic/public/3d_viewer/js/url-search-params/LICENSE ================================================ ISC License Copyright (c) 2018, Andrea Giammarchi, @WebReflection Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ================================================ FILE: software/chainlink/js/packages/example-webserial-basic/public/3d_viewer/js/url-search-params/index.js ================================================ /*! (c) Andrea Giammarchi - ISC */ var self = this || /* istanbul ignore next */ {}; try { (function (URLSearchParams, plus) { if ( new URLSearchParams('q=%2B').get('q') !== plus || new URLSearchParams({q: plus}).get('q') !== plus || new URLSearchParams([['q', plus]]).get('q') !== plus || new URLSearchParams('q=\n').toString() !== 'q=%0A' || new URLSearchParams({q: ' &'}).toString() !== 'q=+%26' ) throw URLSearchParams; self.URLSearchParams = URLSearchParams; }(URLSearchParams, '+')); } catch(URLSearchParams) { (function (Object, String, isArray) {'use strict'; var create = Object.create; var defineProperty = Object.defineProperty; var find = /[!'\(\)~]|%20|%00/g; var plus = /\+/g; var replace = { '!': '%21', "'": '%27', '(': '%28', ')': '%29', '~': '%7E', '%20': '+', '%00': '\x00' }; var proto = { append: function (key, value) { appendTo(this._ungap, key, value); }, delete: function (key) { delete this._ungap[key]; }, get: function (key) { return this.has(key) ? this._ungap[key][0] : null; }, getAll: function (key) { return this.has(key) ? this._ungap[key].slice(0) : []; }, has: function (key) { return key in this._ungap; }, set: function (key, value) { this._ungap[key] = [String(value)]; }, forEach: function (callback, thisArg) { var self = this; for (var key in self._ungap) self._ungap[key].forEach(invoke, key); function invoke(value) { callback.call(thisArg, value, String(key), self); } }, toJSON: function () { return {}; }, toString: function () { var query = []; for (var key in this._ungap) { var encoded = encode(key); for (var i = 0, value = this._ungap[key]; i < value.length; i++ ) { query.push(encoded + '=' + encode(value[i])); } } return query.join('&'); } }; for (var key in proto) defineProperty(URLSearchParams.prototype, key, { configurable: true, writable: true, value: proto[key] }); self.URLSearchParams = URLSearchParams; function URLSearchParams(query) { var dict = create(null); defineProperty(this, '_ungap', {value: dict}); switch (true) { case !query: break; case typeof query === 'string': if (query.charAt(0) === '?') { query = query.slice(1); } for (var pairs = query.split('&'), i = 0, length = pairs.length; i < length; i++ ) { var value = pairs[i]; var index = value.indexOf('='); if (-1 < index) { appendTo( dict, decode(value.slice(0, index)), decode(value.slice(index + 1)) ); } else if (value.length){ appendTo( dict, decode(value), '' ); } } break; case isArray(query): for (var i = 0, length = query.length; i < length; i++ ) { var value = query[i]; appendTo(dict, value[0], value[1]); } break; case 'forEach' in query: query.forEach(addEach, dict); break; default: for (var key in query) appendTo(dict, key, query[key]); } } function addEach(value, key) { appendTo(this, key, value); } function appendTo(dict, key, value) { var res = isArray(value) ? value.join(',') : value; if (key in dict) dict[key].push(res); else dict[key] = [res]; } function decode(str) { return decodeURIComponent(str.replace(plus, ' ')); } function encode(str) { return encodeURIComponent(str).replace(find, replacer); } function replacer(match) { return replace[match]; } }(Object, String, Array.isArray)); } (function (URLSearchParamsProto) { var iterable = false; try { iterable = !!Symbol.iterator; } catch (o_O) {} /* istanbul ignore else */ if (!('forEach' in URLSearchParamsProto)) { URLSearchParamsProto.forEach = function forEach(callback, thisArg) { var self = this; var names = Object.create(null); this.toString() .replace(/=[\s\S]*?(?:&|$)/g, '=') .split('=') .forEach(function (name) { if (!name.length || name in names) return; (names[name] = self.getAll(name)).forEach(function(value) { callback.call(thisArg, value, name, self); }); }); }; } /* istanbul ignore else */ if (!('keys' in URLSearchParamsProto)) { URLSearchParamsProto.keys = function keys() { return iterator(this, function(value, key) { this.push(key); }); }; } /* istanbul ignore else */ if (!('values' in URLSearchParamsProto)) { URLSearchParamsProto.values = function values() { return iterator(this, function(value, key) { this.push(value); }); }; } /* istanbul ignore else */ if (!('entries' in URLSearchParamsProto)) { URLSearchParamsProto.entries = function entries() { return iterator(this, function(value, key) { this.push([key, value]); }); }; } /* istanbul ignore else */ if (iterable && !(Symbol.iterator in URLSearchParamsProto)) { URLSearchParamsProto[Symbol.iterator] = URLSearchParamsProto.entries; } /* istanbul ignore else */ if (!('sort' in URLSearchParamsProto)) { URLSearchParamsProto.sort = function sort() { var entries = this.entries(), entry = entries.next(), done = entry.done, keys = [], values = Object.create(null), i, key, value ; while (!done) { value = entry.value; key = value[0]; keys.push(key); if (!(key in values)) { values[key] = []; } values[key].push(value[1]); entry = entries.next(); done = entry.done; } // not the champion in efficiency // but these two bits just do the job keys.sort(); for (i = 0; i < keys.length; i++) { this.delete(keys[i]); } for (i = 0; i < keys.length; i++) { key = keys[i]; this.append(key, values[key].shift()); } }; } function iterator(self, callback) { var items = []; self.forEach(callback, items); return iterable ? items[Symbol.iterator]() : { next: function() { var value = items.shift(); return {done: value === undefined, value: value}; } }; } /* istanbul ignore next */ (function (Object) { var dP = Object.defineProperty, gOPD = Object.getOwnPropertyDescriptor, createSearchParamsPollute = function (search) { function append(name, value) { URLSearchParamsProto.append.call(this, name, value); name = this.toString(); search.set.call(this._usp, name ? ('?' + name) : ''); } function del(name) { URLSearchParamsProto.delete.call(this, name); name = this.toString(); search.set.call(this._usp, name ? ('?' + name) : ''); } function set(name, value) { URLSearchParamsProto.set.call(this, name, value); name = this.toString(); search.set.call(this._usp, name ? ('?' + name) : ''); } return function (sp, value) { sp.append = append; sp.delete = del; sp.set = set; return dP(sp, '_usp', { configurable: true, writable: true, value: value }); }; }, createSearchParamsCreate = function (polluteSearchParams) { return function (obj, sp) { dP( obj, '_searchParams', { configurable: true, writable: true, value: polluteSearchParams(sp, obj) } ); return sp; }; }, updateSearchParams = function (sp) { var append = sp.append; sp.append = URLSearchParamsProto.append; URLSearchParams.call(sp, sp._usp.search.slice(1)); sp.append = append; }, verifySearchParams = function (obj, Class) { if (!(obj instanceof Class)) throw new TypeError( "'searchParams' accessed on an object that " + "does not implement interface " + Class.name ); }, upgradeClass = function (Class) { var ClassProto = Class.prototype, searchParams = gOPD(ClassProto, 'searchParams'), href = gOPD(ClassProto, 'href'), search = gOPD(ClassProto, 'search'), createSearchParams ; if (!searchParams && search && search.set) { createSearchParams = createSearchParamsCreate( createSearchParamsPollute(search) ); Object.defineProperties( ClassProto, { href: { get: function () { return href.get.call(this); }, set: function (value) { var sp = this._searchParams; href.set.call(this, value); if (sp) updateSearchParams(sp); } }, search: { get: function () { return search.get.call(this); }, set: function (value) { var sp = this._searchParams; search.set.call(this, value); if (sp) updateSearchParams(sp); } }, searchParams: { get: function () { verifySearchParams(this, Class); return this._searchParams || createSearchParams( this, new URLSearchParams(this.search.slice(1)) ); }, set: function (sp) { verifySearchParams(this, Class); createSearchParams(this, sp); } } } ); } } ; try { upgradeClass(HTMLAnchorElement); if (/^function|object$/.test(typeof URL) && URL.prototype) upgradeClass(URL); } catch (meh) {} }(Object)); }(self.URLSearchParams.prototype, Object)); ================================================ FILE: software/chainlink/js/packages/example-webserial-basic/public/3d_viewer/js/viewer.js ================================================ // https://coolors.co/dcd6f7-a6b1e1-b4869f-985f6f-4e4c67 var enclosure_height = 148.786; var enclosure_height_lower = 82.6451; var branch = 'master'; var url_params = new URLSearchParams(location.search); if (url_params.has('branch')) { branch = url_params.get('branch'); } var model_base_url = 'https://s3.amazonaws.com/splitflap-artifacts/' + branch + '/3d/3d_colored_stl/'; var debug = false; var error_container = document.getElementById("error-container"); var canvas = document.getElementById("viewer_canvas"); if (WEBGL.isWebGLAvailable()) { var scene = new THREE.Scene(); var render_width = canvas.clientWidth; var render_height = canvas.clientHeight; scene.fog = new THREE.Fog(0x985F6F, 1200, 4000); var camera = new THREE.PerspectiveCamera( 35, render_width/render_height, 1, 4000 ); camera.position.set(-400, 200, -400); var renderer = new THREE.WebGLRenderer({canvas: canvas}); function addShadowedLight(x, y, z, color, intensity, top, right, bottom, left) { var directionalLight = new THREE.DirectionalLight( color, intensity ); directionalLight.position.set( x, y, z ); scene.add( directionalLight ); directionalLight.castShadow = true; directionalLight.shadow.camera.left = left; directionalLight.shadow.camera.right = right; directionalLight.shadow.camera.top = top; directionalLight.shadow.camera.bottom = bottom; directionalLight.shadow.camera.near = 1200; directionalLight.shadow.camera.far = 1700; directionalLight.shadow.mapSize.width = 512; directionalLight.shadow.mapSize.height = 512; if (debug) { scene.add( new THREE.CameraHelper( directionalLight.shadow.camera )); } } // Ground var plane = new THREE.Mesh( new THREE.PlaneBufferGeometry(7000, 7000), new THREE.MeshPhongMaterial({color: 0x231A22, specular:0x101010}) ); plane.rotation.x = -Math.PI/2; plane.position.y = -0.1; plane.receiveShadow = true; scene.add(plane); // Lights scene.add( new THREE.HemisphereLight( 0x443333, 0x111122 ) ); addShadowedLight( 300, 1000, -1000, 0xE6CBE9, 0.9, 150, 100, -50, -100); addShadowedLight( -300, 1500, -100, 0xF6F1C0, 0.6, 100, 80, -80, -80); // renderer renderer.setSize( render_width, render_height); renderer.setClearColor( scene.fog.color ); renderer.setPixelRatio( window.devicePixelRatio ); renderer.gammaInput = true; renderer.gammaOutput = true; renderer.shadowMap.enabled = true; if (debug) { var stats = new Stats(); stats.showPanel( 0 ); document.body.appendChild( stats.dom ); } var render = function () { if (debug) { stats.begin(); } controls.update(); renderer.render(scene, camera); if (debug) { stats.end(); } requestAnimationFrame(render); }; // Camera Controls controls = new THREE.OrbitControls( camera, renderer.domElement ); controls.enableZoom = true; controls.minDistance = 80; controls.maxDistance = 1300; controls.validUpdate = function(position, quaternion, target) { // Don't allow camera to go below ground return position.y > 0 && target.y > 0; }; controls.autoRotateSpeed = 1.5; controls.addEventListener('start', function(){ controls.autoRotate = false; $("#banner").fadeOut(); }); var cameraTarget = new THREE.Vector3(0, enclosure_height_lower, 0); controls.target = cameraTarget; controls.update(); render(); var expected_models = 0; var loaded_models = 0; var loader = new THREE.XHRLoader(THREE.DefaultLoadingManager); loader.load(model_base_url + 'manifest.json', function(text) { var json = JSON.parse(text); var keys = Object.keys(json) expected_models = keys.length; for (var i = 0; i < expected_models; i++) { var color = json[keys[i]]; loadStl(model_base_url + keys[i], new THREE.Color( color[0], color[1], color[2] ).getHex()); } }); var loadStl = function(url, color) { var loader = new THREE.STLLoader(); loader.load(url, function(geometry) { var material = new THREE.MeshPhongMaterial({ color: color, specular: 0x111111, shininess: 10 }); var mesh = new THREE.Mesh(geometry, material); mesh.position.set(0, enclosure_height_lower, 0); mesh.rotation.set(-Math.PI/2, 0, 0); mesh.castShadow = true; mesh.receiveShadow = true; scene.add(mesh); loaded_models++; if (loaded_models === expected_models) { controls.autoRotate = true; $("#banner").fadeIn(1200); } }); }; if (canvas.classList.contains("embed")) { window.addEventListener('resize', function () { renderer.setSize(window.innerWidth, window.innerHeight); camera.aspect = window.innerWidth / window.innerHeight; camera.updateProjectionMatrix(); }); } } else { var warning = WEBGL.getWebGLErrorMessage(); error_container.appendChild(warning); } ================================================ FILE: software/chainlink/js/packages/example-webserial-basic/public/embed.html ================================================ splitflap
DIY split-flap display by Scott Bezek. https://github.com/scottbez1/splitflap.
================================================ FILE: software/chainlink/js/packages/example-webserial-basic/public/index.html ================================================ Splitflap Demo
================================================ FILE: software/chainlink/js/packages/example-webserial-basic/public/robots.txt ================================================ # https://www.robotstxt.org/robotstxt.html User-agent: * Disallow: ================================================ FILE: software/chainlink/js/packages/example-webserial-basic/src/App.tsx ================================================ import React, {ReactNode, SyntheticEvent, useCallback, useEffect, useRef, useState} from 'react' import Typography from '@mui/material/Typography' import Container from '@mui/material/Container' import {PB} from 'splitflapjs-proto' import {Alert, AlertTitle, AppBar, Button, Card, CardContent, Checkbox, CircularProgress, Dialog, DialogActions, DialogContent, DialogContentText, DialogTitle, FormControlLabel, Link, Toolbar, Tooltip,} from '@mui/material' import {NoUndefinedField} from './util' import {SplitflapWebSerial} from 'splitflapjs-webserial' import { applyResetModule, applySetFlaps } from 'splitflapjs-core/dist/util' const LEGACY_FLAPS = [ ' ', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '.', ',', "'", ] const FLAP_COLOR_BLOCKS: Record = { 'g': '#66d7d1', 'p': '#7a28cb', 'r': '#e63946', 'w': '#eeeeee', 'y': '#ffd639', } type Config = NoUndefinedField const defaultConfig: Config = { modules: [] } type LogLine = [Date, string] type LogDisplay = { lastN: number, after?: Date, title: string, body: string, } const renderFlapCharacter = (flapCharacter: string): ReactNode => FLAP_COLOR_BLOCKS[flapCharacter] !== undefined ? ( ) : ( String(flapCharacter).replace(' ', "\u00A0") ) export type AppProps = object export const App: React.FC = () => { const [splitflap, setSplitflap] = useState(null) const [splitflapState, setSplitflapState] = useState>( PB.SplitflapState.toObject(PB.SplitflapState.create(), { defaults: true, }) as NoUndefinedField, ) const [splitflapGeneralState, setSplitflapGeneralState] = useState | null>(); const [inputValue, setInputValue] = useState({val: '', user: true}); // Flap character set defaults to the legacy set, but will be updated if we get a GeneralState message // from firmware that supports reporting the flap character set. const [flapCharacterSet, setFlapCharacterSet] = useState(LEGACY_FLAPS) const legalString = (s: string) => { for (const c of s) { if (!flapCharacterSet.includes(c) && !Object.values(FLAP_COLOR_BLOCKS).includes(c)) { return false } } return true } const handleInputChange = (event: React.ChangeEvent) => { const { value } = event.target; const upper = value.toUpperCase() if (legalString(upper)) { setInputValue({val: upper, user: true}); } }; const [splitflapConfig, setSplitflapConfig] = useState(defaultConfig) useEffect(() => { console.log('send config', splitflapConfig) splitflap?.sendConfig(PB.SplitflapConfig.create(splitflapConfig)) }, [ splitflap, splitflapConfig.modules, ]) useEffect(() => { if (splitflapConfig.modules.length !== splitflapState.modules.length) { setSplitflapConfig({ modules: Array(splitflapState.modules.length).fill(null).map(() => { return {targetFlapIndex: 0, resetNonce: 0, movementNonce: 0} }) }) } }, [splitflapConfig, splitflapState]) const [splitflapLogs, setSplitflapLogs] = useState>([]) const [unsavedCalibration, setUnsavedCalibration] = useState(false) const [logDisplay, setLogDisplay] = useState(null) const [showDebugInfo, setShowDebugInfo] = useState(false) const initializationTimeoutRef = useRef>() const [showOutdatedFirmwareMessage, setShowOutdatedFirmwareMessage] = useState(false) const connectToSerial = async () => { try { if (navigator.serial) { const serialPort = await navigator.serial.requestPort({ filters: SplitflapWebSerial.USB_DEVICE_FILTERS, }) serialPort.addEventListener('disconnect', () => { setSplitflap(null) }) const splitflap = new SplitflapWebSerial(serialPort, (message) => { if (message.payload === 'splitflapState' && message.splitflapState !== null) { const state = PB.SplitflapState.create(message.splitflapState) const stateObj = PB.SplitflapState.toObject(state, { defaults: true, }) as NoUndefinedField setSplitflapState(stateObj) } else if (message.payload === 'log' && message.log !== null) { const newLog = message.log?.msg console.log('LOG from splitflap', newLog) if (newLog != null) { const ts = new Date() setSplitflapLogs((cur) => { const newLogs = cur.slice(-30) newLogs.push([ts, newLog]) return newLogs }) } } else if (message.payload === 'ack') { // Ignore (internal protocol implementation detail) } else if (message.payload === 'generalState' && message.generalState !== null) { const state = PB.GeneralState.create(message.generalState) const stateObj = PB.GeneralState.toObject(state, { defaults: true, }) as NoUndefinedField setSplitflapGeneralState(stateObj) const initializationTimeout = initializationTimeoutRef.current; if (initializationTimeout !== undefined) { clearTimeout(initializationTimeout) initializationTimeoutRef.current = undefined; setSplitflap(splitflap) } } else { console.log('Unhandled message type', message); } }) const loop = splitflap.openAndLoop() splitflap.sendConfig(PB.SplitflapConfig.create(splitflapConfig)) // Older firmware did not send general state; use a timeout to determine if we should fall back to legacy mode initializationTimeoutRef.current = setTimeout(() => { initializationTimeoutRef.current = undefined console.log('Timed out waiting for initial general state; assuming this is a legacy splitflap connected') setShowOutdatedFirmwareMessage(true) setSplitflap(splitflap) }, 500) await loop } else { console.error('Web Serial API is not supported in this browser.') setSplitflap(null) } } catch (error) { console.error('Error with serial port:', error) setSplitflap(null) } } useEffect(() => { if (splitflapGeneralState?.flapCharacterSet !== undefined) { console.log('Updating flap character set') const flaps = String.fromCharCode(...Array.from(splitflapGeneralState.flapCharacterSet)).split('') setFlapCharacterSet(flaps) } }, [JSON.stringify(splitflapGeneralState?.flapCharacterSet)]) const [forceFullRotations, setForceFullRotations] = useState(true) const updateSplitflap = useCallback((value: string, doNotForceFullRotations = false) => { // TODO: should probably change types and use applySetFlaps? setSplitflapConfig((cur) => { const newModules = [] for (let i = 0; i < splitflapState.modules.length; i++) { const targetFlapIndex = value[i] !== undefined ? flapCharacterSet.indexOf(value[i]) : 0 newModules.push({ targetFlapIndex, resetNonce: cur.modules[i]?.resetNonce ?? 0, movementNonce: (cur.modules[i]?.movementNonce ?? 0) + (forceFullRotations && !doNotForceFullRotations ? (targetFlapIndex === 0 ? 0 : 1) : 0), }) } return { modules: newModules, } }) }, [splitflapState.modules]) const numModules = splitflapState.modules.length const charWidth = Math.max(1000 / numModules, 40) return ( <> Splitflap Web Serial Demo {splitflap !== null ? ( <> {showOutdatedFirmwareMessage ? ( { setShowOutdatedFirmwareMessage(false) }}> Dismiss } > Outdated firmware The connected splitflap device is running outdated firmware; some functionality may be missing as a result. Please build and upload the latest firmware to the ESP32. ) : null} {unsavedCalibration ? ( { setLogDisplay({ lastN: 20, after: new Date(), title: "Saving calibration...", body: "Check the logs to confirm the calibration has saved successfully:" }) setTimeout(() => splitflap.saveAllOffsets(), 200) setUnsavedCalibration(false) }}> SAVE CALIBRATION } > Unsaved calibration Module calibration has been modified but has not been saved yet. It will be lost when the ESP32 is restarted. ) : null} Current state
{ splitflapState.modules.map((module, i) => { return ( splitflap?.offsetIncrementTenth(i)} increaseOffsetHalf={() => splitflap?.offsetIncrementHalf(i)} goToFlap={(flapIndex) => { const update: (number | null)[] = Array(i + 1).fill(null) update[i] = flapIndex setSplitflapConfig((curConfig) => { return PB.SplitflapConfig.toObject(applySetFlaps(PB.SplitflapConfig.create(curConfig), update), { defaults: true, }) as NoUndefinedField }) }} setOffsetToCurrentStep={ () => { splitflap?.offsetSetToCurrentStep(i) setUnsavedCalibration(true); } } />) }) }

Input
{ event.preventDefault() updateSplitflap(inputValue.val) setInputValue({val: '', user: true}) }}>
e.target.focus()} spellCheck="false" style={{ color: '#333', caret: 'block', paddingLeft: `${charWidth*0.12}px`, paddingTop: '20px', paddingBottom: '20px', letterSpacing: `${0.4 * charWidth}px`, border: 0, outline: 'none', backgroundImage: 'url("outline.svg")', backgroundSize: `${charWidth}px`, backgroundRepeat: 'repeat-x', backgroundPosition: `0px ${20 + charWidth*0.1}px`, fontSize: `${charWidth}px`, fontFamily: 'Roboto Mono', width: `${charWidth * numModules + 50}px`, }} />
setForceFullRotations((cur) => !cur)} />} label="Force full rotations" />

{ setShowDebugInfo((cur) => !cur) }}>{ showDebugInfo ? <>Hide debug info : <>Show debug info }

{ showDebugInfo ? ( <> { setLogDisplay({lastN: 20, title: "Recent logs", body:""}) }}>View logs
{ JSON.stringify(splitflapGeneralState, undefined, 4) }
) : null } { logDisplay !== null ? ( setLogDisplay(null)}> {logDisplay.title} {logDisplay.body} ) : null } ) : navigator.serial ? ( <> Welcome

If you have a Splitflap Display built with the Chainlink electronics system and you have up-to-date firmware installed on it, you can connect it via USB and control it using this web page. This uses Web Serial to talk to the device without needing to install any software on your computer.

) : ( Sorry, Web Serial API isn't available in your browser. Try the latest version of Chrome. )} { splitflap === null ?

Haven't built a display yet, or want to learn more? Check out the project landing page to see an interactive 3d model and read more about the project.

: null }
) } type SplitflapModuleDisplayProps = { charWidth: number, i: number, flapCharacterSet: string[], setSplitflapConfig: React.Dispatch>>, module: NoUndefinedField, increaseOffsetTenth: () => void, increaseOffsetHalf: () => void, goToFlap: (i: number) => void, setOffsetToCurrentStep: () => void, } enum CalibrationStep { FIND_FLAP_BOUNDARY = 0, ADJUST_WHOLE_FLAP_OFFSET = 1, CALIBRATING = 2, CONFIRM = 3, } const SplitflapModuleDisplay: React.FC = (props) => { const {charWidth, i, flapCharacterSet, setSplitflapConfig, module, increaseOffsetTenth, increaseOffsetHalf, goToFlap, setOffsetToCurrentStep } = props const [dialogOpen, setDialogOpen] = useState(false) const [calibrationStep, setCalibrationStep] = useState(CalibrationStep.FIND_FLAP_BOUNDARY); const calibrationComponent: Record> = { [CalibrationStep.FIND_FLAP_BOUNDARY]: () => <> Keep clicking this button until the flap flips...
then click Continue.
(If you accidentally go too far, just keep clicking until the next flap flips)
, [CalibrationStep.ADJUST_WHOLE_FLAP_OFFSET]: () => <> Now click the flap that is currently showing { Array.from(flapCharacterSet).map((f) => ( )) } , [CalibrationStep.CALIBRATING]: () => <> { module.moving ? ( Calibrating, please wait... ) : ( <> Has the module calibrated to the home position? ) } , [CalibrationStep.CONFIRM]: () => <> Calibration complete! , } const startCalibration = () => { goToFlap(0); setCalibrationStep(CalibrationStep.FIND_FLAP_BOUNDARY); setDialogOpen(true); } const onClick = (e: SyntheticEvent) => { console.log(e) if (e.type === 'click') { setSplitflapConfig((curConfig) => { return PB.SplitflapConfig.toObject(applyResetModule(PB.SplitflapConfig.create(curConfig), i), { defaults: true, }) as NoUndefinedField }) } else if (e.type === 'contextmenu') { e.preventDefault() startCalibration() } } return (
State: {PB.SplitflapState.ModuleState.toObject(PB.SplitflapState.ModuleState.create(module), { enums: String, }).state}
Missed home: {module.countMissedHome}
Unexpected home: {module.countUnexpectedHome}

Click to reset module
}>
{ module.state === PB.SplitflapState.ModuleState.State.NORMAL ? renderFlapCharacter(flapCharacterSet[module.flapIndex]) : module.state === PB.SplitflapState.ModuleState.State.LOOK_FOR_HOME ? : module.state === PB.SplitflapState.ModuleState.State.SENSOR_ERROR ? <>  : 'x' }
setDialogOpen(false)}> Calibrate module {calibrationComponent[calibrationStep]()} ) } type LogsProps = { logs: LogLine[], lastN: number, after?: Date, } const Logs: React.FC = (props) => { return (
{props.logs.slice(-props.lastN).filter(ll => props.after === undefined || ll[0] > props.after).map((ll => ll[0].toISOString() + ": " + ll[1])).join("\n")}
) } ================================================ FILE: software/chainlink/js/packages/example-webserial-basic/src/index.tsx ================================================ import React from 'react' import ReactDOM from 'react-dom/client' import {App} from './App' import '@fontsource/roboto/300.css' import '@fontsource/roboto/400.css' import '@fontsource/roboto/500.css' import '@fontsource/roboto/700.css' import '@fontsource/roboto-mono/400.css' import CssBaseline from '@mui/material/CssBaseline' import {createTheme, ThemeProvider} from '@mui/material/styles' const theme = createTheme() const root = ReactDOM.createRoot(document.getElementById('root') as HTMLElement) root.render( , ) ================================================ FILE: software/chainlink/js/packages/example-webserial-basic/src/react-app-env.d.ts ================================================ /// ================================================ FILE: software/chainlink/js/packages/example-webserial-basic/src/util.ts ================================================ export const exhaustiveCheck = (x: never): never => { throw new Error("Didn't expect to get here", x) } export const isSome = (v: T | null | undefined): v is T => { return v !== null && v !== undefined } export type NoUndefinedField = { [P in keyof T]-?: NoUndefinedField> } ================================================ FILE: software/chainlink/js/packages/example-webserial-basic/tsconfig.json ================================================ { "compilerOptions": { "target": "es6", "lib": ["dom", "dom.iterable", "esnext"], "allowJs": true, "skipLibCheck": true, "esModuleInterop": true, "allowSyntheticDefaultImports": true, "strict": true, "forceConsistentCasingInFileNames": true, "noFallthroughCasesInSwitch": true, "module": "esnext", "moduleResolution": "node", "resolveJsonModule": true, "isolatedModules": true, "noEmit": true, "jsx": "react-jsx" }, "include": ["src"] } ================================================ FILE: software/chainlink/js/packages/splitflapjs-core/.eslintrc ================================================ // .eslintrc { "parser": "@typescript-eslint/parser", "parserOptions": { "ecmaVersion": 12, "sourceType": "module" }, "plugins": ["@typescript-eslint"], "extends": ["eslint:recommended", "plugin:@typescript-eslint/recommended", "prettier"], "rules": { "@typescript-eslint/no-unused-vars": "error", "@typescript-eslint/consistent-type-definitions": ["error", "type"] }, "env": { "node": true } } ================================================ FILE: software/chainlink/js/packages/splitflapjs-core/.prettierrc ================================================ { "printWidth": 120, "tabWidth": 4, "useTabs": false, "semi": false, "singleQuote": true, "trailingComma": "all", "bracketSpacing": false, "arrowParens": "always" } ================================================ FILE: software/chainlink/js/packages/splitflapjs-core/package.json ================================================ { "name": "splitflapjs-core", "version": "1.0.0", "description": "Splitflap Interface Core", "main": "dist/index.js", "types": "dist/index.d.ts", "scripts": { "build": "tsc", "format": "prettier --write \"**/*.+(js|ts|json)\"", "lint": "eslint --ext .js,.ts ." }, "author": "", "license": "Apache-2.0", "dependencies": { "crc-32": "^1.2.0", "splitflapjs-proto": "^1.0.0" }, "devDependencies": { "@typescript-eslint/eslint-plugin": "^5.40.1", "@typescript-eslint/parser": "^5.40.1", "eslint": "^8.25.0", "prettier": "^2.4.1", "ts-node": "^10.2.1", "typescript": "^4.8.4" } } ================================================ FILE: software/chainlink/js/packages/splitflapjs-core/src/cobs.ts ================================================ // Based on https://github.com/tcr/node-cobs/blob/master/index.js export function encode(buf: Uint8Array) { const dest = [0] let code_ptr = 0 let code = 0x01 const finish = (incllast?: boolean) => { dest[code_ptr] = code code_ptr = dest.length incllast !== false && dest.push(0x00) code = 0x01 } for (let i = 0; i < buf.length; i++) { if (buf[i] == 0) { finish() } else { dest.push(buf[i]) code += 1 if (code == 0xff) { finish() } } } finish(false) return Uint8Array.from(dest) } export function decode(buf: Uint8Array) { const dest: number[] = [] for (let i = 0; i < buf.length; ) { const code = buf[i++] for (let j = 1; j < code; j++) { dest.push(buf[i++]) } if (code < 0xff && i < buf.length) { dest.push(0) } } return Uint8Array.from(dest) } ================================================ FILE: software/chainlink/js/packages/splitflapjs-core/src/index.ts ================================================ import * as CRC32 from 'crc-32' import { PB } from 'splitflapjs-proto' import { decode as cobsDecode, encode as cobsEncode } from './cobs' import { convert1dChainlinkTo2dDualRowZigZag, convert2dDualRowZigZagTo1dChainlink } from './util' export type MessageCallback = (message: PB.FromSplitflap) => void export type SendBytes = (packet: Uint8Array) => void type QueueEntry = { nonce: number encodedToSplitflapPayload: Uint8Array } export { cobsDecode, cobsEncode, convert1dChainlinkTo2dDualRowZigZag, convert2dDualRowZigZagTo1dChainlink } export class SplitflapCore { private static readonly RETRY_MILLIS = 250 public static readonly BAUD = 230400 public static readonly USB_DEVICE_FILTERS = [ // 10c4:ea60 Silicon Labs CP210x UART Bridge { usbVendorId: 0x10c4, usbProductId: 0xea60, }, // 1a86:55d4 QinHeng Electronics USB Single Serial { usbVendorId: 0x1a86, usbProductId: 0x55d4, }, ] private onMessage: MessageCallback private sendBytes: SendBytes private readonly outgoingQueue: QueueEntry[] = [] private lastNonce = 1 private retryTimeout: ReturnType | null = null protected portAvailable = false private buffer = new Uint8Array() constructor(onMessage: MessageCallback, sendBytes: SendBytes) { this.lastNonce = Math.floor(Math.random() * (2 ^ (32 - 1))) this.onMessage = onMessage this.sendBytes = sendBytes } public sendConfig(config: PB.SplitflapConfig): void { this.enqueueMessage( PB.ToSplitflap.create({ splitflapConfig: config, }), ) } private sendModuleCommand(position: number, command: PB.SplitflapCommand.ModuleCommand): void { const modules = Array(position + 1).fill(PB.SplitflapCommand.ModuleCommand.create({action: PB.SplitflapCommand.ModuleCommand.Action.NO_OP})) modules[position] = command this.enqueueMessage( PB.ToSplitflap.create({ splitflapCommand: PB.SplitflapCommand.create({ modules, }) }), ) } public saveAllOffsets(): void { this.enqueueMessage( PB.ToSplitflap.create({ splitflapCommand: PB.SplitflapCommand.create({ saveAllOffsets: true, }) }), ) } public offsetIncrementTenth(position: number): void { this.sendModuleCommand(position, PB.SplitflapCommand.ModuleCommand.create({action: PB.SplitflapCommand.ModuleCommand.Action.INCREASE_OFFSET_TENTH})) } public offsetIncrementHalf(position: number): void { this.sendModuleCommand(position, PB.SplitflapCommand.ModuleCommand.create({action: PB.SplitflapCommand.ModuleCommand.Action.INCREASE_OFFSET_HALF})) } public offsetSetToCurrentStep(position: number): void { this.sendModuleCommand(position, PB.SplitflapCommand.ModuleCommand.create({action: PB.SplitflapCommand.ModuleCommand.Action.SET_OFFSET})) } /** * Perform a hard reset of the splitflap MCU. May take a few seconds. */ protected async hardReset(): Promise { throw new Error("Not implemented!") } protected onStart() { this.enqueueMessage(PB.ToSplitflap.create({ requestState: PB.RequestState.create(), })) } protected onReceivedData(data: Uint8Array) { this.buffer = Uint8Array.from([...this.buffer, ...data]) let i: number // Iterate 0-delimited packets while ((i = this.buffer.indexOf(0)) != -1) { const raw_buffer = this.buffer.subarray(0, i) const packet = cobsDecode(raw_buffer) this.buffer = this.buffer.slice(i + 1) if (packet.length <= 4) { console.debug(`Received short packet ${this.buffer.slice(0, i)}`) continue } const payload = packet.slice(0, packet.length - 4) // Validate CRC32 const crc_buf = packet.slice(packet.length - 4, packet.length) const provided_crc = crc_buf[0] | (crc_buf[1] << 8) | (crc_buf[2] << 16) | (crc_buf[3] << 24) const crc = CRC32.buf(payload) if (crc !== provided_crc) { console.debug(`Bad CRC. Expected ${crc} but received ${provided_crc}`) console.debug(raw_buffer.toString()) continue } let message: PB.FromSplitflap try { message = PB.FromSplitflap.decode(payload) } catch (err) { console.warn(`Invalid protobuf message ${payload}`) return } // TODO: add protocolVersion to spec // if (message.protocolVersion !== PROTOBUF_PROTOCOL_VERSION) { // console.warn( // `Invalid protocol version. Expected ${PROTOBUF_PROTOCOL_VERSION}, received ${message.protocolVersion}`, // ) // return // } if (message.payload === 'ack') { const nonce = message.ack?.nonce ?? undefined if (nonce === undefined) { console.warn('Received ack without nonce') } else { this.handleAck(nonce) } } this.onMessage(message) } } private enqueueMessage(message: PB.ToSplitflap) { if (!this.portAvailable) { return } // TODO: add protocolVersion to spec // message.protocolVersion = PROTOBUF_PROTOCOL_VERSION message.nonce = this.lastNonce++ // Encode before enqueueing to ensure messages don't change once they're queued const payload = PB.ToSplitflap.encode(message).finish() if (this.outgoingQueue.length > 10) { console.warn(`Splitflap outgoing queue overflowed! Dropping ${this.outgoingQueue.length} pending messages!`) this.outgoingQueue.length = 0 } this.outgoingQueue.push({ nonce: message.nonce, encodedToSplitflapPayload: payload, }) this.serviceQueue() } private handleAck(nonce: number): void { if (this.outgoingQueue.length > 0 && nonce === this.outgoingQueue[0].nonce) { if (this.retryTimeout !== null) { clearTimeout(this.retryTimeout) this.retryTimeout = null } this.outgoingQueue.shift() this.serviceQueue() } else { console.log(`Ignoring unexpected ack for nonce ${nonce}`) } } private serviceQueue(): void { if (!this.portAvailable) { return } if (this.retryTimeout !== null) { // Retry is pending; let the pending timeout handle the next step return } if (this.outgoingQueue.length === 0) { return } const {encodedToSplitflapPayload: payload} = this.outgoingQueue[0] const crc = CRC32.buf(payload) const crcArray = [crc & 0xff, (crc >>> 8) & 0xff, (crc >>> 16) & 0xff, (crc >>> 24) & 0xff] const packet = new Uint8Array(payload.length + 4) packet.set(payload, 0) packet.set(crcArray, payload.length) const cobsEncodedPacket = cobsEncode(packet) const encodedDelimitedPacket = new Uint8Array(cobsEncodedPacket.length + 1) encodedDelimitedPacket.set(cobsEncodedPacket, 0) encodedDelimitedPacket.set([0], cobsEncodedPacket.length) this.retryTimeout = setTimeout(() => { this.retryTimeout = null console.log(`Retrying ToSplitflap...`) this.serviceQueue() }, SplitflapCore.RETRY_MILLIS) console.debug( `Sent ${payload.length} byte payload with CRC ${(crc >>> 0).toString(16)} (${ cobsEncodedPacket.length } bytes encoded)`, encodedDelimitedPacket, ) this.sendBytes(encodedDelimitedPacket) } } ================================================ FILE: software/chainlink/js/packages/splitflapjs-core/src/util.ts ================================================ import { PB } from "splitflapjs-proto" export const applySetFlaps = (config: PB.SplitflapConfig, positions: Array, forceMovement?: Array): PB.SplitflapConfig => { if (positions.length > config.modules.length) { console.warn(`Ignoring applySetFlaps: mismatch in positions specified (${positions.length}) vs config (${config.modules.length})!`) return config } if (forceMovement !== undefined && forceMovement.length != positions.length) { throw new Error(`forceMovement (${forceMovement.length}) and positions (${positions.length}) length mismatch!`) } const newConfig = PB.SplitflapConfig.create(config) for (let i = 0; i < positions.length; i++) { if (positions[i] !== null) { newConfig.modules[i].targetFlapIndex = positions[i] } if (forceMovement !== undefined && forceMovement[i]) { newConfig.modules[i].movementNonce = ((newConfig.modules[i].movementNonce || 0) + 1) % 256 } } return newConfig } export const applyResetModules = (config: PB.SplitflapConfig, positions: boolean[]): PB.SplitflapConfig => { if (positions.length > config.modules.length) { console.warn(`Ignoring applyResetModules: mismatch in positions specified (${positions.length}) vs config (${config.modules.length})!`) return config } const newConfig = PB.SplitflapConfig.create(config) for (let i = 0; i < positions.length; i++) { if (positions[i]) { newConfig.modules[i].resetNonce = ((newConfig.modules[i].resetNonce || 0) + 1) % 256 } } return newConfig } export const applyResetModule = (config: PB.SplitflapConfig, position: number): PB.SplitflapConfig => { const reset = new Array(position + 1) reset.fill(false) reset[position] = true return applyResetModules(config, reset) } export function convert2dDualRowZigZagTo1dChainlink(arr: T[][], flipFirstRows = false): T[] { const cols = arr[0].length const rows = arr.length const out: T[] = new Array(cols * rows) for (let i = 0; i < cols * rows; i++) { const rowPair = Math.floor(Math.floor(i / 2) / cols) const upsideDownRowPair = (rowPair + (flipFirstRows ? 1 : 0)) % 2 !== 0 const rowBase = rowPair * 2 const rowOffset = upsideDownRowPair ? i % 2 : 1 - (i % 2) const row = rowBase + rowOffset const col = upsideDownRowPair ? cols - 1 - (Math.floor(i / 2) % cols) : Math.floor(i / 2) % cols out[i] = arr[row][col] } return out } export function convert1dChainlinkTo2dDualRowZigZag(arr: T[], cols: number, flipFirstRows = false): T[][] { const rows = Math.ceil(arr.length / cols) const out: T[][] = new Array(rows) for (let i = 0; i < rows; i++) { out[i] = new Array(cols) } for (let i = 0; i < arr.length; i++) { const rowPair = Math.floor(Math.floor(i / 2) / cols) const upsideDownRowPair = (rowPair + (flipFirstRows ? 1 : 0)) % 2 !== 0 const rowBase = rowPair * 2 const rowOffset = upsideDownRowPair ? i % 2 : 1 - (i % 2) const row = rowBase + rowOffset const col = upsideDownRowPair ? cols - 1 - (Math.floor(i / 2) % cols) : Math.floor(i / 2) % cols out[row][col] = arr[i] } return out } ================================================ FILE: software/chainlink/js/packages/splitflapjs-core/tsconfig.json ================================================ { "compilerOptions": { /* Visit https://aka.ms/tsconfig.json to read more about this file */ /* Projects */ // "incremental": true, /* Enable incremental compilation */ // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ // "tsBuildInfoFile": "./", /* Specify the folder for .tsbuildinfo incremental compilation files. */ // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects */ // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ /* Language and Environment */ "target": "es6" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */, // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ // "jsx": "preserve", /* Specify what JSX code is generated. */ // "experimentalDecorators": true, /* Enable experimental support for TC39 stage 2 draft decorators. */ // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h' */ // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using `jsx: react-jsx*`.` */ // "reactNamespace": "", /* Specify the object invoked for `createElement`. This only applies when targeting `react` JSX emit. */ // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ /* Modules */ "module": "commonjs" /* Specify what module code is generated. */, // "rootDir": "./", /* Specify the root folder within your source files. */ // "moduleResolution": "node", /* Specify how TypeScript looks up a file from a given module specifier. */ // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ // "paths" :{ // "*": ["./src/typings/*", "./*"] // }, // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ // "typeRoots": ["src/typings"], /* Specify multiple folders that act like `./node_modules/@types`. */ // "types": [], /* Specify type package names to be included without being referenced in a source file. */ // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ // "resolveJsonModule": true, /* Enable importing .json files */ // "noResolve": true, /* Disallow `import`s, `require`s or ``s from expanding the number of files TypeScript should add to a project. */ /* JavaScript Support */ "allowJs": true /* Allow JavaScript files to be a part of your program. Use the `checkJS` option to get errors from these files. */, // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from `node_modules`. Only applicable with `allowJs`. */ /* Emit */ "declaration": true /* Generate .d.ts files from TypeScript and JavaScript files in your project. */, // "declarationMap": true, /* Create sourcemaps for d.ts files. */ // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If `declaration` is true, also designates a file that bundles all .d.ts output. */ "outDir": "./dist" /* Specify an output folder for all emitted files. */, // "removeComments": true, /* Disable emitting comments. */ // "noEmit": true, /* Disable emitting files from a compilation. */ // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types */ // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ // "newLine": "crlf", /* Set the newline character for emitting files. */ // "stripInternal": true, /* Disable emitting declarations that have `@internal` in their JSDoc comments. */ // "noEmitHelpers": true, /* Disable generating custom helper functions like `__extends` in compiled output. */ "noEmitOnError": true /* Disable emitting files if any type checking errors are reported. */, // "preserveConstEnums": true, /* Disable erasing `const enum` declarations in generated code. */ // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ /* Interop Constraints */ // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ "esModuleInterop": true /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables `allowSyntheticDefaultImports` for type compatibility. */, // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ "forceConsistentCasingInFileNames": true /* Ensure that casing is correct in imports. */, /* Type Checking */ "strict": true /* Enable all strict type-checking options. */, "noImplicitAny": true /* Enable error reporting for expressions and declarations with an implied `any` type.. */, "strictNullChecks": true /* When type checking, take into account `null` and `undefined`. */, // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ // "strictBindCallApply": true, /* Check that the arguments for `bind`, `call`, and `apply` methods match the original function. */ // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ // "noImplicitThis": true, /* Enable error reporting when `this` is given the type `any`. */ // "useUnknownInCatchVariables": true, /* Type catch clause variables as 'unknown' instead of 'any'. */ // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ // "noUnusedLocals": true, /* Enable error reporting when a local variables aren't read. */ // "noUnussedParameters": true, /* Raise an error when a function parameter isn't read */ // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ "noImplicitReturns": true /* Enable error reporting for codepaths that do not explicitly return in a function. */, "noFallthroughCasesInSwitch": true /* Enable error reporting for fallthrough cases in switch statements. */, // "noUncheckedIndexedAccess": true, /* Include 'undefined' in index signature results */ "noImplicitOverride": true /* Ensure overriding members in derived classes are marked with an override modifier. */, // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type */ // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ /* Completeness */ // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ "skipLibCheck": true /* Skip type checking all .d.ts files. */ }, "include": ["src"], "exclude": ["node_modules"] } ================================================ FILE: software/chainlink/js/packages/splitflapjs-node/.eslintrc ================================================ // .eslintrc { "parser": "@typescript-eslint/parser", "parserOptions": { "ecmaVersion": 12, "sourceType": "module" }, "plugins": ["@typescript-eslint"], "extends": ["eslint:recommended", "plugin:@typescript-eslint/recommended", "prettier"], "rules": { "@typescript-eslint/no-unused-vars": "error", "@typescript-eslint/consistent-type-definitions": ["error", "type"] }, "env": { "node": true } } ================================================ FILE: software/chainlink/js/packages/splitflapjs-node/.prettierrc ================================================ { "printWidth": 120, "tabWidth": 4, "useTabs": false, "semi": false, "singleQuote": true, "trailingComma": "all", "bracketSpacing": false, "arrowParens": "always" } ================================================ FILE: software/chainlink/js/packages/splitflapjs-node/package.json ================================================ { "name": "splitflapjs-node", "version": "1.0.0", "description": "Splitflap Library for Node servers", "main": "dist/index.js", "types": "dist/index.d.ts", "scripts": { "build": "tsc", "format": "prettier --write \"**/*.+(js|ts|json)\"", "lint": "eslint --ext .js,.ts ." }, "author": "", "license": "Apache-2.0", "dependencies": { "serialport": "^9.2.4", "splitflapjs-core": "^1.0.0" }, "devDependencies": { "@types/serialport": "^8.0.3", "@typescript-eslint/eslint-plugin": "^5.40.1", "@typescript-eslint/parser": "^5.40.1", "eslint": "^8.25.0", "prettier": "^2.4.1", "ts-node": "^10.2.1", "typescript": "^4.8.4" } } ================================================ FILE: software/chainlink/js/packages/splitflapjs-node/src/index.ts ================================================ import SerialPort = require('serialport') import {MessageCallback, SplitflapCore} from 'splitflapjs-core' const sleep = (millis: number) => { return new Promise((resolve) => { setTimeout(resolve, millis) }) } export class SplitflapNode extends SplitflapCore { private port: SerialPort | null constructor(serialPath: string, onMessage: MessageCallback) { super(onMessage, (packet: Uint8Array) => { this.port?.write(Buffer.from(packet)) }) this.port = new SerialPort(serialPath, { baudRate: SplitflapCore.BAUD, }) this.port.on('data', (data: Uint8Array) => { this.onReceivedData(data) }) this.portAvailable = true this.onStart(); } public override async hardReset() { if (this.port === null) { console.warn('Not connected to splitflap, so hard reset isn\'t possible') return } this.port.set({rts: true, dtr: false}) await sleep(200) this.port.set({rts: true, dtr: true}) await sleep(200) return } } ================================================ FILE: software/chainlink/js/packages/splitflapjs-node/tsconfig.json ================================================ { "compilerOptions": { /* Visit https://aka.ms/tsconfig.json to read more about this file */ /* Projects */ // "incremental": true, /* Enable incremental compilation */ // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ // "tsBuildInfoFile": "./", /* Specify the folder for .tsbuildinfo incremental compilation files. */ // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects */ // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ /* Language and Environment */ "target": "es6" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */, // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ // "jsx": "preserve", /* Specify what JSX code is generated. */ // "experimentalDecorators": true, /* Enable experimental support for TC39 stage 2 draft decorators. */ // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h' */ // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using `jsx: react-jsx*`.` */ // "reactNamespace": "", /* Specify the object invoked for `createElement`. This only applies when targeting `react` JSX emit. */ // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ /* Modules */ "module": "commonjs" /* Specify what module code is generated. */, // "rootDir": "./", /* Specify the root folder within your source files. */ // "moduleResolution": "node", /* Specify how TypeScript looks up a file from a given module specifier. */ // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ // "paths" :{ // "*": ["./src/typings/*", "./*"] // }, // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ // "typeRoots": ["src/typings"], /* Specify multiple folders that act like `./node_modules/@types`. */ // "types": [], /* Specify type package names to be included without being referenced in a source file. */ // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ // "resolveJsonModule": true, /* Enable importing .json files */ // "noResolve": true, /* Disallow `import`s, `require`s or ``s from expanding the number of files TypeScript should add to a project. */ /* JavaScript Support */ "allowJs": true /* Allow JavaScript files to be a part of your program. Use the `checkJS` option to get errors from these files. */, // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from `node_modules`. Only applicable with `allowJs`. */ /* Emit */ "declaration": true /* Generate .d.ts files from TypeScript and JavaScript files in your project. */, // "declarationMap": true, /* Create sourcemaps for d.ts files. */ // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If `declaration` is true, also designates a file that bundles all .d.ts output. */ "outDir": "./dist" /* Specify an output folder for all emitted files. */, // "removeComments": true, /* Disable emitting comments. */ // "noEmit": true, /* Disable emitting files from a compilation. */ // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types */ // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ // "newLine": "crlf", /* Set the newline character for emitting files. */ // "stripInternal": true, /* Disable emitting declarations that have `@internal` in their JSDoc comments. */ // "noEmitHelpers": true, /* Disable generating custom helper functions like `__extends` in compiled output. */ "noEmitOnError": true /* Disable emitting files if any type checking errors are reported. */, // "preserveConstEnums": true, /* Disable erasing `const enum` declarations in generated code. */ // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ /* Interop Constraints */ // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ "esModuleInterop": true /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables `allowSyntheticDefaultImports` for type compatibility. */, // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ "forceConsistentCasingInFileNames": true /* Ensure that casing is correct in imports. */, /* Type Checking */ "strict": true /* Enable all strict type-checking options. */, "noImplicitAny": true /* Enable error reporting for expressions and declarations with an implied `any` type.. */, "strictNullChecks": true /* When type checking, take into account `null` and `undefined`. */, // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ // "strictBindCallApply": true, /* Check that the arguments for `bind`, `call`, and `apply` methods match the original function. */ // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ // "noImplicitThis": true, /* Enable error reporting when `this` is given the type `any`. */ // "useUnknownInCatchVariables": true, /* Type catch clause variables as 'unknown' instead of 'any'. */ // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ // "noUnusedLocals": true, /* Enable error reporting when a local variables aren't read. */ // "noUnussedParameters": true, /* Raise an error when a function parameter isn't read */ // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ "noImplicitReturns": true /* Enable error reporting for codepaths that do not explicitly return in a function. */, "noFallthroughCasesInSwitch": true /* Enable error reporting for fallthrough cases in switch statements. */, // "noUncheckedIndexedAccess": true, /* Include 'undefined' in index signature results */ "noImplicitOverride": true /* Ensure overriding members in derived classes are marked with an override modifier. */, // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type */ // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ /* Completeness */ // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ "skipLibCheck": true /* Skip type checking all .d.ts files. */ }, "include": ["src"], "exclude": ["node_modules"] } ================================================ FILE: software/chainlink/js/packages/splitflapjs-proto/package.json ================================================ { "name": "splitflapjs-proto", "version": "1.0.0", "description": "Splitflap interface protobufs", "main": "dist/splitflap_proto.js", "types": "dist/splitflap_proto.d.ts", "scripts": { "build": "mkdir -p dist && pbjs --target static-module --out dist/splitflap_proto.js ../../../../../proto/*.proto && pbts -o dist/splitflap_proto.d.ts dist/splitflap_proto.js" }, "author": "", "license": "Apache-2.0", "dependencies": { "protobufjs": "^6.11.2" }, "devDependencies": { } } ================================================ FILE: software/chainlink/js/packages/splitflapjs-webserial/.eslintrc ================================================ // .eslintrc { "parser": "@typescript-eslint/parser", "parserOptions": { "ecmaVersion": 12, "sourceType": "module" }, "plugins": ["@typescript-eslint"], "extends": ["eslint:recommended", "plugin:@typescript-eslint/recommended", "prettier"], "rules": { "@typescript-eslint/no-unused-vars": "error", "@typescript-eslint/consistent-type-definitions": ["error", "type"] }, "env": { "node": true } } ================================================ FILE: software/chainlink/js/packages/splitflapjs-webserial/.prettierrc ================================================ { "printWidth": 120, "tabWidth": 4, "useTabs": false, "semi": false, "singleQuote": true, "trailingComma": "all", "bracketSpacing": false, "arrowParens": "always" } ================================================ FILE: software/chainlink/js/packages/splitflapjs-webserial/package.json ================================================ { "name": "splitflapjs-webserial", "version": "1.0.0", "description": "Splitflap Interface Library for Web Serial", "main": "dist/index.js", "types": "dist/index.d.ts", "scripts": { "build": "tsc", "format": "prettier --write \"**/*.+(js|ts|json)\"", "lint": "eslint --ext .js,.ts ." }, "author": "", "license": "Apache-2.0", "dependencies": { "splitflapjs-core": "^1.0.0", "splitflapjs-proto": "^1.0.0" }, "devDependencies": { "@typescript-eslint/eslint-plugin": "^5.40.1", "@typescript-eslint/parser": "^5.40.1", "@types/w3c-web-serial": "^1.0.3", "eslint": "^8.25.0", "prettier": "^2.4.1", "ts-node": "^10.2.1", "typescript": "^4.8.4" } } ================================================ FILE: software/chainlink/js/packages/splitflapjs-webserial/src/index.ts ================================================ import {MessageCallback, SplitflapCore} from 'splitflapjs-core' export class SplitflapWebSerial extends SplitflapCore { private port: SerialPort | null private writer: WritableStreamDefaultWriter | undefined = undefined constructor(port: SerialPort, onMessage: MessageCallback) { super(onMessage, (packet: Uint8Array) => { this.writer?.write(packet).catch(this.onError) }) this.port = port this.portAvailable = true this.onStart(); this.port.addEventListener('disconnect', () => { console.log('shutting down on disconnect') this.port = null this.portAvailable = false }) } public async openAndLoop() { if (this.port === null) { return } await this.port.open({baudRate: SplitflapCore.BAUD}) if (this.port.readable === null || this.port.writable === null) { throw new Error('Port missing readable or writable!') } const reader = this.port.readable.getReader() try { const writer = this.port.writable.getWriter() writer.write(Uint8Array.from([0, 0, 0, 0, 0, 0, 0, 0])).catch(this.onError) this.writer = writer try { // eslint-disable-next-line no-constant-condition while (true) { const {value, done} = await reader.read() if (done) { break } if (value !== undefined) { this.onReceivedData(value) } } } finally { console.log('Releasing writer') writer?.releaseLock() } } finally { console.log('Releasing reader') reader.releaseLock() } } private onError(e: unknown) { console.error('Error writing serial', e) this.port?.close() this.port = null this.portAvailable = false this.writer = undefined } } ================================================ FILE: software/chainlink/js/packages/splitflapjs-webserial/tsconfig.json ================================================ { "compilerOptions": { /* Visit https://aka.ms/tsconfig.json to read more about this file */ /* Projects */ // "incremental": true, /* Enable incremental compilation */ // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ // "tsBuildInfoFile": "./", /* Specify the folder for .tsbuildinfo incremental compilation files. */ // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects */ // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ /* Language and Environment */ "target": "es6" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */, // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ // "jsx": "preserve", /* Specify what JSX code is generated. */ // "experimentalDecorators": true, /* Enable experimental support for TC39 stage 2 draft decorators. */ // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h' */ // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using `jsx: react-jsx*`.` */ // "reactNamespace": "", /* Specify the object invoked for `createElement`. This only applies when targeting `react` JSX emit. */ // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ /* Modules */ "module": "commonjs" /* Specify what module code is generated. */, // "rootDir": "./", /* Specify the root folder within your source files. */ // "moduleResolution": "node", /* Specify how TypeScript looks up a file from a given module specifier. */ // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ // "paths" :{ // "*": ["./src/typings/*", "./*"] // }, // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ // "typeRoots": ["src/typings"], /* Specify multiple folders that act like `./node_modules/@types`. */ // "types": [], /* Specify type package names to be included without being referenced in a source file. */ // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ // "resolveJsonModule": true, /* Enable importing .json files */ // "noResolve": true, /* Disallow `import`s, `require`s or ``s from expanding the number of files TypeScript should add to a project. */ /* JavaScript Support */ "allowJs": true /* Allow JavaScript files to be a part of your program. Use the `checkJS` option to get errors from these files. */, // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from `node_modules`. Only applicable with `allowJs`. */ /* Emit */ "declaration": true /* Generate .d.ts files from TypeScript and JavaScript files in your project. */, // "declarationMap": true, /* Create sourcemaps for d.ts files. */ // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If `declaration` is true, also designates a file that bundles all .d.ts output. */ "outDir": "./dist" /* Specify an output folder for all emitted files. */, // "removeComments": true, /* Disable emitting comments. */ // "noEmit": true, /* Disable emitting files from a compilation. */ // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types */ // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ // "newLine": "crlf", /* Set the newline character for emitting files. */ // "stripInternal": true, /* Disable emitting declarations that have `@internal` in their JSDoc comments. */ // "noEmitHelpers": true, /* Disable generating custom helper functions like `__extends` in compiled output. */ "noEmitOnError": true /* Disable emitting files if any type checking errors are reported. */, // "preserveConstEnums": true, /* Disable erasing `const enum` declarations in generated code. */ // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ /* Interop Constraints */ // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ "esModuleInterop": true /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables `allowSyntheticDefaultImports` for type compatibility. */, // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ "forceConsistentCasingInFileNames": true /* Ensure that casing is correct in imports. */, /* Type Checking */ "strict": true /* Enable all strict type-checking options. */, "noImplicitAny": true /* Enable error reporting for expressions and declarations with an implied `any` type.. */, "strictNullChecks": true /* When type checking, take into account `null` and `undefined`. */, // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ // "strictBindCallApply": true, /* Check that the arguments for `bind`, `call`, and `apply` methods match the original function. */ // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ // "noImplicitThis": true, /* Enable error reporting when `this` is given the type `any`. */ // "useUnknownInCatchVariables": true, /* Type catch clause variables as 'unknown' instead of 'any'. */ // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ // "noUnusedLocals": true, /* Enable error reporting when a local variables aren't read. */ // "noUnussedParameters": true, /* Raise an error when a function parameter isn't read */ // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ "noImplicitReturns": true /* Enable error reporting for codepaths that do not explicitly return in a function. */, "noFallthroughCasesInSwitch": true /* Enable error reporting for fallthrough cases in switch statements. */, // "noUncheckedIndexedAccess": true, /* Include 'undefined' in index signature results */ "noImplicitOverride": true /* Ensure overriding members in derived classes are marked with an override modifier. */, // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type */ // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ /* Completeness */ // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ "skipLibCheck": true /* Skip type checking all .d.ts files. */ }, "include": ["src"], "exclude": ["node_modules"] } ================================================ FILE: software/chainlink/proto_gen/nanopb_pb2.py ================================================ # -*- coding: utf-8 -*- # Generated by the protocol buffer compiler. DO NOT EDIT! # source: nanopb.proto from google.protobuf.internal import enum_type_wrapper from google.protobuf import descriptor as _descriptor from google.protobuf import message as _message from google.protobuf import reflection as _reflection from google.protobuf import symbol_database as _symbol_database # @@protoc_insertion_point(imports) _sym_db = _symbol_database.Default() from google.protobuf import descriptor_pb2 as google_dot_protobuf_dot_descriptor__pb2 DESCRIPTOR = _descriptor.FileDescriptor( name='nanopb.proto', package='', syntax='proto2', serialized_options=b'\n\030fi.kapsi.koti.jpa.nanopb', create_key=_descriptor._internal_create_key, serialized_pb=b'\n\x0cnanopb.proto\x1a google/protobuf/descriptor.proto\"\xf4\x06\n\rNanoPBOptions\x12\x10\n\x08max_size\x18\x01 \x01(\x05\x12\x12\n\nmax_length\x18\x0e \x01(\x05\x12\x11\n\tmax_count\x18\x02 \x01(\x05\x12&\n\x08int_size\x18\x07 \x01(\x0e\x32\x08.IntSize:\nIS_DEFAULT\x12$\n\x04type\x18\x03 \x01(\x0e\x32\n.FieldType:\nFT_DEFAULT\x12\x18\n\nlong_names\x18\x04 \x01(\x08:\x04true\x12\x1c\n\rpacked_struct\x18\x05 \x01(\x08:\x05\x66\x61lse\x12\x1a\n\x0bpacked_enum\x18\n \x01(\x08:\x05\x66\x61lse\x12\x1b\n\x0cskip_message\x18\x06 \x01(\x08:\x05\x66\x61lse\x12\x18\n\tno_unions\x18\x08 \x01(\x08:\x05\x66\x61lse\x12\r\n\x05msgid\x18\t \x01(\r\x12\x1e\n\x0f\x61nonymous_oneof\x18\x0b \x01(\x08:\x05\x66\x61lse\x12\x15\n\x06proto3\x18\x0c \x01(\x08:\x05\x66\x61lse\x12#\n\x14proto3_singular_msgs\x18\x15 \x01(\x08:\x05\x66\x61lse\x12\x1d\n\x0e\x65num_to_string\x18\r \x01(\x08:\x05\x66\x61lse\x12\x1b\n\x0c\x66ixed_length\x18\x0f \x01(\x08:\x05\x66\x61lse\x12\x1a\n\x0b\x66ixed_count\x18\x10 \x01(\x08:\x05\x66\x61lse\x12\x1e\n\x0fsubmsg_callback\x18\x16 \x01(\x08:\x05\x66\x61lse\x12/\n\x0cmangle_names\x18\x11 \x01(\x0e\x32\x11.TypenameMangling:\x06M_NONE\x12(\n\x11\x63\x61llback_datatype\x18\x12 \x01(\t:\rpb_callback_t\x12\x34\n\x11\x63\x61llback_function\x18\x13 \x01(\t:\x19pb_default_field_callback\x12\x30\n\x0e\x64\x65scriptorsize\x18\x14 \x01(\x0e\x32\x0f.DescriptorSize:\x07\x44S_AUTO\x12\x1a\n\x0b\x64\x65\x66\x61ult_has\x18\x17 \x01(\x08:\x05\x66\x61lse\x12\x0f\n\x07include\x18\x18 \x03(\t\x12\x0f\n\x07\x65xclude\x18\x1a \x03(\t\x12\x0f\n\x07package\x18\x19 \x01(\t\x12\x41\n\rtype_override\x18\x1b \x01(\x0e\x32*.google.protobuf.FieldDescriptorProto.Type\x12\x19\n\x0bsort_by_tag\x18\x1c \x01(\x08:\x04true*i\n\tFieldType\x12\x0e\n\nFT_DEFAULT\x10\x00\x12\x0f\n\x0b\x46T_CALLBACK\x10\x01\x12\x0e\n\nFT_POINTER\x10\x04\x12\r\n\tFT_STATIC\x10\x02\x12\r\n\tFT_IGNORE\x10\x03\x12\r\n\tFT_INLINE\x10\x05*D\n\x07IntSize\x12\x0e\n\nIS_DEFAULT\x10\x00\x12\x08\n\x04IS_8\x10\x08\x12\t\n\x05IS_16\x10\x10\x12\t\n\x05IS_32\x10 \x12\t\n\x05IS_64\x10@*Z\n\x10TypenameMangling\x12\n\n\x06M_NONE\x10\x00\x12\x13\n\x0fM_STRIP_PACKAGE\x10\x01\x12\r\n\tM_FLATTEN\x10\x02\x12\x16\n\x12M_PACKAGE_INITIALS\x10\x03*E\n\x0e\x44\x65scriptorSize\x12\x0b\n\x07\x44S_AUTO\x10\x00\x12\x08\n\x04\x44S_1\x10\x01\x12\x08\n\x04\x44S_2\x10\x02\x12\x08\n\x04\x44S_4\x10\x04\x12\x08\n\x04\x44S_8\x10\x08:E\n\x0enanopb_fileopt\x12\x1c.google.protobuf.FileOptions\x18\xf2\x07 \x01(\x0b\x32\x0e.NanoPBOptions:G\n\rnanopb_msgopt\x12\x1f.google.protobuf.MessageOptions\x18\xf2\x07 \x01(\x0b\x32\x0e.NanoPBOptions:E\n\x0enanopb_enumopt\x12\x1c.google.protobuf.EnumOptions\x18\xf2\x07 \x01(\x0b\x32\x0e.NanoPBOptions:>\n\x06nanopb\x12\x1d.google.protobuf.FieldOptions\x18\xf2\x07 \x01(\x0b\x32\x0e.NanoPBOptionsB\x1a\n\x18\x66i.kapsi.koti.jpa.nanopb' , dependencies=[google_dot_protobuf_dot_descriptor__pb2.DESCRIPTOR,]) _FIELDTYPE = _descriptor.EnumDescriptor( name='FieldType', full_name='FieldType', filename=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key, values=[ _descriptor.EnumValueDescriptor( name='FT_DEFAULT', index=0, number=0, serialized_options=None, type=None, create_key=_descriptor._internal_create_key), _descriptor.EnumValueDescriptor( name='FT_CALLBACK', index=1, number=1, serialized_options=None, type=None, create_key=_descriptor._internal_create_key), _descriptor.EnumValueDescriptor( name='FT_POINTER', index=2, number=4, serialized_options=None, type=None, create_key=_descriptor._internal_create_key), _descriptor.EnumValueDescriptor( name='FT_STATIC', index=3, number=2, serialized_options=None, type=None, create_key=_descriptor._internal_create_key), _descriptor.EnumValueDescriptor( name='FT_IGNORE', index=4, number=3, serialized_options=None, type=None, create_key=_descriptor._internal_create_key), _descriptor.EnumValueDescriptor( name='FT_INLINE', index=5, number=5, serialized_options=None, type=None, create_key=_descriptor._internal_create_key), ], containing_type=None, serialized_options=None, serialized_start=937, serialized_end=1042, ) _sym_db.RegisterEnumDescriptor(_FIELDTYPE) FieldType = enum_type_wrapper.EnumTypeWrapper(_FIELDTYPE) _INTSIZE = _descriptor.EnumDescriptor( name='IntSize', full_name='IntSize', filename=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key, values=[ _descriptor.EnumValueDescriptor( name='IS_DEFAULT', index=0, number=0, serialized_options=None, type=None, create_key=_descriptor._internal_create_key), _descriptor.EnumValueDescriptor( name='IS_8', index=1, number=8, serialized_options=None, type=None, create_key=_descriptor._internal_create_key), _descriptor.EnumValueDescriptor( name='IS_16', index=2, number=16, serialized_options=None, type=None, create_key=_descriptor._internal_create_key), _descriptor.EnumValueDescriptor( name='IS_32', index=3, number=32, serialized_options=None, type=None, create_key=_descriptor._internal_create_key), _descriptor.EnumValueDescriptor( name='IS_64', index=4, number=64, serialized_options=None, type=None, create_key=_descriptor._internal_create_key), ], containing_type=None, serialized_options=None, serialized_start=1044, serialized_end=1112, ) _sym_db.RegisterEnumDescriptor(_INTSIZE) IntSize = enum_type_wrapper.EnumTypeWrapper(_INTSIZE) _TYPENAMEMANGLING = _descriptor.EnumDescriptor( name='TypenameMangling', full_name='TypenameMangling', filename=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key, values=[ _descriptor.EnumValueDescriptor( name='M_NONE', index=0, number=0, serialized_options=None, type=None, create_key=_descriptor._internal_create_key), _descriptor.EnumValueDescriptor( name='M_STRIP_PACKAGE', index=1, number=1, serialized_options=None, type=None, create_key=_descriptor._internal_create_key), _descriptor.EnumValueDescriptor( name='M_FLATTEN', index=2, number=2, serialized_options=None, type=None, create_key=_descriptor._internal_create_key), _descriptor.EnumValueDescriptor( name='M_PACKAGE_INITIALS', index=3, number=3, serialized_options=None, type=None, create_key=_descriptor._internal_create_key), ], containing_type=None, serialized_options=None, serialized_start=1114, serialized_end=1204, ) _sym_db.RegisterEnumDescriptor(_TYPENAMEMANGLING) TypenameMangling = enum_type_wrapper.EnumTypeWrapper(_TYPENAMEMANGLING) _DESCRIPTORSIZE = _descriptor.EnumDescriptor( name='DescriptorSize', full_name='DescriptorSize', filename=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key, values=[ _descriptor.EnumValueDescriptor( name='DS_AUTO', index=0, number=0, serialized_options=None, type=None, create_key=_descriptor._internal_create_key), _descriptor.EnumValueDescriptor( name='DS_1', index=1, number=1, serialized_options=None, type=None, create_key=_descriptor._internal_create_key), _descriptor.EnumValueDescriptor( name='DS_2', index=2, number=2, serialized_options=None, type=None, create_key=_descriptor._internal_create_key), _descriptor.EnumValueDescriptor( name='DS_4', index=3, number=4, serialized_options=None, type=None, create_key=_descriptor._internal_create_key), _descriptor.EnumValueDescriptor( name='DS_8', index=4, number=8, serialized_options=None, type=None, create_key=_descriptor._internal_create_key), ], containing_type=None, serialized_options=None, serialized_start=1206, serialized_end=1275, ) _sym_db.RegisterEnumDescriptor(_DESCRIPTORSIZE) DescriptorSize = enum_type_wrapper.EnumTypeWrapper(_DESCRIPTORSIZE) FT_DEFAULT = 0 FT_CALLBACK = 1 FT_POINTER = 4 FT_STATIC = 2 FT_IGNORE = 3 FT_INLINE = 5 IS_DEFAULT = 0 IS_8 = 8 IS_16 = 16 IS_32 = 32 IS_64 = 64 M_NONE = 0 M_STRIP_PACKAGE = 1 M_FLATTEN = 2 M_PACKAGE_INITIALS = 3 DS_AUTO = 0 DS_1 = 1 DS_2 = 2 DS_4 = 4 DS_8 = 8 NANOPB_FILEOPT_FIELD_NUMBER = 1010 nanopb_fileopt = _descriptor.FieldDescriptor( name='nanopb_fileopt', full_name='nanopb_fileopt', index=0, number=1010, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=True, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key) NANOPB_MSGOPT_FIELD_NUMBER = 1010 nanopb_msgopt = _descriptor.FieldDescriptor( name='nanopb_msgopt', full_name='nanopb_msgopt', index=1, number=1010, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=True, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key) NANOPB_ENUMOPT_FIELD_NUMBER = 1010 nanopb_enumopt = _descriptor.FieldDescriptor( name='nanopb_enumopt', full_name='nanopb_enumopt', index=2, number=1010, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=True, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key) NANOPB_FIELD_NUMBER = 1010 nanopb = _descriptor.FieldDescriptor( name='nanopb', full_name='nanopb', index=3, number=1010, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=True, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key) _NANOPBOPTIONS = _descriptor.Descriptor( name='NanoPBOptions', full_name='NanoPBOptions', filename=None, file=DESCRIPTOR, containing_type=None, create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( name='max_size', full_name='NanoPBOptions.max_size', index=0, number=1, type=5, cpp_type=1, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='max_length', full_name='NanoPBOptions.max_length', index=1, number=14, type=5, cpp_type=1, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='max_count', full_name='NanoPBOptions.max_count', index=2, number=2, type=5, cpp_type=1, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='int_size', full_name='NanoPBOptions.int_size', index=3, number=7, type=14, cpp_type=8, label=1, has_default_value=True, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='type', full_name='NanoPBOptions.type', index=4, number=3, type=14, cpp_type=8, label=1, has_default_value=True, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='long_names', full_name='NanoPBOptions.long_names', index=5, number=4, type=8, cpp_type=7, label=1, has_default_value=True, default_value=True, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='packed_struct', full_name='NanoPBOptions.packed_struct', index=6, number=5, type=8, cpp_type=7, label=1, has_default_value=True, default_value=False, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='packed_enum', full_name='NanoPBOptions.packed_enum', index=7, number=10, type=8, cpp_type=7, label=1, has_default_value=True, default_value=False, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='skip_message', full_name='NanoPBOptions.skip_message', index=8, number=6, type=8, cpp_type=7, label=1, has_default_value=True, default_value=False, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='no_unions', full_name='NanoPBOptions.no_unions', index=9, number=8, type=8, cpp_type=7, label=1, has_default_value=True, default_value=False, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='msgid', full_name='NanoPBOptions.msgid', index=10, number=9, type=13, cpp_type=3, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='anonymous_oneof', full_name='NanoPBOptions.anonymous_oneof', index=11, number=11, type=8, cpp_type=7, label=1, has_default_value=True, default_value=False, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='proto3', full_name='NanoPBOptions.proto3', index=12, number=12, type=8, cpp_type=7, label=1, has_default_value=True, default_value=False, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='proto3_singular_msgs', full_name='NanoPBOptions.proto3_singular_msgs', index=13, number=21, type=8, cpp_type=7, label=1, has_default_value=True, default_value=False, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='enum_to_string', full_name='NanoPBOptions.enum_to_string', index=14, number=13, type=8, cpp_type=7, label=1, has_default_value=True, default_value=False, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='fixed_length', full_name='NanoPBOptions.fixed_length', index=15, number=15, type=8, cpp_type=7, label=1, has_default_value=True, default_value=False, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='fixed_count', full_name='NanoPBOptions.fixed_count', index=16, number=16, type=8, cpp_type=7, label=1, has_default_value=True, default_value=False, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='submsg_callback', full_name='NanoPBOptions.submsg_callback', index=17, number=22, type=8, cpp_type=7, label=1, has_default_value=True, default_value=False, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='mangle_names', full_name='NanoPBOptions.mangle_names', index=18, number=17, type=14, cpp_type=8, label=1, has_default_value=True, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='callback_datatype', full_name='NanoPBOptions.callback_datatype', index=19, number=18, type=9, cpp_type=9, label=1, has_default_value=True, default_value=b"pb_callback_t".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='callback_function', full_name='NanoPBOptions.callback_function', index=20, number=19, type=9, cpp_type=9, label=1, has_default_value=True, default_value=b"pb_default_field_callback".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='descriptorsize', full_name='NanoPBOptions.descriptorsize', index=21, number=20, type=14, cpp_type=8, label=1, has_default_value=True, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='default_has', full_name='NanoPBOptions.default_has', index=22, number=23, type=8, cpp_type=7, label=1, has_default_value=True, default_value=False, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='include', full_name='NanoPBOptions.include', index=23, number=24, type=9, cpp_type=9, label=3, has_default_value=False, default_value=[], message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='exclude', full_name='NanoPBOptions.exclude', index=24, number=26, type=9, cpp_type=9, label=3, has_default_value=False, default_value=[], message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='package', full_name='NanoPBOptions.package', index=25, number=25, type=9, cpp_type=9, label=1, has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='type_override', full_name='NanoPBOptions.type_override', index=26, number=27, type=14, cpp_type=8, label=1, has_default_value=False, default_value=1, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='sort_by_tag', full_name='NanoPBOptions.sort_by_tag', index=27, number=28, type=8, cpp_type=7, label=1, has_default_value=True, default_value=True, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), ], extensions=[ ], nested_types=[], enum_types=[ ], serialized_options=None, is_extendable=False, syntax='proto2', extension_ranges=[], oneofs=[ ], serialized_start=51, serialized_end=935, ) _NANOPBOPTIONS.fields_by_name['int_size'].enum_type = _INTSIZE _NANOPBOPTIONS.fields_by_name['type'].enum_type = _FIELDTYPE _NANOPBOPTIONS.fields_by_name['mangle_names'].enum_type = _TYPENAMEMANGLING _NANOPBOPTIONS.fields_by_name['descriptorsize'].enum_type = _DESCRIPTORSIZE _NANOPBOPTIONS.fields_by_name['type_override'].enum_type = google_dot_protobuf_dot_descriptor__pb2._FIELDDESCRIPTORPROTO_TYPE DESCRIPTOR.message_types_by_name['NanoPBOptions'] = _NANOPBOPTIONS DESCRIPTOR.enum_types_by_name['FieldType'] = _FIELDTYPE DESCRIPTOR.enum_types_by_name['IntSize'] = _INTSIZE DESCRIPTOR.enum_types_by_name['TypenameMangling'] = _TYPENAMEMANGLING DESCRIPTOR.enum_types_by_name['DescriptorSize'] = _DESCRIPTORSIZE DESCRIPTOR.extensions_by_name['nanopb_fileopt'] = nanopb_fileopt DESCRIPTOR.extensions_by_name['nanopb_msgopt'] = nanopb_msgopt DESCRIPTOR.extensions_by_name['nanopb_enumopt'] = nanopb_enumopt DESCRIPTOR.extensions_by_name['nanopb'] = nanopb _sym_db.RegisterFileDescriptor(DESCRIPTOR) NanoPBOptions = _reflection.GeneratedProtocolMessageType('NanoPBOptions', (_message.Message,), { 'DESCRIPTOR' : _NANOPBOPTIONS, '__module__' : 'nanopb_pb2' # @@protoc_insertion_point(class_scope:NanoPBOptions) }) _sym_db.RegisterMessage(NanoPBOptions) nanopb_fileopt.message_type = _NANOPBOPTIONS google_dot_protobuf_dot_descriptor__pb2.FileOptions.RegisterExtension(nanopb_fileopt) nanopb_msgopt.message_type = _NANOPBOPTIONS google_dot_protobuf_dot_descriptor__pb2.MessageOptions.RegisterExtension(nanopb_msgopt) nanopb_enumopt.message_type = _NANOPBOPTIONS google_dot_protobuf_dot_descriptor__pb2.EnumOptions.RegisterExtension(nanopb_enumopt) nanopb.message_type = _NANOPBOPTIONS google_dot_protobuf_dot_descriptor__pb2.FieldOptions.RegisterExtension(nanopb) DESCRIPTOR._options = None # @@protoc_insertion_point(module_scope) ================================================ FILE: software/chainlink/proto_gen/splitflap_pb2.py ================================================ # -*- coding: utf-8 -*- # Generated by the protocol buffer compiler. DO NOT EDIT! # source: splitflap.proto from google.protobuf import descriptor as _descriptor from google.protobuf import message as _message from google.protobuf import reflection as _reflection from google.protobuf import symbol_database as _symbol_database # @@protoc_insertion_point(imports) _sym_db = _symbol_database.Default() import nanopb_pb2 as nanopb__pb2 DESCRIPTOR = _descriptor.FileDescriptor( name='splitflap.proto', package='PB', syntax='proto3', serialized_options=None, create_key=_descriptor._internal_create_key, serialized_pb=b'\n\x0fsplitflap.proto\x12\x02PB\x1a\x0cnanopb.proto\"\x84\x03\n\x0eSplitflapState\x12\x37\n\x07modules\x18\x01 \x03(\x0b\x32\x1e.PB.SplitflapState.ModuleStateB\x06\x92?\x03\x10\xff\x01\x12\x14\n\x0cloopbacks_ok\x18\x02 \x01(\x08\x1a\xa2\x02\n\x0bModuleState\x12\x33\n\x05state\x18\x01 \x01(\x0e\x32$.PB.SplitflapState.ModuleState.State\x12\x19\n\nflap_index\x18\x02 \x01(\rB\x05\x92?\x02\x38\x08\x12\x0e\n\x06moving\x18\x03 \x01(\x08\x12\x12\n\nhome_state\x18\x04 \x01(\x08\x12$\n\x15\x63ount_unexpected_home\x18\x05 \x01(\rB\x05\x92?\x02\x38\x08\x12 \n\x11\x63ount_missed_home\x18\x06 \x01(\rB\x05\x92?\x02\x38\x08\"W\n\x05State\x12\n\n\x06NORMAL\x10\x00\x12\x11\n\rLOOK_FOR_HOME\x10\x01\x12\x10\n\x0cSENSOR_ERROR\x10\x02\x12\t\n\x05PANIC\x10\x03\x12\x12\n\x0eSTATE_DISABLED\x10\x04\"\x1a\n\x03Log\x12\x13\n\x03msg\x18\x01 \x01(\tB\x06\x92?\x03p\xff\x01\"\x14\n\x03\x41\x63k\x12\r\n\x05nonce\x18\x01 \x01(\r\"\xa4\x05\n\x0fSupervisorState\x12\x15\n\ruptime_millis\x18\x01 \x01(\r\x12(\n\x05state\x18\x02 \x01(\x0e\x32\x19.PB.SupervisorState.State\x12\x44\n\x0epower_channels\x18\x03 \x03(\x0b\x32%.PB.SupervisorState.PowerChannelStateB\x05\x92?\x02\x10\x05\x12\x31\n\nfault_info\x18\x04 \x01(\x0b\x32\x1d.PB.SupervisorState.FaultInfo\x1aL\n\x11PowerChannelState\x12\x15\n\rvoltage_volts\x18\x01 \x01(\x02\x12\x14\n\x0c\x63urrent_amps\x18\x02 \x01(\x02\x12\n\n\x02on\x18\x03 \x01(\x08\x1a\x81\x02\n\tFaultInfo\x12\x35\n\x04type\x18\x01 \x01(\x0e\x32\'.PB.SupervisorState.FaultInfo.FaultType\x12\x13\n\x03msg\x18\x02 \x01(\tB\x06\x92?\x03p\xff\x01\x12\x11\n\tts_millis\x18\x03 \x01(\r\"\x94\x01\n\tFaultType\x12\x0b\n\x07UNKNOWN\x10\x00\x12\x08\n\x04NONE\x10\x01\x12\x1e\n\x1aINRUSH_CURRENT_NOT_SETTLED\x10\x02\x12\x16\n\x12SPLITFLAP_SHUTDOWN\x10\x03\x12\x10\n\x0cOUT_OF_RANGE\x10\x04\x12\x10\n\x0cOVER_CURRENT\x10\x05\x12\x14\n\x10UNEXPECTED_POWER\x10\x06\"\x84\x01\n\x05State\x12\x0b\n\x07UNKNOWN\x10\x00\x12\x1b\n\x17STARTING_VERIFY_PSU_OFF\x10\x01\x12\x1c\n\x18STARTING_VERIFY_VOLTAGES\x10\x02\x12\x1c\n\x18STARTING_ENABLE_CHANNELS\x10\x03\x12\n\n\x06NORMAL\x10\x04\x12\t\n\x05\x46\x41ULT\x10\x05\"\xfa\x01\n\x0cGeneralState\x12&\n\x17serial_protocol_version\x18\x01 \x01(\rB\x05\x92?\x02\x38\x10\x12\x15\n\ruptime_millis\x18\x02 \x01(\r\x12.\n\nbuild_info\x18\x03 \x01(\x0b\x32\x1a.PB.GeneralState.BuildInfo\x12!\n\x12\x66lap_character_set\x18\x04 \x01(\x0c\x42\x05\x92?\x02\x08P\x1aX\n\tBuildInfo\x12\x17\n\x08git_hash\x18\x01 \x01(\tB\x05\x92?\x02pZ\x12\x19\n\nbuild_date\x18\x02 \x01(\tB\x05\x92?\x02p\x0c\x12\x17\n\x08\x62uild_os\x18\x03 \x01(\tB\x05\x92?\x02p\x0c\"\xd5\x01\n\rFromSplitflap\x12-\n\x0fsplitflap_state\x18\x01 \x01(\x0b\x32\x12.PB.SplitflapStateH\x00\x12\x16\n\x03log\x18\x02 \x01(\x0b\x32\x07.PB.LogH\x00\x12\x16\n\x03\x61\x63k\x18\x03 \x01(\x0b\x32\x07.PB.AckH\x00\x12/\n\x10supervisor_state\x18\x04 \x01(\x0b\x32\x13.PB.SupervisorStateH\x00\x12)\n\rgeneral_state\x18\x05 \x01(\x0b\x32\x10.PB.GeneralStateH\x00\x42\t\n\x07payload\"\xca\x02\n\x10SplitflapCommand\x12;\n\x07modules\x18\x02 \x03(\x0b\x32\".PB.SplitflapCommand.ModuleCommandB\x06\x92?\x03\x10\xff\x01\x12\x18\n\x10save_all_offsets\x18\x03 \x01(\x08\x1a\xde\x01\n\rModuleCommand\x12\x39\n\x06\x61\x63tion\x18\x01 \x01(\x0e\x32).PB.SplitflapCommand.ModuleCommand.Action\x12\x14\n\x05param\x18\x02 \x01(\rB\x05\x92?\x02\x38\x08\"|\n\x06\x41\x63tion\x12\t\n\x05NO_OP\x10\x00\x12\x0e\n\nGO_TO_FLAP\x10\x01\x12\x12\n\x0eRESET_AND_HOME\x10\x02\x12\x19\n\x15INCREASE_OFFSET_TENTH\x10Z\x12\x18\n\x14INCREASE_OFFSET_HALF\x10[\x12\x0e\n\nSET_OFFSET\x10\\\"\xb9\x01\n\x0fSplitflapConfig\x12\x39\n\x07modules\x18\x01 \x03(\x0b\x32 .PB.SplitflapConfig.ModuleConfigB\x06\x92?\x03\x10\xff\x01\x1ak\n\x0cModuleConfig\x12 \n\x11target_flap_index\x18\x01 \x01(\rB\x05\x92?\x02\x38\x08\x12\x1d\n\x0emovement_nonce\x18\x02 \x01(\rB\x05\x92?\x02\x38\x08\x12\x1a\n\x0breset_nonce\x18\x03 \x01(\rB\x05\x92?\x02\x38\x08\"\x0e\n\x0cRequestState\"\xb6\x01\n\x0bToSplitflap\x12\r\n\x05nonce\x18\x01 \x01(\r\x12\x31\n\x11splitflap_command\x18\x02 \x01(\x0b\x32\x14.PB.SplitflapCommandH\x00\x12/\n\x10splitflap_config\x18\x03 \x01(\x0b\x32\x13.PB.SplitflapConfigH\x00\x12)\n\rrequest_state\x18\x04 \x01(\x0b\x32\x10.PB.RequestStateH\x00\x42\t\n\x07payload\"g\n\x17PersistentConfiguration\x12\x0f\n\x07version\x18\x01 \x01(\r\x12\x11\n\tnum_flaps\x18\x02 \x01(\r\x12(\n\x13module_offset_steps\x18\x03 \x03(\rB\x0b\x92?\x03\x10\xff\x01\x92?\x02\x38\x10\x62\x06proto3' , dependencies=[nanopb__pb2.DESCRIPTOR,]) _SPLITFLAPSTATE_MODULESTATE_STATE = _descriptor.EnumDescriptor( name='State', full_name='PB.SplitflapState.ModuleState.State', filename=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key, values=[ _descriptor.EnumValueDescriptor( name='NORMAL', index=0, number=0, serialized_options=None, type=None, create_key=_descriptor._internal_create_key), _descriptor.EnumValueDescriptor( name='LOOK_FOR_HOME', index=1, number=1, serialized_options=None, type=None, create_key=_descriptor._internal_create_key), _descriptor.EnumValueDescriptor( name='SENSOR_ERROR', index=2, number=2, serialized_options=None, type=None, create_key=_descriptor._internal_create_key), _descriptor.EnumValueDescriptor( name='PANIC', index=3, number=3, serialized_options=None, type=None, create_key=_descriptor._internal_create_key), _descriptor.EnumValueDescriptor( name='STATE_DISABLED', index=4, number=4, serialized_options=None, type=None, create_key=_descriptor._internal_create_key), ], containing_type=None, serialized_options=None, serialized_start=339, serialized_end=426, ) _sym_db.RegisterEnumDescriptor(_SPLITFLAPSTATE_MODULESTATE_STATE) _SUPERVISORSTATE_FAULTINFO_FAULTTYPE = _descriptor.EnumDescriptor( name='FaultType', full_name='PB.SupervisorState.FaultInfo.FaultType', filename=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key, values=[ _descriptor.EnumValueDescriptor( name='UNKNOWN', index=0, number=0, serialized_options=None, type=None, create_key=_descriptor._internal_create_key), _descriptor.EnumValueDescriptor( name='NONE', index=1, number=1, serialized_options=None, type=None, create_key=_descriptor._internal_create_key), _descriptor.EnumValueDescriptor( name='INRUSH_CURRENT_NOT_SETTLED', index=2, number=2, serialized_options=None, type=None, create_key=_descriptor._internal_create_key), _descriptor.EnumValueDescriptor( name='SPLITFLAP_SHUTDOWN', index=3, number=3, serialized_options=None, type=None, create_key=_descriptor._internal_create_key), _descriptor.EnumValueDescriptor( name='OUT_OF_RANGE', index=4, number=4, serialized_options=None, type=None, create_key=_descriptor._internal_create_key), _descriptor.EnumValueDescriptor( name='OVER_CURRENT', index=5, number=5, serialized_options=None, type=None, create_key=_descriptor._internal_create_key), _descriptor.EnumValueDescriptor( name='UNEXPECTED_POWER', index=6, number=6, serialized_options=None, type=None, create_key=_descriptor._internal_create_key), ], containing_type=None, serialized_options=None, serialized_start=872, serialized_end=1020, ) _sym_db.RegisterEnumDescriptor(_SUPERVISORSTATE_FAULTINFO_FAULTTYPE) _SUPERVISORSTATE_STATE = _descriptor.EnumDescriptor( name='State', full_name='PB.SupervisorState.State', filename=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key, values=[ _descriptor.EnumValueDescriptor( name='UNKNOWN', index=0, number=0, serialized_options=None, type=None, create_key=_descriptor._internal_create_key), _descriptor.EnumValueDescriptor( name='STARTING_VERIFY_PSU_OFF', index=1, number=1, serialized_options=None, type=None, create_key=_descriptor._internal_create_key), _descriptor.EnumValueDescriptor( name='STARTING_VERIFY_VOLTAGES', index=2, number=2, serialized_options=None, type=None, create_key=_descriptor._internal_create_key), _descriptor.EnumValueDescriptor( name='STARTING_ENABLE_CHANNELS', index=3, number=3, serialized_options=None, type=None, create_key=_descriptor._internal_create_key), _descriptor.EnumValueDescriptor( name='NORMAL', index=4, number=4, serialized_options=None, type=None, create_key=_descriptor._internal_create_key), _descriptor.EnumValueDescriptor( name='FAULT', index=5, number=5, serialized_options=None, type=None, create_key=_descriptor._internal_create_key), ], containing_type=None, serialized_options=None, serialized_start=1023, serialized_end=1155, ) _sym_db.RegisterEnumDescriptor(_SUPERVISORSTATE_STATE) _SPLITFLAPCOMMAND_MODULECOMMAND_ACTION = _descriptor.EnumDescriptor( name='Action', full_name='PB.SplitflapCommand.ModuleCommand.Action', filename=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key, values=[ _descriptor.EnumValueDescriptor( name='NO_OP', index=0, number=0, serialized_options=None, type=None, create_key=_descriptor._internal_create_key), _descriptor.EnumValueDescriptor( name='GO_TO_FLAP', index=1, number=1, serialized_options=None, type=None, create_key=_descriptor._internal_create_key), _descriptor.EnumValueDescriptor( name='RESET_AND_HOME', index=2, number=2, serialized_options=None, type=None, create_key=_descriptor._internal_create_key), _descriptor.EnumValueDescriptor( name='INCREASE_OFFSET_TENTH', index=3, number=90, serialized_options=None, type=None, create_key=_descriptor._internal_create_key), _descriptor.EnumValueDescriptor( name='INCREASE_OFFSET_HALF', index=4, number=91, serialized_options=None, type=None, create_key=_descriptor._internal_create_key), _descriptor.EnumValueDescriptor( name='SET_OFFSET', index=5, number=92, serialized_options=None, type=None, create_key=_descriptor._internal_create_key), ], containing_type=None, serialized_options=None, serialized_start=1833, serialized_end=1957, ) _sym_db.RegisterEnumDescriptor(_SPLITFLAPCOMMAND_MODULECOMMAND_ACTION) _SPLITFLAPSTATE_MODULESTATE = _descriptor.Descriptor( name='ModuleState', full_name='PB.SplitflapState.ModuleState', filename=None, file=DESCRIPTOR, containing_type=None, create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( name='state', full_name='PB.SplitflapState.ModuleState.state', index=0, number=1, type=14, cpp_type=8, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='flap_index', full_name='PB.SplitflapState.ModuleState.flap_index', index=1, number=2, type=13, cpp_type=3, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=b'\222?\0028\010', file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='moving', full_name='PB.SplitflapState.ModuleState.moving', index=2, number=3, type=8, cpp_type=7, label=1, has_default_value=False, default_value=False, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='home_state', full_name='PB.SplitflapState.ModuleState.home_state', index=3, number=4, type=8, cpp_type=7, label=1, has_default_value=False, default_value=False, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='count_unexpected_home', full_name='PB.SplitflapState.ModuleState.count_unexpected_home', index=4, number=5, type=13, cpp_type=3, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=b'\222?\0028\010', file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='count_missed_home', full_name='PB.SplitflapState.ModuleState.count_missed_home', index=5, number=6, type=13, cpp_type=3, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=b'\222?\0028\010', file=DESCRIPTOR, create_key=_descriptor._internal_create_key), ], extensions=[ ], nested_types=[], enum_types=[ _SPLITFLAPSTATE_MODULESTATE_STATE, ], serialized_options=None, is_extendable=False, syntax='proto3', extension_ranges=[], oneofs=[ ], serialized_start=136, serialized_end=426, ) _SPLITFLAPSTATE = _descriptor.Descriptor( name='SplitflapState', full_name='PB.SplitflapState', filename=None, file=DESCRIPTOR, containing_type=None, create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( name='modules', full_name='PB.SplitflapState.modules', index=0, number=1, type=11, cpp_type=10, label=3, has_default_value=False, default_value=[], message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=b'\222?\003\020\377\001', file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='loopbacks_ok', full_name='PB.SplitflapState.loopbacks_ok', index=1, number=2, type=8, cpp_type=7, label=1, has_default_value=False, default_value=False, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), ], extensions=[ ], nested_types=[_SPLITFLAPSTATE_MODULESTATE, ], enum_types=[ ], serialized_options=None, is_extendable=False, syntax='proto3', extension_ranges=[], oneofs=[ ], serialized_start=38, serialized_end=426, ) _LOG = _descriptor.Descriptor( name='Log', full_name='PB.Log', filename=None, file=DESCRIPTOR, containing_type=None, create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( name='msg', full_name='PB.Log.msg', index=0, number=1, type=9, cpp_type=9, label=1, has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=b'\222?\003p\377\001', file=DESCRIPTOR, create_key=_descriptor._internal_create_key), ], extensions=[ ], nested_types=[], enum_types=[ ], serialized_options=None, is_extendable=False, syntax='proto3', extension_ranges=[], oneofs=[ ], serialized_start=428, serialized_end=454, ) _ACK = _descriptor.Descriptor( name='Ack', full_name='PB.Ack', filename=None, file=DESCRIPTOR, containing_type=None, create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( name='nonce', full_name='PB.Ack.nonce', index=0, number=1, type=13, cpp_type=3, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), ], extensions=[ ], nested_types=[], enum_types=[ ], serialized_options=None, is_extendable=False, syntax='proto3', extension_ranges=[], oneofs=[ ], serialized_start=456, serialized_end=476, ) _SUPERVISORSTATE_POWERCHANNELSTATE = _descriptor.Descriptor( name='PowerChannelState', full_name='PB.SupervisorState.PowerChannelState', filename=None, file=DESCRIPTOR, containing_type=None, create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( name='voltage_volts', full_name='PB.SupervisorState.PowerChannelState.voltage_volts', index=0, number=1, type=2, cpp_type=6, label=1, has_default_value=False, default_value=float(0), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='current_amps', full_name='PB.SupervisorState.PowerChannelState.current_amps', index=1, number=2, type=2, cpp_type=6, label=1, has_default_value=False, default_value=float(0), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='on', full_name='PB.SupervisorState.PowerChannelState.on', index=2, number=3, type=8, cpp_type=7, label=1, has_default_value=False, default_value=False, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), ], extensions=[ ], nested_types=[], enum_types=[ ], serialized_options=None, is_extendable=False, syntax='proto3', extension_ranges=[], oneofs=[ ], serialized_start=684, serialized_end=760, ) _SUPERVISORSTATE_FAULTINFO = _descriptor.Descriptor( name='FaultInfo', full_name='PB.SupervisorState.FaultInfo', filename=None, file=DESCRIPTOR, containing_type=None, create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( name='type', full_name='PB.SupervisorState.FaultInfo.type', index=0, number=1, type=14, cpp_type=8, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='msg', full_name='PB.SupervisorState.FaultInfo.msg', index=1, number=2, type=9, cpp_type=9, label=1, has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=b'\222?\003p\377\001', file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='ts_millis', full_name='PB.SupervisorState.FaultInfo.ts_millis', index=2, number=3, type=13, cpp_type=3, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), ], extensions=[ ], nested_types=[], enum_types=[ _SUPERVISORSTATE_FAULTINFO_FAULTTYPE, ], serialized_options=None, is_extendable=False, syntax='proto3', extension_ranges=[], oneofs=[ ], serialized_start=763, serialized_end=1020, ) _SUPERVISORSTATE = _descriptor.Descriptor( name='SupervisorState', full_name='PB.SupervisorState', filename=None, file=DESCRIPTOR, containing_type=None, create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( name='uptime_millis', full_name='PB.SupervisorState.uptime_millis', index=0, number=1, type=13, cpp_type=3, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='state', full_name='PB.SupervisorState.state', index=1, number=2, type=14, cpp_type=8, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='power_channels', full_name='PB.SupervisorState.power_channels', index=2, number=3, type=11, cpp_type=10, label=3, has_default_value=False, default_value=[], message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=b'\222?\002\020\005', file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='fault_info', full_name='PB.SupervisorState.fault_info', index=3, number=4, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), ], extensions=[ ], nested_types=[_SUPERVISORSTATE_POWERCHANNELSTATE, _SUPERVISORSTATE_FAULTINFO, ], enum_types=[ _SUPERVISORSTATE_STATE, ], serialized_options=None, is_extendable=False, syntax='proto3', extension_ranges=[], oneofs=[ ], serialized_start=479, serialized_end=1155, ) _GENERALSTATE_BUILDINFO = _descriptor.Descriptor( name='BuildInfo', full_name='PB.GeneralState.BuildInfo', filename=None, file=DESCRIPTOR, containing_type=None, create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( name='git_hash', full_name='PB.GeneralState.BuildInfo.git_hash', index=0, number=1, type=9, cpp_type=9, label=1, has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=b'\222?\002pZ', file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='build_date', full_name='PB.GeneralState.BuildInfo.build_date', index=1, number=2, type=9, cpp_type=9, label=1, has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=b'\222?\002p\014', file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='build_os', full_name='PB.GeneralState.BuildInfo.build_os', index=2, number=3, type=9, cpp_type=9, label=1, has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=b'\222?\002p\014', file=DESCRIPTOR, create_key=_descriptor._internal_create_key), ], extensions=[ ], nested_types=[], enum_types=[ ], serialized_options=None, is_extendable=False, syntax='proto3', extension_ranges=[], oneofs=[ ], serialized_start=1320, serialized_end=1408, ) _GENERALSTATE = _descriptor.Descriptor( name='GeneralState', full_name='PB.GeneralState', filename=None, file=DESCRIPTOR, containing_type=None, create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( name='serial_protocol_version', full_name='PB.GeneralState.serial_protocol_version', index=0, number=1, type=13, cpp_type=3, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=b'\222?\0028\020', file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='uptime_millis', full_name='PB.GeneralState.uptime_millis', index=1, number=2, type=13, cpp_type=3, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='build_info', full_name='PB.GeneralState.build_info', index=2, number=3, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='flap_character_set', full_name='PB.GeneralState.flap_character_set', index=3, number=4, type=12, cpp_type=9, label=1, has_default_value=False, default_value=b"", message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=b'\222?\002\010P', file=DESCRIPTOR, create_key=_descriptor._internal_create_key), ], extensions=[ ], nested_types=[_GENERALSTATE_BUILDINFO, ], enum_types=[ ], serialized_options=None, is_extendable=False, syntax='proto3', extension_ranges=[], oneofs=[ ], serialized_start=1158, serialized_end=1408, ) _FROMSPLITFLAP = _descriptor.Descriptor( name='FromSplitflap', full_name='PB.FromSplitflap', filename=None, file=DESCRIPTOR, containing_type=None, create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( name='splitflap_state', full_name='PB.FromSplitflap.splitflap_state', index=0, number=1, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='log', full_name='PB.FromSplitflap.log', index=1, number=2, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='ack', full_name='PB.FromSplitflap.ack', index=2, number=3, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='supervisor_state', full_name='PB.FromSplitflap.supervisor_state', index=3, number=4, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='general_state', full_name='PB.FromSplitflap.general_state', index=4, number=5, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), ], extensions=[ ], nested_types=[], enum_types=[ ], serialized_options=None, is_extendable=False, syntax='proto3', extension_ranges=[], oneofs=[ _descriptor.OneofDescriptor( name='payload', full_name='PB.FromSplitflap.payload', index=0, containing_type=None, create_key=_descriptor._internal_create_key, fields=[]), ], serialized_start=1411, serialized_end=1624, ) _SPLITFLAPCOMMAND_MODULECOMMAND = _descriptor.Descriptor( name='ModuleCommand', full_name='PB.SplitflapCommand.ModuleCommand', filename=None, file=DESCRIPTOR, containing_type=None, create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( name='action', full_name='PB.SplitflapCommand.ModuleCommand.action', index=0, number=1, type=14, cpp_type=8, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='param', full_name='PB.SplitflapCommand.ModuleCommand.param', index=1, number=2, type=13, cpp_type=3, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=b'\222?\0028\010', file=DESCRIPTOR, create_key=_descriptor._internal_create_key), ], extensions=[ ], nested_types=[], enum_types=[ _SPLITFLAPCOMMAND_MODULECOMMAND_ACTION, ], serialized_options=None, is_extendable=False, syntax='proto3', extension_ranges=[], oneofs=[ ], serialized_start=1735, serialized_end=1957, ) _SPLITFLAPCOMMAND = _descriptor.Descriptor( name='SplitflapCommand', full_name='PB.SplitflapCommand', filename=None, file=DESCRIPTOR, containing_type=None, create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( name='modules', full_name='PB.SplitflapCommand.modules', index=0, number=2, type=11, cpp_type=10, label=3, has_default_value=False, default_value=[], message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=b'\222?\003\020\377\001', file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='save_all_offsets', full_name='PB.SplitflapCommand.save_all_offsets', index=1, number=3, type=8, cpp_type=7, label=1, has_default_value=False, default_value=False, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), ], extensions=[ ], nested_types=[_SPLITFLAPCOMMAND_MODULECOMMAND, ], enum_types=[ ], serialized_options=None, is_extendable=False, syntax='proto3', extension_ranges=[], oneofs=[ ], serialized_start=1627, serialized_end=1957, ) _SPLITFLAPCONFIG_MODULECONFIG = _descriptor.Descriptor( name='ModuleConfig', full_name='PB.SplitflapConfig.ModuleConfig', filename=None, file=DESCRIPTOR, containing_type=None, create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( name='target_flap_index', full_name='PB.SplitflapConfig.ModuleConfig.target_flap_index', index=0, number=1, type=13, cpp_type=3, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=b'\222?\0028\010', file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='movement_nonce', full_name='PB.SplitflapConfig.ModuleConfig.movement_nonce', index=1, number=2, type=13, cpp_type=3, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=b'\222?\0028\010', file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='reset_nonce', full_name='PB.SplitflapConfig.ModuleConfig.reset_nonce', index=2, number=3, type=13, cpp_type=3, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=b'\222?\0028\010', file=DESCRIPTOR, create_key=_descriptor._internal_create_key), ], extensions=[ ], nested_types=[], enum_types=[ ], serialized_options=None, is_extendable=False, syntax='proto3', extension_ranges=[], oneofs=[ ], serialized_start=2038, serialized_end=2145, ) _SPLITFLAPCONFIG = _descriptor.Descriptor( name='SplitflapConfig', full_name='PB.SplitflapConfig', filename=None, file=DESCRIPTOR, containing_type=None, create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( name='modules', full_name='PB.SplitflapConfig.modules', index=0, number=1, type=11, cpp_type=10, label=3, has_default_value=False, default_value=[], message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=b'\222?\003\020\377\001', file=DESCRIPTOR, create_key=_descriptor._internal_create_key), ], extensions=[ ], nested_types=[_SPLITFLAPCONFIG_MODULECONFIG, ], enum_types=[ ], serialized_options=None, is_extendable=False, syntax='proto3', extension_ranges=[], oneofs=[ ], serialized_start=1960, serialized_end=2145, ) _REQUESTSTATE = _descriptor.Descriptor( name='RequestState', full_name='PB.RequestState', filename=None, file=DESCRIPTOR, containing_type=None, create_key=_descriptor._internal_create_key, fields=[ ], extensions=[ ], nested_types=[], enum_types=[ ], serialized_options=None, is_extendable=False, syntax='proto3', extension_ranges=[], oneofs=[ ], serialized_start=2147, serialized_end=2161, ) _TOSPLITFLAP = _descriptor.Descriptor( name='ToSplitflap', full_name='PB.ToSplitflap', filename=None, file=DESCRIPTOR, containing_type=None, create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( name='nonce', full_name='PB.ToSplitflap.nonce', index=0, number=1, type=13, cpp_type=3, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='splitflap_command', full_name='PB.ToSplitflap.splitflap_command', index=1, number=2, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='splitflap_config', full_name='PB.ToSplitflap.splitflap_config', index=2, number=3, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='request_state', full_name='PB.ToSplitflap.request_state', index=3, number=4, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), ], extensions=[ ], nested_types=[], enum_types=[ ], serialized_options=None, is_extendable=False, syntax='proto3', extension_ranges=[], oneofs=[ _descriptor.OneofDescriptor( name='payload', full_name='PB.ToSplitflap.payload', index=0, containing_type=None, create_key=_descriptor._internal_create_key, fields=[]), ], serialized_start=2164, serialized_end=2346, ) _PERSISTENTCONFIGURATION = _descriptor.Descriptor( name='PersistentConfiguration', full_name='PB.PersistentConfiguration', filename=None, file=DESCRIPTOR, containing_type=None, create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( name='version', full_name='PB.PersistentConfiguration.version', index=0, number=1, type=13, cpp_type=3, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='num_flaps', full_name='PB.PersistentConfiguration.num_flaps', index=1, number=2, type=13, cpp_type=3, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='module_offset_steps', full_name='PB.PersistentConfiguration.module_offset_steps', index=2, number=3, type=13, cpp_type=3, label=3, has_default_value=False, default_value=[], message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=b'\222?\003\020\377\001\222?\0028\020', file=DESCRIPTOR, create_key=_descriptor._internal_create_key), ], extensions=[ ], nested_types=[], enum_types=[ ], serialized_options=None, is_extendable=False, syntax='proto3', extension_ranges=[], oneofs=[ ], serialized_start=2348, serialized_end=2451, ) _SPLITFLAPSTATE_MODULESTATE.fields_by_name['state'].enum_type = _SPLITFLAPSTATE_MODULESTATE_STATE _SPLITFLAPSTATE_MODULESTATE.containing_type = _SPLITFLAPSTATE _SPLITFLAPSTATE_MODULESTATE_STATE.containing_type = _SPLITFLAPSTATE_MODULESTATE _SPLITFLAPSTATE.fields_by_name['modules'].message_type = _SPLITFLAPSTATE_MODULESTATE _SUPERVISORSTATE_POWERCHANNELSTATE.containing_type = _SUPERVISORSTATE _SUPERVISORSTATE_FAULTINFO.fields_by_name['type'].enum_type = _SUPERVISORSTATE_FAULTINFO_FAULTTYPE _SUPERVISORSTATE_FAULTINFO.containing_type = _SUPERVISORSTATE _SUPERVISORSTATE_FAULTINFO_FAULTTYPE.containing_type = _SUPERVISORSTATE_FAULTINFO _SUPERVISORSTATE.fields_by_name['state'].enum_type = _SUPERVISORSTATE_STATE _SUPERVISORSTATE.fields_by_name['power_channels'].message_type = _SUPERVISORSTATE_POWERCHANNELSTATE _SUPERVISORSTATE.fields_by_name['fault_info'].message_type = _SUPERVISORSTATE_FAULTINFO _SUPERVISORSTATE_STATE.containing_type = _SUPERVISORSTATE _GENERALSTATE_BUILDINFO.containing_type = _GENERALSTATE _GENERALSTATE.fields_by_name['build_info'].message_type = _GENERALSTATE_BUILDINFO _FROMSPLITFLAP.fields_by_name['splitflap_state'].message_type = _SPLITFLAPSTATE _FROMSPLITFLAP.fields_by_name['log'].message_type = _LOG _FROMSPLITFLAP.fields_by_name['ack'].message_type = _ACK _FROMSPLITFLAP.fields_by_name['supervisor_state'].message_type = _SUPERVISORSTATE _FROMSPLITFLAP.fields_by_name['general_state'].message_type = _GENERALSTATE _FROMSPLITFLAP.oneofs_by_name['payload'].fields.append( _FROMSPLITFLAP.fields_by_name['splitflap_state']) _FROMSPLITFLAP.fields_by_name['splitflap_state'].containing_oneof = _FROMSPLITFLAP.oneofs_by_name['payload'] _FROMSPLITFLAP.oneofs_by_name['payload'].fields.append( _FROMSPLITFLAP.fields_by_name['log']) _FROMSPLITFLAP.fields_by_name['log'].containing_oneof = _FROMSPLITFLAP.oneofs_by_name['payload'] _FROMSPLITFLAP.oneofs_by_name['payload'].fields.append( _FROMSPLITFLAP.fields_by_name['ack']) _FROMSPLITFLAP.fields_by_name['ack'].containing_oneof = _FROMSPLITFLAP.oneofs_by_name['payload'] _FROMSPLITFLAP.oneofs_by_name['payload'].fields.append( _FROMSPLITFLAP.fields_by_name['supervisor_state']) _FROMSPLITFLAP.fields_by_name['supervisor_state'].containing_oneof = _FROMSPLITFLAP.oneofs_by_name['payload'] _FROMSPLITFLAP.oneofs_by_name['payload'].fields.append( _FROMSPLITFLAP.fields_by_name['general_state']) _FROMSPLITFLAP.fields_by_name['general_state'].containing_oneof = _FROMSPLITFLAP.oneofs_by_name['payload'] _SPLITFLAPCOMMAND_MODULECOMMAND.fields_by_name['action'].enum_type = _SPLITFLAPCOMMAND_MODULECOMMAND_ACTION _SPLITFLAPCOMMAND_MODULECOMMAND.containing_type = _SPLITFLAPCOMMAND _SPLITFLAPCOMMAND_MODULECOMMAND_ACTION.containing_type = _SPLITFLAPCOMMAND_MODULECOMMAND _SPLITFLAPCOMMAND.fields_by_name['modules'].message_type = _SPLITFLAPCOMMAND_MODULECOMMAND _SPLITFLAPCONFIG_MODULECONFIG.containing_type = _SPLITFLAPCONFIG _SPLITFLAPCONFIG.fields_by_name['modules'].message_type = _SPLITFLAPCONFIG_MODULECONFIG _TOSPLITFLAP.fields_by_name['splitflap_command'].message_type = _SPLITFLAPCOMMAND _TOSPLITFLAP.fields_by_name['splitflap_config'].message_type = _SPLITFLAPCONFIG _TOSPLITFLAP.fields_by_name['request_state'].message_type = _REQUESTSTATE _TOSPLITFLAP.oneofs_by_name['payload'].fields.append( _TOSPLITFLAP.fields_by_name['splitflap_command']) _TOSPLITFLAP.fields_by_name['splitflap_command'].containing_oneof = _TOSPLITFLAP.oneofs_by_name['payload'] _TOSPLITFLAP.oneofs_by_name['payload'].fields.append( _TOSPLITFLAP.fields_by_name['splitflap_config']) _TOSPLITFLAP.fields_by_name['splitflap_config'].containing_oneof = _TOSPLITFLAP.oneofs_by_name['payload'] _TOSPLITFLAP.oneofs_by_name['payload'].fields.append( _TOSPLITFLAP.fields_by_name['request_state']) _TOSPLITFLAP.fields_by_name['request_state'].containing_oneof = _TOSPLITFLAP.oneofs_by_name['payload'] DESCRIPTOR.message_types_by_name['SplitflapState'] = _SPLITFLAPSTATE DESCRIPTOR.message_types_by_name['Log'] = _LOG DESCRIPTOR.message_types_by_name['Ack'] = _ACK DESCRIPTOR.message_types_by_name['SupervisorState'] = _SUPERVISORSTATE DESCRIPTOR.message_types_by_name['GeneralState'] = _GENERALSTATE DESCRIPTOR.message_types_by_name['FromSplitflap'] = _FROMSPLITFLAP DESCRIPTOR.message_types_by_name['SplitflapCommand'] = _SPLITFLAPCOMMAND DESCRIPTOR.message_types_by_name['SplitflapConfig'] = _SPLITFLAPCONFIG DESCRIPTOR.message_types_by_name['RequestState'] = _REQUESTSTATE DESCRIPTOR.message_types_by_name['ToSplitflap'] = _TOSPLITFLAP DESCRIPTOR.message_types_by_name['PersistentConfiguration'] = _PERSISTENTCONFIGURATION _sym_db.RegisterFileDescriptor(DESCRIPTOR) SplitflapState = _reflection.GeneratedProtocolMessageType('SplitflapState', (_message.Message,), { 'ModuleState' : _reflection.GeneratedProtocolMessageType('ModuleState', (_message.Message,), { 'DESCRIPTOR' : _SPLITFLAPSTATE_MODULESTATE, '__module__' : 'splitflap_pb2' # @@protoc_insertion_point(class_scope:PB.SplitflapState.ModuleState) }) , 'DESCRIPTOR' : _SPLITFLAPSTATE, '__module__' : 'splitflap_pb2' # @@protoc_insertion_point(class_scope:PB.SplitflapState) }) _sym_db.RegisterMessage(SplitflapState) _sym_db.RegisterMessage(SplitflapState.ModuleState) Log = _reflection.GeneratedProtocolMessageType('Log', (_message.Message,), { 'DESCRIPTOR' : _LOG, '__module__' : 'splitflap_pb2' # @@protoc_insertion_point(class_scope:PB.Log) }) _sym_db.RegisterMessage(Log) Ack = _reflection.GeneratedProtocolMessageType('Ack', (_message.Message,), { 'DESCRIPTOR' : _ACK, '__module__' : 'splitflap_pb2' # @@protoc_insertion_point(class_scope:PB.Ack) }) _sym_db.RegisterMessage(Ack) SupervisorState = _reflection.GeneratedProtocolMessageType('SupervisorState', (_message.Message,), { 'PowerChannelState' : _reflection.GeneratedProtocolMessageType('PowerChannelState', (_message.Message,), { 'DESCRIPTOR' : _SUPERVISORSTATE_POWERCHANNELSTATE, '__module__' : 'splitflap_pb2' # @@protoc_insertion_point(class_scope:PB.SupervisorState.PowerChannelState) }) , 'FaultInfo' : _reflection.GeneratedProtocolMessageType('FaultInfo', (_message.Message,), { 'DESCRIPTOR' : _SUPERVISORSTATE_FAULTINFO, '__module__' : 'splitflap_pb2' # @@protoc_insertion_point(class_scope:PB.SupervisorState.FaultInfo) }) , 'DESCRIPTOR' : _SUPERVISORSTATE, '__module__' : 'splitflap_pb2' # @@protoc_insertion_point(class_scope:PB.SupervisorState) }) _sym_db.RegisterMessage(SupervisorState) _sym_db.RegisterMessage(SupervisorState.PowerChannelState) _sym_db.RegisterMessage(SupervisorState.FaultInfo) GeneralState = _reflection.GeneratedProtocolMessageType('GeneralState', (_message.Message,), { 'BuildInfo' : _reflection.GeneratedProtocolMessageType('BuildInfo', (_message.Message,), { 'DESCRIPTOR' : _GENERALSTATE_BUILDINFO, '__module__' : 'splitflap_pb2' # @@protoc_insertion_point(class_scope:PB.GeneralState.BuildInfo) }) , 'DESCRIPTOR' : _GENERALSTATE, '__module__' : 'splitflap_pb2' # @@protoc_insertion_point(class_scope:PB.GeneralState) }) _sym_db.RegisterMessage(GeneralState) _sym_db.RegisterMessage(GeneralState.BuildInfo) FromSplitflap = _reflection.GeneratedProtocolMessageType('FromSplitflap', (_message.Message,), { 'DESCRIPTOR' : _FROMSPLITFLAP, '__module__' : 'splitflap_pb2' # @@protoc_insertion_point(class_scope:PB.FromSplitflap) }) _sym_db.RegisterMessage(FromSplitflap) SplitflapCommand = _reflection.GeneratedProtocolMessageType('SplitflapCommand', (_message.Message,), { 'ModuleCommand' : _reflection.GeneratedProtocolMessageType('ModuleCommand', (_message.Message,), { 'DESCRIPTOR' : _SPLITFLAPCOMMAND_MODULECOMMAND, '__module__' : 'splitflap_pb2' # @@protoc_insertion_point(class_scope:PB.SplitflapCommand.ModuleCommand) }) , 'DESCRIPTOR' : _SPLITFLAPCOMMAND, '__module__' : 'splitflap_pb2' # @@protoc_insertion_point(class_scope:PB.SplitflapCommand) }) _sym_db.RegisterMessage(SplitflapCommand) _sym_db.RegisterMessage(SplitflapCommand.ModuleCommand) SplitflapConfig = _reflection.GeneratedProtocolMessageType('SplitflapConfig', (_message.Message,), { 'ModuleConfig' : _reflection.GeneratedProtocolMessageType('ModuleConfig', (_message.Message,), { 'DESCRIPTOR' : _SPLITFLAPCONFIG_MODULECONFIG, '__module__' : 'splitflap_pb2' # @@protoc_insertion_point(class_scope:PB.SplitflapConfig.ModuleConfig) }) , 'DESCRIPTOR' : _SPLITFLAPCONFIG, '__module__' : 'splitflap_pb2' # @@protoc_insertion_point(class_scope:PB.SplitflapConfig) }) _sym_db.RegisterMessage(SplitflapConfig) _sym_db.RegisterMessage(SplitflapConfig.ModuleConfig) RequestState = _reflection.GeneratedProtocolMessageType('RequestState', (_message.Message,), { 'DESCRIPTOR' : _REQUESTSTATE, '__module__' : 'splitflap_pb2' # @@protoc_insertion_point(class_scope:PB.RequestState) }) _sym_db.RegisterMessage(RequestState) ToSplitflap = _reflection.GeneratedProtocolMessageType('ToSplitflap', (_message.Message,), { 'DESCRIPTOR' : _TOSPLITFLAP, '__module__' : 'splitflap_pb2' # @@protoc_insertion_point(class_scope:PB.ToSplitflap) }) _sym_db.RegisterMessage(ToSplitflap) PersistentConfiguration = _reflection.GeneratedProtocolMessageType('PersistentConfiguration', (_message.Message,), { 'DESCRIPTOR' : _PERSISTENTCONFIGURATION, '__module__' : 'splitflap_pb2' # @@protoc_insertion_point(class_scope:PB.PersistentConfiguration) }) _sym_db.RegisterMessage(PersistentConfiguration) _SPLITFLAPSTATE_MODULESTATE.fields_by_name['flap_index']._options = None _SPLITFLAPSTATE_MODULESTATE.fields_by_name['count_unexpected_home']._options = None _SPLITFLAPSTATE_MODULESTATE.fields_by_name['count_missed_home']._options = None _SPLITFLAPSTATE.fields_by_name['modules']._options = None _LOG.fields_by_name['msg']._options = None _SUPERVISORSTATE_FAULTINFO.fields_by_name['msg']._options = None _SUPERVISORSTATE.fields_by_name['power_channels']._options = None _GENERALSTATE_BUILDINFO.fields_by_name['git_hash']._options = None _GENERALSTATE_BUILDINFO.fields_by_name['build_date']._options = None _GENERALSTATE_BUILDINFO.fields_by_name['build_os']._options = None _GENERALSTATE.fields_by_name['serial_protocol_version']._options = None _GENERALSTATE.fields_by_name['flap_character_set']._options = None _SPLITFLAPCOMMAND_MODULECOMMAND.fields_by_name['param']._options = None _SPLITFLAPCOMMAND.fields_by_name['modules']._options = None _SPLITFLAPCONFIG_MODULECONFIG.fields_by_name['target_flap_index']._options = None _SPLITFLAPCONFIG_MODULECONFIG.fields_by_name['movement_nonce']._options = None _SPLITFLAPCONFIG_MODULECONFIG.fields_by_name['reset_nonce']._options = None _SPLITFLAPCONFIG.fields_by_name['modules']._options = None _PERSISTENTCONFIGURATION.fields_by_name['module_offset_steps']._options = None # @@protoc_insertion_point(module_scope) ================================================ FILE: software/chainlink/requirements.txt ================================================ protobuf==3.18.3 ================================================ FILE: software/chainlink/splitflap_proto.py ================================================ import argparse from cobs import cobs from collections import ( defaultdict, ) from contextlib import contextmanager from enum import Enum import logging import os from queue import ( Empty, Full, Queue, ) from random import randint import serial import serial.tools.list_ports import six import sys from threading import ( Thread, Lock, ) import time import zlib software_root = os.path.dirname(os.path.abspath(__file__)) sys.path.append(os.path.join(software_root, 'proto_gen')) from proto_gen import splitflap_pb2 SPLITFLAP_BAUD = 230400 class Splitflap(object): class ForceMovement(Enum): NONE = 1 # No movement if module is already at the specified character ONLY_NON_BLANK = 2 # Force a full revolution if module is already at the specified character, but only if it's not the blank (' ') character ALL = 3 # All modules move on every command, regardless of whether they are already at the specified character RETRY_TIMEOUT = 0.25 _LEGACY_ALPHABET = [ ' ', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '.', ',', "'", ] def __init__(self, serial_instance): self._serial = serial_instance self._logger = logging.getLogger('splitflap') self._out_q = Queue() self._ack_q = Queue() self._next_nonce = randint(0, 255) self._run = True self._lock = Lock() self._message_handlers = defaultdict(list) self._current_config = splitflap_pb2.SplitflapConfig() self._num_modules = None self._alphabet = Splitflap._LEGACY_ALPHABET self._alphabet_received = False def _read_loop(self): self._logger.debug('Read loop started') buffer = b'' while True: buffer += self._serial.read_until(b'\0') if not self._run: return if not len(buffer): continue if not buffer.endswith(b'\0'): continue self._process_frame(buffer[:-1]) buffer = b'' def _process_frame(self, frame): try: decoded = cobs.decode(frame) except cobs.DecodeError: self._logger.debug(f'Failed decode ({len(frame)} bytes)') self._logger.debug(frame) return if len(decoded) < 4: return payload = decoded[:-4] expected_crc = zlib.crc32(payload) & 0xffffffff provided_crc = (decoded[-1] << 24) \ | (decoded[-2] << 16) \ | (decoded[-3] << 8) \ | decoded[-4] if expected_crc != provided_crc: self._logger.debug(f'Bad CRC. expected={hex(expected_crc)}, actual={hex(provided_crc)}') return message = splitflap_pb2.FromSplitflap() message.ParseFromString(payload) self._logger.debug(message) payload_type = message.WhichOneof('payload') # If this is an ack, notify the write thread if payload_type == 'ack': nonce = message.ack.nonce self._ack_q.put(nonce) elif payload_type == 'splitflap_state': num_modules_reported = len(message.splitflap_state.modules) if self._num_modules is None: self._num_modules = num_modules_reported for i in range(num_modules_reported): self._current_config.modules.append(splitflap_pb2.SplitflapConfig.ModuleConfig()) else: assert self._num_modules == num_modules_reported, f'Number of reported modules changed (was {self._num_modules}, now {num_modules_reported})' elif payload_type == 'general_state' and not self._alphabet_received: self._alphabet_received = True self._alphabet = list(message.general_state.flap_character_set.decode('utf-8')) with self._lock: for handler in self._message_handlers[payload_type] + self._message_handlers[None]: try: handler(getattr(message, payload_type)) except: self._logger.warning(f'Unhandled exception in message handler ({payload_type})', exc_info=True) def _write_loop(self): self._logger.debug('Write loop started') while True: data = self._out_q.get() # Check for shutdown if not self._run: self._logger.debug('Write loop exiting @ _out_q') return (nonce, encoded_message) = data next_retry = 0 while True: if time.time() >= next_retry: if next_retry > 0: self._logger.debug('Retry write...') self._serial.write(encoded_message) self._serial.write(b'\0') next_retry = time.time() + Splitflap.RETRY_TIMEOUT try: latest_ack_nonce = self._ack_q.get(timeout=next_retry - time.time()) except Empty: latest_ack_nonce = None # Check for shutdown if not self._run: self._logger.debug('Write loop exiting @ _ack_q') return if latest_ack_nonce == nonce: break else: self._logger.debug(f'Got unexpected nonce: {latest_ack_nonce}') def _enqueue_message(self, message): nonce = self._next_nonce self._next_nonce += 1 message.nonce = nonce payload = bytearray(message.SerializeToString()) crc = zlib.crc32(payload) & 0xffffffff payload.append(crc & 0xff) payload.append((crc >> 8) & 0xff) payload.append((crc >> 16) & 0xff) payload.append((crc >> 24) & 0xff) encoded_message = cobs.encode(payload) self._out_q.put((nonce, encoded_message)) approx_q_length = self._out_q.qsize() self._logger.debug(f'Out q length: {approx_q_length}') if approx_q_length > 10: self._logger.warning(f'Output queue length is high! ({approx_q_length}) Is the splitflap still connected and functional?') def get_alphabet(self): return self._alphabet def set_text(self, text, force_movement=ForceMovement.NONE): """Helper for setting a string message. Using set_positions is preferable for more control.""" # Transform text to a list of flap indexes (and pad with blanks so that all modules get updated even if text is shorter) positions = [self._alphabet.index(c) if c in self._alphabet else 0 for c in text] + [self._alphabet.index(' ')] * (self._num_modules - len(text)) if force_movement == Splitflap.ForceMovement.NONE: force_movement = None elif force_movement == Splitflap.ForceMovement.ONLY_NON_BLANK: force_movement = [c in self._alphabet and c != ' ' for c in text] + [False] * (self._num_modules - len(text)) elif force_movement == Splitflap.ForceMovement.ALL: force_movement = [True] * self._num_modules else: raise RuntimeError(f'bad value {force_movement}') self.set_positions(positions, force_movement) def set_positions(self, positions, force_movement=None): assert self._num_modules is not None, 'Cannot set positions before number of modules is known' assert len(positions) <= self._num_modules, 'More positions specified than modules' if force_movement is not None: assert len(positions) == len(force_movement), 'positions and force_movement list length must match' for i in range(len(positions)): if positions[i] is not None: self._current_config.modules[i].target_flap_index = positions[i] if force_movement is not None and force_movement[i]: self._current_config.modules[i].movement_nonce = (self._current_config.modules[i].movement_nonce + 1) % 256 message = splitflap_pb2.ToSplitflap() message.splitflap_config.CopyFrom(self._current_config) self._enqueue_message(message) def start(self): self.read_thread = Thread(target=self._read_loop) self.write_thread = Thread(target=self._write_loop) self.read_thread.start() self.write_thread.start() def shutdown(self): self._logger.info('Shutting down...') self._run = False self.read_thread.join() self._logger.debug('Read thread terminated') self._out_q.put(None) self._ack_q.put(None) self.write_thread.join() self._logger.debug('Write thread terminated') def add_handler(self, message_type, handler): with self._lock: self._message_handlers[message_type].append(handler) return lambda: self._remove_handler(message_type, handler) def _remove_handler(self, message_type, handler): with self._lock: self._message_handlers[message_type].remove(handler) def request_state(self): message = splitflap_pb2.ToSplitflap() message.request_state.SetInParent() self._enqueue_message(message) def hard_reset(self): self._serial.setRTS(True) self._serial.setDTR(False) time.sleep(0.2) self._serial.setDTR(True) time.sleep(0.2) def get_num_modules(self): assert self._num_modules is not None, 'Num modules is unknown. Make sure to wait for a state message before querying' return self._num_modules @contextmanager def splitflap_context(serial_port, default_logging=True, wait_for_comms=True): with serial.Serial(serial_port, SPLITFLAP_BAUD, timeout=1.0) as ser: s = Splitflap(ser) s.start() if default_logging: s.add_handler('log', lambda msg: logging.info(f'From splitflap: {msg.msg}')) if wait_for_comms: logging.info('Connecting to splitflap...') q = Queue(1) def startup_handler(message): try: q.put_nowait(None) except Full: pass unregister = s.add_handler('splitflap_state', startup_handler) s.request_state() q.get() unregister() logging.info('Connected!') try: yield s finally: s.shutdown() def ask_for_serial_port(): print('Available ports:') ports = sorted( filter( lambda p: p.description != 'n/a', serial.tools.list_ports.comports(), ), key=lambda p: p.device, ) for i, port in enumerate(ports): print('[{: 2}] {} - {}'.format(i, port.device, port.description)) print() value = six.moves.input('Use which port? ') port_index = int(value) assert 0 <= port_index < len(ports) return ports[port_index].device def _run_example(): p = ask_for_serial_port() with splitflap_context(p) as s: modules = s.get_num_modules() alphabet = s.get_alphabet() # Set up a handler to log reported state changes def state_str(s): if s == splitflap_pb2.SplitflapState.ModuleState.State.NORMAL: return '\u2713' elif s == splitflap_pb2.SplitflapState.ModuleState.State.LOOK_FOR_HOME: return '\u2370' elif s == splitflap_pb2.SplitflapState.ModuleState.State.SENSOR_ERROR: return '\u26a0' elif s == splitflap_pb2.SplitflapState.ModuleState.State.PANIC: return '\u2342' elif s == splitflap_pb2.SplitflapState.ModuleState.State.DISABLED: return '\u29bb' last_state_string = '' def log_state(message): nonlocal last_state_string state_string = ''.join([alphabet[m.flap_index] if m.state == splitflap_pb2.SplitflapState.ModuleState.State.NORMAL else state_str(m.state) for m in message.modules]) if state_string != last_state_string: logging.info('State: ' + state_string) last_state_string = state_string s.add_handler('splitflap_state', log_state) s.request_state() # Loop forever while True: text = input()[:modules] s.set_text(text, Splitflap.ForceMovement.ALL) if __name__ == '__main__': parser = argparse.ArgumentParser('Splitflap python interface example') parser.add_argument('--verbose', '-v', action='store_true', help='Enable verbose logging') args = parser.parse_args() log_level = logging.DEBUG if args.verbose else logging.INFO logging.basicConfig(level=log_level, format='%(asctime)s:%(name)s:%(levelname)s:%(message)s') _run_example() ================================================ FILE: software/classic/demo.py ================================================ from __future__ import print_function import random import time from splitflap import splitflap from splitflap import ask_for_serial_port words = [ 'duck', 'goat', 'lion', 'bear', 'mole', 'crab', 'hare', 'toad', 'wolf', 'lynx', 'cats', 'dogs', 'bees', 'mule', 'seal', 'bird', 'frog', 'deer', 'lamb', 'fish', 'hawk', 'kiwi', ] def run(): port = ask_for_serial_port() print('Starting...') with splitflap(port) as s: while True: word = random.choice(words) print('Going to \'{}\''.format(word)) status = s.set_text(word) s.print_status(status) time.sleep(10) if __name__ == '__main__': run() ================================================ FILE: software/classic/flap_test.py ================================================ from time import sleep from splitflap import splitflap from splitflap import ask_for_serial_port def run(): port = ask_for_serial_port() print('Starting...') with splitflap(port) as s: characters = s.get_character_list() num_flaps = len(characters) # make sure all modules are home'd before we continue while(True): at_home = True for module in s.get_status(): at_home &= (module["flap"] == characters[0]) if not at_home: s.recalibrate_all() else: break index = 1 # we're at home (#0), start at flap #1 # loop through all flaps on every module while(True): char = characters[index] string = char * s.get_num_modules() print('Going to index {} (\'{}\')'.format(index, char)) status = s.set_text(string) s.print_status(status) if index == 0: break # we're back home index = (index + 1) % num_flaps sleep(1) if __name__ == '__main__': run() ================================================ FILE: software/classic/splitflap.py ================================================ import json from contextlib import contextmanager import serial import serial.tools.list_ports import six _ALPHABET = { ' ', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '.', ',', '\'', } class Splitflap(object): def __init__(self, serial_instance): self.serial = serial_instance self.has_inited = False self.num_modules = 0 self.character_list = _ALPHABET self.last_command = None self.last_status = None self.exception = None def _loop_for_status(self): while True: line = self.serial.readline().lstrip(b'\0').rstrip(b'\n') if not len(line): continue try: data = json.loads(line) except: print('Failed to parse', line) raise t = data['type'] if t == 'init': if self.has_inited: raise RuntimeError('Unexpected re-init!') self.has_inited = True self.num_modules = data['num_modules'] try: self.character_list = data['character_list'] except KeyError: self.character_list = _ALPHABET # for compatibility elif t == 'move_echo': if not self.has_inited: raise RuntimeError('Got move_echo before init!') if self.last_command is None: raise RuntimeError('Unexpected move_echo response from controller') if self.last_command != data['dest']: raise RuntimeError('Bad response from controller. Expected {!r} but got {!r}'.format( self.last_command, data['dest'], )) elif t == 'status': if not self.has_inited: raise RuntimeError('Got status before init!') if len(data['modules']) != self.num_modules: raise RuntimeError('Wrong number of modules in status update. Expected {} but got {}'.format( self.num_modules, len(data['modules']), )) self.last_status = data['modules'] return self.last_status elif t == 'no_op': pass else: raise RuntimeError('Unexpected message: {!r}'.format(data)) def in_character_list(self, letter): return letter in self.character_list def get_character_list(self): return self.character_list def set_text(self, text): text = text[0:self.num_modules] # trim to number of modules available for letter in text: assert self.in_character_list(letter), 'Unexpected letter: {!r}. Must be one of {!r}'.format( letter, list(self.character_list), ) self.last_command = text self.serial.write(b'=' + text.encode() + b'\n') return self._loop_for_status() def recalibrate_all(self): self.serial.write(b'@') return self._loop_for_status() def get_text(self): text = "" if self.last_status != None: for module in self.last_status: text += module['flap'] return text def get_status(self): return self.last_status def get_num_modules(self): return self.num_modules def print_status(self, status=None): if(status is None): status = self.last_status for module in status: state = '' if module['state'] == 'panic': state = '!!!!' elif module['state'] == 'look_for_home': state = '...' elif module['state'] == 'sensor_error': state = '????' elif module['state'] == 'normal': state = module['flap'] print('{:4} {: 4} {: 4}'.format(state, module['count_missed_home'], module['count_unexpected_home'])) @contextmanager def splitflap(serial_port): with serial.Serial(serial_port, 38400, timeout=1.0) as ser: s = Splitflap(ser) s._loop_for_status() yield s def ask_for_serial_port(): print('Available ports:') ports = sorted( filter( lambda p: p.description != 'n/a', serial.tools.list_ports.comports(), ), key=lambda p: p.device, ) for i, port in enumerate(ports): print('[{: 2}] {} - {}'.format(i, port.device, port.description)) print() value = six.moves.input('Use which port? ') port_index = int(value) assert 0 <= port_index < len(ports) return ports[port_index].device ================================================ FILE: software/classic/terminal.py ================================================ from splitflap import splitflap from splitflap import ask_for_serial_port def filter_string(string, sf): str_list = list(string) # use list instead of string so it's mutable for i, c in enumerate(str_list): new_char = ' ' # replace with space if not in list if sf.in_character_list(c): continue # in list, continue elif c.isalpha(): alt_char = c.lower() if c.isupper() else c.upper() # check for upper/lowercase equivalent if sf.in_character_list(alt_char): new_char = alt_char str_list[i] = new_char # replace character in list return ''.join(str_list) def run(): port = ask_for_serial_port() print('Starting...') with splitflap(port) as s: while True: string = input("Enter text: ") if string == "exit" or string == "quit" or string == "q": break string = filter_string(string, s) # filter characters to displayable ones string = string.ljust(s.get_num_modules(), ' ') # pad to the right with spaces print('Going to \'{}\''.format(string)) status = s.set_text(string) s.print_status(status) if __name__ == '__main__': run() ================================================ FILE: thirdparty/README ================================================ This project uses the following open source software: ---- xvfbwrapper - Copyright (c) 2012-015 Corey Goldberg Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ---- panelize.py - Copyright (c) 2016, Martin Furter ANY-LICENSE: You can use this software under any license approved by the Open Source Initiative as long as the license you choose is compatible to the dependencies of Tin's Kicad Tools. See http://www.opensource.org/licenses/ for a list of approved licenses. ================================================ FILE: thirdparty/__init__.py ================================================ ================================================ FILE: thirdparty/panelize.py ================================================ #!/usr/bin/python3 # # This file is part of Tin's Kicad Tools. # Copyright (c) 2016, Martin Furter # All rights reserved. # # Homepage: https://projects.borg.ch/electronics/kicad/panelize.html # SVN Repos: https://repos.borg.ch/projects/kicad/trunk/tools # # ANY-LICENSE: # You can use this software under any license approved by the # Open Source Initiative as long as the license you choose is # compatible to the dependencies of Tin's Kicad Tools. # # See http://www.opensource.org/licenses/ for a list of # approved licenses. # #------------------------------------------------------------------------------- # Scott's modifications: # 2018-08-03 - Changed "page" from Text to List, to support page definitions like "User 111 123" instead of "A4" # 2018-12-18 - Added \n to the set of characters that will trigger a text element to be quoted when written import math import sys import traceback __version__ = "3.1.4" __revision__ = "$Rev: 953 $ unkown".split()[1] kicad_versions = ( "4.0.5", "latest" ) compat_4_0_5 = kicad_versions.index( "4.0.5" ) def check_instance( inst, cls ): if isinstance( inst, cls ): return cname = cls.__name__ iname = type(inst).__name__ raise Exception( "Expected class '%s' but got an instance of '%s'." % ( cname, iname ) ) class KicadObj: def __init__( self, name ): self.obj_name = name def clone( self ): raise Exception( "KicadObj.clone() has not been overridden by '%s'" % self.__class__.__name__ ) def tag_start( self, factory, name ): factory.parse_error( "unexpected tag '%s' in '%s'" % ( name, self.obj_name ) ) def tag_end( self, factory, obj ): factory.parse_error( "unexpected tag end in '%s'" % ( self.obj_name ) ) def tag_value( self, factory, value ): factory.parse_error( "unexpected value '%s' for '%s'" % ( value, self.obj_name ) ) def is_set( self ): return True def write( self, writer ): writer.begin( self.obj_name ) self.write_contents( writer ) writer.end() def write_contents( self, writer ): pass class KicadFatObj( KicadObj ): def __init__( self, name, object_types ): KicadObj.__init__( self, name ) # self.object_types = object_types self.object_type_names = [] self.object_type_dict = {} for ot in object_types: if type(ot) is tuple: typename = ot[0] else: typename = ot.obj_name setattr( self, typename, ot ) self.object_type_names.append( typename ) self.object_type_dict[typename] = ot def clone( self ): obj = type(self)( self.obj_name ) for typename, ot in self.object_type_dict.items(): if type(ot) == tuple: v = ot[1] else: v = getattr( self, typename ) v = self.clone_obj( v ) setattr( obj, typename, v ) return obj def clone_obj( self, obj ): if obj == None: return obj if isinstance( obj, KicadObj ): return obj.clone() t = type(obj) if t in ( int, str ): return obj if t is list: l = [] for o in obj: l.append( self.clone_obj( o ) ) return l raise Exception( "don't know how to clone a '%s'." % type(obj).__name__ ) def tag_start( self, factory, name ): if name in self.object_type_dict: ot = self.object_type_dict[name] if type(ot) is tuple: obj = ot[2]( name ) # ot[1].append( obj ) return obj else: return ot KicadObj.tag_start( self, factory, name ) def tag_end( self, factory, obj ): name = obj.obj_name if name in self.object_type_dict: ot = self.object_type_dict[name] if type(ot) is tuple: ot[1].append( obj ) def set( self, name, value ): if name in self.object_type_dict: ot = self.object_type_dict[name] check_instance( ot, KicadObj ) self.object_type_dict[name] = value setattr( self, name, value ) def write_contents( self, writer ): self.write_objects( writer, self.object_type_names, False ) def write_obj( self, writer, name, newline=True ): ot = self.object_type_dict[name] if type(ot) is tuple: for obj in ot[1]: obj.write( writer ) if newline: writer.newline() else: obj = getattr( self, name ) if obj.is_set(): obj.write( writer ) if newline: writer.newline() def write_objects( self, writer, keys, newline=True ): for key in keys: if type(key) is bool: newline = key else: self.write_obj( writer, key, newline ) class Int( KicadObj ): def __init__( self, name, value=None ): KicadObj.__init__( self, name ) self.value = value def tag_value( self, factory, value ): self.value = int(value) def clone( self ): return Int( self.obj_name, self.value ) def is_set( self ): return self.value != None def write_contents( self, writer ): writer.write_int( self.value ) def __str__( self ): if self.value == None: return "<<>>" return "%d" % self.value class Float( KicadObj ): def __init__( self, name, value=None ): KicadObj.__init__( self, name ) self.value = value def tag_value( self, factory, value ): self.value = float(value) def clone( self ): return Float( self.obj_name, self.value ) def is_set( self ): return self.value != None def write_contents( self, writer ): writer.write_float( self.value ) def __str__( self ): if self.value == None: return "<<>>" return "%f" % self.value class Text( KicadObj ): def __init__( self, name, value=None ): KicadObj.__init__( self, name ) self.value = value def tag_value( self, factory, value ): self.value = value def clone( self ): return Text( self.obj_name, self.value ) def is_set( self ): return self.value != None def write_contents( self, writer ): writer.write_text( self.value ) def __str__( self ): if self.value == None: return "<<>>" return self.value class Bool( KicadObj ): def __init__( self, name ): KicadObj.__init__( self, name ) self.value = None def tag_value( self, factory, value ): if value == "true": self.value = True elif value == "false": self.value = False else: factory.parse_error( "invalid value '%s' for bool '%s'" % ( value, self.obj_name ) ) def clone( self ): obj = Bool( self.obj_name ) obj.value = self.value return obj def is_set( self ): return self.value != None def write_contents( self, writer ): if self.value: writer.write_text( "true" ) else: writer.write_text( "false" ) def __str__( self ): if self.value == None: return "<<>>" if self.value: return "true" else: return "false" class YesNo( KicadObj ): def __init__( self, name ): KicadObj.__init__( self, name ) self.value = None def tag_value( self, factory, value ): if value == "yes": self.value = True elif value == "no": self.value = False else: factory.parse_error( "invalid value '%s' for bool '%s'" % ( value, self.obj_name ) ) def clone( self ): obj = YesNo( self.obj_name ) obj.value = self.value return obj def is_set( self ): return self.value != None def write_contents( self, writer ): if self.value: writer.write_text( "yes" ) else: writer.write_text( "no" ) def __str__( self ): if self.value == None: return "<<>>" if self.value: return "yes" else: return "no" class Vector( KicadObj ): def __init__( self, name, x=None, y=None ): KicadObj.__init__( self, name ) self.x = x self.y = y def tag_value( self, factory, value ): if self.x == None: self.x = float(value) elif self.y == None: self.y = float(value) else: factory.parse_error( "too many values for '%s'" % self.obj_name ) def clone( self ): return Vector( self.obj_name, self.x, self.y ) def is_set( self ): return self.y != None def write_contents( self, writer ): writer.write_float( self.x ) writer.write_float( self.y ) def __add__( self, v ): return Vector( self.obj_name, self.x+v.x, self.y+v.y ) def __sub__( self, v ): return Vector( self.obj_name, self.x-v.x, self.y-v.y ) def __str__( self ): if self.y == None: return "<<>>" return "%f/%f" % ( self.x, self.y ) def unrot( self ): return self def get_angle( self ): return 0 def rotate( self, angle ): x = self.x y = self.y if angle == 0: pass elif angle == 90: x, y = y, -x elif angle == 180: x, y = -x, -y elif angle == 270: x, y = -y, x else: # +++ sin/cos??? # raise Exception( "unsupported angle" ) ra = math.radians( angle ) sa = math.sin( ra ) ca = math.cos( ra ) x, y = x * ca + y * sa, x * sa - y * ca return Vector( self.obj_name, x, y ) class VectorAngle( Vector ): def __init__( self, name, x=None, y=None, a=0 ): Vector.__init__( self, name, x, y ) self.a = a def tag_value( self, factory, value ): if self.x == None: self.x = float(value) elif self.y == None: self.y = float(value) #elif self.a == None: # self.a = float(value) #else: # factory.parse_error( "too many values for '%s'" % self.obj_name ) else: self.a = float(value) def clone( self ): return VectorAngle( self.obj_name, self.x, self.y, self.a ) def write_contents( self, writer ): writer.write_float( self.x ) writer.write_float( self.y ) if self.a != None and self.a != 0: writer.write_float( self.a ) def __add__( self, v ): # +++ what about the angle??? return VectorAngle( self.obj_name, self.x+v.x, self.y+v.y, self.a ) def __sub__( self, v ): # +++ what about the angle??? return VectorAngle( self.obj_name, self.x-v.x, self.y-v.y, self.a ) def __str__( self ): if self.y == None: return "<<>>" if self.a == 0: return Vector.__str__( self ) return "%f/%f@%f" % ( self.x, self.y, self.a ) def unrot( self ): #x = self.x #y = self.y #if self.a == 0: # pass #elif self.a == 90: # x, y = y, -x #elif self.a == 180: # x, y = -x, -y #elif self.a == 270: # x, y = -y, x #else: # # +++ sin/cos??? # raise Exception( "unsupported angle" ) #return Vector( self.obj_name, x, y ) return self.rotate( self.a ) def get_angle( self ): return self.a or 0 class Vector3D( Vector ): def __init__( self, name, x=None, y=None, z=None ): Vector.__init__( self, name, x, y ) self.z = z def tag_value( self, factory, value ): if self.x == None: self.x = float(value) elif self.y == None: self.y = float(value) elif self.z == None: self.z = float(value) else: factory.parse_error( "too many values for '%s'" % self.obj_name ) def clone( self ): return Vector3D( self.obj_name, self.x, self.y, self.z ) def write_contents( self, writer ): writer.write_float( self.x ) writer.write_float( self.y ) if self.a != None: writer.write_float( self.a ) def __str__( self ): if self.z == None: return "<<>>" return "%f/%f/%f" % ( self.x, self.y, self.z ) class Area( KicadObj ): #def __init__( self, name, v1=Vector("area-v1"), v2=Vector("area-v2") ): # KicadObj.__init__( self, name ) # self.vector1 = v1 # self.vector2 = v2 def __init__( self, name, v1=None, v2=None ): KicadObj.__init__( self, name ) if v1 != None: self.vector1 = v1 else: self.vector1 = Vector("area-v1") if v2 != None: self.vector2 = v2 else: self.vector2 = Vector("area-v2") def tag_value( self, factory, value ): # self.values.append( float(value) ) if not self.vector1.is_set(): self.vector1.tag_value( factory, value ) else: self.vector2.tag_value( factory, value ) def clone( self ): a = Area( self.obj_name ) a.vector1.x = self.vector1.x a.vector1.y = self.vector1.y a.vector2.x = self.vector2.x a.vector2.y = self.vector2.y return a def is_set( self ): return self.vector1.is_set() and self.vector2.is_set() def write_contents( self, writer ): writer.write_float( self.vector1.x ) writer.write_float( self.vector1.y ) writer.write_float( self.vector2.x ) writer.write_float( self.vector2.y ) def normalize( self ): if self.vector1.x > self.vector2.x: self.vector1.x, self.vector2.x = self.vector2.x, self.vector1.x if self.vector1.y > self.vector2.y: self.vector1.y, self.vector2.y = self.vector2.y, self.vector1.y return self def is_inside( self, vect ): return (vect.x >= self.vector1.x and vect.x <= self.vector2.x and vect.y >= self.vector1.y and vect.y <= self.vector2.y) def __add__( self, v ): if isinstance( v, Vector ): return Area( self.obj_name, self.vector1 + v, self.vector2 + v ) elif isinstance( v, Area ): return Area( self.obj_name, self.vector1 + v, self.vector2 + v ) else: raise Exception( "invalid class" ) def __sub__( self, v ): if isinstance( v, Vector ): return Area( self.obj_name, self.vector1 - v, self.vector2 - v ) elif isinstance( v, Area ): return Area( self.obj_name, self.vector1 - v.vector1, self.vector2 - v.vector2 ) else: raise Exception( "invalid class" ) def __str__( self ): return "%s..%s" % ( self.vector1, self.vector2 ) class List( KicadObj ): def __init__( self, name ): KicadObj.__init__( self, name ) self.values = [] def tag_value( self, factory, value ): self.values.append( value ) def clone( self ): obj = List( self.obj_name ) for v in self.values: obj.values.append( v ) return obj def is_set( self ): return len(self.values) > 0 def write_contents( self, writer ): for value in self.values: writer.write_text( value ) class Keepout( KicadFatObj ): def __init__( self, name ): KicadFatObj.__init__( self, name, ( Text( "tracks" ), Text( "vias" ), Text( "copperpour" ), ) ) self.opt = None def tag_value( self, factory, value ): if self.opt == None: self.opt = value else: factory.parse_error( "too many values for '%s'" % self.obj_name ) def write_contents( self, writer ): if self.opt != None: writer.write_text( self.opt ) self.write_objects( writer, ( "tracks", "vias", "copperpour", ), False ) def is_set( self ): return self.tracks.is_set() and self.vias.is_set() and self.copperpour.is_set() class Fill( KicadFatObj ): def __init__( self, name ): KicadFatObj.__init__( self, name, ( Int( "arc_segments" ), Float( "thermal_gap" ), Float( "thermal_bridge_width" ), ) ) self.opt = None def tag_value( self, factory, value ): if self.opt == None: self.opt = value else: factory.parse_error( "too many values for '%s'" % self.obj_name ) def write_contents( self, writer ): if self.opt != None: writer.write_text( self.opt ) self.write_objects( writer, ( "arc_segments", "thermal_gap", "thermal_bridge_width", ), False ) class ConnectPads( KicadFatObj ): def __init__( self, name ): KicadFatObj.__init__( self, name, ( Float( "clearance" ), ) ) self.opt = None def tag_value( self, factory, value ): if self.opt == None: self.opt = value else: factory.parse_error( "too many values for '%s'" % self.obj_name ) def write_contents( self, writer ): if self.opt != None: writer.write_text( self.opt ) self.write_objects( writer, ( "clearance", ), False ) class Zone( KicadFatObj ): def __init__( self, name ): self.polygons = [] KicadFatObj.__init__( self, name, ( Int( "net" ), Text( "net_name" ), Text( "layer" ), Text( "tstamp" ), List( "hatch" ), ConnectPads( "connect_pads" ), Float( "min_thickness" ), Keepout( "keepout" ), Fill( "fill" ), ( "polygon", self.polygons, ListOfPoints ), ( "filled_polygon", self.polygons, ListOfPoints ), ) ) def write_contents( self, writer ): self.write_objects( writer, ( "net", "net_name", "layer", "tstamp", True, "hatch", "connect_pads", "min_thickness", "fill", "polygon", ), False ) if self.keepout.is_set(): writer.newline() self.write_objects( writer, ( "keepout", ), False) def is_inside( self, area ): for poly in self.polygons: if poly.obj_name == "polygon": if not poly.is_inside( area ): return False return True def copy( self, trans ): obj = Zone( self.obj_name ) obj.set( "net", trans.net( self.net ) ) obj.set( "net_name", trans.net( self.net_name ) ) obj.set( "layer", trans.layer( self.layer ) ) obj.set( "tstamp", self.tstamp.clone() ) obj.set( "hatch", self.hatch.clone() ) obj.set( "connect_pads", self.connect_pads.clone() ) obj.set( "min_thickness", self.min_thickness.clone() ) obj.set( "keepout", self.keepout.clone() ) obj.set( "fill", self.fill.clone() ) for p in self.polygons: obj.polygons.append( p.copy( trans ) ) return obj class Via( KicadFatObj ): def __init__( self, name ): KicadFatObj.__init__( self, name, ( Vector( "at" ), Float( "size" ), Float( "drill" ), List( "layers" ), Int( "net" ), Text( "tstamp" ), Text( "status" ), ) ) def is_inside( self, area ): return area.is_inside( self.at ) def copy( self, trans ): obj = Via( self.obj_name ) obj.set( "at", trans.vector( self.at ) ) obj.set( "size", self.size.clone() ) obj.set( "drill", self.drill.clone() ) obj.set( "layers", self.layers.clone() ) obj.set( "net", trans.net( self.net ) ) obj.set( "tstamp", self.tstamp.clone() ) obj.set( "status", self.status.clone() ) return obj class Segment( KicadFatObj ): def __init__( self, name ): KicadFatObj.__init__( self, name, ( Vector( "start" ), Vector( "end" ), Float( "width" ), Text( "layer" ), Int( "net" ), Text( "tstamp" ), Text( "status" ), ) ) def is_inside( self, area ): return area.is_inside( self.start ) and area.is_inside( self.end ) def copy( self, trans ): obj = Segment( self.obj_name ) obj.set( "start", trans.vector( self.start ) ) obj.set( "end", trans.vector( self.end ) ) obj.set( "width", self.width.clone() ) obj.set( "layer", trans.layer( self.layer ) ) obj.set( "net", trans.net( self.net ) ) obj.set( "tstamp", self.tstamp.clone() ) obj.set( "status", self.status.clone() ) return obj class DimLinePoints( KicadFatObj ): def __init__( self, name ): self.lines = [] KicadFatObj.__init__( self, name, ( DimLinePoints( "arrow2b" ), ) ) self.size = None class ListOfPoints( KicadObj ): def __init__( self, name ): self.points = [] KicadObj.__init__( self, name ) self.pts_started = False def tag_start( self, factory, name ): if not self.pts_started: self.pts_started = True return self elif name == "xy": obj = Vector( name ) self.points.append( obj ) return obj else: KicadObj.tag_start( self, factory, name ) def tag_end( self, factory, obj ): pass def write( self, writer ): n = len(self.points) writer.begin( self.obj_name ) if n > 2: writer.newline() writer.begin( "pts" ) if n > 2: writer.newline() for i in range( 0, n ): self.points[i].write( writer ) nl = ((i+1) % 5) == 0 if nl: writer.newline() if n > 2 and not nl: writer.newline() writer.end() if n > 2: writer.newline() writer.end() if n > 2: writer.newline() def is_inside( self, area ): for p in self.points: if not area.is_inside( p ): return False return True def copy( self, trans ): obj = ListOfPoints( self.obj_name ) obj.pts_started = False for p in self.points: obj.points.append( trans.vector( p ) ) return obj class Dimension( KicadFatObj ): def __init__( self, name ): self.lines = [] KicadFatObj.__init__( self, name, ( Float( "width" ), Text( "layer" ), GrText( "gr_text" ), Vector( "end" ), ListOfPoints( "feature1" ), ListOfPoints( "feature2" ), ListOfPoints( "crossbar" ), ListOfPoints( "arrow1a" ), ListOfPoints( "arrow1b" ), ListOfPoints( "arrow2a" ), ListOfPoints( "arrow2b" ), ) ) self.size = None def tag_value( self, factory, value ): if self.size == None: self.size = value else: factory.parse_error( "too many values for '%s'" % self.obj_name ) def is_inside( self, area ): return False # +++ def write_contents( self, writer ): writer.write_text( self.size ) self.write_objects( writer, ( "width", True, "layer", "gr_text", "feature1", "feature2", "crossbar", "arrow1a", "arrow1b", "arrow2a", "arrow2b", ), False ) class GrCircle( KicadFatObj ): def __init__( self, name ): KicadFatObj.__init__( self, name, ( Vector( "center" ), Vector( "end" ), Text( "layer" ), Float( "width" ), ) ) def is_inside( self, area ): return area.is_inside( self.center ) def copy( self, trans ): obj = GrCircle( self.obj_name ) obj.set( "center", trans.vector( self.center ) ) obj.set( "end", trans.vector( self.end ) ) obj.set( "layer", trans.layer( self.layer ) ) obj.set( "width", self.width.clone() ) return obj class GrArc( KicadFatObj ): def __init__( self, name ): KicadFatObj.__init__( self, name, ( Vector( "start" ), Vector( "end" ), Float( "angle" ), Text( "layer" ), Float( "width" ), Text( "tstamp" ), ) ) def is_inside( self, area ): return area.is_inside( self.start ) and area.is_inside( self.end ) def copy( self, trans ): obj = GrArc( self.obj_name ) obj.set( "start", trans.vector( self.start ) ) obj.set( "end", trans.vector( self.end ) ) obj.set( "angle", trans.arc_angle( self.angle ) ) obj.set( "layer", trans.layer( self.layer ) ) obj.set( "width", self.width.clone() ) obj.set( "tstamp", self.tstamp.clone() ) return obj class GrLine( KicadFatObj ): def __init__( self, name ): KicadFatObj.__init__( self, name, ( Vector( "start" ), Vector( "end" ), Int( "angle" ), Text( "layer" ), Float( "width" ), Text( "tstamp" ), ) ) def is_inside( self, area ): return area.is_inside( self.start ) and area.is_inside( self.end ) def copy( self, trans ): obj = GrLine( self.obj_name ) obj.set( "start", trans.vector( self.start ) ) obj.set( "end", trans.vector( self.end ) ) obj.set( "angle", self.angle.clone() ) obj.set( "layer", trans.layer( self.layer ) ) obj.set( "width", self.width.clone() ) obj.set( "tstamp", self.tstamp.clone() ) return obj class GrText( KicadFatObj ): def __init__( self, name ): KicadFatObj.__init__( self, name, ( VectorAngle( "at" ), Text( "layer" ), Text( "tstamp" ), Effects( "effects" ), ) ) self.text = None def tag_value( self, factory, value ): if self.text == None: self.text = value else: factory.parse_error( "too many values for '%s'" % self.obj_name ) def write( self, writer ): writer.begin( self ) writer.write_text( self.text ) self.write_objects( writer, ( "at", "layer", "tstamp", ), False ) writer.newline() self.write_obj( writer, "effects", False ) writer.newline() writer.end() def is_inside( self, area ): return area.is_inside( self.at ) def copy( self, trans ): obj = GrText( self.obj_name ) obj.text = self.text obj.set( "at", trans.vector( self.at ) ) obj.set( "layer", trans.layer( self.layer ) ) obj.set( "tstamp", self.tstamp.clone() ) obj.set( "effects", self.effects.copy( trans ) ) return obj class FpArc( KicadFatObj ): def __init__( self, name ): KicadFatObj.__init__( self, name, ( Vector( "start" ), Vector( "end" ), Float( "angle" ), Text( "layer" ), Float( "width" ), ) ) def write( self, writer ): writer.begin( self ) self.write_objects( writer, ( "start", "end", "angle", "layer", "width", ), False ) writer.end() def copy( self, trans ): obj = FpArc( self.obj_name ) obj.set( "start", trans.add_flip_rot( self.start ) ) obj.set( "end", trans.add_flip_rot( self.end ) ) obj.set( "angle", trans.arc_angle( self.angle ) ) obj.set( "layer", trans.layer( self.layer ) ) obj.set( "width", self.width.clone() ) return obj class FpCircle( KicadFatObj ): def __init__( self, name ): KicadFatObj.__init__( self, name, ( Vector( "center" ), Vector( "end" ), Text( "layer" ), Float( "width" ), ) ) def write( self, writer ): writer.begin( self ) self.write_objects( writer, ( "center", "end", "layer", "width", ), False ) writer.end() def copy( self, trans ): obj = FpCircle( self.obj_name ) obj.set( "center", trans.add_flip_rot( self.center ) ) obj.set( "end", trans.add_flip_rot( self.end ) ) obj.set( "layer", trans.layer( self.layer ) ) obj.set( "width", self.width.clone() ) return obj class FpLine( KicadFatObj ): def __init__( self, name ): KicadFatObj.__init__( self, name, ( Vector( "start" ), Vector( "end" ), Text( "layer" ), Float( "width" ), ) ) def write( self, writer ): writer.begin( self ) self.write_objects( writer, ( "start", "end", "layer", "width", ), False ) writer.end() def copy( self, trans ): obj = FpLine( self.obj_name ) obj.set( "start", trans.add_flip_rot( self.start ) ) obj.set( "end", trans.add_flip_rot( self.end ) ) obj.set( "layer", trans.layer( self.layer ) ) obj.set( "width", self.width.clone() ) return obj class FpText( KicadFatObj ): def __init__( self, name ): KicadFatObj.__init__( self, name, ( VectorAngle( "at" ), Text( "layer" ), Effects( "effects" ), ) ) self.kind = None self.name = None self.hide = False def tag_value( self, factory, value ): if self.kind == None: self.kind = value elif self.name == None: self.name = value elif value == "hide": self.hide = True else: factory.parse_error( "too many values for '%s'" % self.obj_name ) def write( self, writer ): writer.begin( self ) writer.write_text( self.kind ) writer.write_text( self.name ) self.write_obj( writer, "at", False ) self.write_obj( writer, "layer", False ) if self.hide: writer.write_text( "hide" ) writer.newline() self.write_obj( writer, "effects" ) writer.newline() writer.end() def copy( self, trans ): obj = FpText( self.obj_name ) obj.set( "kind", self.kind ) obj.set( "name", self.name ) obj.set( "hide", self.hide ) obj.set( "at", trans.add_flip_rot( self.at ) ) obj.set( "layer", trans.layer( self.layer ) ) obj.set( "effects", self.effects.copy( trans ) ) return obj class Font( KicadFatObj ): def __init__( self, name ): KicadFatObj.__init__( self, name, ( Vector( "size" ), Float( "thickness" ), # Flag( "italic" ), ) ) self.italic = False def tag_value( self, factory, value ): if value == "italic": self.italic = True else: raise Exception( "Font.tag_value( '%s' )." % value ) def write( self, writer ): writer.begin( self ) self.write_objects( writer, ( "size", "thickness" ), False ) if self.italic: writer.write_text( "italic" ) writer.end() def copy( self, trans ): obj = Font( self.obj_name ) obj.set( "size", self.size.clone() ) obj.set( "thickness", self.thickness.clone() ) obj.italic = self.italic return obj class Justify( List ): def __init__( self, name ): List.__init__( self, name ) def clone( self ): obj = Justify( self.obj_name ) for v in self.values: obj.values.append( v ) return obj def copy( self, trans ): obj = self.clone() if trans.flip: if "mirror" in obj.values: obj.values.remove( "mirror" ) else: obj.values.append( "mirror" ) return obj class Effects( KicadFatObj ): def __init__( self, name ): KicadFatObj.__init__( self, name, ( Font( "font" ), Justify( "justify" ), ) ) def write( self, writer ): writer.begin( self ) self.write_objects( writer, ( "font", "justify" ), False ) writer.end() def copy( self, trans ): obj = Effects( self.obj_name ) obj.set( "font", self.font.copy( trans ) ) obj.set( "justify", self.justify.copy( trans ) ) return obj class Drill( KicadFatObj ): def __init__( self, name ): KicadFatObj.__init__( self, name, ( Vector( "offset" ), ) ) self.args = [] def tag_value( self, factory, value ): self.args.append(value) def write( self, writer ): if len(self.args) or self.offset.is_set(): writer.begin( self ) for arg in self.args: writer.write_text( arg ) if self.offset.is_set(): self.write_obj( writer, "offset", False ) writer.end() def copy( self, trans ): obj = Drill( self.obj_name ) if self.offset.x != None: obj.set( "offset", trans.add_flip_rot( self.offset ) ) for arg in self.args: obj.args.append(arg) return obj class Pad( KicadFatObj ): def __init__( self, name ): KicadFatObj.__init__( self, name, ( VectorAngle( "at" ), Vector( "size" ), Vector( "rect_delta" ), Drill( "drill" ), List( "layers" ), Float( "solder_mask_margin" ), Float( "clearance" ), Net( "net" ), Int( "zone_connect" ), ) ) self.nr = None self.kind = None self.shape = None def tag_value( self, factory, value ): if self.nr == None: self.nr = value elif self.kind == None: self.kind = value elif self.shape == None: self.shape = value else: factory.parse_error( "too many values for '%s'" % self.obj_name ) def write( self, writer ): writer.begin( self ) writer.write_text( self.nr ) writer.write_text( self.kind ) writer.write_text( self.shape ) self.write_objects( writer, ( "at", "size", "drill", "layers", ), False ) if self.rect_delta.is_set(): self.write_objects( writer, ("rect_delta",), False ) # +++++ if net.is_set() or zone_connect.is_set() #if self.get_obj( "net" ).is_set() or self.get_obj( "zone_connect" ).is_set() #if self.obj_is_set( "net" ) or self.obj_is_set( "zone_connect" ): if self.clearance.is_set() or self.net.is_set() or self.zone_connect.is_set(): writer.newline() self.write_objects( writer, ( "solder_mask_margin", "clearance", "net", "zone_connect", ), False ) writer.end() def copy( self, trans ): obj = Pad( self.obj_name ) obj.set( "nr", self.nr ) obj.set( "kind", self.kind ) obj.set( "shape", self.shape ) obj.set( "at", trans.add_flip_rot( self.at ) ) obj.set( "size", self.size.clone() ) obj.set( "drill", self.drill.copy( trans ) ) obj.set( "rect_delta", self.rect_delta.clone() ) for layer in self.layers.values: obj.layers.values.append( trans.layer( layer ) ) obj.set( "clearance", self.clearance.clone() ) obj.set( "net", trans.net( self.net ) ) obj.set( "zone_connect", self.zone_connect.clone() ) return obj class NamedVector3D( KicadFatObj ): def __init__( self, name ): KicadFatObj.__init__( self, name, ( Vector3D( "xyz" ), ) ) class Model( KicadFatObj ): def __init__( self, name ): KicadFatObj.__init__( self, name, ( NamedVector3D( "at" ), NamedVector3D( "scale" ), NamedVector3D( "rotate" ), ) ) self.filename = None def tag_value( self, factory, value ): if self.filename == None: self.filename = value else: factory.parse_error( "too many values for '%s'" % self.obj_name ) def write( self, writer ): writer.begin( self ) self.write_objects( writer, ( "font", "justify" ), False ) writer.end() def copy( self, trans ): obj = Model( self.obj_name ) obj.set( "font", self.font.copy( trans ) ) obj.set( "justify", self.justify.copy( trans ) ) return obj class Module( KicadFatObj ): def __init__( self, name ): self.graphics = [] self.pads = [] KicadFatObj.__init__( self, name, ( Text( "layer" ), Text( "tedit" ), Text( "tstamp" ), VectorAngle( "at" ), Text( "descr" ), Text( "tags" ), Text( "path" ), Float( "solder_mask_margin" ), Float( "clearance" ), Text( "attr" ), ( "fp_text", self.graphics, FpText ), ( "fp_line", self.graphics, FpLine ), ( "fp_circle", self.graphics, FpCircle ), ( "fp_arc", self.graphics, FpArc ), ( "pad", self.pads, Pad ), Model( "model" ), ) ) self.name = None self.locked = None def tag_value( self, factory, value ): if self.name == None: self.name = value elif self.locked == None: self.locked = value else: factory.parse_error( "too many values for '%s'" % self.obj_name ) def write( self, writer ): writer.begin( self ) writer.write_text( self.name ) if self.locked != None: writer.write_text( self.locked ) self.write_objects( writer, ( "layer", "tedit", True, "tstamp", "at", "descr", "tags", "path", "solder_mask_margin", "clearance", "fp_text", "pad", ), False ) writer.end() writer.newline( True ) writer.newline( True ) def is_inside( self, area ): #p = False #if self.name == "p_gen_conn:P_16_EDGE_PIN_HEADER": # p = True #if p: # print( "%s\nArea: %s\nAt: %s" % ( self.name, area, self.at ) ) area = area - self.at #if p: # print( "A2: %s" % area ) for pad in self.pads: # +++++ I believe unrot() is not needed here, at least removing # it solves a bug. needs more testing... # if not area.is_inside( pad.at.unrot() ): #if p: # print( "Pad: %s (%s)" % ( pad.at, pad.nr ) ) pat = pad.at.rotate( self.at.get_angle() ) #if p: # print( "pat: %s" % pat ) # if not area.is_inside( pad.at ): if not area.is_inside( pat ): #if p: # print( "False" ) return False #if p: # print( "True" ) return True def copy( self, trans ): obj = Module( self.obj_name ) obj.set( "name", self.name ) obj.set( "locked", self.locked ) obj.set( "layer", trans.layer( self.layer ) ) obj.set( "tedit", self.tedit.clone() ) obj.set( "tstamp", self.tstamp.clone() ) obj.set( "at", trans.vector( self.at ) ) obj.set( "descr", self.descr.clone() ) obj.set( "tags", self.tags.clone() ) obj.set( "path", self.path.clone() ) for graphic in self.graphics: obj.graphics.append( graphic.copy( trans ) ) for pad in self.pads: obj.pads.append( pad.copy( trans ) ) return obj class NetClass( KicadFatObj ): def __init__( self, name ): self.nets = [] KicadFatObj.__init__( self, name, ( Float( "clearance" ), Float( "trace_width" ), Float( "via_dia" ), Float( "via_drill" ), Float( "uvia_dia" ), Float( "uvia_drill" ), Float( "diff_pair_gap" ), # after 4.0.5 Float( "diff_pair_width" ), # after 4.0.5 ( "add_net", self.nets, Text ), ) ) self.name = None self.comment = None def tag_value( self, factory, value ): if self.name == None: self.name = value elif self.comment == None: self.comment = value else: factory.parse_error( "too many values for '%s'" % self.obj_name ) def write( self, writer ): writer.begin( self ) writer.write_text( self.name ) writer.write_text( self.comment ) writer.newline() if writer.compat( compat_4_0_5 ): self.write_objects( writer, ( "clearance", "trace_width", "via_dia", "via_drill", "uvia_dia", "uvia_drill", "add_net", ) ) else: self.write_objects( writer, ( "clearance", "trace_width", "via_dia", "via_drill", "uvia_dia", "uvia_drill", "diff_pair_gap", "diff_pair_width", "add_net", ) ) writer.newline() writer.end() writer.newline() writer.newline( True ) class Net( KicadObj ): def __init__( self, name, nr=None, netname=None ): KicadObj.__init__( self, name ) self.nr = nr self.name = netname def tag_value( self, factory, value ): if self.nr == None: self.nr = int(value) elif self.name == None: self.name = value else: factory.parse_error( "too many values for '%s'" % self.obj_name ) def is_set( self ): return self.name != None def write( self, writer ): writer.begin( self ) writer.write_int( self.nr ) writer.write_text( self.name ) writer.end() def clone( self ): return self def copy( self, trans ): return self class PcbPlotParams( KicadFatObj ): def __init__( self, name ): KicadFatObj.__init__( self, name, ( Text( "layerselection" ), Bool( "usegerberextensions" ), Bool( "excludeedgelayer" ), Float( "linewidth" ), Bool( "plotframeref" ), Bool( "viasonmask" ), Int( "mode" ), Bool( "useauxorigin" ), Int( "hpglpennumber" ), Int( "hpglpenspeed" ), Int( "hpglpendiameter" ), Int( "hpglpenoverlay" ), Bool( "psnegative" ), Bool( "psa4output" ), Bool( "plotreference" ), Bool( "plotvalue" ), Bool( "plotinvisibletext" ), Bool( "padsonsilk" ), Bool( "subtractmaskfromsilk" ), Int( "outputformat" ), Bool( "mirror" ), Int( "drillshape" ), Int( "scaleselection" ), Text( "outputdirectory" ), ) ) def init_defaults( self ): self.layerselection.value = "0x010fc_80000001" self.usegerberextensions.value = False self.excludeedgelayer.value = True self.linewidth.value = 0.1 self.plotframeref.value = False self.viasonmask.value = False self.mode.value = 1 self.useauxorigin.value = False self.hpglpennumber.value = 1 self.hpglpenspeed.value = 20 self.hpglpendiameter.value = 15 self.hpglpenoverlay.value = 2 self.psnegative.value = False self.psa4output.value = False self.plotreference.value = True self.plotvalue.value = True self.plotinvisibletext.value = False self.padsonsilk.value = False self.subtractmaskfromsilk.value = False self.outputformat.value = 1.0 self.mirror.value = False self.drillshape.value = 0 self.scaleselection.value = 1.0 self.outputdirectory.value = "production" def write( self, writer ): writer.begin( self ) writer.newline() self.write_objects( writer, ( "layerselection", "usegerberextensions", "excludeedgelayer", "linewidth", "plotframeref", "viasonmask", "mode", "useauxorigin", "hpglpennumber", "hpglpenspeed", "hpglpendiameter", "hpglpenoverlay", "psnegative", "psa4output", "plotreference", "plotvalue", "plotinvisibletext", "padsonsilk", "subtractmaskfromsilk", "outputformat", "mirror", "drillshape", "scaleselection", "outputdirectory", ) ) # writer.newline() writer.end() class Setup( KicadFatObj ): def __init__( self, name ): self.user_trace_width = [] self.user_via = [] KicadFatObj.__init__( self, name, ( Float( "last_trace_width" ), ( "user_trace_width", self.user_trace_width, Float ), ( "user_via", self.user_via, Vector ), Float( "trace_clearance" ), Float( "zone_clearance" ), YesNo( "zone_45_only" ), Float( "trace_min" ), Float( "segment_width" ), Float( "edge_width" ), Float( "via_size" ), Float( "via_drill" ), Float( "via_min_size" ), Float( "via_min_drill" ), Float( "uvia_size" ), Float( "uvia_drill" ), YesNo( "uvias_allowed" ), Float( "uvia_min_size" ), Float( "uvia_min_drill" ), Float( "pcb_text_width" ), Vector( "pcb_text_size" ), Float( "mod_edge_width" ), Vector( "mod_text_size" ), Float( "mod_text_width" ), Vector( "pad_size" ), Float( "pad_drill" ), Float( "pad_to_mask_clearance" ), Float( "pad_to_paste_clearance" ), Vector( "aux_axis_origin" ), Vector( "grid_origin" ), Text( "visible_elements" ), PcbPlotParams( "pcbplotparams" ), ) ) def init_defaults( self ): self.last_trace_width.value = 0.25 self.user_trace_width.append( Float( "user_trace_width", 0.25 ) ) self.user_via.append( Vector( "user_via", 0.6, 0.3 ) ) self.trace_clearance.value = 0.2 self.zone_clearance.value = 0.3 self.zone_45_only.value = False self.trace_min.value = 0.2 self.segment_width.value = 0.1 self.edge_width.value = 0.1 self.via_size.value = 0.6 self.via_drill.value = 0.4 self.via_min_size.value = 0.4 self.via_min_drill.value = 0.3 self.uvia_size.value = 0.3 self.uvia_drill.value = 0.1 self.uvias_allowed.value = False self.uvia_min_size.value = 0.2 self.uvia_min_drill.value = 0.1 self.pcb_text_width.value = 0.3 self.pcb_text_size.x = 1.5 self.pcb_text_size.y = 1.5 self.mod_edge_width.value = 0.15 self.mod_text_size.x = 1.0 self.mod_text_size.y = 1.0 self.mod_text_width.value = 0.15 self.pad_size.x = 1.5 self.pad_size.y = 1.5 self.pad_drill.value = 0.6 self.pad_to_mask_clearance.value = 0.0 self.pad_to_paste_clearance.value = 0.0 self.aux_axis_origin.x = 0.0 self.aux_axis_origin.y = 0.0 self.grid_origin.x = 0.0 self.grid_origin.y = 0.0 self.visible_elements.value = "FFFFFF7F" self.pcbplotparams.init_defaults() def write( self, writer ): writer.begin( self ) writer.newline() self.write_objects( writer, ( "last_trace_width", "user_trace_width", "user_via", "trace_clearance", "zone_clearance", "zone_45_only", "trace_min", "segment_width", "edge_width", "via_size", "via_drill", "via_min_size", "via_min_drill", "uvia_size", "uvia_drill", "uvias_allowed", "uvia_min_size", "uvia_min_drill", "pcb_text_width", "pcb_text_size", "mod_edge_width", "mod_text_size", "mod_text_width", "pad_size", "pad_drill", "pad_to_mask_clearance", "pad_to_paste_clearance", "aux_axis_origin", "grid_origin", "visible_elements", "pcbplotparams" ) ) writer.newline() writer.end() class Layer( KicadObj ): def __init__( self, nr, name=None, kind=None, hide=None ): KicadObj.__init__( self, nr ) self.nr = int(nr) self.name = name self.kind = kind self.hide = hide def tag_value( self, factory, value ): if self.name == None: self.name = value elif self.kind == None: self.kind = value elif self.hide == None: self.hide = value else: factory.parse_error( "too many values for '%s'" % self.obj_name ) def write( self, writer ): writer.begin( "%d" % self.nr ) writer.write_text( self.name ) writer.write_text( self.kind ) writer.end() class Layers( KicadObj ): def __init__( self, name ): KicadObj.__init__( self, name ) self.layers = {} self.names = {} self.internal_layer_count = 0 def clone( self ): obj = Layers( self.obj_name ) obj.layers = self.layers.copy() obj.names = self.names.copy() for layer in self.layers.values(): self.layer_added( layer ) return obj def tag_start( self, factory, name ): obj = Layer( name ) self.layers[obj.nr] = obj return obj def tag_end( self, factory, obj ): self.names[obj.name] = obj self.layer_added( obj ) def init_defaults( self ): for nr, name, kind in ( ( 0, "F.Cu", "signal" ), ( 31, "B.Cu", "signal" ), ( 32, "B.Adhes", "user" ), ( 33, "F.Adhes", "user" ), ( 34, "B.Paste", "user" ), ( 35, "F.Paste", "user" ), ( 36, "B.SilkS", "user" ), ( 37, "F.SilkS", "user" ), ( 38, "B.Mask", "user" ), ( 39, "F.Mask", "user" ), ( 40, "Dwgs.User", "user" ), ( 41, "Cmts.User", "user" ), ( 42, "Eco1.User", "user" ), ( 43, "Eco2.User", "user" ), ( 44, "Edge.Cuts", "user" ), ( 45, "Margin", "user" ), ( 46, "B.CrtYd", "user" ), ( 47, "F.CrtYd", "user" ), ( 48, "B.Fab", "user" ), ( 49, "F.Fab", "user" ), ): obj = Layer( nr, name, kind ) self.layers[obj.nr] = obj self.names[obj.name] = obj self.layer_added( obj ) def layer_added( self, obj ): if obj.name.startswith( "In" ) and obj.name.endswith( ".Cu" ): n = int( obj.name[2:-3] ) if n > self.internal_layer_count: self.internal_layer_count = n def get_internal_layer_count( self ): return self.internal_layer_count def write( self, writer ): writer.begin( self ) writer.newline() # nrs = self.layers.keys()[:] nrs = list( self.layers.keys() ) nrs.sort() for nr in nrs: self.layers[nr].write( writer ) writer.newline() writer.end() writer.newline() class TitleBlock( KicadFatObj ): def __init__( self, name ): self.comments = [ None, None, None, None ] KicadFatObj.__init__( self, name, ( Text( "title" ), Text( "date" ), Text( "rev" ), Text( "company" ), ( "comment", self.comments, List ), ) ) def append( self, obj ): i = int(obj.values[0]) self.comments[i-1] = obj.values[1] def write( self, writer ): writer.begin( self ) writer.newline() self.write_obj( writer, "title" ) self.write_obj( writer, "rev" ) self.write_obj( writer, "company" ) for i in range( 0, 4 ): if self.comments[i] != None: writer.begin( "comment" ) writer.write_int( i+1 ) writer.write_text( self.comments[i] ) writer.end() writer.newline() writer.newline() writer.end() class General( KicadFatObj ): def __init__( self, name ): KicadFatObj.__init__( self, name, ( Int( "links" ), Int( "no_connects" ), Area( "area" ), Float( "thickness" ), Int( "drawings" ), Int( "tracks" ), Int( "zones" ), Int( "modules" ), Int( "nets" ), ) ) def init_defaults( self ): self.links.value = 0 self.no_connects.value = 0 self.area.vector1.x = 0.0 self.area.vector1.y = 0.0 self.area.vector2.x = 0.0 self.area.vector2.y = 0.0 self.thickness.value = 1.6 self.drawings.value = 0 self.tracks.value = 0 self.zones.value = 0 self.modules.value = 0 self.nets.value = 0 def write( self, writer ): # maybe these values have to be updated before writing? +++++ writer.begin( self ) writer.newline() self.write_objects( writer, ( "links", "no_connects", "area", "thickness", "drawings", "tracks", "zones", "modules", "nets" ) ) writer.newline() writer.end() writer.newline() class NetsList: def __init__( self ): self.by_nr = {} self.by_name = {} self.max_nr = -1 def append( self, obj ): self.by_nr[obj.nr] = obj self.by_name[obj.name] = obj if obj.nr > self.max_nr: self.max_nr = obj.nr def create( self, name ): if self.max_nr < 0: self.append( Net( "net", 0, "" ) ) net = Net( "net", self.max_nr+1, name ) self.append( net ) return net.nr def __iter__( self ): def elements( d ): l = list( d.keys() ) l.sort() for k in l: yield d[k] return elements( self.by_nr ) class KicadPcb( KicadFatObj ): def __init__( self, name, template=None ): self.nets = NetsList() self.net_classes = [] self.modules = [] self.graphics = [] self.segments = [] self.zones = [] if template == None: version = Int( "version" ) host = List( "host" ) general = General( "general" ) page = List( "page" ) title_block = TitleBlock( "title_block" ) layers = Layers( "layers" ) setup = Setup( "setup" ) else: version = template.version.clone() host = template.host.clone() general = template.general.clone() page = template.page.clone() title_block = template.title_block.clone() layers = template.layers.clone() setup = template.setup.clone() KicadFatObj.__init__( self, name, ( version, host, general, page, title_block, layers, setup, ( "net", self.nets, Net ), ( "net_class", self.net_classes, NetClass ), ( "module", self.modules, Module ), ( "gr_circle", self.graphics, GrCircle ), ( "gr_arc", self.graphics, GrArc ), ( "gr_line", self.graphics, GrLine ), ( "gr_text", self.graphics, GrText ), ( "dimension", self.graphics, Dimension ), ( "segment", self.segments, Segment ), ( "via", self.segments, Via ), ( "zone", self.zones, Zone ), ) ) def finished_loading( self ): pass def get_internal_layer_count( self ): return self.layers.get_internal_layer_count() def write( self, writer ): writer.begin( self ) self.write_obj( writer, "version", False ) self.write_obj( writer, "host" ) writer.newline( True ) self.write_obj( writer, "general" ) writer.newline( True ) self.write_obj( writer, "page" ) self.write_obj( writer, "title_block" ) writer.newline( True ) self.write_obj( writer, "layers" ) writer.newline( True ) self.write_obj( writer, "setup" ) writer.newline( True ) self.write_obj( writer, "net" ) writer.newline( True ) self.write_obj( writer, "net_class" ) # writer.newline( True ) self.write_obj( writer, "module" ) self.write_obj( writer, "gr_line" ) writer.newline( True ) self.write_obj( writer, "segment" ) writer.newline( True ) self.write_obj( writer, "zone" ) writer.end() writer.newline() def copy( self, trans, dst_pcb ): for obj in self.modules[:]: if trans.accepts_layer( obj.layer ): if obj.is_inside( trans.src_area ): dst_pcb.modules.append( obj.copy( trans ) ) for obj in self.graphics[:]: if trans.accepts_layer( obj.layer ): if obj.is_inside( trans.src_area ): dst_pcb.graphics.append( obj.copy( trans ) ) for obj in self.segments[:]: if isinstance( obj, Segment ): if trans.accepts_layer( obj.layer ): if obj.is_inside( trans.src_area ): dst_pcb.segments.append( obj.copy( trans ) ) else: if trans.accepts_layers( obj.layers ): if obj.is_inside( trans.src_area ): dst_pcb.segments.append( obj.copy( trans ) ) for obj in self.zones[:]: if trans.accepts_layer( obj.layer ): if obj.is_inside( trans.src_area ): dst_pcb.zones.append( obj.copy( trans ) ) class Writer: def __init__( self, filename, compat_index ): self.filename = filename self.compat_index = compat_index print( "writing %s..." % self.filename ) self.ofd = open( filename, "w" ) self.indent = "" self.need_indent = True def compat( self, compat_index ): return compat_index >= self.compat_index def close( self ): self.ofd.close() print( "wrote %s." % self.filename ) def begin( self, name ): if isinstance( name, KicadObj ): name = name.obj_name if not self.do_indent(): self.ofd.write( " " ) self.ofd.write( "(%s" % name ) self.indent += " " def end( self ): self.indent = self.indent[2:] self.do_indent() self.ofd.write( ")" ) def newline( self, double=False ): if double or not self.need_indent: self.ofd.write( "\n" ) self.need_indent = True def do_indent( self ): if self.need_indent: self.need_indent = False self.ofd.write( self.indent ) return True return False def write_int( self, value ): self.ofd.write( " %d" % value ) def write_float( self, value ): value = " %f" % value if "." in value: value = value.rstrip( "0" ).rstrip( "." ) self.ofd.write( value ) def write_text( self, value ): #if value == "" or ' ' in value or '\t' in value: # value = "\"%s\"" % value.replace( "\"", "\\\"" ) quote = False if value == "" or "\\n" in value: quote = True else: for c in value: if c in " \t()": quote=True break if quote: value = "\"%s\"" % value self.ofd.write( " %s" % value ) quote_chars = { "n": "\n", "r": "\r", "t": "\t", } def unquote( s ): i = s.find( '\\' ) while i >= 0: j = i + 1 if j >= len(s): # trailing single backslash break c = s[j] if c in quote_chars: c = quote_chars[c] s = s[:i] + c + s[j+1:] i = s.find( '\\', i ) return s class ParseError( Exception ): def __init__( self, msg, factory ): self.msg = msg self.factory = factory self.args = ( factory.filename, factory.line, factory.column, msg ) def __repr__( self ): return "ParseError(%r, %r, %r, %r)" % self.args def __str__( self ): return "%s:%d.%d: %s" % self.args class KicadFactory( KicadObj ): def __init__( self ): KicadObj.__init__( self, "KicadFactory" ) self.filename = "" self.line = 0 self.column = 0 def parse_file( self, filename ): self.filename = filename print( "loading %s." % filename ) ifd = open( self.filename, "r" ) data = ifd.read( 16*1024*1024 ) ifd.close() print( "parsing %s." % filename ) obj = self.parse_data( data ) print( "parsed %s." % filename ) return obj def parse_print( self, s ): x = False # x = True if x: print( s ) def parse_data( self, data ): l = len(data) i = 0 self.line = 1 lineoff = 0 objs = [ self ] while i < l: c = data[i] if c == '(': # start of a tuple i += 1 start = i while i < l and not data[i] in " \t\r\n()": i += 1 self.column = i-lineoff if i == start: self.parse_error( "no word at start of tuple" ) name = data[start:i] self.parse_print( "(" + name ) obj = objs[-1].tag_start( self, name ) if obj == None: raise ParseError( "tag_start for '%s' in '%s' returned None" % ( name, objs[-1].obj_name ), self ) objs.append( obj ) elif c == ')': # end of a tuple self.column = i-lineoff self.parse_print( ")" ) obj = objs.pop() objs[-1].tag_end( self, obj ) i += 1 elif c == '"': # start of a quoted string i += 1 start = i c = "" while i < l and ( data[i] != '"' or c == '\\' ): if data[i] == '\n': self.line += 1 lineoff = i c = data[i] i += 1 if i >= l: self.column = i-lineoff self.parse_error( "unterminated quoted string" ) value = data[start:i] self.parse_print( " '%s'" % value ) self.column = i-lineoff objs[-1].tag_value( self, value ) i += 1 elif not c.isspace(): # start of a word start = i i += 1 while i < l and not data[i] in " \t\r\n()": i += 1 value = data[start:i] self.parse_print( " '%s'" % value ) self.column = i-lineoff objs[-1].tag_value( self, value ) else: # skip whitespace while i < l and data[i].isspace(): if data[i] == '\n': self.line += 1 lineoff = i i += 1 return self.object def parse_error( self, text ): raise ParseError( text, self ) def tag_start( self, factory, name ): if name == "kicad_pcb": self.object = KicadPcb( name ) return self.object raise ParseError( "unterminated quoted string", self.line, i-lineoff ) def tag_end( self, factory, obj ): obj.finished_loading() def create_pcb( self ): pcb = KicadPcb( "kicad_pcb" ) pcb.version.value = 4 v = "%s-r%s" % ( __version__, __revision__ ) pcb.host.values = [ "panelize.py", v ] pcb.general.init_defaults() pcb.page.value = "A4" pcb.layers.init_defaults() pcb.setup.init_defaults() return pcb class Transformer: def __init__( self ): self.src_pcb = None self.src_area = None self.dst_pcb = None self.dst_vector = None self.rotate = None self.flip = None self.clone_nets = True self.swap_internal_layers = False self.layer_filter_list = None self.layer_filter_include = False # self.net_pfx_nr = 0 # self.dx = 0 self.dy = 0 self.fxx = 0 self.fxy = 0 self.fyx = 0 self.fyy = 0 self.da = 0 self.fa = 1 def exclude_layer( self, name ): if self.layer_filter_list == None or self.layer_filter_include: self.layer_filter_include = False self.layer_filter_list = set() self.layer_filter_list.add( name ) def include_layer( self, name ): if self.layer_filter_list == None or not self.layer_filter_include: self.layer_filter_include = True self.layer_filter_list = set() self.layer_filter_list.add( name ) def include_all_layers( self ): self.layer_filter_list = None def set_src_pcb( self, pcb ): self.src_pcb = pcb if self.dst_pcb == None: self.dst_pcb = pcb def set_dst_pcb( self, pcb ): self.dst_pcb = pcb def create_template( self ): if self.src_pcb == None: return False self.dst_pcb = KicadPcb( self.src_pcb.obj_name, self.src_pcb ) return True def set_src_area( self, area ): self.src_area = area.clone().normalize() def set_dst_vector( self, vect ): self.dst_vector = vect def set_rotate( self, rotate ): self.rotate = rotate def set_flip( self, flip ): self.flip = flip def set_swap_internal_layers( self, swap_internal_layers ): self.swap_internal_layers = swap_internal_layers def recalculate( self ): self.dx = 0 self.dy = 0 self.fxx = 0 self.fxy = 0 self.fyx = 0 self.fyy = 0 self.da = self.rotate self.fa = 1 if self.flip: self.fa = -1 x = None y = None if self.rotate == 0: if not self.flip: # +x --\ +x # y --/ y self.fxx = 1 self.fyy = 1 x = self.src_area.vector1.x y = self.src_area.vector1.y else: # +x --\ x+ # y --/ y self.fxx = -1 self.fyy = 1 x = self.src_area.vector2.x y = self.src_area.vector1.y elif self.rotate == 90: if not self.flip: # +x --\ y+ # y --/ x self.fyx = 1 self.fxy = -1 x = self.src_area.vector1.x y = self.src_area.vector2.y else: # +x --\ x # y --/ y+ self.fyx = 1 self.fxy = 1 x = self.src_area.vector1.x y = self.src_area.vector1.y elif self.rotate == 180: if not self.flip: # +x --\ y # y --/ x+ self.fxx = -1 self.fyy = -1 x = self.src_area.vector2.x y = self.src_area.vector2.y else: # +x --\ y # y --/ +x self.fxx = 1 self.fyy = -1 x = self.src_area.vector1.x y = self.src_area.vector2.y elif self.rotate == 270: if not self.flip: # +x --\ x # y --/ +y self.fyx = -1 self.fxy = 1 x = self.src_area.vector2.x y = self.src_area.vector1.y else: # +x --\ x # y --/ y+ self.fyx = -1 self.fxy = -1 x = self.src_area.vector2.x y = self.src_area.vector2.y else: raise Exception( "invalid angle" ) v = self.dst_vector - self.vector( Vector( "", x, y ) ) self.dx = v.x self.dy = v.y def copy( self ): self.src_pcb.copy( self, self.dst_pcb ) self.net_pfx_nr += 1 def is_inside( self, vect ): return self.src_area.is_inside( vect ) def rel_vector( self, vect ): check_instance( vect, Vector ) x = self.fxx * vect.x + self.fxy * vect.y y = self.fyx * vect.x + self.fyy * vect.y if isinstance( vect, VectorAngle ): a = None if vect.a != None: a = self.fa * (vect.a - self.da) a = (a + 720) % 360 return VectorAngle( vect.obj_name, x, y, a ) return Vector( vect.obj_name, x, y ) def vector( self, vect ): check_instance( vect, Vector ) x = self.fxx * vect.x + self.fxy * vect.y + self.dx y = self.fyx * vect.x + self.fyy * vect.y + self.dy if isinstance( vect, VectorAngle ): a = None if vect.a != None: a = self.fa * (vect.a - self.da) a = (a + 720) % 360 return VectorAngle( vect.obj_name, x, y, a ) return Vector( vect.obj_name, x, y ) def add_rotation( self, vect ): check_instance( vect, Vector ) if not isinstance( vect, VectorAngle ): return vect.clone() a = self.fa * (vect.a - self.da) a = (a + 720) % 360 return VectorAngle( vect.obj_name, vect.x, vect.y, a ) def add_flip_rot( self, vect ): check_instance( vect, Vector ) v = vect.clone() if isinstance( vect, VectorAngle ): a = self.fa * (vect.a - self.da) a = (a + 720) % 360 v.a = a if self.flip: v.x = -v.x return v def arc_angle( self, f ): if not isinstance( f, Float ): raise Exception( "unexpected class" ) f = f.clone() if self.flip: f.value = -f.value return f def accepts_layer( self, layer ): if self.layer_filter_list == None: return True name = None if isinstance( layer, Text ): name = layer.value else: raise Exception( "unhandled class" ) if name in self.layer_filter_list: return self.layer_filter_include return not self.layer_filter_include def accepts_layers( self, layers ): if self.layer_filter_list == None: return True for layer in layers.values: if layer in self.layer_filter_list: return self.layer_filter_include return not self.layer_filter_include def layer( self, layer ): numeric = False text = False if type(layer) is int: layer = self.src_pcb.layers.layers[layer].name numeric = True elif isinstance( layer, Text ): layer = layer.value text = True if self.flip: if layer.startswith( "F." ): layer = "B." + layer[2:] elif layer.startswith( "B." ): layer = "F." + layer[2:] elif layer.startswith( "In" ) and layer.endswith( ".Cu" ): if self.swap_internal_layers: n = int( layer[2:-3] ) n = self.src_pcb.get_internal_layer_count() - n + 1 layer = "In%d.Cu" % n if numeric: layer = self.dst_pcb.layers.names[layer].nr elif text: l = Text( "layer" ) l.tag_value( None, layer ) layer = l return layer def net( self, net ): #if not self.clone_nets: # return net.clone() if isinstance( net, Int ): nr = net.value elif isinstance( net, Net ): nr = net.nr elif isinstance( net, Text ): nr = self.src_pcb.nets.by_name[net.value].nr else: raise Exception( "unexpected class" ) if nr == None: return net.clone() name = self.src_pcb.nets.by_nr[nr].name newname = name if self.clone_nets: newname = "C%d_%s" % ( self.net_pfx_nr, name ) if newname in self.dst_pcb.nets.by_name: nr = self.dst_pcb.nets.by_name[newname].nr else: nr = self.dst_pcb.nets.create( newname ) if isinstance( net, Int ): return Int( net.obj_name, nr ) elif isinstance( net, Net ): return Net( net.obj_name, nr, newname ) elif isinstance( net, Text ): return Text( net.obj_name, newname ) class Variable: def __init__( self, value ): self.value = value def __str__( self ): return str(self.value) class Main: def __init__( self ): self.factory = KicadFactory() self.trans = Transformer() self.debugging = True self.var_layer_name = Variable( "Edge.Cuts" ) self.var_line_thickness = Variable( 0.15 ) self.var_text_height = Variable( 1.5 ) self.var_text_width = Variable( 1.2 ) self.var_text_thickness = Variable( 0.15 ) self.cmd_defs = ( # 1. name # 2. function # 3. description of command # 4. fixed arguments prepended to specified aguments # 5. arguments, tuples of type, descr and default ( "new", self.new, "Create a new empty destination PCB.", None, None, ), ( "load", self.load, "Load the PCB from the specified file and use it as " "\nsource. If no destination PCB exists this PCB also " "\nbecomes the destination", None, ( ( "string", "Filename", None ), ), ), ( "save", self.save, "Save the destination PCB to the specified file.", None, ( ( "string", "Filename", None ), ), ), ( "create-template", self.create_template, "Create a template from the source PCB and set it" "\nas destination PCB. The template will contain" "\nonly the global configuration data of the source" "\nPCB. Modules, traces, drawings. etc. will not" "\nbe copied.", None, None, ), ( "compat", self.compat, "Save files compatible to the specified kicad version.", None, ( ( "string", "'%s'" % "', '".join( kicad_versions ), None ), ), ), ( "source-area", self.source_area, "Copy set the source area.", None, ( ( "float", "Left (X1)", None ), ( "float", "Top (Y1)", None ), ( "float", "Right (X2)", None ), ( "float", "Bottom (Y2)", None ), ), ), ( "set-title", self.set_title_block, "The title of the PCB title block.", None, ( ( "string", "string", None ), ), ), ( "set-date", self.set_title_block, "The date of the PCB title block in the format YYYY-MM-DD.", None, ( ( "string", "string", None ), ), ), ( "set-rev", self.set_title_block, "The rev of the PCB title block.", None, ( ( "string", "string", None ), ), ), ( "set-company", self.set_title_block, "The company of the PCB title block.", None, ( ( "string", "string", None ), ), ), ( "set-comment-1", self.set_title_block, "The comment 1 of the PCB title block.", None, ( ( "string", "string", None ), ), ), ( "set-comment-2", self.set_title_block, "The comment 2 of the PCB title block.", None, ( ( "string", "string", None ), ), ), ( "set-comment-3", self.set_title_block, "The comment 3 of the PCB title block.", None, ( ( "string", "string", None ), ), ), ( "set-comment-4", self.set_title_block, "The comment 4 of the PCB title block.", None, ( ( "string", "string", None ), ), ), ( "clone-nets", self.clone_nets, "Clone nets when set to true.", None, ( ( "bool", "bool", None ), ), ), ( "exclude-layer", self.exclude_layer, "Exclude the specified layer from copies." "\nThis removes all included layers and adds" "\nthe specified exclude.", None, ( ( "string", "layer name", None ), ), ), ( "include-layer", self.include_layer, "Include the specified layer in copies." "\nThis removes all excluded layers and adds" "\nthe specified include. The special name 'all'" "\nincludes all layers.", None, ( ( "string", "layer name", None ), ), ), ( "swap-internal-layers", self.swap_internal_layers, "Swap the internal copper layers in flipped copies.", None, ( ( "bool", "swap", None ), ), ), ( "copy", self.copy, "Copy the source area to the destination.", ( 0, False ), ( ( "float", "destination X", None ), ( "float", "destination Y", None ), ), ), ( "rotate-right", self.copy, "Copy and rotate right.", ( 90, False ), ( ( "float", "destination X", None ), ( "float", "destination Y", None ), ), ), ( "rotate-180", self.copy, "Copy and rotate 180 degrees.", ( 180, False ), ( ( "float", "destination X", None ), ( "float", "destination Y", None ), ), ), ( "rotate-left", self.copy, "Copy and rotate left.", ( 270, False ), ( ( "float", "destination X", None ), ( "float", "destination Y", None ), ), ), ( "flip-copy", self.copy, "Copy and flip.", ( 0, True ), ( ( "float", "destination X", None ), ( "float", "destination Y", None ), ), ), ( "flip-rotate-right", self.copy, "Copy, flip and rotate right.", ( 90, True ), ( ( "float", "destination X", None ), ( "float", "destination Y", None ), ), ), ( "flip-rotate-180", self.copy, "Copy, flip and rotate 180 degrees.", ( 180, True ), ( ( "float", "destination X", None ), ( "float", "destination Y", None ), ), ), ( "flip-rotate-left", self.copy, "Copy, flip and rotate left.", ( 270, True ), ( ( "float", "destination X", None ), ( "float", "destination Y", None ), ), ), ( "draw-line", self.draw_line, "Draw a line on the given layer.", None, ( ( "float", "from (X1)", None ), ( "float", "from (Y1)", None ), ( "float", "to (X2)", None ), ( "float", "to (Y2)", None ), ( "string", "layer", self.var_layer_name ), ( "float", "thickness", self.var_line_thickness ), ), ), ( "draw-text", self.draw_text, "Draw text on the given layer.", None, ( ( "string", "text", None ), ( "float", "(X1)", None ), ( "float", "(Y1)", None ), ( "float", "angle", 0.0 ), ( "string", "layer", self.var_layer_name ), ( "float", "height", self.var_text_height ), ( "float", "width", self.var_text_width ), ( "float", "thickness", self.var_text_thickness ), ), ), ( "set-layer", self.set_layer, "Sets the layer used for drawing when" "\nnot explicitely specified.", None, ( ( "string", "layer", None ), ), ), ( "set-line-thickness", self.set_line_thickness, "Sets the line thickness used for drawing" "\nwhen not explicitely specified.", None, ( ( "float", "thickness", None ), ), ), ( "set-text-font", self.set_text_font, "Sets the text font used for drawing when" "\nnot explicitely specified.", None, ( ( "float", "height", None ), ( "float", "width", None ), ( "float", "thickness", None ), ), ), ) self.cmd_names = {} for i in range( 0, len(self.cmd_defs) ): name = self.cmd_defs[i][0] self.cmd_names[name] = i self.compat_index = kicad_versions.index( "latest" ) def run( self ): if len(sys.argv) == 2 and sys.argv[1] not in ( '-h', '--help' ): self.run_file( sys.argv[1] ) else: self.usage() def print_exc( self ): if self.debugging: traceback.print_exc() def usage( self ): print( "panelize.py V%s rev %s" % ( __version__, __revision__ ) ) print( "\nUsage:" ) print( " panelize.py commandfile" ) print( "\nCommandfile:" ) print( " Empty lines and lines starting with # are ignored." ) print( " Command lines must start with the command followed by its arguments." ) print( " All coordinates are in millimeters." ) print( "\nCommands:" ) for cmd_def in self.cmd_defs: name, func, descr, fixed_args, argdefs = cmd_def lines = descr.split( "\n" ) print( " %-20s%s" % ( name, lines[0] ) ) for i in range( 1, len(lines) ): print( " %-20s%s" % ( "", lines[i] ) ) if argdefs != None: print( " Arguments:" ) n_max = len(argdefs) n_min = 0 while n_min < n_max: if argdefs[n_min][2] != None: break n_min += 1 optval = "" for argtype, argdesc, argdefault in argdefs: if argdefault != None: optval = " (optional, default=%s)" % argdefault print( " %-16s%s%s" % ( argtype, argdesc, optval ) ) def run_file( self, filename ): ifd = None try: ifd = open( filename, "r" ) except: print( "failed to open '%s' for reading." % filename ) return 1 linenr = 0 commands = [] errors = False for line in ifd: linenr += 1 line = line.strip() if len(line) == 0 or line.startswith( "#" ): pass else: # words = line.split() words = self.split_line( line, linenr ) if words == None: errors = True else: cmd = self.make_cmd( words, linenr ) if cmd == None: errors = True else: commands.append( cmd ) if not errors: for func, cmd, args in commands: for i in range( 0, len(args) ): if isinstance( args[i], Variable ): args[i] = args[i].value if not func( cmd, args ): print( "Command execution aborted." ) break def split_line( self, line, linenr ): words = [] start = None char = None for i in range( 0, len(line) ): c = line[i] if start == None: if c == '"' or c == "'": char = c start = i+1 elif not c.isspace(): char = None start = i else: if char == None: if c.isspace(): words.append( line[start:i] ) start = None else: if c == char: words.append( line[start:i] ) start = None if start != None: if char == None: words.append( line[start:] ) else: print( "Unterminated %s quoted string on line %d." % ( char, linenr ) ) return None return words def make_cmd( self, words, linenr ): cmd = words[0] words = words[1:] if not cmd in self.cmd_names: print( "invalid command '%s'." % cmd ) return None i = self.cmd_names[cmd] name, func, desrc, fixed_args, argdefs = self.cmd_defs[i] n = len(words) n_min = n_max = 0 if argdefs != None: n_max = len(argdefs) while n_min < n_max: if argdefs[n_min][2] != None: break n_min += 1 if n < n_min or n > n_max: if n_min == n_max: print( "Command %s expects %d arguments on line %d." % ( cmd, n_max, linenr ) ) else: print( "Command %s expects between %d and %d arguments on line %d." % ( cmd, n_min, n_max, linenr ) ) return None args = [] if fixed_args != None: args = list( fixed_args ) for i in range( 0, n ): argtype = argdefs[i][0] arg = words[i] if argtype == "string": pass elif argtype == "float": try: arg = float( arg ) except: print( "Invalid float argument '%s' on line %d." % ( arg, linenr ) ) return None elif argtype == "bool": if arg.lower() == "true": arg = True elif arg.lower() == "false": arg = False else: print( "Invalid bool argument '%s' on line %d." % ( arg, linenr ) ) return None else: print( "Unhandled argument type '%s' on line %d." % ( argtype, linenr ) ) return None args.append( arg ) # append default values for unspecified args for i in range( n, n_max ): args.append( argdefs[i][2] ) return ( func, cmd, args ) def set_title_block( self, cmd, args ): if cmd == "set-title": self.trans.dst_pcb.title_block.title.value = args[0] elif cmd == "set-date": self.trans.dst_pcb.title_block.date.value = args[0] elif cmd == "set-rev": self.trans.dst_pcb.title_block.rev.value = args[0] elif cmd == "set-company": self.trans.dst_pcb.title_block.company.value = args[0] elif cmd == "set-comment-1": self.trans.dst_pcb.title_block.comments[0] = args[0] elif cmd == "set-comment-2": self.trans.dst_pcb.title_block.comments[1] = args[0] elif cmd == "set-comment-3": self.trans.dst_pcb.title_block.comments[2] = args[0] elif cmd == "set-comment-4": self.trans.dst_pcb.title_block.comments[3] = args[0] else: return False return True def new( self, cmd, args ): self.trans.set_src_pcb( self.factory.create_pcb() ) return True def load( self, cmd, args ): try: pcb = self.factory.parse_file( args[0] ) if pcb == None: raise Exception( "error loading PCB file" ) self.trans.set_src_pcb( pcb ) except: print( "Loading PCB failed." ) self.print_exc() return False return True def create_template( self, cmd, args ): try: self.trans.create_template() except: print( "Creating template PCB failed." ) self.print_exc() return False return True def save( self, cmd, args ): try: writer = Writer( args[0], self.compat_index ) self.trans.dst_pcb.write( writer ) writer.close() except: print( "Saving PCB failed." ) self.print_exc() return False return True def compat( self, cmd, args ): try: self.compat_index = kicad_versions.index( args[0] ) except: print( "Invalid kicad compat version '%s'." % args[0] ) return False return True def source_area( self, cmd, args ): try: self.trans.set_src_area( Area( "src-area", Vector( "v1", args[0], args[1] ), Vector( "v2", args[2], args[3] ) ) ) except: print( "Setting source area failed." ) self.print_exc() return False return True def clone_nets( self, cmd, args ): try: self.trans.clone_nets = args[0] except: print( "Setting parameter clone-nets failed." ) self.print_exc() return False return True def exclude_layer( self, cmd, args ): try: self.trans.exclude_layer( args[0] ) except: print( "Setting parameter exclude-layer failed." ) self.print_exc() return False return True def include_layer( self, cmd, args ): try: arg = args[0] if arg == "all": self.trans.include_all_layers() else: self.trans.include_layer( arg ) except: print( "Setting parameter exclude-layer failed." ) self.print_exc() return False return True def swap_internal_layers( self, cmd, args ): try: self.trans.set_swap_internal_layers( args[0] ) except: print( "Setting parameter swap-internal-layers failed." ) self.print_exc() return False return True def copy( self, cmd, args ): try: rotate = args[0] flip = args[1] dst_vector = Vector( "v", args[2], args[3] ) self.trans.set_rotate( rotate ) self.trans.set_flip( flip ) self.trans.set_dst_vector( dst_vector ) self.trans.recalculate() self.trans.copy() except: print( "Copying failed." ) self.print_exc() return False return True def draw_line( self, cmd, args ): try: from_vector = Vector( "start", args[0], args[1] ) to_vector = Vector( "end", args[2], args[3] ) layer = args[4] width = args[5] obj = GrLine( "gr_line" ) obj.set( "start", from_vector ) obj.set( "end", to_vector ) obj.set( "angle", Int( "angle", 90) ) obj.set( "layer", Text( "layer", layer ) ) obj.set( "width", Float( "width", width ) ) self.trans.dst_pcb.graphics.append( obj ) except: print( "Drawing line failed." ) self.print_exc() return False return True def draw_text( self, cmd, args ): try: text = args[0] at_vector = VectorAngle( "at", args[1], args[2], args[3] ) layer = args[4] height = args[5] width = args[6] thickness = args[7] obj = GrText( "gr_text" ) print( "text", text ) obj.text = text obj.set( "at", at_vector ) obj.set( "layer", Text( "layer", layer ) ) font = Font( "font" ) font.set( "size", Vector( "size", height, width ) ) font.set( "thickness", Float( "thickness", thickness ) ) effects = Effects( "effects" ) effects.set( "font", font ) if layer.startswith( "B." ): effects.justify.values.append( "mirror" ) obj.set( "effects", effects ) self.trans.dst_pcb.graphics.append( obj ) except: print( "Drawing text failed." ) self.print_exc() return False return True def set_layer( self, cmd, args ): self.var_layer_name.value = args[0] return True def set_line_thickness( self, cmd, args ): self.var_line_thickness.value = args[0] return True def set_text_font( self, cmd, args ): self.var_text_height.value = args[0] self.var_text_width.value = args[1] self.var_text_thickness.value = args[2] return True if __name__ == "__main__": m = Main() m.run() ================================================ FILE: thirdparty/xvfbwrapper/LICENSE.txt ================================================ xvfbwrapper - Copyright (c) 2012-015 Corey Goldberg Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ================================================ FILE: thirdparty/xvfbwrapper/__init__.py ================================================ ================================================ FILE: thirdparty/xvfbwrapper/xvfbwrapper.py ================================================ #!/usr/bin/env python # # * Corey Goldberg, 2012, 2013, 2015, 2016 # # * inspired by: PyVirtualDisplay """wrapper for running display inside X virtual framebuffer (Xvfb)""" import os import fnmatch import subprocess import tempfile import time class Xvfb: def __init__(self, width=800, height=680, colordepth=24, **kwargs): self.width = width self.height = height self.colordepth = colordepth if not self.xvfb_exists(): msg = 'Can not find Xvfb. Please install it and try again.' raise EnvironmentError(msg) self.extra_xvfb_args = ['-screen', '0', '{}x{}x{}'.format( self.width, self.height, self.colordepth)] for key, value in kwargs.items(): self.extra_xvfb_args += ['-{}'.format(key), value] if 'DISPLAY' in os.environ: self.orig_display = os.environ['DISPLAY'].split(':')[1] else: self.orig_display = None self.proc = None def __enter__(self): self.start() return self def __exit__(self, exc_type, exc_val, exc_tb): self.stop() def start(self): self.new_display = self._get_next_unused_display() display_var = ':{}'.format(self.new_display) self.xvfb_cmd = ['Xvfb', display_var] + self.extra_xvfb_args with open(os.devnull, 'w') as fnull: self.proc = subprocess.Popen(self.xvfb_cmd, stdout=fnull, stderr=fnull, preexec_fn=os.setpgrp, #NOTE(sbezek): added this to avoid Xvfb handling SIGINT before python close_fds=True) time.sleep(0.1) # give Xvfb time to start ret_code = self.proc.poll() if ret_code is None: self._set_display_var(self.new_display) else: raise RuntimeError('Xvfb did not start') def stop(self): if self.orig_display is None: del os.environ['DISPLAY'] else: self._set_display_var(self.orig_display) if self.proc is not None: try: self.proc.terminate() self.proc.wait() except OSError: pass self.proc = None def _get_next_unused_display(self): tmpdir = tempfile.gettempdir() pattern = '.X*-lock' lockfile_names = fnmatch.filter(os.listdir(tmpdir), pattern) existing_displays = [int(name.split('X')[1].split('-')[0]) for name in lockfile_names] highest_display = max(existing_displays) if existing_displays else 0 return highest_display + 1 def _set_display_var(self, display): os.environ['DISPLAY'] = ':{}'.format(display) def xvfb_exists(self): """Check that Xvfb is available on PATH and is executable.""" paths = os.environ['PATH'].split(os.pathsep) return any(os.access(os.path.join(path, 'Xvfb'), os.X_OK) for path in paths) ================================================ FILE: util/__init__.py ================================================ ================================================ FILE: util/app_paths.py ================================================ from functools import lru_cache import os from shutil import which import subprocess from sys import platform APP_PATH_OVERRIDES = { # If your programs are not found or installed in a non-standard location, add an override # like this: # 'openscad': 'C:\Program Files (x86)\OpenSCAD\openscad.exe' } @lru_cache() def get(name): if name in APP_PATH_OVERRIDES: return APP_PATH_OVERRIDES[name] if platform == "linux" or platform == "linux2": # Linux: we assume applications are installed on user's PATH _check_path(name, which(name)) return which(name) elif platform == "darwin": # OS X bundleid_executable = { 'inkscape': ('org.inkscape.Inkscape', '/Contents/MacOS/inkscape'), 'openscad': ('org.openscad.OpenSCAD', '/Contents/MacOS/OpenSCAD'), } if name not in bundleid_executable: raise RuntimeError(f'Unknown program {name!r} - please add a bundleid entry in {os.path.abspath(__file__)!r}') bundleid = bundleid_executable[name][0] path = subprocess.check_output([ 'mdfind', f'kMDItemCFBundleIdentifier = "{bundleid}"' ]).decode('utf-8').strip() path += bundleid_executable[name][1] _check_path(name, path) return path elif platform == "win32": # Windows: check standard locations paths = { 'inkscape': 'C:\\Program Files\\Inkscape\\bin\\inkscape.exe', 'openscad': 'C:\\Program Files\\OpenSCAD\\openscad.exe', } if name in paths: _check_path(name, paths[name]) return paths[name] raise RuntimeError(f'Unknown program {name!r} - please add an entry in {os.path.abspath(__file__)!r}') def _check_path(name, path): if not os.path.exists(path): raise RuntimeError(f'Expected {name!r} at {path!r}, but it wasn\'t found. If {name!r} is installed in a nonstandard location, add an entry to APP_PATH_OVERRIDES in {os.path.abspath(__file__)!r}') ================================================ FILE: util/file_util.py ================================================ #!/usr/bin/env python import errno import os def mkdir_p(path): try: os.makedirs(path) except OSError as exc: # Python >2.5 if exc.errno == errno.EEXIST and os.path.isdir(path): pass else: raise ================================================ FILE: util/inkscape.py ================================================ from functools import lru_cache import logging import re import subprocess import util.app_paths as app_paths logger = logging.getLogger(__name__) @lru_cache() def _version(): info = subprocess.check_output([ app_paths.get('inkscape'), '--version' ]).decode('utf-8') m = re.match(r'Inkscape (\d+\.\d+)', info) version = float(m.group(1)) logger.debug(f'Found Inkscape version {version}') return version def without_gui(): if _version() >= 1: """ The --without-gui option has been removed. Most parameters trigger Inkscape to run without GUI by default now. Instead enable GUI mode specifically using --with-gui if needed. """ return [] else: return ['--without-gui'] def _export_filename_v1(filename): assert _version() >= 1 return [f'--export-filename={filename}'] def export_png(filename): if _version() >= 1: return _export_filename_v1(filename) else: return ['--export-png', filename] def export_pdf(filename): if _version() >= 1: return _export_filename_v1(filename) else: return ['--export-pdf', filename] ================================================ FILE: util/rev_info.py ================================================ #!/usr/bin/env python3 import argparse import datetime import subprocess def git_short_rev(): try: return subprocess.check_output([ 'git', 'rev-parse', '--short', 'HEAD', ]).decode('utf-8').strip() except Exception: raise RuntimeError("Could not read git revision. Make sure you have git installed and you're working with a git clone of the repository.") def current_date(): return datetime.date.today().strftime('%Y-%m-%d') def git_date(short=True): try: iso = subprocess.check_output([ 'git', 'log', '-1', '--format=%ci', 'HEAD', ]).decode('utf-8').strip() if short: return iso.split(' ')[0] else: return iso except Exception: raise RuntimeError("Could not read git commit date. Make sure you have git installed and you're working with a git clone of the repository.") def git_release_version(search_prefix, fallback=None): try: tags = subprocess.check_output([ 'git', 'tag', '--points-at', 'HEAD', ]).decode('utf-8').splitlines() for tag in tags: if tag.startswith(search_prefix): return tag[len(search_prefix):] return fallback except Exception: raise RuntimeError("Could not read git release tags. Make sure you have git installed and you're working with a git clone of the repository.") if __name__ == '__main__': parser = argparse.ArgumentParser() subparsers = parser.add_subparsers(required=True, dest='option') parser_git_short_rev = subparsers.add_parser('git_short_rev') parser_git_date = subparsers.add_parser('git_date') parser_git_date.add_argument('--short', action='store_true') parser_git_release_version = subparsers.add_parser('git_release_version') parser_git_release_version.add_argument('search_prefix') args = parser.parse_args() if args.option == 'git_short_rev': print(git_short_rev()) elif args.option == 'git_date': print(git_date(short=args.short)) elif args.option == 'git_release_version': print(git_release_version(args.search_prefix, fallback='v#.#')) else: raise RuntimeError('Unexpected option')