text:
@INPROCEEDINGS{blackMaterials2018,
  author = {Luke M. Schmidt and Madelynn Gomez and Doyeon Kim and Michael Torregosa and Marcus Sauseda and Travis Prochaska and D. L. DePoy and J. L. Marshall and Lawrence Gardner and Walter Grant},
  title = {Characterization of the reflectivity of various black materials II},
  journal = {Proc.SPIE},
  volume = {10706},
  number = {195},
  pages = {},
  year = {2018},
  doi = {},
  URL = {},
  eprint = {}
}

@INPROCEEDINGS{whiteMaterials2018,
  author = {Luke M. Schmidt and Madelynn Gomez and Doyeon Kim and Michael Torregosa and Marcus Sauseda and Travis Prochaska and D. L. DePoy and J. L. Marshall and Lawrence Gardner and Walter Grant},
  title = {Characterization of the reflectivity of various white materials},
  journal = {Proc.SPIE},
  volume = {10706},
  number = {196},
  pages = {},
  year = {2018},
  doi = {},
  URL = {},
  eprint = {}
}

@INPROCEEDINGS{gmacsOverview2018,
  author = {},
  title = {GMACS: a wide-field, moderate-resolution spectrograph for the Giant Magellan Telescope},
  journal = {Proc.SPIE},
  volume = {10702},
  number = {69},
  pages = {},
  year = {2018},
  doi = {},
  URL = {},
  eprint = {}
}

@INPROCEEDINGS{gmacsOpt2018,
  author = {Rafael A. S. Ribeiro and Luke M. Schmidt and Damien Jones and Keith Taylor and Travis Prochaska and Erica Cook and Darren L. DePoy and Daniel Faes and Cynthia Froning and
  Tae-Geun Ji and Hye-In Lee and Jennifer L. Marshall and Claudia Mendes de Oliveira and Soojong Pak and Casey Papovich and Aline Souza},
  title = {The optical design for the Giant Magellan telescope multi-object astronomical and cosmological spectrograph (GMACS)},
  journal = {Proc.SPIE},
  volume = {10702},
  number = {340},
  pages = {},
  year = {2018},
  doi = {},
  URL = {},
  eprint = {}
}

@INPROCEEDINGS{gmacsMech2018,
  author = {},
  title = {The optomechanical design of the Giant Magellan telescope multi-object astronomical and cosmological spectrograph (GMACS)},
  journal = {Proc.SPIE},
  volume = {10702},
  number = {364},
  pages = {},
  year = {2018},
  doi = {},
  URL = {},
  eprint = {}
}

@INPROCEEDINGS{gmacsElec2018,
  author = {},
  title = {Electronics prototypes for the Giant Magellan telescope multi-object astronomical and cosmological spectrograph (GMACS)},
  journal = {Proc.SPIE},
  volume = {10702},
  number = {365},
  pages = {},
  year = {2018},
  doi = {},
  URL = {},
  eprint = {}
}

@INPROCEEDINGS{2018arXiv180606390F,
       author = {{Faes}, D.~M. and {Souza}, A. and {Froning}, C. and {Schmidt}, L. and
        {Bortoletto}, D. and {Cook}, E. and {DePoy}, D.~L. and {Ji}, T.
        -G. and {Jones}, D. and {Lee}, H. -I. and {Marshall}, J.~L. and
        {Oliveira}, C.~M. and {Pak}, S. and {Papovich}, C. and
        {Prochaska}, T. and {Ribeiro}, R. and {Taylor}, K.},
        title = "{Systems engineering applied to ELT instrumentation: The GMACS case}",
      journal = {ArXiv e-prints},
     keywords = {Astrophysics - Instrumentation and Methods for Astrophysics},
         year = 2018,
        month = Jun,
          eid = {arXiv:1806.06390},
        pages = {arXiv:1806.06390},
archivePrefix = {arXiv},
       eprint = {1806.06390},
       adsurl = {https://ui.adsabs.harvard.edu/#abs/2018arXiv180606390F},
      adsnote = {Provided by the SAO/NASA Astrophysics Data System}
}

@INPROCEEDINGS{tcal2018,
  author = {},
  title = {Development of TCal: a mobile spectrophotometric calibration unit for astronomical imaging systems},
  journal = {Proc.SPIE},
  volume = {10702},
  number = {119},
  pages = {},
  year = {2018},
  doi = {},
  URL = {},
  eprint = {}
}

@INPROCEEDINGS{madlasr18,
  author = {},
  title = {MADLaSR: multi-angle detector of Lambertian and specular reflectivity},
  journal = {Proc.SPIE},
  volume = {10706},
  number = {166},
  pages = {},
  year = {2018},
  doi = {},
  URL = {},
  eprint = {}
}

@INPROCEEDINGS{nessi2018,
  author = {},
  title = {The new NESSI: refurbishment of a NIR MOS for characterizing exoplanets using the Hale telescope},
  journal = {Proc.SPIE},
  volume = {10702},
  number = {129},
  pages = {},
  year = {2018},
  doi = {},
  URL = {},
  eprint = {}
}

@INPROCEEDINGS{mroi2018,
  author = {},
  title = {The MROI fringe tracking system: camera hardware modifications to integrate the SAPHIRA detector},
  journal = {Proc.SPIE},
  volume = {10701},
  number = {61},
  pages = {},
  year = {2018},
  doi = {},
  URL = {},
  eprint = {}
}

@INPROCEEDINGS{doi:10.1117/12.2313528,
  author = { Rafael A.S. {Ribeiro} and Damien Jones and Luke M. Schmidt and Keith Taylor and Erika Cook and Darren L. DePoy and Daniel Faes and Cynthia Froning and Tae-Geun Ji and Hye-In Lee and Jennifer L. Marshall and Claudia Mendes de Oliveira and Soojong Pak and Casey Papovich and Travis Prochaska and Aline Souza},
  title = {Optical design for the Giant Magellan Telescope Multi-object Astronomical and Cosmological Spectrograph (GMACS): design methodology, issues, and trade-offs},
  journal = {Proc.SPIE},
  volume = {10690},
  number = {14},
  pages = {},
  year = {2018},
  doi = {10.1117/12.2313528},
  URL = {https://doi.org/10.1117/12.2313528},
  eprint = {}
}

@INPROCEEDINGS{2018AAS...23115201W,
       author = {{Williams}, Darius and {Marshall}, Jennifer L. and {Schmidt}, Luke M.
        and {Prochaska}, Travis and {DePoy}, Darren L.},
        title = "{''Slit Mask Design for the Giant Magellan Telescope Multi-object
        Astronomical and Cosmological Spectrograph''}",
    booktitle = {American Astronomical Society Meeting Abstracts},
         year = 2018,
        month = Jan,
       adsurl = {https://ui.adsabs.harvard.edu/#abs/2018AAS...23115201W},
      adsnote = {Provided by the SAO/NASA Astrophysics Data System}
}

@INPROCEEDINGS{2017AAS...22915512M,
       author = {{Maier}, Erin R. and {Witt}, Emily and {Depoy}, Darren L. and {Schmidt},
        Luke M.},
        title = "{DuOCam: A Two-Channel Camera for Simultaneous Photometric Observations
        of Stellar Clusters}",
    booktitle = {American Astronomical Society Meeting Abstracts},
         year = 2017,
        month = Jan,
          eid = {155.12},
        pages = {155.12},
       adsurl = {https://ui.adsabs.harvard.edu/#abs/2017AAS...22915512M},
      adsnote = {Provided by the SAO/NASA Astrophysics Data System}
}

@INPROCEEDINGS{2016SPIE.9908E..A4S,
       author = {{Schmidt}, Luke M. and {Ribeiro}, Rafael and {Taylor}, Keith and
        {Jones}, Damien and {Prochaska}, Travis and {DePoy}, Darren L.
        and {Marshall}, Jennifer L. and {Cook}, Erika and {Froning},
        Cynthia and {Ji}, Tae-Geun and {Lee}, Hye-In and {Mendes de
        Oliveira}, Claudia and {Pak}, Soojong and {Papovich}, Casey},
        title = "{Optical design concept for the Giant Magellan Telescope Multi-object
        Astronomical and Cosmological Spectrograph (GMACS)}",
    booktitle = {Ground-based and Airborne Instrumentation for Astronomy VI},
         year = 2016,
       volume = {9908},
        month = Aug,
          eid = {9908A4},
        pages = {9908A4},
          doi = {10.1117/12.2233543},
       adsurl = {https://ui.adsabs.harvard.edu/#abs/2016SPIE.9908E..A4S},
      adsnote = {Provided by the SAO/NASA Astrophysics Data System}
}

@INPROCEEDINGS{2016SPIE.9908E..A3P,
       author = {{Prochaska}, Travis and {Sauseda}, Marcus and {Beck}, James and
        {Schmidt}, Luke and {Cook}, Erika and {DePoy}, Darren L. and
        {Marshall}, Jennifer L. and {Ribeiro}, Rafael and {Taylor},
        Keith and {Jones}, Damien and {Froning}, Cynthia and {Pak},
        Soojong and {Mendes de Oliveira}, Claudia and {Papovich}, Casey
        and {Ji}, Tae-Geun and {Lee}, Hye-In},
        title = "{Optomechanical design concept for the Giant Magellan Telescope Multi-
        object Astronomical and Cosmological Spectrograph (GMACS)}",
    booktitle = {Ground-based and Airborne Instrumentation for Astronomy VI},
         year = 2016,
       volume = {9908},
        month = Aug,
          eid = {9908A3},
        pages = {9908A3},
          doi = {10.1117/12.2233530},
       adsurl = {https://ui.adsabs.harvard.edu/#abs/2016SPIE.9908E..A3P},
      adsnote = {Provided by the SAO/NASA Astrophysics Data System}
}

@INPROCEEDINGS{2016SPIE.9908E..9OL,
       author = {{Lawrence}, Jonathan S. and {Ben-Ami}, Sagi and {Brown}, David M. and
        {Brown}, Rebecca A. and {Case}, Scott and {Chapman}, Steve and
        {Churilov}, Vladimir and {Colless}, Matthew and {Content},
        Robert and {Depoy}, Darren and {Evans}, Ian and {Farrell}, Tony
        and {Goodwin}, Michael and {Jacoby}, George and {Klauser}, Urs
        and {Kuehn}, Kyler and {Lorente}, Nuria P.~F. and {Mali}, Slavko
        and {Marshall}, Jennifer and {Muller}, Rolf and {Nichani}, Vijay
        and {Pai}, Naveen and {Prochaska}, Travis and {Saunders}, Will
        and {Schmidt}, Luke and {Shortridge}, Keith and {Staszak},
        Nicholas F. and {Szentgyorgyi}, Andrew and {Tims}, Julia and
        {Vuong}, Minh V. and {Waller}, Lewis G. and {Zhelem}, Ross},
        title = "{The MANIFEST prototyping design study}",
    booktitle = {Ground-based and Airborne Instrumentation for Astronomy VI},
         year = 2016,
       volume = {9908},
        month = Aug,
          eid = {99089O},
        pages = {99089O},
          doi = {10.1117/12.2232412},
       adsurl = {https://ui.adsabs.harvard.edu/#abs/2016SPIE.9908E..9OL},
      adsnote = {Provided by the SAO/NASA Astrophysics Data System}
}

@INPROCEEDINGS{2016SPIE.9908E..5CN,
       author = {{Nagasawa}, D.~Q. and {Mondrik}, N. and {Marshall}, J.~L. and {DePoy},
        D.~L. and {Schmidt}, L. and {Hill}, B. and {Turner}, L. and
        {Rheault}, J.~P.},
        title = "{Throughput of commercial photographic camera lenses for use in
        astronomical systems}",
    booktitle = {Ground-based and Airborne Instrumentation for Astronomy VI},
         year = 2016,
       volume = {9908},
        month = Aug,
          eid = {99085C},
        pages = {99085C},
          doi = {10.1117/12.2233723},
       adsurl = {https://ui.adsabs.harvard.edu/#abs/2016SPIE.9908E..5CN},
      adsnote = {Provided by the SAO/NASA Astrophysics Data System}
}

@INPROCEEDINGS{2016SPIE.9907E..05C,
       author = {{Creech-Eakman}, M.~J. and {Romero}, V. and {Payne}, I. and {Haniff},
        C.~A. and {Buscher}, D.~F. and {Young}, J.~S. and {Cervantes},
        R. and {Dahl}, C. and {Farris}, A. and {Fisher}, M. and
        {Johnston}, P. and {Klinglesmith}, D. and {Love}, H. and
        {Ochoa}, D. and {Olivares}, A. and {Pino}, J. and {Salcido}, C.
        and {Santoro}, F. and {Schmidt}, L. and {Seneta}, E.~B. and
        {Sun}, X. and {Jenka}, L. and {Kelly}, R. and {Price}, J. and
        {Rea}, A. and {Riker}, J. and {Rochelle}, S.},
        title = "{A new path to first light for the Magdalena Ridge Observatory
        interferometer}",
    booktitle = {Optical and Infrared Interferometry and Imaging V},
         year = 2016,
       volume = {9907},
        month = Aug,
          eid = {990705},
        pages = {990705},
          doi = {10.1117/12.2233910},
       adsurl = {https://ui.adsabs.harvard.edu/#abs/2016SPIE.9907E..05C},
      adsnote = {Provided by the SAO/NASA Astrophysics Data System}
}

@INPROCEEDINGS{2014SPIE.9146E..1EM,
       author = {{McCracken}, T.~M. and {Jurgenson}, C.~A. and {Young}, J.~S. and
        {Seneta}, E.~B. and {Buscher}, D.~F. and {Haniff}, C.~A. and
        {Creech-Eakman}, M.~J. and {Santoro}, F.~G. and {Shtromberg},
        A.~V. and {Schmidt}, L.~M. and {Rochelle}, S.},
        title = "{The MROI fringe tracker: laboratory tracking with ICONN}",
    booktitle = {Optical and Infrared Interferometry IV},
         year = 2014,
       volume = {9146},
        month = Jul,
          eid = {91461E},
        pages = {91461E},
          doi = {10.1117/12.2055603},
       adsurl = {https://ui.adsabs.harvard.edu/#abs/2014SPIE.9146E..1EM},
      adsnote = {Provided by the SAO/NASA Astrophysics Data System}
}

@INPROCEEDINGS{2014SPIE.9146E..0HC,
       author = {{Creech-Eakman}, M.~J. and {Romero}, V. and {Payne}, I. and {Haniff},
        C.~A. and {Buscher}, D.~F. and {Dahl}, C. and {Farris}, A. and
        {Fisher}, M. and {Jurgenson}, C. and {Klinglesmith}, D. and
        {McCracken}, T. and {Napolitano}, M. and {Olivares}, A. and
        {Riker}, J. and {Rochelle}, S. and {Salcido}, C. and {Santoro},
        F. and {Schmidt}, L. and {Selina}, R. and {Seneta}, E.~B. and
        {Shtromberg}, A. and {Sun}, X. and {Wilson}, D.~M.~A. and
        {Young}, J.~S.},
        title = "{Magdalena Ridge Observatory interferometer: 2014 status update}",
    booktitle = {Optical and Infrared Interferometry IV},
         year = 2014,
       volume = {9146},
        month = Jul,
          eid = {91460H},
        pages = {91460H},
          doi = {10.1117/12.2057331},
       adsurl = {https://ui.adsabs.harvard.edu/#abs/2014SPIE.9146E..0HC},
      adsnote = {Provided by the SAO/NASA Astrophysics Data System}
}

@INPROCEEDINGS{2012SPIE.8446E..9GS,
       author = {{Santoro}, Fernando G. and {Olivares}, Andres M. and {Salcido},
        Christopher D. and {Jimenez}, Stephen R. and {Jurgenson}, Colby
        A. and {Creech-Eakman}, Michelle J. and {Hrynevych}, Michael A.
        and {Schmidt}, Luke M. and {Bloemhard}, Heather and
        {Napolitano}, Matt and {Selina}, Robert and {Boston}, Penelope
        J. and {Vasisht}, Gautam and {Swain}, Mark R. and {Deroo},
        Pieter D.},
        title = "{Mechanical design of NESSI: New Mexico Tech extrasolar spectroscopic
        survey instrument}",
    booktitle = {Ground-based and Airborne Instrumentation for Astronomy IV},
         year = 2012,
       volume = {8446},
        month = Sep,
          eid = {84469G},
        pages = {84469G},
          doi = {10.1117/12.926282},
       adsurl = {https://ui.adsabs.harvard.edu/#abs/2012SPIE.8446E..9GS},
      adsnote = {Provided by the SAO/NASA Astrophysics Data System}
}

@INPROCEEDINGS{2012SPIE.8446E..7YC,
       author = {{Creech-Eakman}, M.~J. and {Jurgenson}, C.~A. and {Santoro}, F.~G. and
        {Bloemhard}, H. and {Boston}, P.~J. and {Deroo}, P.~D. and
        {Hrynevych}, M. and {Jimenez}, S.~R. and {Olivares}, A.~M. and
        {Napolitano}, M. and {Salcido}, C.~D. and {Schmidt}, L.~M. and
        {Selina}, R. and {Swain}, M.~R. and {Vasisht}, G.},
        title = "{NESSI: an optimized Near-Infrared (NIR) Multi-Object Spectrograph (MOS)
        for exoplanet studies}",
    booktitle = {Ground-based and Airborne Instrumentation for Astronomy IV},
         year = 2012,
       volume = {8446},
        month = Sep,
          eid = {84467Y},
        pages = {84467Y},
          doi = {10.1117/12.927173},
       adsurl = {https://ui.adsabs.harvard.edu/#abs/2012SPIE.8446E..7YC},
      adsnote = {Provided by the SAO/NASA Astrophysics Data System}
}

@INPROCEEDINGS{2012SPIE.8445E..1XE,
       author = {{Elias}, Nicholas M. and {Mozurkewich}, David and {Schmidt}, Luke M. and
        {Jurgenson}, Colby A. and {Edel}, Stanislav S. and {Jones},
        Carol E. and {Halonen}, Robert J. and {Schmitt}, Henrique R. and
        {Jorgensen}, Anders M. and {Hutter}, Donald J.},
        title = "{Calibration and imaging algorithms for full-Stokes optical
        interferometry}",
    booktitle = {Optical and Infrared Interferometry III},
         year = 2012,
       volume = {8445},
        month = Jul,
          eid = {84451X},
        pages = {84451X},
          doi = {10.1117/12.925781},
       adsurl = {https://ui.adsabs.harvard.edu/#abs/2012SPIE.8445E..1XE},
      adsnote = {Provided by the SAO/NASA Astrophysics Data System}
}

@INPROCEEDINGS{2011AAS...21715714S,
       author = {{Schmidt}, Luke M. and {Santoro}, F.~G. and {Jurgenson}, C.~A.},
        title = "{Progress to First Light for AMASING, an Aperture Masking Instrument}",
    booktitle = {American Astronomical Society Meeting Abstracts #217},
         year = 2011,
        month = Jan,
          eid = {157.14},
        pages = {157.14},
       adsurl = {https://ui.adsabs.harvard.edu/#abs/2011AAS...21715714S},
      adsnote = {Provided by the SAO/NASA Astrophysics Data System}
}

@INPROCEEDINGS{2010SPIE.7735E..38S,
       author = {{Schmidt}, Luke M. and {Jurgenson}, Colby A. and {Santoro}, Fernando G.
        and {Teare}, Scott W.},
        title = "{Design of AMASING: a new aperture masking instrument for high-resolution
        imaging at optical wavelengths}",
    booktitle = {Ground-based and Airborne Instrumentation for Astronomy III},
         year = 2010,
       volume = {7735},
        month = Jul,
          eid = {773538},
        pages = {773538},
          doi = {10.1117/12.857405},
       adsurl = {https://ui.adsabs.harvard.edu/#abs/2010SPIE.7735E..38S},
      adsnote = {Provided by the SAO/NASA Astrophysics Data System}
}

@INPROCEEDINGS{2010SPIE.7735E..19J,
       author = {{Jurgenson}, C. and {Santoro}, F. and {Creech-Eakman}, M. and {Houairi},
        K. and {Bloemhard}, H. and {Vasisht}, G. and {Swain}, M. and
        {Deroo}, P. and {Moore}, C. and {Schmidt}, L. and {Boston}, P.
        and {Rodeheffer}, D. and {Chen}, P.},
        title = "{NESSI: the New Mexico Tech Extrasolar Spectroscopic Survey Instrument}",
    booktitle = {Ground-based and Airborne Instrumentation for Astronomy III},
         year = 2010,
       volume = {7735},
        month = Jul,
          eid = {773519},
        pages = {773519},
          doi = {10.1117/12.856514},
       adsurl = {https://ui.adsabs.harvard.edu/#abs/2010SPIE.7735E..19J},
      adsnote = {Provided by the SAO/NASA Astrophysics Data System}
}

@INPROCEEDINGS{2009AAS...21440905S,
       author = {{Schmidt}, Luke M. and {Teare}, S.~W. and {Westpfahl}, D.~J. and
        {Jurgenson}, C.~A.},
        title = "{Design Requirements and Component Down Selection Process for an Aperture
        Masking Instrument at the Magdalena Ridge Observatory 2.4m
        Telescope}",
    booktitle = {American Astronomical Society Meeting Abstracts #214},
         year = 2009,
        month = May,
          eid = {409.05},
        pages = {409.05},
       adsurl = {https://ui.adsabs.harvard.edu/#abs/2009AAS...21440905S},
      adsnote = {Provided by the SAO/NASA Astrophysics Data System}
}

branch_name: refs/heads/master

extension: bib


text:
<?xml version="1.0" encoding="UTF-8"?>
<drawing version="7">
    <attr value="kintex7" name="DeviceFamilyName">
        <trait delete="all:0" />
        <trait editname="all:0" />
        <trait edittrait="all:0" />
    </attr>
    <netlist>
        <signal name="b(31:0)" />
        <signal name="b(31:28)" />
        <signal name="b(27:24)" />
        <signal name="b(23:20)" />
        <signal name="b(19:16)" />
        <signal name="b(15:12)" />
        <signal name="b(11:8)" />
        <signal name="b(7:4)" />
        <signal name="b(3:0)" />
        <signal name="a(31:0)" />
        <signal name="a(31:28)" />
        <signal name="a(27:24)" />
        <signal name="a(23:20)" />
        <signal name="a(19:16)" />
        <signal name="a(11:8)" />
        <signal name="a(15:12)" />
        <signal name="a(7:4)" />
        <signal name="a(3:0)" />
        <signal name="s(31:0)" />
        <signal name="s(31:28)" />
        <signal name="s(27:24)" />
        <signal name="s(23:20)" />
        <signal name="s(19:16)" />
        <signal name="s(15:12)" />
        <signal name="s(11:8)" />
        <signal name="s(7:4)" />
        <signal name="s(3:0)" />
        <signal name="XLXN_34" />
        <signal name="XLXN_35" />
        <signal name="XLXN_36" />
        <signal name="XLXN_37" />
        <signal name="XLXN_38" />
        <signal name="XLXN_39" />
        <signal name="XLXN_40" />
        <signal name="C0" />
        <signal name="XLXN_33" />
        <signal name="XLXN_51" />
        <signal name="XLXN_54" />
        <signal name="XLXN_55" />
        <signal name="XLXN_56" />
        <signal name="XLXN_57" />
        <signal name="XLXN_58" />
        <signal name="XLXN_61" />
        <signal name="XLXN_62" />
        <signal name="XLXN_63" />
        <signal name="XLXN_65" />
        <signal name="XLXN_66" />
        <signal name="XLXN_67" />
        <signal name="XLXN_60" />
        <signal name="XLXN_71" />
        <signal name="XLXN_74" />
        <signal name="XLXN_79" />
        <signal name="XLXN_64" />
        <signal name="XLXN_81" />
        <signal name="XLXN_89" />
        <signal name="XLXN_90" />
        <signal name="XLXN_91" />
        <signal name="Co" />
        <port polarity="Input" name="b(31:0)" />
        <port polarity="Input" name="a(31:0)" />
        <port polarity="Output" name="s(31:0)" />
        <port polarity="Input" name="C0" />
        <port polarity="Output" name="Co" />
        <blockdef name="ADD4b">
            <timestamp>2019-11-13T10:58:59</timestamp>
            <rect width="256" x="64" y="-192" height="192" />
            <line x2="0" y1="-96" y2="-96" x1="64" />
            <rect width="64" x="0" y="-108" height="24" />
            <line x2="0" y1="-32" y2="-32" x1="64" />
            <rect width="64" x="0" y="-44" height="24" />
            <line x2="0" y1="-160" y2="-160" x1="64" />
            <line x2="384" y1="-96" y2="-96" x1="320" />
            <line x2="384" y1="-32" y2="-32" x1="320" />
            <line x2="384" y1="-160" y2="-160" x1="320" />
            <rect width="64" x="320" y="-172" height="24" />
        </blockdef>
        <blockdef name="CLA">
            <timestamp>2019-11-13T10:27:36</timestamp>
            <rect width="256" x="64" y="-576" height="576" />
            <line x2="0" y1="-32" y2="-32" x1="64" />
            <line x2="0" y1="-160" y2="-160" x1="64" />
            <line x2="0" y1="-288" y2="-288" x1="64" />
            <line x2="0" y1="-416" y2="-416" x1="64" />
            <line x2="0" y1="-544" y2="-544" x1="64" />
            <line x2="0" y1="-96" y2="-96" x1="64" />
            <line x2="0" y1="-224" y2="-224" x1="64" />
            <line x2="0" y1="-352" y2="-352" x1="64" />
            <line x2="0" y1="-480" y2="-480" x1="64" />
            <line x2="384" y1="-288" y2="-288" x1="320" />
            <line x2="384" y1="-544" y2="-544" x1="320" />
            <line x2="384" y1="-416" y2="-416" x1="320" />
            <line x2="384" y1="-96" y2="-96" x1="320" />
            <line x2="384" y1="-32" y2="-32" x1="320" />
        </blockdef>
        <blockdef name="and2">
            <timestamp>2000-1-1T10:10:10</timestamp>
            <line x2="64" y1="-64" y2="-64" x1="0" />
            <line x2="64" y1="-128" y2="-128" x1="0" />
            <line x2="192" y1="-96" y2="-96" x1="256" />
            <arc ex="144" ey="-144" sx="144" sy="-48" r="48" cx="144" cy="-96" />
            <line x2="64" y1="-48" y2="-48" x1="144" />
            <line x2="144" y1="-144" y2="-144" x1="64" />
            <line x2="64" y1="-48" y2="-144" x1="64" />
        </blockdef>
        <blockdef name="or2">
            <timestamp>2000-1-1T10:10:10</timestamp>
            <line x2="64" y1="-64" y2="-64" x1="0" />
            <line x2="64" y1="-128" y2="-128" x1="0" />
            <line x2="192" y1="-96" y2="-96" x1="256" />
            <arc ex="192" ey="-96" sx="112" sy="-48" r="88" cx="116" cy="-136" />
            <arc ex="48" ey="-144" sx="48" sy="-48" r="56" cx="16" cy="-96" />
            <line x2="48" y1="-144" y2="-144" x1="112" />
            <arc ex="112" ey="-144" sx="192" sy="-96" r="88" cx="116" cy="-56" />
            <line x2="48" y1="-48" y2="-48" x1="112" />
        </blockdef>
        <block symbolname="ADD4b" name="XLXI_1">
            <blockpin signalname="a(3:0)" name="ai(3:0)" />
            <blockpin signalname="b(3:0)" name="bi(3:0)" />
            <blockpin signalname="C0" name="C0" />
            <blockpin signalname="XLXN_39" name="GG" />
            <blockpin signalname="XLXN_40" name="GP" />
            <blockpin signalname="s(3:0)" name="s(3:0)" />
        </block>
        <block symbolname="ADD4b" name="XLXI_2">
            <blockpin signalname="a(7:4)" name="ai(3:0)" />
            <blockpin signalname="b(7:4)" name="bi(3:0)" />
            <blockpin signalname="XLXN_55" name="C0" />
            <blockpin signalname="XLXN_37" name="GG" />
            <blockpin signalname="XLXN_38" name="GP" />
            <blockpin signalname="s(7:4)" name="s(3:0)" />
        </block>
        <block symbolname="ADD4b" name="XLXI_3">
            <blockpin signalname="a(11:8)" name="ai(3:0)" />
            <blockpin signalname="b(11:8)" name="bi(3:0)" />
            <blockpin signalname="XLXN_54" name="C0" />
            <blockpin signalname="XLXN_35" name="GG" />
            <blockpin signalname="XLXN_36" name="GP" />
            <blockpin signalname="s(11:8)" name="s(3:0)" />
        </block>
        <block symbolname="ADD4b" name="XLXI_4">
            <blockpin signalname="a(15:12)" name="ai(3:0)" />
            <blockpin signalname="b(15:12)" name="bi(3:0)" />
            <blockpin signalname="XLXN_51" name="C0" />
            <blockpin signalname="XLXN_33" name="GG" />
            <blockpin signalname="XLXN_34" name="GP" />
            <blockpin signalname="s(15:12)" name="s(3:0)" />
        </block>
        <block symbolname="ADD4b" name="XLXI_5">
            <blockpin signalname="a(19:16)" name="ai(3:0)" />
            <blockpin signalname="b(19:16)" name="bi(3:0)" />
            <blockpin signalname="XLXN_81" name="C0" />
            <blockpin signalname="XLXN_66" name="GG" />
            <blockpin signalname="XLXN_67" name="GP" />
            <blockpin signalname="s(19:16)" name="s(3:0)" />
        </block>
        <block symbolname="ADD4b" name="XLXI_6">
            <blockpin signalname="a(23:20)" name="ai(3:0)" />
            <blockpin signalname="b(23:20)" name="bi(3:0)" />
            <blockpin signalname="XLXN_79" name="C0" />
            <blockpin signalname="XLXN_64" name="GG" />
            <blockpin signalname="XLXN_65" name="GP" />
            <blockpin signalname="s(23:20)" name="s(3:0)" />
        </block>
        <block symbolname="ADD4b" name="XLXI_7">
            <blockpin signalname="a(27:24)" name="ai(3:0)" />
            <blockpin signalname="b(27:24)" name="bi(3:0)" />
            <blockpin signalname="XLXN_74" name="C0" />
            <blockpin signalname="XLXN_62" name="GG" />
            <blockpin signalname="XLXN_63" name="GP" />
            <blockpin signalname="s(27:24)" name="s(3:0)" />
        </block>
        <block symbolname="ADD4b" name="XLXI_8">
            <blockpin signalname="a(31:28)" name="ai(3:0)" />
            <blockpin signalname="b(31:28)" name="bi(3:0)" />
            <blockpin signalname="XLXN_71" name="C0" />
            <blockpin signalname="XLXN_60" name="GG" />
            <blockpin signalname="XLXN_61" name="GP" />
            <blockpin signalname="s(31:28)" name="s(3:0)" />
        </block>
        <block symbolname="CLA" name="XLXI_9">
            <blockpin signalname="C0" name="CI" />
            <blockpin signalname="XLXN_39" name="G0" />
            <blockpin signalname="XLXN_37" name="G1" />
            <blockpin signalname="XLXN_35" name="G2" />
            <blockpin signalname="XLXN_33" name="G3" />
            <blockpin signalname="XLXN_40" name="P0" />
            <blockpin signalname="XLXN_38" name="P1" />
            <blockpin signalname="XLXN_36" name="P2" />
            <blockpin signalname="XLXN_34" name="P3" />
            <blockpin signalname="XLXN_55" name="C1" />
            <blockpin signalname="XLXN_51" name="C3" />
            <blockpin signalname="XLXN_54" name="C2" />
            <blockpin signalname="XLXN_58" name="GG" />
            <blockpin signalname="XLXN_56" name="GP" />
        </block>
        <block symbolname="CLA" name="XLXI_10">
            <blockpin signalname="XLXN_81" name="CI" />
            <blockpin signalname="XLXN_66" name="G0" />
            <blockpin signalname="XLXN_64" name="G1" />
            <blockpin signalname="XLXN_62" name="G2" />
            <blockpin signalname="XLXN_60" name="G3" />
            <blockpin signalname="XLXN_67" name="P0" />
            <blockpin signalname="XLXN_65" name="P1" />
            <blockpin signalname="XLXN_63" name="P2" />
            <blockpin signalname="XLXN_61" name="P3" />
            <blockpin signalname="XLXN_79" name="C1" />
            <blockpin signalname="XLXN_71" name="C3" />
            <blockpin signalname="XLXN_74" name="C2" />
            <blockpin signalname="XLXN_91" name="GG" />
            <blockpin signalname="XLXN_89" name="GP" />
        </block>
        <block symbolname="and2" name="XLXI_11">
            <blockpin signalname="C0" name="I0" />
            <blockpin signalname="XLXN_56" name="I1" />
            <blockpin signalname="XLXN_57" name="O" />
        </block>
        <block symbolname="or2" name="XLXI_12">
            <blockpin signalname="XLXN_57" name="I0" />
            <blockpin signalname="XLXN_58" name="I1" />
            <blockpin signalname="XLXN_81" name="O" />
        </block>
        <block symbolname="or2" name="XLXI_13">
            <blockpin signalname="XLXN_90" name="I0" />
            <blockpin signalname="XLXN_91" name="I1" />
            <blockpin signalname="Co" name="O" />
        </block>
        <block symbolname="and2" name="XLXI_14">
            <blockpin signalname="XLXN_81" name="I0" />
            <blockpin signalname="XLXN_89" name="I1" />
            <blockpin signalname="XLXN_90" name="O" />
        </block>
    </netlist>
    <sheet sheetnum="1" width="3520" height="2720">
        <instance x="288" y="656" name="XLXI_1" orien="R90">
        </instance>
        <instance x="608" y="656" name="XLXI_2" orien="R90">
        </instance>
        <instance x="928" y="656" name="XLXI_3" orien="R90">
        </instance>
        <instance x="1248" y="656" name="XLXI_4" orien="R90">
        </instance>
        <instance x="1888" y="656" name="XLXI_6" orien="R90">
        </instance>
        <instance x="2528" y="656" name="XLXI_8" orien="R90">
        </instance>
        <branch name="b(31:0)">
            <wire x2="640" y1="352" y2="352" x1="320" />
            <wire x2="960" y1="352" y2="352" x1="640" />
            <wire x2="1280" y1="352" y2="352" x1="960" />
            <wire x2="1600" y1="352" y2="352" x1="1280" />
            <wire x2="1920" y1="352" y2="352" x1="1600" />
            <wire x2="2240" y1="352" y2="352" x1="1920" />
            <wire x2="2560" y1="352" y2="352" x1="2240" />
            <wire x2="2560" y1="240" y2="352" x1="2560" />
        </branch>
        <iomarker fontsize="28" x="2560" y="240" name="b(31:0)" orien="R270" />
        <bustap x2="2560" y1="352" y2="448" x1="2560" />
        <branch name="b(31:28)">
            <attrtext style="alignment:SOFT-LEFT;fontsize:28;fontname:Arial" attrname="Name" x="2560" y="552" type="branch" />
            <wire x2="2560" y1="448" y2="560" x1="2560" />
            <wire x2="2560" y1="560" y2="656" x1="2560" />
        </branch>
        <bustap x2="2240" y1="352" y2="448" x1="2240" />
        <branch name="b(27:24)">
            <attrtext style="alignment:SOFT-LEFT;fontsize:28;fontname:Arial" attrname="Name" x="2240" y="552" type="branch" />
            <wire x2="2240" y1="448" y2="560" x1="2240" />
            <wire x2="2240" y1="560" y2="656" x1="2240" />
        </branch>
        <bustap x2="1920" y1="352" y2="448" x1="1920" />
        <branch name="b(23:20)">
            <attrtext style="alignment:SOFT-LEFT;fontsize:28;fontname:Arial" attrname="Name" x="1920" y="552" type="branch" />
            <wire x2="1920" y1="448" y2="560" x1="1920" />
            <wire x2="1920" y1="560" y2="656" x1="1920" />
        </branch>
        <bustap x2="1600" y1="352" y2="448" x1="1600" />
        <branch name="b(19:16)">
            <attrtext style="alignment:SOFT-LEFT;fontsize:28;fontname:Arial" attrname="Name" x="1600" y="552" type="branch" />
            <wire x2="1600" y1="448" y2="560" x1="1600" />
            <wire x2="1600" y1="560" y2="656" x1="1600" />
        </branch>
        <bustap x2="1280" y1="352" y2="448" x1="1280" />
        <branch name="b(15:12)">
            <attrtext style="alignment:SOFT-LEFT;fontsize:28;fontname:Arial" attrname="Name" x="1280" y="552" type="branch" />
            <wire x2="1280" y1="448" y2="560" x1="1280" />
            <wire x2="1280" y1="560" y2="656" x1="1280" />
        </branch>
        <bustap x2="960" y1="352" y2="448" x1="960" />
        <branch name="b(11:8)">
            <attrtext style="alignment:SOFT-TVCENTER;fontsize:28;fontname:Arial" attrname="Name" x="960" y="544" type="branch" />
            <wire x2="960" y1="448" y2="544" x1="960" />
            <wire x2="960" y1="544" y2="656" x1="960" />
        </branch>
        <bustap x2="640" y1="352" y2="448" x1="640" />
        <branch name="b(7:4)">
            <attrtext style="alignment:SOFT-LEFT;fontsize:28;fontname:Arial" attrname="Name" x="640" y="552" type="branch" />
            <wire x2="640" y1="448" y2="560" x1="640" />
            <wire x2="640" y1="560" y2="656" x1="640" />
        </branch>
        <bustap x2="320" y1="352" y2="448" x1="320" />
        <branch name="b(3:0)">
            <attrtext style="alignment:SOFT-LEFT;fontsize:28;fontname:Arial" attrname="Name" x="320" y="552" type="branch" />
            <wire x2="320" y1="448" y2="560" x1="320" />
            <wire x2="320" y1="560" y2="656" x1="320" />
        </branch>
        <branch name="a(31:0)">
            <wire x2="704" y1="400" y2="400" x1="384" />
            <wire x2="1024" y1="400" y2="400" x1="704" />
            <wire x2="1344" y1="400" y2="400" x1="1024" />
            <wire x2="1664" y1="400" y2="400" x1="1344" />
            <wire x2="1984" y1="400" y2="400" x1="1664" />
            <wire x2="2304" y1="400" y2="400" x1="1984" />
            <wire x2="2624" y1="400" y2="400" x1="2304" />
            <wire x2="2624" y1="240" y2="400" x1="2624" />
        </branch>
        <bustap x2="2624" y1="400" y2="496" x1="2624" />
        <branch name="a(31:28)">
            <attrtext style="alignment:SOFT-TVCENTER;fontsize:28;fontname:Arial" attrname="Name" x="2624" y="576" type="branch" />
            <wire x2="2624" y1="496" y2="576" x1="2624" />
            <wire x2="2624" y1="576" y2="656" x1="2624" />
        </branch>
        <iomarker fontsize="28" x="2624" y="240" name="a(31:0)" orien="R270" />
        <bustap x2="2304" y1="400" y2="496" x1="2304" />
        <branch name="a(27:24)">
            <attrtext style="alignment:SOFT-TVCENTER;fontsize:28;fontname:Arial" attrname="Name" x="2304" y="576" type="branch" />
            <wire x2="2304" y1="496" y2="576" x1="2304" />
            <wire x2="2304" y1="576" y2="656" x1="2304" />
        </branch>
        <bustap x2="1984" y1="400" y2="496" x1="1984" />
        <branch name="a(23:20)">
            <attrtext style="alignment:SOFT-TVCENTER;fontsize:28;fontname:Arial" attrname="Name" x="1984" y="576" type="branch" />
            <wire x2="1984" y1="496" y2="576" x1="1984" />
            <wire x2="1984" y1="576" y2="656" x1="1984" />
        </branch>
        <bustap x2="1664" y1="400" y2="496" x1="1664" />
        <branch name="a(19:16)">
            <attrtext style="alignment:SOFT-TVCENTER;fontsize:28;fontname:Arial" attrname="Name" x="1664" y="544" type="branch" />
            <wire x2="1664" y1="496" y2="544" x1="1664" />
            <wire x2="1664" y1="544" y2="656" x1="1664" />
        </branch>
        <bustap x2="1024" y1="400" y2="496" x1="1024" />
        <branch name="a(11:8)">
            <attrtext style="alignment:SOFT-TVCENTER;fontsize:28;fontname:Arial" attrname="Name" x="1024" y="544" type="branch" />
            <wire x2="1024" y1="496" y2="544" x1="1024" />
            <wire x2="1024" y1="544" y2="656" x1="1024" />
        </branch>
        <bustap x2="1344" y1="400" y2="496" x1="1344" />
        <branch name="a(15:12)">
            <attrtext style="alignment:SOFT-TVCENTER;fontsize:28;fontname:Arial" attrname="Name" x="1344" y="560" type="branch" />
            <wire x2="1344" y1="496" y2="560" x1="1344" />
            <wire x2="1344" y1="560" y2="656" x1="1344" />
        </branch>
        <bustap x2="704" y1="400" y2="496" x1="704" />
        <branch name="a(7:4)">
            <attrtext style="alignment:SOFT-TVCENTER;fontsize:28;fontname:Arial" attrname="Name" x="704" y="560" type="branch" />
            <wire x2="704" y1="496" y2="560" x1="704" />
            <wire x2="704" y1="560" y2="656" x1="704" />
        </branch>
        <bustap x2="384" y1="400" y2="496" x1="384" />
        <branch name="a(3:0)">
            <attrtext style="alignment:SOFT-TVCENTER;fontsize:28;fontname:Arial" attrname="Name" x="384" y="576" type="branch" />
            <wire x2="384" y1="496" y2="576" x1="384" />
            <wire x2="384" y1="576" y2="656" x1="384" />
        </branch>
        <iomarker fontsize="28" x="2688" y="2512" name="s(31:0)" orien="R90" />
        <bustap x2="2688" y1="1280" y2="1184" x1="2688" />
        <branch name="s(31:28)">
            <attrtext style="alignment:SOFT-LEFT;fontsize:28;fontname:Arial" attrname="Name" x="2688" y="1112" type="branch" />
            <wire x2="2688" y1="1040" y2="1120" x1="2688" />
            <wire x2="2688" y1="1120" y2="1184" x1="2688" />
        </branch>
        <bustap x2="2368" y1="1280" y2="1184" x1="2368" />
        <branch name="s(27:24)">
            <attrtext style="alignment:SOFT-LEFT;fontsize:28;fontname:Arial" attrname="Name" x="2368" y="1112" type="branch" />
            <wire x2="2368" y1="1040" y2="1120" x1="2368" />
            <wire x2="2368" y1="1120" y2="1184" x1="2368" />
        </branch>
        <bustap x2="2048" y1="1280" y2="1184" x1="2048" />
        <branch name="s(23:20)">
            <attrtext style="alignment:SOFT-LEFT;fontsize:28;fontname:Arial" attrname="Name" x="2048" y="1112" type="branch" />
            <wire x2="2048" y1="1040" y2="1120" x1="2048" />
            <wire x2="2048" y1="1120" y2="1184" x1="2048" />
        </branch>
        <bustap x2="1728" y1="1280" y2="1184" x1="1728" />
        <branch name="s(19:16)">
            <attrtext style="alignment:SOFT-LEFT;fontsize:28;fontname:Arial" attrname="Name" x="1728" y="1112" type="branch" />
            <wire x2="1728" y1="1040" y2="1120" x1="1728" />
            <wire x2="1728" y1="1120" y2="1184" x1="1728" />
        </branch>
        <bustap x2="1408" y1="1280" y2="1184" x1="1408" />
        <branch name="s(15:12)">
            <attrtext style="alignment:SOFT-LEFT;fontsize:28;fontname:Arial" attrname="Name" x="1408" y="1112" type="branch" />
            <wire x2="1408" y1="1040" y2="1120" x1="1408" />
            <wire x2="1408" y1="1120" y2="1184" x1="1408" />
        </branch>
        <bustap x2="1088" y1="1280" y2="1184" x1="1088" />
        <branch name="s(11:8)">
            <attrtext style="alignment:SOFT-LEFT;fontsize:28;fontname:Arial" attrname="Name" x="1088" y="1112" type="branch" />
            <wire x2="1088" y1="1040" y2="1120" x1="1088" />
            <wire x2="1088" y1="1120" y2="1184" x1="1088" />
        </branch>
        <bustap x2="768" y1="1280" y2="1184" x1="768" />
        <branch name="s(7:4)">
            <attrtext style="alignment:SOFT-LEFT;fontsize:28;fontname:Arial" attrname="Name" x="768" y="1112" type="branch" />
            <wire x2="768" y1="1040" y2="1120" x1="768" />
            <wire x2="768" y1="1120" y2="1184" x1="768" />
        </branch>
        <bustap x2="448" y1="1280" y2="1184" x1="448" />
        <branch name="s(3:0)">
            <attrtext style="alignment:SOFT-LEFT;fontsize:28;fontname:Arial" attrname="Name" x="448" y="1112" type="branch" />
            <wire x2="448" y1="1040" y2="1120" x1="448" />
            <wire x2="448" y1="1120" y2="1184" x1="448" />
        </branch>
        <branch name="XLXN_34">
            <wire x2="1088" y1="1632" y2="1664" x1="1088" />
            <wire x2="1280" y1="1632" y2="1632" x1="1088" />
            <wire x2="1280" y1="1040" y2="1632" x1="1280" />
        </branch>
        <branch name="XLXN_38">
            <wire x2="640" y1="1040" y2="1568" x1="640" />
            <wire x2="832" y1="1568" y2="1568" x1="640" />
            <wire x2="832" y1="1568" y2="1664" x1="832" />
        </branch>
        <branch name="XLXN_39">
            <wire x2="384" y1="1040" y2="1600" x1="384" />
            <wire x2="768" y1="1600" y2="1600" x1="384" />
            <wire x2="768" y1="1600" y2="1664" x1="768" />
        </branch>
        <branch name="XLXN_40">
            <wire x2="320" y1="1040" y2="1632" x1="320" />
            <wire x2="704" y1="1632" y2="1632" x1="320" />
            <wire x2="704" y1="1632" y2="1664" x1="704" />
        </branch>
        <branch name="XLXN_36">
            <wire x2="960" y1="1040" y2="1664" x1="960" />
        </branch>
        <branch name="XLXN_35">
            <wire x2="1024" y1="1040" y2="1664" x1="1024" />
        </branch>
        <instance x="608" y="1664" name="XLXI_9" orien="R90">
        </instance>
        <branch name="XLXN_37">
            <wire x2="704" y1="1040" y2="1536" x1="704" />
            <wire x2="896" y1="1536" y2="1536" x1="704" />
            <wire x2="896" y1="1536" y2="1664" x1="896" />
        </branch>
        <branch name="C0">
            <wire x2="256" y1="240" y2="624" x1="256" />
            <wire x2="448" y1="624" y2="624" x1="256" />
            <wire x2="448" y1="624" y2="656" x1="448" />
            <wire x2="256" y1="624" y2="1664" x1="256" />
            <wire x2="640" y1="1664" y2="1664" x1="256" />
            <wire x2="256" y1="1664" y2="2128" x1="256" />
        </branch>
        <iomarker fontsize="28" x="256" y="240" name="C0" orien="R270" />
        <branch name="XLXN_33">
            <wire x2="1344" y1="1664" y2="1664" x1="1152" />
            <wire x2="1344" y1="1040" y2="1664" x1="1344" />
        </branch>
        <branch name="XLXN_51">
            <wire x2="1152" y1="2048" y2="2064" x1="1152" />
            <wire x2="1536" y1="2064" y2="2064" x1="1152" />
            <wire x2="1408" y1="592" y2="656" x1="1408" />
            <wire x2="1536" y1="592" y2="592" x1="1408" />
            <wire x2="1536" y1="592" y2="2064" x1="1536" />
        </branch>
        <branch name="XLXN_54">
            <wire x2="1024" y1="2048" y2="2096" x1="1024" />
            <wire x2="1472" y1="2096" y2="2096" x1="1024" />
            <wire x2="1088" y1="592" y2="656" x1="1088" />
            <wire x2="1184" y1="592" y2="592" x1="1088" />
            <wire x2="1184" y1="592" y2="1472" x1="1184" />
            <wire x2="1472" y1="1472" y2="1472" x1="1184" />
            <wire x2="1472" y1="1472" y2="2096" x1="1472" />
        </branch>
        <branch name="XLXN_55">
            <wire x2="864" y1="592" y2="592" x1="768" />
            <wire x2="864" y1="592" y2="1504" x1="864" />
            <wire x2="1408" y1="1504" y2="1504" x1="864" />
            <wire x2="1408" y1="1504" y2="2128" x1="1408" />
            <wire x2="768" y1="592" y2="656" x1="768" />
            <wire x2="896" y1="2048" y2="2128" x1="896" />
            <wire x2="1408" y1="2128" y2="2128" x1="896" />
        </branch>
        <instance x="192" y="2128" name="XLXI_11" orien="R90" />
        <branch name="XLXN_56">
            <wire x2="320" y1="2096" y2="2128" x1="320" />
            <wire x2="640" y1="2096" y2="2096" x1="320" />
            <wire x2="640" y1="2048" y2="2096" x1="640" />
        </branch>
        <branch name="XLXN_57">
            <wire x2="288" y1="2384" y2="2400" x1="288" />
            <wire x2="416" y1="2400" y2="2400" x1="288" />
            <wire x2="416" y1="2128" y2="2400" x1="416" />
            <wire x2="640" y1="2128" y2="2128" x1="416" />
            <wire x2="640" y1="2128" y2="2160" x1="640" />
        </branch>
        <instance x="576" y="2160" name="XLXI_12" orien="R90" />
        <branch name="XLXN_58">
            <wire x2="704" y1="2048" y2="2160" x1="704" />
        </branch>
        <branch name="XLXN_61">
            <wire x2="2368" y1="1632" y2="1664" x1="2368" />
            <wire x2="2560" y1="1632" y2="1632" x1="2368" />
            <wire x2="2560" y1="1040" y2="1632" x1="2560" />
        </branch>
        <branch name="XLXN_62">
            <wire x2="2304" y1="1040" y2="1664" x1="2304" />
        </branch>
        <branch name="XLXN_63">
            <wire x2="2240" y1="1040" y2="1664" x1="2240" />
        </branch>
        <branch name="XLXN_65">
            <wire x2="1920" y1="1040" y2="1568" x1="1920" />
            <wire x2="2112" y1="1568" y2="1568" x1="1920" />
            <wire x2="2112" y1="1568" y2="1664" x1="2112" />
        </branch>
        <branch name="XLXN_67">
            <wire x2="1600" y1="1040" y2="1632" x1="1600" />
            <wire x2="1984" y1="1632" y2="1632" x1="1600" />
            <wire x2="1984" y1="1632" y2="1664" x1="1984" />
        </branch>
        <instance x="1888" y="1664" name="XLXI_10" orien="R90">
        </instance>
        <branch name="XLXN_60">
            <wire x2="2624" y1="1664" y2="1664" x1="2432" />
            <wire x2="2624" y1="1040" y2="1664" x1="2624" />
        </branch>
        <branch name="XLXN_71">
            <wire x2="2880" y1="2048" y2="2048" x1="2432" />
            <wire x2="2880" y1="576" y2="576" x1="2688" />
            <wire x2="2880" y1="576" y2="2048" x1="2880" />
            <wire x2="2688" y1="576" y2="656" x1="2688" />
        </branch>
        <branch name="XLXN_74">
            <wire x2="2304" y1="2048" y2="2080" x1="2304" />
            <wire x2="2816" y1="2080" y2="2080" x1="2304" />
            <wire x2="2464" y1="576" y2="576" x1="2368" />
            <wire x2="2464" y1="576" y2="1472" x1="2464" />
            <wire x2="2816" y1="1472" y2="1472" x1="2464" />
            <wire x2="2816" y1="1472" y2="2080" x1="2816" />
            <wire x2="2368" y1="576" y2="656" x1="2368" />
        </branch>
        <instance x="2208" y="656" name="XLXI_7" orien="R90">
        </instance>
        <branch name="s(31:0)">
            <wire x2="768" y1="1280" y2="1280" x1="448" />
            <wire x2="1088" y1="1280" y2="1280" x1="768" />
            <wire x2="1408" y1="1280" y2="1280" x1="1088" />
            <wire x2="1728" y1="1280" y2="1280" x1="1408" />
            <wire x2="2048" y1="1280" y2="1280" x1="1728" />
            <wire x2="2368" y1="1280" y2="1280" x1="2048" />
            <wire x2="2688" y1="1280" y2="1280" x1="2368" />
            <wire x2="2688" y1="1280" y2="2512" x1="2688" />
        </branch>
        <branch name="XLXN_79">
            <wire x2="2144" y1="576" y2="576" x1="2048" />
            <wire x2="2144" y1="576" y2="1504" x1="2144" />
            <wire x2="2752" y1="1504" y2="1504" x1="2144" />
            <wire x2="2752" y1="1504" y2="2112" x1="2752" />
            <wire x2="2048" y1="576" y2="656" x1="2048" />
            <wire x2="2176" y1="2048" y2="2112" x1="2176" />
            <wire x2="2752" y1="2112" y2="2112" x1="2176" />
        </branch>
        <branch name="XLXN_64">
            <wire x2="1984" y1="1040" y2="1536" x1="1984" />
            <wire x2="2176" y1="1536" y2="1536" x1="1984" />
            <wire x2="2176" y1="1536" y2="1664" x1="2176" />
        </branch>
        <branch name="XLXN_81">
            <wire x2="672" y1="2416" y2="2432" x1="672" />
            <wire x2="1600" y1="2432" y2="2432" x1="672" />
            <wire x2="1600" y1="1664" y2="2432" x1="1600" />
            <wire x2="1760" y1="1664" y2="1664" x1="1600" />
            <wire x2="1824" y1="1664" y2="1664" x1="1760" />
            <wire x2="1920" y1="1664" y2="1664" x1="1824" />
            <wire x2="1760" y1="1664" y2="2160" x1="1760" />
            <wire x2="1728" y1="576" y2="656" x1="1728" />
            <wire x2="1824" y1="576" y2="576" x1="1728" />
            <wire x2="1824" y1="576" y2="1664" x1="1824" />
        </branch>
        <branch name="XLXN_66">
            <wire x2="1664" y1="1040" y2="1600" x1="1664" />
            <wire x2="2048" y1="1600" y2="1600" x1="1664" />
            <wire x2="2048" y1="1600" y2="1664" x1="2048" />
        </branch>
        <instance x="1568" y="656" name="XLXI_5" orien="R90">
        </instance>
        <instance x="1856" y="2160" name="XLXI_13" orien="R90" />
        <instance x="1696" y="2160" name="XLXI_14" orien="R90" />
        <branch name="XLXN_89">
            <wire x2="1824" y1="2128" y2="2160" x1="1824" />
            <wire x2="1920" y1="2128" y2="2128" x1="1824" />
            <wire x2="1920" y1="2048" y2="2128" x1="1920" />
        </branch>
        <branch name="XLXN_90">
            <wire x2="1792" y1="2416" y2="2496" x1="1792" />
            <wire x2="1872" y1="2496" y2="2496" x1="1792" />
            <wire x2="1920" y1="2160" y2="2160" x1="1872" />
            <wire x2="1872" y1="2160" y2="2496" x1="1872" />
        </branch>
        <branch name="XLXN_91">
            <wire x2="1984" y1="2048" y2="2064" x1="1984" />
            <wire x2="1984" y1="2064" y2="2160" x1="1984" />
        </branch>
        <branch name="Co">
            <wire x2="1952" y1="2416" y2="2432" x1="1952" />
            <wire x2="1952" y1="2432" y2="2480" x1="1952" />
            <wire x2="1952" y1="2480" y2="2496" x1="1952" />
        </branch>
        <iomarker fontsize="28" x="1952" y="2496" name="Co" orien="R90" />
    </sheet>
</drawing>

license: MIT

license_type: permissive

extension: sch


text:
/*
Copyright 2017 The Kubernetes Authors.

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

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

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

package options

import (
	"bytes"
	"flag"
	"fmt"
	"io/ioutil"
	"reflect"
	"sort"
	"strconv"
	"strings"
	"sync"
	"time"

	"k8s.io/apimachinery/pkg/util/sets"

	"github.com/ghodss/yaml"
	"github.com/golang/glog"
)

// Options represents the configuration options for mungegithub.
//
// Options are loaded from a yaml string->string configmap and are updated whenever Load is called.
// Options must be registered at least once before they can be retrieved, but registration and
// loading may happen in any order (this makes Options compatible with a plugin architecture).
// Option keys must be unique across all options of all types.
// Options may be registered multiple times safely so long as the option is always bound to the same
// pointer. (registration is idempotent)
// The defaultVal is used if the options does not have a value specified.
// The description explains the option as an entry in the text returned by Descriptions().
type Options struct {
	rawConfig map[string]string
	options   map[string]*option

	callbacks []UpdateCallback

	sync.Mutex
}

func New() *Options {
	return &Options{options: map[string]*option{}}
}

type UpdateCallbackError struct {
	err error
}

func (e *UpdateCallbackError) Error() string {
	return fmt.Sprintf("error from option update callback: %v", e.err)
}

type UpdateCallback func(changed sets.String) error

func (o *Options) RegisterUpdateCallback(callback UpdateCallback) {
	o.callbacks = append(o.callbacks, callback)
}

type optionType string

const (
	typeString      optionType = "string"
	typeStringSlice optionType = "[]string"
	typeInt         optionType = "int"
	typeUint64      optionType = "uint64"
	typeBool        optionType = "bool"
	typeDuration    optionType = "time.Duration"
	// typeSecret is the same as typeString except that values are not printed.
	typeSecret optionType = "SECRET"
	// typeUnknown is assigned to options that appear in the configmap, but are not registered.
	// Options of this type are represented as strings.
	typeUnknown optionType = "UNKNOWN"
)

type option struct {
	description string
	optType     optionType
	// val and defaultVal include a level of pointer indirection.
	// (e.g. If optType=="string", val and defaultVal are of type *string not string.)
	val        interface{}
	defaultVal interface{}

	raw string
}

// ToFlags registers all options as string flags with the flag.CommandLine flagset.
// All options should be registered before ToFlags is called.
func (o *Options) ToFlags() {
	for key, opt := range o.options {
		flag.String(key, strings.Trim(toString(opt.optType, opt.defaultVal), "\""), opt.description)
	}
}

// Load updates options based on the contents of a config file and returns the set of changed options.
func (o *Options) Load(file string) (sets.String, error) {
	firstLoad := o.rawConfig == nil

	b, err := ioutil.ReadFile(file)
	if err != nil || b == nil {
		return nil, fmt.Errorf("could not read config file %q: %v", file, err)
	}
	changed, err := o.populateFromYaml(b)
	if err != nil {
		return changed, err
	}

	if len(changed) > 0 && !firstLoad {
		for _, callback := range o.callbacks {
			if err = callback(changed); err != nil {
				return changed, &UpdateCallbackError{err: err}
			}
		}
	}
	return changed, nil
}

// PopulateFromString loads values from the provided yaml string and returns the set of changed options.
// This function should only be used in tests where the config is not loaded from a file.
func (o *Options) PopulateFromString(yaml string) sets.String {
	changed, err := o.populateFromYaml([]byte(yaml))
	if err != nil {
		glog.Fatalf("Failed to populate Options with values from %q. Err: %v.", yaml, err)
	}
	return changed
}

// PopulateFromFlags loads values into options from command line flags.
// This function must be proceeded by a call to ToFlags and the flags must have been parsed since
// then.
func (o *Options) PopulateFromFlags() {
	if !flag.Parsed() {
		flag.Parse()
	}

	flags := map[string]string{}
	flag.Visit(func(f *flag.Flag) {
		flags[f.Name] = f.Value.String()
	})

	o.populateFromMap(flags)
}

// FlagsSpecified returns the names of the flags that were specified that correspond to options.
// This function must have been proceeded by a call to ToFlags and the flags must have been parsed
// since then.
func (o *Options) FlagsSpecified() sets.String {
	if !flag.Parsed() {
		flag.Parse()
	}

	specified := sets.String{}
	flag.Visit(func(f *flag.Flag) {
		if _, ok := o.options[f.Name]; ok {
			specified.Insert(f.Name)
		}
	})
	return specified
}

func (o *Options) populateFromYaml(rawCM []byte) (sets.String, error) {
	var configmap map[string]string
	if err := yaml.Unmarshal(rawCM, &configmap); err != nil {
		return nil, fmt.Errorf("failed to unmarshal configmap from yaml: %v", err)
	}

	return o.populateFromMap(configmap), nil
}

func (o *Options) populateFromMap(configmap map[string]string) sets.String {
	o.Lock()
	defer o.Unlock()

	changed := sets.NewString()
	for key, opt := range o.options {
		if opt.optType == typeUnknown {
			delete(o.options, key)
			continue
		}
		if raw, ok := configmap[key]; ok {
			opt.raw = raw
			if opt.fromString() {
				// The value changed.
				changed.Insert(key)
			}
			delete(configmap, key)
		} else {
			if opt.moveToVal(opt.defaultVal) {
				// The value changed.
				changed.Insert(key)
			}
		}
	}
	for key, raw := range configmap {
		o.options[key] = &option{
			optType: typeUnknown,
			raw:     raw,
		}
	}
	o.rawConfig = configmap
	return changed
}

// fromString converts opt.raw to opt.optType and moves the resulting value into opt.val.
// iff the value changed 'true' is returned.
func (opt *option) fromString() bool {
	var err error
	var newVal interface{}
	switch opt.optType {
	case typeString, typeSecret:
		newVal = &opt.raw
	case typeStringSlice:
		slice := []string{}
		for _, raw := range strings.Split(opt.raw, ",") {
			if raw = strings.TrimSpace(raw); len(raw) > 0 {
				slice = append(slice, raw)
			}
		}
		newVal = &slice
	case typeInt:
		var i int
		if i, err = strconv.Atoi(opt.raw); err != nil {
			glog.Fatalf("Cannot convert %q to type 'int'.", opt.raw)
		}
		newVal = &i
	case typeUint64:
		var ui uint64
		if ui, err = strconv.ParseUint(opt.raw, 10, 64); err != nil {
			glog.Fatalf("Cannot convert %q to type 'uint64'.", opt.raw)
		}
		newVal = &ui
	case typeBool:
		var b bool
		if b, err = strconv.ParseBool(opt.raw); err != nil {
			glog.Fatalf("Cannot convert %q to type 'bool'.", opt.raw)
		}
		newVal = &b
	case typeDuration:
		var dur time.Duration
		if dur, err = time.ParseDuration(opt.raw); err != nil {
			glog.Fatalf("Cannot convert %q to type 'time.Duration'.", opt.raw)
		}
		newVal = &dur
	default:
		glog.Fatalf("Unrecognized type '%s'.", opt.optType)
	}
	return opt.moveToVal(newVal)
}

// moveToVal moves the specified value to 'val', maintaining the original 'val' ptr.
// iff the value changed 'true' is returned.
func (opt *option) moveToVal(newVal interface{}) bool {
	changed := !reflect.DeepEqual(opt.val, newVal)
	switch opt.optType {
	case typeString, typeSecret:
		*opt.val.(*string) = *newVal.(*string)
	case typeStringSlice:
		*opt.val.(*[]string) = *newVal.(*[]string)
	case typeInt:
		*opt.val.(*int) = *newVal.(*int)
	case typeUint64:
		*opt.val.(*uint64) = *newVal.(*uint64)
	case typeBool:
		*opt.val.(*bool) = *newVal.(*bool)
	case typeDuration:
		*opt.val.(*time.Duration) = *newVal.(*time.Duration)
	default:
		glog.Fatalf("Unrecognized type '%s'.", opt.optType)
	}
	return changed
}

// register tries to register an option of any optionType (with the exception of typeUnknown).
// register may be called before or after the configmap is loaded, but options cannot be retrieved
// until they are registered.
func (o *Options) register(optType optionType, key, description string, val, defaultVal interface{}) interface{} {
	if optType == typeUnknown {
		glog.Fatalf("Key '%s' cannot be registered as type 'typeUnknown'.", key)
	}
	opt, ok := o.options[key]
	if ok {
		if opt.optType == typeUnknown {
			// Convert opt.raw to optType.
			opt.val = val
			opt.optType = optType
			opt.defaultVal = defaultVal
			opt.description = description
			opt.fromString()
		} else if opt.optType != optType {
			glog.Fatalf(
				"Cannot register key: '%s' as a '%s'. It is already registered as a '%s'.",
				key,
				optType,
				opt.optType,
			)
		} else if opt.val != val {
			glog.Fatalf(
				"Cannot register key: '%s' to pointer %p. It is already bound to %p.",
				key,
				val,
				opt.val,
			)
		} else if description != opt.description {
			glog.Fatalf(
				"Cannot register key: '%s' with description %q. It already has description %q.",
				key,
				description,
				opt.description,
			)
		} else if !reflect.DeepEqual(defaultVal, opt.defaultVal) {
			glog.Fatalf(
				"Cannot register key: '%s' with default value %s. It already has default value %s.",
				key,
				toString(optType, defaultVal),
				toString(optType, opt.defaultVal),
			)
		}
	} else {
		opt = &option{
			description: description,
			optType:     optType,
			val:         val,
			defaultVal:  defaultVal,
		}
		o.options[key] = opt
		opt.moveToVal(defaultVal)
	}
	return opt.val
}

// RegisterString registers a `string` option under the specified key.
func (o *Options) RegisterString(ptr *string, key string, defaultVal string, description string) {
	o.register(typeString, key, description, ptr, &defaultVal)
}

// RegisterStringSlice registers a `[]string` option under the specified key.
func (o *Options) RegisterStringSlice(ptr *[]string, key string, defaultVal []string, description string) {
	*ptr = defaultVal
	o.register(typeStringSlice, key, description, ptr, &defaultVal)
}

// RegisterInt registers an `int` option under the specified key.
func (o *Options) RegisterInt(ptr *int, key string, defaultVal int, description string) {
	o.register(typeInt, key, description, ptr, &defaultVal)
}

// RegisterUint64 registers a `uint64` option under the specified key.
func (o *Options) RegisterUint64(ptr *uint64, key string, defaultVal uint64, description string) {
	o.register(typeUint64, key, description, ptr, &defaultVal)
}

// RegisterBool registers a `bool` option under the specified key.
func (o *Options) RegisterBool(ptr *bool, key string, defaultVal bool, description string) {
	o.register(typeBool, key, description, ptr, &defaultVal)
}

// RegisterDuration registers a `time.Duration` option under the specified key.
func (o *Options) RegisterDuration(ptr *time.Duration, key string, defaultVal time.Duration, description string) {
	o.register(typeDuration, key, description, ptr, &defaultVal)
}

// GetString gets the `string` option under the specified key.
func (o *Options) GetString(key string) *string {
	opt, ok := o.options[key]
	if !ok {
		glog.Fatalf("Programmer Error: option key '%s' is not registered!", key)
	}
	if opt.optType != typeString {
		glog.Fatalf("The option with key '%s' has type '%s' not '%s'.", key, opt.optType, typeString)
	}
	return o.options[key].val.(*string)
}

// GetStringSlice gets the `[]string` option under the specified key.
func (o *Options) GetStringSlice(key string) *[]string {
	opt, ok := o.options[key]
	if !ok {
		glog.Fatalf("Programmer Error: option key '%s' is not registered!", key)
	}
	if opt.optType != typeStringSlice {
		glog.Fatalf("The option with key '%s' has type '%s' not '%s'.",
			key,
			opt.optType,
			typeStringSlice,
		)
	}
	return o.options[key].val.(*[]string)
}

// GetInt gets then `int` option under the specified key.
func (o *Options) GetInt(key string) *int {
	opt, ok := o.options[key]
	if !ok {
		glog.Fatalf("Programmer Error: option key '%s' is not registered!", key)
	}
	if opt.optType != typeInt {
		glog.Fatalf("The option with key '%s' has type '%s' not '%s'.", key, opt.optType, typeInt)
	}
	return o.options[key].val.(*int)
}

// GetUint64 gets the `uint64` option under the specified key.
func (o *Options) GetUint64(key string) *uint64 {
	opt, ok := o.options[key]
	if !ok {
		glog.Fatalf("Programmer Error: option key '%s' is not registered!", key)
	}
	if opt.optType != typeUint64 {
		glog.Fatalf("The option with key '%s' has type '%s' not '%s'.", key, opt.optType, typeUint64)
	}
	return o.options[key].val.(*uint64)
}

// GetBool gets the `bool` option under the specified key.
func (o *Options) GetBool(key string) *bool {
	opt, ok := o.options[key]
	if !ok {
		glog.Fatalf("Programmer Error: option key '%s' is not registered!", key)
	}
	if opt.optType != typeBool {
		glog.Fatalf("The option with key '%s' has type '%s' not '%s'.", key, opt.optType, typeBool)
	}
	return o.options[key].val.(*bool)
}

// GetDuration gets the `time.Duration` option under the specified key.
func (o *Options) GetDuration(key string) *time.Duration {
	opt, ok := o.options[key]
	if !ok {
		glog.Fatalf("Programmer Error: option key '%s' is not registered!", key)
	}
	if opt.optType != typeDuration {
		glog.Fatalf("The option with key '%s' has type '%s' not '%s'.", key, opt.optType, typeDuration)
	}
	return o.options[key].val.(*time.Duration)
}

func toString(optType optionType, val interface{}) string {
	switch optType {
	case typeString:
		return fmt.Sprintf("%q", *val.(*string))
	case typeStringSlice:
		if len(*val.(*[]string)) == 0 {
			return "[]"
		}
		return fmt.Sprintf("[\"%s\"]", strings.Join(*val.(*[]string), "\", \""))
	case typeInt:
		return fmt.Sprintf("%d", *val.(*int))
	case typeUint64:
		return fmt.Sprintf("%d", *val.(*uint64))
	case typeBool:
		return fmt.Sprintf("%v", *val.(*bool))
	case typeDuration:
		return fmt.Sprintf("%v", *val.(*time.Duration))
	case typeSecret:
		return "<REDACTED>"
	case typeUnknown:
		return fmt.Sprintf("<UNREGISTERED> %q", val)
	default:
		glog.Fatalf("Unrecognized type '%s'.", optType)
		return ""
	}
}

func (o *Options) keysSortedAndWidth() ([]string, int) {
	keys := make([]string, 0, len(o.options))
	width := 0
	for key := range o.options {
		keys = append(keys, key)
		if len(key) > width {
			width = len(key)
		}
	}
	sort.Strings(keys)
	return keys, width
}

func (o *Options) Descriptions() string {
	var buf bytes.Buffer
	fmt.Fprint(&buf, "The below options are available. They are listed in the format 'option: (default value) \"Description\"'.\n")
	sorted, width := o.keysSortedAndWidth()
	width++
	for _, key := range sorted {
		if opt := o.options[key]; opt.optType != typeUnknown {
			fmt.Fprintf(&buf, "%-*s (%s) %q\n", width, key+":", toString(opt.optType, opt.defaultVal), opt.description)
		}
	}
	return buf.String()
}

func (o *Options) CurrentValues() string {
	var buf bytes.Buffer
	fmt.Fprint(&buf, "Currently configured option values:\n")
	sorted, width := o.keysSortedAndWidth()
	width++
	for _, key := range sorted {
		if opt := o.options[key]; opt.optType != typeUnknown {
			fmt.Fprintf(&buf, "%-*s %s\n", width, key+":", toString(opt.optType, opt.val))
		}
	}
	return buf.String()
}

repository: gaocegege/test-infra

repo_name: gaocegege/test-infra

extension: go


text:
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace GetMaxTimeRecords
{
    class MaxTimeRecordsProducer
    {

        private static DateTime GetMostRecentRecordTime(string signalId)
        {

            DateTime mostRecentEventTime = MOE.Common.Business.ControllerEventLogs.GetMostRecentRecordTimestamp(signalId);

            if (mostRecentEventTime != null)
            {

                return (mostRecentEventTime);
            }
            return (DateTime.Now.AddDays(-2));
        }

        //private object[] GetRandomRow(DataConsumer consumer)
        //{
           // put stuff to create records here

        //}

    }
}

repository: udotdevelopment/ATSPM

repo_name: udotdevelopment/ATSPM

gha_language: C#

extension: cs


text:
require rust-llvm.inc

LIC_FILES_CHKSUM = "file://LICENSE.TXT;md5=4c0bc17c954e99fd547528d938832bfa"

do_install_append () {
	cd "${B}"
	install -d "${D}${bindir}"
	install -m755 "Release/bin/FileCheck" "${D}${bindir}"
}

repository: konsulko/meta-rust

repo_name: konsulko/meta-rust

extension: bb


text:
package git

import (
	"bytes"
	"fmt"
	"io"
	"os/exec"
	"strings"
)

// Do does git given git command with params
func Do(command string, params ...string) (io.Reader, error) {
	commandLine := strings.Join(append([]string{"git", command}, params...), " ")
	cmd := exec.Command("git", append([]string{command}, params...)...)
	output := &bytes.Buffer{}
	stderr := &bytes.Buffer{}
	cmd.Stdout = output
	cmd.Stderr = stderr
	if err := cmd.Start(); err != nil {
		return nil, fmt.Errorf("%s:\n%s", commandLine, stderr.String())
	}
	if err := cmd.Wait(); err != nil {
		return nil, fmt.Errorf("%s: \n%s", commandLine, stderr.String())
	}
	return output, nil
}

repository: sirkon/cmd-tools

repo_name: sirkon/cmd-tools

gha_license_id: MIT

gha_language: Go