```python
def gen_plan(state: DrawState, x: float, y: float, size: float, offsets: list):
    # Define the positions for the hash symbol (#) based on the size
    lines = [
        # Vertical lines
        (x, y - size, x, y + size),  # Left vertical line
        (x + size, y - size, x + size, y + size),  # Right vertical line
        # Horizontal lines
        (x - size, y, x + size, y),  # Top horizontal line
        (x - size, y + size, x + size, y + size)  # Bottom horizontal line
    ]

    # Add offsets to each line's endpoints
    actions = []
    for (x0, y0, x1, y1), (dx, dy) in zip(lines, offsets):
        actions.append(Action("draw_line", [x0 + dx, y0 + dy, x1 + dx, y1 + dy]))

    return actions

def gen_domain(initial: DrawState):
    return {
        "x": ContinuousSampler(0.1, 0.54),  # X coordinate of the center of the hash symbol (cm)
        "y": ContinuousSampler(0.1, 0.44),  # Y coordinate of the center of the hash symbol (cm)
        "size": ContinuousSampler(0.1, 0.3),  # Size of the hash symbol (cm)
        "offsets": ContinuousSampler(-0.05, 0.05, shape=(8, 2))  # 2D point offsets for the hash symbol (8 points)
    }
```