def METHOD_NAME(self, template, instance_name, pin_map, x_offset, y_offset, flip_x):
    bbox = template['bbox']
    # bounding box as visual aid
    t = {'layer': 'Boundary', 'netName': None,
         'rect': [bbox[0]+x_offset, bbox[1]+y_offset, bbox[2]+x_offset, bbox[3]+y_offset]}
    self.terminals.append(t)
    if flip_x < 0:
        x_offset += bbox[2] - bbox[1]
    # append terminals
    for term in template['terminals']:
        t = {}
        r = term['rect'].copy()
        if flip_x < 0:
            t['rect'] = [x_offset-r[2], r[1]+y_offset, x_offset-r[0], r[3]+y_offset]
        else:
            t['rect'] = [x_offset+r[0], r[1]+y_offset, x_offset+r[2], r[3]+y_offset]
        t['layer'] = term['layer']
        t['netName'] = pin_map.get(term['netName'], None)
        self.terminals.append(t)
    # Cells listed below has to be instantiated during/after importing layout to Virtuoso
    self.instantiated_cells.append([instance_name, (x_offset, y_offset, flip_x, 1), template['instance']])