Vitess’s Workflow Manager is actually a sophisticated distributed state machine that orchestrates complex, multi-step operations across your Vitess cluster, rather than just a simple monitoring dashboard.

Let’s see it in action with a vreplication workflow. Imagine you’re migrating data from a legacy MySQL instance into Vitess. You’d initiate a vreplication job, which Vitess’s Workflow Manager then takes over.

Here’s a simplified look at how a vreplication workflow might be defined and managed:

{
  "workflow_name": "migrate_users_to_vitess",
  "workflow_type": "vreplication",
  "source_shards": ["zone1-0000000000", "zone1-0000000001"],
  "target_keyspace": "user_vitess",
  "replication_rules": [
    {
      "table_name": "users",
      "columns": ["id", "name", "email"],
      "filter_expression": "id > 1000"
    },
    {
      "table_name": "orders",
      "columns": ["id", "user_id", "amount"],
      "filter_expression": "" // replicate all orders
    }
  ],
  "status": "RUNNING",
  "progress": {
    "zone1-0000000000": {
      "table_progress": {
        "users": 85.5,
        "orders": 70.2
      },
      "estimated_completion": "2023-10-27T10:30:00Z"
    },
    "zone1-0000000001": {
      "table_progress": {
        "users": 92.1,
        "orders": 78.9
      },
      "estimated_completion": "2023-10-27T10:25:00Z"
    }
  }
}

This JSON represents the state of a vreplication workflow. The Workflow Manager continuously monitors the status, tracks progress on each involved shard, and recalculates estimated completion times. If a vreplication task on a specific shard stalls or errors out, the Workflow Manager detects this and can trigger retry mechanisms or alert operators. It’s not just about seeing the progress; it’s about the system actively managing it.

The core problem Vitess’s Workflow Manager solves is managing the inherent complexity and distributed nature of database operations. Tasks like schema changes, data migrations, or resharding aren’t atomic; they involve multiple steps, potentially across many machines, and require careful coordination. The Workflow Manager provides a unified, declarative way to define these operations and a robust engine to execute and monitor them reliably.

Internally, the Workflow Manager leverages Vitess’s distributed coordination service (typically etcd or ZooKeeper) to maintain the state of each workflow. Each step in a workflow is represented as a distinct state. The manager transitions between these states based on the results of sub-operations, ensuring that operations proceed in the correct order and that failures are handled gracefully. For vreplication, this means tracking the progress of the VReplication stream on each tablet, ensuring binlog positions are being consumed, and that data is being written to the target.

You control workflows primarily through the vtctlclient command-line tool. For instance, to start a vreplication workflow, you’d use a command like this:

vtctlclient ApplyVSchema --keyspace user_vitess -vschema '
{
  "sharded_tables": {
    "users": {
      "vindexes": {
        "hash": {
          "type": "hash",
          "column": "id",
          "name": "hash"
        }
      },
      "owner": "user_vitess"
    }
  }
}'

vtctlclient VReplication --keyspace user_vitess --cells zone1 \
  'INSERT INTO _vt.vreplication(db_name, workflow, source_topology, source_addr, target_addr, table_ பிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபிபி

Want structured learning?

Take the full Vitess course →