You are building a tiny order-management service that consumes a Kafka topic containing order events for a single trading pair (e.g. BTC-USD). Each message is a JSON object with three fields: orderId (string), side (BUY or SELL), and either qty (int) for a NEW order or fillQty (int) for a FILL order. There is no ordering guarantee across partitions, but every message for the same orderId is delivered to the same partition and thus arrives in FIFO order. Your consumer must maintain an in-memory state machine for every order and print the order’s current status after each message is processed. The statuses are: NEW → IN_PROGRESS → COMPLETED (or CANCELLED). A NEW message always carries the total quantity; a FILL message carries the quantity that just traded. When the cumulative filled quantity reaches the total quantity the order becomes COMPLETED. You will also receive CANCEL messages; a cancel is successful only if the order is still NEW (no fills have arrived). After every message you must emit a single line containing: orderId,side,totalQty,filledQty,status (comma-separated). You may assume the input is well-formed and that fillQty never causes filledQty to exceed totalQty.