{
  "type": "statechart",
  "font": "Pretendard",
  "bg": "#ffffff",
  "nodes": [
    {
      "id": "n0",
      "k": "initial",
      "x": 659,
      "y": 18,
      "w": 12,
      "h": 12,
      "label": "",
      "sc": "#1a1a1a",
      "fc": "#1a1a1a"
    },
    {
      "id": "n1",
      "k": "rrect",
      "x": 575,
      "y": 60,
      "w": 180,
      "h": 50,
      "label": "FREE",
      "sc": "#1a1a1a",
      "tc": "#1a1a1a",
      "fc": "#ffffff"
    },
    {
      "id": "n2",
      "k": "rrect",
      "x": 560,
      "y": 180,
      "w": 210,
      "h": 76,
      "label": "RX_FILLING",
      "sub": "entry / 소유 = RX DMA\ndo / 4096 B 청크 수신",
      "sc": "#1a1a1a",
      "tc": "#1a1a1a",
      "fc": "#ffffff"
    },
    {
      "id": "n3",
      "k": "rrect",
      "x": 575,
      "y": 330,
      "w": 180,
      "h": 64,
      "label": "FULL",
      "sub": "소유 없음 · 프로그램 대기",
      "sc": "#1a1a1a",
      "tc": "#1a1a1a",
      "fc": "#ffffff"
    },
    {
      "id": "n4",
      "k": "rrect",
      "x": 560,
      "y": 470,
      "w": 210,
      "h": 76,
      "label": "PROGRAMMING",
      "sub": "entry / 소유 = SPI DMA\ndo / PP 256 B × 16",
      "sc": "#1a1a1a",
      "tc": "#1a1a1a",
      "fc": "#ffffff"
    },
    {
      "id": "n5",
      "k": "rrect",
      "x": 240,
      "y": 193,
      "w": 170,
      "h": 50,
      "label": "CRC_FAIL",
      "sc": "#1a1a1a",
      "tc": "#1a1a1a",
      "fc": "#ffffff",
      "dash": 1
    },
    {
      "id": "n6",
      "k": "rrect",
      "x": 240,
      "y": 337,
      "w": 170,
      "h": 50,
      "label": "OVERRUN",
      "sc": "#1a1a1a",
      "tc": "#1a1a1a",
      "fc": "#ffffff",
      "dash": 1
    },
    {
      "id": "n7",
      "k": "note",
      "x": 240,
      "y": 470,
      "w": 250,
      "h": 58,
      "label": "INV-04 · INV-05\n버퍼 하나에 소유자는 하나",
      "sc": "#1a1a1a",
      "tc": "#1a1a1a",
      "fc": "#ffffff"
    }
  ],
  "edges": [
    {
      "id": "e0",
      "from": "n0",
      "to": "n1",
      "t": "flow",
      "label": "",
      "c": "#1a1a1a"
    },
    {
      "id": "e1",
      "from": "n1",
      "to": "n2",
      "t": "flow",
      "label": "버퍼 할당 / DMA 시작",
      "c": "#1a1a1a"
    },
    {
      "id": "e2",
      "from": "n2",
      "to": "n3",
      "t": "flow",
      "label": "청크 도착\n[순번·CRC OK]",
      "c": "#1a1a1a"
    },
    {
      "id": "e3",
      "from": "n3",
      "to": "n4",
      "t": "flow",
      "label": "flash_write() 시작",
      "c": "#1a1a1a"
    },
    {
      "id": "e4",
      "from": "n4",
      "to": "n1",
      "t": "flow",
      "label": "WIP=0 / 소유 반납",
      "route": "elbow",
      "lbx": 32,
      "c": "#1a1a1a"
    },
    {
      "id": "e5",
      "from": "n2",
      "to": "n5",
      "t": "flow",
      "label": "청크 도착\n[CRC 불일치]",
      "c": "#1a1a1a"
    },
    {
      "id": "e6",
      "from": "n5",
      "to": "n1",
      "t": "flow",
      "label": "재전송 요청",
      "c": "#1a1a1a"
    },
    {
      "id": "e7",
      "from": "n3",
      "to": "n6",
      "t": "flow",
      "label": "청크 도착\n[빈 버퍼 없음]",
      "c": "#1a1a1a"
    }
  ]
}