/*
 * Copyright 2022 GlobalFoundries PDK 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.
 */

  symbol ("gf180mcu_fd_sc_mcu9t5v0__aoi22_1") {
    set_minimum_boundary (-100 * SCALE, -90 * SCALE, 100 * SCALE, 90 * SCALE);
    line (-80 * SCALE, -90 * SCALE, -80 * SCALE, 90 * SCALE);
    line (-80 * SCALE, 90 * SCALE, 80 * SCALE, 90 * SCALE);
    line (80 * SCALE, 90 * SCALE, 80 * SCALE, -90 * SCALE);
    line (80 * SCALE, -90 * SCALE, -80 * SCALE, -90 * SCALE);
    line (-100 * SCALE, 60 * SCALE, -80 * SCALE, 60 * SCALE);
    line (-100 * SCALE, 30 * SCALE, -80 * SCALE, 30 * SCALE);
    line (-100 * SCALE, -30 * SCALE, -80 * SCALE, -30 * SCALE);
    line (-100 * SCALE, -60 * SCALE, -80 * SCALE, -60 * SCALE);
    line (80 * SCALE, 0 * SCALE, 100 * SCALE, 0 * SCALE);
    line (96 * SCALE, -4 * SCALE, 96 * SCALE, 4 * SCALE);
    line (96 * SCALE, 4 * SCALE, 124 * SCALE, 4 * SCALE);
    line (124 * SCALE, 4 * SCALE, 124 * SCALE, -4 * SCALE);
    line (124 * SCALE, -4 * SCALE, 96 * SCALE, -4 * SCALE);
    pin ("ZN", 110 * SCALE, 0 * SCALE, ANY_ROTATION);
    line (-124 * SCALE, -64 * SCALE, -124 * SCALE, -56 * SCALE);
    line (-124 * SCALE, -56 * SCALE, -96 * SCALE, -56 * SCALE);
    line (-96 * SCALE, -56 * SCALE, -96 * SCALE, -64 * SCALE);
    line (-96 * SCALE, -64 * SCALE, -124 * SCALE, -64 * SCALE);
    pin ("B2", -110 * SCALE, -60 * SCALE, ANY_ROTATION);
    line (-124 * SCALE, -34 * SCALE, -124 * SCALE, -26 * SCALE);
    line (-124 * SCALE, -26 * SCALE, -96 * SCALE, -26 * SCALE);
    line (-96 * SCALE, -26 * SCALE, -96 * SCALE, -34 * SCALE);
    line (-96 * SCALE, -34 * SCALE, -124 * SCALE, -34 * SCALE);
    pin ("B1", -110 * SCALE, -30 * SCALE, ANY_ROTATION);
    line (-124 * SCALE, 26 * SCALE, -124 * SCALE, 34 * SCALE);
    line (-124 * SCALE, 34 * SCALE, -96 * SCALE, 34 * SCALE);
    line (-96 * SCALE, 34 * SCALE, -96 * SCALE, 26 * SCALE);
    line (-96 * SCALE, 26 * SCALE, -124 * SCALE, 26 * SCALE);
    pin ("A2", -110 * SCALE, 30 * SCALE, ANY_ROTATION);
    line (-124 * SCALE, 56 * SCALE, -124 * SCALE, 64 * SCALE);
    line (-124 * SCALE, 64 * SCALE, -96 * SCALE, 64 * SCALE);
    line (-96 * SCALE, 64 * SCALE, -96 * SCALE, 56 * SCALE);
    line (-96 * SCALE, 56 * SCALE, -124 * SCALE, 56 * SCALE);
    pin ("A1", -110 * SCALE, 60 * SCALE, ANY_ROTATION);
  } /* end of symbol "gf180mcu_fd_sc_mcu9t5v0__aoi22_1" */
