## Step 1: Define the variables and the objective function
The variables are ['hours worked by John', 'hours worked by Peggy', 'hours worked by Mary', 'hours worked by Bill']. Let's denote them as $x_0$, $x_1$, $x_2$, and $x_3$ respectively. The objective function to minimize is:
\[ \min \quad x_0^2 + 9x_0x_1 + 3x_0x_2 + 8x_0x_3 + 8x_1^2 + 4x_1x_2 + 9x_1x_3 + 4x_2^2 + 6x_2x_3 + 4x_3^2 + 9x_0 + 9x_1 + 7x_2 + 7x_3 \]

## Step 2: Define the constraints
The constraints are given as:
- $9.81x_0 \leq 132$
- $9.41x_0 \leq 76$
- $7.21x_0 \leq 80$
- $8.75x_1 \leq 132$
- $3.47x_1 \leq 76$
- $1.75x_1 \leq 80$
- $1.26x_2 \leq 132$
- $9.45x_2 \leq 76$
- $1.49x_2 \leq 80$
- $0.87x_3 \leq 132$
- $0.53x_3 \leq 76$
- $0.23x_3 \leq 80$
- $9.81x_0 + 8.75x_1 \geq 13$
- $8.75x_1 + 1.26x_2 \geq 12$
- $1.26x_2 + 0.87x_3 \geq 19$
- $9.81x_0 + 1.26x_2 \geq 31$
- $9.81x_0 + 0.87x_3 \geq 20$
- $9.81x_0 + 1.26x_2 + 0.87x_3 \geq 25$
- $9.81x_0 + 8.75x_1 + 1.26x_2 + 0.87x_3 \geq 25$
- $9.41x_0 + 0.53x_3 \geq 10$
- $9.41x_0 + 3.47x_1 \geq 6$
- $9.41x_0 + 9.45x_2 \geq 12$
- $3.47^2x_1^2 + 0.53^2x_3^2 \geq 14$
- $9.41x_0 + 3.47x_1 + 9.45x_2 + 0.53x_3 \geq 14$
- $7.21^2x_0^2 + 0.23^2x_3^2 \geq 18$
- $7.21x_0 + 1.75x_1 \geq 11$
- $1.75x_1 + 0.23x_3 \geq 13$
- $7.21^2x_0^2 + 1.75^2x_1^2 + 1.49^2x_2^2 \geq 18$
- $1.75x_1 + 1.49x_2 + 0.23x_3 \geq 18$
- $7.21x_0 + 1.75x_1 + 1.49x_2 \geq 15$
- $1.75x_1 + 1.49x_2 + 0.23x_3 \geq 15$
- $7.21x_0 + 1.75x_1 + 1.49x_2 + 0.23x_3 \geq 15$
- $-2x_0 + 3x_2 \geq 0$
- $8.75x_1 + 1.26x_2 \leq 66$
- $9.45x_2 + 0.53x_3 \leq 66$
- $9.41x_0 + 3.47x_1 \leq 22$
- $9.41^2x_0^2 + 3.47^2x_1^2 + 0.53^2x_3^2 \leq 38$
- $3.47x_1 + 9.45x_2 + 0.53x_3 \leq 49$

## Step 3: Implement the problem in Gurobi
We will use the Gurobi Python API to model and solve this problem.

```python
import gurobi as gp

# Create a new model
m = gp.Model("optimization_problem")

# Define the variables
x0 = m.addVar(name="hours_worked_by_John", lb=0)
x1 = m.addVar(name="hours_worked_by_Peggy", lb=0)
x2 = m.addVar(name="hours_worked_by_Mary", lb=0)
x3 = m.addVar(name="hours_worked_by_Bill", lb=0)

# Define the objective function
m.setObjective(x0**2 + 9*x0*x1 + 3*x0*x2 + 8*x0*x3 + 8*x1**2 + 4*x1*x2 + 9*x1*x3 + 4*x2**2 + 6*x2*x3 + 4*x3**2 + 9*x0 + 9*x1 + 7*x2 + 7*x3, gp.GRB.MINIMIZE)

# Add constraints
m.addConstr(9.81*x0 <= 132)
m.addConstr(9.41*x0 <= 76)
m.addConstr(7.21*x0 <= 80)
m.addConstr(8.75*x1 <= 132)
m.addConstr(3.47*x1 <= 76)
m.addConstr(1.75*x1 <= 80)
m.addConstr(1.26*x2 <= 132)
m.addConstr(9.45*x2 <= 76)
m.addConstr(1.49*x2 <= 80)
m.addConstr(0.87*x3 <= 132)
m.addConstr(0.53*x3 <= 76)
m.addConstr(0.23*x3 <= 80)

m.addConstr(9.81*x0 + 8.75*x1 >= 13)
m.addConstr(8.75*x1 + 1.26*x2 >= 12)
m.addConstr(1.26*x2 + 0.87*x3 >= 19)
m.addConstr(9.81*x0 + 1.26*x2 >= 31)
m.addConstr(9.81*x0 + 0.87*x3 >= 20)
m.addConstr(9.81*x0 + 1.26*x2 + 0.87*x3 >= 25)
m.addConstr(9.81*x0 + 8.75*x1 + 1.26*x2 + 0.87*x3 >= 25)

m.addConstr(9.41*x0 + 0.53*x3 >= 10)
m.addConstr(9.41*x0 + 3.47*x1 >= 6)
m.addConstr(9.41*x0 + 9.45*x2 >= 12)
m.addConstr(3.47**2*x1**2 + 0.53**2*x3**2 >= 14)
m.addConstr(9.41*x0 + 3.47*x1 + 9.45*x2 + 0.53*x3 >= 14)

m.addConstr(7.21**2*x0**2 + 0.23**2*x3**2 >= 18)
m.addConstr(7.21*x0 + 1.75*x1 >= 11)
m.addConstr(1.75*x1 + 0.23*x3 >= 13)
m.addConstr(7.21**2*x0**2 + 1.75**2*x1**2 + 1.49**2*x2**2 >= 18)
m.addConstr(1.75*x1 + 1.49*x2 + 0.23*x3 >= 18)

m.addConstr(7.21*x0 + 1.75*x1 + 1.49*x2 >= 15)
m.addConstr(1.75*x1 + 1.49*x2 + 0.23*x3 >= 15)
m.addConstr(7.21*x0 + 1.75*x1 + 1.49*x2 + 0.23*x3 >= 15)

m.addConstr(-2*x0 + 3*x2 >= 0)
m.addConstr(8.75*x1 + 1.26*x2 <= 66)
m.addConstr(9.45*x2 + 0.53*x3 <= 66)
m.addConstr(9.41*x0 + 3.47*x1 <= 22)
m.addConstr(9.41**2*x0**2 + 3.47**2*x1**2 + 0.53**2*x3**2 <= 38)
m.addConstr(3.47*x1 + 9.45*x2 + 0.53*x3 <= 49)

# Solve the model
m.optimize()

# Print the solution
if m.status == gp.GRB.OPTIMAL:
    print("Objective: ", m.objVal)
    print("Hours worked by John: ", x0.varValue)
    print("Hours worked by Peggy: ", x1.varValue)
    print("Hours worked by Mary: ", x2.varValue)
    print("Hours worked by Bill: ", x3.varValue)
else:
    print("The model is infeasible")
```